最近使用欧姆龙PLC开发,使用Fins协议通讯,经历如下过程:
- 发起Socket连接
- 发起Fins连接
- 读写操作指令
结果遇到问题:1/2步骤没问题,到第三步时遇到PLC不再反馈Fins相关信息并结束PLC连接????
抓包看数据前多了个“00”,不明所以
抓耳挠腮三天才发现问题:Fins协议要求必须按照Fins格式完整编辑输入数据,多或者少一个字节都不可以,‘0’也不行!!!!
如:Fins的Header中Length必须和后续数据统一。
Socket的Send命令也是,数据长度和后面长度参数必须一致,不要以为是0就可以随便写。
否则通过抓包你会发现传输已经不再是Fins相关数据了,而是普通字符串数据,如下图:
正确图:
PS:C#不会遇到这个问题,因为C#不用写数据长度啊!!!!!!