※ ChatGPTを利用し、要約された質問です(原文:シリアル通信でのread関数の戻り値)
シリアル通信でのread関数の戻り値について
このQ&Aのポイント
オムロン製PLCと上位コンピュータをRS232Cで接続し、FINSコマンドを用いてシリアル通信をしようとしています。
read関数が実行されたままになってしまい、-1となる戻り値が返ってきます。
ポートにアクセスできていない可能性があります。質問の内容がわかりにくくても構いませんので、詳細をお教えください。
オムロン製PLCと上位コンピュータをRS232Cで接続し、FINSコマンドを用いてシリアル通信をしようとしています。
現在作っているプログラムの流れは、
・シリアルポート"/dev/ttyS2"のオープン
comm_fd = open("/dev/ttyS2", O_RDWR | O_NOCTTY);
・通信設定
termios構造体を設定
・コマンドフレーム(COMMAND)を作成し、ポートに書き込む
write(comm_fd, &COMMAND, strlen(COMMAND));
・PLCからのレスポンスを読み出す
read(comm_fd, &RESPONSE, 256);
のようにしているのですが、read関数が実行されたままになってしまいます。(エラーコードも返ってこない状態です)
readの戻り値が-1ならポートにアクセスできていないとわかるのですが…
ためしにcomm_fdと違う値をread関数に入れてみたところ(read(6, &RESPONSE, 256)、戻り値は-1となりました。
これはどういう状態になってしまっているのでしょうか?
わかりにくい質問で申し訳ありません。
お礼
回答ありがとうございます。 ご指摘のようにtermiosの設定で"c_cc[VMIN]=1;"としていたためreadが開始されていませんでした。writeで信号がPLCに送信できていなかったため、レスポンスがなかったようです。 申し訳ないのですが、ポートから信号を出せるようにするにはどのような設定が必要なのか、アドバイスがありましたら教えていただけないでしょうか?