常用规约的流程及示例分析doc.docx

上传人:b****5 文档编号:28410643 上传时间:2023-07-13 格式:DOCX 页数:50 大小:37.09KB
下载 相关 举报
常用规约的流程及示例分析doc.docx_第1页
第1页 / 共50页
常用规约的流程及示例分析doc.docx_第2页
第2页 / 共50页
常用规约的流程及示例分析doc.docx_第3页
第3页 / 共50页
常用规约的流程及示例分析doc.docx_第4页
第4页 / 共50页
常用规约的流程及示例分析doc.docx_第5页
第5页 / 共50页
点击查看更多>>
下载资源
资源描述

常用规约的流程及示例分析doc.docx

《常用规约的流程及示例分析doc.docx》由会员分享,可在线阅读,更多相关《常用规约的流程及示例分析doc.docx(50页珍藏版)》请在冰豆网上搜索。

常用规约的流程及示例分析doc.docx

常用规约的流程及示例分析doc

DLT645规约,MODBUS规约,CDT92规约,从站101规约(2002版)

一DLT645规约

初始化

 

切换到第1块表

 

主站查询“正向有功数据块”

 

从站应答数据

 

主站查询“反向有功数据块”

从站应答数据

 

主站查询“正向无功总电能”

 

从站应答数据

 

主站查询“反向无功总电能”

 

从站应答数据

 

切换到下一块表

 

帧格式

说明

代码

帧起始符

68H

地址域

A0

A1

A2

A3

A4

A5

帧起始符

68H

控制码

C

数据长度域

L

数据域

DATA

校验码

CS

结束符

16H

1.帧起始符固定为68H

2.地址域A0~A5

地址域由6个字节构成,每字节2位BCD码,低地址字节在先,高地址字节在后。

当使用的地址码长度不足6字节时,高位用十六进制AAH或00补足6字节,根据电表厂家要求选择。

当地址为999999999999时,为广播地址。

3.控制码C格式如下所示。

功能码

后续帧标志

从站异常标志

传输方向

D7

D6

D5

D4

D3

D2

D1

D0

 

D7=0:

由主站发出的命令帧

D7=1:

由从站发出的应答帧

D6=0:

从站正确应答

D6=1:

从站对异常信息的应答

D5=0:

无后续数据帧

D5=1:

有后续数据帧

D4~D0:

请求及应答功能码

00000:

保留

00001:

读数据

00010:

读后续数据

00011:

重读数据

00100:

写数据

01000:

广播校时

01010:

写设备地址

01100:

更改通信速率

01111:

修改密码

10000:

最大需量清零

4.数据长度L

L为数据域的字节数。

读数据时L<=200,写数据时L<=50,L=0表示无数据域。

5.数据域DATA

数据域包括数据标识和数据等。

传输时发送方按字节进行加0x33处理,接受方按字节进行减33H处理。

(a)数据区的第1,2个字节是数据标识:

目前我们使用的程序是读4种电量的数据块,共20个电量.

“0x1f0x90”表示正向有功数据块;(报文里加0x33后是0x520xC3)

“0x2f0x90”表示反向有功数据块;(报文里加0x33后是0x620xC3)

“0x1f0x91”表示正向无功数据块;(报文里加0x33后是0x520xC4)

“0x2f0x91”表示反向无功数据块.(报文里加0x33后是0x620xC4)

查询命令的数据区只包含2个字节的数据标识,

应答报文的数据区包含:

类型标识+电度数据

(b)以上每种数据块包含5个电量,依次是:

总电能,尖峰,峰,平,谷

维护软件里20个电量的定义顺序:

正向有功总电量

反向有功总电量

正向无功总电量

反向无功总电量

正向有功尖峰

反向有功尖峰

正向无功尖峰

反向无功尖峰

6.校验码CS

从帧起始符开始到校验码之间的所有字节的算术和,模256。

不计超过256的溢出值。

7.结束符16H

标识一帧的结束,其值为16H.

报文示例

主站在发送帧信息之前,先发送3个字节0xFE以唤醒接收方.

地址域和数据均先传送低位字节,后传送高位字节。

电度值的4个字节都是按+33H传送.

对于配地址文件(.gy)的,以表地址为156237191832为例

1.主站查询“正向有功数据块”

Txd:

FEFEFE6832181937621568010252c3SUM16

从站应答:

Rxd:

6832181937621568811652c3ab89674554464748333333333333333333333333SUM16

分析:

两个68之间的6个字节是地址

第11,12个字节是数据标识:

0x520xc3

分别减0x33后为0x1f0x90=正向有功。

每种数据块传5个电度值,依次为:

总正向有功,尖峰,峰,平,谷

ab896745,分别-0x33后是78563412,实际值就是12345678

