(电力开发)376.1 主站通信协议基本结构解析

备注:需要前提知识:👋计算机中进制的转换,👋进制运算,👋大端序与小端序
可以参考我之前的文章:https://shuzhilin.top/archives/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80md
参考博客:https://blog.csdn.net/yangactive/article/details/84775232
新手上路,请多关照🤣🤣🤣。
知识导图:376.1数据帧.xmind
解析帮助工具:链接:https://pan.baidu.com/s/1vwDAJjvv253RKZCFz-UDJw?pwd=08dy 提取码:08dy
在这里插入图片描述

一 协议基本知识

1.1 376.1 协议

  • 主站与采集终端通信协议,规定了电力用户用电信息采集系统主站和采集终端之间进行数据传输的帧格式,数据编码及传输规则。
  • 适用于点对点,多点共线及一点对多点的通信方式,适用于主站对终端执行主从问答方式以及终端主动上传方式的通信。

1.2 专业术语

  • terminal address:系统中终端设备的地址编码,简称终端地址(唯一地址)。
  • system broadcast address:系统中所有终端都应该响应的地址编码(广播地址)。
  • terminal group address:具有某一相同属性的终端群组编码,如属于同一行业、同一变电站、同一线路,响应同一个命令。
  • master station address:主站中具有通信需求的对象(如工作站、应用功能模块等)的编码(终端与主站通信的地址)。
  • indicated energy value:电能表计度器电能示值的简称。
  • measured point:指可以测量出唯一的一组电气量值的测量装置与终端的顺序电气连接点,当物理上相同的一个电气连接点被多个装置所测量,或者被一个装置所测量但通过多种方式被传递到终端时,按照多个测量点计,每个测量点具有唯一的逻辑定位编码,是该装置在终端的参数配置、数据应用的唯一对象标识。(可以理解为集中器下的电表)。
  • group total:指相关的各测量点的某一同类电气量值按设置的加或减运算关系计算得到的数值。
  • Data unit identify:用于表示一个或一组信息点的一种或一组信息类型的标识。
  • information point:表示参数或数据的对象信息,如测量点、总加组、控制轮次、直流模拟量分路等。
  • information type:表示参数或数据的分类信息,一个信息类可以是一种参数或数据,也可以是一组参数或数据的集合。
  • task:规定终端在指定时间或条件下执行所需的操作序列。
  • communication flow:指由终端以本数据传输协议完整报文帧为基础统计的,与主站间的接收与发送报文帧的累计字节数。

1.3 符号和缩略语

符号和缩略语表示
BIN二进制编码
BS独立位组合
C控制域
CON请求确认标志位
CS帧校验和
DIR传输方向位
EC,EC1,EC2事件计数器
ERC事件记录代码
FCB帧计数位
FCV帧计数有效位
FIR首帧标志:报文的第一帧
FIN末帧标志:报文的最后一帧
Fn信息类标识码
G电能量单位位
G1、G2、G3组成倍率的码位
L长度
L1用户数据长度
Lcn中文信息长度
Le事件记录长度
MSA主站地址
P校验位
pn信息点标识码
PFC启动帧计数器
PRM启动标志位
PSEQ启动帧序号
PW消息认证码字段
RSEQ响应帧序号
S正负极性位
S0上下浮动位
SEQ帧序列域
Tp时间标签
TpV时间标签有效位
Td_c曲线类数据时标
Td_d日冻结类数据时标
Td_h小时冻结类数据时标
Td_m月冻结类数据时标

1.4 数据结构

帧的基本单元为8位字节。链路层传输顺序为低位在前,高位在后;低字节在前,高字节在后。
image.png
案例:68 32 00 32 00 68 E9 00 30 0F 27 00 00 72 00 00 04 00 C8 16
传输规则:

  • 线路空闲状态为二进制1。
  • 帧的字符之间无线路空闲间隔;两帧之间的线路空闲间隔最少需33位。
  • 如按e)检出了差错,两帧之间的线路空闲间隔最少需33位。
  • 帧校验和(CS)是用户数据区的八位位组的算术和,不考虑进位位。(重要判断帧是否有效)

