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

📄 novell.cpp

📁 这是一个在正实际应用当中运行的电力监控系统软件源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
#include <owl.h>
#include <windows.h>
#include <stdio.h>
#include <dos.h>
#include <string.h>
//wyy++ for tcp-ip
#include "tcp_win.h"
//++wyy

#include "def.h"
#include "wincomm.h"
#include "novell.h"

//-- 定义实时数据库全局变量
#include  "db.h"
#include  "dbfile.h"
#define   YcNumscale   240      //每桢YC数量,最好小于240
#define   KwhNumScale   120      //每桢KWH数量,最好小于120
extern BYTE NetFlag;
extern BYTE NetTestFlag,NetTestCount;
extern TSystemCfg *syscfg;
extern int cnt5;
//-------------------------------
#define TRANDBLEN    DATAGRAM_LEN - sizeof(GRAMINF) - sizeof(GRAMHEAD) - sizeof(TRANDB)
extern 	HGLOBAL		 hChannelParamMem;
extern  CHANNELPARAM FAR *lpChannelParam;   //ding
extern	BYTE OdsFlag;
BYTE             YCBREAK=0;
BYTE             KWHBREAK=0;
BYTE			 BUFFERS=0;
BYTE			 STATION=1 ;
BYTE			 BufType=1;
WORD			 SendForRun=0;
WORD             MNPFlag=0;
char huge        GroupName[16]="SCADA-SYSTEM";
BYTE huge        NameNum;
BYTE huge        NodeCount;
BYTE huge        MainFertName = 'Z';
BYTE huge        ThisNodeName = 'A';
BOOL huge        FrameFlag[60];
BYTE huge        DupName    = 'Z';
BYTE huge        CallPara = 0;
BYTE huge        DestNode = 'Z';
WORD            systateCount = 0;
NETSEND far     NetSend;
NETRCV  far     NetRcv[MAXRCVNCB];
NETPOOL far     NetPool[MAXNETPOOL];
NODEMSG far     FertNode[FERTNODEMAXNUM];
NODEMSG far     HostNode[HOSTNODEMAXNUM];
TRANSDBNFN far  TransDbnFn[MAXDBN+1][MAXFN+1];

BYTE 			YKOUT=FALSE,OPTOUT=FALSE,FHOUT=FALSE;
BYTE far        CurrDbn;
BYTE far        CurrFn;
BYTE            LastSOECount=0xBB;
WORD            LastOPTCount=0x1111;
WORD            LastWaveCount=0x1111;
WORD            LastRemYCCount=0x1111;
WORD            LastGraphCount=0x1111;
WORD            LastFileHeadCount=0x1111;
BYTE            SYSTATECOME=FALSE;
WORD            FertCount=0;             //simulated fert TxCount
BYTE            count=0;

BYTE            TaskList=0;
BYTE            TaskCnt;
BYTE            SendYcCnt;
BYTE            SendKwhCnt;
BYTE            SendBuf[512];

WORD            TxCnt=0;
WORD            StationCnt=0;
BYTE            SendEventCnt=0;
BYTE            EventPacketID=0;
BYTE            eventnum;

BYTE            SendCmdFlag=0;
BYTE            RecCmdFlag=0;
COMMAND         NetCmd;
char            NetCmdData[512];


extern WORD hRdSysEvent;
extern WORD hRdSysCmd;
extern STATIONPARAM FAR *lpStaParam;     //ding
extern WORD     TotalStaNum;
extern WORD     Freq;

