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)をつなぐと、摂氏の整数値を表示します。対応する温度範囲は、-2001370℃です。

 今回は常温付近で使うので、小数点第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)

 整数表示に変更されました。

 実験セットです。