|
|
|
用CP340与丹佛斯软启动器通讯的实例 |
|
|
这是一个PROFIBUS-DP网络下的一个分站,用的是S7-300PLC的CPU313C-2DP,
控制着六台300KW的排海泵,排海泵的电机用丹佛斯软启动器拖动。根据业主方面的要求,现要将四台(还有两台泵没有安装)软启动的运行电流读到PLC,然后上传到主站PLC,最后由中控室的监控计算机机制成表格和曲线。
要读丹佛斯软启动器的电流有多种方法,最经济最省事也最精确的方法就是用通讯方式。
丹佛斯软启动器型号为MCD3000,支持MODBUS的ASCII协议。这样硬件方面只要在PLC上加一个CP340的通讯模块,拉一条屏蔽双绞线接到四台软启动器的RS485通讯端子上,然后为四台软启动器设置不同的通讯地址如4、5、6、7就可以了。剩下的工作就只要编程了。
需要说明的是,在系统中加上CP340模块后,要在电脑上安装CP340的驱动,然后在STEP7里进行硬件组态。具体操作可看CP340手册,里面都有详细的说明和例子。在这里我们只讨论程序的编写。
在这个系统中,PLC就是主站,丹佛斯软启动器就是从站。这里有必要介绍一下通讯过程。
在ASCII协议下,主站和从站之间是采用一问一答的方式通讯,即当主站发送一个从站的地址,比如4#从站地址,4#从站就向主站返回一个值,表示收到信号。这时主站再发送请求命令(比如要读取电流数据),于是从站向主站发送电流数据。从站和从站之间是不能通讯的。打个比方吧,主站就好比是个花心的男人,从站则象是水性杨花的女人。当男人向第一个女人挤眉弄眼时,这个女人便也向他暗送秋波,于是他们开始交往起来。接着男人又去勾引其他女人,只要她们是同一类型的女人,便都会上他的钩。他最多可以勾引128个这样的女人,哈哈,够利害的吧。当然,他也可能会碰到正派的女人或是和他闹分手的时候,那就是通讯出故障了。
再有,主站每次只能和一个从站通讯,不能在同一时刻和多个从站通讯,为了通讯有序进行,我就让主站每隔一秒钟轮流和一个从站通讯。为了方便阅读和理解,我把程序转换成梯形图。
首先,要做一个一秒钟的脉冲,如图,每隔一秒钟M7.0就动作一次。
利用M7.0来计数,累计的数放在DB3.DBW122里面。并初始化通讯参数寄存器DB3.DBW120和DB3.DBW150。
因为只有四个从站,当DB3.DBW122的值大于3时,必需让它返回到0。于是DB3.DBW122的值从0到3的周而复始的变化。
以上几步是每计一个数时就驱动一个中继,下面是每个中继闭合时就向相应的从站发送报文。报文格式必须要符合软启动器的通讯格式。MCD3000支持标准的MODBUS ASCII协议。首先,主站向从站发送地址:“EOT nn LRC ENQ” 转换成16进制数就是“04 nn LRC 05”。nn是从站的通讯地址,比如4#从站,那就是04。LRC为校验码,这种校验码算法也很简单,先把所有报文的数字相加,把相加的得数取反码,再求其补码,最后将补码转换成ASCII的16进制数。因为从站数不多,我笨人用笨办法,用笔算出校验码直接填上去。DB3.DBW120表示要发送从DB3.DBW100到DB3.DBW105这6个字节的数。后面的依此类推。
例如发送4#从站地址:04 30 34 39 38 05 ,把这6个字节分别放到DB3.DBW100到DB3.DBW105里。
当地址报文发出去后,如果线路没有问题和从站地址正确的话,相应的从站响应,就会返回“ACK”, 转换成十六进制数就是06。如果通讯有问题,就会返回“NAK”,转换成十六进制数就是0F。如下图,返回的值就在DB3.DBW150里,我把DB3.DBW150的值挪到DB3.DBW124来,是在调试的时候DB3.DBW150的值变化太快,我根本看不出通讯成功还是不成功,因此也就多些一举了。如果DB3.DBW124等于6,则说明通讯成功,哈哈,美女上钩了,于是得寸进尺开始下一步的请求——读取电流数据。M7.3是发送读取电流的报文的中继,这里延时0.2秒是为了让屏幕上的曲线更平滑。M7.4则是通讯功能块FB3的触发脉冲。
当M7.3动作时,就开始发送请求读取电流的报文了,共7个字节。
调用FB2和FB3功能块,功能块的引脚定义在手册上都有说明,在此不啰嗦了。FB3是发送功能块,上面所说的报文就是通过它发送出去。
FB2是接收功能块,从站返回的数就在以DB3.DBB150为首的几个字节里。字节的长度取决于返回来的数据的长度。
返回的数据报文为:STX 千位 百位 十位 个位 ETX
第一个字节DB3.DBW150为STX,即02,第二个字节为电流的千位数,因250KW的电机的电流一般不会超过1000A,故略去。真正要在屏幕上显示的数是从DB3.DBW152开始。因读上来的是十六进制形式的ASCII数,如此时电流为562,则读取的数分别为:35 36 32。要通过如下计算后变成十进制的数存入DB3.DBW194里。
在第一台泵运行运行状态下,每当DB3.DBW122等于0时,M21.0动作一下,第一台电机的实时电流数值经运算后存入到DB3.DBW194里,接着又把这个数移到DB3.DBW52中。每当DB3.DBW122等于1时,M21.1动作一下,第二台电机的实时电流数值经运算后存入到DB3.DBW194里,接着又把这个数移到DB3.DBW54中。
同样,第三台和第四台电机的实时电流数值最后分别放入DB3.DBW56 和DB3.DBW58中。
最后,别忘了,当某台泵停止时,要把相应的寄存器清零。好了,开始调试。
虽然程序写完后理论上没有错,不过,在调试的过程中我还是遇到了很多麻烦,几经修修改改才写成这个样子。然而最大的麻烦是总是有一个或两个从站通讯不上,并且站号还不确定。比如刚开始是和7#从站通讯不上,等我查来查去,硬件软件都鼓捣一阵,7#通上了,4#又断了。再鼓捣一阵,4#、5#通了,6#、7#又断了。搞了好几天,就是没有四个全通上的。这才只有四个站啊,要真连上128站怎么办了得?我都快失去信心了。实在百思不得其解,便检查一下线是怎么接的。一查还真发现了问题,原来接线电工把软启动器这一端是用电缆的屏蔽层接地,而CP340的串口这一端则是用黄绿双色线接地。线路被严重干扰,哪能正常通讯啊,于是叫他们赶紧把所有接地线都改成双色线,一试,OK,全部通上,大功告成。
更多信息请进 http://user.qzone.qq.com/290355167/infocenter#!app=2&via=QZ.HashRefresh&pos=1335585697 |
|
|
|
评论仅代表评论人个人看法,不表明博客主人及中国工控网同意其观点或其描述 共1条评论 共1页 第1页
|
评论人署名:绿色园林001 |
|
评论时间:2015/1/7 10:04:00 |
我要发表评论 |
|
相关风采图片: |
|
相关技术论文: |
|
|