Modbusの利用 (12) CPSN-MCB271-1-041+CPSN-AI-1208LI

 コンテックの低価格マイコンCONPROSYSnanoのCPSN-MCB271-1-041本体に、A-Dコンバータ・モジュールCPSN-AI-1208LIを追加した形で、アナログ電圧を収集します。

 CPSN-MCB271-1-041では、Modbus/TCPが動いています。IPアドレスは192.168.111.21をふりました。Windows10マシンからPython3でアクセスします。

CPSN-MCB271-1-041本体へのWebアクセス

 PCのWebブラウザのURLに、CPSN-MCB271-1-041のIPアドレス192.168.111.21を入れます。パスワードを聞かれるので、mcb271(デフォルト)を入れます。

 A-Dコンバータ・モジュールCPSN-AI-1208LIの設定をここからできます。デフォルトでは、入力が±10V、Modobusからは0~4095の数値が読み出されます。

  リファレンスマニュアル(ソフトウェア編) | CPSN-MCB271-S1-041/CPSN-MCB271-1-041 [日本語]

から、0V入力時0x800が読み出されます。0x800のオフセットがついていると解釈できます。

  入力電圧(V)最大値+9.995117 0x0FFF、最小値-10.000000 0x00

 1LSBは0.004883Vです。

 アナログ入力レンジは、データシートによると、±10V、±5V、±2.5V、0-10V、±20mAが設定できます。

 Modbusの読み出し値です。スロット位置によって、アドレスが変更されます。ここでは1枚しか利用していないので、0が振られています。

入力の接続

 このアナログ・モジュールは12ビットの8チャネル入力です。1番と5番にTL431(約2.5V)の出力をつなぎ、シングルエンド入力で利用します。モジュールには、24ビット・タイプや熱電対対応の製品もあります。

Modbusの仕様

 Modbus/TCPのポートは標準の502です。
 本体は、下記のファンクションをサポートしています。

  • 0x01:Read Coil Statusコイル(DOの読み出し)
  • 0x02:Read Input Status入力ステータス(DIの読み出し)
  • 0x03:Read Holding Registers(保持レジスタの読み出し)
  • 0x04:Read Input Registers(入力レジスタの読み出し)
  • 0x05:Force Single Coil コイル(DOへの1点書き込み)
  • 0x06:Preset Single Register(保持レジスタへの書き込み)
  • 0x0F:Force Multiple Coils(複数コイル、DOへの一括書き込み)
  • 0x10:Preset Multiple Registers(複数保持レジスタへの一括書き込み

 アナログ・モジュールCPSN-AI-1208LIのアクセスは、0x04:入力レジスタだけなので、上記のチャネル設定などはできません。

 アドレスは、拡張スロットに挿入する順番によって異なります。今回はアナログ入力だけなので、入力レジスタ0~7に読み出した各チャネルのデータが収納されます。

プログラム
 
 Modbus/TCPのライブラリをインストールします。
 
pip3 install pymodbustcp
 
 次の記事を参照しました。
 
 
 ライブラリのソースは、
 

にあります。ファンクション名はソースを読みました。

import time
from pyModbusTCP.client import ModbusClient

SERVER_HOST = "192.168.111.21"
SERVER_PORT = 502

c = ModbusClient()
c.host(SERVER_HOST)
c.port(SERVER_PORT)
c.open()
regs = c.read_input_registers(0, 8)
print((regs[0] - 0x800) * 0.004883, 'V')

 実行結果は、2.495213 Vでした。