dbfile.h

来自「这是一个在正实际应用当中运行的电力监控系统软件源代码」· C头文件 代码 · 共 440 行

H
440
字号
/*   dbase 数据库    */

#if !defined _DBFILE_H
#define _DBFILE_H

#define DISPFIELDWIDTH 16    // 数据库每个字段显示的宽度(数据库定义每个字段为 11Byte)

typedef struct            //  数据库文件头 (32 Byte)
{
	 BYTE   FileFlag;     // 0    dbase数据库=03
	 BYTE   Year;         // 1
	 BYTE   Month;        // 2
	 BYTE   Day;          // 3
	 DWORD  RecordNum;    // 4    记录个数
	 WORD   HeaderLen;    // 8    文件头长度
	 WORD   RecordLen;    // 10   每个记录长度

	 BYTE   Reserved[20];
} DBFILEHEAD;

typedef struct                  // 字段定义  (32 Byte)
{                         
	 char   FieldName[11];      // 字段名
	 BYTE   FieldType;          // 字段类型 'C','N','B','D'
	 DWORD  FieldOffset;        // 字段在记录中的偏移位置
	 BYTE   FieldWidth;         // 字段宽度
	 BYTE   DecimalPoint;       // 小数位数

	 BYTE   Reserved[14];
} DBFIELD;
//----------------------------------------------------
// 站索引
typedef struct {
  WORD YxStart;
  WORD YcStart;
  WORD KwhStart;
  WORD EvidentNum;
} RTUINDEX;

typedef struct {
} PYXPARAM;

typedef struct {
} PYCPARAM;

typedef struct {
} PDDPARAM;

// 遥测线性变换参数
typedef struct {
  DWORD x1,x2,y1,y2;
} YCLINECOE;

//-----------------------------------------------------------
class TDbFileHead        
{
   protected:
	 DBFILEHEAD DbFileHead;
   public:
     DBFILEHEAD *GetDbFileHead() { return (DBFILEHEAD *)&DbFileHead; }
	 BYTE   GetFileFlag()  { return DbFileHead.FileFlag; }
	 BYTE   GetFileYear()  { return DbFileHead.Year; }
	 BYTE   GetFileMonth() { return DbFileHead.Month; }
	 BYTE   GetFileDay()   { return DbFileHead.Day; }
	 DWORD  GetRecordNum() { return DbFileHead.RecordNum; }
	 WORD   GetHeaderLen() { return DbFileHead.HeaderLen; }
	 WORD   GetRecordLen() { return DbFileHead.RecordLen; }
	 WORD   GetFieldNum()  { return (DbFileHead.HeaderLen-sizeof(DBFILEHEAD))/sizeof(DBFIELD); }
};

class TDbField          
{
   protected:
     DBFIELD DbField;
   public:
	 DBFIELD *GetDbField()    { return (DBFIELD *)&DbField; }
	 char   *GetFieldName()   { return DbField.FieldName; }
	 BYTE   GetFieldType()    { return DbField.FieldType; }
	 DWORD  GetFieldOffset()  { return DbField.FieldOffset; }
	 WORD   GetFieldWidth()   { return DbField.FieldWidth; }
	 WORD   GetDecimalPoint() { return DbField.DecimalPoint; }
};

class TDbFile : public TDbFileHead,public TDbField
{
	 HFILE hFile;
     char DbName[40];
   public:
	 TDbFile(char *Name);
     ~TDbFile();
	 int  dbOpenFile();
	 int  dbCloseFile();
     void dbSetDbName(char *Name);
	 int  dbGetARcd(long lRcdNo,LPSTR RcdBuf);
	 int  dbGetARcdStr(long lRcdNo,LPSTR RcdStringBuf);
};

//-----------------------------------------------------------------------
// 实时数据库类定义

//_CLASSDEF(TRealDB)
class TRealDB
{
//     char DbName[40];
	 char huge *lpDbf;
     DBFILEHEAD huge *dbfhead;
     DBFIELD huge *dbfield;
     char huge *dbrecord;
     int FieldNum;
     int dbno;

     BOOL dbGetAField(char *FieldName, DBFIELD *DBField);

