工业控制中,上位机软件必不可少的是和PLC通讯,方式有很多种,很常用的一种是OPC,关于OPC通信协议或者是通信标准,可以自行百度,不多写了,主要将VB.NET 和PLC通讯的过程记录下来,以免时间太长忘掉。
因为是和PLC用的是西门子,很长一段时间用的都是西门子提供的OPC软件,OPC服务器也是西门子提供的程序,如下图SIMATIC_NET PC Software V13 SP2
后来听说西门子的OPC通信比较慢,而且安装比较复杂,但是一直没有好的替代,直到一个偶然的机会了解到KepServer作为通信的服务器。如下图KepServerEx-6.4
1:OPC服务器,一直觉得服务器这个东西很虚,没有做过服务器,理解不了服务器的概念,这个opc服务器就是为opc通信提供底层通信支持的,也就是说有了这个服务器,我们不用考虑我们需要通信的PLC是什么,也不用考虑具体的通信的细节等等,甚至不用考虑通信的下位机是不是PLC,只要KepServer这个OPC服务器支持。(也就是说通信的下位机支持OPC通信协议,并且KepServer有或者能找到对应的驱动程序)也就是说,有了opc服务器,我们只要和服务器通讯就可以了。具体PLC的选择,在服务器中进行,程序不要考虑。
2:X86和X64的区别,电脑有32位和64位的区别,对应的程序也有X86和X64的区别。32的意思就是计算机的字长是32个位,那么计算机寻址的范围最大为2的32次方减1个字节,因为计算机指针存储的单位是字节,超出这个范围的内存地址,在计算机的cpu中已经无法表示了。32位的字长只能存储最大2的32次方减1的地址,也就是4294967296个字节除以1024等于4194304个KB再除以1024等于4096个MB等于4G,超出这个值的地址,CPU无法识别,所以32位的电脑,增加内存超过四个G意义也不大。但是64位的电脑就不一样了。同样按照上面的计算方式,64位的寻址大小可以达到2的64次方-1位。大概是16,777,216T,也就是一千六百多万T。
说多了,总结一下知识也是自己学习,因为之前的物理内存的限制,计算机以32位的居多,因为内存很少有超过4个G,那么64位字长太浪费。现在的内存,随随便便八个G,所以64位的计算机在将来会越来越多。
再说程序,一般来说64位的计算机可以运行32位计算机的程序,因为寻址是兼容的,怎么做运算都不会冲突。但是针对64位计算机生成的程序难以在32位的机器上运行。因为32位的机器无法表示4g以外的地址。
3: 康耐视的Visionpro不是这样 ,至少我试了8.3的是不行的,32位的程序正在64位的机器上也会报错一大片。安装可以安装,但是调用DLL的时候就会报错,程序会运行不了。这就会造成一个问题,运行VisionPro的64位电脑再连接KepServer服务器就会出现冲突,opc会提示“没有注册工厂类”那么就要想别的办法,我看前辈用的方法是做两个程序,然后用一个dat文件进行通讯,一个程序负责和KepServer通讯,一个用来处理VisionPro视觉。
4:OPC服务配置:KepServer的安装过程比较傻瓜,Next就可以搞定,添加通道,添加设备网上也有很多教程。以西门子S7—1200为例,主要的两个,一个是选择驱动程序,这里选择TCP/IP ,还有UA DA等方式,还没有测试。
另外一个就是设备的IP地址,192.168.2.5
选择型号 ,填写IP地址之后就可以添加通道了,
这样服务器就配置完成了,如果连接有PLC,可以让值改变测试一下有没有成功。点击如上图所示的测试。
点击Quick Client 找到我们添加的Item,如上图,在没有连接成功的情况下,会显示质量为:Bad Update count 为1,如果连接成功,PLC相应值变化,Update的个数也会发生变化。
5:开始客户端的工作,
5.1 :引用DLL
5.2创建OPC服务器
5.3创建组和Items
5.4或者变化值onchang
5.5写入值
6,opc很重要的是服务器,组,items ,item的概念,是层层向下的,上面的代码段并不是最简洁的代码段,还有别的方法更方便的调用。需要再去研究,有很多不足之处,我也是参考别人的代码,感谢热心分享的大神。
7,客户端程序引用的dll都是从网上下载的,一直再找64位版的,可惜一直没有成功,下载的标准是64位版,但是程序还是会出错。如果有64位程序成功的,希望也可以指点我一下。交流加QQ243361696
8,调用的过程中,程序会提示没有注册工厂类……这个时候就要注册dll,方法也能百度到。
VB.net或者C# 通过kepserver和西门子PLC通信的就是这样,验证成功了。但是有几个问题没有解决
1:64位的程序调用问题,应该是DLL不支持可以用32位的DLL封装64位的程序吗?还不会弄这个
2:代码简洁问题,已经在group中添加了item,写数据或者捕捉onchang的时候应该就不用重复添加了
后面安装了一下LabView ,发现lab的OPC 服务器和 KepServer简直一模一样 ,网上查到说Labview就是买的KepServer的版权。Labview叫做DSC,过几天也会写一篇博文记录一下,通信的过程,以免后面忘掉。