extern WORD     PrintENum;
extern HWND     hMainWindow;
extern int      QUIT;
extern void		NetToQXPreValue (LPSTR);
extern void     RcvDataGram (BYTE no);
extern void     DispNetBuf (BYTE _FAR *, BYTE flag, WORD);
extern void     dbaLoadSomePara (BYTE dbn, BYTE fn);
extern int      GetAllQXData ();
extern BOOL     dbaSaveMnpPara();
extern void     InitYCSta ();
extern void     InitYXSta ();
extern int      NetToMODIPData (LPSTR);
extern int      NetToMODIDData (LPSTR);
extern int      NetToPutGrdData( LPSTR);
extern int		MNPCmdToNet (LPSTR);
extern int      NetToWaveData (LPSTR);
extern int      NetToYCData (BYTE _FAR *);
extern int      NetToYXWData (LPSTR);
extern int      NetToKWHData (LPSTR);
extern int      NetToWTRData (LPSTR);
extern int      NetToFRQData (LPSTR);
extern int      NetToSOEData (LPSTR);
extern int		NetToMNPData (LPSTR);
extern int      NetToOPTChkData (LPSTR);
extern int      NetToYTData (LPSTR);
extern int      NetToYCOverData (LPSTR);
extern int      NetToYXChgData (LPSTR);
extern int      NetToRTUSData (LPSTR);
extern int      NetToSETINData (LPSTR);
extern int      NetToPRTABLEData (LPSTR);
extern int      NetToYXSData (LPSTR);
extern int      NetToProtData (LPSTR);
extern int      NetToCOPYSCREENData (LPSTR);
extern int      NetToRemYCData (LPSTR);
extern int      NetToFHData (LPSTR);
extern int      NetToFHChk (LPSTR);
extern short    NetToKWHPV (LPSTR);
extern short    NetToKWHD (LPSTR);
extern short    NetToGraphData (LPSTR);
extern short    NetToProt (LPSTR);
extern BYTE     GetNodeNo (BYTE);
extern BOOL     IPXMakeFrame (BYTE,BYTE);
extern void     XmitDataGram ();
extern BOOL     IsLeap(int);
void            IPXRecProc (LPSTR);
extern void     MessageEvent (LPSTR str);
void  interrupt RcvPost0 (void);
void  interrupt RcvPost1 (void);
void  interrupt RcvPost2 (void);
void  interrupt RcvPost3 (void);
void  interrupt RcvPost4 (void);
void  interrupt RcvPost5 (void);
void  interrupt SendPost (void);
void            NetbiosRequest (NCB *);
void            ProRcvData ();

void            ProcSendCmd();    //shy 97.9
void            ProcRecCmd();

BOOL            NetToRtuYK();     //shy 97.9
BOOL            NetToRtuYT();
BOOL            NetToxbfx();
void            SetTime();

extern short    YCSumToNet (LPSTR, BYTE);
extern short    KWHSumToNet (LPSTR, BYTE);
extern short    KWHPVToNet (LPSTR, BYTE);
extern short    KWHDToNet (LPSTR, BYTE);
extern short    GraphToNet (LPSTR, BYTE);
extern short    YCOverToNet (LPSTR,BYTE);
extern short    YXChgToNet (LPSTR,BYTE);
extern short    ProtToNet (LPSTR, BYTE);
extern void     SetYXChange ();             //96-8-14 
extern int      LocalSetInData ();          //96-8-14 zfq defined in hrtd.cpp
//extern SCADAINF scadainf;
extern BYTE     SGSoundFlag;        //defined in hrtd.cpp
extern BOOL     KWHPVOnStart,KWHDataOnStart,ProtOnStart;
extern BOOL     YCOverOnStart,YXChgOnStart;
BOOL            FileCopyFlag[20];
BOOL   MsgBoxUp=FALSE;
//extern COMINF CommInf;
int    frqval =0;                      //for store the freqence
int LocalMODIPData (LPSTR buf);
int LocalMODIDData (LPSTR buf);

//---------------------------------------------------------------
typedef struct
{
    BYTE    DestType;
    BYTE    DestName;
    BYTE    SourceType;
    BYTE    SourceName;
    BYTE    com5;
    BYTE    com6;
    BYTE    com7;
    BYTE    FertStatus;
    BYTE    CmdCode;
    WORD    CmdLen;
}NETBUFHEAD;

//***********************************************************************
class DATE{
public:
    WORD    year;
    BYTE    month;
    BYTE    day;
    BYTE    hour;
    BYTE    minute;
    BYTE    second;
};

