⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 define.h

📁 这是一个变电站的监控程序
💻 H
字号:
#ifndef __DEFINE__H
#define __DEFINE__H
//////////////////////////////////////////////////////////////////
// 系统容量定义
#define MAX_CHANNEL_NUM 64
#define MAX_RTU_NUM     64

#define TX_BUF_LEN    1024
#define REC_BUF_LEN   4096

#define RTU_MAX_YC_NUM  256
#define RTU_MAX_YX_NUM  512
#define RTU_MAX_YXW_NUM 32
#define RTU_MAX_SOE_NUM 1024
#define RTU_MAX_KWH_NUM 128
#define RTU_MAX_WATER_NUM 6

#define RTU_MAX_CDT_INFOWORD_NUM 100

#define MAX_EVENT_NUM    1024
#define EVENT_LEN	 	 	 16
#define NET_RECBUF_LEN	 	 	 1024
#define NET_TRANBUF_LEN	 	 	 1024
#define NET_RECBUF_NUM	 	 	 10
#define NET_TRANBUF_NUM	 	 	 1
#define DATAGRAM_LEN			 512

////////////////////网络命令类型定义/////////////////////////////////	 	 	 
#define 	REGISTER		0
#define 	SST				1
#define 	YXDRF			2
#define 	YCDRF			3
#define 	WTRDRF			4
#define 	FRQDRF			5
#define 	SOE				6
#define 	KWHDRF			7
#define 	YK				8
#define 	YT				9
#define 	FERTPARA		10
#define 	CALLPARA		11
#define 	SYSSTATE		12
#define 	SENDRTUPARA			13
#define 	RTUSTATE		14
#define 	ATB				15
#define 	SETCLK			16
#define 	SETIN			17
#define 	SETPRTIME		18
#define 	PRTABLE			19
#define 	COPYSCREEN		20
#define 	YXS				21
#define 	PDATP			23
#define 	MODID			24
#define 	CANCEL			25
#define 	SENDPARA		26
#define		FRESHTIME		27
#define		LINEREPAIR		28
#define		MODQXDATA		29
#define		MODSAVEYCDATA	30
#define		MODSAVEKWHDATA	31
#define		PLREPLACE		32
#define		RTULOCK			33
#define		SENDNETEVENT	34
#define		SENDSYSPARA		35
#define		FERTYXPARA		36
#define		CHANNELPARA		37
#define		ZFYCPARA		38
#define		ZFYXPARA		39
#define		ZFKWHPARA		40
#define		COMMSTATE		41
#define     RET             43
#define		SENDZFYC		48
#define		SENDZFYX		49
#define		SENDZFKWH		50


//////////////////////////////
typedef struct
{
	SYSTEMTIME	SoeTime;
	//sc-1801
	BYTE CaoNo;
	BYTE ZuNo;
	BYTE ChangeFlag;//6点
	BYTE YxValue;//6点
	//CDT
	WORD YxNo;
	BYTE YxState;
}RtuSoeData;

class RTU
{
public:
	char	ModifyFlag;		//修改标志
	BYTE    Flag;				//使用标志
								//bit0:0.未使用 1.使用
								//bit1.1.封锁
	BYTE	Attr;				//D0=0--YC BCD
								//	 1--YC BINARY
								//D1=0--KWH BCD
								//	 1--KWH BINARY
	BYTE	RtuChNo;			//RTU对应的通道
	WORD	YcNum;			//YC
	WORD	YxNum;        //YX
	WORD	KwhNum;        //KWH
	BYTE	Addr;

	char    Name[20];		//RTU名字
	BYTE	SynWord[7];//byte0: 0 select 1 custom , byte01-06 SynWord;(CDT)
	BYTE	Protocol;


	BYTE	RTUStatus;//bit6: err(1)/true(0)
    DWORD   RTU_CDTStatus;

//专门用于转发RTU
	RtuSoeData SoeEvent[64];
	BYTE	SoePtr;
	BYTE    SoeSendPtr;
//
	float   Water[RTU_MAX_WATER_NUM];//水位
	float   Freq[2];
	float   YcBase[RTU_MAX_YC_NUM];//zf use
	float	YcValue[RTU_MAX_YC_NUM];// Modify WORD to float on 2000.3.6
	float   YcValueOld[RTU_MAX_YC_NUM];//ZF USE
	BYTE    YcChangeFlag[RTU_MAX_YC_NUM];//zf use
	BYTE	YxValue[RTU_MAX_YX_NUM];
	BYTE	YxValueOld[RTU_MAX_YX_NUM];//ZF USE
	BYTE    YxChangeFlag[RTU_MAX_YX_NUM];//zf use
	DWORD	KwhValue[RTU_MAX_KWH_NUM];
	WORD	YxwNum;//
	BYTE	FreqNum; //      //FREQUENCE
	BYTE	WaterNum; //     //WATER LEVEL
	WORD	OtherNum;
	int		SoeNum;
	BYTE	SoeOnYxFlag;//0 否 1 是

	bool	bReceiveCanDisp;//接收可显示
	bool	bSendCanDisp;	//发送可显示
    BYTE	ReSendTimeFlag;//重发时间到
	BYTE	AnswerWaitTime;//等待回答命令时间(s)
	bool	bWorking;//是否在工作
	bool	bFault;//是否故障
	char	TimeForbit;//RTU走时不准
	WORD	RecFullYx;//是否收到YX全数据;
	BYTE	NoDataTime;//无数据时间(s)
	DWORD	FaultTime;//故障时间(s)
	DWORD   ErrFrameSum;      //累计BCH校验错误次数
	DWORD	RecFrameSum;	  //累计收到的帧数
	DWORD   ErrFrameSumOld;      //累计BCH校验错误次数
	DWORD	RecFrameSumOld;	  //累计收到的帧数
	float   ErrRate[25];//24-当前误码率;0-23整点时计算的本小时内误码率

