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

📄 datadef.h

📁 这是一个在正实际应用当中运行的电力监控系统软件源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
/***********************************************************/
/*                商业化运营系统数据结构                    */
/*                                                         */
/*                       1998.3                            */
/***********************************************************/
#include <owl.h>

#ifndef _DATADEFH
#define _DATADEFH

//-------------------------------------------------------------------------//
// BIT DEFINE 
#define bit0    0x1
#define bit1    0x2
#define bit2    0x4
#define bit3    0x8
#define bit4    0x10
#define bit5    0x20
#define bit6    0x40
#define bit7    0x80
#define bit8    0x100
#define bit9    0x200
#define bit10   0x400
#define bit11   0x800
#define bit12   0x1000
#define bit13   0x2000
#define bit14   0x4000
#define bit15   0x8000

#define bit16   0x10000l
#define bit17   0x20000l 
#define bit18   0x40000l
#define bit19   0x80000l 
#define bit20   0x100000l
#define bit21   0x200000l 
#define bit22   0x400000l
#define bit23   0x800000l 
#define bit24   0x1000000l
#define bit25   0x2000000l 
#define bit26   0x4000000l
#define bit27   0x8000000l 
#define bit28   0x10000000l
#define bit29   0x20000000l 
#define bit30   0x40000000l
#define bit31   0x80000000l

#define allminutes (24*60)
//-------------------------------------------------------------------------//
// 1. 系统参数:

_CLASSDEF (SYSTEMPARA)
class SYSTEMPARA
{
  public:
    WORD  UserNum;           // 用户总数
	WORD  CurveNum;			 // 曲线总数
    BYTE  PlanCurveType;     // 计划曲线设置方式:人工置入=0 / 上级下发=1
    BYTE  PlanCurveTime;     // 计划曲线密度,缺省 =15分钟 ,每天96点
    BYTE  sdDensity;         // 时段密度,缺省 =15分钟 ,每天96点
    BYTE  RealCurveTime;     // 实时曲线密度,缺省 =5分钟
    BYTE  HistoryCurveTime;  // 历史曲线密度,缺省 =5分钟
    float Coe1;              // 奖电量系数,缺省 =1.0
    float Coe2;              // 罚电量系数,缺省 =1.0
    BYTE  JFTime;            // 电量积分时间,缺省 =1分钟
    float FUper;             // 周波上限,缺省 =50.2
    float FLower;            // 周波下限,缺省 =49.8
    WORD  FRecvNo;           // 周波接收序号
    BYTE  SWt1;              // 上网频率不正常的时间段,缺省 =2分钟
    float SWpercent;         // 实时分时发电厂奖励电量百分比,缺省 =40%
    BYTE  XWt1;              // 下网频率不正常的时间段,缺省 =2分钟
    float XWpercent1;        // 曲线合格率日累计基准,缺省 =85%
    float XWpercent2;        // 超过/低于合格率基准的每个百分比奖罚的日电量的系数,缺省 =0.05%
    float XWpercent3;        // 最大受罚量,缺省 =2%
}; 
extern SYSTEMPARA SystemPara;

// 时段参数

typedef struct SDDEF
{
 char  Sd;
 float Dj;
};

extern SDDEF *SdPtr;
/*
extern char *SdTypePtr;
//extern float Price[];
extern float *SdPricePtr;
*/
#define ALLSDTYPE      4     // 所有时段类型
#define SD_JIANFENG    1     // 尖峰
#define SD_GAOFENG     2     // 高峰
#define SD_YAOHE       3     // 腰荷
#define SD_DIGU        4     // 低谷

// 时段设置文件头:
#define   SDFILEHEADSIZE  64
typedef struct SDFILEHEAD
{
    char     MyFileFlag[32];              // 文件标志
    int      RcdNums;                     // 记录数
    long     RcdLen;                      // 记录长度
    char     Density;                     // 时段密度(分钟)
    char     Empty[SDFILEHEADSIZE-39];    // 保留
};  

//+++++++++++++++++++++++++++++++++++++++

extern int  GetHisSdDensity();
extern BOOL ReadSDValue(SDDEF *sdv);
extern BOOL WriteSDValue(SDDEF *sdv);
//-------------------------------------------------------------------------//
// 2. 用户参数:

