自由口通讯程序依然不通

各位,我之前已经问过一个自由口的程序,但是依然没有调通。曾经通过,但现在不通了,不知道是不是程序的问题。硬件都查过了,没问题的。
 Network 1 // Network Title
 // Network Comment
 LD     SM0.1
 MOVB   16#09, SMB30
 MOVB   16#B0, SMB87
 MOVW   3, SMW90
 MOVB   16#0, SMB89
 MOVB   255, SMB94
 ATCH   INT0, 23
 ENI
 RCV    VB560, 0
 MOVR   0.0, VD500
 S      Q1.0, 1 
 下面是中断程序

 LDB<>  SMB86, 0
 BMB    VB560, VB570, 9
 MOVB   5, VB570
 STR    VB570, 1, VD500
 S      Q1.1, 1

 LDR<>  VD500, 0.0
 S      Q0.0, 1

 LDB=   VB576, 16#6D
 /R     1000.0, VD500
 AB=    VB577, 16#56
 =      Q0.2

 LDB=   VB576, 16#56
 =      Q0.1

 结果Q0.0=0,但是按本意这个时候它应该有一个非零的读数。而且按照通信协议,每次8字节,以00为结束,前5位是数字,后两位是单位,也就是当采集到的数据是以mV为单位时,VB576=6D(ASCII的m),VB577=56(ASCII的V),或者当采集到的数据是以V为单位时
 VB576=56.但是运行的结果是在以mV为单位的情况下,Q0.2=0,在以V为单位的情况下,Q0.1=0.也就是说相应位不是要采集的。
 另外,我用Q1.1测试是否发生自由口通讯,结果是在主程序运行(Q1.0=1)几秒后,Q1.1=1,说明自由口通讯发生了,基本排除了硬件问题。请问大家程序上有什么问题?为什么VD500依然为0(Q0.0=0)?

 
 

问题补充:
我是很想知道我的做法如何错了?没道理啊

最佳答案

这样用就可以了,不但可以多次接收数据,而且对数据也进行判断了。
 数据放在VB5 VB6 VB7 VB8 VB9 VB10 VB11 VB12 8个字节里面,然后转换到VD100里面。

 Network 1 
 LD     SM0.1
 MOVB   5, VB4
 MOVD   &VB5, VD0
 MOVB   0, MB0
 MOVB   9, SMB30
 ATCH   INT_1:INT1, 8
 ENI

 INT_0:INT0
 Network 1 
 LD     SM0.0
 INCB   MB0
 MOVB   SMB2, *VD0
 INCD   VD0
 Network 2 
 LDB=   MB0, 8
 MOVB   0, MB0
 -D     8, VD0
 STR    VB4, 1, VD100

 INT_1:INT1
 Network 1 
 LDB<>  SMB2, 0
 CRETI
 Network 2 
 LD     SM0.0
 ATCH   INT0, 8

 

 

提问者对于答案的评价:

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc351908.html

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

相关推荐

发表回复

登录后才能评论