IEC104通信协议分析

缩写:APDU长度 APDU:应用规约数据单元 APCI:应用规约控制信息 ASDU:应用服务数据单元 TYP:类型标识 VSQ:可变结构限定词

COT:传送原因 ADR:ASDU公共地址 IOA: (Information Object Address) 指的是信息对象地址,是用于唯一标识一个数据对象的地址,用于指定一个信息对象(遥信、遥测、遥控等)的地址。

IEC协议的帧格式有三种:I帧、U帧、S帧

I帧:传输应用数据,捎带确认对方的发送

S帧:无应用数据传输,用于传输对站端的确认的报文。 长度:6字节

U帧:用于传输控制命令的报文 长度:6字节

U帧有6种报文:

68 04 07 00 00 00 启动命令
68 04 0B 00 00 00 确认命令

68 04 13 00 00 00 停止命令
68 04 23 00 00 00 停止确认

68 04 43 00 00 00 测试命令

68 04 83 00 00 00 测试确认

S帧有6字节:68 04 01 00 xx xx 前4个字节固定 控制域的第一个 8 位位组的第 1 比特为 1,第 2 比特 为 0 定义了 S 格式

image-20231024093155684

I帧:

I帧中的控制域1与控制域2为发送序号,控制域3与控制域4为接收序号

遥信遥控遥测遥调的起始地址

类别97版02版
YX1H------400H1H------4000H
YC701H------900H4001H------5000H
YKb01H-------b80H6001H-------6100H
设点B81H------c00H6201H------6400H
YMc01H------c80H6401H------6600H

类型标识

  • 1:单点信息

  • 2:带短时标的单点信息

  • 3:双点信息

  • 4:带短时标的双点信息

  • 5:步长位置信息

  • 6:带短时标的步长位置信息

  • 7:32比特串

  • 8:带短时标的32比特串

  • 9:测量值,归一化值

  • 10:带短时标的测量值,归一化值

  • 11:测量值,标度化值

  • 12:带短时标的测量值,标度化值

  • 13:测量值,短浮点数

  • 14:带短时标的测量值,短浮点数

  • 15:累计值

  • 16:带短时标的累计值

  • 17:带时标的保护设备事件

  • 18:带时标的继电保护装置成组启动事件

  • 19:带时标的继电保护装置成组输出电路信息

  • 20:具有状态变位检出的成组单点信息

  • 21:测量值,不带品质描述的归一化值

  • 30:带CP56Time2a时标的单点信息

  • 31:带CP56Time2a时标的双点信息

  • 32:带CP56Time2a时标的步位置信息

  • 33:带CP56Time2a时标的32比特串

  • 34:带CP56Time2a时标的测量值规一化

  • 35:带CP56Time2a时标的测量值标度化

  • 36:带CP56Time2a时标的测量值短浮点

  • 37:带CP56Time2a时标的累计量

  • 38:带CP56Time2a时标的继电保护装置

  • 39:带CP56Time2a时标的继电保护装置成组启动事件

  • 40:带CP56Time2a时标的继电保护装置成组输出电路信息

  • 41~44:为将来的兼容定义保留

  • 45 2d:单点遥控

  • 46 2e:双点遥控

  • 47:步调节命令

  • 48:设点命令,归一化值

  • 49:设点命令,标度化值

  • 50:设点命令,浮点数值

  • 51:32比特串

  • 52~57:为将来的兼容定义保留

  • 58:带CP56Time2a时标的单命令

  • 59:带CP56Time2a时标的双命令

  • 60:带CP56Time2a时标的步调节命令

  • 61:带CP56Time2a时标的设点命令,归一化值

  • 62:带CP56Time2a时标的设点命令,标度化值

  • 63:带CP56Time2a时标的设点命令,浮点数值

  • 64:带CP56Time2a时标的32比特串

  • 65~69:为将来的兼容定义保留

  • 70:初始化结束

  • 71~99:为将来的兼容定义保留

  • 100:总召唤

  • 101:电能脉冲召唤命令

  • 102:读命令

  • 103:时钟同步命令

  • 104:测试命令

  • 105:复位进程命令

  • 106:延时获得命令

  • 107:带CP56Time2a时标的测试命令

  • 108~109:为将来的兼容定义保留

  • 110:规一化值的参数

  • 111:比例系数的参数

  • 112:浮点数值的参数

  • 113:参数的激活

  • 114~119:为将来的兼容定义保留

  • 120:文件准备就绪

  • 121:节准备就绪

  • 122:召唤目录,选择文件,召唤文件,召唤节

  • 123:最后节,最后段

  • 124:确认文件,确认节

  • 125:段

  • 126:目录

  • 127:为将来的兼容定义保留

