equ.h 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. /******************************************************************************
  2. 版权所有:
  3. 文件名称: equ.h
  4. 文件版本: 01.01
  5. 创建作者: sunxi
  6. 创建日期: 2013-03-25
  7. 功能说明: 装置信息管理维护
  8. 其它说明:
  9. 修改记录:
  10. */
  11. #ifndef _EQU_H
  12. #define _EQU_H
  13. /*------------------------------- 头文件 --------------------------------------
  14. */
  15. /*------------------------------- 宏定义 --------------------------------------
  16. */
  17. // 配置资源名字长度,不要随意改动,影响文件的对齐。
  18. #define EQU_CFG_NAME_LEN 20
  19. // 板卡类型用一个字节表示,分为四组,用最高2位表示
  20. // 1、001~063: 和主板直接或通过CAN连接。
  21. // 2、064~127: 和主板通过串口连接
  22. // 3、128~191: 保留
  23. // 4、192~255: 保留
  24. #define BOARD_TYPE_GROUP_MASK 0XC0
  25. #define BOARD_TYPE_GROUP_MAIN 0X00
  26. #define BOARD_TYPE_GROUP_RS 0X40
  27. #define BOARD_TYPE_GROUP_RSV1 0X80
  28. #define BOARD_TYPE_GROUP_RSV2 0XC0
  29. // 支持的控制板数量
  30. #define BOARD_TYPE_KZ_NUM 26 //增加控制板的类型数量,适应分布式不同办卡类型
  31. #define BOARD_TYPE_NULL 0 // 备用板
  32. #define BOARD_TYPE_POWER 1 // 电源板
  33. #define BOARD_TYPE_MAIN 2 // 主控板
  34. #define BOARD_TYPE_DO 3 // 开入板
  35. #define BOARD_TYPE_DI 4 // 开出板
  36. #define BOARD_TYPE_AUX 5 // 辅助板
  37. #define BOARD_TYPE_AC 6 // 采样板
  38. #define BOARD_TYPE_ZT 7 // 状态板
  39. #define BOARD_TYPE_ZH 8 // 综合板
  40. #define BOARD_TYPE_KZ 9 // 控制板
  41. #define BOARD_TYPE_FUXI_DI 30 // 开入板
  42. #define BOARD_TYPE_FUXI_DO 31 // 开出板
  43. #define BOARD_TYPE_FUXI_AC 32 // 采样板
  44. #define BOARD_TYPE_FUXI_24LED 33 // 液晶面板
  45. #define BOARD_TYPE_RS_STATUS 64 // 状态板
  46. #define BOARD_TYPE_LCD_16LED 65 // 液晶面板
  47. #define BOARD_TYPE_LCD 65 // 液晶面板
  48. #define BOARD_TYPE_METERING 67 // 计量板
  49. #define BOARD_TYPE_LCD_24LED 68 // 液晶面板 24个双色灯
  50. #define BOARD_TYPE_LCD_26LED 70 // 液晶面板 26个双色灯
  51. #define LED_NULL (-1)
  52. #define LED_MAX_NUM (24)
  53. // CT PT标度,1V或1A对应的码值
  54. enum
  55. {
  56. EQU_SCALE_PT_264V_3V53,
  57. EQU_SCALE_PT_DEFAULT, // 默认值,不同装置默认值可能不同
  58. EQU_SCALE_EVT_3V25_100V,
  59. EQU_SCALE_EVT_6V50_100V,
  60. EQU_SCALE_CT_100A_3V53,
  61. EQU_SCALE_CT_DEFAULT, // 默认值,一般额定值为100A,不同装置默认值可能不同
  62. EQU_SCALE_ECT_1V_1A,
  63. EQU_SCALE_ECT_0V2_1A,
  64. EQU_SCALE_CT_10A_51,
  65. EQU_SCALE_PT_102K,
  66. EQU_SCALE_PT_120K,
  67. EQU_SCALE_PT_172K,
  68. EQU_SCALE_PT_204K,
  69. EQU_SCALE_CT_10A_604,
  70. EQU_SCALE_CT_10A_120,
  71. EQU_SCALE_CT_10A_249,
  72. EQU_SCALE_PT_120K_604,
  73. EQU_SCALE_PT_400V_3V53,
  74. EQU_SCALE_CT_20A_3V53,
  75. EQU_SCALE_DC_VOLT,
  76. EQU_SCALE_DC_CURRENT,
  77. EQU_SCALE_NUM
  78. };
  79. /*------------------------------ 类型结构 -------------------------------------
  80. */
  81. // 装置配置文件头
  82. struct equ_config
  83. {
  84. // 配置文件头
  85. struct cfg_file_head cfh;
  86. // 工程文件名
  87. s8 prj_name[64];
  88. // 装置类型
  89. u8 equ_sw_num; // 装置支持的本地开关数量
  90. u8 equ_slot_num; // 装置支持的插槽数量
  91. s8 equ_name[14];
  92. // 板卡信息
  93. u8 brd_type[16];
  94. // 通道配置头
  95. // DI
  96. u32 di_addr; // 地址
  97. u32 di_num; // 个数
  98. // DO
  99. u32 do_addr; // 地址
  100. u32 do_num; // 个数
  101. // AC
  102. u32 ac_addr; // 地址
  103. u32 ac_num; // 个数
  104. // 保留
  105. u32 re_addr; // 地址
  106. u32 re_num; // 个数
  107. // 对应描述文件
  108. u32 rsc_version; // 版本
  109. u32 rsc_signature; // 签名
  110. u32 rsc_length; // 长度
  111. u16 rsc_crc; // CRC
  112. u16 reserved0;
  113. };
  114. struct equ_config_di
  115. {
  116. #if !defined IECTABLE_NEWTOOL_OLE
  117. u8 slot; // 板卡槽位地址
  118. u8 index; // DI硬件地址,从0开始
  119. u8 type; // DI类型
  120. u8 owner; // 归属:开关1~开关12、公共
  121. u32 filter_time; // DI防抖滤波时间
  122. u8 is_Inverse; // 是否取反
  123. s8 name[EQU_CFG_NAME_LEN]; // DI名称
  124. u8 reserved[3];
  125. #else
  126. u8 slot; // 板卡槽位地址
  127. u8 index; // DI硬件地址,从0开始
  128. u16 type; // DI类型 工具开入量配置解析用的是和遥信一样的资源表 20230213
  129. u32 filter_time; // DI防抖滤波时间 类型加了1个字节导致这4个字节对不齐了,和归属调换一下位置 20230213
  130. u8 owner; // 归属:开关1~开关12、公共
  131. u8 is_Inverse; // 是否取反
  132. s8 name[EQU_CFG_NAME_LEN]; // DI名称
  133. u8 reserved[2];
  134. #endif
  135. };
  136. struct equ_config_do
  137. {
  138. u8 slot; // 板卡槽位地址
  139. u8 index; // DO硬件地址
  140. u8 type; // DO类型
  141. u8 owner; // 归属:开关1~开关12、公共
  142. u16 time_pulse; // DO脉宽时间
  143. s8 name[EQU_CFG_NAME_LEN]; // DO名称
  144. u8 reserved[6];
  145. };
  146. struct equ_config_ac
  147. {
  148. u8 slot; // 板卡槽位地址
  149. u8 index; // AI硬件地址
  150. u8 type; // AI类型
  151. u8 owner; // 归属:开关1~开关12、公共
  152. u8 is_ct_inverse; // CT是否反向:防止CT反接
  153. u8 scale; // 采样PT变比:1A 5A 20A100A
  154. s8 name[EQU_CFG_NAME_LEN]; // AI名称
  155. u16 reserved[6];
  156. };
  157. struct board_res_head
  158. {
  159. // 配置文件头
  160. struct cfg_file_head cfh;
  161. // 板卡描述
  162. u32 br_addr; // 地址
  163. u32 br_num; // 个数
  164. // 保留
  165. u32 re_addr; // 地址
  166. u32 re_num; // 个数
  167. };
  168. struct board_res
  169. {
  170. u8 type; // 类型
  171. u8 di_num; // DI数量
  172. u8 do_num; // DO数量
  173. u8 ac_num; // AC数量
  174. s8 name[12]; // 名字
  175. };
  176. struct board_info
  177. {
  178. u8 type;
  179. u8 di_num; // DI数量
  180. u8 do_num; // DO数量
  181. u8 ac_num; // AC数量
  182. u8 status;
  183. u16 errcode;
  184. u16 crc;
  185. u32 version;
  186. struct timespec update_time;
  187. u16 can_bus;
  188. // 子板通讯异常检查
  189. u8 is_check; // 是否检查
  190. u8 is_ok; // 检查结果是否ok
  191. u32 us0; // 检查时间点记录
  192. };
  193. struct sn
  194. {
  195. s8 sw; // 类型 0公共 1开关1
  196. s8 no;
  197. u16 time; // 翻转时间
  198. };
  199. // LED配置结构体
  200. struct led_config
  201. {
  202. u8 num; // 板卡LED个数
  203. struct sn sn[LED_MAX_NUM]; // LED对应逻辑点
  204. };
  205. /*------------------------------ 函数声明 -------------------------------------
  206. */
  207. extern struct equ_config *g_equ_config;
  208. extern struct equ_config_di *g_equ_config_di;
  209. extern struct equ_config_do *g_equ_config_do;
  210. extern struct equ_config_ac *g_equ_config_ac;
  211. extern struct board_info g_board_info[];
  212. extern struct board_res *g_board_res;
  213. extern u8 g_equ_adc_inv[CFG_ADC_CHANNEL];
  214. extern int g_equ_adc_inv_num;
  215. // ADC通道是否配置
  216. extern u8 g_equ_adc_config[CFG_ADC_CHANNEL];
  217. extern u32 g_sw_num;
  218. extern int g_slot_addr; // 插槽地址
  219. extern int g_hw_version; // 硬件版本
  220. extern u16 g_crc_brd_res;
  221. extern u16 g_crc_equ_cfg;
  222. extern u32 g_ac_slot_begin; // 8槽机箱为6,11槽机箱为7
  223. extern struct file_contrast g_equ_contrast;
  224. extern int g_sw_ac_num[SWITCH_NUM_MAX + 1];
  225. extern int g_pub_ac_num;
  226. #define equ_config_null() (!g_equ_config->equ_slot_num)
  227. #define equ_slot_can_bus(slot) (g_board_info[slot].can_bus)
  228. int equ_init(void);
  229. int equ_exit(void);
  230. int equ_ac_index_to_slot(int ac_index);
  231. int equ_get_di_num(u32 slot);
  232. int equ_get_do_num(u32 slot);
  233. int equ_get_ac_num(u32 slot);
  234. int equ_get_ac_channel(u32 slot, u32 index);
  235. int equ_get_ac_scale(u8 slot, u8 no);
  236. u32 equ_get_slot_by_type(u8 type);
  237. u16 equ_di_to_sw(u8 slot, u8 no);
  238. char *equ_di_name(u8 slot, u8 no);
  239. u8 equ_di_type(u8 slot, u8 no); // 根据板卡和序号,返回遥信类型
  240. u8 equ_pub_di_type(u8 slot, u8 no);
  241. #ifdef CPU_FUXI
  242. int equ_init_rv_di(void);
  243. int equ_reinit_rv_di(void);
  244. #endif
  245. #endif //_EQU_H
  246. /*------------------------------ 文件结束 -------------------------------------
  247. */