/****************************************************************************** 版权所有: 文件名称: equ.h 文件版本: 01.01 创建作者: sunxi 创建日期: 2013-03-25 功能说明: 装置信息管理维护 其它说明: 修改记录: */ #ifndef _EQU_H #define _EQU_H /*------------------------------- 头文件 -------------------------------------- */ /*------------------------------- 宏定义 -------------------------------------- */ // 配置资源名字长度,不要随意改动,影响文件的对齐。 #define EQU_CFG_NAME_LEN 20 // 板卡类型用一个字节表示,分为四组,用最高2位表示 // 1、001~063: 和主板直接或通过CAN连接。 // 2、064~127: 和主板通过串口连接 // 3、128~191: 保留 // 4、192~255: 保留 #define BOARD_TYPE_GROUP_MASK 0XC0 #define BOARD_TYPE_GROUP_MAIN 0X00 #define BOARD_TYPE_GROUP_RS 0X40 #define BOARD_TYPE_GROUP_RSV1 0X80 #define BOARD_TYPE_GROUP_RSV2 0XC0 // 支持的控制板数量 #define BOARD_TYPE_KZ_NUM 26 //增加控制板的类型数量,适应分布式不同办卡类型 #define BOARD_TYPE_NULL 0 // 备用板 #define BOARD_TYPE_POWER 1 // 电源板 #define BOARD_TYPE_MAIN 2 // 主控板 #define BOARD_TYPE_DO 3 // 开入板 #define BOARD_TYPE_DI 4 // 开出板 #define BOARD_TYPE_AUX 5 // 辅助板 #define BOARD_TYPE_AC 6 // 采样板 #define BOARD_TYPE_ZT 7 // 状态板 #define BOARD_TYPE_ZH 8 // 综合板 #define BOARD_TYPE_KZ 9 // 控制板 #define BOARD_TYPE_FUXI_DI 30 // 开入板 #define BOARD_TYPE_FUXI_DO 31 // 开出板 #define BOARD_TYPE_FUXI_AC 32 // 采样板 #define BOARD_TYPE_FUXI_24LED 33 // 液晶面板 #define BOARD_TYPE_RS_STATUS 64 // 状态板 #define BOARD_TYPE_LCD_16LED 65 // 液晶面板 #define BOARD_TYPE_LCD 65 // 液晶面板 #define BOARD_TYPE_METERING 67 // 计量板 #define BOARD_TYPE_LCD_24LED 68 // 液晶面板 24个双色灯 #define BOARD_TYPE_LCD_26LED 70 // 液晶面板 26个双色灯 #define LED_NULL (-1) #define LED_MAX_NUM (24) // CT PT标度,1V或1A对应的码值 enum { EQU_SCALE_PT_264V_3V53, EQU_SCALE_PT_DEFAULT, // 默认值,不同装置默认值可能不同 EQU_SCALE_EVT_3V25_100V, EQU_SCALE_EVT_6V50_100V, EQU_SCALE_CT_100A_3V53, EQU_SCALE_CT_DEFAULT, // 默认值,一般额定值为100A,不同装置默认值可能不同 EQU_SCALE_ECT_1V_1A, EQU_SCALE_ECT_0V2_1A, EQU_SCALE_CT_10A_51, EQU_SCALE_PT_102K, EQU_SCALE_PT_120K, EQU_SCALE_PT_172K, EQU_SCALE_PT_204K, EQU_SCALE_CT_10A_604, EQU_SCALE_CT_10A_120, EQU_SCALE_CT_10A_249, EQU_SCALE_PT_120K_604, EQU_SCALE_PT_400V_3V53, EQU_SCALE_CT_20A_3V53, EQU_SCALE_DC_VOLT, EQU_SCALE_DC_CURRENT, EQU_SCALE_NUM }; /*------------------------------ 类型结构 ------------------------------------- */ // 装置配置文件头 struct equ_config { // 配置文件头 struct cfg_file_head cfh; // 工程文件名 s8 prj_name[64]; // 装置类型 u8 equ_sw_num; // 装置支持的本地开关数量 u8 equ_slot_num; // 装置支持的插槽数量 s8 equ_name[14]; // 板卡信息 u8 brd_type[16]; // 通道配置头 // DI u32 di_addr; // 地址 u32 di_num; // 个数 // DO u32 do_addr; // 地址 u32 do_num; // 个数 // AC u32 ac_addr; // 地址 u32 ac_num; // 个数 // 保留 u32 re_addr; // 地址 u32 re_num; // 个数 // 对应描述文件 u32 rsc_version; // 版本 u32 rsc_signature; // 签名 u32 rsc_length; // 长度 u16 rsc_crc; // CRC u16 reserved0; }; struct equ_config_di { #if !defined IECTABLE_NEWTOOL_OLE u8 slot; // 板卡槽位地址 u8 index; // DI硬件地址,从0开始 u8 type; // DI类型 u8 owner; // 归属:开关1~开关12、公共 u32 filter_time; // DI防抖滤波时间 u8 is_Inverse; // 是否取反 s8 name[EQU_CFG_NAME_LEN]; // DI名称 u8 reserved[3]; #else u8 slot; // 板卡槽位地址 u8 index; // DI硬件地址,从0开始 u16 type; // DI类型 工具开入量配置解析用的是和遥信一样的资源表 20230213 u32 filter_time; // DI防抖滤波时间 类型加了1个字节导致这4个字节对不齐了,和归属调换一下位置 20230213 u8 owner; // 归属:开关1~开关12、公共 u8 is_Inverse; // 是否取反 s8 name[EQU_CFG_NAME_LEN]; // DI名称 u8 reserved[2]; #endif }; struct equ_config_do { u8 slot; // 板卡槽位地址 u8 index; // DO硬件地址 u8 type; // DO类型 u8 owner; // 归属:开关1~开关12、公共 u16 time_pulse; // DO脉宽时间 s8 name[EQU_CFG_NAME_LEN]; // DO名称 u8 reserved[6]; }; struct equ_config_ac { u8 slot; // 板卡槽位地址 u8 index; // AI硬件地址 u8 type; // AI类型 u8 owner; // 归属:开关1~开关12、公共 u8 is_ct_inverse; // CT是否反向:防止CT反接 u8 scale; // 采样PT变比:1A 5A 20A100A s8 name[EQU_CFG_NAME_LEN]; // AI名称 u16 reserved[6]; }; struct board_res_head { // 配置文件头 struct cfg_file_head cfh; // 板卡描述 u32 br_addr; // 地址 u32 br_num; // 个数 // 保留 u32 re_addr; // 地址 u32 re_num; // 个数 }; struct board_res { u8 type; // 类型 u8 di_num; // DI数量 u8 do_num; // DO数量 u8 ac_num; // AC数量 s8 name[12]; // 名字 }; struct board_info { u8 type; u8 di_num; // DI数量 u8 do_num; // DO数量 u8 ac_num; // AC数量 u8 status; u16 errcode; u16 crc; u32 version; struct timespec update_time; u16 can_bus; // 子板通讯异常检查 u8 is_check; // 是否检查 u8 is_ok; // 检查结果是否ok u32 us0; // 检查时间点记录 }; struct sn { s8 sw; // 类型 0公共 1开关1 s8 no; u16 time; // 翻转时间 }; // LED配置结构体 struct led_config { u8 num; // 板卡LED个数 struct sn sn[LED_MAX_NUM]; // LED对应逻辑点 }; /*------------------------------ 函数声明 ------------------------------------- */ extern struct equ_config *g_equ_config; extern struct equ_config_di *g_equ_config_di; extern struct equ_config_do *g_equ_config_do; extern struct equ_config_ac *g_equ_config_ac; extern struct board_info g_board_info[]; extern struct board_res *g_board_res; extern u8 g_equ_adc_inv[CFG_ADC_CHANNEL]; extern int g_equ_adc_inv_num; // ADC通道是否配置 extern u8 g_equ_adc_config[CFG_ADC_CHANNEL]; extern u32 g_sw_num; extern int g_slot_addr; // 插槽地址 extern int g_hw_version; // 硬件版本 extern u16 g_crc_brd_res; extern u16 g_crc_equ_cfg; extern u32 g_ac_slot_begin; // 8槽机箱为6,11槽机箱为7 extern struct file_contrast g_equ_contrast; extern int g_sw_ac_num[SWITCH_NUM_MAX + 1]; extern int g_pub_ac_num; #define equ_config_null() (!g_equ_config->equ_slot_num) #define equ_slot_can_bus(slot) (g_board_info[slot].can_bus) int equ_init(void); int equ_exit(void); int equ_ac_index_to_slot(int ac_index); int equ_get_di_num(u32 slot); int equ_get_do_num(u32 slot); int equ_get_ac_num(u32 slot); int equ_get_ac_channel(u32 slot, u32 index); int equ_get_ac_scale(u8 slot, u8 no); u32 equ_get_slot_by_type(u8 type); u16 equ_di_to_sw(u8 slot, u8 no); char *equ_di_name(u8 slot, u8 no); u8 equ_di_type(u8 slot, u8 no); // 根据板卡和序号,返回遥信类型 u8 equ_pub_di_type(u8 slot, u8 no); #ifdef CPU_FUXI int equ_init_rv_di(void); int equ_reinit_rv_di(void); #endif #endif //_EQU_H /*------------------------------ 文件结束 ------------------------------------- */