Armadilloフォーラム

Armadillo-IoT G3でRS232Cのシリアル通信について

t.iwata

2018年1月25日 19時03分

お世話になっております。
Armadillo-IoT G3でRS232Cのシリアル通信について、ご教示ください。
ハードウェアは「Armadillo-IoT G3 + 絶縁RS232C/422/485 アドオンモジュール」という構成です。
「/dev/ttymxc1」ファイルの読み書きをしてシリアル通信を実現しようとしています。
ファイルの読み書き方法はJavaでファイル操作をしています。

シリアル通信の設定は、
・ボーレート:9600bps
・データビット:7bit
・ストップビット:2bit
・パリティ:even
という設定だったので、Armadilloで以下のコマンドを発行して初期設定から設定変更をしました。
stty -F /dev/ttymxc1 9600
stty -F /dev/ttymxc1 parenb
stty -F /dev/ttymxc1 cs7
stty -F /dev/ttymxc1 cstopb
stty -F /dev/ttymxc1 inpck
stty -F /dev/ttymxc1 -istrip
stty -F /dev/ttymxc1 -onlcr
stty -F /dev/ttymxc1 -ixon
stty -F /dev/ttymxc1 crtscts

この状態で通信を試みたところ、通信ができる時とできない時があり不安定な状態になってしまいます。
また通信ができている時でも、受信データの取りこぼしが発生してしまいます。
通信先ハードウェアとWindowsPCで通信を試みると正常な動作していることから、
Armadilloの設定が足りないのだと思われるのですが、よくわからず行き詰っている状態です。

何か打開策がほしく書込みをさせていただきました。
ご教示をよろしくお願い致します。

コメント

at_syunya.ohshio

2018年1月26日 17時44分

大塩です。

> シリアル通信の設定は、
> ・ボーレート:9600bps
> ・データビット:7bit
> ・ストップビット:2bit
> ・パリティ:even
> という設定だったので、Armadilloで以下のコマンドを発行して初期設定から設定変更をしました。
> stty -F /dev/ttymxc1 9600
> stty -F /dev/ttymxc1 parenb
> stty -F /dev/ttymxc1 cs7
> stty -F /dev/ttymxc1 cstopb
> stty -F /dev/ttymxc1 inpck
> stty -F /dev/ttymxc1 -istrip
> stty -F /dev/ttymxc1 -onlcr
> stty -F /dev/ttymxc1 -ixon
> stty -F /dev/ttymxc1 crtscts

記述いただいたシリアル通信設定は上記コマンドで満たしているかと思われますが、
その他設定で何か有効または無効になっている可能性もあります。
「stty -F /dev/ttymxc1 -a」で現在の設定を表示できますので、
そちらを確認していただけますでしょうか。

お世話になっております。
ご回答ありがとうございます。

stty -F /dev/ttymxc1 -aを実施して確認をしてみました。
私が確認したところでは問題ないように見えています。
多少不明な部分もありますので、ご確認をしていただけないでしょうか?

===== stty -F /dev/ttymxc1 -a 結果 =====
speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ;
eol2 = ; swtch = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
parenb -parodd -cmspar cs7 hupcl cstopb cread clocal crtscts
-ignbrk -brkint -ignpar -parmrk inpck -istrip -inlcr -igncr icrnl -ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

=========================

よろしくお願い致します。

at_syunya.ohshio

2018年1月29日 10時16分

大塩です。

> ===== stty -F /dev/ttymxc1 -a 結果 =====
> speed 9600 baud; rows 0; columns 0; line = 0;
> intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ;
> eol2 = ; swtch = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
> werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
> parenb -parodd -cmspar cs7 hupcl cstopb cread clocal crtscts
> -ignbrk -brkint -ignpar -parmrk inpck -istrip -inlcr -igncr icrnl -ixon -ixoff
> -iuclc -ixany -imaxbel -iutf8
> opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
> isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
> echoctl echoke
>
> =========================

設定情報ありがとうございます。
おっしゃる通り、この情報だけでは問題ないように見えますので
お手数ですが以下の情報について、できる範囲で良いのでお教えいただけますでしょうか。

・「絶縁RS232C/422/485アドオンモジュール」のDipスイッチの状態(1~3のスイッチのON,OFF)
・カーネルのバージョン情報([uname -a]で表示可能)
・通信先ハードウェアは何を使用しているか

よろしくお願いします。

お世話になっております。
ご質問していただいている内容の回答を致します。

>・「絶縁RS232C/422/485アドオンモジュール」のDipスイッチの状態(1~3のスイッチのON,OFF)
RS232Cで通信を実施する為、SW1:ON、SW2:OFF、SW3:OFFにしています。

>・カーネルのバージョン情報([uname -a]で表示可能)
コマンドを発行して表示された情報は下記の通りとなりました。
Linux armadillo 3.14.79-at15 #2 SMP PREEMPT Wed Jun 28 10:29:12 JST 2017 armv7l GNU/Linux

>・通信先ハードウェアは何を使用しているか
PLCを使用しています。Armadilloからデータを送信後にPLCからレスポンスが帰ってくる動作になります。

ご確認をよろしくお願い致します。

at_syunya.ohshio

2018年1月30日 10時54分

大塩です。
回答ありがとうございます。

> >・「絶縁RS232C/422/485アドオンモジュール」のDipスイッチの状態(1~3のスイッチのON,OFF)
> RS232Cで通信を実施する為、SW1:ON、SW2:OFF、SW3:OFFにしています。
>
> >・カーネルのバージョン情報([uname -a]で表示可能)
> コマンドを発行して表示された情報は下記の通りとなりました。
> Linux armadillo 3.14.79-at15 #2 SMP PREEMPT Wed Jun 28 10:29:12 JST 2017 armv7l GNU/Linux
>
> >・通信先ハードウェアは何を使用しているか
> PLCを使用しています。Armadilloからデータを送信後にPLCからレスポンスが帰ってくる動作になります。

上記につきまして、問題ないことがわかりました。
お手数ですが、次のことについて確認していただけますでしょうか。

1.実際のビットレート値
両機器のビットレートはコマンド等で9600に設定されているかと思われますが、実際のビットレート値を測ると多少の誤差が発生します。(例:Armadilloの実際のビットレート 9592=約-0.8%のbps誤差)
もしそちらの環境で実際のビットレートを確認可能でありましたら、Armadillo側とPLC側の実際のビットレートを確認していただけますでしょうか。

2.通信不能状態や受信データの取りこぼしについての詳細
最初にいただいた投稿にて書かれていた「通信できない時」「受信データの取りこぼしが発生」について
・通信できない事象が発生したとき、送信側と受信側のどちらが不能となっているでしょうか。
 (送信側が送ることを失敗しているか、送信はOKだが受信側で受け取りができていないか)
・取りこぼしの事象にパターンはありますか。(取りこぼすタイミングが必ず同じ等)

3.エラー情報の確認
通信不能,受信データの取りこぼしが発生した際、次のコマンドを実行してその結果を頂けますでしょうか。
cat /proc/tty/driver/IMX-uart
エラー発生時にはこのコマンドの出力にエラー情報が記載されるかと思います。

よろしくお願いします。

お世話になっております。
質問させていただいていた問題ですが、解決しました。
Armadilloの設定は問題なかったようです。
Armadilloで動作させていたプログラムに問題があり、正常に動作していなかったようです。

お手数をおかけして申し訳ありませんでした。
ご対応ありがとうございました。