0

https://github.com/riptideio/pymodbuspymodbusの例を使用する と、正常に動作し、PLC に接続して保持レジスタを読み取っています。しかし、私には1つの問題があります。PLC の電源がオフになると、コードは切断エラーをトラップできません。

from pymodbus.client.sync import ModbusTcpClient as ModbusClient
UNIT = 0x1
def run_sync_client():
  client = ModbusClient('192.168.1.190', port=502)  
  client.connect()
  rr = client.read_holding_registers(1, 4, unit=UNIT)
  # follwoing will write value 10 or 20 to address 1 
  rq = client.write_register(4, 20, unit=UNIT)  
  client.close()
  print (rr)
  print (rr.registers) ## This reads from input registers of the Modbus Slave / Server 

  if __name__ == "__main__":
      run_sync_client()    

試してみました..次に、client.connect()の場合。誰かがこれを行う方法を提案できますか。ありがとう

4

2 に答える 2

1

client.connect()との代わりに以下のコードを試してくださいprint(rr.registers)

if client.connect():
    ...  # do stuff

    if not rr.isError():
        print(rr.registers)
    else:
        print(rr)
else:
    print('Connection problem')
于 2019-12-09T13:56:11.913 に答える
0

わかりました、さらに読んで試してみると、次のように機能するようになりました。私は間違っているかもしれません。しかし、私のコードを共有して、私のような初心者が出発点を持てるように支援したいと思います。コードは次のとおりです



import logging
UNIT = 0x1


def run_sync_client():
    try:
        #client = ModbusClient('192.168.1.190', port=502)  
        client = ModbusClient('localhost', port=502)  
        client.connect()
        #connected =1

    except:
        print("modbus error")
   # "Read write registeres simulataneously")
    try:
            rr = client.read_holding_registers(1, 4, unit=UNIT)
            # following will write value 10 or 20 to address 1 
            rq = client.write_register(4, 20, unit=UNIT)  
            # close the client
            client.close()
            print (rr)
            print (rr.registers) 
    except Exception as e:
            print ("Modbus Connection returned Error ",e)
if __name__ == "__main__":
    run_sync_client()

これは正常に機能しており、tcp 経由で plc から値を取得しています。現在、非同期接続に取り組んでいます。いくつかの疑問といくつかの答え(もしあれば)で戻ってきます;)

于 2019-12-12T05:26:53.150 に答える