快速了解电力IEC104协议规约

本文详细介绍了IEC104规约,这是一个广泛应用于电力、城市轨道交通等行业的国际标准。内容涵盖规约简介、专业术语解释,如遥脉、遥测、遥控等,并探讨了104主站和从站间的通信过程、报文帧分类(I帧、U帧、S帧)以及遥控流程。此外,还阐述了104协议与其他协议的转换实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 规约简介
IEC104规约是一个广泛应用于电力、城市轨道交通等行业的国际标准。
2 专业术语解释
遥脉(电度量)
:是指对现场某装置所发出的脉冲信号进行周期累计的一种远程计数操作。其实,遥脉也可以看成是被具体规定了采用脉冲计数作为测量方法的一种遥测手段,它是遥测中的一种。而传统意义上的四遥中是没有提及遥脉一词的。
四遥指的是:遥信、遥测、遥控和遥调(设点);分别对应数字输入DI、模拟输入AI、数字输出DO和模拟输出AO
单点与双点的区别,以遥信为例,单点就是用一位标识一个遥信量,比如开关位置,只采集一个常开的辅助接点,值为1表示合位,0表示分位;而双点需要采集常开合常闭两个辅助接点位置,,当常开点值为1并且常闭点值为0,即10,则认为开关在合位;当常开点值=0并且常闭点值为1,即01,认为开关在分位;当两个位置值都为1,或两个值都为0,则认为开关位置不能确定。遥控也是一样的道理,SPI为遥信状态值。单点遥信,0分1合;双点遥信,1开2合,0和3为中间状态。
遥测的上送方式主要有定时主动上送(01H),响应总召唤上送(14H),越限上送(03H),而遥测值又分为归一化值、标度化值、短浮点数。
各遥测报文。其报文主体结构未变,改变是传送原因及类型标识。
归一化值(NVA)
值的范围为[-1,1]。归一化,即是将大于1的数映射到1以内的空间,通常就是用实际值除以额定值,即得到归一化的小数。具体表示法可以有F13或F16位的。占2个字节。
标度化值(SVA),值的范围为[-32768,~32767],即带符号整数。占2个字节。它的真实值就是标度值*小数点的位数,量程和小数点位置是固定的参数。(相当于16位有符号整数)
注意:归一化值与标度化值都是两个字节。高字节的最高位为符号位, 0表示正数,1表示负数。15位数据位,正数是原码,负数是补码。
短浮点数(R32-IEEE STD 754) 即计算机内浮点数的表示法,占4字节
双传输,信息体元素可以用同一个信息对象地址来构成不同的ASDU,即带时标或者不带时标的单点信息。
遥测最多可配16384个,遥测最多可配4096个,遥控最多可配256个,遥脉最多可配512个。

3 104主站和从站之间的通信过程
104通讯过程:
a,建链、启动传输
b,是否启动确认 (未确认等待启动帧返回a)
c,站召唤
d,回答全数据
e,回答结束否 (等待d结束,未结束返回d)
f,有无定时任务
g,遥控遥调
h,对时测试
i,超时处理
j,接收变化数据
k,S-FORMAT确认 (确认完毕,返回f)

4 IEC104协议结构
在这里插入图片描述

第一个字节:启动字符固定16进制数68H,十进制为104(正好代表104规约吧),二进制为:0110 1000。
第二个字节:APDU长度,注意APDU长度并不包括1字节的启动字符和1字节的APDU长度本身,而由于只有1字节代表数据长度,其最大值为255(2^8 - 1),所以最大值为255 - 2 = 253,又由于APCI除了这两个字节外还包括了4个字节的控制域(1~4),那么剩下的ASDU(可选的应用服务数据单元)长度为253 - 4 = 249字节。
5 104报文帧分类
IEC104协议的帧格式有三种(I帧、U帧、S帧)
I帧为信息帧,用于传输数据,长度大于6个字节,为长帧;
S帧为确认帧,用于确认接收的I帧,长度为6个字节,为短帧;
U帧为控制帧,用于控制启动/停止/测试,长度为6个字节,为短帧;
5.1 U格式:
不计数的控制功能类型,用于传输控制命令的报文。(U格式的APDU只包含APCI,帧长6字节。)
格式
在这里插入图片描述

类型
在这里插入图片描述

5.2 S格式:
计数的监视功能类型,用于传输对站端的确认的报文。(S格式的APDU只包含APCI,帧长6字节。)
格式
在这里插入图片描述

S格式的APDU的帧内容为如下6个字节:68 04 01 00 98 53 前四个字节固定,后两个字节表示接收序号。
S帧和I帧结合使用,用于信息确认࿰

# 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;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

上海仰科

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

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

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

打赏作者

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

抵扣说明:

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

余额充值