#ifndef INTERACT_123_INCLUDED #define INTERACT_123_INCLUDED #include "glbtypes.h" #include "general_defines.h" #include "general_socket.h" #include "basetype.h" #include "comtrade_read.h" #ifdef __cplusplus extern "C" { #endif /************************************************************************/ //公共宏定义 /* 配置数据库名称 */ #define SQLDB_PATH_NAME "cfg/commdb.sql3" #define LOGS_PATH "../LOGS/" #define SOELOG_PATH_NAME "../LOGS/soelog.sql3" #define CHECKLOG_PATH_NAME "../LOGS/checklog.sql3" #define OPERLOG_PATH_NAME "../LOGS/operlog.sql3" //cbt add 2020.2.19 遥信变位写入单独的数据库,不再采用写入soe数据库的方法 #define YX_BURST_LOG_PATH_NAME "../LOGS/yxlog.sql3" //cbt modified 2020.4.3 yx_burst_log.sql3 改为yxlog.sql3 //cbt add 2021.3.22 硬件4.0添加装置事件,格式同变位事件 #define DEVICE_LOG_PATH_NAME "../LOGS/devicelog.sql3" //cbt add 2021.3.29 保护配置库 #define PORTCFG_PATH_NAME "../protect/cfg/protdb.sql3" //cbt modified 2021.3.29 保护上送的装置信息中的遥信数量改为2字节,修改遥信最大个数为768 //最大遥信个数 #define TELE_SIGNAL_NUM_MAX 768 //最大遥测个数 #define TELE_METRY_NUM_MAX 96 //最大电度个数 #define TELE_DEGREE_NUM_MAX 32 //最大谐波电量的个数 #define HARMON_METRY_NUM_MAX 648 //保存变换遥信量的最大缓冲 #define BURST_SIGNAL_NUM_MAX 24 //通用分类数据缓冲,直接向工具或液晶转发 #define GENERAL_DATA_BUFF_LEN 264 //SOELOG数据库中最大存储个数,超过本个数时要删除,直到剩余MIN个,2014-04-24 from 256 to 1536 to 2048 #define SOELOG_MAX_ITEMS 2048 #define SOELOG_MIN_ITEMS 2000 //CHECKLOG数据库中最大存储个数,超过本个数时要删除,直到剩余MIN个 #define CHECKLOG_MAX_ITEMS 2048 #define CHECKLOG_MIN_ITEMS 2000 //YX_BURST_LOG数据库中最大存储个数,超过本个数时要删除,直到剩余MIN个 #define YX_BURST_LOG_MAX_ITEMS 4096 #define YX_BURST_LOG_MIN_ITEMS 4000 //cbt modified 2019.5.22 事件自检报告的参数个数,从3个改为10个。这样每帧包含的最大事件个数就不是7了,应该为3。(一帧报文不超过255) //上送事件报告,每侦包含的最大事件个数(自检报告也用这个定义) //#define ASDU_SOE_MAX_NUM 7 #define ASDU_SOE_MAX_NUM 3 //cbt add 2020.2.19 上送遥信变位,每帧最多封装20个遥信 #define ASDU_YXBW_MAX_NUM 20 #define CANIO_MAX_NUM (CLZType_IO_NUM)//4 //cbt modified 2021.3.23 硬件4.0,IO板数量由4块->5块,统一采用basetype.h中的宏定义 #define CANIO_MAX_TYPE 8//7 //cbt modified 2021.3.23 硬件4.0 全开出定义为第7种类型的板子(原来只有6种),这里类型数加1 //cbt modified 2020.12.09 召故障报告、故障录波列表,以前一帧送8个,改为送18个 #define FIEL_LIST_MAX_NUM_TA21_104 8 //901转客专104协议时,每个文件名需要增加3字节信息对象地址,18个文件名无法在一帧中上送,改回8个 #define FIEL_LIST_MAX_NUM_TOOL_103 8 #define FIEL_LIST_MAX_NUM_YJ_103 8 //ghc 20231115 #define DEVICE_YX_INF_NUM 312 /* 数据类型定义 */ typedef struct { ST_INT index; //变位遥信的时候,才使用到,序号 ST_UCHAR value; //双点保存 ST_UCHAR quality; ST_UCHAR valueChg; //总召唤变化 ST_UCHAR qualityChg; //总召唤变化 ST_UCHAR cp56[8]; } TELE_SIGNAL; typedef struct { UNION_FLOAT value; ST_UCHAR quality; ST_UCHAR cp56[8]; UNION_FLOAT lastValue; ST_UCHAR lastQuality; ST_UCHAR lastCp56[8]; float menxian; ST_INT timeSpace; //ms超过本间隔,也要发送一次数据 //cbt add 2020.10.20 遥测添加系数和基数,从保护收到的遥测值*系数+基数,再送往103、104 float moduli;//遥测系数 float base;//遥测基数 } TELE_METRY; typedef struct { UNION_FLOAT value; ST_UCHAR quality; } TELE_DEGREE; typedef enum { DEVICE_COMM_STATUS_OFF=0, DEVICE_COMM_STATUS_ON } DEVICE_COMM_STATUS; typedef enum { LINK_TYPE_TOOL_103=0, LINK_TYPE_YJ_103, LINK_TYPE_TA21_104, LINK_TYPE_PROT_103, LINK_TYPE_LCD_DIRT, LINK_TYPE_PROG_SELF=0xFF, } LINK_TYPE; typedef enum { DEVICE_CMD_TYPE_DZ_CALL_SEC=0, //DEVICE_CMD_TYPE_DZ_CALL_DATA_now, DEVICE_CMD_TYPE_DZ_CALL_DATA, DEVICE_CMD_TYPE_DZ_SET_SEC, DEVICE_CMD_TYPE_DZ_SET_DATA_now, DEVICE_CMD_TYPE_DZ_SET_DATA, } DEVICE_CMD_TYPE_DZ_DOWN; typedef enum { DEVICE_CMD_TYPE_DZ_CALL_SEC_return=0, DEVICE_CMD_TYPE_DZ_CALL_DATA_return, DEVICE_CMD_TYPE_DZ_SET_SEC_return, DEVICE_CMD_TYPE_DZ_SET_DATA_return, } DEVICE_CMD_TYPE_DZ_RETURN; typedef struct { ST_INT inUse; ST_DOUBLE lockTime; //由每个下发者决定闭锁时间,这样不用初始化 ST_INT isDelt; //是否处理过了本命令 } CMD_LOCK_PROPER; typedef struct { CMD_LOCK_PROPER cmdLock; //下发保存 struct { LINK_TYPE linkType; ST_INT linkIndex; ST_UCHAR ykIndex; ST_UCHAR dco; ST_INT bufferLen; ST_UCHAR bufferData[GENERAL_DATA_BUFF_LEN]; } cmdDown; //回答保存 struct { ST_RET result; //返回结果 } cmdReturn; } BUFFER_CMD_YK; typedef struct { CMD_LOCK_PROPER cmdLock; //下发保存 struct { LINK_TYPE linkType; ST_INT linkIndex; ST_UCHAR chlIndex; UNION_FLOAT dataVal; } cmdDown; //回答保存 struct { ST_RET result; //返回结果 } cmdReturn; } BUFFER_CMD_KDJZ; typedef struct { CMD_LOCK_PROPER cmdLock; //下发保存 struct { LINK_TYPE linkType; ST_INT linkIndex; DEVICE_CMD_TYPE_DZ_DOWN dzCmd; ST_UCHAR dstDevAddr; //没有使用 ST_UCHAR dzGroup; ST_UCHAR dzNum; UNION_FLOAT dzBuff[256]; } cmdDown; //回答保存 struct { ST_RET result; DEVICE_CMD_TYPE_DZ_RETURN cmdReturn; ST_UCHAR dzGroup; ST_UCHAR dzNum; UNION_FLOAT dzBuff[256]; ST_UCHAR dzType[256]; //定值类型 } cmdReturn; ST_UCHAR dzType[256]; //定值类型 } BUFFER_CMD_DZ; typedef struct { CMD_LOCK_PROPER cmdLock; //下发保存 struct { LINK_TYPE linkType; ST_INT linkIndex; ST_UCHAR cmdType; ST_UCHAR dstDev; ST_INT asduLen; //下发ASDU,错误的时候置传输原因返回 ST_UCHAR asdu[GENERAL_DATA_BUFF_LEN]; } cmdDown; //回答保存 struct { ST_RET result; //返回结果 ST_INT bufferLen; ST_UCHAR bufferData[GENERAL_DATA_BUFF_LEN]; } cmdReturn; } BUFFER_CMD_VERCALL; typedef struct { CMD_LOCK_PROPER cmdLock; //负荷录波处理不一样,有多条命令,也可能多条命令连续向同一方向发送 //下发保存 struct { LINK_TYPE linkType; ST_INT linkIndex; ST_INT asduLen; //下发ASDU,错误的时候置传输原因返回 ST_UCHAR asdu[GENERAL_DATA_BUFF_LEN]; } cmdDown; //回答保存 struct { ST_RET result; //返回结果 ST_INT bufferLen; ST_UCHAR bufferData[GENERAL_DATA_BUFF_LEN]; } cmdReturn; } BUFFER_CMD_FHLB; typedef struct { CMD_LOCK_PROPER cmdLock; //负荷录波处理不一样,有多条命令,也可能多条命令连续向同一方向发送 //下发保存 struct { LINK_TYPE linkType; ST_INT linkIndex; ST_UCHAR dstDev; //目标装置 ST_UCHAR segment; ST_UCHAR group; ST_INT asduLen; //下发ASDU,错误的时候置传输原因返回 ST_UCHAR asdu[GENERAL_DATA_BUFF_LEN]; } cmdDown; //回答保存 struct { ST_RET result; //返回结果 ST_INT bufferLen; //从ngd开始的内容,不包括检验码在内的长度 ST_UCHAR bufferData[GENERAL_DATA_BUFF_LEN]; } cmdReturn; } BUFFER_CMD_SJZJ; typedef struct { DEVICE_COMM_STATUS canioStatus; ST_UCHAR dstDev; //这里是连接序号,从0开始的连接序号 ST_INT verBufferLen; ST_UCHAR verBuffer[GENERAL_DATA_BUFF_LEN]; //1兼容级别,8名字,2版本,2校验 //召唤事件、自检闭锁 } CANIO_PROPERTY; typedef struct { ST_UCHAR yxType; } YXINF; typedef struct { ST_UCHAR devType; ST_UCHAR devAddr; ST_UCHAR initialized; //初始化完成,以收到总召遥信为准 DEVICE_COMM_STATUS devStatus; ST_UINT lbPointMax; //最大录波点数 ST_UCHAR digtalStartNum;//数字量录波通道起始序号 ST_CHAR iedName[256];//device表增加iedName配置项,用于生成故障报告文件的名称 ST_UINT16 saveYxMaxInf; //cbt add 2021.8.3 存储遥信变位的范围可以配置,信息序号从1开始,最大信息序号配置在接口库的device表中 //cbt add 2021.11.8 装置事件的遥信范围可变 ST_UINT16 deviceSoeMinInf; ST_UINT16 deviceSoeMaxInf; //cbt add 2022.2.15 最大的录波文件数可以配置 ST_UINT16 lbFileNumMax; struct { DEVICE_COMM_STATUS yjStatus; ST_INT verBufferLen; ST_UCHAR verBuffer[GENERAL_DATA_BUFF_LEN]; //1兼容级别,8名字,2版本,2校验 } yjProper; struct { ST_INT verBufferLen; ST_UCHAR verBuffer[GENERAL_DATA_BUFF_LEN]; //8名字,2版本,2校验 ST_DOUBLE lastRecv104; //上次从104连接收到数据的时间 ST_DOUBLE offlineTime104; //cbt add 2020.2.24 增加104连接的掉线时间(单位秒,这里存储毫秒),该时间内与104主站没有数据收发,则认为掉线,此时装置面板的通信灯灭;反之则亮 } commcpuProper; CANIO_PROPERTY canioProper[CANIO_MAX_NUM]; //连接序号,与连接一一对应 ST_INT monitorPort; //报文监视线程的侦听端口 ST_INT teleSignalNum; TELE_SIGNAL teleSignal[TELE_SIGNAL_NUM_MAX]; ST_INT teleMetryNum; TELE_METRY teleMetry[TELE_METRY_NUM_MAX]; ST_INT teleDegreeNum; TELE_DEGREE teleDegree[TELE_DEGREE_NUM_MAX]; //2016.01.22 add 缓存谐波数据. 需要像普通遥测一样处理,判断门限 ST_INT harmonMetryNum; TELE_METRY harmonMetry[HARMON_METRY_NUM_MAX]; ST_INT generalIsFilled; ST_UCHAR generalData[GENERAL_DATA_BUFF_LEN]; ST_INT generalIsFilled2; ST_UCHAR generalData2[GENERAL_DATA_BUFF_LEN]; //一次有两帧 2013-05-10 ST_INT generalIsFilled3; ST_UCHAR generalData3[GENERAL_DATA_BUFF_LEN]; //一次有3帧 2013-06-09 //cbt add 2021.3.17 硬件4.0 ST_INT generalIsFilled4; ST_UCHAR generalData4[GENERAL_DATA_BUFF_LEN]; //一次有4帧 2021.3.18 //cbt add 2021.5.17 硬件4.0增加供电臂联络信号为第5帧 ST_INT generalIsFilled5; ST_UCHAR generalData5[GENERAL_DATA_BUFF_LEN]; //一次有5帧 2021.5.17 //遥信变化缓冲,变化的遥信量,保存在本缓冲中等待上送104 ST_INT burstSignalNum; TELE_SIGNAL burstSignal[BURST_SIGNAL_NUM_MAX]; BUFFER_CMD_YK cmdYk; BUFFER_CMD_KDJZ cmdKdzj; //刻度校正 BUFFER_CMD_DZ cmdDz; BUFFER_CMD_VERCALL cmdVercall; BUFFER_CMD_FHLB cmdFhlb; //有多帧,可能多侦连续发送,不缓存,直接转发 BUFFER_CMD_SJZJ cmdSjZj; //事件、自检命令,到IO板的命令;保护CPU的会直接返回 //ghc add 2023.11.15 遥信事件inf最大值 ST_UINT16 deviceYXMaxInf; YXINF yxInfType[DEVICE_YX_INF_NUM]; } DEVICE_PROPERTY; typedef enum { DEV_DST_TYPE_prot=0, DEV_DST_TYPE_io_1=1, DEV_DST_TYPE_io_2=2, DEV_DST_TYPE_io_3=3, DEV_DST_TYPE_io_4=4, DEV_DST_TYPE_io_5=5, //cbt add 2021.3.23 硬件4.0 接口支持5块IO板的通信 DEV_DST_TYPE_proctcfg=12,//保护配置库 DEV_DST_TYPE_yj=13, DEV_DST_TYPE_commcpu=14, DEV_DST_TYPE_all=0xFF //通用类型,代表所有装置 } DEV_DST_ADDR; //环网卡设置地址 typedef struct{ ST_INT setHSRaddr; //需要设置的环网卡的地址--取装置eth0的ip最后一个字节 ST_RET setResult; //设置结果 ST_UCHAR setStep;//设置步骤:0--等待发送命令,1--等待回复 ST_UCHAR failNum;//一轮设置失败的次数 ST_DOUBLE setLastTime;//上次设置的时间 ST_DOUBLE setSpace;//设置间隔 ST_UCHAR sendcount;//发送设置帧的udp包计数 SOCKET_UDP_ATTRIB setUDP;//设置环网卡地址的UDP通道 }FPGA_HSR; //cbt add 2021.8.17添加录波召唤的处理结构体,以支持多客户端同时召录波 #define MULTI_LB_UP_PROCESS typedef struct { ST_UINT index; ST_UINT millSec; ST_UINT16 data[AnalogNUM+2];//加2字节(共32位)的数字量录波 }LB_CHL_DATA;//dat文件的每个录波点的录波数据保存格式 typedef struct { ST_INT inUse; ST_INT linkIndex; ST_DOUBLE lockTime; //闭锁事件 ST_INT faultIndex; //FaultItemType fault; CFG_FILE_CHLINFO cfgInfo; LB_CHL_DATA* lb_chl_data; size_t fileSize; }LB_UP_PROCESS; ST_RET interact_init( const char *programName ); ST_RET interact_release( void ); ST_RET interact_handle( void ); DEVICE_PROPERTY * interact_get_device_property( ST_VOID ); CANIO_PROPERTY * interact_get_device_canio_property( ST_UCHAR dstDev ); ST_UCHAR interact_get_device_addr( ST_VOID ); ST_RET interact_set_device_commStatus( DEVICE_COMM_STATUS status ); ST_VOID * interact_get_cln_prot( ST_VOID ); ST_VOID * interact_get_cln_canio( ST_VOID ); ST_VOID * interact_get_srv_ta21( ST_VOID ); ST_VOID * interact_get_srv_tool( ST_VOID ); ST_VOID * interact_get_srv_yj( ST_VOID ); ST_INT interact_get_srv_yj_flag( ST_VOID ); ST_BOOLEAN interact_lock_judge( CMD_LOCK_PROPER *cmdLock ); ST_BOOLEAN interact_lock_judge_timeOut( CMD_LOCK_PROPER *cmdLock ); ST_BOOLEAN interact_lock_judge_needeel( CMD_LOCK_PROPER *cmdLock ); ST_RET interact_lock_add( CMD_LOCK_PROPER *cmdLock, ST_DOUBLE lockTime ); ST_RET interact_lock_add_time( CMD_LOCK_PROPER *cmdLock, ST_DOUBLE lockTime ); ST_RET interact_lock_cancel( CMD_LOCK_PROPER *cmdLock ); ST_RET interact_device_soelog_insert(ST_UCHAR type, const ST_UCHAR * soeData, ST_INT dataLen ); ST_RET interact_device_checklog_insert( const ST_UCHAR * checkData, ST_INT dataLen ); //cbt add 2019.8.15 采用将遥信变位写入soe数据库中的方式保存遥信变位 ST_RET interact_device_yx_burst_log_insert_to_soe( ST_INT yxIndex, ST_UCHAR yxData, const ST_UCHAR *cp56Time ); //cbt add 2020.2.19 遥信变位写入单独的数据库,不再采用写入soe数据库的方法 ST_RET interact_device_yx_burst_log_insert(ST_UCHAR type, ST_INT yxIndex, ST_UCHAR yxData, const ST_UCHAR *cp56Time ); ST_RET interact_conver_datetype_to_cp56( const void *dateT, ST_UCHAR *cp56 ); ST_RET interact_set_device_property_lastrecv104( ST_VOID ); ST_RET interact_set_device_property( ST_INT teleMetryNum, ST_INT teleSignalNum, ST_INT teleDegreeNum, ST_UCHAR devType ); #define ADI_DEVICE_4_0_ETH_NUM 3 //4.0装置的网口数量 ST_RET interact_get_krTimeFlagType( ST_VOID ); ST_UINT interact_get_device_has_eth( ST_INT ethNum ); ST_RET interact_set_device_devaddr( ST_UCHAR devAddr ); ST_RET interact_init_property_io_tremble_time_default( void ); ST_RET interact_set_io_tremble_time( ST_UCHAR dstDev, ST_UCHAR ioType, ST_INT dzNum, ST_INT *dzBuff ); ST_RET interact_init_HSR_addr( ST_VOID ); ST_RET interact_set_HSR_addr(ST_VOID); ST_RET lb_up_process_init(LB_UP_PROCESS *lb_up_process, ST_INT max_process); LB_UP_PROCESS * lb_up_process_begin(LB_UP_PROCESS *lb_up_process, ST_INT max_process, ST_INT linkIndex,ST_INT faultIndex,ST_FLOAT lockTimeSpace); ST_RET lb_up_process_mmap(LB_UP_PROCESS *lb_up_process,ST_CHAR *filename); ST_RET lb_up_process_end(LB_UP_PROCESS *lb_up_process); ST_RET interact_srv_conf_handle(ST_VOID); /************************************************************************/ #ifdef __cplusplus } #endif #endif