_CLASSDEF(USER)
class USER
{
   public:
     char UserName[32];     // 用户名
     long UserAttr;         // 属性
                            //   bit0: 上网电量=1 / 下网电量=0
                            //   bit1: 实时分时电价发电厂=1 / 否=0
                            //   bit2 - bit15: 待定
     int   ReceiveNo;       // 接收序号
     float RealValue;       // 实时值
     float Coe;             // 系数
     BYTE  TimeLimit;       // 电网频率正常时,实际负荷偏离计划曲线持续时间限值
     float UperValue1;      // 计划曲线允许偏差限值%
     float LowerValue1;     // 计划曲线允许偏差下限值%
     float JFLimit;         // 计划曲线尖峰电量比限值%
     float DGLimit;         // 计划曲线低谷电量比限值%
};

extern HGLOBAL hUserMem;    // 用户定义区句柄

extern HGLOBAL hYcDataMem;  // 存放接收遥测数据的缓冲区句柄
extern float *RealDataBuf;  // 用户实时数据区指针

// 用户参数文件头:
#define   USERFILEHEADSIZE  64
typedef struct USERFILEHEAD
{
    char     MyFileFlag[32];              // 文件标志
    int      RcdNums;                     // 记录数
    long     RcdLen;                      // 记录长度
    char     Empty[USERFILEHEADSIZE-38];  // 保留
};  

//-------------------------------------------------------------------------//
//3. 历史文档存储:
//       需存盘的历史数据按照每天一个文件进行存储, 文件名为XXXXXX.HIS, 
//   其中: XXXXXX为 XX年XX月XX日.    
   
// 文件头:
#define   HEADSIZE   256           // 文件头长度
typedef struct FILEHEAD
{
    char     MyFileFlag[32];       // 文件标志
    int      RcdNums;              // 用户个数
    char     Density;              // 存盘密度
    long     RcdLen;               // 记录长度
    long     FileLen;              // 文件长度
    char     Empty[HEADSIZE-44];  // 保留
};

typedef struct SAVEDISKTIME {
	int		year;
	char	mon;
	char	day;
	char	hour;
	char	minute;
};

//NEW STRUCT
typedef struct RESAULT
{
	BYTE	serial;			//用户号
	BYTE	type;			//结构类型
							// 1 ---》 奖罚
							// 2 ---》 统计
	union {
		struct {
			BYTE	kind;			// 1---》周波越限,负荷越限
									// 2---》周波正常,负荷越限
			float	value;          //奖罚值:[正--》奖]
            						//		  [负--》罚]
			SAVEDISKTIME begin;		//奖罚启动时间
			SAVEDISKTIME end;		//奖罚结束时间
		}jf;		//奖罚结构
		struct {
  	        int	  hg_points;     	// 合格点数
			float JFDensity;		// 计划曲线尖峰电量比
			float DGDensity;        // 计划曲线低谷电量比
			float DayJKwh;          // 奖电量日累计
			float DayFKwh;          // 罚电量日累计
			float DayKwh;			// 积分日电量
		}tj;		//统计结构
	};
};

//月统计
typedef struct MONTHTJ {
	int		hg_points;	//合格点数
	int		hg_days;	//参与合格率运算的天数
	float	MonthKwh;	//月电量
	float	JFKwh;		//奖罚电量
};

typedef struct TJFILEHEAD
{
    char    MyFileFlag[32];              // 文件标志
	int		RcdLen;
	int		RcdNums;
	char    Empty[38];  				  // 保留
};  

//NEW FUNCTION
//从历史曲线中获取当时用户的个数。
//
extern int	GetHisUserNum(struct date *dt);

//入口参数:年,月,日。
//取得日统计文件的[记录个数]
extern int	GetDTJNums(struct date *dt);

//返回某用户的统计结果及奖罚记录的个数。
//第一条记录为统计结果。
extern int GetSingleDTJ(int userno, struct date *dt, RESAULT **buf);

//读所有用户的统计记录
//buf的大小按当前用户数申请,在申请后清零。
extern int GetAllDTJ(struct date *dt, RESAULT *buf);

//buf的大小按当前用户数申请,在申请后清零。
extern int GetAllMTJ(struct date *dt, MONTHTJ *buf);