class TRANDB{
public:
    BYTE    dbn;
    BYTE    fn;
    DWORD   offset;
    WORD    Length;
};
/*
DWORD GetDTime (WORD year, BYTE month, BYTE day, BYTE hour, BYTE minute)
{
    if (year<1995)  year=1995;
    if (month == 0) month =1;
    if (day == 0)   day=1;
    DWORD val;
    //start time = 1995-01-01 00:00:00.0

    val = (year-1995)*365;
    BOOL isleap=IsLeap (year);
    while (month-- > 1)  val += day_tab[isleap][month];
    val += day + (year-1994)/4;
    val *= 24*60;                        // change to second.
    val += hour*60 + minute;
    return val;
}
*/
//***********************************************************************
void InitNet ()
{
    MainFertName = 'A';
//    ThisNodeName = 'A';
    for (int i=0; i<FERTNODEMAXNUM; i++) {
        FertNode[i].Use = FALSE;
     	FertNode[i].NodeState = 'B';
    	FertNode[i].ATBCount = 0;
        FertNode[i].LostCount = 0;
    }
//    FertNode[0].Use = TRUE;
//    FertNode[0].NodeState = 'M';

/*    for (i=0; i<HOSTNODEMAXNUM; i++) {
        HostNode[i].Use = FALSE;
    	HostNode[i].NodeState = 'B';
    	HostNode[i].ATBCount = 0;
        HostNode[i].LostCount = 0;
    } */
    NetSend.txfinishflag = TRUE;
    NetSend.TxCount = 0;
    for (i=0; i<MAXRCVNCB; i++) {
        NetRcv[i].rxfinishflag = FALSE;
        NetRcv[i].RxCount = 0;
    }
    for (i=0; i<MAXNETPOOL; i++)  NetPool[i].ProNewData ();
}

//***********************************************************************
BYTE GetNodeNo (BYTE n)
{
  if (n>='A' && (n<='A'+FERTNODEMAXNUM))    return n-'A';
  else   return  -1;
}

//***********************************************************************
void SetRcvData (LPSTR buf)
{
    WORD c = 0;
    for (int i =0; i<MAXNETPOOL; i++)
        if ((!NetPool[i].haveNewData ())) {
            NetPool[i].SetNewData (buf);
            c++;
            break;
        }
    if (c == 0) FertNode[GetNodeNo(ThisNodeName)].LostCount++;
}

//***********************************************************************
// return NodeNo.
//***********************************************************************
void AddHostNode (BYTE c)
{
/*    if (c < 'A' || (c> 'A'+HOSTNODEMAXNUM)) return;
    SYSPARA _FAR *   pSysP=Addr->SysPara_addr;
    BYTE n = GetNodeNo (c);
	if (scadainf.NodeType=='H') {  // 后台机登录
	  pSysP->PutMainHostDiskSym ('C');
	  for (int i=0;i<BACKHOSTNODEMAXNUM;i++) {
		 if (HostNode[i].Use==TRUE && HostNode[i].NodeState=='M') {
  		    HostNode[n].NodeState='B';
    	    break;
         }
      }
	  if (i==BACKHOSTNODEMAXNUM) 
		 HostNode[n].NodeState='M';
	}
    else {                             // 工作站登录
		if (HostNode[0].Use==TRUE && HostNode[0].NodeState=='M') {
		   pSysP->PutMainHostDiskSym (scadainf.HostaDiskSym);
		}
        else if (HostNode[1].Use==TRUE && HostNode[1].NodeState=='M') {
           pSysP->PutMainHostDiskSym (scadainf.HostbDiskSym);
        }
        else if (HostNode[2].Use==TRUE && HostNode[2].NodeState=='M') {
           pSysP->PutMainHostDiskSym (scadainf.HostcDiskSym);
        }
		else {
           if (!MsgBoxUp) {
              MsgBoxUp=TRUE;
		      if (MessageBox (HWin, "\n  后台机未运行\n\n请开启后台机后, 按YES \n\n退出, 按NO", "",MB_YESNO)!=IDYES) {
		         PostQuitMessage (0);
			     return;
              }
           }
		}
	}

    HostNode[n].Use = TRUE;
    HostNode[n].ATBCount = 0;
	HostNode[n].LostCount = 0;*/
}

