2341 lines
80 KiB
C
Raw Normal View History

2025-03-13 16:20:05 +08:00
/*
@file FesDef.h
@brief
@author thxiao
@history
2019-02-20 thxiao ;DI增加转发站标志
2019-03-11 thxiao .便
2019-03-18 thxiao RtuNo,SFesRxDoCmd\SFesRxAoCmd\SFesRxMoCmd增加定义
2019-06-05 thxiao SFesRtuParam 便\
2019-06-10 thxiao SFesRtuDevParam 便\
2019-06-11 thxiao CN_SFesSimComFrameMaxLen=300 120300
2019-08-30 thxiao SFesAi float fPercentValue;
2019-09-18 thxiao SFesChanParam,SFesRtuParam,使
2019-10-21 thxiao
2020-01-16 thxiao
2020-03-11 thxiao SFesRtuParam RTU使用
2020-09-29 thxiao
2020-10-15 thxiao SFesVirtualValue
2021-03-04 thxiao DO AO MO DZ增加DevId
2021-05-25 thxiao SOE
2021-06-25 thxiao MODBUS类型
2021-08-03 thxiao
*/
#pragma once
#define WIN32_LEAN_AND_MEAN
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <vector>
#include <map>
//#include <deque>
#include <string.h>
#ifdef WIN32
/*
#pragma warning(disable: 4100)//未引用的形参
#pragma warning(disable: 4101)//未引用的局部变量
#pragma warning(disable: 4251)//需要有dll接口由class"xxxx"的客户端使用
#pragma warning(disable: 4267)// “=”: 从“size_t”转换到“int”可能丢失数据
#pragma warning(disable: 4305)// “初始化”: 从“double”到“float”截断
#pragma warning(disable: 4275)// 非 dll 接口 class“google::protobuf::Message”用作 dll 接口 class“iot_idl::
#pragma warning(disable: 4819)//该文件包含不能在当前代码页(0)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
#pragma warning(disable: 4474)// sprintf: 格式字符串中传递的参数太多
#pragma warning(disable: 4313)//“sprintf”: 格式字符串中的“%d”与“char *”类型的参数 5 冲突
*/
#include <Windows.h>
#include <Winsock2.h>
#define in_addr_t unsigned long
#define SHUT_RDWR 2
#ifndef INET_ADDRSTRLEN
#define INET_ADDRSTRLEN 16
#endif
#define socklen_t int
#else
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <sys/time.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <netdb.h>
#include <unistd.h>
#include <fcntl.h>
typedef int SOCKET;
#define INVALID_SOCKET -1
#define SOCKET_ERROR -1
#define closesocket close
#define ioctlsocket ioctl
#endif
#ifndef FESSIM
// 以下头文件FES仿真程序不需要使用如有包含会编译出错
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
#include <boost/thread.hpp>
#include "pub_utility_api/TimerThreadBase.h"
#include "pub_utility_api/TimeUtil.h"
#include "pub_logger_api/logger.h"
#endif
#include "common/Common.h"
#include "common/DataType.h"
#include "FesRdbStruct.h"
#ifdef PROTOCOLBASE_API_EXPORTS
#define PROTOCOLBASE_API G_DECL_EXPORT
#else
#define PROTOCOLBASE_API G_DECL_IMPORT
#endif
/*
#ifdef PROTOCOLBASE_API_EXPORTS
#ifdef WIN32
#define PROTOCOLBASE_API G_DECL_EXPORT
#else
//LINUX下 默认情况下会使用C++ API函数命名规则函数名会增加字符使用extern "C"修饰后变为C的函数名便于使用。
#define PROTOCOLBASE_API extern "C"
#endif
#else
#define PROTOCOLBASE_API G_DECL_IMPORT
#endif
*/
using namespace std;
const float CN_FesFloatCompare = 0.000001f;//用于浮点型数据的比较
const int CN_FesMaxProtocolNum = 64; //系统可接入规约数
const int CN_FesMaxRtuNumPerChan = 64; //每个通道可接设备数只对通道为polling方式
2025-03-13 16:20:05 +08:00
const int CN_FesMaxChangeMultiple = 5; //变化数据缓冲区为数据个数的倍数
const int CN_FesMaxDzParamSize =800; //定值参数最大长度
const int CN_FesMaxDzNum =40; //定值最大个数一帧的定值个数最大40个(KBD104中规定
const int CN_FesMaxDefCmdSize =512; //自定义命令最大长度
const int CN_FesMaxWaveFileNameSize =256; //录波文件名最大长度
const int CN_FesMaxModbusTxCmdNum =200; //MODBUS命令发送缓冲区最大条数
const int CN_FesMaxFaultNum =4; //事件中最大故障数据
const int CN_FesFwMaxCollectRtuNum =256; //RTU转发表里的采集RTU最大个数
const int CN_Fes_Fw_MaxMapping = 16; //转发协议最大转发站数目
const int CN_Fes_MaxCmdBufSize = 100; //每个RTU每种命令类型最多缓存的命令数量
//模拟量死区类型
const int CN_FesDeadbandType_Percent = 0; //上下限百分比
const int CN_FesDeadbandType_Abs = 1; //绝对值
const int CN_FesDeadbandType_None = 2; //不判断死区
//点值状态
const int CN_FesValueNotUpdate =0x00; //BIT0: 0:点值未更新 1点已更新
const int CN_FesValueUpdate =0x01; //BIT0: 0:点值未更新 1点已更新
const int CN_FesValueInvaild =0x02; //BIT10:点值无效 1:点值无效 设备报告无效
const int CN_FesValueExceed =0x04; //BIT20:点值正常 1:点值超限
const int CN_FesValueComDown =0x08; //BIT30:通信正常 1: 通信中断
const int CN_FesDoUnBlocked =0x80; //BIT70:五防闭锁 1: 五防解锁
//RTU状态
const int CN_FesRtuNotUsed = 0; //保留未用
const int CN_FesRtuNormal = 1; //RTU正常
const int CN_FesRtuComDown = 2; //RTU通信中断
//通道状态
const int CN_FesChanNotUsed = 0; //保留未用
const int CN_FesChanCheck = 1; //通道检测,使用但未正常通信
const int CN_FesChanRun = 2; //通道运行
const int CN_FesChanStop = 3; //通道停止
const int CN_FesChanErrRate = 4; //接收帧错误率高 错误率可以设置
const int CN_FesChanErrRateRecover = 5; //接收帧错误率恢复
//事件类型
const int CN_FesRtuSoeEvent = 1; //接入设备RTUSOE事件
const int CN_FesFepSoeEvent = 2; //前置终端FEP生成SOE事件
const int CN_FesRtuEvent = 3; //RTU事件
const int CN_FesChanEvent = 4; //通道事件
//通道性质
const int CN_FesComProperty_Collect = 0; //采集通道
const int CN_FesComProperty_Transmit = 1; //转发通道
//通道类型
const int CN_FesComNone =0;
const int CN_FesTcpClient =1;
const int CN_FesTcpServer =2;
const int CN_FesUdpClient =3;
const int CN_FesUdpServer =4;
const int CN_FesSerialPort =5;
//通道方式
const int CN_FesDoubleChanMode = 0; //0双通道通信方式
const int CN_FesSingleChanMode = 1; //1单通道方式
//通道方式
const int CN_FesRunFlag = 1; //运行标志
const int CN_FesStopFlag = 0; //停运标志
//通道数据LinkStatus状态定义
const int CN_FesChanDisconnect =0; //通道停运
const int CN_FesChanConnecting =1; //正在连接
const int CN_FesChanConnect =2; //链接成功,通道运行
//控制命令定义:选择、取消、执行
const int CN_ControlSelect =1;
const int CN_ControlAbort =2;
const int CN_ControlExecute =3;
const int CN_ControlPrevent = 4;
//定值命令定义: 读取、切区、下装、确定
const int CN_SettingRead =1;
const int CN_SettingAreaSwitch =2;
const int CN_SettingDownload =3;
const int CN_SettingAck =4;
//控制命令返回状态
const int CN_ControlFailed =0;
const int CN_ControlSuccess =1;
const int CN_ControlPointErr =2;
const int CN_ControlPartialSuccess =3; //部分操作成功
//AO命令数值类型
const int CN_AoValueType_Float =0;
const int CN_AoValueType_Int =1;
//FesSimServer
const int CN_FesSimSoeEventMaxBufSize =1024;
const int CN_FesSimRtuEventMaxBufSize =256;
const int CN_FesSimChanEventMaxBufSize =256;
const int CN_FesSimChanMonMaxBufSize =512;
//通信监视数据
const int CN_SFesSimComFrameMaxLen =300; //监视帧最大长度
const int CN_SFesSimComFrameTypeRecv = 0; //监视帧类型:接收
const int CN_SFesSimComFrameTypeSend = 1; //监视帧类型:发送
const int CN_SFesSimComDataType_Data = 0; //监视帧数据类型:数据
const int CN_SFesSimComDataType_Str = 1; //监视帧数据类型:字符数据
const int CN_SFesSimComFrameMaxNum = 7; //每次发送监视帧最大个数
const int CN_FesControlStrParamSize = 256;
//故障相定义 SFesSoeEvent结构中FaultValTag定义
const int CN_Fes_IA =1;
const int CN_Fes_IB =2;
const int CN_Fes_IC =3;
const int CN_Fes_I0 =4;
const int CN_Fes_I2 =5;
const int CN_Fes_UA =6;
const int CN_Fes_UB =7;
const int CN_Fes_UC =8;
const int CN_Fes_U0 =9;
const int CN_Fes_U2 =10;
const int CN_Fes_UAB =11;
const int CN_Fes_UBC =12;
const int CN_Fes_UCA =13;
const int CN_Fes_CLOSE_NUM =14;
//控制方向 0:FES外部HMI 1:FES内部转发规约
const int CN_Fes_CtrlDir_OutSide=0;
const int CN_Fes_CtrlDir_InSide=1;
//转发点数据来源
const int CN_FesFw_FesSrc = 0; //来源于FES
const int CN_FesFw_DPSrc = 1; //来源于DP
//遥信点类型
const int CN_FesFw_SDI = 0; //单点
const int CN_FesFw_DDI = 1; //双点
//点所属专业最多个数
const int CN_FesSubSystem_Max_Num = 16;
//点类型
const int CN_Fes_AI = 1;
const int CN_Fes_DI = 2;
const int CN_Fes_ACC = 3;
const int CN_Fes_MI = 4;
const int CN_Fes_DO = 5;
const int CN_Fes_AO = 6;
const int CN_Fes_MO = 7;
const int CN_Fes_Setting = 8;
const float CN_FesFwAIChangeScale = 0.0001f;
//RTU 类型
const int CN_Fes_RTU_Collect = 0;//采集RTU
const int CN_Fes_RTU_Forward = 1;//转发RTU
//2021-08-03 thxiao 数据清零方式定义
const int CN_Fes_Comdown_Clear = 0x0001; //bit0 设备离线数据清零 1:清零 0保持数据
const int CN_Fes_Exceed_Clear = 0x0002; //bit1 数据越限数据清零 1:清零 0保持数据
//Modbus Frame Type
#define DI_BYTE_LH 0 //数字量帧(单字节)
#define DI_UWord_HL 1 //数字量帧(16bit 高字节前)
#define DI_UWord_LH 2 //数字量帧(16bit 低字节前)
#define AI_Word_HL 3 //模拟量帧(16bit 有符号 高字节前)
#define AI_Word_LH 4 //模拟量帧(16bit 有符号 低字节前)
#define AI_UWord_HL 5 //模拟量帧(16bit 无符号 高字节前)
#define AI_UWord_LH 6 //模拟量帧(16bit 无符号 低字节前)
#define AI_DWord_HH 7 //模拟量帧(32bit 有符号 高字前 高字节前)
#define AI_DWord_LH 8 //模拟量帧(32bit 有符号 低字前 高字节前)
#define AI_DWord_LL 9 //模拟量帧(32bit 有符号 低字前 低字节前)
#define AI_UDWord_HH 10 //模拟量帧(32bit 无符号 高字前 高字节前)
#define AI_UDWord_LH 11 //模拟量帧(32bit 无符号 低字前 高字节前)
#define AI_UDWord_LL 12 //模拟量帧(32bit 无符号 低字前 低字节前)
#define AI_Float_HH 13 //模拟量帧(四字节浮点 高字前 高字节前)
#define AI_Float_LH 14 //模拟量帧(四字节浮点 低字前 高字节前)
#define AI_Float_LL 15 //模拟量帧(四字节浮点 低字前 低字节前)
#define ACC_Word_HL 16 //整形量帧(16bit 有符号 高字节前)
#define ACC_Word_LH 17 //整形量帧(16bit 有符号 低字节前)
#define ACC_UWord_HL 18 //整形量帧(16bit 无符号 高字节前)
#define ACC_UWord_LH 19 //整形量帧(16bit 无符号 低字节前)
#define ACC_DWord_HH 20 //整形量帧(32bit 有符号 高字前 高字节前)
#define ACC_DWord_LH 21 //整形量帧(32bit 有符号 低字前 高字节前)
#define ACC_DWord_LL 22 //整形量帧(32bit 有符号 低字前 低字节前)
#define ACC_UDWord_HH 23 //整形量帧(32bit 无符号 高字前 高字节前)
#define ACC_UDWord_LH 24 //整形量帧(32bit 无符号 低字前 高字节前)
#define ACC_UDWord_LL 25 //整形量帧(32bit 无符号 低字前 低字节前)
#define ACC_Float_HH 26 //整形量帧(四字节浮点 高字前 高字节前)
#define ACC_Float_LH 27 //整形量帧(四字节浮点 低字前 高字节前)
#define ACC_Float_LL 28 //整形量帧(四字节浮点 低字前 低字节前)
#define MI_Word_HL 29 //混合量帧(16bit 有符号 高字节前)
#define MI_Word_LH 30 //混合量帧(16bit 有符号 低字节前)
#define MI_UWord_HL 31 //混合量帧(16bit 无符号 高字节前)
#define MI_UWord_LH 32 //混合量帧(16bit 无符号 低字节前)
#define MI_DWord_HH 33 //混合量帧(32bit 有符号 高字前 高字节前)
#define MI_DWord_LH 34 //混合量帧(32bit 有符号 低字前 高字节前)
#define MI_DWord_LL 35 //混合量帧(32bit 有符号 低字前 低字节前)
#define MI_UDWord_HH 36 //混合量帧(32bit 无符号 高字前 高字节前)
#define MI_UDWord_LH 37 //混合量帧(32bit 无符号 低字前 高字节前)
#define MI_UDWord_LL 38 //混合量帧(32bit 无符号 低字前 低字节前)
#define SPEAM_SOE 40 //施耐德SOE帧
#define PLC_DZ 41 //PLC_DZ
#define PLC_SOE 42 //PLC_SOE
#define PLC_DZ_DWord_HH 43 //PLC_DZ(四字节定值,高字前、高字节前)
#define AI_Hybrid_Type 44 //模拟量混合量帧
#define ACC_Hybrid_Type 45 //累积量混合量帧
#define DZ_DI_BYTE_LH 46 //数字量帧(单字节)
#define DZ_DI_UWord_HL 47 //数字量帧(16bit 高字节前)
#define DZ_DI_UWord_LH 48 //数字量帧(16bit 低字节前)
#define DZ_AI_Word_HL 49 //模拟量帧(16bit 有符号 高字节前)
#define DZ_AI_Word_LH 50 //模拟量帧(16bit 有符号 低字节前)
#define DZ_AI_UWord_HL 51 //模拟量帧(16bit 无符号 高字节前)
#define DZ_AI_UWord_LH 52 //模拟量帧(16bit 无符号 低字节前)
#define DZ_AI_DWord_HH 53 //模拟量帧(32bit 有符号 高字前 高字节前)
#define DZ_AI_DWord_LH 54 //模拟量帧(32bit 有符号 低字前 高字节前)
#define DZ_AI_DWord_LL 55 //模拟量帧(32bit 有符号 低字前 低字节前)
#define DZ_AI_UDWord_HH 56 //模拟量帧(32bit 无符号 高字前 高字节前)
#define DZ_AI_UDWord_LH 57 //模拟量帧(32bit 无符号 低字前 高字节前)
#define DZ_AI_UDWord_LL 58 //模拟量帧(32bit 无符号 低字前 低字节前)
#define DZ_AI_Float_HH 59 //模拟量帧(四字节浮点 高字前 高字节前)
#define DZ_AI_Float_LH 60 //模拟量帧(四字节浮点 低字前 高字节前)
#define DZ_AI_Float_LL 61 //模拟量帧(四字节浮点 低字前 低字节前)
#define AI_SIGNEDFLAG16_HL 62 //模拟量帧(符号位(bit15)加数值 高字节前)
#define AI_SIGNEDFLAG32_HL 63 //模拟量帧(符号位(bit31)加数值 高字节前)
#define AI_16BIT_BYBITS 64 //模拟量帧(取16bit 按位组合取值)
/********************************************************************************************************************/
//以下内部结构
//主备通道状态
#define EN_MAIN_CHAN 0
#define EN_BACKUP_CHAN 1
//线程运行状态
#define EN_THREAD_STOP 0
#define EN_THREAD_RUN 1
//转发五防闭锁标志
#define CN_FW_YK_UNBLOCK 0x8000 //五防解锁
#define CN_FW_YK_BLOCK 0x0000 //五防闭锁
#define CN_FW_YK_UNBLOCKCLEAR 0x7fff //五防解锁清除
//< 更新转发缓冲区的模式
enum EnumUpdateFwCacheMode
{
eDirectUpdate = 0, //< 直接更新,不进行任何数据加工和处理
eNormalUpdate = 1, //< 对数据进行基值和系数变换后,判断死区后更新
eWithoutDeadbandUpdate = 2, //< 对数据进行基值和系数变换,不判断死区
};
//MODBUS配置
typedef struct _SModbusCmd{
int Index; //序号
int Rtuaddr; //设备站址
int FunCode; //功能码即MODBUS中的命令码
int StartAddr; //数据起始地址
int DataLen; //数据长度
int PollTime; //命令下发周期(相对时间,一个周期=50ms
int Type; //帧类别
int PollTimeCount; //命令下发周期计数
int IsCreateSoe; //对遥信帧有效0不产生SOE1产生SOE
int Param1; //保留参数1
int Param2; //保留参数2
int Param3; //保留参数3
int Param4; //保留参数4
char szResParam1[CN_FES_CharArray64]; //< 字符串类型预留参数
int Used; //块使能
bool CommandSendFlag; //数据块轮询时间到就开始发送
int64 lastPollTime;
int SeqNo; //2022-09-06 thxiao 自动分配块序号,供MODBUSTCPV3内部使用
int Res1; //2022-09-06 thxiao 增加2个保留参数
int Res2;
_SModbusCmd()
{
memset(szResParam1,0,sizeof(szResParam1));
Index=0; //序号
Rtuaddr=0; //设备站址
FunCode=0; //功能码即MODBUS中的命令码
StartAddr=0; //数据起始地址
DataLen=0; //数据长度
PollTime=0; //命令下发周期(相对时间,一个周期=50ms
Type=0; //帧类别
PollTimeCount=0; //命令下发周期计数
IsCreateSoe=0; //对遥信帧有效0不产生SOE1产生SOE
Param1 = 0; //保留参数1
Param2 = 0; //保留参数2
Param3 = 0; //保留参数3
Param4 = 0; //保留参数4
Used = 1;
CommandSendFlag = true; //数据块轮询时间到就开始发送(数据块第一次都会发送)
lastPollTime = 0;
SeqNo = 0;
Res1 = 0;
Res2 = 0;
}
}SModbusCmd;
typedef struct {
int num;
int readx;
int writex;
SModbusCmd *pCmd;
}SModbusCmdBuf;
typedef struct {
int readx;
int writex;
SModbusCmd cmd[CN_FesMaxModbusTxCmdNum];
}SModbuTxCmdBuf;
typedef struct {
int MappingIndex;
int RemoteNo;
}SFesFwMapping;
typedef struct {
int SrcSubSystem; //点所属专业
int AiFlag;
int DiFlag;
int AccFlag;
int MiFlag;
}SFesSubSystem;
//变化数据缓存区
const int CN_SFesAiJudge_Deadband = 0x01;
const int CN_SFesAiJudge_Limit = 0x02;
typedef struct _SFesAi{
int PointNo;
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
char PointTagName[CN_FesMaxTagSize];
char PointDesc[CN_FesMaxDescSize];//2020-01-16 thxiao 增加点描述
short IsFilter; //是否过滤AI突变
short IsZeroBand;//是否判断归零死区
int Percent; //突变百分比
float fPercentValue; //2019-08-30 thxiao 转换后的突变比较范围
int DeadBandType;//死区类型
float DeadBand; //死区值
float ZeroBand; //归零死区
float Base; //基值
float Coeff; //系数;
float MaxRange; //度上限
float MinRange; //度下限
int Param1; //规约参数,每种协议含义相同。
int Param2; //规约参数,每种协议含义相同。 如modbus FunNo
int Param3; //规约参数,每种协议含义相同。 如modbus DataAddress
int Param4; //规约参数,每种协议含义相同。
int Param5; //规约参数,每种协议含义相同。
int Param6; //规约参数,每种协议含义相同。
int Param7; //规约参数,每种协议含义相同。
int Param8; //规约参数,每种协议含义相同。
char szResParam1[CN_FES_CharArray64]; //< 字符串类型预留参数
int Used;
float DeadBandValue;//根据配置计算处理的死区
int JudgeFlag; //判断标志,置位了,才做对应的判断
float Value;
float LastFilterValue; //上次收到的值用于过滤AI突变
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
int DevId; //2020-12-17 thxiao 增加DevId方便录播调用
int FwMapNum; //转发映射个数
SFesFwMapping FwMapping[CN_Fes_Fw_MaxMapping];//对应的转发点号,快速找到转发点
_SFesAi(){
IsZeroBand = 0;
PointNo = 0;
memset(TableName, 0, CN_FesMaxTableNameSize);
memset(ColumnName, 0, CN_FesMaxColumnNameSize);
memset(TagName, 0, CN_FesMaxTagSize);
memset(PointTagName, 0, CN_FesMaxTagSize);
memset(PointDesc, 0, CN_FesMaxDescSize);
memset(szResParam1,0,sizeof(szResParam1));
IsFilter = 0;
Percent = 0;
fPercentValue = 0;
DeadBandType = 0;
DeadBand = 0;
ZeroBand = 0;
Base = 0.0;
Coeff = 0.0;
MaxRange = 0.0;
MinRange = 0.0;
Param1 = 0;
Param2 = 0;
Param3 = 0;
Param4 = 0;
Param5 = 0;
Param6 = 0;
Param7 = 0;
Param8 = 0;
Used = 0;
DeadBandValue = 0;
JudgeFlag = 0;
Value = 0;
LastFilterValue = 0;
Status = 0;
time = 0;
DevId = 0;
FwMapNum = 0;
memset(&FwMapping[0], 0, sizeof(SFesFwMapping)*CN_Fes_Fw_MaxMapping);
}
}SFesAi;
typedef struct _SFesDi {
int PointNo;
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
char PointTagName[CN_FesMaxTagSize];
char PointDesc[CN_FesMaxDescSize];//2020-01-16 thxiao 增加点描述
int IsFilterErr; //是否过滤错误DI
int IsFilterDisturb;//是否过滤DI抖动
int DisturbTime; //抖动时限
int Revers; //取反
int Attribute; //点属性
int RelateDI; //关联遥信
int Param1; //规约参数,每种协议含义相同。 如modbus FunNo
int Param2; //规约参数,每种协议含义相同。 如modbus DataAddress
int Param3; //规约参数,每种协议含义相同。 如modbus InfoNo
int Param4; //规约参数,每种协议各不相同。
int Param5; //规约参数,每种协议含义相同。
int Param6; //规约参数,每种协议含义相同。
int Param7; //规约参数,每种协议含义相同。
int Param8; //规约参数,每种协议含义相同。
char szResParam1[CN_FES_CharArray64]; //< 字符串类型预留参数
int Used;
int Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
int DevId; //2020-12-17 thxiao 增加DevId方便录播调用
int FwMapNum; //转发映射个数
SFesFwMapping FwMapping[CN_Fes_Fw_MaxMapping];//对应的转发点号,快速找到转发点
_SFesDi() {
PointNo = 0;
memset(TableName, 0, CN_FesMaxTableNameSize);
memset(ColumnName, 0, CN_FesMaxColumnNameSize);
memset(TagName, 0, CN_FesMaxTagSize);
memset(PointTagName, 0, CN_FesMaxTagSize);
memset(PointDesc, 0, CN_FesMaxDescSize);
memset(szResParam1,0,sizeof(szResParam1));
IsFilterErr = 0;
IsFilterDisturb = 0;
DisturbTime = 0;
Revers = 0;
Attribute = 0;
RelateDI = 0;
Param1 = 0;
Param2 = 0;
Param3 = 0;
Param4 = 0;
Param5 = 0;
Param6 = 0;
Param7 = 0;
Param8 = 0;
Used = 0;
Value = 0;
Status = 0;
time = 0;
DevId = 0;
FwMapNum = 0;
memset(&FwMapping[0], 0, sizeof(SFesFwMapping)*CN_Fes_Fw_MaxMapping);
}
}SFesDi;
typedef struct _SFesAcc {
int PointNo;
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
char PointTagName[CN_FesMaxTagSize];
char PointDesc[CN_FesMaxDescSize];//2020-01-16 thxiao 增加点描述
float Base; //基值
double Coeff; //系数;
int Param1; //规约参数,每种协议各不相同。 如modbus FunNo
int Param2; //规约参数,每种协议各不相同。 如modbus DataAddress
int Param3; //规约参数,每种协议各不相同。 如modbus InfoNo
int Param4; //规约参数,每种协议各不相同。 如modbus ValueType
int Param5; //规约参数,每种协议含义相同。
int Param6; //规约参数,每种协议含义相同。
int Param7; //规约参数,每种协议含义相同。
int Param8; //规约参数,每种协议含义相同。
char szResParam1[CN_FES_CharArray64]; //< 字符串类型预留参数
int Used;
double Value;
uint32 Status;
int DevId; //2020-12-17 thxiao 增加DevId方便录播调用
uint64 time; //1970-01-01 00:00 至今的毫秒数
int FwMapNum; //转发映射个数
SFesFwMapping FwMapping[CN_Fes_Fw_MaxMapping];//对应的转发点号,快速找到转发点
_SFesAcc() {
PointNo = 0;
memset(TableName, 0, CN_FesMaxTableNameSize);
memset(ColumnName, 0, CN_FesMaxColumnNameSize);
memset(TagName, 0, CN_FesMaxTagSize);
memset(PointTagName, 0, CN_FesMaxTagSize);
memset(PointDesc, 0, CN_FesMaxDescSize);
memset(szResParam1,0,sizeof(szResParam1));
Base = 0;
Coeff = 0;
Param1 = 0;
Param2 = 0;
Param3 = 0;
Param4 = 0;
Param5 = 0;
Param6 = 0;
Param7 = 0;
Param8 = 0;
Used = 0;
Value = 0;
Status = 0;
DevId = 0;
time = 0;
FwMapNum = 0;
memset(&FwMapping[0], 0, sizeof(SFesFwMapping)*CN_Fes_Fw_MaxMapping);
}
}SFesAcc;
typedef struct _SFesMi {
int PointNo;
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
char PointTagName[CN_FesMaxTagSize];
char PointDesc[CN_FesMaxDescSize];//2020-01-16 thxiao 增加点描述
int Base; //基值
int Coeff; //系数;
int MaxRange; //度上限
int MinRange; //度下限
int Param1; //规约参数,每种协议各不相同。 如modbus FunNo
int Param2; //规约参数,每种协议各不相同。 如modbus DataAddress
int Param3; //规约参数,每种协议各不相同。 如modbus InfoNo
int Param4; //规约参数,每种协议各不相同。 如modbus ValueType
int Param5; //规约参数,每种协议含义相同。
int Param6; //规约参数,每种协议含义相同。
int Param7; //规约参数,每种协议含义相同。
int Param8; //规约参数,每种协议含义相同。
char szResParam1[CN_FES_CharArray64]; //< 字符串类型预留参数
int Used;
int Value;
uint32 Status;
int DevId; //2020-12-17 thxiao 增加DevId方便录播调用
uint64 time; //1970-01-01 00:00 至今的毫秒数
int FwMapNum; //转发映射个数
SFesFwMapping FwMapping[CN_Fes_Fw_MaxMapping];//对应的转发点号,快速找到转发点
_SFesMi() {
PointNo = 0;
memset(TableName, 0, CN_FesMaxTableNameSize);
memset(ColumnName, 0, CN_FesMaxColumnNameSize);
memset(TagName, 0, CN_FesMaxTagSize);
memset(PointTagName, 0, CN_FesMaxTagSize);
memset(PointDesc, 0, CN_FesMaxDescSize);
memset(szResParam1,0,sizeof(szResParam1));
Base = 0;
Coeff = 0;
MaxRange = 0;
MinRange = 0;
Param1 = 0;
Param2 = 0;
Param3 = 0;
Param4 = 0;
Param5 = 0;
Param6 = 0;
Param7 = 0;
Param8 = 0;
Used = 0;
Value = 0;
Status = 0;
DevId = 0;
time = 0;
FwMapNum = 0;
memset(&FwMapping[0], 0, sizeof(SFesFwMapping)*CN_Fes_Fw_MaxMapping);
}
}SFesMi;
typedef struct {
char used;
char unBlockFlag; //1:解锁 0闭锁
}SFesWfParam;
//Attribute
//Bit0 遥控类型。0脉冲输出1自保持输出需要程序清零
//Bit1 遥控复归。0表示普通遥控1表示复归。
//Bit2 特殊遥控点0表示普通遥控1特殊遥控点。
const int CN_FesDo_Normal = 0x00;
const int CN_FesDo_Pulse = 0x00;
const int CN_FesDo_Keep = 0x01;
const int CN_FesDo_Reset = 0x02;
const int CN_FesDo_Special = 0x04;
typedef struct _SFesDo {
int PointNo;
char PointTagName[CN_FesMaxTagSize];
char PointDesc[CN_FesMaxDescSize];//2020-01-16 thxiao 增加点描述
int Attribute; //点属性
int ControlParam; //遥控参数
int Param1; //规约参数,每种协议含义相同。 如modbus FunNo
int Param2; //规约参数,每种协议含义相同。 如modbus DataAddress
int Param3; //规约参数,每种协议含义相同。 如modbus InfoNo
int Param4; //规约参数,每种协议各不相同。
int Param5; //规约参数,每种协议含义相同。
int Param6; //规约参数,每种协议含义相同。
int Param7; //规约参数,每种协议含义相同。
int Param8; //规约参数,每种协议含义相同。
char szResParam1[CN_FES_CharArray64]; //< 字符串类型预留参数
int Used;
int Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
SFesWfParam wfParam;//五防参数
int DevId; //2021-03-03 thxiao 增加DevId
_SFesDo() {
PointNo = 0;
memset(PointTagName, 0, CN_FesMaxTagSize);
memset(PointDesc, 0, CN_FesMaxDescSize);
memset(&wfParam, 0, sizeof(wfParam));
memset(szResParam1,0,sizeof(szResParam1));
Attribute = 0;
ControlParam = 0;
Param1 = 0;
Param2 = 0;
Param3 = 0;
Param4 = 0;
Param5 = 0;
Param6 = 0;
Param7 = 0;
Param8 = 0;
Used = 0;
Value = 0;
Status = 0;
time = 0;
DevId = 0;
}
}SFesDo;
typedef struct _SFesAo {
int PointNo;
char PointTagName[CN_FesMaxTagSize];
char PointDesc[CN_FesMaxDescSize];//2020-01-16 thxiao 增加点描述
float Base; //基值
float Coeff; //系数;
float MaxRange; //度上限
float MinRange; //度下限
int Param1; //规约参数,每种协议含义相同。 如modbus FunNo
int Param2; //规约参数,每种协议含义相同。 如modbus DataAddress
int Param3; //规约参数,每种协议含义相同。 如modbus InfoNo
int Param4; //规约参数,每种协议含义相同。
int Param5; //规约参数,每种协议含义相同。
int Param6; //规约参数,每种协议含义相同。
int Param7; //规约参数,每种协议含义相同。
int Param8; //规约参数,每种协议含义相同。
char szResParam1[CN_FES_CharArray64]; //< 字符串类型预留参数
int Used;
float Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
int DevId; //2021-03-03 thxiao 增加DevId
_SFesAo() {
PointNo = 0;
memset(PointTagName, 0, CN_FesMaxTagSize);
memset(PointDesc, 0, CN_FesMaxDescSize);
memset(szResParam1,0,sizeof(szResParam1));
Base = 0;
Coeff = 0;
MaxRange = 0;
MinRange = 0;
Param1 = 0;
Param2 = 0;
Param3 = 0;
Param4 = 0;
Param5 = 0;
Param6 = 0;
Param7 = 0;
Param8 = 0;
Used = 0;
Value = 0;
Status = 0;
time = 0;
DevId = 0;
}
}SFesAo;
typedef struct _SFesMo{
int PointNo;
char PointTagName[CN_FesMaxTagSize];
char PointDesc[CN_FesMaxDescSize];//2020-01-16 thxiao 增加点描述
int Base; //基值
int Coeff; //系数;
int MaxRange; //度上限
int MinRange; //度下限
int Param1; //规约参数,每种协议各不相同。 如modbus FunNo
int Param2; //规约参数,每种协议各不相同。 如modbus DataAddress
int Param3; //规约参数,每种协议各不相同。 如modbus InfoNo
int Param4; //规约参数,每种协议各不相同。 如modbus ValueType
int Param5; //规约参数,每种协议含义相同。
int Param6; //规约参数,每种协议含义相同。
int Param7; //规约参数,每种协议含义相同。
int Param8; //规约参数,每种协议含义相同。
char szResParam1[CN_FES_CharArray64]; //< 字符串类型预留参数
int Used;
int Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
int DevId; //2021-03-03 thxiao 增加DevId
_SFesMo() {
PointNo = 0;
memset(PointTagName, 0, CN_FesMaxTagSize);
memset(PointDesc, 0, CN_FesMaxDescSize);
memset(szResParam1,0,sizeof(szResParam1));
Base = 0;
Coeff = 0;
MaxRange = 0;
MinRange = 0;
Param1 = 0;
Param2 = 0;
Param3 = 0;
Param4 = 0;
Param5 = 0;
Param6 = 0;
Param7 = 0;
Param8 = 0;
Used = 0;
Value = 0;
Status = 0;
time = 0;
DevId = 0;
}
}SFesMo;
typedef struct {
int PointNo;
// char TagName[CN_FesMaxTagSize];
char PointTagName[CN_FesMaxTagSize];
int GroupNo; //定值组号
int CodeNo; //定值代号
int SeqNo; //定值序号
int DzType; //定值类型
int Unit; //单位
double Base; //基值
double Coeff; //系数;
double MaxRange; //度上限
double MinRange; //度下限
int Param1; //规约参数
int Param2; //规约参数
int Param3; //规约参数
int Param4; //规约参数
int Param5; //规约参数,每种协议含义相同。
int Param6; //规约参数,每种协议含义相同。
int Param7; //规约参数,每种协议含义相同。
int Param8; //规约参数,每种协议含义相同。
char szResParam1[CN_FES_CharArray64]; //< 字符串类型预留参数
int Used;
int ValueType;
union
{
int iVal;
float fVal;
}Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
int DevId; //2021-03-03 thxiao 增加DevId
}SFesDz;
//转发表变化数据缓冲区
typedef struct {
int RemoteNo; //远动序号
char TagName[CN_FesMaxTagSize]; //标签名
char PointDesc[CN_FesMaxDescSize]; //点描述
char DPTagName[CN_FesMaxTagSize]; //后台标签名
int FesRtuNo; //采集rtu号
int FesPointNo; //采集点号
int DpSeqNo; //组号
double Coeff; //系数;
double Base; //修正值
int DeadBandType; //死区类型
double DeadBand; // 配置死区值
float RealDeadBandValue; //< 根据死区类型计算后的实际死区,运行时不再需要进行死区类型的判断
int Property; //属性
int SrcLocationID; //所属厂站
int SrcSubSystem; //所属专业
int ResParam1; //规约参数1
int ResParam2; //规约参数2
int ResParam3; //规约参数3
int ResParam4; //规约参数4
int ResParam5; //规约参数5
int ResParam6; //规约参数6
int ResParam7; //规约参数7
char szResParam1[CN_FES_CharArray64]; //< 字符串类型预留参数
int SrcType; //点来源0FES 1:DP)
int Used;
float Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
}SFesFwAi;
typedef struct {
int RemoteNo; //远动序号
char TagName[CN_FesMaxTagSize]; //采集标签名
char PointDesc[CN_FesMaxDescSize]; //点描述
char DPTagName[CN_FesMaxTagSize]; //后台标签名
int FesRtuNo; //采集rtu号
int FesPointNo; //采集点号
int DpSeqNo; //后台点序号
int Property; //属性
int SrcLocationID; //所属厂站
int SrcSubSystem; //所属专业
int ResParam1; //规约参数1
int ResParam2; //规约参数2
int ResParam3; //规约参数3
int ResParam4; //规约参数4
int ResParam5; //规约参数5
int ResParam6; //规约参数6
int ResParam7; //规约参数7
char szResParam1[CN_FES_CharArray64]; //< 字符串类型预留参数
int SrcType; //点来源0FES 1:DP)
short Used;
short InitFlag; //数值已更新因为DP->FES数据要产生SOE所以需要。
int Value;
uint32 Status; //bit7:1 (五防解锁) 0(五防闭锁)
uint64 time; //1970-01-01 00:00 至今的毫秒数
//五防信息
int DORemoteNo; //对应的转发遥控号
}SFesFwDi;
typedef struct {
int RemoteNo; //远动序号
char TagName[CN_FesMaxTagSize]; //采集标签名
char PointDesc[CN_FesMaxDescSize]; //点描述
char DPTagName[CN_FesMaxTagSize]; //后台标签名
int FesRtuNo; //采集rtu号
int FesPointNo; //采集点号
int DpSeqNo; //后台点序号
double Coeff; //系数;
double Base; //修正值
int Property; //属性
int SrcLocationID; //所属厂站
int SrcSubSystem; //所属专业
int ResParam1; //规约参数1
int ResParam2; //规约参数2
int ResParam3; //规约参数3
int ResParam4; //规约参数4
int ResParam5; //规约参数5
int ResParam6; //规约参数6
int ResParam7; //规约参数7
char szResParam1[CN_FES_CharArray64]; //< 字符串类型预留参数
int SrcType; //点来源0FES 1:DP)
int Used;
double Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
}SFesFwAcc;
typedef struct {
int RemoteNo; //远动序号
char TagName[CN_FesMaxTagSize]; //采集标签名
char PointDesc[CN_FesMaxDescSize]; //点描述
char DPTagName[CN_FesMaxTagSize]; //后台标签名
int FesRtuNo; //采集rtu号
int FesPointNo; //采集点号
int DpSeqNo; //组号
double Coeff; //系数;
double Base; //修正值
int Property; //属性
int SrcLocationID; //所属厂站
int SrcSubSystem; //所属专业
int ResParam1; //规约参数1
int ResParam2; //规约参数2
int ResParam3; //规约参数3
int ResParam4; //规约参数4
int ResParam5; //规约参数5
int ResParam6; //规约参数6
int ResParam7; //规约参数7
char szResParam1[CN_FES_CharArray64]; //< 字符串类型预留参数
int SrcType; //点来源0FES 1:DP)
int Used;
int Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
}SFesFwMi;
typedef struct {
int RemoteNo; //远动序号
char TagName[CN_FesMaxTagSize]; //采集标签名
char PointDesc[CN_FesMaxDescSize]; //点描述
int FesRtuNo; //采集rtu号
int FesPointNo; //采集点号
double MaxRange; //度上限
double MinRange; //度下限
double Coeff; //系数;
double Base; //修正值
int Property; //属性
int SrcLocationID; //所属厂站
int SrcSubSystem; //所属专业
int ResParam1; //规约参数1
int ResParam2; //规约参数2
int ResParam3; //规约参数3
int ResParam4; //规约参数4
int ResParam5; //规约参数5
int ResParam6; //规约参数6
int ResParam7; //规约参数7
char szResParam1[CN_FES_CharArray64]; //< 字符串类型预留参数
int SrcType; //点来源0FES 1:DP)
int Used;
float Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
}SFesFwAo;
const int CN_FesFwDoPointNum=5;
typedef struct {
int RemoteNo; //远动序号
char TagName[CN_FesMaxTagSize]; //采集标签名
char PointDesc[CN_FesMaxDescSize]; //点描述
int FesRtuNo; //采集rtu号
int FesPointNum;//分量数
int FesPointNo[CN_FesFwDoPointNum]; //采集点号
int Property; //属性
int SrcLocationID; //所属厂站
int SrcSubSystem; //所属专业
int ResParam1; //规约参数1
int ResParam2; //规约参数2
int ResParam3; //规约参数3
int ResParam4; //规约参数4
int ResParam5; //规约参数5
int ResParam6; //规约参数6
int ResParam7; //规约参数7
char szResParam1[CN_FES_CharArray64]; //< 字符串类型预留参数
int SrcType; //点来源0FES 1:DP)
int Used;
int Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
//五防信息
int DIRemoteNo; //对应的转发遥信号
uint64 WfBlockedTimeout; //五防闭锁时间
}SFesFwDo;
typedef struct {
int RemoteNo; //远动序号
char TagName[CN_FesMaxTagSize]; //采集标签名
char PointDesc[CN_FesMaxDescSize]; //点描述
int FesRtuNo; //采集rtu号
int FesPointNo; //采集点号
double MaxRange; //度上限
double MinRange; //度下限
int Property; //属性
int SrcLocationID; //所属厂站
int SrcSubSystem; //所属专业
int ResParam1; //规约参数1
int ResParam2; //规约参数2
int ResParam3; //规约参数3
int ResParam4; //规约参数4
int ResParam5; //规约参数5
int ResParam6; //规约参数6
int ResParam7; //规约参数7
char szResParam1[CN_FES_CharArray64]; //< 字符串类型预留参数
int SrcType; //点来源0FES 1:DP)
int Used;
float Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
}SFesFwMo;
//FES间的RTU数据交互
typedef struct {
int PointNo;
float Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
}SFesRtuAiValue;
typedef struct {
int PointNo;
int Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
}SFesRtuDiValue;
typedef struct {
int PointNo;
double Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
}SFesRtuAccValue;
typedef struct {
int PointNo;
int Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
}SFesRtuMiValue;
//Fes间采集RTU与转发RTU数据交互
typedef struct {
int PointNo;
float Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
}SFesFwRtuAiValue;
typedef struct {
int PointNo;
int Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
}SFesFwRtuDiValue;
typedef struct {
int PointNo;
int64 Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
}SFesFwRtuAccValue;
//SCADA 与FES间的数据交互 变化数据缓存区
typedef struct {
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
uint32 Status;
float Value;
uint64 time;
int RtuNo;
int PointNo;
}SFesChgAi;
typedef struct {
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
uint32 Status;
int Value;
uint64 time;
int RtuNo;
int PointNo;
}SFesChgDi;
typedef struct {
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
uint32 Status;
double Value;
uint64 time;
int RtuNo;
int PointNo;
}SFesChgAcc;
typedef struct {
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
uint32 Status;
int Value;
uint64 time;
int RtuNo;
int PointNo;
}SFesChgMi;
//SCADA 与FES间的数据交互 全数据
typedef struct {
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
uint32 Status;
float Value;
}SFesAllAi;
typedef struct {
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
uint32 Status;
int Value;
}SFesAllDi;
typedef struct {
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
uint32 Status;
double Value;
}SFesAllAcc;
typedef struct {
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
uint32 Status;
int Value;
}SFesAllMi;
typedef struct{
int ChanNo;
int Status;
float ErrRate;
uint64 time;
}SFesChanStatus;
typedef struct{
int RtuNo;
int Status;
uint64 time;
}SFesRtuStatus;
typedef struct{
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
uint32 Status; //遥测信状态
int Value; //点值
uint64 time; //1970-01-01 00:00 至今的毫秒数
int FaultNum; //故障值个数
int FaultValTag [CN_FesMaxFaultNum];//表明以下数值的来源
float FaultVal[CN_FesMaxFaultNum];
int RtuNo; //RTU号
int PointNo;
}SFesSoeEvent;
typedef struct{
char ChanTagName[CN_FesMaxTagSize];//通道标签
int nChannelNo; //通道号
char ChanName[CN_FesMaxNameSize];//通道名词
char ChanDesc[CN_FesMaxDescSize];//通道描述
int nLocationId; //车站
int nSubSystem; //专业
int nRegionId; //责任区ID
uint32 Status; //通道状态
float ErrRate; //通道误码率
uint64 time; //1970-01-01 00:00 至今的毫秒数
}SFesChanEvent;
typedef struct{
char RtuTagName[CN_FesMaxTagSize];//RTU标签
int nRtuNo; //RTU号
char RtuName[CN_FesMaxNameSize];//rtu名词
char RtuDesc[CN_FesMaxDescSize];//rtu描述
int nLocationId; //车站
int nSubSystem; //专业
int nRegionId; //责任区ID
uint32 Status; //RTU状态
int CurrentChanNo;
uint64 time; //1970-01-01 00:00 至今的毫秒数
}SFesRtuEvent;
typedef struct _SFesRxDoCmd{
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
char RtuName[CN_FesMaxNameSize];
int CtrlDir; //控制方向 0:FES外部HMI 1:FES内部转发规约
int FwSubSystem; //转发专业
int FwRtuNo; //转发RTU号
int FwPointNo; //转发点号
int RtuNo; //源RTU号
int PointID; //源点号
int SubSystem; //源专业
int iValue; //目标值(DO、MO)
int CtrlActType; //控制类型 选择、取消、执行,
int TagtState;
uint64 Param1;
uint64 Param2;
float fParam;
char strParam[CN_FesControlStrParamSize];
_SFesRxDoCmd()
{
memset(TableName,0,sizeof(TableName));
memset(ColumnName,0,sizeof(ColumnName));
memset(TagName,0,sizeof(TagName));
memset(RtuName,0,sizeof(RtuName));
CtrlDir=0;
RtuNo = 0;
PointID = 0;
SubSystem = 0;
FwSubSystem = 0;
FwRtuNo = 0;
FwPointNo = 0;
iValue = 0; //目标值(DO、MO)
CtrlActType = 0; //控制类型 选择、取消、执行,
TagtState = 0;
Param1 = 0;
Param2 = 0;
fParam = 0;
memset(strParam,0,sizeof(strParam));
}
}SFesRxDoCmd;
typedef struct _SFesTxDoCmd{
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
char RtuName[CN_FesMaxNameSize];
int CtrlDir; //控制方向 0:FES外部HMI 1:FES内部转发规约
int FwSubSystem; //转发专业
int FwRtuNo; //转发RTU号
int FwPointNo; //转发点号
int RtuNo; //源RTU号
int PointID; //源点号
int SubSystem; //源专业
int retStatus; //返回状态
uint64 Param1;
uint64 Param2;
float fParam;
char strParam[CN_FesControlStrParamSize];
int CtrlActType; //控制类型 选择、取消、执行,
_SFesTxDoCmd()
{
memset(TableName,0,sizeof(TableName));
memset(ColumnName,0,sizeof(ColumnName));
memset(TagName,0,sizeof(TagName));
memset(RtuName,0,sizeof(RtuName));
CtrlDir=0;
RtuNo = 0;
PointID = 0;
SubSystem = 0;
FwSubSystem = 0;
FwRtuNo = 0;
FwPointNo = 0;
retStatus = 0; //返回状态
CtrlActType = 0; //控制类型 选择、取消、执行,
Param1 = 0;
Param2 = 0;
fParam = 0;
memset(strParam,0,sizeof(strParam));
}
}SFesTxDoCmd;
typedef struct _SFesRxAoCmd{
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
char RtuName[CN_FesMaxNameSize];
int CtrlDir; //控制方向 0:FES外部HMI 1:FES内部转发规约
int FwSubSystem; //转发专业
int FwRtuNo; //转发RTU号
int FwPointNo; //转发点号
int RtuNo; //源RTU号
int PointID; //源点号
int SubSystem; //源专业
float fValue; //目标值(AO)
int CtrlActType; //控制类型 选择、取消、执行,
int TagtState;
uint64 Param1;
uint64 Param2;
float fParam;
char strParam[CN_FesControlStrParamSize];
_SFesRxAoCmd()
{
memset(TableName,0,sizeof(TableName));
memset(ColumnName,0,sizeof(ColumnName));
memset(TagName,0,sizeof(TagName));
memset(RtuName,0,sizeof(RtuName));
CtrlDir=0;
RtuNo = 0;
PointID = 0;
SubSystem = 0;
FwSubSystem = 0;
FwRtuNo = 0;
FwPointNo = 0;
fValue = 0; //目标值(AO)
CtrlActType = 0; //控制类型 选择、取消、执行,
TagtState = 0;
Param1 = 0;
Param2 = 0;
fParam = 0;
memset(strParam,0,sizeof(strParam));
}
}SFesRxAoCmd;
typedef struct _SFesTxAoCmd{
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
char RtuName[CN_FesMaxNameSize];
int CtrlDir; //控制方向 0:FES外部HMI 1:FES内部转发规约
int FwSubSystem; //转发专业
int FwRtuNo; //转发RTU号
int FwPointNo; //转发点号
int RtuNo; //源RTU号
int PointID; //源点号
int SubSystem; //源专业
int retStatus; //返回状态
uint64 Param1;
uint64 Param2;
float fParam;
char strParam[CN_FesControlStrParamSize];
int CtrlActType; //控制类型 选择、取消、执行,
_SFesTxAoCmd()
{
memset(TableName,0,sizeof(TableName));
memset(ColumnName,0,sizeof(ColumnName));
memset(TagName,0,sizeof(TagName));
memset(RtuName,0,sizeof(RtuName));
CtrlDir=0;
RtuNo = 0;
PointID = 0;
SubSystem = 0;
FwSubSystem = 0;
FwRtuNo = 0;
FwPointNo = 0;
retStatus = 0;
CtrlActType = 0; //控制类型 选择、取消、执行,
Param1 = 0;
Param2 = 0;
fParam = 0;
memset(strParam,0,sizeof(strParam));
}
}SFesTxAoCmd;
typedef struct _SFesRxMoCmd{
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
char RtuName[CN_FesMaxNameSize];
int CtrlDir; //控制方向 0:FES外部HMI 1:FES内部转发规约
int FwSubSystem; //转发专业
int FwRtuNo; //转发RTU号
int FwPointNo; //转发点号
int RtuNo; //源RTU号
int PointID; //源点号
int SubSystem; //源专业
int iValue; //目标值(DO、MO)
int CtrlActType; //控制类型 选择、取消、执行,
int TagtState;
uint64 Param1;
uint64 Param2;
float fParam;
char strParam[CN_FesControlStrParamSize];
_SFesRxMoCmd()
{
memset(TableName,0,sizeof(TableName));
memset(ColumnName,0,sizeof(ColumnName));
memset(TagName,0,sizeof(TagName));
memset(RtuName,0,sizeof(RtuName));
CtrlDir=0;
RtuNo = 0;
PointID = 0;
SubSystem = 0;
FwSubSystem = 0;
FwRtuNo = 0;
FwPointNo = 0;
iValue = 0; //目标值(DO、MO)
CtrlActType = 0; //控制类型 选择、取消、执行,
TagtState = 0;
Param1 = 0;
Param2 = 0;
fParam = 0;
memset(strParam,0,sizeof(strParam));
}
}SFesRxMoCmd;
typedef struct _SFesTxMoCmd{
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
char RtuName[CN_FesMaxNameSize];
int CtrlDir; //控制方向 0:FES外部HMI 1:FES内部转发规约
int FwSubSystem; //转发专业
int FwRtuNo; //转发RTU号
int FwPointNo; //转发点号
int RtuNo; //源RTU号
int PointID; //源点号
int SubSystem; //源专业
int retStatus; //返回状态
uint64 Param1;
uint64 Param2;
float fParam;
char strParam[CN_FesControlStrParamSize];
int CtrlActType; //控制类型 选择、取消、执行,
_SFesTxMoCmd()
{
memset(TableName,0,sizeof(TableName));
memset(ColumnName,0,sizeof(ColumnName));
memset(TagName,0,sizeof(TagName));
memset(RtuName,0,sizeof(RtuName));
CtrlDir=0;
RtuNo = 0;
PointID = 0;
SubSystem = 0;
FwSubSystem = 0;
FwRtuNo = 0;
FwPointNo = 0;
retStatus = 0;
CtrlActType = 0; //控制类型 选择、取消、执行,
Param1 = 0;
Param2 = 0;
fParam = 0;
memset(strParam,0,sizeof(strParam));
}
}SFesTxMoCmd;
typedef struct{
char TagName[CN_FesMaxTagSize];//Point tag
int Index; //Point index
int iValue; //Point Value
}SFesRxSetting;
typedef struct{
int RtuNo;
int DevId; //PCS3000 下的DevId
int CtrlActType; //控制类型 读取,下装、确定
int Num; //定值个数下装定值和确定修改定值Num=0, 读取保护定值Num!=0不超过100点
SFesRxSetting Setting[CN_FesMaxDzNum];//定值
}SFesRxSettingCmd;
typedef struct{
int RtuNo;
int DevId; //PCS3000 下的DevId
int CtrlActType; //控制类型 读取,下装、确定
int retStatus; //返回状态
int Num; //定值个数下装定值和确定修改定值Num=0, 读取保护定值Num!=0不超过100点
SFesRxSetting Setting[CN_FesMaxDzNum];//定值
char strParam[CN_FesControlStrParamSize];
}SFesTxSettingCmd;
/*
typedef struct{
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
char RtuName[CN_FesMaxNameSize];
int DevId; //PCS3000 下的DevId
int ParamLen;
byte Param[CN_FesMaxDefCmdSize]; //自定义命令
}SFesRxDefCmd;
typedef struct{
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
char RtuName[CN_FesMaxNameSize];
int DevId; //PCS3000 下的DevId
int retStatus; //返回状态
int ParamLen;
byte Param[CN_FesMaxDefCmdSize]; //自定义命令
char strParam[CN_FesControlStrParamSize];
}SFesTxDefCmd;
*/
typedef struct{
std::string name;
std::string value;
}FesDefCmd;
typedef struct _SFesRxDefCmd {
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
char RtuName[CN_FesMaxNameSize];
int DevId; //PCS3000 下的DevId
int CmdNum;
int CtrlDir; //控制方向 0:FES外部HMI 1:FES内部转发规约
int SrcRtuNo; //转发规约源RTU号
std::vector <FesDefCmd> VecCmd;
_SFesRxDefCmd()
{
memset(TableName, 0, sizeof(TableName));
memset(ColumnName, 0, sizeof(ColumnName));
memset(TagName, 0, sizeof(TagName));
memset(RtuName, 0, sizeof(RtuName));
DevId = 0;
CmdNum = 0;
CtrlDir = 0;
SrcRtuNo = 0;
//VecCmd.clear();
}
}SFesRxDefCmd;
typedef struct _SFesTxDefCmd{
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
char RtuName[CN_FesMaxNameSize];
int DevId; //PCS3000 下的DevId
int retStatus; //返回状态
int CmdNum;
std::vector <FesDefCmd> VecCmd;
char strParam[CN_FesControlStrParamSize];
int CtrlDir; //控制方向 0:FES外部HMI 1:FES内部转发规约
int SrcRtuNo; //转发规约源RTU号
_SFesTxDefCmd()
{
CtrlDir = 0;
memset(TableName,0,sizeof(TableName));
memset(ColumnName,0,sizeof(ColumnName));
memset(TagName,0,sizeof(TagName));
memset(RtuName,0,sizeof(RtuName));
DevId = 0;
retStatus = 0;
CmdNum = 0;
SrcRtuNo = 0;
memset(strParam,0,sizeof(strParam));
}
}SFesTxDefCmd;
typedef struct{
int RtuNo;
int DevId;
int fileSize;
char fileName[CN_FesMaxWaveFileNameSize];
}SFesWaveForm;
typedef struct
{
int ProtocolId;
char Name[CN_FesMaxNameSize];
}SFesProtocolName;
typedef struct{
char NetDesc[CN_FesMaxNetDescSize]; //通道IP
int PortNo;//通道网络端口
}SFesNetRoute;
typedef struct{
int ChanNo; //通道号
char TagName[CN_FesMaxTagSize]; //RTU
char ChanName[CN_FesMaxNameSize];//通道名
char ChanDesc[CN_FesMaxDescSize];//通道描述
int nLocationId; //车站
int nSubSystem; //专业
int nRegionId; //责任区ID
int Used; //通道使用标志
float ErrRateLimit; //帧错误标准
SFesNetRoute NetRoute[CN_FesMaxNetRouteNum];
int CommProperty; //通道性质 0接收通道 1转发通道
int CommType; //通信方式
int ChanMode; //通道方式0双通道通信方式 1单通道方式
int ProtocolId; //规约类型
int ConnectWaitSec;
int RespTimeout; //响应超时
int RetryTimes; //最大重连次数
int RecvTimeout; //接收超时,单位ms
int ConnectTimeout; //链接超时
int MaxRxSize; //接收缓存区长度
int MaxTxSize; //发送缓存区长度
int BackupChanNo[CN_FesMaxChangeChanNum-1];//实际配置的备用通道号
//char ComPortName[CN_FesMaxNameSize];//串口端口名
int BaudRate; //波特率设置
int Parity; //校验位
int DataBit; //数据位
int StopBit; //停止位
int ResParam1;
int ResParam2;
int SetTimeEnable; //通道对时使能
int LocalPortNo; //本地端口号
int AlarmEnable; //2019-09-18 thxiao 增加报警使能
char szResParam1[CN_FES_CharArray64]; //< 字符串类型预留参数
}SFesChanParam;
//本结构是通道管理的内部结构备用通道收发的统计数据RxNum、TxNum、ErrCnt在自己通道结构中
//其他数据都在主通道结构中
typedef struct{
uint32 Writex;//写指针
uint32 Readx; //读指针
byte *pData; //数据内容
}SFesChanRxBuf;
typedef struct{
uint32 Writex;//写指针
uint32 Readx; //读指针
byte *pData; //数据内容
}SFesChanTxBuf;
typedef struct{
int RtuNo; //RTU号
char TagName[CN_FesMaxTagSize]; //RTU
char RtuName[CN_FesMaxNameSize]; //RTU
char RtuDesc[CN_FesMaxDescSize];//rtu描述
int nLocationId;//车站
char LocationDesc[CN_FesMaxDescSize];//2019-06-05 thxiao 车站描述
int nSubSystem; //专业
int Used; //使用标志
int RtuAddr; //RTU地址
int ChanNo; //通道号
int RecvFailLimit; //连续接收数据失败计数(>5代表停运
int ProtocolId; //规约类型 2018-12-25 add by thxiao
int AlarmEnable; //报警使能 2019-09-18 add by thxiao
int ResParam1;
int ResParam2;
int ResParam3;
int ControlDisable; //遥控禁止 1禁止 0允许
int ClearDataEnable; //2021-08-03 thxiao
//bit0 设备离线数据清零 1:清零 0保持数据
//bit1 数据越限数据清零 1:清零 0保持数据
char DevType[CN_FesMaxTagSize]; //2020-03-09 thxiao 设备类型
char szResParam1[CN_FES_CharArray64]; //< 字符串类型预留参数
int iDevType; //2020-03-11 thxiao 整数设备类型一般为采集串口RTU使用避免判断字符串优化查找时间
int WaveEnable; //录波使能 1是 0
SModbusCmdBuf ModbusCmdBuf;
}SFesRtuParam;
//FesSimServer
typedef struct
{
int RefreshFlag; //数据刷新标志为1事件写入缓冲区 0不写入缓存区
int Overflow; //事件溢出标志 1溢出 0正常
int Readx;
int Writex;
SFesSoeEvent Event[CN_FesSimSoeEventMaxBufSize];
}SFesSimServerSoeEventBuf;
typedef struct
{
int RefreshFlag; //数据刷新标志为1事件写入缓冲区 0不写入缓存区
int Overflow; //事件溢出标志 1溢出 0正常
int Readx;
int Writex;
SFesRtuEvent Event[CN_FesSimRtuEventMaxBufSize];
}SFesSimServerRtuEventBuf;
typedef struct
{
int RefreshFlag; //数据刷新标志为1事件写入缓冲区 0不写入缓存区
int Overflow; //事件溢出标志 1溢出 0正常
int Readx;
int Writex;
SFesChanEvent Event[CN_FesSimChanEventMaxBufSize];
}SFesSimServerChanEventBuf;
typedef struct{
int RxNum; //
int TxNum; //
int ErrNum;
}SFesChanStatistics;
typedef struct{
char FrameType; //0:data 1:string
char DataType;
short FrameLen;
uint64 Time; //1970-01-01 00:00 至今的毫秒数
byte Data[CN_SFesSimComFrameMaxLen];
}SFesChanFrame;
typedef struct
{
int RefreshFlag; //数据刷新标志为1事件写入缓冲区 0不写入缓存区
int ChanNo;
int Overflow; //事件溢出标志 1溢出 0正常
int RxNum; //
int TxNum; //
int ErrNum;
int Readx;
int Writex;
SFesChanFrame Frame[CN_FesSimChanMonMaxBufSize];
}SFesSimServerChanMonBuf;
//网络通信事件队列结构,通信层和应用层互相交互
const int CN_FesNetEvent_Waitting_Connect = 1;
const int CN_FesNetEvent_Connect = 2;
const int CN_FesNetEvent_Disconnect = 3;
typedef struct
{
uint64 Time;
int EventType;
}SFesNetEvent;
//应用层事件请求,应用层和通信层互相交互
const int CN_FesAppNetEvent_CloseSock = 1;
const int CN_FesAppNetEvent_ReopenChan = 2;
typedef struct
{
uint64 Time;
int EventType;
}SFesAppNetEvent;
//设备信息表
typedef struct{
int CfgSize;
int DataSize;
int Year;
int Mon;
int Day;
int Hour;
int Min;
//int Sec;
int mSec; //sec*1000+msec;
}SFesRtuWareform;
typedef struct{
int DevId;
char TagName[CN_FesMaxTagSize]; //2020-12-17 thxiao 设备标签名
char DevDesc[CN_FesMaxNameSize];
char szResParam1[CN_FES_CharArray64]; //< 字符串类型预留参数
int ChildDevId;
SFesRtuWareform Record;
char LuboPath[CN_FesMaxDescSize];//2019-06-10 thxiao 增加录波路径,方便保存录波按“车站\设备”保存
char AlarmLuboPath[CN_FesMaxDescSize];//2019-06-10 thxiao 增加相对告警录波路径,“车站\设备”
}SFesRtuDevParam;
typedef struct{
int RtuNo;
int DevNum;
SFesRtuDevParam *pDev;
//int WfDataLen; //录波数据长度
//byte *pWfData; //录波数据缓存区
//int RecvDataIndex; //录波数据保存当前数据长度
}SFesRtuDevInfo;
//增加一个数据初始化筛选转发表的采集RTU号
typedef struct {
int CollectRtuNum;
int CollectRtuCount;
int CollectRtuNo[CN_FesFwMaxCollectRtuNum];
}SFesCollectRtu;
//转发规约的接口结构
typedef struct {
int RemoteNo; //远动号
int RtuNo; //RTU号
int PointNo;
uint32 Status;
float Value;
uint64 time;
}SFesFwChgAi;
typedef struct {
int RemoteNo; //远动号
int RtuNo; //RTU号
int PointNo;
uint32 Status;
int Value;
uint64 time;
}SFesFwChgDi;
typedef struct{
int RemoteNo; //远动号
int RtuNo; //RTU号
int PointNo;
uint32 Status; //遥测信状态
int Value; //点值
uint64 time; //1970-01-01 00:00 至今的毫秒数
int FaultNum; //故障值个数
int FaultValTag [CN_FesMaxFaultNum];//表明以下数值的来源
float FaultVal[CN_FesMaxFaultNum];
}SFesFwSoeEvent;
typedef struct {
int RemoteNo; //远动号
int RtuNo; //RTU号
int PointNo;
uint32 Status;
double Value;
uint64 time;
}SFesFwChgAcc;
typedef struct {
int RemoteNo; //远动号
int RtuNo; //RTU号
int PointNo;
uint32 Status;
int Value;
uint64 time;
}SFesFwChgMi;
typedef struct {
int SrcSubSystem; //所属专业
int SrcRtuNo; //RTU号
int SrcPointNo;
uint32 Status;
}SFesFwChgDo;
typedef struct _SFesFwDoRespCmd{
int FwRtuNo; //RTU号
int FwPointNo; //遥控点号
int retStatus; //返回状态
int CtrlActType; //控制类型 选择、取消、执行,
uint64 Param1;
uint64 Param2;
float fParam;
_SFesFwDoRespCmd()
{
FwRtuNo=0;
FwPointNo = 0; //遥控点号
retStatus = 0; //返回状态
CtrlActType = 0; //控制类型 选择、取消、执行,
Param1 = 0;
Param2 = 0;
fParam = 0;
}
}SFesFwDoRespCmd;
typedef struct _SFesFwAoRespCmd{
int FwRtuNo; //RTU号
int FwPointNo; //遥控点号
int retStatus; //返回状态
uint64 Param1;
uint64 Param2;
float fParam;
int CtrlActType; //控制类型 选择、取消、执行,
_SFesFwAoRespCmd()
{
FwRtuNo =0;
FwPointNo =0;
retStatus = 0;
CtrlActType = 0; //控制类型 选择、取消、执行,
Param1 = 0;
Param2 = 0;
fParam = 0;
}
}SFesFwAoRespCmd;
typedef struct _SFesFwMoRespCmd {
int FwRtuNo; //RTU号
int FwPointNo; //遥控点号
int retStatus; //返回状态
uint64 Param1;
uint64 Param2;
float fParam;
int CtrlActType; //控制类型 选择、取消、执行,
_SFesFwMoRespCmd()
{
FwRtuNo =0;
FwPointNo = 0; //遥控点号
retStatus = 0;
CtrlActType = 0; //控制类型 选择、取消、执行,
Param1 = 0;
Param2 = 0;
fParam = 0;
}
}SFesFwMoRespCmd;
//201-03-011 thxiao 增加规约映射表,数据按规约点的顺序排列.方便工程在完成的情况下,现场工程又修改了点顺序。
typedef struct {
int Used;
int PIndex; //use param1.
int PointNo;
int DevId; //2021-03-03 thxiao 增加DevId
int Param2; //规约参数,每种协议含义不相同。 如modbus FunNo
int Param3; //规约参数,每种协议含义不相同。 如modbus DataAddress
int Param4; //规约参数,每种协议含义不相同。 如modbus InfoNo
//2021-08-04 thxiao added
int Param5; //规约参数,每种协议含义不相同。
int Param6; //规约参数,每种协议含义不相同。
}SFesAiIndex;
typedef struct {
int Used;
int PIndex; //use param1.
int PointNo;
int DevId; //2021-03-03 thxiao 增加DevId
int Param2; //规约参数,每种协议含义不相同。 如modbus FunNo
int Param3; //规约参数,每种协议含义不相同。 如modbus DataAddress
int Param4; //规约参数,每种协议含义不相同。 如modbus InfoNo
//2021-08-04 thxiao added
int Param5; //规约参数,每种协议含义不相同。
int Param6; //规约参数,每种协议含义不相同。
}SFesDiIndex;
typedef struct {
int Used;
int PIndex; //use param1.
int PointNo;
int DevId; //2021-03-03 thxiao 增加DevId
int Param2; //规约参数,每种协议含义不相同。 如modbus FunNo
int Param3; //规约参数,每种协议含义不相同。 如modbus DataAddress
int Param4; //规约参数,每种协议含义不相同。 如modbus InfoNo
//2021-08-04 thxiao added
int Param5; //规约参数,每种协议含义不相同。
int Param6; //规约参数,每种协议含义不相同。
}SFesAccIndex;
typedef struct {
int Used;
int PIndex; //use param1.
int PointNo;
int DevId; //2021-03-03 thxiao 增加DevId
int Param2; //规约参数,每种协议含义不相同。 如modbus FunNo
int Param3; //规约参数,每种协议含义不相同。 如modbus DataAddress
int Param4; //规约参数,每种协议含义不相同。 如modbus InfoNo
//2021-08-04 thxiao added
int Param5; //规约参数,每种协议含义不相同。
int Param6; //规约参数,每种协议含义不相同。
}SFesMiIndex;
typedef struct {
int Used;
int PIndex; //use param1.
int PointNo;
int DevId; //2021-03-03 thxiao 增加DevId
int Param2; //规约参数,每种协议含义不相同。 如modbus FunNo
int Param3; //规约参数,每种协议含义不相同。 如modbus DataAddress
int Param4; //规约参数,每种协议含义不相同。 如modbus InfoNo
//2021-08-04 thxiao added
int Param5; //规约参数,每种协议含义不相同。
int Param6; //规约参数,每种协议含义不相同。
}SFesDoIndex;
typedef struct {
int Used;
int PIndex; //use param1.
int PointNo;
int DevId; //2021-03-03 thxiao 增加DevId
int Param2; //规约参数,每种协议含义相同。 如modbus FunNo
int Param3; //规约参数,每种协议含义相同。 如modbus DataAddress
int Param4; //规约参数,每种协议含义相同。 如modbus InfoNo
//2021-08-04 thxiao added
int Param5; //规约参数,每种协议含义不相同。
int Param6; //规约参数,每种协议含义不相同。
}SFesAoIndex;
typedef struct {
int Used;
int PIndex; //use param1.
int PointNo;
int DevId; //2021-03-03 thxiao 增加DevId
int Param2; //规约参数,每种协议含义不相同。 如modbus FunNo
int Param3; //规约参数,每种协议含义不相同。 如modbus DataAddress
int Param4; //规约参数,每种协议含义不相同。 如modbus InfoNo
//2021-08-04 thxiao added
int Param5; //规约参数,每种协议含义不相同。
int Param6; //规约参数,每种协议含义不相同。
}SFesMoIndex;
typedef struct {
int Used;
int PIndex; //use param1.
int PointNo;
int DevId; //2021-03-03 thxiao 增加DevId
int Param2; //规约参数,每种协议含义不相同。 如modbus FunNo
int Param3; //规约参数,每种协议含义不相同。 如modbus DataAddress
int Param4; //规约参数,每种协议含义不相同。 如modbus InfoNo
//2021-08-04 thxiao added
int Param5; //规约参数,每种协议含义不相同。
int Param6; //规约参数,每种协议含义不相同。
}SFesDzIndex;
//车站
typedef struct {
int nLocationId;//车站
char LocationDesc[CN_FesMaxDescSize];//2019-06-05 thxiao 车站描述
}SFesLocation;
/********************************************************************************
//转发公共数据
*********************************************************************************/
typedef struct _SFesFwPubAi {
int SrcLocationID; //点所属厂站
int SrcSubSystem; //点所属专业
char DPTagName[CN_FesMaxTagSize]; //后台标签名
int FesRtuNo; //采集rtu号
int SrcPointNo; //采集点号
float Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
int FwMapNum; //转发映射个数
SFesFwMapping FwMapping[CN_Fes_Fw_MaxMapping];//对应的转发点号,快速找到转发点
_SFesFwPubAi()
{
SrcLocationID = 0;
SrcSubSystem = 0;
memset(DPTagName, 0, CN_FesMaxTagSize);
FesRtuNo = 0;
SrcPointNo = 0;
Value = 0;
Status = 0;
time = 0;
FwMapNum = 0;
memset(&FwMapping[0], 0, sizeof(SFesFwMapping)*CN_Fes_Fw_MaxMapping);
}
}SFesFwPubAi;
typedef struct _SFesFwPubDi {
int SrcLocationID; //点所属厂站
int SrcSubSystem; //点所属专业
char DPTagName[CN_FesMaxTagSize]; //后台标签名
int FesRtuNo; //采集rtu号
int SrcPointNo; //采集点号/DP点号
int Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
short PointType; //0:单点 1双点
short FwMapNum; //转发映射个数
SFesFwMapping FwMapping[CN_Fes_Fw_MaxMapping];//对应的转发点号,快速找到转发点
_SFesFwPubDi()
{
PointType = 0;
SrcLocationID = 0;
SrcSubSystem = 0;
memset(DPTagName, 0, CN_FesMaxTagSize);
FesRtuNo = 0;
SrcPointNo = 0;
Value = 0;
Status = 0;
time = 0;
FwMapNum = 0;
memset(&FwMapping[0], 0, sizeof(SFesFwMapping)*CN_Fes_Fw_MaxMapping);
}
}SFesFwPubDi;
typedef struct _SFesFwPubAcc {
int SrcLocationID; //点所属厂站
int SrcSubSystem; //点所属专业
char DPTagName[CN_FesMaxTagSize]; //后台标签名
int FesRtuNo; //采集rtu号
int SrcPointNo; //采集点号
double Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
int FwMapNum; //转发映射个数
SFesFwMapping FwMapping[CN_Fes_Fw_MaxMapping];//对应的转发点号,快速找到转发点
_SFesFwPubAcc()
{
SrcLocationID = 0;
SrcSubSystem = 0;
memset(DPTagName, 0, CN_FesMaxTagSize);
FesRtuNo = 0;
SrcPointNo = 0;
Value = 0;
Status = 0;
time = 0;
FwMapNum = 0;
memset(&FwMapping[0], 0, sizeof(SFesFwMapping)*CN_Fes_Fw_MaxMapping);
}
}SFesFwPubAcc;
typedef struct _SFesFwPubMi {
int SrcLocationID; //点所属厂站
int SrcSubSystem; //点所属专业
char DPTagName[CN_FesMaxTagSize]; //后台标签名
int FesRtuNo; //采集rtu号
int SrcPointNo; //采集点号
int Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
int FwMapNum; //转发映射个数
SFesFwMapping FwMapping[CN_Fes_Fw_MaxMapping];//对应的转发点号,快速找到转发点
_SFesFwPubMi()
{
SrcLocationID = 0;
SrcSubSystem = 0;
memset(DPTagName, 0, CN_FesMaxTagSize);
FesRtuNo = 0;
SrcPointNo = 0;
Value = 0;
Status = 0;
time = 0;
FwMapNum = 0;
memset(&FwMapping[0], 0, sizeof(SFesFwMapping)*CN_Fes_Fw_MaxMapping);
}
}SFesFwPubMi;
typedef struct _SFesFwPubDo {
int SrcLocationID; //点所属厂站
int SrcSubSystem; //点所属专业
int FesRtuNo; //采集rtu号
int SrcPointNo; //采集点号/DP点号
uint32 Status;
_SFesFwPubDo()
{
SrcLocationID = 0;
SrcSubSystem = 0;
FesRtuNo = 0;
SrcPointNo = 0;
Status = 0;
}
}SFesFwPubDo;
typedef struct _SFesFwDoBusCmd {
int FwSubSystem; //转发专业
int FwRtuNo; //转发RTU号
int FwPointNo; //转发点号
int SubSystem; //源专业
int RtuNo; //源RTU号
int PointID; //源点号
int retStatus; //返回状态
int CtrlActType; //控制类型 选择、取消、执行,
int iValue; //目标值(DO、MO)
uint64 Param1;
uint64 Param2;
float fParam;
_SFesFwDoBusCmd()
{
FwSubSystem = 0;
FwRtuNo = 0;
FwPointNo = 0;
RtuNo = 0;
PointID = 0;
SubSystem = 0;
retStatus = 0; //返回状态
CtrlActType = 0; //控制类型 选择、取消、执行,
iValue = 0;
Param1 = 0;
Param2 = 0;
fParam = 0;
}
}SFesFwDoBusCmd;
typedef struct _SFesFwAoBusCmd {
int FwSubSystem; //转发专业
int FwRtuNo; //转发RTU号
int FwPointNo; //转发点号
int SubSystem; //源专业
int RtuNo; //源RTU号
int PointID; //源点号
int retStatus; //返回状态
int CtrlActType; //控制类型 选择、取消、执行,
float fValue; //目标值(AO)
uint64 Param1;
uint64 Param2;
float fParam;
_SFesFwAoBusCmd()
{
FwSubSystem = 0;
FwRtuNo = 0;
FwPointNo = 0;
RtuNo = 0;
PointID = 0;
SubSystem = 0;
retStatus = 0;
CtrlActType = 0; //控制类型 选择、取消、执行,
fValue = 0;
Param1 = 0;
Param2 = 0;
fParam = 0;
}
}SFesFwAoBusCmd;
typedef struct _SFesFwMoBusCmd {
int FwSubSystem; //转发专业
int FwRtuNo; //转发RTU号
int FwPointNo; //转发点号
int SubSystem; //源专业
int RtuNo; //源RTU号
int PointID; //源点号
int retStatus; //返回状态
int CtrlActType; //控制类型 选择、取消、执行,
int iValue; //目标值(DO、MO)
uint64 Param1;
uint64 Param2;
float fParam;
_SFesFwMoBusCmd()
{
FwSubSystem = 0;
FwRtuNo = 0;
FwPointNo = 0;
RtuNo = 0;
PointID = 0;
SubSystem = 0;
retStatus = 0;
CtrlActType = 0; //控制类型 选择、取消、执行,
iValue = 0;
Param1 = 0;
Param2 = 0;
fParam = 0;
}
}SFesFwMoBusCmd;
typedef struct {
float Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
}SFesFwAiValue;
typedef struct {
int Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
}SFesFwDiValue;
typedef struct {
double Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
}SFesFwAccValue;
typedef struct {
int Value;
uint32 Status;
uint64 time; //1970-01-01 00:00 至今的毫秒数
}SFesFwMiValue;
//2020-10-15 thxiao 虚拟数据结构
typedef struct {
char PointTag[CN_FesMaxTagSize]; //Point Tag
char RtuTag[CN_FesMaxTagSize]; //RTU Tag
int PointType; //DO:5 AO:6
int PointNo;
float Value;
uint64 time; //1970-01-01 00:00 至今的毫秒数
}SFesVirtualValue;
//2021-05-25 thiao 增加字符型的SOE
const int CN_FesSoeStrEventDecsLen = 64;
typedef struct {
int FaultValTag;
char FaultValueDecs[CN_FesSoeStrEventDecsLen];
}SFesSoeStrEventDesc;
typedef struct _SFesSoeStrEvent {
char TableName[CN_FesMaxTableNameSize];
char ColumnName[CN_FesMaxColumnNameSize];
char TagName[CN_FesMaxTagSize];
uint32 Status; //遥测信状态
int Value; //点值
uint64 time; //1970-01-01 00:00 至今的毫秒数
vector<SFesSoeStrEventDesc> FaultStrVal;
int RtuNo; //RTU号
int PointNo;
_SFesSoeStrEvent(){
memset(TableName,0,CN_FesMaxTableNameSize);
memset(ColumnName, 0, CN_FesMaxColumnNameSize);
memset(TagName, 0, CN_FesMaxTagSize);
Status = 0;
Value = 0;
time = 0;
RtuNo = 0;
PointNo = 0;
}
}SFesSoeStrEvent;