📄 dev103.h
字号:
#include "GENERIC.H"
#include "uart.h"
#include "inforec.h"
#include "typedef.h"
#include "nucleus.h"
#include "system.h"
#include "dev_mng.h"
#include "math.h"
#include "Dev103Code.h"
//103设备服务接口
BOOL c103_service(T_IED *p_ied, T_MESSAGE *p_msg);
//通讯端口
static WORD m_dev_port=UART_PORT_A;
//轮询任务
static NU_TASK m_c103_task;
static BYTE m_c103_stack[0x2000];
static VOID task_c103(UNSIGNED argc, VOID *argv);
//通讯资源
static BYTE m_tx_buf[UART_PACKET_SIZE];
static BYTE m_rx_buf[UART_PACKET_SIZE];
static NU_SEMAPHORE m_com_lock;
#define polling_delay_time 1*SYS_SECOND_TICKS
//锁定通讯资源
#define DEV_LOCK_COM() NU_Obtain_Semaphore(&m_com_lock, NU_SUSPEND)
//开放通讯资源
#define DEV_UNLOCK_COM() NU_Release_Semaphore(&m_com_lock)
//103扫描序号sn
volatile BYTE m_c103_sn =0;
//103返回信息标识符rii
volatile BYTE m_c103_rii =0;
typedef struct tagT_C103_CODE_TABLE
{
WORD dev_type; /* 设备类型 */
T_EVENT_ENTRY *p_event; /* 事件码表 */
T_ALARM_ENTRY *p_alarm; /* 告警码表 */
T_SET_ENTRY *p_setting; /* 定值码表 */
WORD w_even; /* 事件个数 */
WORD w_alarm; /* 告警个数 */
WORD w_setting; /* 定值个数 */
}T_C103_CODE_TABLE;
//103会话设施描述
#define C103_ASDU_TIMEOUT (2*SYS_SECOND_TICKS)
#define C103_ASDU_SIZE 0x300
//103报文帧格式描述
typedef struct tagT_C103_FRAME
{
BYTE type; /* 帧类型 */
BYTE len; /* 长度 */
BYTE contral; /* 控制域 */
BYTE address; /* 地址域 */
BYTE crc; /* 帧校验和 */
BYTE endbyte; /* 结束字符 */
}T_C103_FRAME;
//帧格式类型
#define FRAME_T_VOL 0x68 /* 可变帧长 */
#define FRAME_T_CON 0x10 /* 固定帧长 */
//103应用服务数据单元(ASDU)格式
typedef struct tagT_C103_ASDU
{
BYTE type; /* 类型标识 */
BYTE vsq; /* 可变结构限定词 */
BYTE cot; /* 传送原因 */
BYTE addr; /* 公共地址 */
BYTE fun; /* 功能类型 */
BYTE inf; /* 信息序号 */
BYTE data[C103_ASDU_SIZE-7]; /* 信息体报文 */
}T_C103_ASDU;
//103数据(信息元)格式
typedef struct tagT_C103_DATA
{
BYTE ginh; /* 通用分类标识序号高 */
BYTE ginl; /* 通用分类标识序号低 */
BYTE kod; /* 描述的类别 */
BYTE type; /* 数据类型 */
BYTE size; /* 数据宽度 */
BYTE num; /* 数目 */
BYTE data[16]; /* 数据值 */
}T_C103_DATA;
//类型标识
#define ASDU1 1 //动作事件
#define ASDU2 2 //告警事件
#define ASDU5 5
#define ASDU8 8
#define ASDU10 10//setting
#define ASDU40 40//遥信变位
#define ASDU41 41//SOE
#define ASDU44 44//全遥信
#define ASDU50 50//全遥测
#define ASDU64 64//遥控
//起始点号
#define MEA_FIRST_FUN 0x01
#define MEA_FIRST_INF 0x5b
#define DI_FIRST_FUN 0x01
#define DI_FIRST_INF 0x94
#define CTRL_FIRST_FUN 0x01
#define CTRL_FIRST_INF 0x2f
//功能类型
#define C103_FUN_931A 178
#define C103_FUN_901A 178
#define C103_FUN_902A 178
#define C103_FUN_923A 184
#define C103_FUN_915A 210
#define C103_FUN_9607 1
#define C103_FUN_974A 194
#define C103_FUN_978E 195
#define C103_FUN_992A 251
#define C103_FUN_993B 245
#define C103_FUN_GEN 254 //通用分类功能类型
#define C103_FUN_GLB 255 //全局功能类型
//通用分类标识码(GINH:组号)
#define C103_GIN_SYS0 0 //系统组0
#define C103_GIN_SYS1 1 //系统组1
#define C103_GIN_SET0 2 //定值组0
#define C103_GIN_SET1 3 //定值组1
#define C103_GIN_EVENT 4 //保护动作组
#define C103_GIN_ALARM 5 //保护告警组
#define C103_GIN_CHN 6 //保护测量组
#define C103_GIN_MS 7 //遥测组
#define C103_GIN_DI 8 //遥信组
#define C103_GIN_PS 10 //遥脉组
#define C103_GIN_DO 11 //遥控组
#define C103_GIN_TP 12 //分头组(tap position)
#define C103_GIN_YT 13 //遥调组
#define C103_GIN_SFC 14 //软压板组
#define C103_GIN_SOE 24 //遥信SOE
//kind of description(KOD)
#define C103_KOD_VAL 1 //value: 实际值
#define C103_KOD_DEF 2 //default: 缺省值
#define C103_KOD_RAN 3 //range: 量程(最小值、最大值、步长)
#define C103_KOD_PRE 5 //precision:精度(n,m)
#define C103_KOD_FAC 6 //factor: 因子
#define C103_KOD_UNI 9 //unit: 单位(量纲)
#define C103_KOD_NAM 10 //name: 名称(描述)
//type of data(TOD)
#define C103_TOD_NIL 0 //无数据
#define C103_TOD_ASC 1 //ASCII字符
#define C103_TOD_UINT 3 //无符号整数
#define C103_TOD_SINT 4 //有符号整数
#define C103_TOD_FLOAT 6 //浮点数
#define C103_TOD_R3223 7 //IEEE标准754短实数
#define C103_TOD_R6453 8 //IEEE标准754实数
#define C103_TOD_DPI 9 //双点信息
#define C103_TOD_MSQ 12 //带品质描述的测量值
#define C103_TOD_SOE 18 //带时标的报文
//系统组0下的条目定义
#define C103_CUR_ZONE 2 //当前定值区
#define C103_RUN_ZONE 3 //运行定值区
#define C103_PLS_STS 5 //脉冲状态(冻结/解冻)
#define C103_SIG_STS 6 //信号状态(复归/未复归)
//103协议初始化
BOOL c103_initialize();
//103设备初始化
BOOL c103_open_ied(T_IED *p_ied);
//103设备总查询任务
VOID task_c103(UNSIGNED argc, VOID *argv);
//保护采样通道值
BOOL c103_get_channel(T_IED *p_ied, T_CHANNEL *p_chn);
//定值类服务
BOOL c103_get_setting(T_IED *p_ied, T_SET *p_set);
BOOL c103_get_zone(T_IED *p_ied, WORD *p_set_no);
//软压板类服务
BOOL c103_get_sfc(T_IED *p_ied);
//遥控类服务[最小遥控点号 =1]
BOOL c103_check_control(T_IED *p_ied, WORD ctrl_no);
BOOL c103_remote_control(T_IED *p_ied, WORD ctrl_no);
//信号复归
BOOL c103_reset_signal(T_IED *p_ied);
//时间服务
static BOOL c103_set_clock(T_IED *p_ied, const T_DATE *p_date);
//描述表服务
BOOL c103_get_list(T_IED *p_ied, T_LIST *p_list);
//取103条目号
WORD C103_Get_Code(T_IED* p_ied, T_LIST* p_list, WORD code);
static BOOL c103_device_initialize(T_IED* p_ied);
/*设备类型*/
#define RCS931A 1
#define RCS901A 2
#define RCS915A 3
#define RCS9607 4
#define RCS978E_1 5
#define RCS978E_2 6
#define RCS978E_3 7
#define RCS978E_4 8
#define RCS974A 9
#define RCS915AB 10
#define RCS992A 11
#define RCS993B 12
//设备创建部分
static T_IED g_ied_list[]=
{
//data[0]是设备地址,data[1]是定值组号,data[5]是硬压板个数
{1,c103_service,C103_FUN_978E,0,{1,3,0,0,0,8},RCS978E_1},//主保护
// {2,c103_service,C103_FUN_974A,0,{2,3,0,0,0,12},RCS974A},//非电量
// {3,c103_service,C103_FUN_978E,0,{1,4,0,0,0,14},RCS978E_2},//Ⅰ侧后备1
// {4,c103_service,C103_FUN_978E,0,{1,5,0,0,0,14},RCS978E_3},//Ⅰ侧后备2
// {5,c103_service,C103_FUN_978E,0,{1,8,0,0,0,14},RCS978E_4},//Ⅲ侧后备
};
#define DeviceNumber sizeof(g_ied_list)/sizeof(T_IED)//设备数目
/* 保护类型 */
static T_C103_CODE_TABLE g_c103_code[]=
{
{RCS931A,nr_931a_event_table, nr_931a_alarm_table, nr_931a_set_table,m_931a_evSize, m_931a_alSize, m_931a_setSize},
{RCS915AB,nr_915ab_event_table, nr_915ab_alarm_table, nr_915ab_set_table,m_915ab_evSize,m_915ab_alSize, m_915ab_setSize},
{RCS974A,nr_974a_event_table, nr_974a_alarm_table, nr_974a_set_table,m_974a_evSize, m_974a_alSize, m_974a_setSize},
{RCS978E_1,nr_978e_event_table, nr_978e_alarm_table, nr_978e_set_table_1,m_978e_evSize, m_978e_alSize, m_978e_setSize_1},
{RCS978E_2,nr_978e_event_table, nr_978e_alarm_table, nr_978e_set_table_2,m_978e_evSize, m_978e_alSize, m_978e_setSize_2},
{RCS978E_3,nr_978e_event_table, nr_978e_alarm_table, nr_978e_set_table_3,m_978e_evSize, m_978e_alSize, m_978e_setSize_3},
{RCS978E_4,nr_978e_event_table, nr_978e_alarm_table, nr_978e_set_table_4,m_978e_evSize, m_978e_alSize, m_978e_setSize_4},
};
#define g_c103_code_size sizeof(g_c103_code)/sizeof(T_C103_CODE_TABLE)
//103帧记数位fbc,记录每个装置的FCB标志位
static BYTE m_c103_fcb[DeviceNumber];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -