wincomm.cpp
来自「这是一个在正实际应用当中运行的电力监控系统软件源代码」· C++ 代码 · 共 1,963 行 · 第 1/5 页
CPP
1,963 行
#include <windowsx.h>
#include <windows.h>
#include <owl.h>
#include <stdio.h>
#include <string.h>
#include <Dialog.h>
#include <commdlg.h>
#include "comm.h"
#include "tcp_win.h"//wyy++ for TCP_IP
#include "db.h"
#include "dbfile.h"
#include "def.h"
#include "wincomm.h"
//#include "cmdefs.h"
#include "ctkdll.h"
#include "commdlg.h"
#include "novell.h"
extern char Text[9];
char Pass[9];
static int AdjClkF;
#ifdef __cplusplus
int min (int value1, int value2);
int max (int value1, int value2);
int min(int value1, int value2)
{
return ( (value1 < value2) ? value1 : value2);
}
int max(int value1, int value2)
{
return ( (value1 > value2) ? value1 : value2);
}
#endif
typedef struct
{
BYTE SSTFlag,Retry,RepTimes,RANDOM0,RANDOM1,RANDOM2,Poll,PAFFLAG,TIME,SDBB,DRFTIME;
}Flag;
typedef struct {
WORD year;
WORD month;
WORD day;
WORD hour;
WORD min;
WORD sec;
}Group;
// -------------------------------------
BYTE FAR PASCAL _export ByteRotate(BYTE srcbyte);
extern void ProRcvData ();
//extern void AddHostNode (BYTE);
extern void DelHostNode (BYTE);
extern ChangeHost ();
extern void ReadScadaInf ();
extern int AddClientName ();
extern void DeletClientName ();
extern void RcvDataGram (BYTE no);
extern void SendFlag ();
void InitNet ();
extern BYTE GetMainHostName ();
extern BYTE GetThisHostName ();
void CancelNode (BYTE);
extern float FAR PASCAL _export GetCoe(WORD,WORD,WORD);
extern void FAR PASCAL _export ZfProc();
extern void FAR PASCAL _export Calculate();
extern int FAR PASCAL _export GetSStation(WORD,BYTE);
extern int FAR PASCAL _export GetDStation(WORD,BYTE);
extern int FAR PASCAL _export GetSOrder(WORD,BYTE);
extern int FAR PASCAL _export GetDOrder(WORD,BYTE);
extern BYTE FAR PASCAL _export GetSymbol(WORD,BYTE);
extern BOOL InitAllComm();
extern BOOL InitAllModem();
extern BOOL InitOneComm(BYTE);
extern BOOL InitOneModem(BYTE);
extern HGLOBAL InputCommMem[80];
extern HGLOBAL OutputCommMem[80];
extern DWORD CommCount[80];
extern BYTE CalChNum(BYTE CommNo);
DWORD calsec(struct date,struct time);
DWORD DayPeYear(DWORD);
DWORD DayPeMonth(DWORD,DWORD);
Group Current(DWORD);
//extern float FAR PASCAL _export GetYcLineCoe(WORD,WORD,WORD);
int QUIT = 0;
BYTE NetFlag=1;
int idComDev[80];
COMMPARA CommPara [80];
//-------------------------------------------------------------
// ------------------------------------------------------------------------
BYTE NetTestFlag=0,NetTestCount,OdsFlag=0;
extern void FAR PASCAL _export SendPara(int);
HINSTANCE hInst;
HMENU hMainMenu;
HWND hMainWindow;
HBRUSH hBackgroundBrush;
WORD TotalChNum, TotalProtoNum, TotalStaNum;
HGLOBAL hCTKSIOMem = NULL, hChannelParamMem = NULL, hStaParamMem = NULL;
CHANNELPARAM FAR *lpChannelParam = NULL;
STATIONPARAM FAR *lpStaParam = NULL;
HGLOBAL hMsgDataMem = NULL;
char FAR *lpMsgBuf = NULL;
int cnt3=0, cnt5=0;
WORD Freq;
int HardwareInstallFlag[HARDWAREMAXNUM]={0, 0, 0, 0};
PROTOCAL Protocal[PROTOMAXNUM];
static COLORREF crTemp[16];
COLORREF BackColor;
TSystemCfg *syscfg;
WORD hRdSysEvent;
WORD hRdSysCmd;
int CXScreen, CYScreen, ResolutionMode = 0;
PNodeStatusWindow pStatusWin;
HWND hNodeWnd;
void DrawStatusLine (LPSTR, LPSTR, RECT &);
void DispDIBitmap (HDC hDC, int X, int Y, LPSTR lpFileName);
void ChkChStatus(void);
//------------------------------------------------------------------------//
TMainWindow::TMainWindow ()
: TMDIFrame ("TCZ通信处理系统", NULL)
{
HDC hDC;
int w, h;
// 设置主窗口尺寸
hDC = GetDC (HWindow);
w = GetDeviceCaps (hDC, HORZRES);
h = GetDeviceCaps (hDC, VERTRES);// - 30;
ReleaseDC (HWindow, hDC);
// Attr.X = 10;
// Attr.Y = 30;
// Attr.W = w - 20;
// Attr.H = (17*Attr.W)/25;
// Attr.H = Attr.H<h ? Attr.H:h;
Attr.X = 0;
Attr.Y = 0;
Attr.W = 800;//w;
Attr.H = 600;//h;
Attr.Style |= WS_CLIPCHILDREN;
hInst = GetApplication()->hInstance;
hMenu = LoadMenu (hInst, "MainMenu");
Attr.Id = (int)hMenu;
hMainMenu = hMenu;
syscfg = new TSystemCfg();
}
// 主窗口析构函数
TMainWindow::~TMainWindow()
{
CancelNode (ThisNodeName);
DeletClientName ();
if (HardwareInstallFlag[CTKBOARD]) StopCTK();
FreeSystemPara ();
FreeReadHandle(EVENTDB, hRdSysEvent);
FreeReadHandle(COMMANDDB, hRdSysCmd);
delete (syscfg);
KillTimer (HWindow, 1);
KillTimer (HWindow, 2);
KillTimer (HWindow, 3);
KillTimer (HWindow, 4);
KillTimer (HWindow, 5);
for (int i=0;i<80;i++)
{
CloseComm(idComDev[i]);
if (InputCommMem[i]) GlobalFree(InputCommMem[i]);
if (OutputCommMem[i]) GlobalFree(OutputCommMem[i]);
}
}
//----------------------------------------------------------------//
void TMainWindow::GetWindowClass (WNDCLASS _FAR & AWndClass)
{
TWindow::GetWindowClass (AWndClass);
AWndClass.hIcon = LoadIcon (GetApplication ()->hInstance, "COMMWIN");
AWndClass.style|=CS_DBLCLKS;
}
//----------------------------------------------------------------//
BOOL TMainWindow::CanClose ()
{
NetFlag=0;
if (MessageBox(HWindow,"您想退出通讯处理系统吗?","信息提示",MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2)==IDYES)
{//注意:请不要删除下一行BOX,因为她有特殊用用途 终止网络用来
if (MessageBox(HWindow,"如果真的要退出,请您再选择一次 YES!","谢谢合作",MB_YESNO|MB_DEFBUTTON2|MB_ICONEXCLAMATION)==IDYES)
return TRUE;
else {NetFlag=1;return 0;}
}
else
{
NetFlag=1;
return 0;
}
}
void TMainWindow::SetupWindow ()
{
TMDIFrame::SetupWindow ();
// 显示提头对话框
// TAboutWnd *HeadWindow = new TAboutWnd (this, 0);
// HeadWindow->EnableAutoCreate ();
// GetApplication()->MakeWindow (HeadWindow);
// HeadWindow->Show (SW_SHOW);
// BarWindow = HWindow;
// 装入提示杆点位图
// bmpStatusBar = LoadBitmap (GetApplication()->hInstance, MAKEINTRESOURCE(BMP_STATUS_BAR));
hMainWindow = HWindow;
for (int i=0; i<16; i++) crTemp[i] = RGB (255, 255, 255);
BackColor = RGB(192,192,192);//RGB (113, 158, 170);
for (i=0; i<WNDTYPEMAXNUM; i++) DispWindow[i]=0;
MultiWindowFlag = 1;
MakeSystemPara ();
hRdSysEvent = GetReadHandle(EVENTDB);
hRdSysCmd = GetReadHandle(COMMANDDB);
HFILE hFile;
OFSTRUCT ofstruct;
if((hFile=OpenFile("c:\\tcz\\pass.dat",&ofstruct,OF_READ))==HFILE_ERROR)
{
strcpy(Pass,"TCZ");
}
else
{
_lread(hFile,Pass,9);
Pass[8]=0;
_lclose(hFile);
}
if (!SetTimer (HWindow, 1, 500U, NULL))
MessageBox (HWindow, "设置系统定时器错误!", "系统警告", MB_OK|MB_ICONSTOP);
ThisNodeName='A'+syscfg->GetNode(); //ThisNodeName;
InitNet() ;
//start net
//wyy++ for tcp_ip protocl
if(syscfg->GetNetProto()==0){
//++wyy
DeletClientName ();
if (!AddClientName ())
MessageBox (HWindow, "Add Client Name Error!", "Netbios", MB_ICONEXCLAMATION | MB_OK);
else
{
for (int i=0; i<6; i++) RcvDataGram (i);
}
if (ThisNodeName=='A')
{
SwitchToMain();
SendFlag();
}
}
//wyy++ for tcp_ip protocl
else if(syscfg->GetNetProto()==1)
{
if (ThisNodeName=='A')
{
SwitchToMain();
SendFlag();
}
}
//++wyy
InitTcpWin(this);
if(syscfg->GetNetProto()!=1) ShowWindow(pTcpWin->HWindow,SW_HIDE);
else ShowWindow(pTcpWin->HWindow,SW_MINIMIZE);
if (!SetTimer (HWindow, 2, 55U, NULL))
MessageBox (HWindow, "Too Many Timers", "NOVELL", MB_ICONEXCLAMATION | MB_OK);
if (!SetTimer (HWindow, 3, 2000U, NULL))
MessageBox (HWindow, "Too Many Timers", "NOVELL", MB_ICONEXCLAMATION | MB_OK);
if (!SetTimer (HWindow, 4, 200U, NULL))
MessageBox (HWindow, "Too Many Timers", "NOVELL", MB_ICONEXCLAMATION | MB_OK);
if (syscfg->GetYcSelect()&0xf ==0)
{
if (!SetTimer (HWindow, 5,100U, NULL))
MessageBox (HWindow, "Too Many Timers", "NOVELL", MB_ICONEXCLAMATION | MB_OK);
}
//1997.9.19
CXScreen = GetSystemMetrics (SM_CXSCREEN);
CYScreen = GetSystemMetrics (SM_CYSCREEN);
/*tzm
pStatusWin = new NodeStatusWindow (NULL, "Node Status");
if (pStatusWin) {
GetApplication ()->MakeWindow (pStatusWin);
InvalidateRect (hNodeWnd, NULL, TRUE);
}
else MessageBox (HWindow, "creat Node Status error", "error", MB_OK);
BringWindowToTop (HWindow);
*/
//1997.9.19
//发对钟命令
//PostMessage (HWindow, WM_ADJUSTCLOCK, 0, 0L);
ShowWindow (HWindow, SW_SHOW);
InitAllComm();
GetApplication()->MakeWindow(new TCommWindow(NULL));
InitAllModem();
for (int ii=0;ii<TotalChNum;ii++) InitOneModem(ii);
//AdjClkF=1;
PostMessage (HWindow, WM_COMMAND, IDM_SETTIME, 0L);
}
void TMainWindow::WMNodeSwitch (RTMessage)
{
ThisNodeName = 'A' + syscfg->GetNode();
if (ThisNodeName==MainFertName) SwitchToMain();
}
/*void TMainWindow::WMAdjustClock (RTMessage)
{
BYTE wp;
if (ThisNodeName == MainFertName)
{
for (int i=0; i<TotalStaNum; i++)
{
wp = (lpStaParam+i)->DownCmdWP;
if (((wp+1)&3) != (lpStaParam+i)->DownCmdRP)
{
(lpStaParam+i)->DownCmd[wp].Cmd[0] = DCMDSST;
(lpStaParam+i)->DownCmd[wp].Cmd[1] = i%256; //rtu号
(lpStaParam+i)->DownCmd[wp].Cmd[2] = i/256; //rtu号
(lpStaParam+i)->DownCmdWP = (wp+1)&3;
}
}
}
}*/
//tzc add
void TMainWindow::SystemZF (RTMessage Msg)
{
HWND HWndDBMS1=FindWindow (NULL,"转发管理");
HWND HWndDBMS=FindWindow (NULL,"数据库管理");
if (HWndDBMS!=NULL) {MessageBox(0,"数据库管理模块在运行","信息提示",MB_OK);return;}
if (HWndDBMS1!=NULL)
{
BringWindowToTop (HWndDBMS1);
ShowWindow (HWndDBMS, SW_SHOWMAXIMIZED);
}
else if (HWndDBMS1==NULL)
WinExec ("c:\\tcz\\dm\\zf.exe",SW_SHOWNORMAL);//SW_SHOWMAXIMIZED);
}
void TMainWindow::SystemPara (RTMessage Msg)
{
HWND HWndDBMS1=FindWindow(NULL,"转发管理");
HWND HWndDBMS=FindWindow (NULL,"数据库管理");
if (HWndDBMS1!=NULL) {MessageBox(0,"转发管理模块在运行","信息提示",MB_OK);return;}
if (HWndDBMS!=NULL)
{
BringWindowToTop (HWndDBMS);
ShowWindow (HWndDBMS, SW_SHOWMAXIMIZED);
}
else if(HWndDBMS==NULL)
WinExec ("c:\\tcz\\dm\\xm1.exe",SW_SHOWNORMAL);//SW_SHOWMAXIMIZED);
}
static int AdjustT;
void TMainWindow::WMTimer (RTMessage Msg)
{
switch (Msg.WParam)
{
case 1: // 1 Second Timer
DrawStatusLine("", 0, MRect);
WORD tt;
for (int i=0; i<TotalStaNum; i++)
{
tt=GetTimerValue(RTUDB, i);
if (tt) SetTimerValue(RTUDB, i, tt-1);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?