54464748,分别-0x33后是21131415,实际值就是15141321

33333333,分别-0x33后是00000000,实际值就是0

2.主站查询“反向有功数据块”

Txd:

FEFEFE6832181937621568010262c35D16

从站应答:

Rxd:

6832181937621568811662c3ab89674554464748333333333333333333333333SUM16

分析:

两个68之间的6个字节是地址

0x620xc3是数据标识,减0x33后为0x2f0x90:

反向有功

每种数据块传5个电度值,依次为:

总反向有功,尖峰,峰,平,谷

ab896745,分别-0x33后是78563412,实际值就是12345678

54464748,分别-0x33后是21131415,实际值就是15141321

33333333,分别-0x33后是00000000,实际值就是0

3.查询“正向无功数据块”

Txd:

FEFEFE6832181937621568010252c44E16

从站应答:

Rxd:

6832181937621568811652c4ab89674554464748333333333333333333333333SUM16

分析:

两个68之间的6个字节是地址

0x520xc4是数据标识,减0x33后为0x1f0x91:

正向无功

每种数据块传5个电度值,依次为:

总正向无功,尖峰,峰,平,谷

ab896745,分别-0x33后是78563412,实际值就是12345678

54464748,分别-0x33后是21131415,实际值就是15141321

33333333,分别-0x33后是00000000,实际值就是0

4.查询“反向无功数据块”

Txd:

FEFEFE6832181937621568010262c45E16

从站应答:

Rxd:

6832181937621568811662c4ab89674554464748333333333333333333333333SUM16

分析:

两个68之间的6个字节是地址

0x620xc4是数据标识,减0x33后为0x2f0x91:

反向无功

每种数据块传5个电度值,依次为:

总反向无功,尖峰,峰,平,谷

ab896745,分别-0x33后是78563412,实际值就是12345678

54464748,分别-0x33后是21131415,实际值就是15141321

33333333,分别-0x33后是00000000,实际值就是0

二.MODBUS规约

基本报文格式是:

主站发送:

地址

功能码

寄存器起始地址高位

寄存器起始地址低位

寄存器数目高位

寄存器数目低位

CRC16位校验

1字节

1字节

1字节

1字节

1字节

1字节

2字节

子站应答:

地址

功能

数据

长度

数据1

数据2

数据N

CRC16位校验

1字节

1字节

1字节

根据数据类型定

2字节

一般情况下,子站的遥测、遥信等实时量及定值等参数都存放在特定地址范围的寄存器内,实时量是只读的,参数是可读可写的,主站只是按照子站指定的地址读写寄存器就行了。

由于各种设备数据寄存器地址各不相同,寄存器内存放的数据也多种多样:

八位二进制组、字符型、整型、浮点型、时间日期型……,并且读写操作的功能码也不相同,因此程序中通用modbus规约从配置文件protocol.cfg中读取这些信息,一套程序就可以使用多种装置了。

配置文件主要内容如下:

[D0010003]

max_info_num=2

info_type_0=0

info_comm_func_0=3

info_regi_star_0=3011

info_regi_numb_0=4

info_mtdb_star_0=0

info_mtdb_numb_0=8

info_type_1=1

info_comm_func_1=3

info_regi_star_1=4

info_regi_numb_1=3

info_mtdb_star_1=0

info_mtdb_numb_1=3

注意,程序对脚本检测严格,下装到装置里的文件要去掉有效行内的注释内容,并保证有效行末尾没有空格。

附:

各种数据类型

目前标准程序里的modbus规约只处理如下0和1两种类型.

全规也版本的modbus程序下有“多数据类型modbus”,这里面的程序可处理如下所有数据类型.

0:

遥信,一位代表一个遥信,一个寄存器字包含了16个遥信

1:

遥测,一个寄存器代表一个遥测,值=高字节*256+低字节

2~100:

自定义数据类型

个别现场有程序上的特殊改动,如果用到了特定类型的数据,使用这个范围内的数据代码

101:

高字节遥测,使用寄存器字中的高字节表示一个遥测

102:

低字节遥测,使用寄存器字中的低字节表示一个遥测

103:

单字节遥测,一个字节代表一个遥测;高字节遥测排在低字节之前

104:

浮点数,接连的两个寄存器表示一个浮点数,由低到高,保留一位小数

105:

浮点数,接连的两个寄存器表示一个浮点数,由低到高,保留二位小数

106:

浮点数,接连的两个寄存器表示一个浮点数,由低到高,保留三位小数

107:

浮点数,接连的两个寄存器表示一个浮点数,由高到低,保留一位小数

108:

浮点数,接连的两个寄存器表示一个浮点数,由高到低,保留二位小数

109:

浮点数,接连的两个寄存器表示一个浮点数,由高到低,保留三位小数