//***********************************************************************
void DelHostNode (BYTE c)
{
/*    if (!(c >= 'A' && c <= 'A'+HOSTNODEMAXNUM)) return;
    SYSPARA _FAR *   pSysP=Addr->SysPara_addr;
    BYTE n = GetNodeNo (c);
    HostNode[n].Use = FALSE;

	if (scadainf.NodeType=='G') {
	   for (int i=0;i<BACKHOSTNODEMAXNUM;i++) {
		  if (HostNode[i].Use==TRUE) {
			 HostNode[i].NodeState='M';
			 if (i==0)
				pSysP->PutMainHostDiskSym (scadainf.HostaDiskSym);
			 else if (i==1)
				pSysP->PutMainHostDiskSym (scadainf.HostbDiskSym);
			 else if (i==2)
				pSysP->PutMainHostDiskSym (scadainf.HostcDiskSym);
			 break;
		  }
	   }
       if (i==BACKHOSTNODEMAXNUM)
           if (!MsgBoxUp) {
              MsgBoxUp=TRUE;
		      if (MessageBox (HWin, "\n  后台机未运行\n\n请开启后台机后, 按YES \n\n退出, 按NO", "",MB_YESNO)!=IDYES) {
		         PostQuitMessage (0);
			     return;
              }
           }
	}
	else {  
	   if (HostNode[n].NodeState=='M') {
		  for (int i=0;i<BACKHOSTNODEMAXNUM;i++) {
              if (HostNode[i].Use==TRUE) {
                 HostNode[i].NodeState='M';
				 break;
              }
          }
	   }
	}
    HostNode[n].NodeState = 'B';*/

}

//***********************************************************************
// return NodeNo.
//***********************************************************************
void AddFertNode (BYTE c)
{
    if (!(c >= 'A' && (c<= 'A'+FERTNODEMAXNUM))) return;
    BYTE i = GetNodeNo (c);
    for (int j=0;j<FERTNODEMAXNUM;j++)
        {
    	 if (FertNode[j].Use==TRUE && FertNode[j].NodeState=='M')
	        {
	         FertNode[j].NodeState='B';
             break;
            }
	    }
//    if (j==FERTNODEMAXNUM)
    if (i==0)  FertNode[i].NodeState='M';

    FertNode[i].Use = TRUE;
    FertNode[i].ATBCount = 0;
    FertNode[i].LostCount = 0;
}
//***********************************************************************
void DelFertNode (BYTE c)
{
    if (!(c >= 'A'  && c < 'A'+FERTNODEMAXNUM)) return;

	FertNode[ GetNodeNo (c) ].Use = FALSE;
    FertNode[ GetNodeNo (c) ].ATBCount = 0;
	FertNode[ GetNodeNo (c) ].NodeState = 'B';
}
//***********************************************************************
void ChangeFert ()
{
    if (!(MainFertName >='A' && MainFertName <='B')) return;
    if (MainFertName == 'A')
        MainFertName = 'B';
	else if (MainFertName == 'B')
        MainFertName = 'A';
    else MainFertName = 'Z';
    FertNode[ GetNodeNo (MainFertName) ].Use = TRUE;

}
//***********************************************************************
// return : MainFertName.
BYTE GetMainFertName ()
{
    for (int i=0; i<FERTNODEMAXNUM;i++)
        {
        if (FertNode[i].Use && FertNode[i].NodeState=='M')  return i+'A';
        }
    return 'Z';
}
//***********************************************************************
// return : ThisNodeName.
BYTE GetThisHostName ()
{
    return ThisNodeName;
}

//***********************************************************************
void ProRcvData ()//接收网络报文jgx
{

⌨️ 快捷键说明

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