这几天找了一些有关
modbus,自由口方面的资料,论坛上也有很多这方面的例子,有很多热心的同行都在帮我们答疑解惑,真的非常感谢!对于论坛里非常活跃,乐于助人的网友非常感谢!下面就我这几天测试自由口通信遇到的问题向大家请教。
我是按照LaoHuai大侠给出的例子进行调试的,如果有幸希望LaoHuai答疑。
我是使用端口0作为自由口通信,端口1作为PPI通信,通信速率9600
仪表报文结构如下:
命令:01 04 00 00 00 01 31 CA
序列00为地址,一个字节,取值1-247
序列01为功能码,一个字节,取值0x04
序列02-03为起始通道,两个字节,取值0x00 0x00
序列04-05为通道数,两个字节,取值0x00,0x01
序列06-07为校验码,两个字节,取值CRC_H CRC_L
响应:01 04 02 00 00 B9 30
我写的程序如下
MAIN
LD SM0.1
MOVB 16#09, SMB30
MOVB 16#9C, SMB87
MOVW +80, SMW92
MOVW +0, SMW90
MOVB 200, SMB94
ENI
ATCH INT_3:INT3, 9
MOVB 100, SMB34
ATCH INT_2:INT2, 10
LD SM0.0
MOVD &VB200, VD300
INT2
LD SM0.0
DTCH 10
XMT VB100, 0
INT3
LD SM0.0
RCV VB200, 0
MOVB 250, SMB34
ATCH INT_2:INT2, 10
我发送的XMT报文数据写入了数据块中
VB100=16#01
vb101=16#04
vb102=16#00
vb103=16#00
vb104=16#00
vb105=16#01
vb106=16#31
vb107=16#CA
而我通过监控数据后发现SMB86=2#0000_0100,其中SM86.2在0和1之间来回跳动,SMB2=0,&vb200=16#080000C8,而此时仪表的值为82.5,按照说明书的意思此时的&vb200应该不是这样啊,&vb200的第2和第3位应该不为0啊!应该为00 52H?不知道我这样取值是否科学,我之前没做过这方面的实验,如果不是这样,该如何取值?还有,我通过串口软件监控端口0的数据为04 00 04 00 04 00 04 00循环,为什么会出现这样的情况?程序有问题吗?响应和监控的值为什么不一样?仪表设置的参数如下:通信速率9600,地址1,无校验。