可变结构限定词 VSQ

12345678
地址的连续性ASDU中信息体的数目

当可变结构限定词最高位为1表示连续,其对应n个信息对象中,第一个信息对象中含有信息体地址(3个字节)表示此帧报文中的信息从这个地址开始,第二个信息对象中不再包含信息体地址,第二个信息对象地址是在第一信息对象中的信息体地址递增。当可变结构限定词最高位为0表示不连续,每个信息对象中都包含信息体地址。

传送原因

12345678
TPN传送原因

其中T代表试验位(0未试验,1试验),它说明了应用服务数据单元是在测试条件下所产生的,被用于测试传输和设备,但不控制过程。工程中很少使用。

P/N位用以对由启动应用功能所请求的激活以肯定或者否定确认。P=0表示肯定确认,P=1表示否定确认。在工程上,主要用于表示遥控选择成功或失败。

img

ASDU公共地址和信息对象地址

主站发送:68 0e 00 00 00 00 64 01 06 00 01 00 00 00 00 14

68:代表起始字节  
0e:代表后面的字节长14  
00 00:发送序号 
00 00:接收序号 
64:类型标识 (对应十进制100:总召唤)
01:可变结构限定词  周期循环
06 00:传送原因,2个字节
01 00:公共地址,即RTU站址,2个字节  一般为01
00 00 00:信息体地址,3个字节
14:信息元素的值

总召唤

100

右键发送报文—>TI类型标识:100–>发送

68 0e 02 00 00 00 64 01 14 00 01 00 00 00 00 14

68:起始字节 
0e:数据单元长度
02 00:发送序号为1  02 00 计算方法:00 02转化为10进制也是2 2/2=1 转化为因为控制域1最后一位固定为0所以其8进制为 0000 0010去掉0,其发送序号为1
00 00:接收序号为0
64:类型标识 为总召唤
01:可变结构限定词
14 00:传送原因 00 14 响应总召唤     具体如下表
00 01:公共地址,是一个系统参数,每一个配电终端对应唯一的一个值
00 00 00 :信息体地址,3个字节 信息对象地址位三个字节(总召唤,信息地址为0)(时钟同步,信息地址为0)(复位进程地址为0)(初始化地址为0)
14:信息元素的值

68 13 00 00 00 00 0a 01 01 00 01 00 00 00 00 00 00 00 49 99 01

遥控

遥控主要分为 2D(45) --单点遥控 2E(46) --双点遥控

对于2d单点遥控,报文最后一字节(=80:分闸选择,=81:合闸选择;00:分闸执行;01:合闸执行)

主:68 0e 06 00 04 00 2d 01 06 00 01 00 00 00 00 80

68:起始字节
0e:后面的报文长度
06 00:发送序号为3
04 00:接收序号为2
2d:类型标识为单点遥控
01:可变结构限定词
06 00:传送原因:激活
01 00:公共地址为1
00 00 00:信息体地址   点位0  信息体地址-表的起始地址
80:分  

从:68 0e 04 00 08 00 2d 01 07 00 01 00 00 00 00 80(0100 0000)

68:起始字节
0e: 后面的报文长度
04 00:发送序号为2
08 00:接收序号为4
2d:类型标识为单点遥控
01:可变结构限定词,即后面有一个信息体
07 00:激活确认
01 00:公共地址为1
00 00 00:点号为0
80:分

主:68 0e 08 00 06 00 2d 01 06 00 01 00 00 00 00 00

68:起始字节
0e: 后面的报文长度
08 00:发送序号为4
06 00:接收序号为3
2d:类型标识为单点遥控
01:可变结构限定词,即后面有一个信息体
06 00:激活
01 00:公共地址为1
00 00 00:点号为0
00:分

