文档库 最新最全的文档下载
当前位置:文档库 › 虹润积算仪7602型MODBUS RTU规约

虹润积算仪7602型MODBUS RTU规约

虹润积算仪7602型MODBUS RTU规约
虹润积算仪7602型MODBUS RTU规约

概述:本规约采用Modbus规约RTU模式,可以方便地与多种组态软件相连接,其通讯驱动与Modicon Modbus_RTU格式完全兼容。

1、字节格式:

每字节含8位二进制码,传输时加上一个起始位(0),一个停止位(1),共10位。其传输序列如上图所示,D0是字节的最低有效位,D7是字节的最高有效位。先传低位,后传高位。

2、通讯数据格式:通讯时数据以字(WORD— 2字节)的形式回送,回送的每个字中,高字

节在前,低字节在后,如果2个字连续回送(如:浮点或长整形),则高字在前,低字在后。

数据类型寄存器数字节数说明

字节数据 1 1

整形数据 1 2

一次送回,高字节在前,低字节在后

长整形数浮点数据2 4

分两个字回送,高字在前,低字在后

3、帧格式:

3.1读取仪表寄存器内容(功能码 03H)

3.1.1上位机发送的帧格式:

顺序代码示例说明

1 仪表地址 1 仪表的通讯地址(1-255之间)

2 03H 03H 功能码

3 起始寄存器地址高字节10H

4 起始寄存器地址低字节00H

寄存器起始地址

5 寄存器个数高字节00H

6 寄存器个数低字节02H

寄存器个数

7 CRC16 校验高字节C0H

8 CRC16 校验低字节CBH

CRC 校验数据

3.1.2仪表回送的帧格式(数据正常)

顺序代码说明

1 仪表地址仪表的通讯地址(1-255之间)

2 03H 功能码

3 回送数据域字节数(M)

4 第一个寄存器数据

…………

第N个寄存器数据

M+4 CRC 校验高字节

M+5 CRC 校验低字节

3.1.3如果起始寄存器地址或寄存器个数错误,仪表回送:

顺序代码示例说明

1 仪表地址 1 仪表的通讯地址(1-255之间)

2 83H 83H 功能码

3 02H 02H 错误代码

4 CRC 校验高字节C0H

5 CRC校验低字节F1H

3.2设置仪表寄存器内容(功能码 16H或10H或06H)

3.2.1.1 功能码06H写单路,将一个字(2字节)数据写入仪表寄存器中,上位机发送的帧

格式:

顺序代码示例说明

1 仪表地址 1 仪表的通讯地址(1-255之间)

2 06H 06H 功能码

3 寄存器地址高字节10H

寄存器地址1000H

4 寄存器地址低字节00H

5 写入数据高字节00H

写入数据0CH

6 写入数据低字节0CH

7 CRC校验高字节8DH

CRC校验数据8D0FH

8 CRC校验低字节0FH

3.2.1.2 仪表回送:如果写入正确,则仪表回送相同的数据。

3.2.2 .1 功能码16H或10H写多路寄存器,上位机发送的帧格式

顺序代码示例说明

1 仪表地址 1 仪表的通讯地址(1-255之间)

2 16H 或10H 10H 功能码

3 寄存器起始地址高字节1FH

4 寄存器起始地址低字节02H

寄存器地址1F02H

5 寄存器个数高字节00H 00H

6

寄存器个数低字节02H 字节数据、整形数据:01H

浮点数据、长整形数:02H

7 字节数(M)4 字节数据:01H

整形数据:02H

浮点数、长整形数:04H

8 数据高字节42H

数据次高字节C8H

数据次低字节00H

数据低字节00H

设置的浮点数据为100

M+8 CRC校验高字节6BH

M+9 CRC校验低字节C0H

CRC校验数据6BC0H

3.2.2.2仪表回送:(写入成功)

顺序代码示例说明

1 仪表地址 1 仪表的通讯地址(1-255之间)

2 16H 或10H10H 功能码

3 起始地址高字节1FH

4 起始地址低字节02H

寄存器起始地址1F02H

5 寄存器个数高字节00H

6 寄存器个数低字节02H

寄存器个数2

7 CRC校验高字节E7H

8 CRC校验低字节DCH

CRC校验数据E7DCH

3.2.3仪表回送:(地址或数据错误)

顺序代码说明

1 仪表地址仪表的通讯地址(1-255之间)

2 96H或90H或86H 功能码——针对16H,10H,06H

3 03H 错误代码

4 CRC校验高字节

5 CRC校验低字节

注:以上介绍中CRC校验为16位,高字节在前,低字节在后。

4、通讯波特率:通讯波特率可以在300、600、1200、2400、4800、9600之间选择。出厂

时,仪表已设置某一波特率。

5、仪表地址:仪表地址可以在1-247之间选择。仪表出厂时,已设置某一地址。

6、通讯功能码:03H(召测数据) 16H(10H或06H)(数据设置)

7、通讯数据CRC校验:

7.1 校验多项式:X16+X12+X5+1

7.2 CRC检验码的计算例程见附录B和。附录C

7.3 CRC检验从第1字节开始至CRC校验高字节前面的字节数据结束。

附录A1:IEEE754单精度浮点格式:

IEEE 单精度格式由三个字段组成:23 位小数 f ; 8 位偏置指数 e ;以及 1 位符号 s。这些字段连续存储在一个 32 位字中(如附录A表1 所示)。0:22 位包含 23 位小数 f,其中第 0位是小数的最低有效位,第 22 位是最高有效位; 23:30 位包含 8 位偏置指数 e,第 23 位是偏置指数的最低有效位,第 30 位是最高有效位;最高的第 31 位包含符号位 s。

格式S e[30:23] f[22:0]

位31 30-23 22-0

附录A表1:单精度浮点数据存储格式

附录A表2 显示一侧的三个组成字段 s、e 和 f 的值与另一侧的单精度格式位模式表示的值之间的对应关系;u 意味着无关,即指示字段的值与确定特定单精度格式位模式的值无关。

单精度格式位模式值

0 < e < 255 (–1)S× 2e-127× 1.f (正规数)

e = 0;

f ≠ 0(f 中至少有一位不为零)(–1)S× 2-126× 0.f (次正规数)

e = 0;

f = 0(f 中的所有位均为零) (–1)S× 2-126× 0.0(有符号的零)

(正无穷大)

s = 0; e = 255; f = 0(f 中的所有位均为零) +INF

s = 1; e = 255; f = 0(f 中的所有位均为零)–INF (负无穷大)

s = u; e = 255;f ≠ 0(f 中至少有一位不为零)NaN (非数)

附录A表2:单精度格式位模式表示的值

注意,当 e < 255 时,为单精度格式位模式分配的值是使用以下方法构成的:将二进制基数点插入到紧邻小数最高有效位的左侧,将一个隐含位插入到紧邻二进制点的左侧,因而以二进制位置表示法来表示一个带分数(整数加小数,其中 0 ≤ò3 小数 < 1)

如此构成的带分数称为单精度格式有效数字。之所以称为隐含位的原因是,在单精度格式位模式中没有显式地指定其值,但偏置指数字段的值隐式指定了该值。

对于单精度格式,正规数和次正规数的差别在于正规数有效数字的前导位(二进制点左侧的位)为1,而次正规数有效数字的前导位为0。在 IEEE 754 标准中,单精度格式次正规数称为单精度格式非规格化数。

在单精度格式正规数中 23 位小数加上隐含前导有效数位提供了 24 位精度。

附录A表3 中给出了重要的单精度存储格式位模式的示例。最大正正规数是以 IEEE 单精度格式表示的最大有限数。最小正次正规数是以 IEEE 单精度格式表示的最小正数。最小正正规数通常称为下溢阈值。(最大和最小正规数和次正规数的十进制值是近似的;对于所示的数字来说,它们是正确的。)

通用名称位模式(十六进制)十进制值+0 0 0 0 0 0 0 0 0 0.0

