Files
STM32F4-Base/IEC60870-Slave/common/IEC60870_Slave.h
T
STF 4c55544f05
CI / L0 静态门禁 (pre-commit) (push) Failing after 45s
CI / L0.5 主机侧单测 (MSVC) (push) Failing after 42s
通信协议代码
2026-10-26 08:31:48 -04:00

74 lines
3.5 KiB
C

/*
* 101/104共用的子站发送接口,表示一条面向主站的连接。
* 共用入口通过函数指针分派;具体发送、确认和终止由对应协议接入实现。
* 本层不包含TCP、串口、队列或连接状态机,不分配内存。
*/
#ifndef IEC60870_SLAVE_H
#define IEC60870_SLAVE_H
#include "IEC60870_Asdu.h"
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct IEC60870_MasterConnection IEC60870_MasterConnection_t;
/* 接入实现初始化此接口并保证object及函数指针有效;业务通过下面的函数调用。
* 参数及ASDU的实际布局必须与所接协议一致。所有调用由所属事件循环串行执行。
* send返回true前必须复制或消耗ASDU原文,不能在返回后继续借用调用方字节。
* false不统一表示可重试,具体接入实现负责提供失败原因和处理约定。 */
struct IEC60870_MasterConnection {
void *object; /* 协议接入上下文;共用入口不解释此指针。 */
bool (*send_asdu)(IEC60870_MasterConnection_t *self, IEC60870_Asdu_t *asdu);
bool (*send_act_con)(IEC60870_MasterConnection_t *self, IEC60870_Asdu_t *asdu, bool negative);
bool (*send_act_term)(IEC60870_MasterConnection_t *self, IEC60870_Asdu_t *asdu);
const IEC60870_AppLayerParameters_t *(*get_application_layer_parameters)(
IEC60870_MasterConnection_t *self);
};
/**
* 功能:通过当前连接提交一条已构造好的ASDU。
* 输入参数:self——已由协议接入初始化的连接;asdu——有效ASDU对象。
* 输出参数:具体接入实现记录本次提交结果;本入口不修改ASDU字段。
* 返回值:true表示已发送或已被发送模块接手;false表示失败。
* 说明:true不等于主站已确认;false后按具体协议的结果处理,不自动重试。
*/
bool IEC60870_MasterConnection_Send_ASDU(IEC60870_MasterConnection_t *self, IEC60870_Asdu_t *asdu);
/**
* 功能:通过当前连接发送激活确认。
* 输入参数:self——已初始化连接;asdu——可修改ASDU;negative——是否否定确认。
* 输出参数:asdu原地设置COT=7及指定P/N;具体接入实现记录提交结果。
* 返回值:true表示发送模块已接手;false表示失败。
* 说明:字段在提交前修改,提交失败也不会恢复;不执行请求中的业务命令。
*/
bool IEC60870_MasterConnection_Send_ACT_CON(IEC60870_MasterConnection_t *self,
IEC60870_Asdu_t *asdu, bool negative);
/**
* 功能:通过当前连接发送激活终止。
* 输入参数:self——已初始化连接;asdu——对应请求的可修改ASDU对象。
* 输出参数:asdu原地设置COT=10、P/N=0;具体接入实现记录提交结果。
* 返回值:true表示发送模块已接手;false表示失败。
* 说明:业务在相应处理完成后调用;提交失败也不恢复已修改的字段。
*/
bool IEC60870_MasterConnection_Send_ACT_TERM(IEC60870_MasterConnection_t *self,
IEC60870_Asdu_t *asdu);
/**
* 功能:获取当前连接使用的应用层参数。
* 输入参数:self——已初始化连接。
* 输出参数:无。
* 返回值:借用的只读参数指针;接口为空或未实现时返回NULL。
* 说明:返回指针的有效期由协议接入定义;调用方不能修改参数。
*/
const IEC60870_AppLayerParameters_t *IEC60870_MasterConnection_Get_Application_Layer_Parameters(
IEC60870_MasterConnection_t *self);
#ifdef __cplusplus
}
#endif
#endif /* IEC60870_SLAVE_H */