//入口参数:年,月,日。
//记录缓冲区
//读取日统计文件的记录。
extern int	ReadDTJFile(struct date *dt, RESAULT *buf);

//入口:年,月,日。
//		记录个数
//		记录缓冲区
//从文件中读取某天的统计记录。
extern int	WriteDTJFile(struct date *dt, int count, RESAULT *buf);

//-------------------------------------------------------------------------//
//4. 串行口通信参数:

#define TOTALCOMM 4

typedef struct COMINF
{
    BYTE CommNo;            // 串行口序号
	BYTE Baud;              // 波特率: 300,600,1200,2400,4800,9600,14400,19200
    BYTE Data;              // 数据位: 5, 6, 7, 8
	BYTE Stop;              // 停止位: 1, 1.5, 2
	BYTE Flow;              // 流控制: XON/XOFF, CTS/RTS, 无
	BYTE Parity;            // 校验类型: 无, 偶, 奇
    BYTE ConnectStyle;      // 连接方式: 直接连接, 电话连接
	UINT MaxErrorNum;       // 最大累计错误
	UINT MaxWaitTime;       // 超时等待时间
	UINT MaxRepeatCount;    // 重发次数
	int  cnReceive;         // 消息控制,接收
	int  cnTransmit;	    // 消息控制,发送
	BYTE ProtocolNo;        // 规约类型
    BYTE synType;           // 同步字: EB90, D709
    WORD RxBufSize;         // 串行口接收缓冲区大小256, 512,768,1024
    WORD TxBufSize;         // 串行口发送缓冲区大小

	BOOL      ValidFlag;         // 串行口有效标志
    WORD      Status;            // 当前处理状态;同步字/控制字/信息字
    WORD      RxReadPt;          // 接收区读指针
    WORD      RxWritePt;         // 接收区写指针
    HGLOBAL   hRxMem;            // 接收区句柄
    WORD      TxReadPt;          // 发送区读指针
    WORD      TxWritePt;         // 发送区写指针
    HGLOBAL   hTxMem;            // 发送区句柄 
};
extern COMINF CommInf[];


// 串行口参数的存盘文件头:
//#define   COMMFILEHEADSIZE  64
//typedef struct COMMFILEHEAD
//{
//    char     MyFileFlag[32];              // 文件标志
//    int      RcdNums;                     // 记录数
//    long     RcdLen;                      // 记录长度
//    char     Empty[COMMFILEHEADSIZE-38];  // 保留
//};

#define	 DIRECTCONNECT	    0      // 直接连接
#define  CONNECTTELEPHONE	1      // 电话连接

#define  SyncR              bit0   // 收到同步字标志
#define  CtrlW              bit1   // 收到控制字标志
#define  InforW             bit2   // 收到信息字标志

// 以下是对规约的定义:
#ifdef __cplusplus
extern "C"
{
    int FAR PASCAL RxProc(HWND, COMINF *);
    int FAR PASCAL TxProc(HWND, COMINF *);
};
#endif
// 接收数据处理函数类型定义
typedef int (FAR PASCAL *RXPROC)(HWND, COMINF *);
// 发送数据处理函数类型定义
typedef int (FAR PASCAL *TXPROC)(HWND, COMINF *);

#define  PROTOMAXNUM        8
typedef struct
{
    HINSTANCE hDLLInst;
    RXPROC    RxProc;
    TXPROC    TxProc;
    char      ProtoName[32];
    char      DllName[32];
} PROTOCOL;

extern PROTOCOL Protocol[];

//-------------------------------------------------------------------------//
//5. 网络通信参数:

#define NETCMDSIZE      32

#define CMDHANDLEMAXNUM 32                             //读网络命令句柄最大个数
#define NETCMDMAXNUM    64                             //网络命令最大个数
#define NETCMDBUFLEN    (NETCMDMAXNUM * NETCMDSIZE)    //网络命令区长度
#define NETDATABUFLEN   (64L*1024L)                    //网络数据区长度

class NETCOMMAND
{
  public:
    BYTE    DestID;                    // 目的机号
    BYTE    SourceID;                  // 源机号
    BYTE    IsRecCmd;                  // 收到标志
                                       //   收到的网络命令: TRUE
                                       //   发送上网的命令: FALSE
    WORD    CmdCode;                   // 命令码

⌨️ 快捷键说明

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