ブログ

Armadillo-640:RS232C-パラレルI/O変換器(CNV-I/O TB)を使う

at_kazutaka.bito
2022年3月7日 17時43分

Armadillo-640で、RS232C-パラレルI/O変換器(CNV-I/O TB)を使う方法です。

1. 接続

下記写真のようにArmadillo-640のRS232CコネクタにCNV-I/O TBを接続します。

CNV-I/O TBのパラレルI/O側の接続、設定、制御コマンド等の詳細な説明は、CNV-I/O TBのマニュアルを参照ください。

2. 必要なパッケージのインストール

ここでは、例として、CNV-I/O TBとのシリアル通信をPythonスクリプトで行います。
Armadillo-640をインターネット接続可能なネットワークに接続して、必要なパッケージをインストールします。

パッケージ情報をアップデートします。

root@armadillo:~# apt-get update

補足)上記コマンドでエラーになる場合は、 Armadillo-X1/IoT(G3/G3L)/640/610:apt-get updateでエラーになる場合 の方法でアップデートします。

python3とpyserialをインストールします。

root@armadillo:~# apt-get install python3
root@armadillo:~# apt-get install python3-pip
root@armadillo:~# python3 -m pip install pyserial

3. CNV-I/O TBの入力ポートの値を取得する

CNV-I/O TBに「I」「LF(ラインフィード)」を送信することで、入力ポートの値を取得できます。
下記内容でPythonスクリプト(ファイル名をdin.py)を記述します。

din.py

import serial

ser = serial.Serial('/dev/ttymxc2', 9600, rtscts=True, timeout=10)

cmd = bytearray([0x49,0x0a])

ser.write(cmd)
res = ser.readline()

print(res)

補足)上記スクリプトの主なパラメータについて
ser = serial.Serial('/dev/ttymxc2', 9600, rtscts=True, timeout=10)
 /dev/ttymxc2:Armadillo-640のRS232Cコネクタのシリアルデバイスファイル名
 9600:CNV-I/O TBの通信速度を9600bpsに設定した場合
cmd = bytearray([0x49,0x0a])
 [0x49,0x0a]:「I」「LF(ラインフィード)」のASCIIコード

din.pyを実行すると、CNV-I/O TBからの応答(入力ポートの値)が下記のように表示されます。

root@armadillo:~# python3 din.py
b'I[IN7-4の値][IN3-0の値]\n'

実行例)

root@armadillo:~# python3 din.py
b'I35\n'

上記の場合、"35"は下記を意味します。
3:IN5、IN4が入力ショート状態。IN7、IN6が入力オープン状態。
5:IN2、IN0が入力ショート状態。IN3、IN1が入力オープン状態。

4. CNV-I/O TBに出力ポートの値を設定する

CNV-I/O TBに「O」「OUT7-4の出力値」「OUT3-0の出力値」「LF(ラインフィード)」を送信することで、出力ポートの値を設定できます。
下記内容でPythonスクリプト(ファイル名をdout.py)を記述します。

dout.py

import serial
import sys

args = sys.argv
ser = serial.Serial('/dev/ttymxc2', 9600, rtscts=True, timeout=10)

cmd = bytearray(4)

cmd[0] = ord('O')
cmd[1] = ord(args[1])
cmd[2] = ord(args[2])
cmd[3] = ord('\n')

ser.write(cmd)
res = ser.readline()

print(res)

補足)上記スクリプトの主なパラメータについて
ser = serial.Serial('/dev/ttymxc2', 9600, rtscts=True, timeout=10)
 /dev/ttymxc2:Armadillo-640のRS232Cコネクタのシリアルデバイスファイル名
 9600:CNV-I/O TBの通信速度を9600bpsに設定した場合
cmd = bytearray(4)
 4:CNV-I/O TBへのコマンドのバイト数(4バイト固定)

dout.pyは、出力ポートの値([OUT7-4の値]、[OUT3-0の値])を引数に実行します。
CNV-I/O TBからの応答(出力ポートの設定値)が下記のように表示されます。

root@armadillo:~# python3 dout.py [OUT7-4の値] [OUT3-0の値]
b'I[OUT7-4の値][OUT3-0の値]\n'

実行例)
dout.pyの引数を"5"、"A"で実行すると、CNV-I/O TBの出力は下記のようになります。
5:OUT6、OUT4をON。OUT7、OUT5をOFF。
A:OUT3、OUT1をON。OUT2、OUT0をOFF。

root@armadillo:~# python3 dout.py 5 A
b'O5A\n'