技术论坛

 • 产品分类
 • 咱工程师的故事
 • 培训与认证答疑专区
 • 服务合作伙伴专区

 【分享】自由口模式多从站轮询

返回主题列表
作者 主题
凌飞翼
奇侠

经验值: 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

(数据按照通讯协议解码转换,略)
制冷、热工-许可证试验室承建,给了我深究测量与控制的绝好机会。分享-值得期待!
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。