Linux でシリアル回線を介してデータを送受信していますが、文字間の遅延を見つけたいと考えています。
Modbus は、メッセージ フレームの境界を検出するために 3.5 文字の遅延を使用します。1.5 文字を超える遅延がある場合、メッセージ フレームは不完全であると宣言されます。
基本的にはCで簡単なプログラムを書いています
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);
// setup newtio
....
tcsetattr(fd, TCSANOW, &newtio);
for(;;) {
res = read(fs, buf, 1);
if (res > 0) {
// store time in milliseconds?
//do stuff
}
}
ここで時間を測定する方法はありますか?または、別の方法でシリアルラインからデータを取得することを検討する必要がありますか?
また、SIGIO にフックして、データがあるときはいつでも信号を取得しようとしましたが、一度に 8 バイトのデータを取得しているようです。
(はい、いくつかの modbus ライブラリが存在することは知っていますが、これを他のアプリケーションで使用したいです)