我正在设置一个通过以太网TCP / IP modbus连接到客户端的新TCP Server,并且应该每隔几秒钟将某些值推送到给定的modbus寄存器(hr = 6022)。我看不到脚本引发的任何异常/错误,但客户端未接收到任何数据。使用StartTCPserver命令,我希望看到任何网络流量(至少是握手),但是在Wireshark上看不到任何流量。下一个可能的诊断是什么?
我尝试在本地运行类似的脚本(没有外部以太网连接);一个充当客户端,另一个充当服务器,并且确实看到客户端寄存器上的值更新。
from pymodbus.server.sync import StartTcpServer
from pymodbus.device import ModbusDeviceIdentification
from pymodbus.datastore import ModbusSequentialDataBlock
from pymodbus.datastore import ModbusSlaveContext, ModbusServerContext
import time
import logging
FORMAT = ('%(asctime)-15s %(threadName)-15s'
' %(levelname)-8s %(module)-15s:%(lineno)-8s %(message)s')
logging.basicConfig(format=FORMAT)
log = logging.getLogger()
log.setLevel(logging.DEBUG)
def run_server():
store = ModbusSlaveContext(
ir=ModbusSequentialDataBlock(6022, [152, 276]),
zero_mode=True
)
context = ModbusServerContext(slaves=store, single=True)
StartTcpServer(context, address=("192.168.10.2", 502))
if __name__ == "__main__":
run_server()
答案 0 :(得分:0)
从未到达run_server()
之后的行。可以将连接到服务器的代码放置在其他脚本中;
from pymodbus.client.sync import ModbusTcpClient as ModbusClient
cli = ModbusClient('192.168.10.2', port=502)
assert cli.connect()
res = cli.read_input_registers(6022, count=1, unit=1)
print(res.registers[0])