110:

一个寄存器表示一个遥测,高字节表示整数,低字节字节表示小数,保留三位小数,

111:

两个寄存器表示一个遥测,第一个寄存器表示整数,第二个寄存器表示小数,保留一位小数

112:

两个寄存器表示一个遥测,第一个寄存器表示整数,第二个寄存器表示小数,保留二位小数

113:

两个寄存器表示一个遥测,第一个寄存器表示整数,第二个寄存器表示小数,保留三位小数

114:

两个寄存器表示一个电度,高位寄存器在前

115:

三个寄存器表示一个BCD码电度,高位寄存器在前

116:

电度,接连的两个寄存器表示一个浮点数,由低到高,保留一位小数

117:

电度,接连的两个寄存器表示一个浮点数,由低到高,保留二位小数

118:

电度,接连的两个寄存器表示一个浮点数,由低到高,保留三位小数

119:

电度,接连的两个寄存器表示一个浮点数,由高到低,保留一位小数

120:

电度,接连的两个寄存器表示一个浮点数,由高到低,保留二位小数

121:

电度,接连的两个寄存器表示一个浮点数,由高到低,保留三位小数

示例:

通讯协议

采用RS485.RS232通讯总线标准,1位起始位,8位数据位,1个编程位(该位为1表示地址,为0表示数据),1位停止位,MODBUS协议,波特率可设为1200、2400、9600,地址可设为0x01—0x99(十进制)。

1.遥测量

上位机发送遥测命令格式:

地址

功能码

寄存器起始地址

寄存器个数

CRC校验

01H

03H

XXH(2字节,先高后低)

XXH(2字节,先高后低)

L

H

控制器返回:

地址

功能码

数据

CRC校验

01H

03H

N字节

L

H

数据定义:

(12字节)

数据地址

名称

Type

Format

Unit

1

交流A相电压

Word

Hi-Lo

V

2

交流B相电压

Word

Hi-Lo

V

3

交流C相电压

Word

Hi-Lo

V

4

控母电压

Word

Hi-Lo

V

5

电池电压

Word

Hi-Lo

V

11,12

控母电流

Float

Lo-Hi

0.01A

13,14

电池电流

Float

Lo-Hi

0.01A

2.遥信量

上位机发送遥信命令格式:

地址

功能码

起始地址

寄存器个数

CRC校验

01H

04H

00H

01H

CRC16

控制器返回:

地址

功能码

数据1

数据2

CRC校验

01H

04H

XXH

XXH

CRC16

配置文件如下:

[D0010003]

max_info_num=3

info_type_0=0//前5个遥测都是双字节的普通遥测

info_comm_func_0=3//遥测功能码

info_regi_star_0=1//第一个遥测的地址是1

info_regi_numb_0=5//前5个遥测的数据类型完全一样并且地址连续,所以可以在一条命令里读取

info_mtdb_star_0=0//写入遥测库的起始序号

info_mtdb_numb_0=5//写入5个遥测

info_type_1=105//第6,7个遥测的类型是浮点型,占2个寄存器(4字节),低字节在前,系数是0.01即保留2位小数

info_comm_func_1=3

info_regi_star_1=11//第6个遥测的寄存器地址是11

info_regi_numb_1=4//第6,7个遥测数据类型一样并且地址连续

info_mtdb_star_1=5

info_mtdb_numb_1=2

info_type_2=1//遥信

info_comm_func_2=4//遥信功能码

info_regi_star_2=0//遥信起始地址

info_regi_numb_2=1//共两个遥信字节,即1个寄存器

info_mtdb_star_2=0//写入遥信库的起始序号

info_mtdb_numb_2=2//写入的遥信字节数,并不是遥信个数

(1个字节8个遥信)

Txd:

010300010005D409

Rxd:

01030A0051035D135801700102BAED

遥测1:

81

遥测2:

861

遥测3:

4952

遥测4:

368

遥测5:

257

Txd:

0103000B000435CB

Rxd:

010308146E5C438F423B438BBC

遥测6:

220.43

遥测7:

187.26

Txd:

01040000000131CA

Rxd:

010402B49CCE59

遥信数据字节是B49C=1001110010110100

报文里在前面字节先写入数据库,字节内部的低位对应遥信号在前,=1合;=0分

遥信1—8:

分分合合合分分合

遥信9--16:

分分合分合合分合

 

三.CDT92规约

Cdt是一种循环式规约,平时主动循环上送各种信息,为保证变位遥信及遥控返校上传的及时性,变位和遥控返校帧在全遥测上传的过程中插入优先传送.

流程如下:

子站初始化

 

上送全全遥信遥信

 

上送全遥测(重要遥测次要遥测,一般遥测)

 

