Armadilloフォーラム

ArmadillodoのRS485通信 cuコマンドの使用について 

dadada40

2022年3月23日 14時44分

お世話になります。
Armadilloを触り始めてまだ半年、Linuxのコマンドの使い方もまだまだ拙い入門者です。

ここしばらくRS485通信を半2重で行おうと試しているのですがなかなかうまくいかないので書き込ませていただきます。

やろうとしていることはWin上のTeraTermとArmadillo上のCuコマンドでの通信です。
Win側はシステムサコム製のUSB-RS485コンバータ USB-485i RJ45-T4P,ArmadilloにはCON1にOP-AGA-RS01-00
を接続しています。
Armadillo側でcu -l /dev/ttymxc0 -s 115200とcuを起動して同コンソールに手で文字を打ち込むとTeraTerm側に打った文字が表示されます。
次にTeraTerm側に文字を打ち込むと最初の一文字は表示されるのですが2文字以降が表示されません。
その後Armadillo側から文字を送信すると正常にTeraTerm側に打った文字が表示されます。
更にその後にTeraTerm側に文字を打ち込むと最初の一文字は表示されるのですが2文字以降が表示されません。

オシロで波形を確認するとArmadillo->PCは正常なのですが、PC->Armadilloは1文字目の送信後約1ms後に信号レベルがHに変化しています。
この信号はArmadillo側から出ているようです。

カーネルのバージョンをLinux armadillo 4.9.133-at21 #2に更新しても改善しませんでした。
CON2にはアドバリーシステム製のATB-AGAD-DIOが刺さっています。

どこか基本的な勘違いをしていますでしょうか?

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

ファイル ファイルの説明
RS485_Armadillo2PC.png ArmadilloからPCへ文字を送信した時の差動信号 特に問題ないように見える
RS485_PC2Armadillo.png PCからArmadilloへ文字を送信した時の差動信号 送信完了して1ms後に信号レベルがHになり、その後PCからの送信を受け付けない。
コメント

dadada40

2022年3月23日 15時42分

すいません。Armadilloの型名を書き忘れていました。
Armadillo IoT G3
です。

koga

2022年3月24日 6時13分

アットマークテクノの古賀です。

dadada40さん:
>ここしばらくRS485通信を半2重で行おうと試しているのですがなかなかうまくいかないので書き込ませていただきます。
>
>やろうとしていることはWin上のTeraTermとArmadillo上のCuコマンドでの通信です。
>Win側はシステムサコム製のUSB-RS485コンバータ USB-485i RJ45-T4P,ArmadilloにはCON1にOP-AGA-RS01-00
>を接続しています。

>CON2にはアドバリーシステム製のATB-AGAD-DIOが刺さっています。

USB-485i RJ45-T4P は、この製品ですね:
 http://www.sacom.co.jp/product/products_details.php?prid=usb_485i_rj45_…

お手元の Armadillo-IoT G3 には、RS485 接続可能なオプションボードとして、OP-AGA-RS01-00 と ATB-AGAD-DIO の二つを装着していらっしゃるということですが、Armadillo-IoT G3 に装着したオプションボードと USB-485i RJ45-T4P とは、どちらのオプションボードに、どのように接続していらっしゃるのでしょうか?USB-485i RJ45-T4P の端子台の三つの端子(SG, TD+, TD-)とオプションボードの RS485 I/F のピンを接続していらっしゃるかと思いますが、どのように接続していらっしゃるのかを教えて下さい。

>Armadillo側でcu -l /dev/ttymxc0 -s 115200とcuを起動して同コンソールに手で文字を打ち込むとTeraTerm側に打った文字が表示されます。
>次にTeraTerm側に文字を打ち込むと最初の一文字は表示されるのですが2文字以降が表示されません。
>その後Armadillo側から文字を送信すると正常にTeraTerm側に打った文字が表示されます。
>更にその後にTeraTerm側に文字を打ち込むと最初の一文字は表示されるのですが2文字以降が表示されません。
>
>オシロで波形を確認するとArmadillo->PCは正常なのですが、PC->Armadilloは1文字目の送信後約1ms後に信号レベルがHに変化しています。
>この信号はArmadillo側から出ているようです。
>
>カーネルのバージョンをLinux armadillo 4.9.133-at21 #2に更新しても改善しませんでした。
>CON2にはアドバリーシステム製のATB-AGAD-DIOが刺さっています。
>
>どこか基本的な勘違いをしていますでしょうか?

/dev/ttymxc0 で通信できているということですから、CON1 に装着した OP-AGA-RS01-00 の方に接続していらっしゃるように思われますが、OP-AGA-RS01-00 に接続していらっしゃる場合、OP-AGA-RS01-00 の CON2、つまり D-Sub 9 ピンコネクタに、どう接続していらっしゃるのかと、OP-AGA-RS01-00 の設定スイッチ(SW1)の三つのディップスイッチがどうなっているかを教えて下さい:
 https://armadillo.atmark-techno.com/option-products/OP-AGA-RS01-00
 https://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_pro…