	BYTE	RecBuf[REC_BUF_LEN];
	BYTE	TXBuf[TX_BUF_LEN];
	int		RecBufPtr;
	int		TXBufPtr;
	int		RecLen;
	int		TXLen;
	int		RecSum;
	int		TXSum;

	BYTE	WaitTime;
	BYTE	DeadArea;
	BYTE	ProtocolStamp[10];//0:YCStart,1:YXStart,2:KWHStart,3:符号位,4:数值进制 5:高低交换
	                         //6:补码遥测,7: 变位中断,8:SOE对象号在后  9:规约号

	bool	CommandSendFlag[0x100];//是否需要发 下标为命令码
	BYTE	CurSendFrameType;//当前发送帧类别
	BYTE	RRC[16];
	
	SYSTEMTIME	CDT_CallUpSysTime;//(CDT)
	SYSTEMTIME	CDT_CurTime;//(CDT)
	DWORD	CDT_ChildTime;//(CDT)
	BYTE	CDT_SOEInfo[6];//(CDT DCF-5)SOE连续保留 SOE 的对象号 与 合分(byte 9-10)
	bool	IsWait;//是否命令发送后等待数据 (SC1801)
	bool    bRet;
};


class CHANNEL
{
public:
	bool	bWorking;
//	BOOL	ModifyFlag;		//修改标志
	BYTE    Flag;		//使用标志
	BYTE	SorA;				//同步.异步
	BYTE	Baud;           //波特率
	BYTE	WorkType;		//工作方式 0前置机 1旁听 2 RTU 3通道误码测试
	BYTE	EndBit;         //停止位
	BYTE	ParityBit;      //奇偶性
	BYTE	CheckBit;       //校验位
	BYTE	DataBit;        //数据位
	WORD	SynWord;		//同步字
	BYTE    ChRtuNo[8];	    //通道对应的RTU号
	BYTE	ChRtuNum;       //通道对应的RTU个数
	BYTE	Protocol;		//通道规约 0 CDT91  1  SC1801   2 CDT85  3 CDT85-1  4 转发CDT91 5 转发SC1801....
	WORD    ChStatus;       //通道状态
								//bit15---搜索同步字标志
								//bit14---接收一帧标志
								//bit13---第一个信息字标志
								//bit12---主站有遥控命令标志
								//bit3---连续同步字次数超限
								//bit2---连续字符无效次数超限
								//bit1---连续BCH校验错计数超限
								//bit0---通道使用

//	WORD  	ErrBchNum;		//连续BCH校验错误次数
	WORD	SynstrCount;     //连续同步字次数

	BYTE 	ReviseTimeFlag;//bit0=1:要全数据 BIT1=1:脉冲值清零 
	BYTE	FileHead[6];
	char	CurSendRtuNo;	//SC1801 Fu Lu
	BYTE	MoxaReadBuffer[REC_BUF_LEN];//从MOXA卡中读入数据的缓冲区
	WORD	MoxaStart;
	WORD	MoxaEnd;
	WORD	MoxaShowStart;
	//以下变量为通道测试专用
	time_t	StartTime;
	time_t	EndTime;
	BYTE	OnTest;// 0 no 1 yes
	ULONG	GroupCount;
	ULONG	CodeCount;
	ULONG	ErrGroupCount;
	ULONG	ErrCodeCount;
	ULONG	Err0CodeNum;
	ULONG	Err1CodeNum;
	long	TestId;
	BYTE	TestData[15];
	HANDLE  hFile;
	bool    bReInit;
};


typedef struct 
{
	HANDLE g_hThreadCDTProtocolProcess;
	HANDLE g_EventEndCDTProtocolProcess;
	
	HANDLE	g_hThreadUdpRX;
	HANDLE	g_hEndEventUdpRX;

	HANDLE	g_hThreadUdpRXProc;
	HANDLE	g_hEndEventUdpRXProc;

	HANDLE	g_hThreadNetSendFrame;
	HANDLE	g_hEndEventNetSendFrame;

	HANDLE	g_hThreadNetSendFlag;
	HANDLE	g_hEndEventNetSendFlag;

	HANDLE  g_hThreadEventPro;
	HANDLE  g_hEndEventPro;

	HANDLE	g_hThreadGpsPro;
	HANDLE	g_hEndEventGpsPro;

	HANDLE  g_hThreadChannelPro;
	HANDLE  g_hEndEventChannelPro;

	HANDLE	g_hThreadMoxaReadProc;
	HANDLE	g_hEndEventMoxaReadProc;

	HANDLE	g_hThreadMnRtuProc;
	HANDLE	g_hEndEventMnRtuProc;

	DWORD dwThreadID[10];

//	bool CDT_ReviseTimeFlag;//校正时钟时间是否到(CDT)
}RecSendThread;



class FERTEVENT
{
public:
	BYTE	cause;
	BYTE	type;
	BYTE	rtuno;
	WORD	yxno;
	BYTE	state;
//	BYTE	reserved[5];
	WORD	year;
	BYTE	month;
	BYTE	day;
	BYTE	hour;
	BYTE	minute;
	BYTE	seconds;
	BYTE	hundms;
	BYTE	ms;
	BYTE	Recday;
	BYTE	Rechour;
	BYTE	Recminute;
	BYTE	Recseconds;
	BYTE	Rechundms;
	BYTE	Recms;
};

class EVENT
{
public:
	WORD EventNum;
	WORD EventSendNum;
	FERTEVENT EventBuf[MAX_EVENT_NUM];
};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -