⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dev103.h

📁 简单103规约程序示例
💻 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 + -