dadada40

2022年3月24日 10時36分

アットマークテクノ 古賀様
返信ありがとうございます。

>OP-AGA-RS01-00 の CON2、つまり D-Sub 9 ピンコネクタに、どう接続していらっしゃるのか

OP-AGA-RS01-00 CON2 #3(DATA-) --- #2(TRD-) USB-45I CN2
#5(GND) --- #3(GND)
#7 (DATA+) --- #1(TRD+)

上記の様に接続しています。
OP-AGA-RS01-00 の設定スイッチ(SW1)は全てOFFです。

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

at_shinya.koga

2022年3月24日 13時56分

アットマークテクノの古賀です。

dadada40さん:
>返信ありがとうございます。
>
>>OP-AGA-RS01-00 の CON2、つまり D-Sub 9 ピンコネクタに、どう接続していらっしゃるのか
>
>OP-AGA-RS01-00 CON2 #3(DATA-) --- #2(TRD-) USB-45I CN2
> #5(GND) --- #3(GND)
> #7 (DATA+) --- #1(TRD+)
>
>上記の様に接続しています。
>OP-AGA-RS01-00 の設定スイッチ(SW1)は全てOFFです。

了解しました。SW1 ですが、2 と 3 をオンにして、Armadillo 側の終端抵抗も有効にした場合、状況が変わるかどうか試してみて下さいませ:
 https://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_pro…

USB-485i RJ45-T4P は、マニュアルを見ると、内蔵のジャンパにより工場出荷時点で終端抵抗が有効になっていますので、そのままでよいはずです。RS485 接続の両端で終端抵抗を有効にするのが望ましいですから、今回の事象とは関係ないかも知れませんが、Armadillo 側の終端抵抗も有効にして下さいませ:
 https://emb.macnica.co.jp/articles/6668/
 https://kb.supremainc.com/knowledge/doku.php?id=ja:tc_technology_rs-485…

dadada40

2022年3月25日 8時51分

アットマークテクノ 古賀さん
返信ありがとうございます。

SW2,SW3をONにしてみましたが状況は変わりませんでした。
オシロではなくテスターで信号レベルを確認してみましたが前回報告したときと同じです。

ところでcuコマンドとは別にCでRS485をモニタするプログラムを書いて通信をトライしてみました。
こちらは問題なく通信できています。RS485の差動信号もPCから受信後に0レベルを維持します。
cuコマンドに特有の現象なのでしょうか?

とりあえず通信の確認ができましたので、これで先に進めそうです。
実験用のコードでお恥ずかしいのですが、とりあえず通信できたソースも添付しておきます。
※何か変な事をしていたら指摘いただければ幸いです。

ありがとうございました。

ファイル ファイルの説明
MyRS485.c 半2重のRS485通信で1byteより多くの送受信が確認できたソース 

at_shinya.koga

2022年3月30日 12時29分

アットマークテクノの古賀です。

dadada40さん:
>返信ありがとうございます。
>
>SW2,SW3をONにしてみましたが状況は変わりませんでした。
>オシロではなくテスターで信号レベルを確認してみましたが前回報告したときと同じです。

了解しました。ご確認有り難うございます。

>ところでcuコマンドとは別にCでRS485をモニタするプログラムを書いて通信をトライしてみました。
>こちらは問題なく通信できています。RS485の差動信号もPCから受信後に0レベルを維持します。
>cuコマンドに特有の現象なのでしょうか?

先ほど検索して見つけた以下のページが、もしかすると参考になるかも知れません:
 https://qiita.com/g0117736/items/270942c37483183d98ef

このページの最初の方に、以下の記述があります:

 ずいぶん前から気にはなっていたのですが、screen だとうまく接続できるのに cu だとダメな場合がたびたびありました。接続先からの出力は cu を介して端末に表示されるのですが、どうもこちらからの入力が接続先に送られていないようなのです。

dadada40さんとは逆の症状ですが、もし、このページで紹介されているワークアラウンド(/etc/uucp/port に設定を追加して、RTS/CTS, CD を明示的に設定する)で解消されるのであれば、同じ要因なのだと思います。

以上、もし参考になりましたら幸いです。
ところで、

>とりあえず通信の確認ができましたので、これで先に進めそうです。

cu の動きがおかしいのが解決できなくても、とりあえず問題ないということですね。何よりです。

>実験用のコードでお恥ずかしいのですが、とりあえず通信できたソースも添付しておきます。
>※何か変な事をしていたら指摘いただければ幸いです。

内容を拝見しました。問題ないと思います。