Snap7主要用于将PC站点与PLC网路完全连接到一起,它具有三个对象组件,分别是客户端、服务器和协作者,这三个对象可以应用,下面这幅图描述了这三个对象之间的联系:
图表 1 Snap7整体框架
对于一般开发人员来说,Server和Partner模式是用不到的,我们主要用的是Client模式,即PLC作为Server,上位机PC作为Client。
2. Snap7源码分析
如果顺利的话,大家打开源码之后是可以运行的,找一个自己身边的西门子PLC进行通信功能测试,如果手头没有PLC,可以关注本公众号的一篇文章《手把手教你搭建西门子PLC仿真环境》。
如果大家看到源码,可以发现提供的snap7.net其实是对snap7.dll的二次封装,snap7.dll是一个C/C++写的类库,我们可以找到一些我们需要的方法。
图表 2 建立PLC连接
图表 3 断开PLC连接
图表 4 存储区读取
图表 5存储区写入
图表 6读取多变量
图表 7写入多变量
这个snap7.net类封装的风格有些老外的风格,会导致我们使用起来很麻烦,于是我便对这个snap7.net做了的封装:
图表 8建立及断开连接
图表 9读取及写入多个字节
图表 10读取及写入多个通信组
图表 11读取及写入多个通信变量
图表 12读取及写入单个变量
通过这些封装,会将snap7.net里晦涩难懂的方法变成我们自己熟悉的方式,这样,我们自己做开发的时候,会更加方便和高效,这里西门子S7协议通信会有PDU及通信组数量的限制,一般来说PDU限制是220个字节,通信组数量限制是20个,也就意味着一次性只能读取220个字节,并且Zui多只能读取20个通信组。
3. 通信测试
通信库编写完成之后,通过TIA V15 + PLCSIM +NETTOPLCISM搭建了一个S7-1500PLC的仿真环境,用于通信测试。
图表 13 西门子仿真环境
基于封装的通信库开发了一个简单的测试平台,分别于S7-200 Smart PLC及S7-1500进行了通信测试,测试结果如下:
图表 14 S7-200 Smart PLC通信测试
图表 15 S7-1500 PLC通信测试