南瑞IEC104协议修改与代码实现分析

5星 · 超过95%的资源 19 下载量 99 浏览量 更新于2024-11-07 1 收藏 11KB ZIP 举报
资源摘要信息: "南瑞IEC104协议的实现与修改" 知识点: IEC 104协议概述: IEC 104是国际电工委员会(International Electrotechnical Commission)发布的关于电力系统自动化通讯协议的国际标准,编号为IEC 60870-5-104。它基于IEC 60870-5-101,但是为了适应基于TCP/IP网络的通讯而扩展和修改。IEC 104通常用于变电站自动化系统(Substation Automation System, SAS)和电网控制中心之间的数据交换。 南瑞技术有限公司(NARI Group Corporation)作为电力自动化领域的领先企业,在IEC 104协议的实现上有着自己特定的实践和产品。南瑞IEC104通常指的是南瑞对IEC 104协议的具体实现代码,这些代码可能用于南瑞自身产品或者为客户提供定制化的解决方案。 文件描述与标签分析: 在提供的文件信息中,“南瑞IEC104修改过_iec104_南瑞_104_104规约_”是文件标题,它表明文件内容与南瑞公司关于IEC 104协议的实现有关。其中提到的“修改过”可能意味着文件中包含了对原始IEC 104协议标准的修改或定制。标签“iec104 南瑞 104 104规约”进一步证实了文件内容的焦点是与南瑞公司相关的IEC 104协议实现。 描述中提到的“其中只有一个.cpp文件参考意义不大”,暗示在所提及的文件集合中,仅有一个C++源文件(.cpp文件)是与参考或研究相关的,而其他文件可能不具有同等的价值。这可能表明开发者的关注点集中在特定的代码实现上,或者是该项目正在进行中,并非完整。 文件名称列表表明,提供的文件可能被打包为一个压缩文件(例如.zip或.rar格式),名为“南瑞IEC104”。用户在处理这类文件时应当注意检查和了解其内包含的文件结构和代码功能,以便更好地理解南瑞如何实现和修改IEC 104协议。 知识点延展: 南瑞IEC 104协议实现特点: - 通常情况下,南瑞的IEC 104协议实现会遵循国际标准,并结合中国的电力系统通讯特点进行本土化改进。 - 南瑞可能在协议实现中加入了一些扩展功能以满足特定的业务需求,例如对实时数据传输的优化、对安全性措施的增强等。 - 南瑞的IEC 104实现可能包含多种通讯方式,如以太网通讯、光纤通讯等,并支持多种网络协议栈。 IEC 104协议的应用场景: - 在电网自动化中,IEC 104协议用于实现远程控制和监测,例如遥控操作、遥测、遥信等。 - IEC 104协议被广泛应用于调度中心与变电站之间的SCADA(Supervisory Control And Data Acquisition,监控和数据采集)系统通信。 - 在智能电网技术中,IEC 104可用于分布式能源资源的接入和管理,从而实现电网的高效和可靠运行。 开发和维护IEC 104协议代码时需注意的问题: - 遵守国际IEC标准,确保代码与国际电力系统通讯协议的兼容性。 - 确保代码的安全性,对数据传输进行加密处理,以防止信息泄露或被篡改。 - 考虑代码的可扩展性和维护性,使其能够适应未来的技术发展和业务需求变化。 - 保证代码的高性能和高可靠性,满足电力系统对通讯实时性和稳定性的高要求。 在研究南瑞IEC 104协议实现时,开发者应充分理解IEC 104标准的细节,分析南瑞实现的特点,评估其适用性和性能表现。同时,开发者应该熟悉相关的编程语言和网络通讯技术,以便能够有效地使用和改进南瑞的代码。
2018-02-02 上传
# 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;