求助:欧姆龙CP2E PLC用SEND(090)函数以太网向PC传数据遇阻
解决欧姆龙CP2E PLC通过SEND(090)以太网向PC发送信号的问题
一、先排查基础通信链路
- 确认CP2E的以太网口/扩展模块IP和PC在同一网段,用PC ping PLC IP,能通才继续推进
- 关闭PC端防火墙、杀毒软件的通信拦截,或者把PLC IP和FINS默认端口(9600)加入白名单
- 检查PLC的FINS设置:在CX-Programmer里配置FINS节点号(不能和网段内其他设备冲突),启用以太网FINS通信权限
二、核对SEND(090)指令参数
SEND(090)是FINS协议下的主动发送指令,参数错误是失败的常见原因,逐个核对:
- 指令格式:
SEND(090, S, D, C, EM)- S:发送数据的起始地址,比如
DM0000,需和实际发送的数据长度对应 - D:目标PC的FINS节点信息,格式为
[网络号][节点号][单元号],本地网络下PC节点号设为20的话,就填002000(网络号00,节点号20,单元号00) - C:控制字,前两位是数据长度(比如发2字节就是
0002),后两位设为0000(默认无特殊要求) - EM:错误码存储地址,比如
DM0010,指令执行后读取该地址,对照欧姆龙错误码表排查:0000:执行成功0201:目标节点不存在(PC未监听或IP/节点号错误)0301:PLC无通信权限(检查FINS配置)
- S:发送数据的起始地址,比如
- 触发条件必须用上升沿,比如
P_TRIG或P_On,避免指令重复执行或完全未触发
三、PC端接收验证
- 先跳过自定义程序,用欧姆龙官方CX-Integrator自带的FINS通信测试工具,监听PC的9600端口,再触发PLC的SEND指令,看能否收到数据,以此排除PC端程序的问题
- 自定义接收程序需基于FINS协议解析报文:先接收FINS头部,再提取数据段,不能直接读取原始字节
- 确保PC端FINS客户端已正确初始化,节点号和PLC指令里的目标节点号保持一致
四、替代轮询的优化方案
如果SEND(090)调试仍有问题,可尝试这些无需轮询的方式:
- 启用PLC的数据变化通知功能:在CX-Programmer里配置指定寄存器(如DM区),当数据变化时主动向PC发送通知
- 采用MQTT协议:若CP2E支持(需扩展模块或对应固件),通过MQTT broker实现PLC主动上报数据,PC端订阅对应主题接收,性能和稳定性更优
内容的提问来源于stack exchange,提问作者nguyen trong hoang
相关产品推荐
相关产品推荐