接收方校验:

  • 对于每个字符:校验起动位、停止位、偶校验位。 对于每帧:
  • 检验帧的固定报文头中的开头和结束所规定的字符以及协议.标识位;
  • 识别2个长度L;
  • 每帧接收的字符数为用户数据长度L1+8;
  • 帧校验和 (用户数据区的8位运算和)
  • 结束字符(16)

二 解析基本帧结构

案例:68 32 00 32 00 68 E9 00 30 0F 27 00 00 72 00 00 04 00 C8 16

2.1 长度(L 2字节)

image.png

2.1.1 协议标识

  • D0~D1:协议标识


Java:代码中判断
案例:68 32 00 32 00 68 E9 00 30 0F 27 00 00 72 00 00 04 00 C8 16 (16进制)

frame[1] & 0x03 = 数据帧的第二个字节& 0000 0011 
1:2005
2:376.1
3:保留
4:禁止  
32 & 0x03 = 0011 0010 & 0000 0011 = 2

2.1.2 用户数据长度

  • 用户数据长度L1:由D2~D15组成,采用BIN编码,是控制域、地址域、链路用户数据(应用层)的字节总数(注意)
  • 采用专用无线数传信道,长度L1不大于255。
  • 采用网络传输,长度L1不大于16383。

案例:68 BE 01 BE 01 68 A8 00 30 0F 27 00 0C E1 02 01 01 04 19 09 17 06 11 04 00 00 00 80 00 00 00 00 20 00 00 00 00 20 00 00 00 00 20 00 00 00 00 20 00 00 00 40 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 10 00 00 00 20 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 20 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 05 00 01 00 00 03 51 16 19 09 CC 16
Java:

frame[2]<<8 | frame[1])>>2
0000 0001 <<8 | 1011 1110>>2
0000 0001 0000 0000 | 0000 0000 0010 1111 
12F    
return (frame[2]<<8 | frame[1])>>2)

image.png

2.2 控制域(C)

image.png
控制域C表示报文传输方向和所提供的传输服务类型的信息

2.2.1 DIR

DIR=0,表示此帧报文是由主站发出的下行报文,DIR=1,表示此帧报文是由终端发出的上行报文。

frame[6] & 0x80  = & 1000 0000 

2.2.2 PRM

PRM=1,表示此帧报文来自启动站;PRM=0,表示此帧报文来自从动站。

frame[6] & 0x40 =& 0100 0000

2.2.3 FCB(下行)

  • 当帧计数有效位FCV=1时,FCB表示每个站连续的发送/确认或者请求/响应服务的变化位。FCB位用来防止信息传输的丢失和重复。
  • 启动站向同一从动站传输新的发送/确认或请求/响应传输服务时,将FCB取相反值。启动站保存每一个从动站FCB值,若超时未收到从动站的报文,或接收出现差错,则启动站不改变FCB的状态,重复原来的发送/确认或者请求/响应服务。
  • 复位命令中的FCB=0,从动站接收复位命令后将FCB置“0”。
frame[6] & 0x20 & 0010 0000

2.2.4 ACD(上行)

ACD位用于上行响应报文中。ACD=1表示终端有重要事件等待访问,则附加信息域中带有事件计数器ECACD=0表示终端无事件数据等待访问。(当ACD为11时,我们可以去记录终端的事件)
ACD置“1”和置“0”规则:
a) 自上次收到报文后发生新的重要事件,ACD位置“1”;
b) 收到主站请求事件报文并执行后,ACD位置“0”。

frame[6] & 0x20 & 0010 0000

2.2.5 FCV (下行)

FCV=1,表示FCB位有效;FCV=0,表示FCB位无效。

frame[6] & 0x10 & 0001 0000

2.2.6 功能码

功能码定义(PRM=1)

功能码帧类型服务功能
0——备用
1发送∕确认复位命令
2~3——备用
4发送∕无回答用户数据
5~8——备用
9请求∕响应帧链路测试
10请求∕响应帧请求1级数据
11请求∕响应帧请求2级数据
12~15——备用

