yuki_nishizaki
2021年6月22日 11時31分
お世話になっております。
ある機器を制御するプログラム(RS485通信)をArmadillo 上で作成しています。
Armadillo→機器へ要求送信後に機器→Armadilloの応答(数msec)を返す仕様なのですが、
応答受信時にArmaddilloのポートオープンが間に合わずデータを受信できない事象が発生しています。
過去のフォーラム投稿からArmadillo側で対処が必要だと考えていますが、
お恥ずかしながら知見がない為、なぜ時間がかかるのか原因が特定できていません。
本事象で何かわかること、回避方法等がありました、ご教授いただけると大変助かります。
●機器との通信仕様
・RS485 半二重方式
●環境
・Armadillo-IoT-G3L (linux-4.9-x1-at15)
・言語はpython3.8(pyserialのserialを利用)
●大まかなプログラムの流れ
①シリアル通信をオープンする(ser=serial.Serial('/dev/ttymxc1',201600,timeout=1)
②Armadiiillo→機器への要求を送信(ser.write(message))
③シリアルバッファを消去するためシリアル通信をクローズ(ser.close())
④シリアル通信をオープンする(①と同ポート)
⑤シリアルバッファにデータ(受信)があれば読みこむ
機器の応答時間が早くないとき(50msec)は上記のプログラムの流れでデータを受信できています。
そのため、機器の応答が速いと③→④がArmadilloでは追い付いていなと判断しました。
コメント
yuki_nishizaki
> 大塩です。
>
> > お世話になっております。
> > ある機器を制御するプログラム(RS485通信)をArmadillo 上で作成しています。
> > Armadillo→機器へ要求送信後に機器→Armadilloの応答(数msec)を返す仕様なのですが、
> > 応答受信時にArmaddilloのポートオープンが間に合わずデータを受信できない事象が発生しています。
> >
> > 過去のフォーラム投稿からArmadillo側で対処が必要だと考えていますが、
> > お恥ずかしながら知見がない為、なぜ時間がかかるのか原因が特定できていません。
> > 本事象で何かわかること、回避方法等がありました、ご教授いただけると大変助かります。
> >
> > ●機器との通信仕様
> > ・RS485 半二重方式
> > ●環境
> > ・Armadillo-IoT-G3L (linux-4.9-x1-at15)
> > ・言語はpython3.8(pyserialのserialを利用)
> >
> > ●大まかなプログラムの流れ
> > ①シリアル通信をオープンする(ser=serial.Serial('/dev/ttymxc1',201600,timeout=1)
> > ②Armadiiillo→機器への要求を送信(ser.write(message))
> > ③シリアルバッファを消去するためシリアル通信をクローズ(ser.close())
> > ④シリアル通信をオープンする(①と同ポート)
> > ⑤シリアルバッファにデータ(受信)があれば読みこむ
> > 機器の応答時間が早くないとき(50msec)は上記のプログラムの流れでデータを受信できています。
> > そのため、機器の応答が速いと③→④がArmadilloでは追い付いていなと判断しました。
>
> at15 以降にて、シリアル通信に対するいくつかの修正が行われています。
> ご利用のカーネルを最新版(at19) に変更し、動作検証を行ってみてください。
>
> ご参考までに、最新の製品アップデートページを記載します。
> ■at19 製品アップデート
> https://armadillo.atmark-techno.com/news/20210325/software-update-aiotg…
>
> 以上です。
大塩様
ご教示ありがとうございます。
at19への製品アップデートとプログラムの流れ自体を見直して検証してみようと思います。
それでも解決できない場合はまた質問させていただきます。
at_shinya.koga
アットマークテクノの古賀です。
yuki_nishizakiさん:
>>at15 以降にて、シリアル通信に対するいくつかの修正が行われています。
>>ご利用のカーネルを最新版(at19) に変更し、動作検証を行ってみてください。
>>
>>ご参考までに、最新の製品アップデートページを記載します。
>>■at19 製品アップデート
>>https://armadillo.atmark-techno.com/news/20210325/software-update-aiotg…
>>
>>以上です。
>
>大塩様
>ご教示ありがとうございます。
>at19への製品アップデートとプログラムの流れ自体を見直して検証してみようと思います。
>それでも解決できない場合はまた質問させていただきます。
at19 へのアップデートでも問題が解決しない場合ですが、以下の (3) と (4) を無くしたらどうなるか、試してみて下さいませ。つまり、write() の後、シリアルポートをクローズして再オープンするのではなく、シリアルポートはオープンしたままで、write() の後 read() するように変えることで改善されないか、試してみて下さい。
>>>●機器との通信仕様
>>> ・RS485 半二重方式
>>>●環境
>>> ・Armadillo-IoT-G3L (linux-4.9-x1-at15)
>>> ・言語はpython3.8(pyserialのserialを利用)
>>>
>>>●大まかなプログラムの流れ
>>> ①シリアル通信をオープンする(ser=serial.Serial('/dev/ttymxc1',201600,timeout=1)
>>> ②Armadiiillo→機器への要求を送信(ser.write(message))
>>> ③シリアルバッファを消去するためシリアル通信をクローズ(ser.close())
>>> ④シリアル通信をオープンする(①と同ポート)
>>> ⑤シリアルバッファにデータ(受信)があれば読みこむ
>>>機器の応答時間が早くないとき(50msec)は上記のプログラムの流れでデータを受信できています。
>>>そのため、機器の応答が速いと③→④がArmadilloでは追い付いていなと判断しました。
Armadillo-X1 の場合ですが、RS485 半二重通信を Python で行った例として、こちらの質問スレッドが、もしかすると参考になるかも知れません:
https://armadillo.atmark-techno.com/forum/armadillo/6759
at_syunya.ohshio
2021年6月22日 14時05分
大塩です。
> お世話になっております。
> ある機器を制御するプログラム(RS485通信)をArmadillo 上で作成しています。
> Armadillo→機器へ要求送信後に機器→Armadilloの応答(数msec)を返す仕様なのですが、
> 応答受信時にArmaddilloのポートオープンが間に合わずデータを受信できない事象が発生しています。
>
> 過去のフォーラム投稿からArmadillo側で対処が必要だと考えていますが、
> お恥ずかしながら知見がない為、なぜ時間がかかるのか原因が特定できていません。
> 本事象で何かわかること、回避方法等がありました、ご教授いただけると大変助かります。
>
> ●機器との通信仕様
> ・RS485 半二重方式
> ●環境
> ・Armadillo-IoT-G3L (linux-4.9-x1-at15)
> ・言語はpython3.8(pyserialのserialを利用)
>
> ●大まかなプログラムの流れ
> ①シリアル通信をオープンする(ser=serial.Serial('/dev/ttymxc1',201600,timeout=1)
> ②Armadiiillo→機器への要求を送信(ser.write(message))
> ③シリアルバッファを消去するためシリアル通信をクローズ(ser.close())
> ④シリアル通信をオープンする(①と同ポート)
> ⑤シリアルバッファにデータ(受信)があれば読みこむ
> 機器の応答時間が早くないとき(50msec)は上記のプログラムの流れでデータを受信できています。
> そのため、機器の応答が速いと③→④がArmadilloでは追い付いていなと判断しました。
at15 以降にて、シリアル通信に対するいくつかの修正が行われています。
ご利用のカーネルを最新版(at19) に変更し、動作検証を行ってみてください。
ご参考までに、最新の製品アップデートページを記載します。
■at19 製品アップデート
https://armadillo.atmark-techno.com/news/20210325/software-update-aiotg…
以上です。