作者 | 主题 |
---|---|
凌飞翼 奇侠 经验值: 7092 发帖数: 3450 精华帖: 26 |
楼主 2012-09-28 21:09:32
主题:【分享】自由口模式多从站轮询
这几天研究了本论坛关于自由口通讯的帖子,感谢各位提供的金点子。
把个人PLC与两个WP仪表、两个ZW测量仪通讯的收获共享如下: 1、多从站,不同协议的仪表。等间隔轮询(老懷提醒:可以根据从站的重要程度分配轮询次数)。 2、只设一个接收中断子程序,在该子程序中开延时发送中断。 3、只设一个发送子程序,先根据上次的接收缓存区内的特征字符,分类转存接收的数据,以便深度处理。 4、设置一个通讯分配计数器,根据计数器的值,选不同发送字符串。 //发送中断子程序 Network 1 LD SM0.0 //接收延时到标志位置位 = M0.0 Network 2 LD SM0.0 INCB SB31 //多从站轮询计数器 AB> SB31, VB31 MOVB 1, SB31 Network 3 // 缓存转移 LD SM0.0 LPS AB= VB201, 16#40 //WP仪表回应特征 LPS AB= VB203, 16#35 BMB VB200, VB600, 23 //5#WP移动接收缓冲区数据到VB600数据区 LPP AB= VB203, 16#33 BMB VB200, VB700, 23 //3#WP移动接收缓冲区数据到VB700数据区 LPP AB= VB201, 16#AA //ZW仪表回应特征 LPS AB= VB202, 8 BMB VB200, VB800, 74 //8#ZW移动接收缓冲区数据到VB800数据区 LPP AB= VB202, 5 BMB VB200, VB900, 74 //5#ZW移动接收缓冲区数据到VB900数据区 Network 4 // 发送指令(SB31为发送计数器,VB31存放通道数量) LD SM0.0 LPS DTCH 10 //中断分离 AB= SB31, 1 XMT VB300, 0 //8#ZW读指令数据在VB300起始的5个字符中 LRD AB= SB31, 2 XMT VB310, 0 //5#ZW读指令数据在VB310起始的5个字符中 LRD AB= SB31, 3 XMT VB320, 0 //5#WP读指令数据在VB320起始的9个字符中 LPP AB= SB31, 4 XMT VB340, 0 //3#WP读指令数据在VB340起始的9个字符中 //接收中断子程序 Network 1 LD SM0.0 RCV VB200, 0 MOVB 250, SMB34 ATCH INT2, 10 Network 1 // 主程序 // SMW92设为100mS时来不及接收72个字符,150mS就没问题 LD SM0.1 // 首次扫描时, MOVB 16#09, SMB30 // 初始化自由端口: //选择9600波特 //选择8个数据位 //选择无校验 MOVB 16#9C, SMB87 //允许接收信息 MOVW 150, SMW92 //要小于接收中断里定时中断的时间,超过SMW92值停止接收。 MOVW 0, SMW90 //使用SMB90值检察空闲状态,设为0表示从站允许立即响应。 MOVB 80, SMB94 //SMW94 最大接收字符数,这里无用,但必须要设置。 ENI Network 2 LD SM0.1 ATCH INT3, 9 //传输完成中断 MOVB 150, SMB34 ATCH INT2, 10 //定时中断发送,首次延时150mS (数据按照通讯协议解码转换,略)
制冷、热工-许可证试验室承建,给了我深究测量与控制的绝好机会。分享-值得期待!
|