a) 启动站功能码10(请求1级数据)用于应用层请求确认(CON=1)的链路传输,应用层请求确认标志见本部分4.3.4.3.4。
b) 启动站功能码11(请求2级数据)用于应用层请求数据的链路传输。
功能码定义(PRM=0)

功能码帧类型服务功能
0确认认可
1~7——备用
8响应帧用户数据
9响应帧否认:无所召唤的数据
10——备用
11响应帧链路状态
12~15——备用
frame[6] & 0x0F & 0000 1111

案例:68 32 00 32 00 68 E9 00 30 0F 27 00 00 72 00 00 04 00 C8 16

E9  1110 1001
DIR: 1
PRM: 1
ACD: 1
功能码:9 链路测试    

2.3 地址域(A)

GB 2260—2007:https://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=C9C488FD717AFDCD52157F41C3302C6D
地址域由行政区划码A1、终端地址A2、主站地址和组地址标志A3组成
image.png

地址域数据格式字节数
行政区划码A1BCD2
终端地址A2BIN2
主站地址和组地址标志A3BIN1

前提知识:

  • 小端字节序指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处。
  • 大端字节序是高字节数据存放在低地址处,低字节数据存放在高地址处。
  • 高低字节:一般PC是低字节序,如果按平时书写习惯,从左到右是高位到地位的顺序,则例如0X12345678,在内存中的情况是
  • **高地址👉 12 34 56 78 👈低字节 **

2.3.1 BCD码(A1)

一种编码方式,用二进制表示十进制。由于4位二进制共有16种可能,而只需表示0-9的十个数,故有一定的操作空间。(简单来说就是4位二进制,来表示十进制)。
我的理解如下:68 32 00 32 00 68 C9 03 44 04 00 00 02 71 00 00 01 00 88 16
第一部分为行政区划码_A1,行政区划码按_GB 226091_的规定执行,数据格式为两字节_BCD_码_03 44字节顺序为低位在前高位在后,实际数值应为_4403_

0011 0000 0000 0000
 3    0    0    0
个位  十位  百位 千位   
(frame[7] & 0x0F) + (frame[7] >> 4) * 10 +(frame[8] & 0x0F )*100 +  (frame[8] >> 4) * 1000   

2.3.2 终端地址 (A2)

  • 终端地址A2选址范围为1~65535。A2=0000H为无效地址,A2=FFFFH且A3的D0位为“1”时表示系统广播地址
  • 第二部分为终端地址_A2_,终端地址_A2_选址范围为_1_~_65535_。A2=0000H_为无效地址,A2=FFFFH_且_A3_的_D0_位为“1”时表示系统广播地址,数据格式为两字节_BIN_码_04 00字节顺序为低位在前高位在后,实际数值应为_0004
(frame[10]<<8) + frame[9]

我们来看:68 3a 00 3a 00 68 4b 00 30 0f 27 00 0e 71 00 00 02 00 00 17 49 16
这个终端地址(HEX):3000270F

2.3.3 主站地址和组地址标志(A3)

  • _A3_的_D0_位为终端组地址标志,_D0=0_表示终端地址_A2_为单地址;_D0=1_表示终端地址_A2_为组地址;A3_的_D1_~_D7_组成_0_~_127_个主站地址_MSA
  • 主站启动的发送帧的_MSA_应为非零值,其终端响应帧的_MSA_应与主站发送帧的_MSA_相同。终端启动发送帧的_MSA_应为零,其主站响应帧的_MSA_也应为零。
  • 数据格式为_1_字节_BIN_码_00,A3_的_d0_位为终端组地址标志,_d0=0_表示终端地址_A2_为单地址,_d7_~_d1_为主站地址_MSA,_另外该帧是由终端发起的上行报文。
  • 终端启动发送帧的_MSA_应为_0_,其主站的响应帧也应为_0_,这是硬性规定,如果不是_0_,则一定是错误的。
frame[11]>>1

2.4 帧校验和(CS)

