FinsTcp连接错误

文章描述了在使用FinsTcp协议与PLC通信时遇到的EndOfFile错误。问题源于缺少握手过程,FinsTcp需要先进行握手才能发送或接收数据。通过查询PLC连接限制、使用Wireshark抓包分析以及检查错误代码和报文内容,最终确定并解决了问题。
摘要由CSDN通过智能技术生成

问题

操作:创建fins tcp连接后,网给定的地址写1。
问题现象:
1、底层通讯库(asio)读取(async_read_some)报错:End of File。对应的解释为 End of file or stream。

解决方案

1、开始往报错方向(End of file)去查询,这个报错指对方关闭接口。 但对方是什么都没有操作。这个时候需要确定连接的这款plc能同时最多创建几个链接(可向欧姆龙客服询问),以确保这款plc能支持开发的功能。
2、后面使用wireshark对通讯进行抓包,此处注意只抓与plc通讯的网口,这样数据少一些,看的时候只看OMRON的数据交互即可。

数据正常通讯的时候:
正常通讯
发生异常的时候:
Error Code:The data length is too long
异常反馈
按照Error Code去找网上找发现没有什么有用的信息。后面发现报文里面的Command才是关键:
Node Address Data Send (Server to Client) 这是握手的报文反馈,但是我发送的并不是握手报文。

综上:当这种情况下发生错误时,是没有先进行握手。Fins tcp需要先进行握手,再发送或接受想要的数据。

FIns Tcp握手指令:
发送:
46494E53 0000000C 00000000 00000000 00000018
46494E53:ASCII编码:FINS;
0000000C:指后面跟的字节长度;
00000000:固定命令;
00000000:错误代码;
00000018:PC节点IP,当设置为0时,会自动获取节点IP。

反馈:
46494E53 00000010 00000001 00000000 00000018 00000017
46494E53:ASCII编码:FINS;
00000010:指后面跟的字节长度;
00000001:固定命令;
00000000:错误代码;
00000018:本机电脑节点IP;
00000017:PLC节点IP。

参考:

https://blog.csdn.net/sgmcumt/article/details/87435778

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值