2027 lines
120 KiB
C
2027 lines
120 KiB
C
/*
|
||
* 101/104共用的信息对象层:每种类型有独立结构、构造器和解析器;编码经只读函数表分派。
|
||
* 所有内存由调用方提供,Create不会分配内存,也无需Destroy。对象可按值复制。
|
||
* Create/Get_From_Buffer失败不修改对象;修改数值后再次编码仍会检查字段合法性。
|
||
* 所有接口只处理数据,不操作网络、点表、系统时钟或选择/执行状态机。
|
||
*
|
||
* 使用顺序:具体类型Create -> ASDU添加对象;含base成员的类型传base.object,其余传object。
|
||
* 接收顺序:ASDU按Type ID选择具体解析器 -> Get_From_Buffer -> 独立具体对象。
|
||
* Create/Get_From_Buffer设置身份,编码时借此找到函数表;程序不使用C位域映射报文。
|
||
*/
|
||
#ifndef IEC60870_INFORMATION_OBJECTS_H
|
||
#define IEC60870_INFORMATION_OBJECTS_H
|
||
|
||
#include "IEC60870_Types.h"
|
||
#include "IEC60870_Time.h"
|
||
#include <stddef.h>
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
#define IEC60870_ASDU_MAX_OBJECTS 127U /* VSQ低7位保存对象数量,最高位为SQ。 */
|
||
#define IEC60870_ASDU_MAX_IOA UINT32_C(0xFFFFFF) /* 3字节信息对象地址的最大值。 */
|
||
|
||
/* 不可按布尔值判断。只有 OK 修改输出;FULL/ERROR/UNSUPPORTED 保持输出不变。 */
|
||
typedef enum {
|
||
IEC60870_ASDU_UNSUPPORTED = -2, /* 当前入口不支持该Type ID或该类型类别。 */
|
||
IEC60870_ASDU_ERROR = -1, /* 参数、布局、字段内容或构造器状态非法。 */
|
||
IEC60870_ASDU_FULL = 0, /* 本次未写入:字节容量不足或对象数量已达上限。 */
|
||
IEC60870_ASDU_OK = 1 /* 操作成功;组包成功不表示已经发送或执行。 */
|
||
} IEC60870_AsduResult_t;
|
||
|
||
/* 数值就是ASDU首字节的Type ID;本枚举只列本模块已实现的类型。 */
|
||
typedef enum {
|
||
IEC60870_ASDU_M_SP_NA_1 = 1, /* 单点信息,SIQ。 */
|
||
IEC60870_ASDU_M_SP_TA_1 = 2, /* 带CP24单点信息。 */
|
||
IEC60870_ASDU_M_DP_NA_1 = 3, /* 双点信息,DIQ。 */
|
||
IEC60870_ASDU_M_DP_TA_1 = 4, /* 带CP24双点信息。 */
|
||
IEC60870_ASDU_M_ST_NA_1 = 5, /* 步位置信息。 */
|
||
IEC60870_ASDU_M_ST_TA_1 = 6, /* 带CP24步位置信息。 */
|
||
IEC60870_ASDU_M_BO_NA_1 = 7, /* 32位比特串监视。 */
|
||
IEC60870_ASDU_M_BO_TA_1 = 8, /* 带CP24比特串监视。 */
|
||
IEC60870_ASDU_M_ME_NA_1 = 9, /* 归一化测量值,NVA和QDS。 */
|
||
IEC60870_ASDU_M_ME_TA_1 = 10, /* 带CP24归一化测量值。 */
|
||
IEC60870_ASDU_M_ME_NB_1 = 11, /* 标度化测量值,SVA和QDS。 */
|
||
IEC60870_ASDU_M_ME_TB_1 = 12, /* 带CP24标度化测量值。 */
|
||
IEC60870_ASDU_M_ME_NC_1 = 13, /* 短浮点测量值,IEEE 754 binary32和QDS。 */
|
||
IEC60870_ASDU_M_ME_TC_1 = 14, /* 带CP24短浮点测量值。 */
|
||
IEC60870_ASDU_M_IT_NA_1 = 15, /* 累计量,BCR。 */
|
||
IEC60870_ASDU_M_IT_TA_1 = 16, /* 带CP24累计量。 */
|
||
IEC60870_ASDU_M_EP_TA_1 = 17, /* 带CP24保护事件。 */
|
||
IEC60870_ASDU_M_EP_TB_1 = 18, /* 带CP24成组保护启动事件。 */
|
||
IEC60870_ASDU_M_EP_TC_1 = 19, /* 带CP24保护输出电路信息。 */
|
||
IEC60870_ASDU_M_PS_NA_1 = 20, /* 带变位检测的成组单点。 */
|
||
IEC60870_ASDU_M_ME_ND_1 = 21, /* 无品质归一化测量值。 */
|
||
IEC60870_ASDU_M_SP_TB_1 = 30, /* 单点信息及CP56Time2a。 */
|
||
IEC60870_ASDU_M_DP_TB_1 = 31, /* 双点信息及CP56Time2a。 */
|
||
IEC60870_ASDU_M_ST_TB_1 = 32, /* 带CP56步位置信息。 */
|
||
IEC60870_ASDU_M_BO_TB_1 = 33, /* 带CP56比特串监视。 */
|
||
IEC60870_ASDU_M_ME_TD_1 = 34, /* 归一化测量值及CP56Time2a。 */
|
||
IEC60870_ASDU_M_ME_TE_1 = 35, /* 标度化测量值及CP56Time2a。 */
|
||
IEC60870_ASDU_M_ME_TF_1 = 36, /* 短浮点测量值及CP56Time2a。 */
|
||
IEC60870_ASDU_M_IT_TB_1 = 37, /* 累计量及CP56Time2a。 */
|
||
IEC60870_ASDU_M_EP_TD_1 = 38, /* 带CP56保护事件。 */
|
||
IEC60870_ASDU_M_EP_TE_1 = 39, /* 带CP56成组保护启动事件。 */
|
||
IEC60870_ASDU_M_EP_TF_1 = 40, /* 带CP56保护输出电路信息。 */
|
||
IEC60870_ASDU_C_SC_NA_1 = 45, /* 单命令,SCO。 */
|
||
IEC60870_ASDU_C_DC_NA_1 = 46, /* 双命令,DCO。 */
|
||
IEC60870_ASDU_C_RC_NA_1 = 47, /* 步调节命令,RCO。 */
|
||
IEC60870_ASDU_C_SE_NA_1 = 48, /* 归一化设定值命令,NVA和QOS。 */
|
||
IEC60870_ASDU_C_SE_NB_1 = 49, /* 标度化设定值命令,SVA和QOS。 */
|
||
IEC60870_ASDU_C_SE_NC_1 = 50, /* 短浮点设定值命令,浮点值和QOS。 */
|
||
IEC60870_ASDU_C_BO_NA_1 = 51, /* 32位比特串命令。 */
|
||
IEC60870_ASDU_C_SC_TA_1 = 58, /* 单命令及CP56Time2a。 */
|
||
IEC60870_ASDU_C_DC_TA_1 = 59, /* 双命令及CP56Time2a。 */
|
||
IEC60870_ASDU_C_RC_TA_1 = 60, /* 步调节命令及CP56Time2a。 */
|
||
IEC60870_ASDU_C_SE_TA_1 = 61, /* 归一化设定值命令及CP56Time2a。 */
|
||
IEC60870_ASDU_C_SE_TB_1 = 62, /* 标度化设定值命令及CP56Time2a。 */
|
||
IEC60870_ASDU_C_SE_TC_1 = 63, /* 短浮点设定值命令及CP56Time2a。 */
|
||
IEC60870_ASDU_C_BO_TA_1 = 64, /* 带CP56比特串命令。 */
|
||
IEC60870_ASDU_M_EI_NA_1 = 70, /* 初始化结束。 */
|
||
IEC60870_ASDU_C_IC_NA_1 = 100, /* 总召唤命令,QOI。 */
|
||
IEC60870_ASDU_C_CI_NA_1 = 101, /* 电能脉冲召唤命令,QCC。 */
|
||
IEC60870_ASDU_C_RD_NA_1 = 102, /* 读命令,仅携带IOA。 */
|
||
IEC60870_ASDU_C_CS_NA_1 = 103, /* 时钟同步命令,携带CP56Time2a。 */
|
||
IEC60870_ASDU_C_TS_NA_1 = 104, /* 无时标测试命令。 */
|
||
IEC60870_ASDU_C_RP_NA_1 = 105, /* 复位进程命令,QRP。 */
|
||
IEC60870_ASDU_C_CD_NA_1 = 106, /* 延时获得命令。 */
|
||
IEC60870_ASDU_C_TS_TA_1 = 107, /* 带CP56Time2a的测试命令,另含2字节测试序号。 */
|
||
IEC60870_ASDU_P_ME_NA_1 = 110, /* 归一化测量值参数。 */
|
||
IEC60870_ASDU_P_ME_NB_1 = 111, /* 标度化测量值参数。 */
|
||
IEC60870_ASDU_P_ME_NC_1 = 112, /* 短浮点测量值参数。 */
|
||
IEC60870_ASDU_P_AC_NA_1 = 113, /* 参数激活。 */
|
||
IEC60870_ASDU_F_FR_NA_1 = 120, /* 文件准备就绪。 */
|
||
IEC60870_ASDU_F_SR_NA_1 = 121, /* 节准备就绪。 */
|
||
IEC60870_ASDU_F_SC_NA_1 = 122, /* 文件/节召唤或选择。 */
|
||
IEC60870_ASDU_F_LS_NA_1 = 123, /* 最后文件段或节。 */
|
||
IEC60870_ASDU_F_AF_NA_1 = 124, /* 文件/节确认。 */
|
||
IEC60870_ASDU_F_SG_NA_1 = 125, /* 文件段。 */
|
||
IEC60870_ASDU_F_DR_TA_1 = 126, /* 文件目录。 */
|
||
IEC60870_ASDU_F_SC_NB_1 = 127 /* 归档查询。 */
|
||
} IEC60870_AsduType_t;
|
||
|
||
/* 单点/双点仅允许 BL/SB/NT/IV;测量值还允许 OV;累计量使用独立 BCR 字段。 */
|
||
enum {
|
||
IEC60870_ASDU_QUALITY_OV = 0x01, /* 溢出;用于带QDS的对象,不用于SIQ/DIQ/QDP。 */
|
||
IEC60870_ASDU_QUALITY_EI = 0x08, /* 保护事件的经过时间无效;仅用于QDP。 */
|
||
IEC60870_ASDU_QUALITY_BL = 0x10, /* 被封锁。 */
|
||
IEC60870_ASDU_QUALITY_SB = 0x20, /* 被取代。 */
|
||
IEC60870_ASDU_QUALITY_NT = 0x40, /* 非当前值。 */
|
||
IEC60870_ASDU_QUALITY_IV = 0x80 /* 无效。 */
|
||
};
|
||
|
||
/* BCR的4字节计数和1字节状态按字段保存,不直接把结构体复制到报文。 */
|
||
typedef struct {
|
||
int32_t value; /* 32位有符号累计值。 */
|
||
uint8_t sequence_number; /* BCR 序号 0..31,与 ASDU 的 SQ 无关 */
|
||
uint8_t has_carry; /* CY:发生进位,0/1。 */
|
||
uint8_t is_adjusted; /* CA:计数已调整,0/1;此处不是ASDU公共地址。 */
|
||
uint8_t is_invalid; /* IV:计数无效,0/1。 */
|
||
} IEC60870_BinaryCounterReading_t;
|
||
/* 公共基类只保存身份、地址和编码分派表;由具体类型的Create或解析器初始化。
|
||
* type_id和virtual_function_table只读,禁止手工伪造。ioa可在所选宽度内修改。
|
||
* 每个具体类型必须以本基类(或以本基类开头的基础类型)为首成员。
|
||
* 带时标对象的base.object仍保存带时标Type ID和函数表。只能复制完整具体对象;
|
||
* 不得把base截取成独立基础对象后编码,否则函数表会按较大的带时标结构访问。
|
||
* 要转换成无时标类型,应调用对应基础类型的Create,显式传入值、品质及地址。 */
|
||
struct IEC60870_InformationObjectVTable;
|
||
typedef struct {
|
||
uint32_t ioa; /* 构造时允许24位,实际编码再按1/2/3字节配置检查;不是公共地址CA。 */
|
||
uint8_t type_id; /* 对应ASDU首字节;由具体Create/解析器设置,调用方只读。 */
|
||
const struct IEC60870_InformationObjectVTable *virtual_function_table; /* 静态只读编码函数表,无需释放。 */
|
||
} IEC60870_InformationObject_t;
|
||
|
||
/* Type 1:单点信息。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须位于首成员。 */
|
||
uint8_t value; /* 0/1。 */
|
||
uint8_t quality; /* 点信息仅高4位;测量值另允许bit0溢出。 */
|
||
} IEC60870_SinglePointInformation_t;
|
||
|
||
/* Type 3:双点信息。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须位于首成员。 */
|
||
uint8_t value; /* 0..3,含中间及不确定状态。 */
|
||
uint8_t quality; /* 点信息仅高4位;测量值另允许bit0溢出。 */
|
||
} IEC60870_DoublePointInformation_t;
|
||
|
||
/* Type 9:归一化测量值(原始16位定点值)。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须位于首成员。 */
|
||
int16_t value; /* 实际值=value/32768.0。 */
|
||
uint8_t quality; /* 点信息仅高4位;测量值另允许bit0溢出。 */
|
||
} IEC60870_MeasuredValueNormalized_t;
|
||
|
||
/* Type 11:标度化测量值。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须位于首成员。 */
|
||
int16_t value; /* 有符号16位整数。 */
|
||
uint8_t quality; /* 点信息仅高4位;测量值另允许bit0溢出。 */
|
||
} IEC60870_MeasuredValueScaled_t;
|
||
|
||
/* Type 13:短浮点测量值。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须位于首成员。 */
|
||
float value; /* IEEE 754 binary32,保留NaN/Inf位模式。 */
|
||
uint8_t quality; /* 点信息仅高4位;测量值另允许bit0溢出。 */
|
||
} IEC60870_MeasuredValueShort_t;
|
||
|
||
/* Type 15:累计量。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须位于首成员。 */
|
||
IEC60870_BinaryCounterReading_t value; /* 计数及BCR标志,不使用QDS。 */
|
||
} IEC60870_IntegratedTotals_t;
|
||
|
||
/* Type 30:带时标单点信息。 */
|
||
typedef struct {
|
||
IEC60870_SinglePointInformation_t base; /* 首成员为基础对象;时标复用其值编解码。 */
|
||
IEC60870_CP56Time2a_t time; /* CP56保留IV/SU,不执行时区转换或校时。 */
|
||
} IEC60870_SinglePointWithCP56Time2a_t;
|
||
|
||
/* Type 31:带时标双点信息。 */
|
||
typedef struct {
|
||
IEC60870_DoublePointInformation_t base; /* 首成员为基础对象;时标复用其值编解码。 */
|
||
IEC60870_CP56Time2a_t time; /* CP56保留IV/SU,不执行时区转换或校时。 */
|
||
} IEC60870_DoublePointWithCP56Time2a_t;
|
||
|
||
/* Type 34:带时标归一化测量值。 */
|
||
typedef struct {
|
||
IEC60870_MeasuredValueNormalized_t base; /* 首成员为基础对象;时标复用其值编解码。 */
|
||
IEC60870_CP56Time2a_t time; /* CP56保留IV/SU,不执行时区转换或校时。 */
|
||
} IEC60870_MeasuredValueNormalizedWithCP56Time2a_t;
|
||
|
||
/* Type 35:带时标标度化测量值。 */
|
||
typedef struct {
|
||
IEC60870_MeasuredValueScaled_t base; /* 首成员为基础对象;时标复用其值编解码。 */
|
||
IEC60870_CP56Time2a_t time; /* CP56保留IV/SU,不执行时区转换或校时。 */
|
||
} IEC60870_MeasuredValueScaledWithCP56Time2a_t;
|
||
|
||
/* Type 36:带时标短浮点测量值。 */
|
||
typedef struct {
|
||
IEC60870_MeasuredValueShort_t base; /* 首成员为基础对象;时标复用其值编解码。 */
|
||
IEC60870_CP56Time2a_t time; /* CP56保留IV/SU,不执行时区转换或校时。 */
|
||
} IEC60870_MeasuredValueShortWithCP56Time2a_t;
|
||
|
||
/* Type 37:带时标累计量。 */
|
||
typedef struct {
|
||
IEC60870_IntegratedTotals_t base; /* 首成员为基础对象;时标复用其值编解码。 */
|
||
IEC60870_CP56Time2a_t time; /* CP56保留IV/SU,不执行时区转换或校时。 */
|
||
} IEC60870_IntegratedTotalsWithCP56Time2a_t;
|
||
|
||
/* Type 45:单命令。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须位于首成员。 */
|
||
uint8_t state; /* 0/1。 */
|
||
uint8_t is_select; /* S/E:1选择、0执行。 */
|
||
uint8_t qualifier; /* QU:0..31,业务判断具体支持值。 */
|
||
} IEC60870_SingleCommand_t;
|
||
|
||
/* Type 46:双命令。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须位于首成员。 */
|
||
uint8_t state; /* 仅1/2。 */
|
||
uint8_t is_select; /* S/E:1选择、0执行。 */
|
||
uint8_t qualifier; /* QU:0..31,业务判断具体支持值。 */
|
||
} IEC60870_DoubleCommand_t;
|
||
|
||
/* Type 47:步调节命令。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须位于首成员。 */
|
||
uint8_t state; /* 仅1/2。 */
|
||
uint8_t is_select; /* S/E:1选择、0执行。 */
|
||
uint8_t qualifier; /* QU:0..31,业务判断具体支持值。 */
|
||
} IEC60870_StepCommand_t;
|
||
|
||
/* Type 48:归一化设定值命令(原始16位定点值)。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须位于首成员。 */
|
||
int16_t value; /* 归一化原始16位定点值。 */
|
||
uint8_t is_select; /* S/E:0/1。 */
|
||
uint8_t qualifier; /* QL:0..127。 */
|
||
} IEC60870_SetpointCommandNormalized_t;
|
||
|
||
/* Type 49:标度化设定值命令。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须位于首成员。 */
|
||
int16_t value; /* 有符号16位标度值。 */
|
||
uint8_t is_select; /* S/E:0/1。 */
|
||
uint8_t qualifier; /* QL:0..127。 */
|
||
} IEC60870_SetpointCommandScaled_t;
|
||
|
||
/* Type 50:短浮点设定值命令。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须位于首成员。 */
|
||
float value; /* IEEE 754 binary32。 */
|
||
uint8_t is_select; /* S/E:0/1。 */
|
||
uint8_t qualifier; /* QL:0..127。 */
|
||
} IEC60870_SetpointCommandShort_t;
|
||
|
||
/* Type 58:带时标单命令。 */
|
||
typedef struct {
|
||
IEC60870_SingleCommand_t base; /* 首成员为基础对象;时标复用其值编解码。 */
|
||
IEC60870_CP56Time2a_t time; /* CP56保留IV/SU,不执行时区转换或校时。 */
|
||
} IEC60870_SingleCommandWithCP56Time2a_t;
|
||
|
||
/* Type 59:带时标双命令。 */
|
||
typedef struct {
|
||
IEC60870_DoubleCommand_t base; /* 首成员为基础对象;时标复用其值编解码。 */
|
||
IEC60870_CP56Time2a_t time; /* CP56保留IV/SU,不执行时区转换或校时。 */
|
||
} IEC60870_DoubleCommandWithCP56Time2a_t;
|
||
|
||
/* Type 60:带时标步调节命令。 */
|
||
typedef struct {
|
||
IEC60870_StepCommand_t base; /* 首成员为基础对象;时标复用其值编解码。 */
|
||
IEC60870_CP56Time2a_t time; /* CP56保留IV/SU,不执行时区转换或校时。 */
|
||
} IEC60870_StepCommandWithCP56Time2a_t;
|
||
|
||
/* Type 61:带时标归一化设定值命令。 */
|
||
typedef struct {
|
||
IEC60870_SetpointCommandNormalized_t base; /* 首成员为基础对象;时标复用其值编解码。 */
|
||
IEC60870_CP56Time2a_t time; /* CP56保留IV/SU,不执行时区转换或校时。 */
|
||
} IEC60870_SetpointCommandNormalizedWithCP56Time2a_t;
|
||
|
||
/* Type 62:带时标标度化设定值命令。 */
|
||
typedef struct {
|
||
IEC60870_SetpointCommandScaled_t base; /* 首成员为基础对象;时标复用其值编解码。 */
|
||
IEC60870_CP56Time2a_t time; /* CP56保留IV/SU,不执行时区转换或校时。 */
|
||
} IEC60870_SetpointCommandScaledWithCP56Time2a_t;
|
||
|
||
/* Type 63:带时标短浮点设定值命令。 */
|
||
typedef struct {
|
||
IEC60870_SetpointCommandShort_t base; /* 首成员为基础对象;时标复用其值编解码。 */
|
||
IEC60870_CP56Time2a_t time; /* CP56保留IV/SU,不执行时区转换或校时。 */
|
||
} IEC60870_SetpointCommandShortWithCP56Time2a_t;
|
||
|
||
/* Type 100:总召唤命令。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须位于首成员。 */
|
||
uint8_t qualifier; /* QOI:0..255,业务判断适用性。 */
|
||
} IEC60870_InterrogationCommand_t;
|
||
|
||
/* Type 101:电能脉冲召唤命令。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须位于首成员。 */
|
||
uint8_t qualifier; /* RQT:0..63。 */
|
||
uint8_t freeze; /* FR:0..3。 */
|
||
} IEC60870_CounterInterrogationCommand_t;
|
||
|
||
/* Type 102:读命令。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须位于首成员。 */
|
||
} IEC60870_ReadCommand_t;
|
||
|
||
/* Type 103:时钟同步命令。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须位于首成员。 */
|
||
IEC60870_CP56Time2a_t time; /* 时间按值保存;允许IV=1,不代表可执行校时。 */
|
||
} IEC60870_ClockSynchronizationCommand_t;
|
||
|
||
/* Type 105:复位进程命令。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须位于首成员。 */
|
||
uint8_t qualifier; /* QRP:0..255,业务判断适用性。 */
|
||
} IEC60870_ResetProcessCommand_t;
|
||
|
||
/* Type 107:带时标测试命令。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须位于首成员。 */
|
||
uint16_t sequence; /* 2字节测试序号,与链路序号无关。 */
|
||
IEC60870_CP56Time2a_t time; /* 时间按值保存;允许IV=1,不代表可执行校时。 */
|
||
} IEC60870_TestCommandWithCP56Time2a_t;
|
||
|
||
/* Type 5:步位置信息;布局:VTI(1:低7位补码位置、bit7瞬态) + QDS(1)。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
int8_t value; /* VTI有符号步位置,-64..63。 */
|
||
uint8_t is_transient; /* VTI瞬态标志,0/1。 */
|
||
uint8_t quality; /* QDS,仅允许0xF1范围内的位。 */
|
||
} IEC60870_StepPositionInformation_t;
|
||
|
||
/* Type 7:32位比特串监视;布局:BSI(4) + QDS(1)。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
uint32_t value; /* 32位状态比特串。 */
|
||
uint8_t quality; /* QDS,仅允许0xF1范围内的位。 */
|
||
} IEC60870_BitString32_t;
|
||
|
||
/* Type 2:带CP24单点信息;布局:基础值(1) + CP24(3)。 */
|
||
typedef struct {
|
||
IEC60870_SinglePointInformation_t base; /* 首成员为基础对象,值处理复用基础类型。 */
|
||
IEC60870_CP24Time2a_t time; /* CP24时标,按值保存。 */
|
||
} IEC60870_SinglePointWithCP24Time2a_t;
|
||
|
||
/* Type 4:带CP24双点信息;布局:基础值(1) + CP24(3)。 */
|
||
typedef struct {
|
||
IEC60870_DoublePointInformation_t base; /* 首成员为基础对象,值处理复用基础类型。 */
|
||
IEC60870_CP24Time2a_t time; /* CP24时标,按值保存。 */
|
||
} IEC60870_DoublePointWithCP24Time2a_t;
|
||
|
||
/* Type 6:带CP24步位置信息;布局:基础值(2) + CP24(3)。 */
|
||
typedef struct {
|
||
IEC60870_StepPositionInformation_t base; /* 首成员为基础对象,值处理复用基础类型。 */
|
||
IEC60870_CP24Time2a_t time; /* CP24时标,按值保存。 */
|
||
} IEC60870_StepPositionWithCP24Time2a_t;
|
||
|
||
/* Type 8:带CP24比特串监视;布局:基础值(5) + CP24(3)。 */
|
||
typedef struct {
|
||
IEC60870_BitString32_t base; /* 首成员为基础对象,值处理复用基础类型。 */
|
||
IEC60870_CP24Time2a_t time; /* CP24时标,按值保存。 */
|
||
} IEC60870_Bitstring32WithCP24Time2a_t;
|
||
|
||
/* Type 10:带CP24归一化测量值;布局:基础值(3) + CP24(3)。 */
|
||
typedef struct {
|
||
IEC60870_MeasuredValueNormalized_t base; /* 首成员为基础对象,值处理复用基础类型。 */
|
||
IEC60870_CP24Time2a_t time; /* CP24时标,按值保存。 */
|
||
} IEC60870_MeasuredValueNormalizedWithCP24Time2a_t;
|
||
|
||
/* Type 12:带CP24标度化测量值;布局:基础值(3) + CP24(3)。 */
|
||
typedef struct {
|
||
IEC60870_MeasuredValueScaled_t base; /* 首成员为基础对象,值处理复用基础类型。 */
|
||
IEC60870_CP24Time2a_t time; /* CP24时标,按值保存。 */
|
||
} IEC60870_MeasuredValueScaledWithCP24Time2a_t;
|
||
|
||
/* Type 14:带CP24短浮点测量值;布局:基础值(5) + CP24(3)。 */
|
||
typedef struct {
|
||
IEC60870_MeasuredValueShort_t base; /* 首成员为基础对象,值处理复用基础类型。 */
|
||
IEC60870_CP24Time2a_t time; /* CP24时标,按值保存。 */
|
||
} IEC60870_MeasuredValueShortWithCP24Time2a_t;
|
||
|
||
/* Type 16:带CP24累计量;布局:基础值(5) + CP24(3)。 */
|
||
typedef struct {
|
||
IEC60870_IntegratedTotals_t base; /* 首成员为基础对象,值处理复用基础类型。 */
|
||
IEC60870_CP24Time2a_t time; /* CP24时标,按值保存。 */
|
||
} IEC60870_IntegratedTotalsWithCP24Time2a_t;
|
||
|
||
/* Type 32:带CP56步位置信息;布局:基础值(2) + CP56(7)。 */
|
||
typedef struct {
|
||
IEC60870_StepPositionInformation_t base; /* 首成员为基础对象,值处理复用基础类型。 */
|
||
IEC60870_CP56Time2a_t time; /* CP56时标,按值保存。 */
|
||
} IEC60870_StepPositionWithCP56Time2a_t;
|
||
|
||
/* Type 33:带CP56比特串监视;布局:基础值(5) + CP56(7)。 */
|
||
typedef struct {
|
||
IEC60870_BitString32_t base; /* 首成员为基础对象,值处理复用基础类型。 */
|
||
IEC60870_CP56Time2a_t time; /* CP56时标,按值保存。 */
|
||
} IEC60870_Bitstring32WithCP56Time2a_t;
|
||
|
||
/* Type 17:带CP24保护事件;布局:SEP(1:ES低2位,QDP高5位) + CP16(2) + CP24(3)。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
uint8_t event; /* 事件状态/位掩码,0..3。 */
|
||
uint8_t quality; /* 保护品质QDP,EI/BL/SB/NT/IV,掩码0xF8。 */
|
||
IEC60870_CP16Time2a_t elapsed_time; /* 事件经过时间,0..65535毫秒。 */
|
||
IEC60870_CP24Time2a_t time; /* CP24事件时标。 */
|
||
} IEC60870_EventOfProtectionEquipment_t;
|
||
|
||
/* Type 18:带CP24成组保护启动事件;布局:事件(1) + QDP(1) + CP16(2) + CP24(3)。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
uint8_t event; /* 事件状态/位掩码,0..63。 */
|
||
uint8_t quality; /* 保护品质QDP,EI/BL/SB/NT/IV,掩码0xF8。 */
|
||
IEC60870_CP16Time2a_t elapsed_time; /* 事件经过时间,0..65535毫秒。 */
|
||
IEC60870_CP24Time2a_t time; /* CP24事件时标。 */
|
||
} IEC60870_PackedStartEventsOfProtectionEquipment_t;
|
||
|
||
/* Type 19:带CP24保护输出电路信息;布局:事件(1) + QDP(1) + CP16(2) + CP24(3)。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
uint8_t event; /* 事件状态/位掩码,0..15。 */
|
||
uint8_t quality; /* 保护品质QDP,EI/BL/SB/NT/IV,掩码0xF8。 */
|
||
IEC60870_CP16Time2a_t elapsed_time; /* 输出电路动作时间,0..65535毫秒。 */
|
||
IEC60870_CP24Time2a_t time; /* CP24事件时标。 */
|
||
} IEC60870_PackedOutputCircuitInfo_t;
|
||
|
||
/* Type 38:带CP56保护事件;布局:SEP(1:ES低2位,QDP高5位) + CP16(2) + CP56(7)。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
uint8_t event; /* 事件状态/位掩码,0..3。 */
|
||
uint8_t quality; /* 保护品质QDP,EI/BL/SB/NT/IV,掩码0xF8。 */
|
||
IEC60870_CP16Time2a_t elapsed_time; /* 事件经过时间,0..65535毫秒。 */
|
||
IEC60870_CP56Time2a_t time; /* CP56事件时标。 */
|
||
} IEC60870_EventOfProtectionEquipmentWithCP56Time2a_t;
|
||
|
||
/* Type 39:带CP56成组保护启动事件;布局:事件(1) + QDP(1) + CP16(2) + CP56(7)。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
uint8_t event; /* 事件状态/位掩码,0..63。 */
|
||
uint8_t quality; /* 保护品质QDP,EI/BL/SB/NT/IV,掩码0xF8。 */
|
||
IEC60870_CP16Time2a_t elapsed_time; /* 事件经过时间,0..65535毫秒。 */
|
||
IEC60870_CP56Time2a_t time; /* CP56事件时标。 */
|
||
} IEC60870_PackedStartEventsOfProtectionEquipmentWithCP56Time2a_t;
|
||
|
||
/* Type 40:带CP56保护输出电路信息;布局:事件(1) + QDP(1) + CP16(2) + CP56(7)。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
uint8_t event; /* 事件状态/位掩码,0..15。 */
|
||
uint8_t quality; /* 保护品质QDP,EI/BL/SB/NT/IV,掩码0xF8。 */
|
||
IEC60870_CP16Time2a_t elapsed_time; /* 输出电路动作时间,0..65535毫秒。 */
|
||
IEC60870_CP56Time2a_t time; /* CP56事件时标。 */
|
||
} IEC60870_PackedOutputCircuitInfoWithCP56Time2a_t;
|
||
|
||
/* Type 20:带变位检测的成组单点;布局:SCD(4:状态16位 + 变位16位) + QDS(1)。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
uint16_t status; /* 16个单点当前状态,低位对应组内首点。 */
|
||
uint16_t change; /* 16个变位检测标志,与status逐位对应。 */
|
||
uint8_t quality; /* QDS,仅允许0xF1范围内的位。 */
|
||
} IEC60870_PackedSinglePointWithSCD_t;
|
||
|
||
/* Type 21:无品质归一化测量值;布局:NVA(2),不包含QDS。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
int16_t value; /* 归一化原始定点值,实际值=value/32768.0。 */
|
||
} IEC60870_MeasuredValueNormalizedWithoutQuality_t;
|
||
|
||
/* Type 51:32位比特串命令;布局:BSI(4),不包含QDS。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
uint32_t value; /* 完整32位命令比特串,无品质或选择位。 */
|
||
} IEC60870_Bitstring32Command_t;
|
||
|
||
/* Type 64:带CP56比特串命令;布局:基础值(4) + CP56(7)。 */
|
||
typedef struct {
|
||
IEC60870_Bitstring32Command_t base; /* 首成员为基础对象,值处理复用基础类型。 */
|
||
IEC60870_CP56Time2a_t time; /* CP56时标,按值保存。 */
|
||
} IEC60870_Bitstring32CommandWithCP56Time2a_t;
|
||
|
||
/* Type 70:初始化结束;布局:COI(1),地址适用性由应用判断。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
uint8_t cause; /* COI:低7位初始化原因,bit7表示本地参数改变。 */
|
||
} IEC60870_EndOfInitialization_t;
|
||
|
||
/* Type 104:无时标测试命令;布局:固定测试图样AA 55。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
|
||
} IEC60870_TestCommand_t;
|
||
|
||
/* Type 106:延时获得命令;布局:CP16(2)。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
IEC60870_CP16Time2a_t delay; /* 延时时间,0..65535毫秒。 */
|
||
} IEC60870_DelayAcquisitionCommand_t;
|
||
|
||
/* Type 110:归一化测量值参数;布局:参数值(2) + QPM(1),QPM不是QDS。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
int16_t value; /* 16位参数值;归一化类型按原始定点值保存。 */
|
||
uint8_t qualifier; /* QPM完整字节:低6位参数种类,bit6本地改变、bit7运行状态。 */
|
||
} IEC60870_ParameterNormalizedValue_t;
|
||
|
||
/* Type 111:标度化测量值参数;布局:参数值(2) + QPM(1),QPM不是QDS。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
int16_t value; /* 16位参数值;归一化类型按原始定点值保存。 */
|
||
uint8_t qualifier; /* QPM完整字节:低6位参数种类,bit6本地改变、bit7运行状态。 */
|
||
} IEC60870_ParameterScaledValue_t;
|
||
|
||
/* Type 112:短浮点测量值参数;布局:参数值(4) + QPM(1),QPM不是QDS。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
float value; /* IEEE 754 binary32参数值。 */
|
||
uint8_t qualifier; /* QPM完整字节:低6位参数种类,bit6本地改变、bit7运行状态。 */
|
||
} IEC60870_ParameterFloatValue_t;
|
||
|
||
/* Type 113:参数激活;布局:QPA(1)。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
uint8_t qualifier; /* QPA完整字节,限定词的业务适用性由应用判断。 */
|
||
} IEC60870_ParameterActivation_t;
|
||
|
||
/* Type 120:文件准备就绪;布局:NOF(2) + LOF(3) + FRQ(1)。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
uint16_t file_name; /* NOF,文件标识,不是字符串文件名。 */
|
||
uint32_t file_length; /* LOF,24位文件长度,0..0xFFFFFF。 */
|
||
uint8_t qualifier; /* FRQ,仅bit7可置1,表示否定;低7位保留。 */
|
||
} IEC60870_FileReady_t;
|
||
|
||
/* Type 121:节准备就绪;布局:NOF(2) + NOS(1) + LOS(3) + SRQ(1)。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
uint16_t file_name; /* NOF,文件标识,不是字符串文件名。 */
|
||
uint8_t section; /* NOS,节编号,0..255。 */
|
||
uint32_t section_length; /* LOS,24位节长度,0..0xFFFFFF。 */
|
||
uint8_t qualifier; /* SRQ,仅bit7可置1,表示否定;低7位保留。 */
|
||
} IEC60870_SectionReady_t;
|
||
|
||
/* Type 122:文件/节召唤或选择;布局:NOF(2) + NOS(1) + SCQ(1)。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
uint16_t file_name; /* NOF,文件标识,不是字符串文件名。 */
|
||
uint8_t section; /* NOS,节编号,0..255。 */
|
||
uint8_t qualifier; /* SCQ完整字节,具体限定词由业务判断。 */
|
||
} IEC60870_FileCallOrSelect_t;
|
||
|
||
/* Type 124:文件/节确认;布局:NOF(2) + NOS(1) + AFQ(1)。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
uint16_t file_name; /* NOF,文件标识,不是字符串文件名。 */
|
||
uint8_t section; /* NOS,节编号,0..255。 */
|
||
uint8_t qualifier; /* AFQ完整字节,具体限定词由业务判断。 */
|
||
} IEC60870_FileACK_t;
|
||
|
||
/* Type 123:最后文件段或节;布局:NOF(2) + NOS(1) + LSQ(1) + CHS(1),这里只传递校验和。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
uint16_t file_name; /* NOF,文件标识,不是字符串文件名。 */
|
||
uint8_t section; /* NOS,节编号,0..255。 */
|
||
uint8_t qualifier; /* LSQ,最后段/节限定词。 */
|
||
uint8_t checksum; /* CHS,文件/节校验和;业务按传输范围计算。 */
|
||
} IEC60870_FileLastSegmentOrSection_t;
|
||
|
||
/* Type 125:文件段;布局:NOF(2) + NOS(1) + LOS(1) + 段数据(LOS),SQ=0且仅一个对象。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
uint16_t file_name; /* NOF,文件标识,不是字符串文件名。 */
|
||
uint8_t section; /* NOS,节编号,0..255。 */
|
||
uint8_t length; /* LOS,段数据长度0..255;能否装入ASDU由所选配置决定。 */
|
||
uint8_t data[255]; /* 独立保存段数据,不借用输入。 */
|
||
} IEC60870_FileSegment_t;
|
||
|
||
/* Type 126:文件目录;布局:NOF(2) + LOF(3) + SOF(1) + CP56(7)。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
uint16_t file_name; /* NOF,文件标识,不是字符串文件名。 */
|
||
uint32_t file_length; /* LOF,24位文件长度。 */
|
||
uint8_t status; /* SOF,低5位文件状态,bit5/6/7为LFD/FOR/FA。 */
|
||
IEC60870_CP56Time2a_t creation_time; /* 文件创建时间。 */
|
||
} IEC60870_FileDirectory_t;
|
||
|
||
/* Type 127:归档查询;布局:NOF(2) + 查询起始CP56(7) + 查询结束CP56(7)。 */
|
||
typedef struct {
|
||
IEC60870_InformationObject_t object; /* 公共基类,必须为首成员。 */
|
||
uint16_t file_name; /* NOF,文件标识,不是字符串文件名。 */
|
||
IEC60870_CP56Time2a_t start_time; /* 查询开始时间。 */
|
||
IEC60870_CP56Time2a_t stop_time; /* 查询结束时间,区间适用性由业务判断。 */
|
||
} IEC60870_QueryLog_t;
|
||
|
||
/**
|
||
* 功能:构造Type 5(步位置信息)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:VTI(1:低7位补码位置、bit7瞬态) + QDS(1);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_StepPositionInformation_Create(IEC60870_StepPositionInformation_t *self,
|
||
uint32_t ioa, int value, int is_transient, int quality);
|
||
|
||
/**
|
||
* 功能:解析Type 5(步位置信息)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为2字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_StepPositionInformation_Get_From_Buffer(IEC60870_StepPositionInformation_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 7(32位比特串监视)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:BSI(4) + QDS(1);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_BitString32_Create(IEC60870_BitString32_t *self,
|
||
uint32_t ioa, uint32_t value, int quality);
|
||
|
||
/**
|
||
* 功能:解析Type 7(32位比特串监视)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为5字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_BitString32_Get_From_Buffer(IEC60870_BitString32_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 2(带CP24单点信息)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:基础值(1) + CP24(3);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SinglePointWithCP24Time2a_Create(IEC60870_SinglePointWithCP24Time2a_t *self,
|
||
uint32_t ioa, int value, int quality, const IEC60870_CP24Time2a_t *time);
|
||
|
||
/**
|
||
* 功能:解析Type 2(带CP24单点信息)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为4字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SinglePointWithCP24Time2a_Get_From_Buffer(IEC60870_SinglePointWithCP24Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 4(带CP24双点信息)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:基础值(1) + CP24(3);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_DoublePointWithCP24Time2a_Create(IEC60870_DoublePointWithCP24Time2a_t *self,
|
||
uint32_t ioa, int value, int quality, const IEC60870_CP24Time2a_t *time);
|
||
|
||
/**
|
||
* 功能:解析Type 4(带CP24双点信息)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为4字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_DoublePointWithCP24Time2a_Get_From_Buffer(IEC60870_DoublePointWithCP24Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 6(带CP24步位置信息)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:基础值(2) + CP24(3);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_StepPositionWithCP24Time2a_Create(IEC60870_StepPositionWithCP24Time2a_t *self,
|
||
uint32_t ioa, int value, int is_transient, int quality, const IEC60870_CP24Time2a_t *time);
|
||
|
||
/**
|
||
* 功能:解析Type 6(带CP24步位置信息)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为5字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_StepPositionWithCP24Time2a_Get_From_Buffer(IEC60870_StepPositionWithCP24Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 8(带CP24比特串监视)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:基础值(5) + CP24(3);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_Bitstring32WithCP24Time2a_Create(IEC60870_Bitstring32WithCP24Time2a_t *self,
|
||
uint32_t ioa, uint32_t value, int quality, const IEC60870_CP24Time2a_t *time);
|
||
|
||
/**
|
||
* 功能:解析Type 8(带CP24比特串监视)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为8字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_Bitstring32WithCP24Time2a_Get_From_Buffer(IEC60870_Bitstring32WithCP24Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 10(带CP24归一化测量值)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:基础值(3) + CP24(3);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_MeasuredValueNormalizedWithCP24Time2a_Create(IEC60870_MeasuredValueNormalizedWithCP24Time2a_t *self,
|
||
uint32_t ioa, int16_t value, int quality, const IEC60870_CP24Time2a_t *time);
|
||
|
||
/**
|
||
* 功能:解析Type 10(带CP24归一化测量值)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为6字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_MeasuredValueNormalizedWithCP24Time2a_Get_From_Buffer(IEC60870_MeasuredValueNormalizedWithCP24Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 12(带CP24标度化测量值)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:基础值(3) + CP24(3);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_MeasuredValueScaledWithCP24Time2a_Create(IEC60870_MeasuredValueScaledWithCP24Time2a_t *self,
|
||
uint32_t ioa, int16_t value, int quality, const IEC60870_CP24Time2a_t *time);
|
||
|
||
/**
|
||
* 功能:解析Type 12(带CP24标度化测量值)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为6字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_MeasuredValueScaledWithCP24Time2a_Get_From_Buffer(IEC60870_MeasuredValueScaledWithCP24Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 14(带CP24短浮点测量值)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:基础值(5) + CP24(3);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_MeasuredValueShortWithCP24Time2a_Create(IEC60870_MeasuredValueShortWithCP24Time2a_t *self,
|
||
uint32_t ioa, float value, int quality, const IEC60870_CP24Time2a_t *time);
|
||
|
||
/**
|
||
* 功能:解析Type 14(带CP24短浮点测量值)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为8字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_MeasuredValueShortWithCP24Time2a_Get_From_Buffer(IEC60870_MeasuredValueShortWithCP24Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 16(带CP24累计量)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:基础值(5) + CP24(3);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_IntegratedTotalsWithCP24Time2a_Create(IEC60870_IntegratedTotalsWithCP24Time2a_t *self,
|
||
uint32_t ioa, const IEC60870_BinaryCounterReading_t *value, const IEC60870_CP24Time2a_t *time);
|
||
|
||
/**
|
||
* 功能:解析Type 16(带CP24累计量)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为8字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_IntegratedTotalsWithCP24Time2a_Get_From_Buffer(IEC60870_IntegratedTotalsWithCP24Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 32(带CP56步位置信息)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:基础值(2) + CP56(7);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_StepPositionWithCP56Time2a_Create(IEC60870_StepPositionWithCP56Time2a_t *self,
|
||
uint32_t ioa, int value, int is_transient, int quality, const IEC60870_CP56Time2a_t *time);
|
||
|
||
/**
|
||
* 功能:解析Type 32(带CP56步位置信息)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为9字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_StepPositionWithCP56Time2a_Get_From_Buffer(IEC60870_StepPositionWithCP56Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 33(带CP56比特串监视)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:基础值(5) + CP56(7);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_Bitstring32WithCP56Time2a_Create(IEC60870_Bitstring32WithCP56Time2a_t *self,
|
||
uint32_t ioa, uint32_t value, int quality, const IEC60870_CP56Time2a_t *time);
|
||
|
||
/**
|
||
* 功能:解析Type 33(带CP56比特串监视)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为12字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_Bitstring32WithCP56Time2a_Get_From_Buffer(IEC60870_Bitstring32WithCP56Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 17(带CP24保护事件)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:SEP(1:ES低2位,QDP高5位) + CP16(2) + CP24(3);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_EventOfProtectionEquipment_Create(IEC60870_EventOfProtectionEquipment_t *self,
|
||
uint32_t ioa, int event, int quality, const IEC60870_CP16Time2a_t *elapsed_time, const IEC60870_CP24Time2a_t *time);
|
||
|
||
/**
|
||
* 功能:解析Type 17(带CP24保护事件)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为6字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_EventOfProtectionEquipment_Get_From_Buffer(IEC60870_EventOfProtectionEquipment_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 18(带CP24成组保护启动事件)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:事件(1) + QDP(1) + CP16(2) + CP24(3);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_PackedStartEventsOfProtectionEquipment_Create(IEC60870_PackedStartEventsOfProtectionEquipment_t *self,
|
||
uint32_t ioa, int event, int quality, const IEC60870_CP16Time2a_t *elapsed_time, const IEC60870_CP24Time2a_t *time);
|
||
|
||
/**
|
||
* 功能:解析Type 18(带CP24成组保护启动事件)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为7字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_PackedStartEventsOfProtectionEquipment_Get_From_Buffer(IEC60870_PackedStartEventsOfProtectionEquipment_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 19(带CP24保护输出电路信息)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:事件(1) + QDP(1) + CP16(2) + CP24(3);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_PackedOutputCircuitInfo_Create(IEC60870_PackedOutputCircuitInfo_t *self,
|
||
uint32_t ioa, int event, int quality, const IEC60870_CP16Time2a_t *elapsed_time, const IEC60870_CP24Time2a_t *time);
|
||
|
||
/**
|
||
* 功能:解析Type 19(带CP24保护输出电路信息)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为7字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_PackedOutputCircuitInfo_Get_From_Buffer(IEC60870_PackedOutputCircuitInfo_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 38(带CP56保护事件)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:SEP(1:ES低2位,QDP高5位) + CP16(2) + CP56(7);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_EventOfProtectionEquipmentWithCP56Time2a_Create(IEC60870_EventOfProtectionEquipmentWithCP56Time2a_t *self,
|
||
uint32_t ioa, int event, int quality, const IEC60870_CP16Time2a_t *elapsed_time, const IEC60870_CP56Time2a_t *time);
|
||
|
||
/**
|
||
* 功能:解析Type 38(带CP56保护事件)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为10字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_EventOfProtectionEquipmentWithCP56Time2a_Get_From_Buffer(IEC60870_EventOfProtectionEquipmentWithCP56Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 39(带CP56成组保护启动事件)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:事件(1) + QDP(1) + CP16(2) + CP56(7);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_PackedStartEventsOfProtectionEquipmentWithCP56Time2a_Create(IEC60870_PackedStartEventsOfProtectionEquipmentWithCP56Time2a_t *self,
|
||
uint32_t ioa, int event, int quality, const IEC60870_CP16Time2a_t *elapsed_time, const IEC60870_CP56Time2a_t *time);
|
||
|
||
/**
|
||
* 功能:解析Type 39(带CP56成组保护启动事件)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为11字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_PackedStartEventsOfProtectionEquipmentWithCP56Time2a_Get_From_Buffer(IEC60870_PackedStartEventsOfProtectionEquipmentWithCP56Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 40(带CP56保护输出电路信息)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:事件(1) + QDP(1) + CP16(2) + CP56(7);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_PackedOutputCircuitInfoWithCP56Time2a_Create(IEC60870_PackedOutputCircuitInfoWithCP56Time2a_t *self,
|
||
uint32_t ioa, int event, int quality, const IEC60870_CP16Time2a_t *elapsed_time, const IEC60870_CP56Time2a_t *time);
|
||
|
||
/**
|
||
* 功能:解析Type 40(带CP56保护输出电路信息)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为11字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_PackedOutputCircuitInfoWithCP56Time2a_Get_From_Buffer(IEC60870_PackedOutputCircuitInfoWithCP56Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 20(带变位检测的成组单点)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:SCD(4:状态16位 + 变位16位) + QDS(1);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_PackedSinglePointWithSCD_Create(IEC60870_PackedSinglePointWithSCD_t *self,
|
||
uint32_t ioa, uint16_t status, uint16_t change, int quality);
|
||
|
||
/**
|
||
* 功能:解析Type 20(带变位检测的成组单点)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为5字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_PackedSinglePointWithSCD_Get_From_Buffer(IEC60870_PackedSinglePointWithSCD_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 21(无品质归一化测量值)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:NVA(2),不包含QDS;不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_MeasuredValueNormalizedWithoutQuality_Create(IEC60870_MeasuredValueNormalizedWithoutQuality_t *self,
|
||
uint32_t ioa, int16_t value);
|
||
|
||
/**
|
||
* 功能:解析Type 21(无品质归一化测量值)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为2字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_MeasuredValueNormalizedWithoutQuality_Get_From_Buffer(IEC60870_MeasuredValueNormalizedWithoutQuality_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 51(32位比特串命令)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:BSI(4),不包含QDS;不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_Bitstring32Command_Create(IEC60870_Bitstring32Command_t *self,
|
||
uint32_t ioa, uint32_t value);
|
||
|
||
/**
|
||
* 功能:解析Type 51(32位比特串命令)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为4字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_Bitstring32Command_Get_From_Buffer(IEC60870_Bitstring32Command_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 64(带CP56比特串命令)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:基础值(4) + CP56(7);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_Bitstring32CommandWithCP56Time2a_Create(IEC60870_Bitstring32CommandWithCP56Time2a_t *self,
|
||
uint32_t ioa, uint32_t value, const IEC60870_CP56Time2a_t *time);
|
||
|
||
/**
|
||
* 功能:解析Type 64(带CP56比特串命令)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为11字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_Bitstring32CommandWithCP56Time2a_Get_From_Buffer(IEC60870_Bitstring32CommandWithCP56Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 70(初始化结束)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:COI(1),地址适用性由应用判断;不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_EndOfInitialization_Create(IEC60870_EndOfInitialization_t *self,
|
||
uint32_t ioa, int cause);
|
||
|
||
/**
|
||
* 功能:解析Type 70(初始化结束)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为1字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_EndOfInitialization_Get_From_Buffer(IEC60870_EndOfInitialization_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 104(无时标测试命令)。
|
||
* 输入参数:ioa——0..0xFFFFFF;无附加值参数。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:固定测试图样AA 55;不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_TestCommand_Create(IEC60870_TestCommand_t *self,
|
||
uint32_t ioa);
|
||
|
||
/**
|
||
* 功能:解析Type 104(无时标测试命令)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为2字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_TestCommand_Get_From_Buffer(IEC60870_TestCommand_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 106(延时获得命令)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:CP16(2);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_DelayAcquisitionCommand_Create(IEC60870_DelayAcquisitionCommand_t *self,
|
||
uint32_t ioa, const IEC60870_CP16Time2a_t *delay);
|
||
|
||
/**
|
||
* 功能:解析Type 106(延时获得命令)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为2字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_DelayAcquisitionCommand_Get_From_Buffer(IEC60870_DelayAcquisitionCommand_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 110(归一化测量值参数)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:参数值(2) + QPM(1),QPM不是QDS;不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_ParameterNormalizedValue_Create(IEC60870_ParameterNormalizedValue_t *self,
|
||
uint32_t ioa, int16_t value, int qualifier);
|
||
|
||
/**
|
||
* 功能:解析Type 110(归一化测量值参数)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为3字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_ParameterNormalizedValue_Get_From_Buffer(IEC60870_ParameterNormalizedValue_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 111(标度化测量值参数)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:参数值(2) + QPM(1),QPM不是QDS;不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_ParameterScaledValue_Create(IEC60870_ParameterScaledValue_t *self,
|
||
uint32_t ioa, int16_t value, int qualifier);
|
||
|
||
/**
|
||
* 功能:解析Type 111(标度化测量值参数)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为3字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_ParameterScaledValue_Get_From_Buffer(IEC60870_ParameterScaledValue_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 112(短浮点测量值参数)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:参数值(4) + QPM(1),QPM不是QDS;不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_ParameterFloatValue_Create(IEC60870_ParameterFloatValue_t *self,
|
||
uint32_t ioa, float value, int qualifier);
|
||
|
||
/**
|
||
* 功能:解析Type 112(短浮点测量值参数)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为5字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_ParameterFloatValue_Get_From_Buffer(IEC60870_ParameterFloatValue_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 113(参数激活)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:QPA(1);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_ParameterActivation_Create(IEC60870_ParameterActivation_t *self,
|
||
uint32_t ioa, int qualifier);
|
||
|
||
/**
|
||
* 功能:解析Type 113(参数激活)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为1字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_ParameterActivation_Get_From_Buffer(IEC60870_ParameterActivation_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 120(文件准备就绪)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:NOF(2) + LOF(3) + FRQ(1);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_FileReady_Create(IEC60870_FileReady_t *self,
|
||
uint32_t ioa, uint16_t file_name, uint32_t file_length, int qualifier);
|
||
|
||
/**
|
||
* 功能:解析Type 120(文件准备就绪)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为6字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_FileReady_Get_From_Buffer(IEC60870_FileReady_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 121(节准备就绪)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:NOF(2) + NOS(1) + LOS(3) + SRQ(1);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SectionReady_Create(IEC60870_SectionReady_t *self,
|
||
uint32_t ioa, uint16_t file_name, int section, uint32_t section_length, int qualifier);
|
||
|
||
/**
|
||
* 功能:解析Type 121(节准备就绪)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为7字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SectionReady_Get_From_Buffer(IEC60870_SectionReady_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 122(文件/节召唤或选择)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:NOF(2) + NOS(1) + SCQ(1);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_FileCallOrSelect_Create(IEC60870_FileCallOrSelect_t *self,
|
||
uint32_t ioa, uint16_t file_name, int section, int qualifier);
|
||
|
||
/**
|
||
* 功能:解析Type 122(文件/节召唤或选择)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为4字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_FileCallOrSelect_Get_From_Buffer(IEC60870_FileCallOrSelect_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 124(文件/节确认)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:NOF(2) + NOS(1) + AFQ(1);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_FileACK_Create(IEC60870_FileACK_t *self,
|
||
uint32_t ioa, uint16_t file_name, int section, int qualifier);
|
||
|
||
/**
|
||
* 功能:解析Type 124(文件/节确认)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为4字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_FileACK_Get_From_Buffer(IEC60870_FileACK_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 123(最后文件段或节)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:NOF(2) + NOS(1) + LSQ(1) + CHS(1),这里只传递校验和;不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_FileLastSegmentOrSection_Create(IEC60870_FileLastSegmentOrSection_t *self,
|
||
uint32_t ioa, uint16_t file_name, int section, int qualifier, int checksum);
|
||
|
||
/**
|
||
* 功能:解析Type 123(最后文件段或节)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为5字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_FileLastSegmentOrSection_Get_From_Buffer(IEC60870_FileLastSegmentOrSection_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 125(文件段)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:NOF(2) + NOS(1) + LOS(1) + 段数据(LOS),SQ=0且仅一个对象;不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_FileSegment_Create(IEC60870_FileSegment_t *self,
|
||
uint32_t ioa, uint16_t file_name, int section, const uint8_t *data, uint16_t data_length);
|
||
|
||
/**
|
||
* 功能:解析Type 125(文件段)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须等于4+LOS,先校验长度再复制段数据;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_FileSegment_Get_From_Buffer(IEC60870_FileSegment_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 126(文件目录)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:NOF(2) + LOF(3) + SOF(1) + CP56(7);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_FileDirectory_Create(IEC60870_FileDirectory_t *self,
|
||
uint32_t ioa, uint16_t file_name, uint32_t file_length, int status, const IEC60870_CP56Time2a_t *creation_time);
|
||
|
||
/**
|
||
* 功能:解析Type 126(文件目录)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为13字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_FileDirectory_Get_From_Buffer(IEC60870_FileDirectory_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 127(归档查询)。
|
||
* 输入参数:ioa——0..0xFFFFFF;其余参数见对应结构字段注释,时间和数据指针只在调用期间借用。
|
||
* 输出参数:self——调用方提供的具体对象存储。
|
||
* 返回值:OK成功;ERROR参数、字段或时间非法,输出不变。
|
||
* 说明:NOF(2) + 查询起始CP56(7) + 查询结束CP56(7);不分配内存,不执行业务。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_QueryLog_Create(IEC60870_QueryLog_t *self,
|
||
uint32_t ioa, uint16_t file_name, const IEC60870_CP56Time2a_t *start_time, const IEC60870_CP56Time2a_t *stop_time);
|
||
|
||
/**
|
||
* 功能:解析Type 127(归档查询)的独立值载荷。
|
||
* 输入参数:ioa——已解析地址;payload——不含IOA;length——载荷实际字节数。
|
||
* 输出参数:self——按值保存的独立对象,失败保持原值。
|
||
* 返回值:OK成功;ERROR地址、长度、字段或时间非法。
|
||
* 说明:长度必须恰好为16字节;不借用原报文。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_QueryLog_Get_From_Buffer(IEC60870_QueryLog_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:取得当前配置下一条ASDU能容纳的最大文件段数据长度。
|
||
* 输入参数:parameters——合法应用层参数,包含最大ASDU长度和字段宽度。
|
||
* 输出参数:无。
|
||
* 返回值:0..255为数据容量;-1表示参数非法或连空文件段也容纳不下。
|
||
* 说明:扣除公共头、IOA和4字节段头;104默认配置返回236。
|
||
*/
|
||
int IEC60870_FileSegment_Get_Max_Data_Size(const IEC60870_AppLayerParameters_t *parameters);
|
||
|
||
/**
|
||
* 功能:取得对象Type ID,并核对类型与函数表是否匹配。
|
||
* 输入参数:object——已构造/解析的基类指针,可为NULL。
|
||
* 输出参数:无。
|
||
* 返回值:合法身份的Type ID;NULL、未知类型或函数表不匹配返回0。
|
||
* 说明:不验证数值、品质、IOA和时标;实际编码入口负责这些检查。
|
||
*/
|
||
uint8_t IEC60870_InformationObject_Get_Type(const IEC60870_InformationObject_t *object);
|
||
|
||
/* 编码一个对象(可带IOA),不包含ASDU头。is_sequence=1表示省略本对象IOA,
|
||
* 仅供连续地址监视对象使用;SQ=1的首对象仍必须传0。ASDU入口负责连续性。
|
||
* 参数须非空;IOA按sizeOfIOA检查。FULL表示空间不足,所有失败保留buffer/length。
|
||
* buffer、length与对象不得重叠;length只在成功时写入实际字节数。 */
|
||
IEC60870_AsduResult_t IEC60870_InformationObject_Encode(
|
||
const IEC60870_InformationObject_t *object, const IEC60870_AppLayerParameters_t *parameters,
|
||
int is_sequence, uint8_t *buffer, uint16_t capacity, uint16_t *length);
|
||
|
||
/* 各类型Create都写入调用方提供的非空对象,ioa范围0..0xFFFFFF。
|
||
* 参数中的指针(BCR、CP56)必须非空,成功后按值复制,不借用这些输入。
|
||
* Get_From_Buffer只解码IOA之后的载荷,长度必须精确;ioa由ASDU层解析后传入。
|
||
* 读命令的载荷长度为0,可以传NULL;其他类型要求非空载荷。
|
||
* 所有失败均保留对象,调用方的输出对象不得与输入载荷重叠。
|
||
* 归一化值采用原始int16_t;QU/QL/QOI/RQT/QRP与COT/CA/IOA的业务适用性由应用判断。 */
|
||
|
||
/**
|
||
* 功能:构造Type 1:单点信息,线上值载荷1字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* value——单点状态,0或1。
|
||
* quality——品质仅允许BL/SB/NT/IV(0xF0范围内的位),不得夹带状态或保留位。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SinglePointInformation_Create(IEC60870_SinglePointInformation_t *self,
|
||
uint32_t ioa, int value, int quality);
|
||
/**
|
||
* 功能:解析Type 1的1字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为1。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SinglePointInformation_Get_From_Buffer(IEC60870_SinglePointInformation_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 3:双点信息,线上值载荷1字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* value——双点状态,0..3,包含中间状态和不确定状态。
|
||
* quality——品质仅允许BL/SB/NT/IV(0xF0范围内的位),不得夹带状态或保留位。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_DoublePointInformation_Create(IEC60870_DoublePointInformation_t *self,
|
||
uint32_t ioa, int value, int quality);
|
||
/**
|
||
* 功能:解析Type 3的1字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为1。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_DoublePointInformation_Get_From_Buffer(IEC60870_DoublePointInformation_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 9:归一化测量值(原始16位定点值),线上值载荷3字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* value——归一化原始int16_t定点值,实际数值为value/32768.0。
|
||
* quality——QDS品质仅允许OV/BL/SB/NT/IV(0xF1范围内的位),bit1..3必须为0。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_MeasuredValueNormalized_Create(IEC60870_MeasuredValueNormalized_t *self,
|
||
uint32_t ioa, int16_t value, int quality);
|
||
/**
|
||
* 功能:解析Type 9的3字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为3。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_MeasuredValueNormalized_Get_From_Buffer(IEC60870_MeasuredValueNormalized_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 11:标度化测量值,线上值载荷3字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* value——有符号16位标度值,范围-32768..32767。
|
||
* quality——QDS品质仅允许OV/BL/SB/NT/IV(0xF1范围内的位),bit1..3必须为0。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_MeasuredValueScaled_Create(IEC60870_MeasuredValueScaled_t *self,
|
||
uint32_t ioa, int16_t value, int quality);
|
||
/**
|
||
* 功能:解析Type 11的3字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为3。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_MeasuredValueScaled_Get_From_Buffer(IEC60870_MeasuredValueScaled_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 13:短浮点测量值,线上值载荷5字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* value——短浮点值,采用IEEE 754 binary32,不进行NaN/Inf业务过滤。
|
||
* quality——QDS品质仅允许OV/BL/SB/NT/IV(0xF1范围内的位),bit1..3必须为0。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_MeasuredValueShort_Create(IEC60870_MeasuredValueShort_t *self,
|
||
uint32_t ioa, float value, int quality);
|
||
/**
|
||
* 功能:解析Type 13的5字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为5。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_MeasuredValueShort_Get_From_Buffer(IEC60870_MeasuredValueShort_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 15:累计量,线上值载荷5字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* value——非空BCR指针;计数为int32_t,序号0..31,CY/CA/IV均为0/1。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_IntegratedTotals_Create(IEC60870_IntegratedTotals_t *self,
|
||
uint32_t ioa, const IEC60870_BinaryCounterReading_t *value);
|
||
/**
|
||
* 功能:解析Type 15的5字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为5。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_IntegratedTotals_Get_From_Buffer(IEC60870_IntegratedTotals_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 30:带时标单点信息,线上值载荷8字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* value——单点状态,0或1。
|
||
* quality——品质仅允许BL/SB/NT/IV(0xF0范围内的位),不得夹带状态或保留位。
|
||
* time——非空CP56日历指针,采用2000..2099年约定;保留IV/SU,成功后按值复制。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SinglePointWithCP56Time2a_Create(IEC60870_SinglePointWithCP56Time2a_t *self,
|
||
uint32_t ioa, int value, int quality, const IEC60870_CP56Time2a_t *time);
|
||
/**
|
||
* 功能:解析Type 30的8字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为8。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SinglePointWithCP56Time2a_Get_From_Buffer(IEC60870_SinglePointWithCP56Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 31:带时标双点信息,线上值载荷8字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* value——双点状态,0..3,包含中间状态和不确定状态。
|
||
* quality——品质仅允许BL/SB/NT/IV(0xF0范围内的位),不得夹带状态或保留位。
|
||
* time——非空CP56日历指针,采用2000..2099年约定;保留IV/SU,成功后按值复制。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_DoublePointWithCP56Time2a_Create(IEC60870_DoublePointWithCP56Time2a_t *self,
|
||
uint32_t ioa, int value, int quality, const IEC60870_CP56Time2a_t *time);
|
||
/**
|
||
* 功能:解析Type 31的8字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为8。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_DoublePointWithCP56Time2a_Get_From_Buffer(IEC60870_DoublePointWithCP56Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 34:带时标归一化测量值,线上值载荷10字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* value——归一化原始int16_t定点值,实际数值为value/32768.0。
|
||
* quality——QDS品质仅允许OV/BL/SB/NT/IV(0xF1范围内的位),bit1..3必须为0。
|
||
* time——非空CP56日历指针,采用2000..2099年约定;保留IV/SU,成功后按值复制。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_MeasuredValueNormalizedWithCP56Time2a_Create(IEC60870_MeasuredValueNormalizedWithCP56Time2a_t *self,
|
||
uint32_t ioa, int16_t value, int quality, const IEC60870_CP56Time2a_t *time);
|
||
/**
|
||
* 功能:解析Type 34的10字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为10。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_MeasuredValueNormalizedWithCP56Time2a_Get_From_Buffer(IEC60870_MeasuredValueNormalizedWithCP56Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 35:带时标标度化测量值,线上值载荷10字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* value——有符号16位标度值,范围-32768..32767。
|
||
* quality——QDS品质仅允许OV/BL/SB/NT/IV(0xF1范围内的位),bit1..3必须为0。
|
||
* time——非空CP56日历指针,采用2000..2099年约定;保留IV/SU,成功后按值复制。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_MeasuredValueScaledWithCP56Time2a_Create(IEC60870_MeasuredValueScaledWithCP56Time2a_t *self,
|
||
uint32_t ioa, int16_t value, int quality, const IEC60870_CP56Time2a_t *time);
|
||
/**
|
||
* 功能:解析Type 35的10字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为10。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_MeasuredValueScaledWithCP56Time2a_Get_From_Buffer(IEC60870_MeasuredValueScaledWithCP56Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 36:带时标短浮点测量值,线上值载荷12字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* value——短浮点值,采用IEEE 754 binary32,不进行NaN/Inf业务过滤。
|
||
* quality——QDS品质仅允许OV/BL/SB/NT/IV(0xF1范围内的位),bit1..3必须为0。
|
||
* time——非空CP56日历指针,采用2000..2099年约定;保留IV/SU,成功后按值复制。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_MeasuredValueShortWithCP56Time2a_Create(IEC60870_MeasuredValueShortWithCP56Time2a_t *self,
|
||
uint32_t ioa, float value, int quality, const IEC60870_CP56Time2a_t *time);
|
||
/**
|
||
* 功能:解析Type 36的12字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为12。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_MeasuredValueShortWithCP56Time2a_Get_From_Buffer(IEC60870_MeasuredValueShortWithCP56Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 37:带时标累计量,线上值载荷12字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* value——非空BCR指针;计数为int32_t,序号0..31,CY/CA/IV均为0/1。
|
||
* time——非空CP56日历指针,采用2000..2099年约定;保留IV/SU,成功后按值复制。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_IntegratedTotalsWithCP56Time2a_Create(IEC60870_IntegratedTotalsWithCP56Time2a_t *self,
|
||
uint32_t ioa, const IEC60870_BinaryCounterReading_t *value, const IEC60870_CP56Time2a_t *time);
|
||
/**
|
||
* 功能:解析Type 37的12字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为12。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_IntegratedTotalsWithCP56Time2a_Get_From_Buffer(IEC60870_IntegratedTotalsWithCP56Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 45:单命令,线上值载荷1字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* state——单命令状态,0或1;SCO保留位由编码器保持为0。
|
||
* is_select——选择/执行标志S/E,1为选择、0为执行;本函数不执行命令。
|
||
* qualifier——命令限定词QU,0..31;具体业务含义由应用判断。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SingleCommand_Create(IEC60870_SingleCommand_t *self,
|
||
uint32_t ioa, int state, int is_select, int qualifier);
|
||
/**
|
||
* 功能:解析Type 45的1字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为1。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SingleCommand_Get_From_Buffer(IEC60870_SingleCommand_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 46:双命令,线上值载荷1字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* state——双命令/步调节状态,仅允许1或2。
|
||
* is_select——选择/执行标志S/E,1为选择、0为执行;本函数不执行命令。
|
||
* qualifier——命令限定词QU,0..31;具体业务含义由应用判断。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_DoubleCommand_Create(IEC60870_DoubleCommand_t *self,
|
||
uint32_t ioa, int state, int is_select, int qualifier);
|
||
/**
|
||
* 功能:解析Type 46的1字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为1。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_DoubleCommand_Get_From_Buffer(IEC60870_DoubleCommand_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 47:步调节命令,线上值载荷1字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* state——双命令/步调节状态,仅允许1或2。
|
||
* is_select——选择/执行标志S/E,1为选择、0为执行;本函数不执行命令。
|
||
* qualifier——命令限定词QU,0..31;具体业务含义由应用判断。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_StepCommand_Create(IEC60870_StepCommand_t *self,
|
||
uint32_t ioa, int state, int is_select, int qualifier);
|
||
/**
|
||
* 功能:解析Type 47的1字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为1。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_StepCommand_Get_From_Buffer(IEC60870_StepCommand_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 48:归一化设定值命令(原始16位定点值),线上值载荷3字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* value——归一化原始int16_t定点值,实际数值为value/32768.0。
|
||
* is_select——选择/执行标志S/E,1为选择、0为执行;本函数不执行命令。
|
||
* qualifier——设定值限定词QL,0..127;编码到QOS低7位。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SetpointCommandNormalized_Create(IEC60870_SetpointCommandNormalized_t *self,
|
||
uint32_t ioa, int16_t value, int is_select, int qualifier);
|
||
/**
|
||
* 功能:解析Type 48的3字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为3。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SetpointCommandNormalized_Get_From_Buffer(IEC60870_SetpointCommandNormalized_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 49:标度化设定值命令,线上值载荷3字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* value——有符号16位标度值,范围-32768..32767。
|
||
* is_select——选择/执行标志S/E,1为选择、0为执行;本函数不执行命令。
|
||
* qualifier——设定值限定词QL,0..127;编码到QOS低7位。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SetpointCommandScaled_Create(IEC60870_SetpointCommandScaled_t *self,
|
||
uint32_t ioa, int16_t value, int is_select, int qualifier);
|
||
/**
|
||
* 功能:解析Type 49的3字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为3。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SetpointCommandScaled_Get_From_Buffer(IEC60870_SetpointCommandScaled_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 50:短浮点设定值命令,线上值载荷5字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* value——短浮点值,采用IEEE 754 binary32,不进行NaN/Inf业务过滤。
|
||
* is_select——选择/执行标志S/E,1为选择、0为执行;本函数不执行命令。
|
||
* qualifier——设定值限定词QL,0..127;编码到QOS低7位。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SetpointCommandShort_Create(IEC60870_SetpointCommandShort_t *self,
|
||
uint32_t ioa, float value, int is_select, int qualifier);
|
||
/**
|
||
* 功能:解析Type 50的5字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为5。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SetpointCommandShort_Get_From_Buffer(IEC60870_SetpointCommandShort_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 58:带时标单命令,线上值载荷8字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* state——单命令状态,0或1;SCO保留位由编码器保持为0。
|
||
* is_select——选择/执行标志S/E,1为选择、0为执行;本函数不执行命令。
|
||
* qualifier——命令限定词QU,0..31;具体业务含义由应用判断。
|
||
* time——非空CP56日历指针,采用2000..2099年约定;保留IV/SU,成功后按值复制。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SingleCommandWithCP56Time2a_Create(IEC60870_SingleCommandWithCP56Time2a_t *self,
|
||
uint32_t ioa, int state, int is_select, int qualifier, const IEC60870_CP56Time2a_t *time);
|
||
/**
|
||
* 功能:解析Type 58的8字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为8。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SingleCommandWithCP56Time2a_Get_From_Buffer(IEC60870_SingleCommandWithCP56Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 59:带时标双命令,线上值载荷8字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* state——双命令/步调节状态,仅允许1或2。
|
||
* is_select——选择/执行标志S/E,1为选择、0为执行;本函数不执行命令。
|
||
* qualifier——命令限定词QU,0..31;具体业务含义由应用判断。
|
||
* time——非空CP56日历指针,采用2000..2099年约定;保留IV/SU,成功后按值复制。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_DoubleCommandWithCP56Time2a_Create(IEC60870_DoubleCommandWithCP56Time2a_t *self,
|
||
uint32_t ioa, int state, int is_select, int qualifier, const IEC60870_CP56Time2a_t *time);
|
||
/**
|
||
* 功能:解析Type 59的8字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为8。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_DoubleCommandWithCP56Time2a_Get_From_Buffer(IEC60870_DoubleCommandWithCP56Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 60:带时标步调节命令,线上值载荷8字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* state——双命令/步调节状态,仅允许1或2。
|
||
* is_select——选择/执行标志S/E,1为选择、0为执行;本函数不执行命令。
|
||
* qualifier——命令限定词QU,0..31;具体业务含义由应用判断。
|
||
* time——非空CP56日历指针,采用2000..2099年约定;保留IV/SU,成功后按值复制。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_StepCommandWithCP56Time2a_Create(IEC60870_StepCommandWithCP56Time2a_t *self,
|
||
uint32_t ioa, int state, int is_select, int qualifier, const IEC60870_CP56Time2a_t *time);
|
||
/**
|
||
* 功能:解析Type 60的8字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为8。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_StepCommandWithCP56Time2a_Get_From_Buffer(IEC60870_StepCommandWithCP56Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 61:带时标归一化设定值命令,线上值载荷10字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* value——归一化原始int16_t定点值,实际数值为value/32768.0。
|
||
* is_select——选择/执行标志S/E,1为选择、0为执行;本函数不执行命令。
|
||
* qualifier——设定值限定词QL,0..127;编码到QOS低7位。
|
||
* time——非空CP56日历指针,采用2000..2099年约定;保留IV/SU,成功后按值复制。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SetpointCommandNormalizedWithCP56Time2a_Create(IEC60870_SetpointCommandNormalizedWithCP56Time2a_t *self,
|
||
uint32_t ioa, int16_t value, int is_select, int qualifier, const IEC60870_CP56Time2a_t *time);
|
||
/**
|
||
* 功能:解析Type 61的10字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为10。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SetpointCommandNormalizedWithCP56Time2a_Get_From_Buffer(IEC60870_SetpointCommandNormalizedWithCP56Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 62:带时标标度化设定值命令,线上值载荷10字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* value——有符号16位标度值,范围-32768..32767。
|
||
* is_select——选择/执行标志S/E,1为选择、0为执行;本函数不执行命令。
|
||
* qualifier——设定值限定词QL,0..127;编码到QOS低7位。
|
||
* time——非空CP56日历指针,采用2000..2099年约定;保留IV/SU,成功后按值复制。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SetpointCommandScaledWithCP56Time2a_Create(IEC60870_SetpointCommandScaledWithCP56Time2a_t *self,
|
||
uint32_t ioa, int16_t value, int is_select, int qualifier, const IEC60870_CP56Time2a_t *time);
|
||
/**
|
||
* 功能:解析Type 62的10字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为10。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SetpointCommandScaledWithCP56Time2a_Get_From_Buffer(IEC60870_SetpointCommandScaledWithCP56Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 63:带时标短浮点设定值命令,线上值载荷12字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* value——短浮点值,采用IEEE 754 binary32,不进行NaN/Inf业务过滤。
|
||
* is_select——选择/执行标志S/E,1为选择、0为执行;本函数不执行命令。
|
||
* qualifier——设定值限定词QL,0..127;编码到QOS低7位。
|
||
* time——非空CP56日历指针,采用2000..2099年约定;保留IV/SU,成功后按值复制。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SetpointCommandShortWithCP56Time2a_Create(IEC60870_SetpointCommandShortWithCP56Time2a_t *self,
|
||
uint32_t ioa, float value, int is_select, int qualifier, const IEC60870_CP56Time2a_t *time);
|
||
/**
|
||
* 功能:解析Type 63的12字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为12。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_SetpointCommandShortWithCP56Time2a_Get_From_Buffer(IEC60870_SetpointCommandShortWithCP56Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 100:总召唤命令,线上值载荷1字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* qualifier——总召唤限定词QOI,0..255;本层保留全部编码值。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_InterrogationCommand_Create(IEC60870_InterrogationCommand_t *self,
|
||
uint32_t ioa, int qualifier);
|
||
/**
|
||
* 功能:解析Type 100的1字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为1。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_InterrogationCommand_Get_From_Buffer(IEC60870_InterrogationCommand_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 101:电能脉冲召唤命令,线上值载荷1字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* qualifier——电能脉冲请求限定词RQT,0..63。
|
||
* freeze——冻结限定词FR,0..3,编码到QCC高2位。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_CounterInterrogationCommand_Create(IEC60870_CounterInterrogationCommand_t *self,
|
||
uint32_t ioa, int qualifier, int freeze);
|
||
/**
|
||
* 功能:解析Type 101的1字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为1。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_CounterInterrogationCommand_Get_From_Buffer(IEC60870_CounterInterrogationCommand_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 102:读命令,线上值载荷0字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_ReadCommand_Create(IEC60870_ReadCommand_t *self,
|
||
uint32_t ioa);
|
||
/**
|
||
* 功能:解析Type 102的0字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,本类型允许NULL。
|
||
* length——必须恰好为0。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_ReadCommand_Get_From_Buffer(IEC60870_ReadCommand_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 103:时钟同步命令,线上值载荷7字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* time——非空CP56日历指针,采用2000..2099年约定;保留IV/SU,成功后按值复制。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_ClockSynchronizationCommand_Create(IEC60870_ClockSynchronizationCommand_t *self,
|
||
uint32_t ioa, const IEC60870_CP56Time2a_t *time);
|
||
/**
|
||
* 功能:解析Type 103的7字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为7。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_ClockSynchronizationCommand_Get_From_Buffer(IEC60870_ClockSynchronizationCommand_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 105:复位进程命令,线上值载荷1字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* qualifier——复位进程限定词QRP,0..255;本层不执行复位。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_ResetProcessCommand_Create(IEC60870_ResetProcessCommand_t *self,
|
||
uint32_t ioa, int qualifier);
|
||
/**
|
||
* 功能:解析Type 105的1字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为1。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_ResetProcessCommand_Get_From_Buffer(IEC60870_ResetProcessCommand_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
/**
|
||
* 功能:构造Type 107:带时标测试命令,线上值载荷9字节,不含IOA。
|
||
* 输入参数:ioa——信息对象地址,0..0xFFFFFF;编码时再按配置的IOA宽度检查上限。
|
||
* sequence——16位测试序号,0..65535,与APCI的N(S)/N(R)无关。
|
||
* time——非空CP56日历指针,采用2000..2099年约定;保留IV/SU,成功后按值复制。
|
||
* 输出参数:self——调用方提供的非空具体对象;成功后可直接传给ASDU添加入口。
|
||
* 返回值:OK表示构造成功,ERROR表示参数或字段非法;失败保留原对象,不分配内存。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_TestCommandWithCP56Time2a_Create(IEC60870_TestCommandWithCP56Time2a_t *self,
|
||
uint32_t ioa, uint16_t sequence, const IEC60870_CP56Time2a_t *time);
|
||
/**
|
||
* 功能:解析Type 107的9字节值载荷,IOA由调用方单独传入。
|
||
* 输入参数:ioa——已解析/还原的地址,0..0xFFFFFF。
|
||
* payload——不含IOA的载荷,必须非空。
|
||
* length——必须恰好为9。
|
||
* 输出参数:self——非空具体对象,成功后不借用输入;失败保持原值。
|
||
* 返回值:OK表示解析成功,ERROR表示参数、长度或字段非法。
|
||
*/
|
||
IEC60870_AsduResult_t IEC60870_TestCommandWithCP56Time2a_Get_From_Buffer(IEC60870_TestCommandWithCP56Time2a_t *self,
|
||
uint32_t ioa, const uint8_t *payload, uint16_t length);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif /* IEC60870_INFORMATION_OBJECTS_H */
|
||
|