主题:求救!关于RS485在QB下的通讯问题
用仪表生产厂家提供的测试通讯程序能读出仪表的PV值,但生产厂家未能提供QB下的测试程序,通讯协议如下
1. RS485通讯协议
1.1. 主从式半双工通讯,主机呼叫从机地址,从机应答方式通讯。串行通讯,数据帧11位,1个起始,8个数据位,2个停止位
1.2. 数据传输格式采用标准ASCⅡ码
1.2.1. 通讯数据字符集
0(30H) 1(31H) 2(32H) 3(33H) 4(34H)5(35H) 6(36H) 7(37H)
8(38H) 9(39H) A(41H) B(42H)C(43H) D(44H) E(45H)
F(46H) .(2EH) -(2DH) +(2BH)
1.2.2. 通讯控制字符集
DC1(11H):读瞬时值 DC2(12H):读参数
DC3(13H):写参数 DC4(14H):读写FCC5000
STX(02H):从机起始符 ETX(03H):主机结束符
ETB(17H):从机结束符 RS (1EH):数据间隔符
uS (1FH):参数间隔符 ACK(06H):接收正确
NAK(15H):接收错误 CAN(18H):通讯复位
SP (20H):空白符
1.3. 通讯协议
1.3.1. 读瞬时值
1.3.1.1. 读单通道瞬时值
主机发送: DC1 AAA CC ETX
DC1(11H) : 读瞬时值
AAA : 从机地址码(=001~254)
CC : 通道号(=01-99)
ETX(03H) : 主机结束符
从机回送: STX AAA CC US MM US DDDDDDD US EEEE US SSSSS ETB
STX(02H) : 从机起始符
AAA : 从机地址码(=001~254)
CC : 通道号(=01-99)
US(1FH) : 参数间隔符
MM : 表型字(=00~99)
DDDDDDD : 瞬时值(-32167~32767,32767=brok,16000=H.oFL,-2000=L.oFL,
小数点在实际位置)
EEEE : 报警1~4报警状态(E=0:OFF E=1:ON)
SSSSS : 校验和5位十进制=00000~65535,从STX到最后一个US间每个
字符ASC值的和,再除以65536的余数)
ETB(17H) : 从机结束符
例子:
主机发送 : 11H 30H 30H 31H 30H 31H 03H(读001号表01通道瞬时值)
从机回送 : 02H 30H 30H 31H 30H 31H 1FH 30H 36H 1FH 2DH 30H 31H 32H 33H 2EH 34H 1FH 31H 30H 30H 30H 1FH 30H 31H 30H 30H 34H
17H(001号表为XMA5000系列,01号通道瞬时值=-0123.4,报警1
动作,报警2不动作,校验和=1004)
我写的测试程序无法运行,提示 I/O 设备错误,请大家帮我看看,有什么问题?
OPEN “COM2:9600,N,8,2” FOR RANMDOM AS#1
PRINT #1,CHR$(17)+CHR$(48)+CHR$(48)+CHR$(49)+CHR$(48)+CHR$(49)+CHR$(3)
FOR I= 1 TO 10000:I=I+1:NEXT (延时)
LINE [color=FF0000]input[/color] #1,A$
PRINT A$
CLOSE #1
END
1. RS485通讯协议
1.1. 主从式半双工通讯,主机呼叫从机地址,从机应答方式通讯。串行通讯,数据帧11位,1个起始,8个数据位,2个停止位
1.2. 数据传输格式采用标准ASCⅡ码
1.2.1. 通讯数据字符集
0(30H) 1(31H) 2(32H) 3(33H) 4(34H)5(35H) 6(36H) 7(37H)
8(38H) 9(39H) A(41H) B(42H)C(43H) D(44H) E(45H)
F(46H) .(2EH) -(2DH) +(2BH)
1.2.2. 通讯控制字符集
DC1(11H):读瞬时值 DC2(12H):读参数
DC3(13H):写参数 DC4(14H):读写FCC5000
STX(02H):从机起始符 ETX(03H):主机结束符
ETB(17H):从机结束符 RS (1EH):数据间隔符
uS (1FH):参数间隔符 ACK(06H):接收正确
NAK(15H):接收错误 CAN(18H):通讯复位
SP (20H):空白符
1.3. 通讯协议
1.3.1. 读瞬时值
1.3.1.1. 读单通道瞬时值
主机发送: DC1 AAA CC ETX
DC1(11H) : 读瞬时值
AAA : 从机地址码(=001~254)
CC : 通道号(=01-99)
ETX(03H) : 主机结束符
从机回送: STX AAA CC US MM US DDDDDDD US EEEE US SSSSS ETB
STX(02H) : 从机起始符
AAA : 从机地址码(=001~254)
CC : 通道号(=01-99)
US(1FH) : 参数间隔符
MM : 表型字(=00~99)
DDDDDDD : 瞬时值(-32167~32767,32767=brok,16000=H.oFL,-2000=L.oFL,
小数点在实际位置)
EEEE : 报警1~4报警状态(E=0:OFF E=1:ON)
SSSSS : 校验和5位十进制=00000~65535,从STX到最后一个US间每个
字符ASC值的和,再除以65536的余数)
ETB(17H) : 从机结束符
例子:
主机发送 : 11H 30H 30H 31H 30H 31H 03H(读001号表01通道瞬时值)
从机回送 : 02H 30H 30H 31H 30H 31H 1FH 30H 36H 1FH 2DH 30H 31H 32H 33H 2EH 34H 1FH 31H 30H 30H 30H 1FH 30H 31H 30H 30H 34H
17H(001号表为XMA5000系列,01号通道瞬时值=-0123.4,报警1
动作,报警2不动作,校验和=1004)
我写的测试程序无法运行,提示 I/O 设备错误,请大家帮我看看,有什么问题?
OPEN “COM2:9600,N,8,2” FOR RANMDOM AS#1
PRINT #1,CHR$(17)+CHR$(48)+CHR$(48)+CHR$(49)+CHR$(48)+CHR$(49)+CHR$(3)
FOR I= 1 TO 10000:I=I+1:NEXT (延时)
LINE [color=FF0000]input[/color] #1,A$
PRINT A$
CLOSE #1
END