Modbusの利用 (10) CONPROSYS その4 Pythonで制御②

 CONPROSYSシリーズのCPS-MCS341-DS1-131は、拡張モジュールを追加しなくとも本体にディジタル入出力を4チャネルもっています。前回、出力端子の動作をPythonで制御しました。ここでは、入力の状態を見て、出力を制御します。

4チャネルのDIOの状態

 DIO0,1を入力に、DIO2,3を出力に設定してあります。

 出力DIO2にはリレー、DIO3にはLEDを取り付けています。

DIO0の状態で出力を変化

 入力に設定したDIO0に信号入力があるとと、出力に設定したDIO3のLEDが光るという実験をします。DIO0には、近接センサGX-F12B(Panasonic)をつなぎます。

 動作電圧は12~24V、最大動作距離(最大検出距離)は4.0mm±8%です。出力はNPNトランジスタのオープン・コレクタです。

 CPS-MCS341-DS1-131のDIO0,1の入力回路です。

 近接センサはオープン・コレクタなので、次のように接続します。近接センサが反応しない通常時はTr1はOFFなので入力DI0は12V付近の電圧がかかっていて、フォトカプラのLEDは光りません。
 近接センサが反応するとTr1はONになり、DI0はLowになります。するとフォトカプラのLEDに電流が流れ、ディジタル入力端子に有効な信号が入ったことを検知します。

動作確認

 この近接センサは、通常、動作確認用LEDが点灯しています。

 ModbusのDIのステータスです。'1'です。

 近接センサにニッパ(鉄)を重ねると、LEDが消灯します。

 ModbusのDIのステータスです。'0'です。

近接センサの状態でLEDを動かす

 Python(前回の記事参照)で、DIO0(DI0)が'0'ならDIO3(DO3)につながっているLEDをONにします。

import sys, time
sys.path.append('C:\\Users\\ユーザ名\\AppData\\Local\\Programs\\Python\\Python38\\Lib\\site-packages')

from pyModbusTCP.client import ModbusClient

SERVER_HOST = "192.168.111.20"
SERVER_PORT = 502

c = ModbusClient()
c.host(SERVER_HOST)
c.port(SERVER_PORT)
c.open()

while 1:
    time.sleep(0.14)
#    print(c.read_discrete_inputs(0, 4))
    if not c.read_discrete_inputs(0, 1)[0]:
        print(c.read_discrete_inputs(0, 1))
        time.sleep(1.5)
        c.write_single_coil(3, 1)
        time.sleep(0.14)
        c.write_single_coil(3, 0)