最近使用欧姆龙PLC开发,使用Fins协议通讯,经历如下过程:

  1. 发起Socket连接
  2. 发起Fins连接
  3. 读写操作指令

结果遇到问题:1/2步骤没问题,到第三步时遇到PLC不再反馈Fins相关信息并结束PLC连接????

  抓包看数据前多了个“00”,不明所以

      抓耳挠腮三天才发现问题:Fins协议要求必须按照Fins格式完整编辑输入数据,多或者少一个字节都不可以,‘0’也不行!!!!

  如:Fins的Header中Length必须和后续数据统一。

    Socket的Send命令也是,数据长度和后面长度参数必须一致,不要以为是0就可以随便写。

 

否则通过抓包你会发现传输已经不再是Fins相关数据了,而是普通字符串数据,如下图:

 

正确图:

 

PS:C#不会遇到这个问题,因为C#不用写数据长度啊!!!!!!

 

posted on 2020-04-14 15:13  Khandasas  阅读(830)  评论(0编辑  收藏  举报