帧校验和是用户数据区所有字节的八位位组算术和,不考虑溢出位。用户数据区包括控制域、地址域、链路用户数据(应用层)三部分。
案例:68 3a 00 3a 00 68 4b 00 30 0f 27 00 0e 71 00 00 02 00 00 17 49 16
帧校验和:49

count: 为控制域、地址域、链路用户数据(应用层)字节总数
count&0xFF;

2.5 应用层


注意:对于应用层需要加密的关键数据,加密的数据区包括:应用层功能码、帧序列域、数据单元标识及数据单元部分

2.5.1 应用层功能码(AFN)

应用层功能码AFN由一字节组成,采用二进制编码表示

应用功能码AFN应用功能定义
00H确认∕否认
01H复位
02H链路接口检测
03H中继站命令
04H设置参数
05H控制命令
06H身份认证及密钥协商
07H备用
08H请求被级联终端主动上报
09H请求终端配置
0AH查询参数
0BH请求任务数据
0CH请求1类数据(实时数据)
0DH请求2类数据(历史数据)
0EH请求3类数据(事件数据)
0FH文件传输
10H数据转发
11H~FFH备用

案例:68 3a 00 3a 00 68 4b 00 30 0f 27 00 0e 71 00 00 02 00 00 17 49 16
0E:表示请求3类数据(事件数据)

2.5.2 帧序列域(SEQ)

帧序列域SEQ为1字节,用于描述帧之间的传输序列的变化规则,由于受报文长度限制,数据无法在一帧内传输,需要分成多帧传输(每帧都应有数据单元标识,都可以作为独立的报文处理)。

D7D6D5D4D3~D0
TpVFIRFINCONPSEQ∕RSEQ
2.5.2.1 Tpv
  • TpV=0,表示在附加信息域中无时间标签Tp
  • TpV=1,表示在附加信息域中带有时间标签Tp
_seq & 0x80)
2.5.2.2 FIR、FIN
  • FIR:置“1”,报文的第一帧。
  • FIN:置“1”,报文的最后一帧。
  • FIR、FIN组合状态所表示的
    | FIR | FIN | 应用说明 |
    | — | — | — |
    | 0 | 0 | 多帧:中间帧 |
    | 0 | 1 | 多帧:结束帧 |
    | 1 | 0 | 多帧:第1帧,有后续帧。 |
    | 1 | 1 | 单帧 |
_seq & 0x40 
_seq & 0x20    
2.5.2.3 CON
  • 在所收到的报文中,CON位置“1”,表示需要对该帧报文进行确认;置“0”,表示不需要对该帧报文进行确认
_seq & 0x10
2.5.2.4 PSEQ/RSEQ

启动帧

  • PSEQ取自1字节的启动帧计数器PFC的低4位计数值0~15
  • 每一对启动站和从动站之间均有1个独立的、由1字节构成的计数范围为0~255的启动帧帧序号计数器PFC,用于记录当前启动帧的序号。启动站每发送1帧报文,该计数器加1,从0~255循环加1递增;重发帧则不加1。(就是计数器)

响应帧

  • 响应帧序号RSEQ以启动报文中的PSEQ作为第一个响应帧序号,后续响应帧序号在RSEQ的基础上循环加1递增,数值范围为0~15。

帧序列改变规则

  • 启动站发送报文后,当一个期待的响应在超时规定的时间内没有被收到,如果允许启动站重发,则该重发的启动帧序号PSEQ不变。重发次数可设置,最多3次;重发次数为0,则不允许重发。
  • 当TpV=0时,如果从动站连续收到两个具有相同启动帧序号PSEQ的启动报文,通常意味着报文的响应未被对方站收到。在这种情况下,则重发响应(不必重新处理该报文)。
  • 当TpV=0时,如果启动站连续收到两个具有相同响应帧序号RSEQ的响应帧,则不处理第二个响应。
  • 终端能同时处理多个请求。

传输类别

类别功能用途
S1发送∕无回答启动站发送传输,从动站不回答。
S2发送∕确认启动站发送复位命令,从动站回答确认。
S3请求∕响应启动站请求从动站的响应,从动站作确认、否认或数据响应。

S1
image.png
S2
image.png
S3
image.png

seq & 0x0F

