表的通讯协议如下:
1、通信接口RS485或RS232,波特率范围1200-9600。
2、仪表接线端为A, B和COM。
3、通信信息组成:地址码-功能码-数据段-CRC校验码,一条消息连续发送和接收,字符间隔不能大于一个字符,否则认为一条新消息开始或老消息结束。信息体由十六进制数组成。.
4、数据定义:累积量为4字节十六进制定点数(unsigned long int),瞬时量(包括温度压力等)为4字节浮点数(float)。.
5、通信命令:
功能码03-用来读取显示数据
发送 01 ;地址 回应 01 ;地址
03 ;功能码 03 ;功能码
00 ;寄存器地址高 04 ;字节个数
01 ;寄存器地址低(显示地址) 80 ;数据1
00 ;寄存器个数高 04 ;数据2
04 ;寄存器个数低 80 ;数据3
CRCH ;CRC校验码高 80 ;数据4
CRCL ;CRC校验码低 CRCH ;CRC校验码高
CRCL ;CRC校验码低
说明:地址=仪表号,寄存器地址=显示项目编号
回应字节个数=(发送)寄存器个数低(1-63)
功能码04-用来读取数设定数据和码设定数据,
寄存器个数=1-3读码设定;=4-63读数设定。
读取数设定数据
发送 01 ;地址 回应 01 ;地址
04 ;功能码 04 ;功能码
00 ;寄存器地址高 04 ;字节个数
01 ;寄存器地址低(数设定地址) 80 ;数据1
00 ;寄存器个数高 04 ;数据2
04 ;寄存器个数低 80 ;数据3
CRCH ;CRC校验码高 80 ;数据4
CRCL ;CRC校验码低 CRCH ;CRC校验码高
CRCL ;CRC校验码低
说明:地址=仪表号,寄存器地址=数设定地址编号
回应字节个数=(发送)寄存器个数低(1-63)
读取码设定数据
发送 01 ;地址 回应 01 ;地址
04 ;功能码 04 ;功能码
00 ;寄存器地址高 02 ;字节个数
01 ;寄存器地址低(码设定地址) 03 ;数据1码内容
00 ;寄存器个数高 04 ;数据2 码内容
01 ;寄存器个数低 CRCH ;CRC校验码高
CRCH ;CRC校验码高 CRCL ;CRC校验码低
CRCL ;CRC校验码低
说明:地址=仪表号,寄存器地址=码设定地址编号
回应字节个数=(发送)寄存器个数低(1-3)X2
功能码06-用来进行码设定
发送 01 ;地址 回应 01 ;地址
06 ;功能码 06 ;功能码
00 ;寄存器地址高 00 ;寄存器地址高
01 ;寄存器地址低(码设定地址)01 ;寄存器地址低
00 ;数据高 00 ;数据高
04 ;数据低 04 ;数据低
CRCH ;CRC校验码高 CRCH ;CRC校验码高
CRCL ;CRC校验码低 CRCL ;CRC校验码低
功能码07-用来读取日报表,报表数据为长整型,顺序为质量热量
发送 01 ;地址 回应 01 ;地址
07 ;功能码 07 ;功能码
xxy; 起始年(BCD码) xxf ;长度= xxc*5
xxm ; 起始月(BCD码) xx1 ; 数据1
xxd ; 起始日(BCD码) …. ; 数据
xxc ;报表长度(1-16) xxn ;数据n
CRCH ;CRC校验码高 CRCH ;CRC校验码高
CRCL ;CRC校验码低 CRCL ;CRC校验码低
功能码08-用来读取月报表,报表数据为长整型,顺序为质量热量
发送 01 ;地址 回应 01 ;地址
08 ;功能码 08 ;功能码
xxy; 起始年(BCD码) xxf ;长度= xxc*5
xxm ; 起始月(BCD码) xx1 ; 数据1
xxd ; 空 …. ; 数据
xxc ;报表长度(1-16) xxn ;数据n
CRCH ;CRC校验码高 CRCH ;CRC校验码高
CRCL ;CRC校验码低 CRCL ;CRC校验码低
功能码10H-用来数设定(如:100=86H,00H,00H,48H)
发送 01 ;地址 回应 01 ;地址
10H ;功能码 10H ;功能码
00 ;寄存器地址高 00 ;寄存器地址高
01 ;寄存器地址低(数设定地址) 01 ;寄存器地址低
00 ;寄存器个数高 00 ;寄存器个数高
04 ;寄存器个数低 04 ;寄存器个数低
04 ;数据个数 CRCH ;CRC校验码高
86h ;数据1 CRCL ;CRC校验码低
00 ;数据2
00 ;数据3
48H ;数据4
CRCH ;CRC校验码高
CRCL ;CRC校验码低
7、CRC校验码计算
01 ;地址 N1 CRC=0FFFFH为初值
10 ;功能码 N2 CRCL与N1异或运算
00 ;寄存器地址高N3 CRC右移1位,若移出位为1
01 ;寄存器地址低N4 则CRC=CRC和A001H异或,
00 ;寄存器个数高N5 若移出位为0则CRC=CRC
04 ;寄存器个数低N6 右移8次完成N1计算
04 ;数据个数 N7 …
80 ;数据1 N8 CRCL与N11异或运算
04 ;数据2 N9 CRC右移1位,若移出位为1
80 ;数据3 N10 则CRC=CRC和A001H异或,
80 ;数据4 N11 若移出位为0则CRC=CRC
CRCH ;CRC校验码高 右移8次完成N11计算
CRCL ;CRC校验码低 最后得到CRC校验值
8、sb2100系列仪表浮点数据格式
长度为4字节, 采用IEEE标准方式,其中尾数高位始终为1,位的分布如下:1位符号位,8位指数位,24位尾数,符号位是最高位,尾数为低位23位,按字节排序如下:
地址 0 1 2 3
内容 MMMMMMMM MMMMMMMM EMMMMMMM SEEEEEEEE
其中 S:符号位,0=整数,1=负数.
E:指数(在二个字节中),偏移码为127.
M:23位尾数,最高位为1,有效位为24位.
例如:100=0x00,0x00,0xc8,0x42
0=0x00,0x00,0x00,0x00
-100=0x00,0x00,0xc8,0xc2
9、通信举例
仪表地址设为01,通信波特率=4800,n,8,1(仪表码地址08=01,09=05)。
例1:读取仪表瞬时流量F,F=100. (4字节浮点数)
上位机发送:0x01,0x03,0x00,0x01,0x00,0x04,0xc9,0x15
仪表回传:0x01,0x03,0x04,0x00,0x00,0xc8,0x42,0xc2,0x2d
例2:读取仪表累积流量S,S=12345.(4字节定点数)
上位机发送:0x01,0x03,0x00,0x0b,0x00,0x04,0xcb,0x35
仪表回传:0x01,0x03,0x04,0x39,0x30,0x00,0x00,0xa0,0xf6
例3: 读取仪表所有显示数据,包括瞬时,频率,差压, 压力,温度,密度,热量,累积流量,累积热量等12项48个字节
上位机发送:0x01,0x03,0x00,0x01,0x00,0x30,0x1e,0x14
仪表回传: 0x01,0x03,0x30,
0x69,0x00,0xc8,0x42, (瞬时=100.0008)
0x86,0x00,0x00,0x00,(频率=0)
0x00,0x00,0xc8,0x44,(差压=1600)
0x9e,0x99,0x99,0x3f,(压力=1.20)
0x7d,0x1f,0x39,0x43,(温度=185.123)
0x00,0x00,0x80,0x3f,(密度=1.0)
0x00,0x00,0x00,0x00,(热量=0.0)
0x00,0x00,0x00,0x00,(保留)
0x00,0x00,0x00,0x00,(保留)
0x00,0x00,0x00,0x00,(保留)
0x60,0x30,0x00,0x00,(累积=12384)
0x0a,0x00,0x00,0x00,(累积热=10)
0xf5(校验码低),0xb9(校验码高)
例4: 读取仪表实时时间05-12-08-21-21-08,时间格式为6字节BCD码
上位机发送:0x01,0x04,0x00,0x29,0x00,0x03,0xc3,0x61
仪表回传:0x01,0x04,0x06,
0x08(秒),
0x21(分),
0x21(时),
0x08(日),
0x12(月),
0x05(年),
0x81(校验码低),0x9a(校验码高)
//显示寄存器
寄存器地址 变量名称 数据类型
01 瞬时流量 float
02 频率 float
03 差压 float
04 压力 float
05 温度 float
06 密度 float
07 气体标况密度 float
08 标况压缩系数 float
09 工况压缩系数 float
10 天然气相对真实密度 float
11 累积量 unsigned long int
12 累积热量 unsigned long int
13 峰累积量 unsigned long int
14 谷累积量 unsigned long int
15 保留 unsigned long int
16 停电次数 unsigned long int
17 停电时间 unsigned long int
18 流量报警次数 unsigned long int
19 流量报警时间 unsi
请教我在200里面应该怎么写程序?我看不懂这是不是
modbus协议,可以直接调用
modbus库吗?