Armadilloフォーラム

Armadillo-IoTのRS232cでのライト点灯

kiu_kihara

2018年10月18日 12時14分

ハードウェアの知識がほぼありませんが、お客様の要望で試験的にarmadillo-IoTを導入しており、RS232c経由でライトを点灯させようとして行き詰まっています。

ライトの電源容量が大きいためパトライト社のPHC-D08 インターフェースコンバータを利用しています。

・Armadillo-IoT RS232CアドオンモジュールのTTYデバイスファイルは「/dev/ttymxc6」とマニュアルに記載
・PHC-D08 インターフェースコンバータの通信規格はRS-232c準拠、9600bps, データ長8ビット, ストップ1ビット、パリティなし、フロー制御なし

cu -l /dev/ttymxc6 -s 9600

上記コマンドを打つとConnected.と表示されるがその後ターミナルが何も受け付けない状態となってしまいます。

rubyのserialportモジュールを利用してみても何も返却されず繋がっているのかどうかすら分からない状態です。

require 'serialport'
 
SerialPort.open('/dev/ttymxc6', 9600, 8, 1, SerialPort::NONE) do |com|
  while true
    cc = com.getc
    p cc
    break if (cc == "¥n")
  end
end

-> nilが返却されます。

boot時のRS232モジュール認識はされています。

armadillo_iotg_addon addon: Atmark Techno RS232C board detected at Add-On Module I/F 1(Rev 2, SerialNumber=4735).

素人すぎてどこから理解すれば良いのかも分かっていません。もしお時間ある方がいましたら教えていただけるととても嬉しいです。

コメント

saitoh

2018年10月18日 15時52分

一般論になりますが。
・まずはarmadilloは使わずにWindowsPCの通信ソフトでインターフェースコンバータを 手動操作
 してみる(キーボードから入力できる文字だけで動作テストは出来ると思います)。
これがダメなら、ケーブル、インターフェースコンバータ、パトライト側に何か原因がありそうです。

トラブル原因としてありがちなのは
・ストレートケーブルとクロスケーブルのどちらを使うべきかの食い違いで送受信できない
・ハードウェアフローコントロールの設定の食い違いで送信できない

2~3000円のLED式RS232Cを買えば、CTS/RTC/DCD/DTRがどうなっているかわかります。また、9600bpsでしたら1バイトでも送受信があればTXD/RXDがチカッっと点灯するのが目視で分かります。これでそもそもコマンドが送れてないのか、、送れてるが反応がないのか、反応が返ってきてるが画面に出てこないのか、などが弁別できます。
こんなの
https://www.sanwa.co.jp/product/syohin.asp?code=D27-25

kiu_kihara

2018年10月18日 16時03分

ありがとうございます!早速購入して試してみます。
後日結果を共有いたします。

kiu_kihara

2018年10月22日 17時04分

利用していたのがリバースケーブルだったのでストレートケーブルに変更し、マニュアル記載のttymcx6ではなくttymcx0にアクセスしたところ無事に接続できました。

繋がってしまえば単純な事だと理解できましたが、アドバイスがなければもっと時間をつかってしまっていたと思います。本当に助かりました。ありがとうございます。

接続のテストは下記のようにしました。

#コマンド実行
echo @??M! > /dev/ttymxc0
 
#もう一つターミナルを立ち上げレスポンスをループして受信
while true; do cat /dev/ttymxc0; done;

rubyのソースも共有します。

require 'rubygems'
require 'serialport'
 
$serial_port = '/dev/ttymxc0'
$serial_baudrate = 9600
$serial_databit = 8
$serial_stopbit = 1
$serial_paritycheck = 0
 
sp = SerialPort.new($serial_port, $serial_baudrate, $serial_databit, $serial_stopbit, $serial_paritycheck) 
sp.read_timeout=1000
sp.write "@??M!"
sp.close