/* * 101/104共用的子站发送接口,表示一条面向主站的连接。 * 共用入口通过函数指针分派;具体发送、确认和终止由对应协议接入实现。 * 本层不包含TCP、串口、队列或连接状态机,不分配内存。 */ #ifndef IEC60870_SLAVE_H #define IEC60870_SLAVE_H #include "IEC60870_Asdu.h" #include #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 */