-0 8 0 0 0 0 0 0 0 -0.0

1 3 f 8 0 0 0 0 0 1.0

2 4 0 0 0 0 0 0 0 2.0

最大正规数7 f 7 f f f f f 3.40282347e+38 最小正正规数0 0 8 0 0 0 0 0 1.17549435e-38 最大次正规数0 0 7 f f f f f 1.17549421e-38 最小正次正规数0 0 0 0 0 0 0 1 1.40129846e-45 +∞7 f 8 0 0 0 0 0 无穷

-∞ F f 8 0 0 0 0 0 负无穷

非数7 f c 0 0 0 0 0 NaN

附录A表3:单精度存储格式位模式及其 IEEE 值

附录A2:IEEE754单精度浮点手工转换样例:

一、概述:单精度浮点数据由四个字节组成,我公司的仪表在通讯中,回送这四个字节时分2

种方式:一种是高字节在前,低字节在后(使用Modbus 规约的仪表——盘装类仪表);另一种是低字节在前,高字节在后(使用青智规约的仪表——台式仪表),下面手工转换,都假设四字节的浮点数据高字节在前,低字节在后。四字节共32位 二、IEEE754单精度浮点格式及计算(共四字节32位)

1、IEEE754单精度浮点格式(共四字节32位,从高到低)

二进制位

32 31 24 23 1 说明

符 号(1位) 其数值用S 表示 指 数(8位) 其数值用E 表示 尾 数(23位)

其数值用F 表示

2、格式说明:

A 、第32 bit 为符号位,为0则表示正数,反之为负数,其读数值用S 表示;

B 、第31~24 bit 共8位为幂数(2的幂数),其读数值用E 表示;

C 、第23~1 bit 共23位作为系数,视为二进制纯小数,假定该小数的十进制值为F

D 、转换后的十进制浮点数据以FData 表示; 3、转为为十进制浮点数据公式为:

FData=(-1)S * (1 + F) * 2

(E - 127)

三、浮点数据实例:(高字节在前)

十进制 十六进制 二进制数据 220.5 43-5C-80-00 0100 0011 0101 1100 1000 0000 0000 0000 380.6 43-BE-4C-CD 0100 0011 1011 1110 0100 1100 1100 1101 50.25 42-49-00-00 0100 0010 0100 1001 0000 0000 0000 0000 0.999 3F-7F-BE-77 0011 1111 0111 1111 1011 1110 0111 0111 1.0 3F-80-00-00 0011 1111 1000 0000 0000 0000 0000 0000

四、手工转换实例:

1、220.5=43-5C-80-00进行转换 A 、220.5=43-5C-80-00用二进制表示如下:

0 1 0 0 0 0 1 1 0 1 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

S 幂数部分E 纯小数部分F

B 说明:

a 、 符号位:为0,即S=0

b 、指数部分:E = 86H = 134

c 、 纯小数部分:F=854312

1

21212121++++=0.5+0.125+0.0625+0.03125+0.00390625

=0.72265625 注:只有小数部分的1,3,4,5,8位为1,其他为0

d 、转换后的数据Fdata=(-1)S *(1+f)*2(E-127)=(-1)0*(1+0.72265625)*2(134-127)=

1.72265625*27=1.72265625*128=220.5

2、50.25=42-49-00-00进行转换

A 、50.25=42-49-00-00用二进制表示如下:

0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

S 幂数部分E 纯小数部分F

B 说明:

a 、 号位:为0,即S=0

b 、指数部分:E = 84H = 132

c 、 纯小数部分:F =7412

1

2121++=0.5+0.0625+0.0078125=0.5703125

d 、转换后的数据Fdata=(-1)S *(1+f)*2(E-127)=(-1)0*(1+0.5703125)*2(132-127)=

1.5703125*25=1.72265625*32=50.25

3、0.999=3F-7F-BE-77进行转换

A 、0.999=3F-7F-BE-77用二进制表示如下:

0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 1 1 1 0 1 1 1

32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

S 幂数部分E 纯小数部分F

B 说明:

a 、 位:为0,即S=0

b 、指数部分:E = 7EH = 126

c 、 纯小数部分:

F=+++++++++++++141312111087654321212121212121212121212121212322211918172

12121212121++++++ =0.5+0.25+0.125+0.0625+0.03125+0.015625+0.0078125+0.00390625+0.0009765625+0.00048828125+0.000244140625+0.0001220703125+0.00006103515625+0.00000762939453125+0.000003814697265625+0.0000019073486328125+0.000000476837158203125+0.0000002384185791015625+0.00000011920928955078125=0.99800002574920654296875 d 、转换后的数据

Fdata=(-1)S *(1+f)*2(E-127)=(-1)0*(1+0.99800002574920654296875)*2(126-127)=1.99800002574920654296875/2=0.999000012874603271484375≈0.999000

注:之所以在最后添加了“≈”符号,因为单精度浮点数据有效位数为7位

#include "stdio.h"

/*========================= CrC 计算子程序

==========================*/

unsigned int CrcCal(unsigned int Data, unsigned int GenPoly, unsigned int CrcData) { unsigned int TmpI; Data*=2; for(TmpI=8;TmpI>0;TmpI--) { Data=Data/2; if((Data ^ CrcData)&1)CrcData=(CrcData/2)^ GenPoly; else CrcData/=2; } return CrcData; }

/*================================ 主程序

=================================*/

main() { unsigned int CRC; unsigned char tmpi; /*================================ 将1,3,10H,00H,00,02进行CrC 校验 =================================*/ static Buf[]={1,3,0x10,0,0,2}; CRC=0xffff; for(tmpi=0;tmpi<6;tmpi=tmpi+1)CRC=CrcCal(Buf[tmpi],0xa001,CRC);

printf("CRCDA = %02xH,%02xH",CRC%256,CRC/256);/*CRC 即为计算的结果:COH.CBH*/

}

1、CRC校验简单函数(C 语言)

/***********************************************

本文中所有的数据及显示皆为16进制

本文中的Crc校验以查表的方式进行

本程序是Turbo C++(Ver3.0)的格式,运行环境为DOS操作系统

***********************************************/

#include

unsigned char txd_pointer;

unsigned char rxd_pointer;

static unsigned char auchCRCHi[] = {0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,

0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40} ;

/* CRC低位字节值表*/

static char auchCRCLo[] = {0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2,0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04,0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8,0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC,0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6,0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10,0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32,0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE,0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA,0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C,0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0,0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62,0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4,0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE,0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A,

0xBA,0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C,0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7, 0xB6, 0x76,0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0,0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54,0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E,0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98,0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A,0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,

0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86,0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40} ;

unsigned short CRC16(unsigned char *puchMsg, unsigned short usDataLen)

{

unsigned char uchCRCHi = 0xFF ; /* 高CRC字节初始化 */

unsigned char uchCRCLo = 0xFF ; /* 低CRC 字节初始化 */

unsigned uIndex ;

while (usDataLen--) /* 传输消息缓冲区 */

{

uIndex = uchCRCHi ^ *puchMsg++ ; /* 计算CRC */

uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ;

uchCRCLo = auchCRCLo[uIndex] ;

}

return (uchCRCHi << 8 | uchCRCLo) ;

}

union{unsigned int i;unsigned char c[2];}cov;

union{float f;unsigned char c[4];}covf;

void main()

