#ifndef _ZJD_PUBLIC_DATA_H_ #define _ZJD_PUBLIC_DATA_H_ const char VERSION_NO[] = "1.3.0001"; #include "zjdtypes.h" #include "config.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include typedef int optval_t; typedef int SOCKET; #include #include #include #include "zlog/zlog.h" #define MEMERY_1M 65536 //设置位64K #define DELAY_RUN 5000 #define DELAY_TIMER 50 //ms #define TIME_BASE (1000 / DELAY_TIMER) #define TIME_TICKS (DELAY_TIMER * 1000) #define MAX_PATH 260 #if !defined(UNUSED) #define UNUSED(A) (void)(A) #endif #ifndef SOCKET_ERROR #define SOCKET_ERROR ((int)-1) #endif #ifndef INVALID_SOCKET #define INVALID_SOCKET ((int)-1) #endif #define MAX_UNIT_ADDR_SIZE 256 /*最大单元地址长度*/ #define MAX_UNIT_POINT_PARAM_SIZE 64 /*最大测点参数长度*/ #define MAX_UNIT_PARAM_SIZE 256 /*最大单元参数长度*/ #define MAX_PROC_OPTION_SIZE 2048 /*最大协议参数长度*/ #define MAX_NAME_SIZE 64 #define MAX_MODEL_SIZE 64 #define MAX_PSW_SIZE 64 #define MAX_ID_LENGTH 64 #define MAX_PORT_BUFFER_SIZE 2048 #define MAX_NET_BUFFER_SIZE 4096 #define MAX_DISPLAY_BUFFER_SIZE 0x8000 #define HARDWARE_PORTS_NUM 20 #define PROCESSES_NUM 256 #define PROCESS_UNIT_NUM 256 #define UNIT_NUM 256 #define UNIT_YX_MAX 0x1500 #define UNIT_YC_MAX 0x2000 #define UNIT_YM_MAX 0xB00 #define UNIT_YK_MAX 0x100 #define UNIT_YT_MAX 0x100 #define DATABASE_YX_NUM 0x10000 #define DATABASE_YC_NUM 0x20000 #define DATABASE_YM_NUM 0x1000 #define DATABASE_YK_NUM 0x1000 #define DATABASE_YT_NUM 0x1000 #define DATABASE_YXBW_NUM 0xF0000 #define DATABASE_SOE_NUM 0xF0000 #define DATABASE_YCBW_NUM (0xF0000 << 1) #define DATABASE_YK_LOG_NUM 1024 #define DATABASE_YT_LOG_NUM 1024 #define DATABASE_CTRL_LOG_NUM 1024 #define DATABASE_LIMIT_NUM 1024 #define PROCESS_WATCHDOG_TIME 90 #define UNIT_WATCHDOG_TIME 180 #define PROCESS_MODE_MASTER 0 #define PROCESS_MODE_SLAVE 1 #define PROCESS_MODE_DUPLEX 2 #if !defined(PARITY_NONE) #define PARITY_NONE 0 #endif #if !defined(PARITY_ODD) #define PARITY_ODD 1 #endif #if !defined(PARITY_EVEN) #define PARITY_EVEN 2 #endif #if !defined(PARITY_MARK) #define PARITY_MARK 3 #endif #if !defined(PARITY_SPACE) #define PARITY_SPACE 4 #endif #define DPI_ON 0x02 #define DPI_OFF 0x01 #define SPI_ON 0x01 #define SPI_OFF 0x00 #define US_NOUSE 0x00 #define US_OFFLINE 0x10 #define US_ONLINE 0x20 #define US_SLEEP 0x40 #define SLAVER_UNIT 0x00 #define MASTER_UNIT 0x01 #define VALID_VALUE 0 #define INVALID_VALUE 1 #define FILE_SYSTEM_CONFIG "system.zjd" #define FILE_HARDWARE_CONFIG "hardware.zjd" #define FILE_PROCESS_CONFIG "process.zjd" #define FILE_UNIT_CONFIG "units.zjd" #define FILE_NODE_CONFIG "node.zjd" #define FILE_UNIT_YX_CONFIG "%s/uyx%03d.zjd" #define FILE_UNIT_YC_CONFIG "%s/uyc%03d.zjd" #define FILE_UNIT_YM_CONFIG "%s/uym%03d.zjd" #define FILE_UNIT_YK_CONFIG "%s/uyk%03d.zjd" #define FILE_UNIT_YT_CONFIG "%s/uyt%03d.zjd" #define FILE_DATABASE_CONFIG "database.zjd" #define FILE_CALC_YX_CONFIG "calcyx.zjd" #define FILE_CALC_YC_CONFIG "calcyc.zjd" #define FILE_FORMULA_CONFIG "formula.zjd" #define FILE_UNIT_STATIC "units.sta" #define FILE_UNIT_YX_STATIC "%s/uyx%03d.sta" #define FILE_UNIT_YC_STATIC "%s/uyc%03d.sta" #define FILE_UNIT_YM_STATIC "%s/uym%03d.sta" #define FILE_UNIT_YK_STATIC "%s/uyk%03d.sta" #define FILE_UNIT_YT_STATIC "%s/uyt%03d.sta" #define FILE_DATABASE_YX_STATIC "dbyx.sta" #define FILE_DATABASE_YC_STATIC "dbyc.sta" #define FILE_DATABASE_YM_STATIC "dbym.sta" #define FILE_DATABASE_YK_STATIC "dbyk.sta" #define FILE_DATABASE_YT_STATIC "dbyt.sta" #define FILE_YXBW_LOG "yxbw%02d_%02d.log" #define FILE_SOE_LOG "soe%02d_%02d.log" #define FILE_YCBW_LOG "ycbw%02d_%02d.log" #define FILE_YK_LOG "yk%02d_%02d.log" #define FILE_YT_LOG "yk%02d_%02d.log" #define FILE_RUN_LOG "run%02d.log" #define FILE_SYS_RUNLOG "SysRun.Log" #define FILE_PASSWORD_DATA "zjd3100.pwd" //通讯协议定义 #define PROTOCOL_NONE 0 //未使用 #define PROTOCOL_HOST_UNBALANCED_IEC101 1 //不平衡方式IEC101主 #define PROTOCOL_HOST_BALANCED_IEC101 2 //平衡方式IEC101主 #define PROTOCOL_SUB_UNBALANCED_IEC101 3 //不平衡方式IEC101从 #define PROTOCOL_SUB_BALANCED_IEC101 4 //平衡方式IEC101从 #define PROTOCOL_HOST_IEC104 8 //IEC104主 #define PROTOCOL_SUB_IEC104 9 //IEC104从 #define PROTOCOL_HOST_CDT 10 //CDT主 #define PROTOCOL_SUB_CDT 11 //CDT从 #define PROTOCOL_HOST_MODBUS_RTU 12 //MODBUS RTU主 #define PROTOCOL_SUB_MODBUS_RTU 13 //MODBUS RTU从 #define PROTOCOL_HOST_MODBUS_ASCII 14 //MODBUS ASCII主 #define PROTOCOL_HOST_MODBUS_TCP 16 //MODBUS tcp主 #define PROTOCOL_SUB_MODBUS_TCP 17 //MODBUS RTU over tcp从 #define PROTOCOL_HOST_MODBUS_RTU_TCP 18 //MODBUS RTU over tcp主 #define PROTOCOL_RTU_STATE 21 //主控状态 #define PROTOCOL_LOCAL_DEBUG 22 //本地调试 #define PROTOCOL_BF_FTP 25 //倍福FTP数据协议 #define PROTOCOL_HOST_DLT645V2007 32 //dlt645v2007协议 #define PROTOCOL_CALC 37 //计算 #define PROTOCOL_SUB_GDW104 47 //国网104从 #define PROTOCOL_HW_MQTT 72 //华为物联平台ROMA #define PROTOCOL_OPCUA 78 //opcua协议 #define PROTOCOL_FTP2MINIO 79 //FTP转minio协议 #define PROTOCOL_HOST_BF_MODBUSTCP 80 //倍福MODBUSTCP主 #define PROTOCOL_HOST_BF_ADS 81 //倍福ADS协议 #define ADDR_TYPE_NORMAL 0 #define ADDR_TYPE_HEX 1 #define ADDR_TYPE_IPV4 2 #define ADDR_TYPE_IPV4_FACNO 3 #define YKS_IDLE 0 #define YKS_SELREQ 1 #define YKS_SELING 2 #define YKS_SELED 3 #define YKS_ABRREQ 4 #define YKS_EXEREQ 5 #define YKS_EXEING 6 #define YKS_EXEED 7 #define YKS_ABRED 8 #define YKR_IDLE 0 #define YKR_SUCC 1 #define YKR_FAIL 2 #define YKR_OVER 3 #define YKR_OPER 4 #define YXBWT_AUTO 0 #define YXBWT_DEV 1 #define YCBWT_AUTO 0 #define YKT_NULL 0 #define YKT_SELREQ 1 #define YKT_SELOUT 2 #define YKT_SELRET 3 #define YKT_ABRREQ 4 #define YKT_EXEREQ 5 #define YKT_EXEOUT 6 #define YKT_EXERET 7 #define YKS_AUTO 0 #define YKS_MANU 1 #define YKS_PROC 2 //////////////////////////////// #define YTS_IDLE 0 #define YTS_SELREQ 1 #define YTS_SELING 2 #define YTS_SELED 3 #define YTS_ABRREQ 4 #define YTS_EXEREQ 5 #define YTS_EXEING 6 #define YTS_EXEED 7 #define YTS_ABRED 8 #define YTR_IDLE 0 #define YTR_SUCC 1 #define YTR_FAIL 2 #define YTR_OVER 3 #define YTR_OPER 4 #define YTT_NULL 0 #define YTT_SELREQ 1 #define YTT_SELOUT 2 #define YTT_SELRET 3 #define YTT_ABRREQ 4 #define YTT_EXEREQ 5 #define YTT_EXEOUT 6 #define YTS_AUTO 0 #define YTS_MANU 1 #define YTS_PROC 2 //////////////////////////////// //数据库存储 #define DATA_TYPE_YX 0x0001 #define DATA_TYPE_YC 0x0002 #define DATA_TYPE_YM 0x0004 #define FREZ_TYPE_HOUR 0x1000 #define FREZ_TYPE_DAY 0x2000 #define FREZ_TYPE_MON 0x4000 #if !defined(wMax) #define wMax(a,b) (((a) > (b)) ? (a) : (b)) #endif #if !defined(wMin) #define wMin(a,b) (((a) < (b)) ? (a) : (b)) #endif #if !defined(MAKEWORD) #define MAKEWORD(low,high) ((WORD)(((BYTE)(low)) | ((WORD)((BYTE)(high))) << 8)) #endif #if !defined(MAKEDWORD) #define MAKEDWORD(low,high) ((DWORD)(((WORD)(low)) | ((DWORD)((WORD)(high))) << 16)) #endif #if !defined(LOWORD) #define LOWORD(l) ((WORD)(l)) #endif #if !defined(HIWORD) #define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xffff)) #endif #if !defined(LOBYTE) #define LOBYTE(w) ((BYTE)(w)) #endif #if !defined(HIBYTE) #define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xff)) #endif #define MAX_SYMBOL_SUM 100 #define MAX_SYMBOL_LEN 10 #define MAX_KEYWORD_SUM 20 #define MAX_STACK_LEN 400 #define MAX_PAIRCLASS_SUM 5 #define COMPUTE_SYMBOL 1 #define ASSIGN_SYMBOL 2 #define RELATION_SYMBOL 3 #define LOGICAL_SYMBOL 4 #define DIVIDE_SYMBOL 5 #define CONST_SYMBOL 6 #define VAR_SYMBOL 7 #define CONDITION_SYMBOL 8 #define SPECIAL_SYMBOL 9 #define DATAS 0 #define TWOCOMPS 1 #define ONECOMPS 2 #define LEFTBRACKET 3 #define RIGHTBRACKET 4 #define SE_TWOCOMPS 0 #define SE_ONECOMPS 1 #define SE_SPECIALCONST 2 #define SE_VARS 3 #define SE_TEMPVARS 4 #define SE_CONSTS 5 #define SE_ASSIGN 6 #define MAX_EXP_COUNT 20 #define MAX_VAR_SUM 24 #define MAX_CONST_SUM 14 #define MAX_TEMP_SUM 50 #define MAX_IF_LEN 50 #define MAX_THEN_LEN 50 #define MAX_ELSE_LEN 50 #define MAX_DATATYPE_SUM (MAX_VAR_SUM + MAX_CONST_SUM + MAX_TEMP_SUM) #define MAX_VAR_LEN (MAX_VAR_SUM * 8) #define MAX_CONST_LEN (MAX_CONST_SUM * 8) #define MAX_TOKEN_LEN 20 #define MAX_COMPUTE_DATA_SUM 10 #define MAX_DATA_STACK_LEN 100 #define DT_CHAR 1 // c #define DT_SHORTINT 2 // s #define DT_INT 3 // i #define DT_FLOAT 4 // f #define ADD 1 // + #define SUB 2 // - #define MUL 3 // * #define DIV 4 // / #define MOD 5 // % #define ABS 6 // ABS #define SIN 7 // SIN #define COS 8 // COS #define LSC 9 // < #define LEC 10 // <= #define EQC 11 // == #define GEC 12 // >= #define GTC 13 // > #define AND 14 // && #define OR 15 // || #define LBRACKET 16 // ( #define RBRACKET 17 // ) #define CP_TRUE 18 // T #define CP_FAUSE 19 // F #define TIMEC 20 // TIME #define LMBRACKET 21 // [ #define RMBRACKET 22 // ] #define SQRT 23 // SQRT #define LLBRACKET 30 // { #define RLBRACKET 31 // } #define SEMICOLON 32 // ; #define ASSIGN 33 // = #define IF 34 // IF #define THEN 35 // THEN #define ELSE 36 // ELSE #define EOS 40 // # #define CP_MAX 41 // MAX #define CP_MIN 42 // MIN #define PERIOD 43 // , #define VAR_MIN 51 //* [ dataid] #define VAR_MAX 150 #define TEMP_VAR_MIN 151 // t00 ~ t49 #define TEMP_VAR_MAX 200 #define CONST_MIN 201 #define CONST_MAX 250 #define MAX_SOURCE_FORMULA_LEN 1024 #define MAX_TARGET_FORMULA_LEN 1024 #define FORMULA_STRING_LENGTH 200 #define WORKER_ID_BITS 5 #define DATA_CENTER_ID_BITS 5 #define SEQUENCE_BITS 12 #define MAX_WORKER_ID ((1 << WORKER_ID_BITS) - 1) #define MAX_DATA_CENTER_ID ((1 << DATA_CENTER_ID_BITS) - 1) #define SEQUENCE_MASK ((1 << SEQUENCE_BITS) - 1) #define EPOCH 1640995200000 // 2022-01-01 00:00:00 typedef struct { uint64_t worker_id; uint64_t data_center_id; uint64_t sequence; uint64_t last_timestamp; } Snowflake; #pragma pack(1) //for formulas typedef struct DATAID { short iotype; short uid; short point; } DATAID, *PDATAID; struct FORMULA_STRUCT { short m_form_no; BYTE m_slice; DATAID m_result_no; char m_form_str[FORMULA_STRING_LENGTH]; BYTE m_var_list[200]; BYTE m_var_num; BYTE m_obj_str[100]; BYTE m_obj_clist[120]; BYTE m_obj_cnum; BYTE m_obj_vlist[200]; BYTE m_obj_vnum; BYTE m_if_len; BYTE m_if_part[50]; BYTE m_then_len; BYTE m_then_part[50]; BYTE m_else_len; BYTE m_else_part[50]; LONG m_curslice; }; struct TARGET_FORMULA_CTRL_STRU { LONG var_num; LONG const_num; LONG if_len; LONG then_len; LONG else_len; }; struct DATA_DESCRIBLE_STRU { LONG data_type; char data_value[4]; }; #define HOST_NAME_LENGTH 32 #define MAX_NODE_NUM 4 typedef struct { char m_machine_name[HOST_NAME_LENGTH]; BYTE m_netnode_no; BYTE m_tcitype; DWORD m_target_addr; short m_target_port; QLONG irn; } NODE_STRUCT; typedef struct { struct { BOOLEAN enable; char name[MAX_NAME_SIZE]; } interfaces; NODE_STRUCT m_node[MAX_NODE_NUM]; } struNodeOption; typedef struct { char name[MAX_NAME_SIZE]; char pass[MAX_PSW_SIZE]; } struUserInfor; typedef struct { unionCP56Time now; BOOLEAN logined; BOOLEAN watchdog_type; BOOLEAN log_enabled; BOOLEAN single; BOOLEAN bOldConfig; //是否为原配置文件 char yk_pass[MAX_PSW_SIZE]; short yk_keep; short interval_time; WORD zjd_log_bind_port; DWORD zjd_log_bind_addr; DWORD ticks; DWORD timers; DWORD auto_reset_interval; char projectName[64]; //项目名称 char version[64]; //配置文件版本信息 } struSystem; typedef struct { char name[MAX_NAME_SIZE]; BOOLEAN state; LONG baud; BYTE data; BYTE parity; BYTE stop; short timeout; } struPort; typedef struct { BYTE in_buf[MAX_PORT_BUFFER_SIZE]; BYTE out_buf[MAX_PORT_BUFFER_SIZE]; short in_load; short in_save; short out_load; short out_save; } struPortBuffer; typedef struct { struPort ports[HARDWARE_PORTS_NUM]; } struHardware; #define SELFRESETTING 0 #define LATCHED 1 #define PULSED 2 typedef struct { BOOLEAN yx1Enable; //function 1 BOOLEAN yx2Enable; //function 3 BOOLEAN yc1Enable; //function 3 BOOLEAN yc2Enable; //function 3 BOOLEAN yc3Enable; BOOLEAN yc4Enable; BOOLEAN ym1Enable; BOOLEAN ym2Enable; BYTE yx1FuncCode; BYTE yx2FuncCode; BYTE yc1FuncCode; BYTE yc2FuncCode; BYTE yc3FuncCode; BYTE yc4FuncCode; BYTE ym1FuncCode; BYTE ym2FuncCode; WORD yx1Begin; short yx1Count; WORD yx2Begin; short yx2Count; WORD yc1Begin; short yc1Count; WORD yc2Begin; short yc2Count; WORD yc3Begin; short yc3Count; WORD yc4Begin; short yc4Count; WORD ym1Begin; short ym1Count; WORD ym2Begin; short ym2Count; } struModbusOption; typedef struct { WORD idcode[MAX_PROC_OPTION_SIZE/2]; } struDLT645Option; //add by assouan for network options typedef struct { BOOLEAN ignored_source; BYTE socket_type; WORD bind_port; WORD target_port; DWORD bind_addr; DWORD target_addr; } struNetWorkOption; //end // add by assouan for ry modbus options, it has ftp paramters; typedef struct { char user[64]; char password[64]; char remotePath[128]; char localPath[128]; } struFTPOption; typedef struct { char url[256]; char user[64]; char password[64]; char bucket[64]; char object[256]; } struMINIOOption; typedef struct { struNetWorkOption net; BOOLEAN bHaveFTP; struFTPOption ftp; } struRYADSOption; typedef struct { struNetWorkOption net; BOOLEAN bHaveFTP; struFTPOption ftp; } struRYModbusOption; typedef struct { struNetWorkOption net; struFTPOption ftp; struMINIOOption minio; } struRYFTP2MINIOOption; typedef struct { BOOLEAN use_owner_config; //单元配置是否启用 struModbusOption modbus; } struUnitModbusOption; typedef struct { struNetWorkOption net; BYTE defaultYCType; } struSubModbusTCPOption; typedef struct { struNetWorkOption net; BYTE yx_type; BYTE yc_type; BYTE yk_type; BOOLEAN need_resend; //是否重发 BOOLEAN need_cyc_send; //循环上送全遥测及全遥信 char cot_size; // char asdu_addr_size; //Length of Address fixed to 16 bit //Structured address with underscore as delimiter //Example: 3_5_8 defines 16-bit address with 3 structure elements: //3 bit most significant //5 bit medium signigicant //8 bit least significant char info_addr_size; //Length of Information Object Address fixed to 24 bit! //Structured address with underscore as delimiter //Example: 3_5_6_3_7 defines 24-bit address with 5 structure elements. BOOLEAN use_ack_commands_on_reception; //Specification whether Activation confirmation shall be send immediatelay after receiption of a command //Necessary if the primary station uses a fix timeout period with low tolerance //Has no affect on the source of Activation Termination BYTE t1; //t1: Time-out of send APDUs or test APDUs //1 to 255 seconds; default value: 15 seconds BYTE t2; //t2: Time-out for acknowledges in case of no data messages //1 to 255 seconds; default value: 10 seconds //t2 < t1 BYTE t0; //T0: Time-out for connecting the server. WORD t3; //T3: Time-out for sending test frames in case of a long idle state //1 to 65535 seconds; default value: 20 seconds short k; //k: maximun differance receive sequence number to send sequence count variable //1 to 32767 APDUs; default value: 12 APDUs short w; //Latest acknowledge after receiving w I format APDUs //1 to 32767 APDUs; default value: 8 APDUs //(w should not exceed tow-thirds of k) WORD background_scan_cycle; //If enabled: //Background scan according to IEC60870-5-101/104 //will be send with the configured cycle time. WORD yx_start_address; //遥信起始地址,仅用于从协议 WORD yc_start_address; //遥测起始地址,仅用于从协议 WORD ym_start_address; //遥脉起始地址,仅用于从协议 BOOLEAN use_cycle_interrogation_command;//使用循环总召唤,仅用于主协议 WORD t4; //总召唤间隔,仅用于主协议 WORD t5; //召唤电度量间隔,仅用于主协议 DWORD irn; //用于加密上传协议时的编码 BOOLEAN send_start_dt; //发送启动帧 BOOLEAN use_send_test; //使用发送测试帧 BYTE send_test_type; //发送测试帧类型 BOOLEAN use_send_end_of_initialisation; //发送初始化结束帧 BOOLEAN use_ns_nr_check; //nsnr检查 BYTE bres1; BYTE bres2; WORD wres1; } struIEC104Option; typedef struct { char client_id[MAX_ID_LENGTH]; char device_id[MAX_ID_LENGTH]; char host[128]; char username[128]; char password[128]; char topic_version[128]; WORD target_port; LONG connectTimeout; LONG keepAliveInterval; LONG connectInterval; LONG publishInterval; } struISSMQTTOption; typedef union { BYTE data[MAX_PROC_OPTION_SIZE]; struModbusOption modbus; struNetWorkOption network; struIEC104Option iec104; struSubModbusTCPOption smodbus; struRYModbusOption rymodbus; struRYFTP2MINIOOption ftp2minio; struRYADSOption ryads; } unionProcOption; typedef struct { char name[(MAX_NAME_SIZE << 2)]; BYTE type; BYTE state; BOOLEAN time_accept; //accept set time command from this proc BYTE proto; BYTE order; //CARD or PORT order BYTE mode; //slave mode or master mode or duplex mode short time_gap; //send out time from this proc 18.2c/s short poll_gap; //send out command 18.2c/s short softdog; //software watchdog counter short units[PROCESS_UNIT_NUM]; unionProcOption option; QLONG irn; } struProcess; typedef struct { char name[(MAX_NAME_SIZE << 2)]; short order; BYTE value; BYTE qds; //品质描述 BOOLEAN yxbw; BYTE m_param[MAX_UNIT_POINT_PARAM_SIZE]; DWORD update_time; QLONG irn; //是否取反,default: 0 BOOLEAN invert; //强制归档,default: 0 BOOLEAN forceArchive; } struUnitYX; typedef struct { char name[(MAX_NAME_SIZE << 2)]; short order; short factor; //比例系数 LONG value; //遥测值 float coef; float base; BYTE qds; //品质描述 BOOLEAN ycbw; //遥测变位标识 short change_pos; BYTE m_param[MAX_UNIT_POINT_PARAM_SIZE]; DWORD update_time; QLONG irn; //是否高频属性, 0 - 不是, 1 - 是 BOOLEAN highSpeed; //上界 float upBound; //下界 float lowBound; //限值1, default: 0 BOOLEAN limit1Enable; //限值1下限 float limit1Low; //限值1上限 float limit1High; //限值2, default: 0 BOOLEAN limit2Enable; //限值2上限 float limit2High; //限值2下限 float limit2Low; //强制归档,default: 0 BOOLEAN forceArchive; } struUnitYC; typedef struct { short order; LONG value; union { float flVal; DWORD code; }; BYTE qds; } struYCBW; typedef struct { char name[(MAX_NAME_SIZE << 2)]; short order; DWORD value; float coef; float base; BYTE m_param[MAX_UNIT_POINT_PARAM_SIZE]; DWORD update_time; QLONG irn; } struUnitYM; typedef struct { char name[(MAX_NAME_SIZE << 2)]; short order; BOOLEAN selected; BYTE m_param[MAX_UNIT_POINT_PARAM_SIZE]; QLONG irn; } struUnitYK; typedef struct { char name[(MAX_NAME_SIZE << 2)]; } struUnitYKStatic; typedef struct { char name[(MAX_NAME_SIZE << 2)]; short order; BOOLEAN selected; BYTE m_param[MAX_UNIT_POINT_PARAM_SIZE]; QLONG irn; } struUnitYT; typedef struct { BYTE state; BYTE type; BYTE addr[MAX_UNIT_ADDR_SIZE]; BYTE m_param[MAX_UNIT_PARAM_SIZE]; //每个单元有256个字节的参数。 short yxcount; short yccount; short ymcount; short ykcount; short ytcount; short softdog; LONG yxbwload; LONG soeload; LONG ycbwload; LONG value; //单元状态 struUnitYX* yxs; #if USE_32BITS LONG res1; #endif struUnitYC* ycs; #if USE_32BITS LONG res2; #endif struUnitYM* yms; #if USE_32BITS LONG res3; #endif struUnitYK* yks; #if USE_32BITS LONG res4; #endif struUnitYT* yts; #if USE_32BITS LONG res5; #endif QLONG irn; } struUnit; typedef struct { char name[(MAX_NAME_SIZE<<2)]; char model[MAX_MODEL_SIZE]; char nodeId[MAX_ID_LENGTH]; char deviceId[MAX_ID_LENGTH]; char manufacturerId[MAX_ID_LENGTH]; } struUnitStatic; typedef struct { struHardware hardware; struProcess processes[PROCESSES_NUM]; struUnit units[UNIT_NUM]; } struConfig; typedef struct { BYTE value; //状态支持SPI及DPI BYTE qds; //品质描述 BYTE inv; //<0>=不取反,<1>=取反 short auto_reset; //自动复归 short op_unit; DWORD bw_time; //变位时刻 DWORD update_time;//变位时刻 } struYX; typedef struct { char name[(MAX_NAME_SIZE << 2)]; } struYXStatic; typedef struct { BYTE qds; //品质描述 short op_unit; LONG value; //遥测值 float coef; float base; DWORD update_time; //变位时刻 } struYC; typedef struct { char name[(MAX_NAME_SIZE << 2)]; } struYCStatic; typedef struct { float coef; float base; DWORD value; //遥脉值 DWORD update_time; //变位时刻 short op_unit; short res; } struYM; typedef struct { char name[(MAX_NAME_SIZE << 2)]; } struYMStatic; typedef struct { BOOLEAN value; short state; short result; DWORD op_time; short op_unit; } struYK; typedef struct { char name[(MAX_NAME_SIZE << 2)]; } struYKStatic; typedef struct { LONG value; short state; short result; DWORD op_time; short op_unit; } struYT; typedef struct { char name[(MAX_NAME_SIZE << 2)]; } struYTStatic; typedef struct { unionCP56Time st; BYTE value; BYTE qds; BYTE type; short order; short uid; short point; } struYXBW; typedef struct { unionCP56Time st; BYTE value; BYTE qds; short order; short uid; short point; } struSOE; typedef struct { unionCP56Time st; LONG value; BYTE qds; //品质描述 BYTE type; short order; short uid; short point; } struYCBWBuffer; typedef struct { struYX *yxs; struYC *ycs; struYM *yms; struYK *yks; struYT *yts; } struDatabase; typedef struct { WORD year; BYTE month; BYTE day; BYTE hour; BYTE minute; BYTE second; BYTE type; BYTE data[32]; } struRunLog; typedef struct { unionCP56Time st; BYTE value; BYTE type; //SELREQ\SELOUT\SELRET\ABRREQ\EXEREQ\EXEOUT BYTE source; //NONE\LOCAL\PROC short point; //DATABASE PT short uid; //unit id } struYKLog; typedef struct { unionCP56Time st; DWORD value; BYTE type; //SELREQ\SELOUT\SELRET\ABRREQ\EXEREQ\EXEOUT BYTE source; //NONE\LOCAL\PROC short point; //DATABASE PT short uid; //unit id } struYTLog; typedef struct { BOOLEAN enabled; char res; short mon_port; short mon_unit; DWORD load; DWORD save; DWORD rx_count; DWORD tx_count; DWORD rf_count; DWORD tf_count; char *buf; } struDispBuffer; typedef struct { BOOLEAN enabled; char res; DWORD load; DWORD save; char *buf; } struMsgBuffer; typedef struct { LONG count; struYCBW data[UNIT_YC_MAX]; } YCBWBuffer; typedef struct { LONG order; BYTE qds; BOOLEAN value; } struYXData; typedef struct { LONG order; BYTE qds; BOOLEAN value; unionCP56Time ct; } struEventsData; typedef struct { LONG count; struYXData data[DATABASE_YXBW_NUM]; } YXBWBuffer; typedef struct { LONG count; struEventsData data[DATABASE_SOE_NUM]; } EventBuffer; #pragma pack() typedef struct { DWORD value; const char* strptr; } value_string; static const value_string yk_state[] = { { YKS_IDLE, "YKS_IDLE" }, { YKS_SELREQ, "YKS_SELREQ" }, { YKS_SELING, "YKS_SELING" }, { YKS_SELED, "YKS_SELED" }, { YKS_ABRREQ, "YKS_ABRREQ" }, { YKS_EXEREQ, "YKS_EXEREQ" }, { YKS_EXEING, "YKS_EXEING" }, { YKS_EXEED, "YKS_EXEED" }, { YKS_ABRED, "YKS_ABRED" } }; static const value_string yk_result[] = { { YKR_IDLE, "YKR_IDLE" }, { YKR_SUCC, "YKR_SUCC" }, { YKR_FAIL, "YKR_FAIL" }, { YKR_OVER, "YKR_OVER" }, { YKR_OPER, "YKR_OPER" } }; static const value_string yt_state[] = { { YTS_IDLE, "YTS_IDLE" }, { YTS_SELREQ, "YTS_SELREQ" }, { YTS_SELING, "YTS_SELING" }, { YTS_SELED, "YTS_SELED" }, { YTS_ABRREQ, "YTS_ABRREQ" }, { YTS_EXEREQ, "YTS_EXEREQ" }, { YTS_EXEING, "YTS_EXEING" }, { YTS_EXEED, "YTS_EXEED" }, { YTS_ABRED, "YTS_ABRED" } }; static const value_string yt_result[] = { { YTR_IDLE, "YTR_IDLE" }, { YTR_SUCC, "YTR_SUCC" }, { YTR_FAIL, "YTR_FAIL" }, { YTR_OVER, "YTR_OVER" }, { YTR_OPER, "YTR_OPER" } }; class CYCBW; class CYXBW; class CSOE; class CYKLog; class CYTLog; class CProcess; extern BOOLEAN systemRunFlag; extern BOOLEAN synchronized; extern BOOLEAN zlog_inited; extern struSystem system32; extern struConfig config; extern struDatabase database; extern CYCBW ycbw; extern CYXBW yxbw; extern CSOE soe; extern CYKLog yklog; extern CYTLog ytlog; extern CProcess* procs[PROCESSES_NUM]; extern struUnitStatic static_units[UNIT_NUM]; extern struDispBuffer channelBuffer; extern struMsgBuffer msgBuffer; extern struNodeOption nodes; extern char configpath[MAX_PATH]; //配置文件所在目录 extern char configfile[MAX_PATH]; //配置文件 #ifndef USE_NOPOLL_WEBSOCKET class CRYDevice; extern CRYDevice* g_conn; #else extern noPollConn *g_conn; #endif typedef struct { //网络配置信息 struNetWorkOption network; //mqtt接入信息 char client_id[128]; char username[128]; char password[128]; char device_id[128]; char devType[32]; char devName[32]; char mfgInfo[32]; char version[32]; char hardVersion[32]; LONG connectTimeout; LONG keepAliveInterval; LONG connectInterval; LONG dataSendInterval; LONG statusUpdateInterval; } struMQTTOption; #define QOS_LEVEL_0 0 #define QOS_LEVEL_1 1 #define QOS_LEVEL_2 2 #define MQTT_DEFAULT_PORT 1883 #pragma pack() //#include "ryFileDef.h" ////////////////////////////////////////////////////////////////////////// const char* val_to_str(DWORD val, const value_string* vs, const char* fmt); void StringToHex(const char* pStr, BYTE* pData); void HexToString(const BYTE* pData, char* pStr, int count); BOOLEAN get_system_time(unionCP56Time* lpSystemTime); BOOLEAN set_system_time(unionCP56Time* lpSystemTime); DWORD bcd_to_int(const BYTE *bcd, int length); void int_to_bcd(int dec, BYTE *bcd, int length); DWORD BufToVal(BYTE* buf, int lenth, BOOLEAN bBigEndian = FALSE); int ValToBuf(BYTE* buf, DWORD val, int lenth, BOOLEAN bBigEndian = FALSE); int unionCP56TimeToBuf(BYTE* buf, unionCP56Time st); int GetFileSize(const char* fname); time_t unionCP56TimetoTime_t(unionCP56Time* st); unionCP56Time Time_ttounionCP56Time(time_t st); QLONG filetime_to_unix(QLONG ft); QWORD getTimeInMs(); char* escape_char_in_string(const char *str, char escape_char); std::vector split(const std::string &s, char delimiter); //int calcFields(FIELDDES *fields); ////////////////////////////////////////////////////////////////////////// typedef enum { LOG_NULL = 0, LOG_ERROR = 1, LOG_WARN = 2, LOG_INFO = 3, LOG_DEBUG = 4 } eLogLevel; #ifdef __cplusplus extern "C" { #endif void yk(void); void yt(void); void dumpLogs(void); QWORD snowflake_next_id(void); BOOLEAN initialize_system(BOOLEAN, BOOLEAN, const char*, char*); BOOLEAN initialize_thread(void); BOOLEAN destroy_thread(void); BOOLEAN WriteDatabaseCFG(void); BOOLEAN WriteSystemCFG(void); BOOLEAN WriteStaticUnitCFG(void); BOOLEAN ReadStaticUnitCFG(void); void vLog(eLogLevel eLevel, const char* szFmt, ...); DWORD ReadMsgRingBuff(char *rbuff, DWORD len); #ifdef __cplusplus } #endif #endif //_ZJD_PUBLIC_DATA_H_