ModbusTCP从站(服务端)扫描工具 python实现
扫描指定IP网络下,有哪些modbusTCP服务端[1-247]
参考连接:https://pymodbus.readthedocs.io/en/dev/source/examples.html
from pymodbus.client import ModbusTcpClient from pymodbus.exceptions import ModbusIOException, ConnectionException, NoSuchSlaveException import time def read_holding_registers(client, slave_address): """尝试读取指定从站的保持寄存器40001的数据""" try: # 使用client.read_holding_registers函数读取保持寄存器 result = client.read_holding_registers(0, 1, slave_address) # 检查result是否为ModbusIOException,如果是,则直接处理异常,不尝试访问registers属性 if isinstance(result, ModbusIOException): raise result # 重新抛出异常以便在外部统一处理 print(f"Slave {slave_address}: {result.registers[0]}") except ConnectionException as e: # 如果连接问题或无此从站,则捕获异常并打印信息 print(f"Error connecting to or reading from Slave {slave_address}: {e}") except ModbusIOException as e: # 其他Modbus通信错误 print(f"Error communicating with Slave {slave_address}: {e}") except NoSuchSlaveException as e: # NoSuchSlaveException print(f"NoSuchSlaveException with Slave {slave_address}: {e}") if __name__ == "__main__": # 初始化TCP客户端,这里以默认端口502为例 client = ModbusTcpClient('localhost', port=502) # 请将'localhost'替换为实际的Modbus TCP服务器IP地址 # 连接到Modbus TCP设备 if client.connect(): print("Connected to Modbus TCP device.") # 循环遍历从站地址1至247 for slave_address in range(1, 248): read_holding_registers(client, slave_address) time.sleep(0.200) # 延迟200毫秒 # 关闭连接 client.close() else: print("Failed to connect to the Modbus TCP device.")
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2018-05-16 使用WinDbg分析蓝屏dump原因