   public:
	 TRealDB(char *Name);
     TRealDB(int DbNo);
     ~TRealDB();
     long dbGetRcdNum();
	 BOOL dbGetFileHead(DBFILEHEAD huge *);
     void dbGetStrField(DWORD rcdno, int fieldID, char *str);
     void dbGetStrField(DWORD rcdno, char *fieldname, char *str);
     char dbGetCharField(DWORD rcdno, int fieldID);
     char dbGetCharField(DWORD rcdno, char * fieldname);
     float dbGetNumField(DWORD rcdno, int fieldID);
     float dbGetNumField(DWORD rcdno, char * fieldname);
     int  dbGetIntField(DWORD rcdno, int fieldID);
     int  dbGetIntField(DWORD rcdno, char * fieldname);
     long dbGetLongField(DWORD rcdno, int fieldID);
     long dbGetLongField(DWORD rcdno, char *fieldname);

     void dbSetCharField(DWORD rcdno, int fieldID, char cvalue);
     void dbSetCharField(DWORD rcdno, char *fieldname, char cvalue);
     void dbSetNumField(DWORD rcdno, int fieldID, float nvalue);
     void dbSetNumField(DWORD rcdno, char *fieldname, float nvalue);
     void dbSetIntField(DWORD rcdno, int fieldID, int ivalue);
     void dbSetIntField(DWORD rcdno, char *fieldname, int ivalue);
     void dbSetLongField(DWORD rcdno, int fieldID, long lvalue);
     void dbSetLongField(DWORD rcdno, char *fieldname, long lvalue);
};

class TRtuDB : public TRealDB
{
  public:
    RTUINDEX huge *lpRtuInx;
    TRtuDB();
    ~TRtuDB();


    void GetStaName(WORD stano, char *staname);
    int  GetStaYxNum(WORD stano);
    int  GetStaYcNum(WORD stano);
    int  GetStaKwhNum(WORD stano);

    int  GetStaYxStart(WORD stano);
    int  GetStaYcStart(WORD stano);
    int  GetStaKwhStart(WORD stano);
    void SetEvidentTimer(WORD stano, int SecondNum);
    int  GetEvidentTimer(WORD stano);
    void DecEvidentTimer(WORD stano);
};
class CALC : public TRealDB
{
    public:
    RTUINDEX huge *zflpRtuInx;
        CALC();
		~CALC();
	int GetSStation(WORD Record,BYTE SymNo);
	int GetDStation(WORD Record,BYTE SymNo);
	BYTE GetSymbol(WORD Record,BYTE SymNo);
	int GetSOrder(WORD Record,BYTE SymNo);
	int GetDOrder(WORD Record,BYTE SymNo);
};

class ZFDB : public TRealDB
{
    public:
    RTUINDEX huge *zflpRtuInx;
        ZFDB();
        ~ZFDB();
	WORD GetStation(WORD stano);
    int  GetStaYxNum(WORD stano);
    int  GetStaYcNum(WORD stano);
    int  GetStaKwhNum(WORD stano);
    int  GetStaYxStart(WORD stano);
    int  GetStaYcStart(WORD stano);
    int  GetStaKwhStart(WORD stano);
};
class ZFYxDB: public TRealDB
{
  public:
    ZFYxDB();
    ~ZFYxDB();
    int GetStation(WORD stano, WORD ycno);
    int GetOrder(WORD stano, WORD ycno);
};
class ZFYcDB: public TRealDB
{
  public:
    ZFYcDB();
    ~ZFYcDB();
    int GetStation(WORD stano, WORD ycno);
    int GetOrder(WORD stano, WORD ycno);
};
class ZFKwhDB: public TRealDB
{
  public:
    ZFKwhDB();
    ~ZFKwhDB();
    int GetStation(WORD stano, WORD ycno);
    int GetOrder(WORD stano, WORD ycno);
};

class TYxDB : public TRealDB
{
    void CreateSoe(WORD stano, WORD yxno, BYTE yxtype, BYTE yxv);
  public:
    TYxDB();
    ~TYxDB();

    int      GetStation(WORD stano, WORD yxno);
    int      GetOrder(WORD stano, WORD yxno);

    void  GetYxName(WORD stano, WORD yxno, char *yxname);
    DWORD GetYxAttr(WORD stano, WORD yxno);
    BYTE  GetYxType(WORD stano, WORD yxno);
    BYTE  GetYxValue(WORD stano, WORD ycno);

