S7 200自由口采集电子秤数据误码率高,附PLC采集程序

我用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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月5日
下一篇 2021年7月5日

相关推荐

发表回复

登录后才能评论