2025-04-30 16:24:29 +08:00

548 lines
14 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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.0IO板数量由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