74 lines
3.5 KiB
C
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 */
|