📄 datadef.h
字号:
/***********************************************************/
/* 商业化运营系统数据结构 */
/* */
/* 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 + -