Modbusの利用 (11) 温度調節器KT7
コンパクトな形状の温度調節器は、いろいろなセンサが利用でき、PID制御をするために出力にリレーを備え、ヒータなどを制御できます。各社から多種多様な製品が出ていて、その中にはRS-485のインターフェースをもつモデルも少なくありません。通常のモデルより4~6千円高い価格設定です。
通信プロトコルは、会社独自のもの、Modbus/ASCII、Modbus/RTUなどに対応しています。ここでは、パナソニックのKT7 AKT71111001をモノタロウから入手しました。
●KT7 AKT71111001のおもなスペック
- マルチ入力タイプ(熱電対/測温抵抗体/電流/電圧)
- 温度制御が可能(ON/OFF制御/PI制御/PD制御/P制御/オートチューニング付きPID制御)
- 制御出力 リレー接点
- 警告出力 オープン・コレクタ
- 電源 AC100~240V
- DINレール取り付けタイプ
- 本体寸法(幅×奥行×高さ) 22.5×75×100mm
●センサの接続と設定
5番と6番端子に熱電対Kをつなぎます。1番と2番に電源(本モデルはAC100V)をつなぐと、摂氏の整数値を表示します。対応する温度範囲は、-200~1370℃です。
今回は常温付近で使うので、小数点第1位を表示するように、パネルの操作で変更します。この変更で、対応する温度範囲は、-199.9~400.0℃になります。
●KT7 AKT71111001の通信手順の初期設定
プロトコル、
初期値 プロトコル;Modbus/ASCII、アドレス;0 |
これを、次のように変更しました。
プロトコル;Modbus/RTU、アドレス;1 |
通信条件、
初期値 ボーレート;9600bps、パリティ;Even、ストップ・ビット;1 |
これを、次のように変更しました。
ボーレート;9600bps、パリティ;Non、ストップ・ビット;1 |
変更手順は、製品に同梱されているマニュアルに従います。マニュアルは、同社のWebからダウンロードもできます。
●通信手順
Modbus/ASCII、Modbus/RTUの通信手順は、同社のWebからダウンロードしました。
KT7 温度調節器 通信取扱説明書
サポートされているファンクションは、次の二つです。
- 03 Read Holding Register スレーブの保持レジスタの内容を読み出す
- 06 Preset Single Register スレーブの保持レジスタの内容を変更する
レジスタは、0x001から始まり00A1H(161)まであります。温度計として利用するだけなら、
- 入力種類選択のアドレス0044H 今の設定値 0001H:K[-199.9~400.0°C]
- PV(入力)値読み取りのアドレス0080H 7セグLEDに表示している温度
の二つです。どちらもファンクション03で読みます。
●接続
PCには、USB-RS485変換ボードを利用します。アマゾンで入手しました。
USB To RS485 485 コンバータ 変換 アダプタ win7 8 XP Vista Linux Mac OS を サポート
このボードのAとB端子を、KT7の電話用モジュール・コネクタ(6極)の中央の2本につなぎます。Aを+(赤色の線)、Bを黒色の線につなぎました。色はモデルによって異なるかもしれません。同梱のマニュアルにモジュールの説明があります。
ケーブルは約50cmで、終端は無視して実験をしています。
●プログラム 温度の読み出し
Windows10でPython3を使います。ライブラリを入れていない状態だったら、次の二つをインストールします。
pip3 install pyserial
pip3 install modbus_tk
デバイスマネージャでUSB-RS485変換ボードのCOMポートを確認します。COM3でした。
import serial import modbus_tk.defines as cst from modbus_tk import modbus_rtu PORT = 'COM3' Address = 1 master = modbus_rtu.RtuMaster(serial.Serial(port=PORT, baudrate=9600, bytesize=8, parity='N', stopbits=1, xonxoff=0)) master.set_timeout(10) master.set_verbose(True) print("connected") A1 = master.execute(Address, cst.READ_HOLDING_REGISTERS, 128, 1)[0] print(A1/10,'V')
温度が読み出されます。マニュアルには読み出したデータのフォーマットは書かれていません。10進で読み出して10で割りました。
●プログラム 入力種類選択の変更
小数点第1位まで表示するように設定していました。
入力種類選択(0044H)に0を書き込むと、熱電対K、整数表示になります。
読み書き値 | センサの種類と表示 |
---|---|
0000H | K[-200~1370°C] |
0001H | K[-199.9~400.0°C] |
0002H | J[-200~1000°C] |
0003H | R[0~1760°C] |
以下略 |
0を書き込みました。
import serial import modbus_tk.defines as cst from modbus_tk import modbus_rtu PORT = 'COM3' Address = 1 master = modbus_rtu.RtuMaster(serial.Serial(port=PORT, baudrate=9600, bytesize=8, parity='N', stopbits=1, xonxoff=0)) master.set_timeout(10) master.set_verbose(True) print("connected") s1 = master.execute(Address, 6, 68, output_value=0) print(s1)
整数表示に変更されました。
実験セットです。