我用S7 226的PORT1口采集JJ系列电子天平的数据,导致约2.5%的误码率。高手有什么办法?
主程序:
网络1
//初始化PORT1为自由口:9600,N,8,1
LD SM0.1
MOVB 16#09, SMB130
MOVB 2#11000100, SMB187 // 配置接收信息控制字节
// SM187.7(en)=1 允许端口1接收字符
// SM187.6(sc)=1 当检测到与SMB188中相同的字符时开始接收,并将该字符当作信息的首字符
// SM187.5(ec)=0 不检测信息的结束字符
// SM187.4(il)=0 不检测端口空闲状态
// SM187.3(c/m)=0 定时器为内部字符定时器,PLC检测到起始字符,每接收到一个字符就启动定时器
// SM187.2(tmr)=1 允许在定时器(SMW192中设定的值)超时后停止接收,并产生接收完成中断
// SM187.1(bk)=0 忽略Break条件
// SM187.0=0 系统保留
MOVB 16#20, SMB188 // 信息字符的起始字符:空格符
MOVW +20, SMW192 // 中间字符溢出值:20毫秒
MOVB 20, SMB194 // 要接收的最大字符数:20
ATCH INT_5:INT5, 24 // 端口1接收完成事件(事件号:24)连接到中断5
ATCH INT_6:INT6, 26 // 端口1发送完成事件(事件号:26)连接到中断6
ENI // 允许用户中断
RCV VB1000, 1 // 通讯口1的接收信箱缓冲区:VB1000
网络2
//生成电子天平查询命令:1B70H
LD SM0.1
MOVB 2, VB1200
MOVB 16#1B, VB1201
MOVB 16#70, VB1202
网络3
//T32定时器中断:每200ms向天平发送一次水量采集命令
LDN T32
TON T32, +200
ATCH INT_4:INT4, 21
ENI
INT_4程序:向电子天平发送查询命令:1B70H
网络1:
LDN I1.5
R SM187.7, 1 // 发送前禁止接收
RCV VB1000, 1 // 停止接收
XMT VB1200, 1 // 向电子天平发送一次查询命令
CRETI
INT_5程序:PORT1接收完成中断
网络1:
LD SM0.0
AB>= VB1000, 11
STR VB1000, 1, VD1210 //从第一个接收到的字符开始转换,因为有时候给出的前导空格会丢失
网络2:
LD SM0.0
CRETI
INT_6程序:PORT1发送完成中断
网络1:
LD SM0.0
S SM187.7, 1 // 发送完成后,允许接收
RCV VB1000, 1 // 启动一个新的接收
CRETI
最佳答案
已经增加11个以上的字符判断,怎么还能转换出错误的数字 ?
提问者对于答案的评价:
增加11字符判断后,已经没有错误的数据产生。只是采集900次,约有20次数据被丢弃。不过不影响使用了。
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc356711.html