我做的是自由口通讯,用串口调试助手调试。程序流程是这样的:发送一个读的指令,然后就开始接收指令,接收了以后再发送,一直循环下来。发送数据保存在vb500开始的内存中,接收缓冲区最大长度为5个字节,检测起始字符00。怪异的现象为:一旦接收的数据不是5个字节(比如4个),那么发送的命令就错了,变成乱七八糟的数据,真的好奇怪,忘高手指点。
下面是程序代码
Network 1 //
LD SM0.1
LPS
MOVB 16#09, SMB30
MOVB 16#C0, SMB87
MOVB 5, VB500
AENO
MOVD 16#11223344, VD501
AENO
MOVB 16#1, VB505
LRD
MOVB 5, SMB94
LPP
MOVB 16#0, SMB88
Network 2
LD SM0.1
S S0.1, 1
Network 3
LSCR S0.1
Network 4
LD SM0.0
XMT VB500, 0
AENO
SCRT S0.2
Network 5
SCRE
Network 6
LSCR S0.2
Network 7
LD SM0.0
RCV VB32, 0
AENO
SCRT S0.1
Network 8
SCRE
问题补充:
解决的方法是做个超时检测,超时了就进行下一条指令。但是,这个现象还是很怪。因为,接受的数据怎么会影响到发送的数据呢?
中断做起来好像也不简单因为我做的系统是由16个传感器,每个传感器的读取地址都不一样,用轮询的方法以此读取各个传感器的读数,我只能想到用这个方法了,中断不大会用
最佳答案
数据帧的结束是采用的什么方式,有可能是接受发送同时执行了,将接受完了以后做个延时再发送试试,如果正常就可能是上面的原因
提问者对于答案的评价:
谢谢
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc348489.html