送全遥测过程中是否有变位或遥控返校

Yes

Yes

插入发送变位3遍

(或插入发送遥控返校3遍)

No

继续发送遥测

 

NoYes

遥测发送完毕?

 

主站可定时发送对时命令

我们定时发送电度.

Cdt规约总体帧格式:

同步字

控制字

信息字

信息字

 

EB90EB90EB9071帧类别信息字数源站址目的站址校验码

功能码数据字节1数据字节2数据字节3数据字节4CRC

功能码字节1………………CRC

………

………

表1帧类别代码及定义

帧类别代码

定义

上行(子站主站)

下行(主站子站)

61H

重要遥测(A帧)

遥控选择

C2H

次要遥测(B帧)

遥控执行

B3H

一般遥测(C帧)

遥控撤消

F4H

遥信状态(D1帧)

升降选择

85H

电能脉冲记数值(D2帧)

升降执行

26H

事件顺序记录(E帧)

升降撤消

57H

设定命令

7AH

设置时钟

4CH

召唤子站时钟

表2功能码分配表

功能码代码

用途

00H~7FH

遥测

80H~81H

事项顺序记录

84H~85H

子站时钟返送

E0H

遥控选择(下行)

E1H

遥控返校

E2H

遥控执行(下行)

E3H

遥控撤消(下行)

E4H

遥控选择(下行)

E5H

升降返校

E6H

升降执行(下行)

E7H

升降撤消(下行)

E8H

设置命令(下行)

EEH~EFH

设置时钟(下行)

F0H~FFH

遥信

A0H~DFH

电能脉冲记数值

 

遥测

全遥测按照重要遥测(遥测1--32),次要遥测(遥测33--64),一般遥测(64往后的遥测)的顺序发送

1.重要遥测:

我们的CDT92程序里规定重要遥测是32个,所以功能码0x00~0x0F

2011/01/2511:

13:

18:

140

Txd:

EB90EB90EB90716110011792

2011/01/2511:

13:

18:

140

Txd:

009B02430091

2011/01/2511:

13:

18:

515

Txd:

01680FF5006A

2011/01/2511:

13:

18:

515

Txd:

02000000003B

2011/01/2511:

13:

18:

515

Txd:

0306C900009A

2011/01/2511:

13:

18:

890

Txd:

0400008F0005

2011/01/2511:

13:

18:

890

Txd:

050000000012

.….…

2011/01/2511:

13:

18:

895

Txd:

0F00000000CF

注释:

重要遥测:

EB90EB90EB907161........

信息字结构:

功能码(00~0F)

遥测N

b7……b0

低字节

b15

b14

b11…b8

高字节

遥测N+1

b7……b0

低字节

b15

b14

b11…b8

高字节

校验码

(1)每个信息字传送两路遥测量。

(2)b11~b0传送一路模拟量,以二进制码表示。

b11=0时为正数,b11=1时为负数,以2的补码表示。

(3)b14=1表示溢出,b15=1表示数无效。

传送的遥测值范围是:

-2048~2047

遥测功能码从0开始,每个遥测占两个字节,低字节在前,每个信息字可传两个遥测.这样很容易根据功能码判断出遥测号或根据遥测号判断出该遥测所在信息字的位置,方便上传数据不对时检查报文.

 

例一:

Txd:

009B02430091

功能码是00,此信息字里传的是第1,2路遥测,

功能码

00

遥测1

b7……b0

9B(10011011)

b15

b14

b11…b8

02(00000010)

遥测2

b7……b0

43(01000011)

b15

b14

b11…b8

00(00000000)

校验码

91

 

 

先把数据字节转化为十进制数:

0x9B=155,0x02=2,0x43=67,0x00=0

按照低字节在前的规则可得:

YC1=2*256+155=667

YC2=0*256+67=67

例2:

Txd:

0306C900009A

从报文看第7个遥测若按正常计算YC7=201(0xc9)*256+6(0x06)=51462

已经超出了CDT传送的最大值2047,所以此遥测上传的肯定有问题.一般这种情况是发生了数据溢出,这从维护软件的发送值可以得到证实.

若想从报文的内容看是否确是溢出,可参考如下分析:

功能码

03

遥测7

b7……b0

06(00000110)

b15

b14

b11…b8

C9(11001001)

遥测8

b7……b0

00(00000000)

b15

b14

b11…b8

00(00000000)

校验码

91

 

从上面可以看出YC7的b14位是1,表示数值溢出,b15=1表示数值无效.

 

2.次要遥测,一般遥测:

次要遥测和一般遥测数据处理方式都跟重要遥测一样,在此就不做详细介绍,关键通过帧类别和功能码的范围判断是那种类型.下表中给出报文示例.

我们我们的CDT9

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1