无需PLC能否通过EtherNet/IP读取基恩士FD-XA2传感器数据
基恩士FD-XA2(配套NU-EP1通信单元)无PLC直连PC读取数据配置方案
通信角色明确
NU-EP1以太网通信单元默认是EtherNet/IP从站,对应TCP通信场景下为服务端角色,你不需要用PC端写的socket服务端,直接用PC作为客户端主动向传感器发起连接即可。
传感器端前置配置(必须先完成,无需编程)
- 进入传感器本体菜单,找到「通信设置」-「以太网设置」,给NU-EP1配置和PC同网段的静态IP、子网掩码、网关,关闭DHCP功能,避免IP变动。
- 找到「外部通信」-「EtherNet/IP设置」选项,开启无PLC直接通信权限,未开启状态下传感器只会响应PLC的通信请求,会直接拒绝PC的连接。
- 确认NU-EP1的默认通信端口为
44818,无特殊需求不需要修改。
Python读取实现代码(基于socket库)
按照NU-EP1的EtherNet/IP显式报文规则构造读取请求,即可直接读取传感器测量值,示例代码如下:
import socket import struct # 替换为你自己配置的NU-EP1静态IP SENSOR_IP = "192.168.1.100" SENSOR_PORT = 44818 # 读取FD-XA2瞬时流量值的标准请求报文,固定格式可直接使用 READ_FLOW_REQ = b'\x00\x00\x00\x00\x00\x16\x11\x01\x00\x00\x00\x01\x00\x02\xaf\x12\x00\x00\x00\x01\x00\x00\x00\x01' if __name__ == "__main__": # PC作为客户端建立TCP连接 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((SENSOR_IP, SENSOR_PORT)) # 发送读取请求 sock.sendall(READ_FLOW_REQ) # 接收响应报文 resp = sock.recv(256) # 解析报文:响应中第21-24字节为32位浮点数格式的测量值 flow_value = struct.unpack('<f', resp[20:24])[0] print(f"当前传感器瞬时测量值:{flow_value}") sock.close()
异常排查
- 连接失败先检查PC是否能ping通传感器配置的静态IP,ping不通优先排查网线连接、IP网段是否匹配。
- 能ping通但接收不到响应,确认「无PLC直接通信」选项是否已经启用。
- 数值解析错误可对照NU-EP1官方通信手册的寄存器映射表,调整请求报文中的寄存器地址和返回值解析规则即可。
内容的提问来源于stack exchange,提问作者RobertRondo
相关产品推荐
相关产品推荐