从:68 0e 06 00 0a 00 2d 01 0a 00 01 00 00 00 00 00

68:起始字节
0e: 后面的报文长度
06 00:发送序号为3
0a 00:接收序号为5
2d:类型标识为单点遥控
01:可变结构限定词,即后面有一个信息体
0a 00:激活终止
01 00:公共地址为1
00 00 00:点号为0
00:分

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

68 0e 0a 00 08 00 2d 01 06 00 01 00 00 00 00 81

遥信

01—不带时标的单点遥信,每个遥信占1个字节

14—具有状态变位检测的成组单点遥信,每个字节包括8个遥信

02—带3个字节短时标的单点遥信

1E—带7个字节时标的单点遥信

03—不带时标的双点遥信,每个遥信占一个字节

IEC104规约的帧格式

IEC104协议的帧格式有三种(I帧、U帧、S帧),基本格式如下图所示

类型标识描述方向常用
M_SP_NA_1(1)单点信息(布尔)监视遥信(不带时标的单点遥信,每个遥信占1个字节)
C_SC_NA_1(45)单指令(BOOLEAN)控制单点遥控
遥信:遥信是指通过远程通信技术获取储能系统的状态信息,例如开关状态、故障信息等。遥信的作用是实时监控储能系统的运行状态,及时发现和处理异常情况。 遥测:遥测是指通过远程通信技术获取储能系统的参数信息,例如电压、电流、温度、功率等。遥测的作用是实时监测储能系统的运行参数,掌握储能系统的运行情况,为储能系统的优化和管理提供依据。 遥控:遥控是指通过远程通信技术控制储能系统的开关、参数设置等操作。遥控的作用是实现对储能系统的远程控制,提高储能系统的可控性和灵活性。 遥调:遥调是指通 过远程通信技术调整储能系统的参数,例如功率输出、电压、电流等。遥调的作用是实现对储能系统的远程调整,满足不同的应用需求。

5个点位,单点遥信地址为1,2,3,4,5 单点遥控地址为24577,24578,24579,24580,24581

进行总召唤:

返回单点信息报文

68 1e 04 00 06 00 01 05 14 00 01 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 
68 0e 06 00 06 00 64 01 0a 00 01 00 00 00 00 14
68:起始字符
1e:后面的长度
04 00:发送序号2
06 00:接收序号3
01:类型为单点遥信
05:可变结构限定词,及后面有5个信息体
14 00:传送原因:响应总召唤
01 00:公共地址为00 01  进行高低位的转换,之后将16进行转换为公共地址,即为对应的公共地址 
01 00 00:点号为1(信息体地址)
00:点号1当前状态为分
02 00 00: 点号为2(信息体地址)
00:点号2当前状态为分
03 00 00:点号为3(信息体地址)
00:点号3当前状态为分
04 00 00:点号为4(信息体地址)
00:点号4当前状态为分
05 00 00:点号为4(信息体地址)
00:点号5当前状态为分
68 0e 06 00 06 00 64 01 0a 00 01 00 00 00 00 14
68:起始字节 
0e:数据单元长度
06 00:发送序号为3  
06 00:接收序号为3
64:类型标识 为总召唤
01:可变结构限定词
0a 00:结束总召
00 01:公共地址,是一个系统参数,每一个配电终端对应唯一的一个值
00 00 00 :信息体地址,3个字节 信息对象地址位三个字节(总召唤,信息地址为0)(时钟同步,信息地址为0)(复位进程地址为0)(初始化地址为0)
14:信息元素的值,代表仅处理总查询

68 0e 16 00 12 00 2e 01 6f 00 01 00 01 60 00 01

单点0分 1合

双点 01 分 10 合
:点号4当前状态为分
05 00 00:点号为4(信息体地址)
00:点号5当前状态为分


