起因
我们的工作主要是工业嵌入式设备的相关的,所以免不了需要与PLC进行数据传输。最初我们的做法是给客户编写PLC的通信程序(块),然后我们或者客户自己整合到完整的PLC程序中。开始我们用的是自定义协议,就是自己定义协议格式,内容,意义等,但由于对协议的制定缺乏足够的经验,应用场合较窄,于是改用业界常用的modbus协议。大多数PLC本身都支持modbus,且提供modbus的通信程序(块),供开发人员配置(简易编写)。
但这样的做法是有些弊端的,从客户的角度看,客户买了我们的设备却需要提供格外成本(人力,或者PLC源码),无形中给我们的设备增加了成本,于是客户就去买其它设备了。所以我们就去寻找PLC是否有支持不需要PLC端编程的协议,如欧姆龙的《HostLink》,三菱的《计算机链接协议》等。这些协议都支持在PLC端不进行编程的情况下,让外部设备(第三方设备)对PLC进行读写操作,当然如果是用的RS232或者RS485,还需配置波特率等相关信息。
当我们遇到西门子的时候,碰壁了,查询了西门子的官网且在官网的社区询问都未得到满意的答案。但业界的确是存在这种协议的,例如组态王就可以在西门子PLC端不添加额外通讯程序的情况下对PLC进行读取操作。没办法,只好使用wireshark进行抓包,发现组态王用的是S7Comm,属于西门子私有的S7协议,未公开。网上有一些S7Comm的分析,有兴趣的搜搜。网上除了协议的分析,在代码上最重要的帮助有2个,一个是wireshark的源码,既然weishark的能识别S7Comm,它的源码里一定含有S7协议;另一个就是libnodave(有源码),它是一个支持与S7-300/400PLC进行连接与数据交互功能,但它也特别指出,这些只是测试代码,如果需要用它连接实际的PLC请确保你知道每条指令的对PLC的意义与功能,自己保证PLC的安全。
posted on 2018-03-20 14:34 hailuntaile 阅读(120) 评论(0) 收藏 举报
浙公网安备 33010602011771号