GR-SAKURA Ver2.24 Ether通信で、PCからコマンドをもらってOKを返すプログラムですが、
何回か通信しているとPCがOKを受信できてない。GR-SAKURAは送信したつもりのようで、そうなるとpingも通りません。
Clientは止まっても接続状態のままです。
止まったことを検出することもできません。
どこが悪いのか判断できない状態です。
間違い、方法があれば知りたいです。
プログラム
void Task_tcp(void) { char land[40] ; int wno; int bno;
Ethernet.begin(mac, ip, gateway, subnet); // *** not Ethernet connect stop *** server.begin();
Serial.print("Task tcp start IP "); Serial.println(Ethernet.localIP()); TcpRcvCnt = 0;
while(1){
// 接続中のクライアントからデータを受信する EthernetClient client = server.available(); // サーバーに接続されていて、データの読み取りが可能なクライアントを取得する if (client) { // クライアントの接続状態 while(client.connected()){ if (client.available()) { // 受信データありチェック rdat = client.read(); // 1バイトの読込み if(rdat != CR){ land[TcpRcvCnt++] = rdat ; } if(rdat == LF){ // デリミタコードチェック land[TcpRcvCnt] = NUL ; TcpRcvCnt = 0; // 受信データ格納ポインタをリセット
Serial.println( land );
if(!strncmp(land,"*CLOSE",6)){ // <<< CLOSECommand >>> delay(2000); // 何故か2秒位待つと長く生きる。 client.print("!OK\n");
bno = land[7] & 0x0f ; // 受信したコマンドで board_no_set(bno); // I/O出力する。 wno = land[9] & 0x0f ;; // PORT4 と PORTDを使用 sig_rly_set(wno,CLOSE); // } } else { delay(10) ; // 10mS待つ } }else{ delay(10) ; // 10mS待つ } } Serial.println(); Serial.println("disconnecting.(2)"); if(!client.connected()){ client.stop(); // サーバーとの接続を終了 } } delay(10) ; // 10mS待つ }}
自己解決
board_no_set(bno); // I/O出力する。の先で12Vのリレーを動かしているのですが、6個同時にONしたとき、GNDが3.3Vと共通になっているため、GNDが振られLANドライバーICのLAN8720が飛んでいるようです。CPUは動いているので微妙な所で飛んでました。