    void SetYxAttr(WORD stano, WORD yxno, DWORD attr);
    void SetYxValue(WORD stano, WORD yxno, BYTE value);
    void SetYxValue(WORD stano, WORD startyx, BYTE yxvalue, BYTE yxmask);
};

class TYcDB : public TRealDB
{
  public:
    TYcDB();
    ~TYcDB();

    int      GetStation(WORD stano, WORD ycno);
    int      GetOrder(WORD stano, WORD ycno);

    void  GetYcName(WORD stano, WORD ycno, char *ycname);
    DWORD GetYcAttr(WORD stano, WORD ycno);
    int   GetYcValue(WORD stano, WORD ycno);
    BYTE  GetYcPoint(WORD stano, WORD ycno);
    void  GetYcLineCoe(WORD stano, WORD ycno, YCLINECOE *yclinear);

    void SetYcAttr(WORD stano, WORD ycno, DWORD attr);
    void SetYcValue(WORD stano, WORD ycno, WORD ycvalue);
    void SetYcPoint(WORD stano, WORD ycno, BYTE ycpoint);
};

class TKwhDB : public TRealDB
{
  public:
    TKwhDB();
    ~TKwhDB();

    int      GetStation(WORD stano, WORD kwhno);
    int      GetOrder(WORD stano, WORD kwhno);

    void  GetKwhName(WORD stano, WORD kwhno, char *kwhname);
    DWORD GetKwhAttr(WORD stano, WORD kwhno);
    DWORD GetKwhValue(WORD stano, WORD kwhno);
    BYTE  GetKwhPoint(WORD stano, WORD kwhno);

    void  SetKwhAttr(WORD stano, WORD kwhno, DWORD attr);
    void  SetKwhValue(WORD stano, WORD kwhno, DWORD kwhvalue);
    void  SetKwhPoint(WORD stano, WORD kwhno, BYTE kwhpoint);
};

//-----------------------------------------------------------------------
// 事项类定义
/*
typedef struct
{
     BYTE   EventType;
     BYTE   EventAttr;
     WORD   Station;
     WORD   Order;
     BYTE   Status;
     WORD   Year;
     BYTE   Mon;
     BYTE   Day;
     BYTE   Hour;
     BYTE   Min;
     BYTE   Sec;
     WORD   Ms; 
} EVENT; 
*/

typedef struct
{
	 BYTE   EventAttr;
	 BYTE   EventType;
     BYTE   Station;
     WORD   Order;
     BYTE   Status;
     BYTE   Hour;
     BYTE   Min;
     BYTE   Sec;
     WORD   Ms;
	 BYTE	data[5];
//     WORD   Year;
//     BYTE   Mon;
//     BYTE   Day;
//     BYTE   Rsv;
} EVENT;

class TEventDB
{
    EVENT huge *lpEvent;
    static BOOL UsedFlag[EVEHANDLEMAXNUM];
    static BYTE EventRP[EVEHANDLEMAXNUM];
    static BYTE EventWP;

  public:
    TEventDB();
    ~TEventDB();

    void InitRWPointer();
    WORD  GetReadHandle();
    void  FreeReadHandle(WORD hdl);

    void  WriteAEvent(EVENT *event);
    BOOL  ReadAEvent(WORD heve, EVENT *event);
    void huge *  GetEventBuf(void);
    BYTE  GetEventWP();
};

//-----------------------------------------------------------------------
// 命令类定义

typedef struct
{
  BYTE DestType;
  BYTE DestName;
  BYTE SourceType;
  BYTE SourceName;
  BYTE CmdType;
  BYTE SubCmdType;
  BYTE CmdContent[22];
  BYTE XBFXDATA[512];
  WORD DataLen;
  WORD DataPt;
} COMMAND;
 
class TCommandDB
{
    COMMAND huge *lpRecCmd;
    COMMAND huge *lpSendCmd;
/*
    BYTE far *lpNetDatar;
    BYTE far *lpNetDataw;
    COMMAND far *lpNetCmdr;
    COMMAND far *lpNetCmdw
*/
    BYTE huge *lpRecData;
    BYTE huge *lpSendData;
    static BOOL UsedFlag[CMDHANDLEMAXNUM];
    static BYTE RecCmdRP[CMDHANDLEMAXNUM];
    static BYTE RecCmdWP;
    static BYTE SendCmdRP[CMDHANDLEMAXNUM];
    static BYTE SendCmdWP;
    BYTE RecDataRP;
    static BYTE RecDataWP;
    BYTE SendDataRP;
    static BYTE SendDataWP;