{

unsigned char send[30];

unsigned int crc;

int i;

printf("\n QINGDAO QINGZHI INSTRUMENTS Co.Ltd. ");

printf("\n

=================================================================== ==========");

printf("\n\nCrc Calculate example:");

txd_pointer=0;

send[txd_pointer++]=0x1;

send[txd_pointer++]=0x3;

send[txd_pointer++]=0x10;

send[txd_pointer++]=2;

send[txd_pointer++]=0x0;

send[txd_pointer++]=0x2;

printf("\nData:");

for(i=0;i

cov.i=CRC16(send,txd_pointer);//开始CRC校验计算

send[txd_pointer++]=cov.c[1];// cov.c[1]为CRC校验的高字节

send[txd_pointer++]=cov.c[0];// cov.c[0]为CRC校验的低字节

printf("\nCRc=%02x,%02x",cov.c[1],cov.c[0]);//显示CRC校验的值

}

附录D :数据转换例程

一、概述:本文是以C51(Franklin C)的格式来给出“浮点转换为字节数据”、“字节转换为

浮点数据”,“长整形转换为字节数据”、“字节数据转换为长整形数据”等,本文使用的编译器为Franklin C ,使用其他类型的编译器时(例Keil C),只须修改浮点数据转换例程中填入字节的顺序即可。同时,本文的例程,同样可以在Turbo C++上直接运行。产生同样的效果

二、数据转换例程:

/*======================== 公共变量

==========================*/ union {

unsigned char uc[4]; long lda; unsigned long ul; float fda; }un_4b;

union {

unsigned char uc[2]; int ida; unsigned int ui; }un_2b;

long lda; int ida; float real; unsigned char uca[4];

unsigned char ucb[2];

1、 浮点数据转换为字节数据

/*================================================= 浮点数据转换为字节数据

入口数据:real 放入要转换的浮点数据; 出口数据:转换的四字节数据在uca[]中 顺序是从低(uca[0])到高(uca[3])

real=1.0;转换为字节uca[0]-uca[3]=0,0,0x80,0x3f

===================================================*/ void FtoB(void) {

un_4b.fda=real; uca[0]=un_4b.uc[0]; uca[1]=un_4b.uc[1]; uca[2]=un_4b.uc[2]; uca[3]=un_4b.uc[3]; }

2、字节数据转换为浮点数据

/*=================================================

字节数据转换为浮点数据

入口数据:要转换的四字节数据在uca[]中

顺序是从低(uca[0])到高(uca[3])

出口数据:real 存放的为已转换的浮点数据;

数据uca[0]-uca[3]=0,0,0x80,0x3f转换为浮点real=1.0

===================================================*/

void BtoF(void)

{

un_4b.uc[0]=uca[0];

un_4b.uc[1]=uca[1];

un_4b.uc[2]=uca[2];

un_4b.uc[3]=uca[3];

real=un_4b.fda;

}

3、长整形数据转换为字节数据

/*=========================================================== 长整形数据转换为字节数据

入口数据:要转换的长整形放在lda中

出口数据:转换完的四字节数据在uca[]中

顺序是从高(uca[0])到第(uca[3])

长整数据lda=1000 转换的字节数据uca[0]-uca[3]=0xe8,0x03,0,0

============================================================*/ void LtoB(void)

{

un_4b.lda=lda;

uca[0]=un_4b.uc[0];

uca[1]=un_4b.uc[1];

uca[2]=un_4b.uc[2];

uca[3]=un_4b.uc[3];

}

4、字节数据转换为长整形数据

/*=========================================================== 字节数据换为长整形数据转

入口数据:转换完的四字节数据在uca[]中

顺序是从高(uca[0])到第(uca[3])

出口数据:转换完毕的长整形放在lda中

字节数据uca[0]-uca[3]=0xe8,0x03,0,0转换的长整形数据lda=1000

============================================================*/ void BtoL(void)

{

un_4b.uc[0]=uca[0];

un_4b.uc[1]=uca[1];

un_4b.uc[2]=uca[2];

un_4b.uc[3]=uca[3];

lda=un_4b.lda;

}

5、整形数据转换为字节数据

/*=========================================================== 整形数据换为字节数据

入口数据:要转换的整形放在ida中

出口数据:转换完的2字节数据在ucb[]中

顺序是从高(ucb[0])到第(ucb[1])

要转换的整形数据ida=1000,转换的字节数据ucb[0]-ucb[1]=0xe8,0x03

============================================================*/ void ItoB(void)

{

un_2b.ida=ida;

ucb[0]=un_2b.uc[0];

ucb[1]=un_2b.uc[1];

}

6、字节数据转换为整形数据

/*=========================================================== 字节数据转换为整形数据

入口数据:要转换的2字节数据在ucb[]中

顺序是从高(ucb[0])到第(ucb[1])

出口数据:转换完毕的整形放在ida中

字节数据ucb[0]-ucb[1]=0xe8,0x03转换的整形数据ida=1000

============================================================*/ void BtoI(void)

{

un_2b.uc[0]=ucb[0];

un_2b.uc[1]=ucb[1];

ida=un_2b.ida;

}

附录E:通讯连接线制作

一、我公司仪表通讯串口定义:

通讯方式接口形式定 义说 明

DB9针2-RXD,3-TXD,5-GND RS-232

DB25针2-TXD,3-RXD,7-GND 采用3线连接方式

RS-485DB9针1-A,4-B

二、RS-232通讯连接线制作:

1、DB9座对DB9座

仪表串口DB9 计算机DB9串口

2 3

3 2

5 5

2、RS-232方式通讯时,仪表与计算机的通讯连接线长度应小于15m

三、多台RS-485接口仪表连接方式:当多台带RS-485接口仪表连接在1条总线上时,应按

下图方式进行连接:

MODBUS通讯协议及编程

通讯协议及编程 通讯协议分为协议和协议,我公司的多种仪表都采用通讯协议,如:2000智能电力监测仪、巡检表、数显表、光柱数显表等。下面就协议简要介绍如下: 一、通讯协议 (一)、通讯传送方式: 通讯传送分为独立的信息头,和发送的编码数据。以下的通讯传送方式定义也与通讯规约相兼容: 初始结构= ≥4字节的时间 地址码 = 1 字节 功能码 = 1 字节 数据区 = N 字节 错误校检 = 16位码 结束结构= ≥4字节的时间 地址码:地址码为通讯传送的第一个字节。这个字节表明由用户设定地址码的从机将接收由主机发送来的信息。并且每个从机都有具有唯一的地址码,并且响应回送均以各自的地址码开始。主机发送的地址码表明将发送到的从机地址,而从机发送的地址码表明回送的从机地址。 功能码:通讯传送的第二个字节。通讯规约定义功能号为1到127。本仪表只利用其中的一部分功能码。作为主机请求发送,通过功能码告诉从机执行什么动作。作为从机响应,从机发送的功能码与从主机发送来的功能码一样,并表明从机已响应主机进行操作。如果从机发送的功能码的最高位为1(比如功能码大与此同时127),则表明从机没有响应操作或发送出错。 数据区:数据区是根据不同的功能码而不同。数据区可以是实际数值、设置点、主机发送给从机或从机发送给主机的地址。 码:二字节的错误检测码。 (二)、通讯规约: 当通讯命令发送至仪器时,符合相应地址码的设备接通讯命令,并除去地址码,读取信息,如果没有出错,则执行相应的任务;然后把执行结果返送给发送者。返送的信息

中包括地址码、执行动作的功能码、执行动作后结果的数据以及错误校验码。如果出错就不发送任何信息。 1.信息帧结构 地址码:地址码是信息帧的第一字节(8位),从0到255。这个字节表明由用户设置地址的从机将接收由主机发送来的信息。每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应回送。当从机回送信息时,相当的地址码表明该信息来自于何处。 功能码:主机发送的功能码告诉从机执行什么任务。表1-1列出的功能码都有具体的含义及操作。 数据区:数据区包含需要从机执行什么动作或由从机采集的返送信息。这些信息可以是数值、参考地址等等。例如,功能码告诉从机读取寄存器的值,则数据区必需包含要读取寄存器的起始地址及读取长度。对于不同的从机,地址和数据信息都不相同。 错误校验码:主机或从机可用校验码进行判别接收信息是否出错。有时,由于电子噪声或其它一些干扰,信息在传输过程中会发生细微的变化,错误校验码保证了主机或从机对在传送过程中出错的信息不起作用。这样增加了系统的安全和效率。错误校验采用16校验方法。 注:信息帧的格式都基本相同:地址码、功能码、数据区和错误校验码。 2.错误校验 冗余循环码()包含2个字节,即16位二进制。码由发送设备计算,放置于发送信息的尾部。接收信息的设备再重新计算接收到信息的码,比较计算得到的码是否与接收到的相符,如果两者不相符,则表明出错。 码的计算方法是,先预置16位寄存器全为1。再逐步把每8位数据信息进行处理。在进行码计算时只用8位数据位,起始位及停止位,如有奇偶校验位的话也包括奇偶校验位,都不参与码计算。 在计算码时,8位数据与寄存器的数据相异或,得到的结果向低位移一字节,用0 填补最高位。再检查最低位,如果最低位为1,把寄存器的内容与预置数相异或,如果最低位为0,不进行异或运算。 这个过程一直重复8次。第8次移位后,下一个8位再与现在寄存器的内容相相异或,这个过程与以上一样重复8次。当所有的数据信息处理完后,最后寄存器的内容即为码值。码中的数据发送、接收时低字节在前。 计算码的步骤为:

精编通讯规约通信规约

DL/T645-1997 通讯规约通信规约 1 、范围 该通信规约适用于本地系统中多功能表的费率装置与手持单元(HHU )或其它数据终端设备进行点对点的或一主多从的数据交换方式,规定了它们之间的物理连接、通信链路及应用技术规范。 2 、引用标准 GB/T3454-1994 数据通信基本型控制规程 GB/T9387-1995 信息处理系统开放系统互连基本参考模型 DL/T614-1997 多功能电能表 IEC1107-1996 读表、费率和负荷控制的数据交换---直接本地数据交换 IEC1142--1993 读表、费率和负荷控制的数据交换---本地总线数据交换 ITU-TV。24—1993 非平衡双流接口电路的点特性 ITU-TV。28—1993 数据终端设备(DTE )和数据电路终接设备(DCE )之间的 接口电路定义表 3 、RS-485 标准串行电气接口 本协议采用RS-485 标准串行电气接口,使用点连接成为可能.RS-485 接口的一般性能应符合下列要求. 3.1驱动与接收端、耐静电(ESD)±5kV(人体模式)。 3.2共模输入电压:-7V?+12V。 3.3 差模输入电压:大于0.2V 3.4驱动输出电压:在负载阻抗54欧姆时,最大5V,最小1.5V 3.5 三态方式输出 3.6半双工通信方式3.7驱动能力不小于32个同类接口。

3.8在传输速率不大于100kbps条件下,有效传输不小于1200m 3.9总线是无源的,由费率装置或数据终端、提供隔离电源。 4.1字节格式 每字节含8位二进制码,传输时加上一个起始位(0 )、一个偶校验位和一个停止位(1)共11 位。其传输序列如图1。D0是字节的最低有效位,D7是字节的最高有效位。先传低位,后传高位。 起始位8位数据偶校验位停止位 图1 字节传输序列 4.2帧格式 帧是传送信息的基本单元。帧格式如图2所示 图2 帧格式 421帧起始符68H :标识一帧信息的开始,其值为68H=01101000B 422地址域A0 s A5 :

MODBUS_RTU通信规约

MODBUS_RTU通讯规约(本协议采用主从问答方式) PDM系列仪表/变送器: PDM系列仪表/变送器采用全新的设计,革命性地改变了传统电表的概念;具有多功能、高精度、数字式、可编程、结构紧凑、多画面显示的特点,它可以满足电力工业未来对电表的需求。 MODBUS通讯协议: ModBus通讯规约允许PDM系列仪表/变送器与施耐德、西门子、AB、GE等多个国际著名品牌的可编程顺序控制器(PLC)、RTU、SCADA系统、DCS或与第三方具有ModBus 兼容的监控系统之间进行信息交换和数据传送。 PDM系列仪表/变送器只要简单地增加一套基于计算机(或工控机)的监控软件(如:组态王、Intouch、FIX、synall等)就可以构成一套电力监控系统。 广泛的系统集成: PDM系列仪表/变送器提供了标准的RS-485/422通讯接口及ModBus通讯协议,这个通讯协议已广泛被国内外电力行业及工控行业作为系统集成的标准。 通讯数据的类型及格式: 信息传输为异步方式,并以字节为单位。在主站和从站之间传递的通讯信息是11位的字格式: 字格式(串行数据) 11位二进制 起始位1位 数据位8位 奇偶校验位1位:有奇偶校验位/无:无奇偶校验位 停止位1位:有奇偶校验位/2位:无奇偶校验位 ●通讯数据(信息帧)格式 数据格式:地址码功能码数据区错误校检 数据长度:1字节1字节N字节 16位CRC码(冗余循环码) ★ 注:1、1个字节由8位二进制数组成(既8 bit)。 2、ModBus是Modicon公司的注册商标。

一、通讯信息传输过程: 当通讯命令由发送设备(主机)发送至接收设备(从机)时,符合相应地址码的从机接收通讯命令,并根据功能码及相关要求读取信息,如果CRC校验无误,则执行相应的任务,然后把执行结果(数据)返送给主机。返回的信息中包括地址码、功能码、执行后的数据以及CRC校验码。如果CRC校验出错就不返回任何信息。 1.1 地址码: 地址码是每次通讯信息帧的第一字节(8位),从0到255。这个字节表明由用户设置地址的从机将接收由主机发送来的信息。每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应回送信息。当从机回送信息时,回送数据均以各自的地址码开始。主机发送的地址码表明将发送到的从机地址,而从机返回的地址码表明回送的从机地址。相应的地址码表明该信息来自于何处。 1.2 功能码: 是每次通讯信息帧传送的第二个字节。ModBus通讯规约可定义的功能码为1到127。PDM系列仪表/变送器仅用到其中的一部分功能码。作为主机请求发送,通过功能码告诉从机应执行什么动作。作为从机响应,从机返回的功能码与从主机发送来的功能码一样,并表明从机已响应主机并且已进行相关的操作。 表8.1 MODBUS部分功能码 功能码定义操作(二进制) 02 读开关量输入读取一路或多路开关量状态输入数据 01 读开关量输出读取一路或多路开关量输出状态数据 03 读寄存器数据读取一个或多个寄存器的数据 05 写开关量输出控制一路继电器“合/分”输出 06 写单路寄存器把一组二进制数据写入单个寄存器 10 写多路寄存器把多组二进制数据写入多个寄存器 1.3 数据区: 数据区包括需要由从机返送何种信息或执行什么动作。这些信息可以是数据(如:开关量输入/输出、模拟量输入/输出、寄存器等等)、参考地址等。例如,主机通过功能码03告诉从机返回寄存器的值(包含要读取寄存器的起始地址及读取寄存器的长度),则返回的数据包括寄存器的数据长度及数据内容。对于不同的从机,地址和数据信息都不相同(应给出通讯信息表)。 PDM系列仪表/变送器采用Modbus通讯规约,主机(PLC、RTU、PC机、DCS等)利用通讯命令(功能码03),可以任意读取其数据寄存器(其数据信息表详见附录)。PDM 系列仪表/变送器的数据寄存器存储的电量多达几百个(如:电流、电压、功率、0~31次谐波分量等),并且都是16位(2字节)的二进制数据,并且高位在前;一次最多可读取寄存器数(既各种电量的数量)是50个。 PDM响应的命令格式是从机地址、功能码、数据区及CRC码。数据区的数据都是两个字节,并且高位在前(电能量除外)。 注:1、PDM-820AC/ACM/ACR、PDM-800AC/ACM具有“03”、“06”、“10”功能码; 2、如果PDM采用MODBUS ASCII通讯协议,其通讯数据格式为;7个数据位,1个 停止位,偶校验。

Modbus通讯协议学习

Modbus通讯协议学习 了解了它,会使你对串口通信有一个清晰的认识!通用消息帧ASCII消息帧(在消息中的每个8Bit 字节都作为两个ASCII字符发送) 十六进制,ASCII字符0...9,A...F 消息中的每个ASCII字符都是一个十六进制字符组成每个字节的位1个起始位n个数据位,最小的有效位先发送1个奇偶校验位,无校验则无1个停止位(有校验时),2个Bit(无校验时)错误检测域LRC(纵向冗长检测) RTU 消息帧8位二进制,十六进制数0...9,A...F 消息中的每个8位域都是一个两个十六进制字符组成每个字节的位1个起始位8个数据位,最小的有效位先发送1个奇偶校验位,无校验则无1个停止位(有校验时),2个Bit(无校验时)错误检测域CRC(循环冗长检测) CRC校验 (https://www.wendangku.net/doc/f4515158.html,/view/1664507.htm) public static string CRCCheck(string val) { val = val.TrimEnd(' '); string[] spva = val.Split(' '); byte[] bufData = new byte[spva.Length + 2]; bufData = ToBytesCRC(val); ushort CRC = 0xffff;

ushort POLYNOMIAL = 0xa001; for (int i = 0; i < bufData.Length - 2; i++) { CRC ^= bufData[i]; for (int j = 0; j < 8; j++) { if ((CRC & 0x0001) != 0) { CRC >>= 1; CRC ^= POLYNOMIAL; } else { CRC >>= 1; } } } return Maticsoft.DBUtility.HLConvert.ToHex(System.BitConverter .GetBytes(CRC)); } /// <summary>

MODBUS-RTU通讯规约【消防系统】

火灾报警控制系统MODBUS RTU通讯规约 1规约制定的依据: 1.1火灾报警控制系统的特点: 1.1.1火灾本身是小概率事件,很少发生; 1.1.2所带探测类设备和控制类设备众多; 1.1.3火灾报警控制系统的设备种类非常多; 1.1.4每个探测类设备均有正常、故障、报警三种状态,可能发生隔离、释放信息; 1.1.5每个控制类设备均有正常、故障、动作、恢复四种状态,可能发生隔离、释 放、启动、停动信息。 1.2由于以上特点,火灾报警控制系统的通讯设计成事件出发的形式;默认每个设备 处于正常状态,如发生故障、隔离、报警事件,形成包含事件类型、设备编码、 设备类型的事件信息;通过MODBUS传送给主机,主机进行事件的文本或图形 显示。 2通讯说明: 1、通讯协议:MODBUS RTU; 2、波特率:4800; 3、奇偶校验:无; 4、停止位:1位,每字节数据共10位; 5、配接控制器通讯接口卡: INET-03A接口卡(RS232接口) 程序名称: GST5000控制器:500modbusv1.0.hex GST200控制器:200modbusv1.0.hex 6、Modbus从站地址设定: 针对GST200控制器,该网卡需进行注册,并在开机注册时显示联网系统正常,并且正常运行时,红灯闪烁;设定控制器联网地址,该地址即为Modbus从站地址; 针对GST5000控制器,该网卡在系统中注册为CRT卡,设置彩色显示器CRT地址,该地址即为Modbus从站地址; 7、应用中,需配合控制器设备点表来实现对设备的监控; 3 火灾报警控制系统MODBUS规约 2、寄存器模式通讯协议 2.1、主机使用MODBUS功能码3对火灾报警控制器设备状态寄存器进行查询,寄 存器点数由控制器设备点数决定,因此,该方案适合小点数的火灾报警控制器; 2.2、寄存器状态说明: 寄存器与设备对应说明: MODBUF的查询寄存器40001对应控制器的0回路的1号设备; GST200控制器: GST200控制器共可接242个设备,设备二次码编码应按照***001~***242设

tcp协议之基础知识

TCP/IP协议(传输控制协议/网间协议) TCP/IP 协议集确立了Internet 的技术基础。TCP/IP 的发展始于美国DOD (国防部)方案。IAB (Internet 架构委员会)的下属工作组IETF (Internet 工程任务组)研发了其中多数协议。IAB 最初由美国政府发起,如今转变为公开而自治的机构。IAB 协同研究和开发TCP/IP 协议集的底层结构,并引导着Internet 的发展。TCP/IP 协议集记录在请求注解(RFC)文件中,RFC 文件均由IETF 委员会起草、讨论、传阅及核准。所有这些文件都是公开且免费的,且能在IETF 网站上列出的参考文献中找到。 TCP/IP 协议覆盖了OSI 网络结构七层模型中的六层,并支持从交换(第二层)诸如多协议标记交换,到应用程序诸如邮件服务方面的功能。TCP/IP 的核心功能是寻址和路由选择(网络层的IP/IPV6 )以及传输控制(传输层的TCP、UDP)。 IP (网际协议) 在网络通信中,网络组件的寻址对信息的路由选择和传输来说是相当关键的。相同网络中的两台机器间的消息传输有各自的技术协定。LAN 是通过提供6字节的唯一标识符(“MAC”地址)在机器间发送消息的。SNA 网络中的每台机器都有一个逻辑单元及与其相应的网络地址。DECNET、AppleTalk 和Novell IPX 均有一个用来分配编号到各个本地网和工作站的配置。 除了本地或特定提供商的网络地址,IP 为世界范围内的各个网络设备都分配了一个唯一编号,即IP 地址。IPV4 的IP 地址为4字节,按照惯例,将每个字节转化成十进制(0-255)并以点分隔各字节。IPV6 的IP 地址已经增加到16字节。关于IP 和IPV6 协议的详细说明,在相关文件中再另作介绍。 TCP (传输控制协议) 通过序列化应答和必要时重发数据包,TCP 为应用程序提供了可靠的传输流和虚拟连接服务。TCP 主要提供数据流转送,可靠传输,有效流控制,全双工操作和多路传输技术。可查阅TCP 部分获取更多详细资料。 在下面的TCP/IP 协议表格中,我们根据协议功能和其在OSI 七层网络通信参考模型的映射关系将其全部列出。然而,TCP/IP 并不完全遵循OSI 模型,例如:大多数TCP/IP 应用程序是直接在传输层协议TCP 和UDP 上运行,而不涉及其中的表示层和会话层。 ************************************ *********************88 **************************8 TCP/IP协议详解 悬赏分:30 - 解决时间:2007-8-29 23:29 提问者:4252002 - 试用期一级最佳答案 这部分简要介绍一下TCP/IP的内部结构,为讨论与互联网有关的安全问题打下基础。TCP/IP

恒瑞电力保护装置Modbus通信规约

微机保护装置通讯协议 MODBUS-RTU- V1.1版 珠海市恒瑞电力科技有限公司 2013-3

一、协议概述 ●本协议适用于HDPx、DPx、EDPx、DPML系列保护装置。 ●本协议为轮询方式的应答式规约,允许一个主站对应32个从站。 ●数据帧间的间隔时间应大于50ms。 ●数据为字时,均采用高字节在前、低字节在后、高位字在前、低位字在后的原则(校验码除外)。 ●从站地址为00时为广播方式。 1、物理层: ●传输方式:RS-485 ●通信地址:1~255 ●通信波特率:2400bps~19200bps。 ●传输介质:屏蔽双绞线 2、链路层: ■传输方式:主从半双工方式。 数据在一根通信线路上进行双向传输的应答式连接(发送完后,再接收)。主站首先寻址到唯一的从站,接着主站将会收到对应的终端设备发出的应答信号。 协议只允许应用在主站与终端设备之间,禁止在独立的终端设备之间互相交换数据。 ■数据帧格式,表1-1如示: ■数据包格式,表1-2如示: 当从站接收到主站的数据帧后,首先进行地址验证,如是从站,则从站进行数据帧的CRC校验码计算,并与接收到的主站发出的CRC码进行比较,如相等,则执行相应的功能码,并对主站做出响应(从站的地址、功能码、数据区、CRC的低字节,CRC的高字节);如经地址验证不为该从站,则退出,不做出任何的响应。 ●地址域 从站地址为一个字节,该字节标明了主站与从站进行通信的入口,所以该地址是每个从站所必须的,并且有且只有一个,从站之间绝不能相互重复,否则会引起通信链路上的冲突而导致通信错误。有效的从站地址范围从1~247。从站地址为00时为广播方式。 ●功能域 该码值为一个字节,它标识了主站要在终端设备上是做何种操作。详细内容参见表1-3所示。

Modbus 通讯协议简化V1.0(含具体说明).

Modbus通讯协议简化 V1.0 2004-5-21 1 Modbus协议概述 Modbus协议是主从站通讯协议,用异步串行口完成通讯,物理层采用RS485或RS232。传输速率可以达到115kbps,理论上可接(寻址)一台主站和至多247台从站。受线路和设备的限制,最多可接一台主站和32台从站。 Modbus理,以及所执行的功能等,都不能随便改动。其他特性属于用户可选的,如传输介质、波特率、字符奇偶校验、停止位的个数等等,传输模式为RTU。用户所选择的参数对于各个站必须一致,在系统运行时不能改变。 1.1 Modbus协议传输模式 Modbus的传输模式:RTU方式。 表1-1 RTU传输模式的特性 特性编码系统 每个字符的位数起始位 数据位 奇偶校验位 停止位 1.2 帧 Modbus协议的帧(报文)格式:RTU帧。 下表是RTU传输模式的一般格式命令帧。 从站地址 8位 2 Modbus协议 2.1 通讯方式 Modbus有两种通讯方式:应答方式和广播方式。 应答方式是主站向某个从站(地址1~247)发出命令,然后等待从站的应答;从站接到主站命令后,执行命令,并将执行结果返回给主站作为应答,然后等待下一个命令。 广播方式是主站向所有从站发送命令(从站地址为0),不需要等待从站应答;从站接到广播命令后,执行命令,也不向主站应答。 除了会送诊断校验外,只有05、06、15、16这四项功能(见2.3)对广播方式有效。功能码数据校验和 8位位位十六进制 1位 8位 0或1位 1或2位校验和(循环冗余校验) 2.2 Modbus帧

Modbus的帧按应答方式分为命令帧(询问帧)和应答帧。命令帧为一般格式命令帧,应答帧有显长度帧和隐长度帧之分,图2-1、2-3、2-4给出了典型的帧格式。从站地址 功能码 数据 数据起始寄存器高位 数据起始寄存器地位 数据寄存器高位 数据寄存器地位 校验和 图2-1 一般格式命令帧 从站地址 从站地址 2.2.1 功能码 从站地址字段 数据 图2-4 隐长度应答帧 帧中的从站地址字段表示接收主站报文的从站地址。当从站地址字段为0时,表示所有从站,此时的报文是广播报文。 用户必须设定每台从站的专用地址。只有被编址的设备才能对主机的命令(询问)做出应答。从站发送应答报文时,报文中地址的作用是向主站报告正在通讯的是哪台从站。 2.2.2 功能码字段 功能码字段同志从站应执行何种功能。表2-1列出了功能码的意义和作用。2.3节给出了各个功能码对应报文的详细格式和功能。表2-1 Modbus功能码 功能码 01 02 03 04 05 06 07 08 09 10 11 12 名称 读取开出状态读取开入状态读取模出状态读取模入状态强制单路开出强制单路模出读取异常状态回送诊断校验编程探询读取事件计数读取通讯事件记录 作用(对主站而言) 取得一组开关量输出的当前状态取得一组开关量输入的当前状态取得一组模拟量输出的当前状态取得一组模拟量输入的当前状态强制设定某个开关量输出的值强制设定某个模拟量输出的值取得从站的一些状态(8位)

MODBUS通信规约解析

MODBUS通信规约 第一章MODBUS协议简介 MODBUS协议详细定义了校验码、数据序列等,这些都是特定数据交换的必要内容。 MODBUS协议在一对通讯线上使用主从应答式连接(半双工),这意味着在一对单独的通讯线上信号沿着相反的两个方向传输。首先,主计算机的信号寻址到一台唯一的终端设备(从机),然后,终端设备发出的应答信号以相反的方向传输给主机。 MODBUS协议只允许在主计算机和终端设备之间通讯,而不允许独立的设备之间的数据交换,这样各终端设备不会在它们初始化时占用通讯线路,而仅限于响应到达本机的查询信号。 1.1 传输方式 传输方式是一个数据帧内一系列独立的数据结构以及用于传输数据的有限规则,下面定义了与MODBUS协议-RTU方式相兼容的传输方式。 ◆Coding System 二进制编码8位 ◆Start bit 起始位1位 ◆Data bits 数据位8位 ◆Parity 校验无奇偶校验 ◆Stop bit 停止位1位

Error checking 错误检测CRC(循环冗余校验)1.2协议 当数据帧到达终端设备时,它通过一个简单的“端口”进入被寻址到的设备,该设备去掉数据帧的“信封”(数据头),读取数据,如果没有错误,就执行数据所请求的任务,然后,它将自己生成的数据加到取得的“信封”中,把数据帧返回给发送者。返回的响应数据中包含了以下内容:终端从机地址(Address)、被执行了的命令(Function)、执行命令生成的被请求数据(Data)和一个校验码(Check)。发生任何错误都不会有成功的响应。 1.2.1数据帧格式 1.2.2地址(Address)域 地址域在帧的开始部分,由一个字节8位(0~255)组成,这些位标明了用户指定的终端设备的地址,该设备将接收来自与之相连的主机数据。每个终端设备的地址必须是唯一的,仅仅被寻址到的终端会响应包含了该地址的查询。当终端发送回一个响应,响应中的从机地址数据便告诉了主机哪台终端正与之通信。

103规约详细解析

一、DL/T667-1999(IEC60870-5-103) 通信规约基本要点 1. 通信接口 1.1 接口标准:RS232、RS485、光纤。 1.2 通信格式:异步,1位起始位,8位数据位,1位偶校验位,1位停止位。字符和字节传输由 低至高。线路空闲状态为1,字符间无需线路空闲间隔,两帧之间线路空闲间隔至少33位 (3个字节) 1.3 通信速率:可变。 1.4 通信方式:主从一对多,Polling方式。 2. 报文格式 870-5-103通信规约有固定帧长报文和可变帧长报文两种报文格式,前者主要用于传送“召唤、命令、确认、应答”等信息,后者主要用于传送“命令”和“数据”等信息。 2.1 固定帧长报文 启动字符 控制域 地址域 代码和 结束字符 注:代码和=控制域+地址域(不考虑溢出位,即256模和) ————启动字符1(1byte) ————长度(1byte) ————长度(重复)(1byte) ————启动字符2(重复)(1byte) ————控制域(1byte) ————地址域(1byte) ————链路用户数据[(length-2)byte] ————代码和(1byte) ————结束字符(1byte) 注:(1)代码和=控制域+地址域+ ASDU代码和(不考虑溢出位,即256模和)(2)ASDU为“链路用户数据”包,具体格式将在下文介绍 (3)Length=ASDU字节数+2 2.3 控制域 控制域分“主 从”和“从 主”两种情况。 (1)“主 从”报文的控制域 D7 D6 D5 D4 D3 D2 D1 D0 备用PRM FCB FCV 功能码 0 1 1 (A)PRM(启动报文位)表明信息传输方向,PRM=1由主站至子站;PRM=0由子站至主站。

信息与通信专业基础知识

一、信息与通信工程 - 主要研究方向 1.数字电视图像通信 2.光纤通信 3.计算机通信及网络安全 4.无线通信 5.统计信号处理 6.生物信息技术 7.多媒体技术 8.智能信息处理 二、计算机通信简介: 计算机通信是一种以数据通信形式出现,在计算机与计算机之间或计算机与终端设备之间进行信息传递的方式。它是现代计算机技术与通信技术相融合的产物,在军队指挥自动化系统、武器控制系统、信息处理系统、决策分析系统、情报检索系统以及办公自动化系统等领域得到了广泛应用。 计算机通信按照传输连接方式的不同,可分为直接式和间接式两种。 直接式是指将两部计算机直接相联进行通信,可以是点对点,也可以是多点通播。间接式是指通信双方必须通过交换网络进行传输。 按照通信覆盖地域的广度,计算机通信通常分为局域式、城域式和广域式三类。

局域式是指在一局部的地域范围内(例如一个机关、学校、军营等)建立计算机通信。局域计算机通信覆盖地区的直径在 数公里以内。 城域式是指在一个城市范围内所建立的计算机通信。城域 计算机通信覆盖地区的直径在十公里到数十公里。 广域式是指在一个广泛的地域范围内所建立的计算机通信。通信范围可以超越城市和国家,以至于全球。广域计算机通信 覆盖地区的直径一般在数十公里到数干公里乃至上万公里。 在通常情况下,计算机通信都是由多台计算机通过通信线路连接成计算机通信网进行的,这样可共享网络资源,充分发挥 计算机系统的效能。 三、各种无线通信传输方式简介 目前随着通信技术的发展,无线通信技术的使用已经渗透到社会的各个角落。要实现全球对无人驾驶智能车的监控,无线 通信自然不能少。在我们实际生活中,可以接触到的无线通信 技术有:红外线、蓝牙、UWB、以及我们早期使用的Zigbee、无线数传电台、WIFI、GPRS、3G等等。下面针对这些技术做 一些简单的介绍。目前随着通信技术的发展,无线通信技术的 使用已经渗透到社会的各个角落。要实现全球对无人驾驶智能 车的监控,无线通信自然不能少。在我们实际生活中,可以接

Modbus标准通讯协议格式【最新】

Modbus通讯协议 下表是Modbus的功能格式: 1、读可读写数字量寄存器(线圈状态): 计算机发送命令:[设备地址] [命令号01] [起始寄存器地址高8位] [低8位] [读取的寄存器数高8位] [低8位] [CRC校验的低8位] [CRC校验的高8位] 例:[11][01][00][13][00][25][CRC低][CRC高] 意义如下: <1>设备地址:在一个485总线上可以挂接多个设备,此处的设备地址表示想和哪一个设备通讯。例子中为想和17号(十进制的17是十六进制的11)通讯。 <2>命令号01:读取数字量的命令号固定为01。 <3>起始地址高8位、低8位:表示想读取的开关量的起始地址(起始地址为0)。比如例子中的起始地址为19。 <4>寄存器数高8位、低8位:表示从起始地址开始读多少个开关量。例子中为37个开关量。

<5>CRC校验:是从开头一直校验到此之前。在此协议的最后再作介绍。此处需要注意,CRC校验在命令中的高低字节的顺序和其他的相反。 设备响应:[设备地址] [命令号01] [返回的字节个数][数据1][数据2]...[数据n][CRC 校验的低8位] [CRC校验的高8位] 例:[11][01][05][CD][6B][B2][0E][1B][CRC低][CRC高] 意义如下: <1>设备地址和命令号和上面的相同。 <2>返回的字节个数:表示数据的字节个数,也就是数据1,2...n中的n的值。 <3>数据1...n:由于每一个数据是一个8位的数,所以每一个数据表示8个开关量的值,每一位为0表示对应的开关断开,为1表示闭合。比如例子中,表示20号(索引号为19)开关闭合,21号断开,22闭合,23闭合,24断开,25断开,26闭合,27闭合...如果询问的开关量不是8的整倍数,那么最后一个字节的高位部分无意义,置为0。 <4>CRC校验同上。 2、读只可读数字量寄存器(输入状态): 和读取线圈状态类似,只是第二个字节的命令号不再是1而是2。 3、写数字量(线圈状态):

Modbus -RTU规约详解(中文版)

第一章Modbus协议 □介绍Modbus协议介绍□两种串行传输模式 □信息帧 □错误检查方法

Modbus协议介绍 Modbus可编程控制器之间可相互通讯,也可与不同网络上的其他设备进行通讯,支撑网络有Modicon的Modbus和Modbus+工业网络。网络信息存取可由控制器内置的端口,网络适配器以及Modicon提供的模块选件和网关等设备实现,对OEM(机械设备制造商)来说,Modicon可为合作伙伴提供现有的程序,可使Modbus+网络紧密地集成到他们的产品设计中去。 Modicon的各种控制器使用的公共语言被称为Modbus协议,该协议定义了控制器能识别和使用的信息结构。当在Modbus网络上进行通讯时,协议能使每一台控制器知道它本身的设备地址,并识别对它寻址的数据,决定应起作用的类型,取出包含在信息中的数据和资料等,控制器也可组织回答信息,并使用Modbus协议将此信息传送出去。 在其他网络上使用时,数据包和数据帧中也包含着Modbus协议。如,Modbus+或MAP网络控制器中有相应的应用程序库和驱动程序,实现嵌入式Modbus协议信息与此网络中用子节点设备间通讯的特殊信息帧的数据转换。 该转换也可扩展,处理节点地址,路由,和每一个特殊网络的错误检查方法。如包含在Modbus协议中的设备地址,在信息发送前就转换成节点地址,错误检查区也用于数据包,与每个网络的协议一致,最后一点是需用Modbus协议,写入嵌入的信息,定义应处理的动作。

图1说明了采用不同通讯技术的多层网络中设备的互连方法。在信息交换中,嵌入到每个网络数据包中的 图1:Modbus 协议应用示意图 * MB+为 Modbus 主处理器 4个Modus 设备或网络 编程器 编程器 (去MB+) S980(去MAP) AT/HC-984 和 HOST/MMHI AT/HC-984 HOST/MMHI 984A/B 和 S985

现代通信基础知识汇总

构成通信网的三个必不可少的要素是什么? 用户终端传输设备交换设备 电路交换,分组交换的虚电路方式以及ATM交换都采用面向链接的工作方式,他们有何异同? 相同点:通信过程均可分为三阶段:连接建立,传送信息,链接拆除 不同点:电路交换传送信息之前建立通信的 通信网的分集方式有哪些网络,拓扑结构常见的主要有哪几种类型? 根据支持业务的不同进行分类:电话通信网,电报通信网,数据通信网,综合业务数字网根据采用传输模式的不同分类:电路传送网,分组传送网,异步传送网 根据使用场合的不同进行分类:公用通信网,专用通信网 根据采用传输媒介的不同分类:有线通信网,无线通信网 根据传输和交换采用信号的不同分类:数字通信网,模拟通信网 星型网,环形网,网状网,树形网,总线型网,复合型网 通信的支撑网络主要包括哪三种网络,它们分别起何种作用? NO.7信令网:是现代通信网的“神经网络”,为现代通信网提供高效,可靠的信令服务 数字同步网:用于保证数字交换局之间,数字交换局与数字传输设备之间信号时钟的同步,并且使通信网中所有数字交换系统和数字传输系统工作在同一个时钟频率 下 3电信管理网:是一个完整,独立的管理网络,在这个网络中各种不同应用的管理系统按照TMN的标准接口互连成为一个紧密联系的实体,并且在有限点上与电 信网接口,典型网络互通,从而达到控制和管理整个电信网的目的,TMN 是一个标准化的,智能化的,综合的电信管理系统 6电路交换,分组交换的虚电路方式以及ATM交换都采用面向连接的工作方式,它们有何异同? 相同:通信过程均分为三个阶段:连接建立,传送信息,连接拆除 异:电路交换传送信息之前,建立通信源和目的之间的信息通路的链接,它是一条物理通路。分组交换通过通信连接上的所有交换节点保有选路结果和路由连接关系来实现连接是逻辑通路。ATM:分虚通道和虚信道。 第二章 举例说明什么是严格无阻塞网络,可重排无阻塞网络,广义无阻塞网络? 答:1严格无阻塞路由,交换网络中只要连接的起点与终点是空闲的,则任何时候都可以在交换网络建立一个链接。2.可重排无阻塞网络大小:任何时候都可以在交换网络中按间地时连接重新建立一个链接,只要这个起点低于空闲状态。 第三章 1.用户电路的BORSCHT七大功能是什么,还有哪些功能在一些特殊应用时会用到? 用户电路的七大功能:1.B馈电 2.D过压保护 3.R振铃控制 4.S监视 5.C编译码和滤码 6.H混合电路7.T测试。另外还有主叫号码显示,计算脉冲发送,极性反转等功能2.数字中断电路完成哪些功能? 1.码型变换 2.帧同步 3.复帧同步 4.时钟提取 5.提取和插入信号 6.帧定位(再定时)3.什么是集中控制,什么是分散控制,他们各有什么缺点?

Modbus通讯协议详解含程序

Modbus通讯协议详解(1) 作者:来源于:发布时间:2006-11-28 16:22:00 工业控制已从单机控制走向集中监控、集散控制,如今已进入网络时代,工业控制器连网也为网络管理提供了方便。Modbus就是工业控制器的网络协议中的一种。 一、 Modbus 协议简介 Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。 当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。 1、在Modbus网络上转输 标准的Modbus口是使用一RS-232C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。控制器能直接或经由Modem 组网。 控制器通信使用主—从技术,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据作出相应反应。典型的主设备:主机和可编程仪表。典型的从设备:可编程控制器。 主设备可单独和从设备通信,也能以广播方式和所有从设备通信。如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。Modbus协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据、一错误检测域。 从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和一错误检测域。如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。 2、在其它类型网络上转输 在其它网络上,控制器使用对等技术通信,故任何控制都能初始和其它控制器的通信。这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。提供的多个内部通道可允许同时发生的传输进程。 在消息位,Modbus协议仍提供了主—从原则,尽管网络通信方法是“对等”。如果一控制器发送一消息,它只是作为主设备,并期望从从设备得到回应。同样,当控制器接收到一消息,它将建立一从设备回应格式并返回给发送的控制器。 3、查询—回应周期 (1)查询 查询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功能的任何附加信息。例如功能代码03是要求从设备读保

通信规约及点表

通信接口协议书 接口系统: BAS与消防应急电源EPS 版本V01 北京动力源科技股份有限公司

1.1物理接口描述: 1.2 1.2.1通信传输介质及连接方式 说明: 1.3通讯约定: 1.3.1EPS提供标准的MODBUS RTU通信方式,并按照以下格式设 置通信口: 波特率:9600bps, 4800bps, 2400bps可选 8个数据位 无奇偶验位 1个停止位 CRC(循环冗余检测) 1.3.2通信协议介绍 1.3. 2.1协议简介 Modbus通讯采用主—从技术,即主设备查询从设备,从 设备根据主设备的查询指令,提供数据响应。

1.3. 2.2(1)查询 查询指令中的功能代码告之被选中的从设备要执行何种功 能。数据段包含了从设备要执行功能的任何附加信息。例如 功能代码03是要求从设备读保持寄存器并返回它们的内 容。数据段包含了告之从设备的信息:从何寄存器开始读及 要读的寄存器数量。错误检测域为从设备提供了一种验证消 息内容是否正确的方法。 (2)响应 如果从设备产生一个正常的响应,响应消息中的功能代码是 对查询消息中的功能代码的回应。数据段包括了从设备收集 的数据:如寄存器值或状态。 传输方式及信息帧 同一个Modbus网络上的所有设备都应选择相同的传输模式和串口参数。 Modbus RTU信息帧结构如下: T1-T2-T3-T4所示)。在最后一个传输字符之后,一个至少3.5个字符时间的停顿标定了消息的结束。一个新的消息可在此停顿后开始。 2监控点表 2.1EPS与 BAS的通讯数据

注:以上所有传送数值均为实际显示值 2.240011字所对应系统状态解释 项目解释: 1.市电状态:是指设备交流输入市电发生掉电,缺相,电压高或低等异常情况 2.逆变状态:是指逆变器正常工作或发生无逆变输出,输出电压高低等异常情况 3.运行状态:是指设备当前工作于自动转换或手动转换方式 4.负载位置:是指接于该设备的负载是由市电供电还是由逆变供电 5.强制运行:设备是否强制运行表明电池保护开关是否有效。如果设备处于强制运行状态则电池保护开关无效。 6.电池状态:是指蓄电池组中任何一节电池的正常或者故障。 7.充电状态:是指设备内部充电器工作的正常或者故障。 8.输出状态:是指设备内部每一路输出分路的正常或者故障。 (注: 1.EPS也可以提供标准RS232物理接口,但RS232与RS485不能同时使用 2.2006年8月以前出厂设备的协议与此协议不附,如需通信请升级控制器的程序)

MODBUS-RTU通讯规约重点讲义资料

附录一:MODBUS_RTU通讯规约(本协议采用主从问答方式) PDM系列仪表/变送器: PDM系列仪表/变送器采用全新的设计,革命性地改变了传统电表的概念;具有多功能、高精度、数字式、可编程、结构紧凑、多画面显示的特点,它可以满足电力工业未来对电表的需求。MODBUS通讯协议: ModBus通讯规约允许PDM系列仪表/变送器与施耐德、西门子、AB、GE等多个国际著名品牌的可编程顺序控制器(PLC)、RTU、SCADA系统、DCS或与第三方具有ModBus兼容的监控系统之间进行信息交换和数据传送。 PDM系列仪表/变送器只要简单地增加一套基于计算机(或工控机)的监控软件(如:组态王、Intouch、FIX、synall等)就可以构成一套电力监控系统。 广泛的系统集成: PDM系列仪表/变送器提供了标准的RS-485/422通讯接口及ModBus通讯协议,这个通讯协议已广泛被国内外电力行业及工控行业作为系统集成的标准。 通讯数据的类型及格式: 信息传输为异步方式,并以字节为单位。在主站和从站之间传递的通讯信息是11位的字格式: 字格式(串行数据1位二进 起始 数据 奇偶校验有奇偶校验无:无奇偶校验 停止位1位:有奇偶校验位/2位:无奇偶校验位 ●通讯数据(信息帧)格式

数据格式:地址码功能码数据区错误校检 数据长度:1字节1字节N字节16位CRC码(冗余循环码) ★注:1、1个字节由8位二进制数组成(既8 bit)。 2、ModBus是Modicon公司的注册商标。 3、“从机”在本文件中既为PDM。 一、通讯信息传输过程: 当通讯命令由发送设备(主机)发送至接收设备(从机)时,符合相应地址码的从机接收通讯命令,并根据功能码及相关要求读取信息,如果CRC校验无误,则执行相应的任务,然后把执行结果(数据)返送给主机。返回的信息中包括地址码、功能码、执行后的数据以及CRC校验码。如果CRC校验出错就不返回任何信息。 1.1 地址码: 地址码是每次通讯信息帧的第一字节(8位),从0到255。这个字节表明由用户设置地址的从机将接收由主机发送来的信息。每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应回送信息。当从机回送信息时,回送数据均以各自的地址码开始。主机 发送的地址码表明将发送到的从机地址,而从机返回的地址码表明回送的从机地址。相应的地址码表明该信息来自于何处。 1.2 功能码: 是每次通讯信息帧传送的第二个字节。ModBus通讯规约可定义的功能码为1到127。PDM 系列仪表/变送器仅用到其中的一部分功能码。作为主机请求发送,通过功能码告诉从机应执行什么动作。作为从机响应,从机返回的功能码与从主机发送来的功能码一样,并表明从机已响应主机并且已进行相关的操作。 表8.1 MODBUS部分功能码 功能码定义操作(二进制) 02 读开关量输入读取一路或多路开关量状态输入数据 01 读开关量输出读取一路或多路开关量输出状态数据 03 读寄存器数据读取一个或多个寄存器的数据 05 写开关量输出控制一路继电器“合/分”输出 06 写单路寄存器把一组二进制数据写入单个寄存器 10 写多路寄存器把多组二进制数据写入多个寄存器 1.3 数据区: 数据区包括需要由从机返送何种信息或执行什么动作。这些信息可以是数据(如:开关量输入/

相关文档