2.5.3 数据单元与数据标识

信息点DADA1D7D6D5D4D3D2D1D0
DA2D7D6D5D4D3D2D1D0
信息类DTDT1D7D6D5D4D3D2D1D0
DT2D7D6D5D4D3D2D1D0
2.5.3.1 DA

信息点_DA_:信息点_DA_由信息点元_DA1_和信息点组_DA2_两个字节构成。DA2_采用二进制编码方式表示信息点组,低位在前高位在后,DA1_对位表示某一信息点组的_1_~_8_个信息点,以此共同构成信息点标识_pnn=1_~_2040),当_DA1_和_DA2_全为“0”时,表示终端信息点,用_p0_表示;运算规则为*(DA2-1)8+DA1对应位的值就是信息点标识_pn

信息点组DA2信息点元DA1
D7~D0D7D6D5D4D3D2D1D0
1p8p7p6p5p4p3p2p1
2p16p15p14p13p12p11p10p9
3p24p23p22p21p20p19p18p17
………………………………………………
255P2040P2039P2038P2037P2036P2035P2034P2033
信息点组_DA1_对应值
0x808
0x407
0x206
0x105
0x084
0x043
0x022
0x011
  • 当DA1和DA2全为“0”时,表示终端信息点,用p0表示;当DA1=FFH、DA2=00H时,表示所有有效测量点(不含p0)。
  • 信息点标识pn对应于不同信息类标识Fn可以是测量点号、总加组号、控制轮次、直流模拟量端口号、任务号。

我的理解是对应的电表地址的索引:1~2033
案例:01 02
DA1: 0000 0001 DA2:2 =p9

2.5.3.2 DT

信息类_DT_由信息类元_DT1_和信息类组_DT2_两个字节构成。DT2_采用二进制编码方式表示信息类组,DT1_对位表示某一信息类组的_1_~_8_种信息类型,以此共同构成信息类标识_Fnn=1_~_248),运算规则为DT2*8+DT1**对应位的值(8421码)**就是信息类标识_Fn

信息类组DT2信息类元DT1
D7~D0D7D6D5D4D3D2D1D0
0F8F7F6F5F4F3F2F1
1F16F15F14F13F12F11F10F9
2F24F23F22F21F20F19F18F17
………………………………………………
30F248F247F246F245F244F243F242F241
……未定义

案例:04 00 =F3 心跳帧

2.5.4 附加信息域 (AUX)

  • 附加信息域可由消息认证码字段PW、事件计数器EC和时间标签Tp组成。
  • 消息认证码字段用于重要的下行报文中。
  • 事件计数器用于具有重要事件告警状态需上报的上行报文中。
  • 时间标签用于允许同时建立多个通信服务的链路传输和信道延时特性较差的传输中。
2.5.4.1 PW

消息认证码字段PW用于重要下行报文,由16字节组成,PW是由主站按系统约定的认证算法产生,并在主站发送的报文中下发给终端,由终端进行校验认证,通过则响应主站命令,反之则否认。终端在收到带有PW的报文,必须在认证通过后,才能响应命令。

2.5.4.2 EC

事件计数器EC用于ACD位置“1”的上行响应报文中,EC由2字节组成,分别为重要事件计数器EC1和一般事件计数器EC2。计数范围0~255,循环加1递增。每发生1个事件,相应的计数器自动加1。

事件计数器EC数据格式字节数
重要事件计数器EC1BIN1
一般事件计数器EC2BIN1
2.5.4.3 TP
  • 时间标签用于交换网络通道中,对采用同时建立多个通信服务的传输服务,进行辅助判决接收报文的时序和时效性。时间标签Tp由6字节组成
  • 时间标签Tp由启动站产生,并通过报文传送给从动站,从动站据此判决收到的报文的时序和时效性,如判别有效,从动站发送响应帧,并在响应帧中将时间标签Tp返回启动站。
启动帧帧序号计数器PFCBIN
数据名称数据格式单位字节数
1
启动帧发送时标见附录A.16秒分时日4
允许发送传输延时时间BINmin1
  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长安不及十里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值