📄 novell.cpp
字号:
#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 + -