背景:
我们现在做锅炉节能控制,都是在原有的控制系统上加上西门子的控制器,把我们的算法写在西门子控制器中,通过通讯的方式读取第三方系统的数据运算后把控制指令再发回去。因为第三方系统使用的系统不同,目前比较多的如ABB,施耐德,GE,上海新华,和利时,浙大中控等,为了实现和这些系统做的控制系统,就要有一个比较合理的通讯方式,目前采用的是opc方式通讯。
目前采用的通讯方式:
目前采用opc方式,锅炉也是采用母管制的,所以要同时把整个母管中链接的锅炉的数据都采集过来才好,这样数据两比较大,在大量数据交换的情况下,速度比较好。我们现在在向大型锅炉控制上转型,大型锅炉都是一炉一机的,针对我们的现在的要求不太合适,我们的特点是需要交换的数据量小最多两三百点,但是要求速度快。我们目前的通讯方式是用pc和第三方系统通讯然后pc和PLC通讯,pc中用wincc把读取到的数据转写到plc的变量中,wincc中如果脚本执行的速度过快,则影响到wincc的其他的功能,所以目前最快也就是1s的周期。
目前的技术需求:
而针对一炉一机这种数据量小,要求速度快的通讯特点,modbus通讯方式更合适,modbus是比较早的通讯协议,大多数的智能仪表都支持,控制系统也都支持,所以不存在无法通讯的难点。为了实现这个通讯,我于2014年的年底在江苏阜宁澳洋热电厂做了测试。
项目硬件需求:
江苏阜宁澳洋热电厂采用的是和利时的DCS控制系统,因为我们的控制思路是在原有控制系统基础上做的程序,所以硬件中不包含io模块采用西门子ps407,400控制器以及cp441通讯模块。网上采购232通讯接头,自制232通讯线。
硬件组态:
硬件组态很简单,只要按照说明资料一步步操作就可以了,这里没有什么好说的。
遇到的问题:
1、接线。网上搜索到的232接线图:
按照这个接线图连接后无法通讯,后来我考虑到modbus的通讯需要告诉对方是否准备还收发数据以及是否收发结束,所以应该状态也发给对方才行,所以把上面的接线图改成:
实现了硬件连接,可以通讯了。
2、通讯格式设置:
大家都知道西门子的数据存储格式和其他的公司有点不一样,西门子是低字高位,其他公司大多数都是采用的高字高位,如果只是传输字节的话,两者是没有区别的,如果用modbus传输32位的数据就需要注意这个问题了,因为modbus只是原封不动的把药传输的32位地址的数据传过去,具体这些位中式什么它不管的,所以如果没有注意到这个高低位的问题,很有可能你都不知道传过去的是什么。对方能够实现换位功能,则只要采用4321的数据格式就行了,否则就要我们手动把需要传输的数据在传输前或者接收后进行换位操作。第一次使用没有注意这个问题,通讯后的数据全变了,后来换位后正常了。
3、处理:
在实际测试使用过程中处理了前面说的问题后,又遇到了新的问题。实数,整数都能正确通讯,只有bool量无法通讯,只要增加bool量,则第三方系统报错,通讯中断,咨询技术服务人员也没有解决问题,后来我想既然整数能够正确处理,那么我就把bool量打包成字节按整数传输,这样还省了需要传输的变量数,只是双方都需要编程,发送bool量方打包数据把8个bool量转换成一个字节的整数,接收方再把这个整数分解成8个bool量。
通过以上的处理,终于实现的西门子400控制器通过modbus与和利时dcs系统的通讯。