MODBUS-RTU协议是一个公开协议,在网上很容易查到详细协议说明,本文主要介绍安科瑞常见仪表所涉及的MODBUS-RTU的读取报文、数据格式、数据计算等方法。
✦✦01通讯接线与串口设置
✦仪表通常采用RS485作为串口的硬件连接,要求使用屏蔽双绞线手拉手将各仪表连成总线最终连接至主机、通信管理机、串口服务器等设备。一般一条总线不得多于32只表,根据通信情况可选择在最末端仪表A、B之间增加匹配电阻(一般120欧姆)。我司出厂的MODBUS协议仪表没有特殊要求时同一设置为波特率9600,无校验,仪表地址1-247循环设置。
0203读命令举例
✦在一般系统中,03命令是最常用的,本节举例说明03读命令的报文格式(以DTSD1352举例)
03数据类型
✦(1) 常见数据类型分为:无符号16位整型、有符号16位整型、无符号32位整型、有符号32位整型;
(2) 无符号16位整型数据范围为0~65535,有符号16位整型数据范围为-32768~32767,有符号32位整型数据范围为0~4294967295有符号32位整型数据范围为-2147483648~2147483647;
(3) 无论何种数据类型都是高位在前低位在后;
(4) 注意有符号数据的负数表达方式是补码形式,如果使用组态软件注意仔细设置数据的类型,如果系统自主解析报文,注意此类数据的负数计算,比如某有符号值通讯读出为FC80(16位整型),其数值应该是-896,而不是64640。有种简单的计算方法是:首先判断读值X是否>32767(如果是32位应判断是否>2147483647),如果小于则是正数,如果大于则可以用X-65536(或2147483648),所得到一个负数即是正确的数值。
系列测量值用 Modbus-RTU 通讯规约的 03 号命令读出,通讯值与实际值之间的对应关系如下:(约定 Val_t
为通讯读出值,Val_s 为实际值)
1. 相电压 UA、UB、UC、线电压 UAB、UBC、UCA:
Val_s=Val_t × 10 ^( DPT- 4 ),单位 伏 V,DPT 从 0023H 高字节读出。
2. 电流 IA、IB、IC:
Val_s=Val_t × 10 ^( DCT- 4 ),单位 安培 A,DCT 从 0023H 低字节读出。
3. 功率 PA、PB、PC、P 总、QA、QB、QC、Q 总:
Val_s=Val_t × 10 ^( DPQ- 4 ),有功功率单位 瓦 W,无功功率单位 乏 var,DPQ 从 0024H 高字节读出,有功
功率和无功功率的符号从 0024H 低字节(从高到低位依次为 Q、Qc、Qb、Qa、P、Pc、Pb、Pa)读出,对应BIT位读取0为正,1为负
仪表发送:01 03 00 23 00 02 35 C1
仪表回送:01 03 04 03 02 06 17 18 19
回送解析:03 02代表DPT和DCT,06 17代表DPQ和符号位
电压Val_s=Val_t*10^(DPT-4)=Val_t*10^(3-4)=Val_t*10-1=Val_t*0.1,
电流Val_s=Val_t*10^(DPT-4)=Val_t*10^(2-4)=Val_t*10-2=Val_t*0.01,
功率Val_s=Val_t*10^(DPT-4)=Val_t*10^(6-4)=Val_t*102=Val_t*100,
符合读取数据是17转换成二级制00010001代表Qa和Pa读取是负值,其他是正值
04电压计算
✦0025是相电压UA,0026是UB,0027是UC,0028是线电压UAB,0029是线电压UBC,002A是UAC.
发送:01 03 00 25 00 06 D4 03
仪表回送:01 03 0C 08 98 08 98 08 98 0E E2 0E E2 0E E2 28 41
回送解析:01为通讯地址,03为功能码,0C为回复的有效数据字节数,
08 98:16进制转十进制数据为2200,即仪表显示A相电压为2200*0.1
08 98 : 16 进制转十进制数据为2200,即仪表显示B相电压为2200*0.1
08 98:16进制转十进制数据为2200,即仪表显示C相电压为2200*0.1
0E E2:16进制转十进制数据为3810,即仪表显示UAB为3810*0.1
0E E2:16进制转十进制数据为3810,即仪表显示UBC为3810*0.1
0E E2:16进制转十进制数据为3810,即仪表显示UAC为3810*0.1
05电流计算
✦00 2B为A相电流,00 2C为B相电流,00 2D为C相电流
发送:01 03 00 2B 00 03 75 C3
仪表回送:01 03 06 0B B8 0B B8 0B B6 84 92
0B B8:16进制转十进制数据为3000,即仪表显示A相电流为3000*0.01
0B B8 :16进制转十进制数据为3000,即仪表显示B相电流为3000*0.01
0B B6 :16进制转十进制数据为3000,即仪表显示C相电流为3000*0.01
06功率计算
✦002E是A相有功功率,002F是B相有功功率,0030是C相有功功率,0031是总有功功率,
0032是A相无功功率,0033是B相无功功率,0034是C相无功功率,0035是总无功功率
发送:01 03 00 2E 00 08 24 05
仪表回送:01 03 10 02 93 02 94 02 93 02 94 00 35 00 35 00 34 00 34 E7 DE
02 93:16进制转十进制数据为659,即仪表显示A相有功功率为659*100*-1(Pa读取功率符号是-1)
02 94:16进制转十进制数据为660,即仪表显示B相有功功率为660*0.1
02 93:16进制转十进制数据为659,即仪表显示C相有功功率为659*0.1
02 94:16进制转十进制数据为660,即仪表显示相]总有功功率为660*0.1
00 35: 16进制转十进制数据为53,即仪表显示A相无功功率为53*100*-1(Qa读取功率符号是-1)
00 35:16进制转十进制数据为53,即仪表显示B相无功功率为53*0.1
00 34:16进制转十进制数据为52,即仪表显示C相无功功率为52*0.1
00 34:16进制转十进制数据为52,即仪表显示相]总无功功率为52*0.1
07功率因数
✦根据说明书注释PF=PF1/1000得,PF=PF1*0.001
发送:01 03 00 36 00 04 A4 07
仪表回送:01 03 08 03 84 03 84 03 84 03 84 A1 19
回送解析:01为通讯地址,03为功能码,08为回复有效数据字节数(十六进制表示,也就是十进制为8)
03 84:16进制数据转化为10进制为900,即仪表显示A相功率因数为900*0.001
03 84:16进制数据转化为10进制为900,即仪表显示B相功率因数为900*0.001
03 84:16进制数据转化为10进制为900,即仪表显示C相功率因数为900*0.001
08电能计算
✦根据说明书注释电能量一次侧值 Val_s=Val_t/1000×PT×CT(单位是Kwh)
电流电压变比读取报文如下
仪表发送:01 03 00 03 00 02 34 0B
仪表回送:01 03 04 00 01 00 32 2A 26
回送解析00 01十六进制转换十进制即电压变比是1,00 32十六进制转换十进制50即电流变比是50
吸收有功电能读取报文如下
仪表发送:01 03 00 3F 00 02 F4 07
仪表回送:01 03 04 00 00 0B 04 FC C0
00 00 0B 04:16进制数据转化为10进制为2820,即仪表显示吸收有功电能一次侧为
2820*PT*CT*0.001=2820*1*50*0.001=141Kwh
