自由口通讯编了程序,可是不知道为什么用S-R指令转换后,得到的不是预想的。大家帮忙看下。
MAIN:
LD SM0.1
MOVB 16#09, SMB30
MOVB 16#B0, SMB87
MOVW 3, SMW90
MOVB 16#0, SMB89
MOVB 255, SMB94
ATCH INT_0:INT0, 23
ENI
RCV VB560, 0
INT_0:
LDB<> SMB86, 0
LPS
BMB VB560, VB570, 9
STR VB570, 1, VD500
AB= VB572, 16#31
= Q0.3
LRD
AB= VB574, 16#2E
= Q0.5
LRD
AB= VB571, 16#31
= Q0.2
LRD
AB= VB573, 16#33
= Q0.4
LRD
AB= VB575, 16#30
= Q0.6
LRD
AR= VD500, 112.9
S Q1.0, 1
LPP
AR= VD500, 113.0
S Q1.0, 1
中断程序中,用了很多比较是为了判断是否自由口通讯成功传输过来数据,VB571-VB575的判断都是对的,也就是说我的PLC执行完后,Q0.2-Q0.6都是1,对应的S-R指令完后应该对应VD500=113.0,但是Q1.0却没有置1,也就是说VD500不等于113.0。是我程序错了还是怎样?请大家帮忙看看。
问题补充:
按LAOHUAI的方法,问题已经解决,可是不明白为什么就可以了。一定要明确给它赋值?
我是想连续接收,不过不知道如何做,按什么来确定每8个字节它的开始和结束?
最佳答案
你知道VB560等于多少吗?
1 加一句MOVB 5, VB570试试
BMB VB560, VB570, 9
MOVB 5, VB570
STR VB570, 1, VD500
2 中断程序越小越好。
3 你的程序只能接收一次,接收结束执行中断后,就没有可执行的程序了。
提问者对于答案的评价:
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc352084.html