  public:
    TCommandDB();
    ~TCommandDB();

    void InitRWPointer();
    WORD  GetReadHandle();
    void  FreeReadHandle(WORD hdl);

    //
    void  WriteACmdToSend(COMMAND *cmd, char *cmddatap);
    void  WriteACmdToRec(COMMAND *cmd, char *cmddatap);
    BOOL  ReadACmdFromRec(WORD hcmd,COMMAND *cmd, char *cmddatap);
    BOOL  ReadACmdFromSend(WORD hcmd, COMMAND *cmd, char *cmddatap);

    void huge * GetNetReadDataBuf(void);
    void huge * GetNetWriteDataBuf(void);
    void huge * GetNetCmdReadBuf(void);
    void huge * GetNetCmdWriteBuf(void);




    void huge *  GetRecCmdBuf(void);
    void huge *  GetRecDataBuf(void);
    BYTE  GetRecCmdWP();
    void huge *  GetSendCmdBuf(void);
    void huge *  GetSendDataBuf(void);
    BYTE  GetSendCmdWP();
};

//----------------------------------------------------
// 用发送消息的方式存取实时数据库,消息类型的定义

typedef struct {
  BOOL  RetFlag;        // 返回消息正确与否标志  F:错误 / T:正确
  BYTE  Bak;
  WORD  MsgType;        // 消息类型
  WORD  DbNo;           // 数据库号
  WORD  MsgDataLen;     // 消息数据长度(字节数)
  char  Reserved[8];
  char huge *ptr1;
  char  MsgData[RDBMSGDATAMAXLEN-16-sizeof(char huge *)];
} RDBMESSAGE;


extern int LoadAllDBFile(void);
extern int FreeAllDBFile(void);

extern void FAR PASCAL GetName(WORD dbn, WORD stano, WORD ord, char *name);
extern WORD FAR PASCAL GetRcdNum(WORD dbn, WORD stano);
extern DWORD FAR PASCAL GetValue(WORD dbn, WORD stano, WORD ord);
extern BOOL FAR PASCAL GetBatchValue(WORD dbn, WORD stano, WORD startord, WORD num, void huge *vbuf);
extern DWORD FAR PASCAL GetAttr(WORD dbn, WORD stano, WORD ord);
extern BYTE FAR PASCAL GetPoint(WORD dbn, WORD stano, WORD ord);
extern WORD FAR PASCAL GetType(WORD dbn, WORD stano, WORD ord);
extern WORD FAR PASCAL GetTimerValue(WORD dbn, WORD stano);
extern WORD FAR PASCAL GetReadHandle(WORD dbn);
extern BOOL FAR PASCAL FreeReadHandle(WORD dbn, WORD hdl);
extern char huge *FAR PASCAL GetBuffer(WORD dbn, BYTE tp);
extern WORD FAR PASCAL GetWritePtr(WORD dbn, BYTE tp);
extern BOOL FAR PASCAL ReadAEvent(WORD dbn, WORD hdl, EVENT *eve);
extern BOOL FAR PASCAL ReadACommand(WORD dbn, WORD hdl, BYTE tp, COMMAND *cmd, char *cmddata);
extern void FAR PASCAL WriteAEvent(WORD dbn, EVENT *eve);
extern void FAR PASCAL WriteACommand(WORD dbn, BYTE tp, COMMAND *cmd, char *cmddata);
extern void FAR PASCAL SetTimerValue(WORD dbn, WORD stano, WORD timer);
extern void FAR PASCAL SetPoint(WORD dbn, WORD stano, WORD ord, BYTE pnt);
extern void FAR PASCAL SetAttr(WORD dbn, WORD stano, WORD ord, DWORD attr);
extern void FAR PASCAL SetValue(WORD dbn, WORD stano, WORD ord, DWORD val);
extern void FAR PASCAL SetBatchValue(WORD dbn, WORD stano, WORD startord, WORD num, void huge *vbuf);

#endif

⌨️ 快捷键说明

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