发布于 2006-07-17 10:02:15
0楼
300的我没有用过,编程软件也没有,所以程序也看不到!
只有一个建议!因为大多数仪表通讯都是以MODBUS RTU方式,而且只有在点对点的情况下仪表才会回送应答报文,实际上你16台仪表是采用轮询,仪表是不用回送应答报文的,它只要在你发送的数据帧中找到属于自己的地址,然后发送数据却可.
但是你说仪表要求是7位数据位,1位停止位,偶校验,波特率是9600,我想应该是ASCII方式,(你都知道PLC通读就是以ASCII方式)即然这样,那么你的发送帧报文是否正确呢:
16#05 16#49 16#44 16#30 16#31 16#D 16#A
这个就是ASCII码的发送帧,H05是ENQ通讯请求,H30 H31应该说是站号的地址才对,你放在后面,所以我就不明白了!
对吧!很显然报文是错误的,
ASCII方式的发送帧报方结构为:
: 地址 功能代码 数据数量 数据1 数据N LRC高字节,LRC低字节,回车换行
那你对应你要读一仪表的一寄存器内容正确的报文应该是
H05 H30 H31 HXX HXX HXX HXX HXX HXX H0D H0A
通讯请求 仪表地址 功能代码 数据 回车换行
另外还有一点,我想你应该清楚,通讯地址为01,那么ASCII码为H30 H31;那么通讯地址为16呢,ASCII码应该是31H 36H;