68 0e 06 00 06 00 64 01 0a 00 01 00 00 00 00 14
68:起始字节
0e:数据单元长度
06 00:发送序号为3
06 00:接收序号为3
64:类型标识 为总召唤
01:可变结构限定词
0a 00:结束总召
00 01:公共地址,是一个系统参数,每一个配电终端对应唯一的一个值
00 00 00 :信息体地址,3个字节 信息对象地址位三个字节(总召唤,信息地址为0)(时钟同步,信息地址为0)(复位进程地址为0)(初始化地址为0)
14:信息元素的值,代表仅处理总查询






68 0e 16 00 12 00 2e 01 6f 00 01 00 01 60  00 01

单点0分 1合

双点 01 分 10 合 
# IEC104 Protocol of IEC104 and IEC101 ## by chendajie 2014-2015 ## 电网IEC104/IEC101通信协议 ============================== 隔离协议内容与平台或者硬件相关性,已经在stm32平台和linux平台移植测试通过,可轻松移植到其他平台。 ============================================================================ 队列实现的隔离,目前实现简单的先入先出队列,可根据需求用其他队列算法替换。 移植调用实现: 1.在不同平台下,实现_iec10x结构体的函数指针(利用函数指针实现的接口)。 2.调用RegisterIEC10XMoudle,注册实现的_iec10x接口。 3.创建线程一调用Iex104_Receive管理收包解析。 4.创建线程二调用Iec10x_Scheduled实现出队调度。 5.创建线程三实现状态机Iec104_StateMachine,实现协议状态管理,协议包组包入队。 代码内容 IEC0x目录 iec101.c iec101协议包内容 iec104.c iec104协议包内容 iec10x.c 队列初始化,入队出对实现,队列优先级等相关实现,队列调度实现 PRIO_QUEUE_Iec10x.c 队列具体算法实现 test目录 linux上简单测试代码,仅供参考,作者具体协议应用在stm32上,利用状态机控制数据包入队与出队调度 重要函数: Iec10x_Scheduled:出队调度 IEC10X_Enqueue:入队函数 IEC10X_Dequeue:出队函数 IEC10X_FindQHead:查找最高优先级数据包 IEC10X_XXX:前缀为IEC10X_的函数为各个协议包的组包函数 Iec104_StateMachine: 104协议状态机 Iex104_Receive:收包解析 RegisterIEC10XMoudle:协议模块注册,初始化 重要结构体: 用函数指针实现的移植接口,根据不同平台与硬件特性,选择性实现以下接口 typedef struct _iec10x { char * name; int (* Init)(void); void (* Delay_ms)(uint16_t); void (* CloseLink)(void); void *(* Malloc)(uint8_t NumByte); void (* Free)(void *buffer); uint8_t (* enqueue)(Iec10x_PrioQueue_T *QueueHdr, Iec10x_PrioNode_T *NewNode); Iec10x_PrioNode_T *(* dequeue)(Iec10x_PrioQueue_T * QueueHdr); Iec10x_PrioNode_T *(* FindQHead)(Iec10x_PrioQueue_T * QueueHdr); char (* GetPrio)(void); void (* InitQueue)(Iec10x_PrioQueue_T *PrioQueue); void (* ClearQueue)(Iec10x_PrioQueue_T * QueueHdr); uint8_t (* Send)(int socketfd,char *data,int len); uint32_t (* SetTime)(PCP56Time2a_T time); uint32_t (* GetTime)(PCP56Time2a_T time); int8_t (* GetStationState)(uint16_t Addr, uint8_t DevType); float (* GetStaValue)(uint16_t Addr, uint8_t DevType); uint16_t (* GetLinkAddr)(void); int8_t (* GetInfoNum)(uint8_t *InfoNum, uint8_t DevType); int8_t (* SetConfig)(long Value, uint32_t addr); int8_t (* SaveFirmware)(uint8_t FirmLen, uint8_t *buf,uint32_t FirmwareType, uint32_t Iec10x_Update_SeekAddr); int8_t (* CheckFirmware)(uint32_t FirmwareType, uint32_t TotalLen); int8_t (* UpdateFirmware)(uint32_t FirmwareType); int8_t (* BackoffFirmware)(uint32_t FirmwareType); #ifdef IEC10XLOCK void (* LOCK)(void); void (* UNLOCK)(void); #endif } *PIEC10X_T, IEC10X_T;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值