wincomm.cpp
来自「这是一个在正实际应用当中运行的电力监控系统软件源代码」· C++ 代码 · 共 1,963 行 · 第 1/5 页
CPP
1,963 行
}
}
}
void TMainWindow::MakeSystemPara ()
{
WORD i;
LPBYTE lb;
HGLOBAL hLogPal;
HMENU hMenu1;
HRSRC hRes;
HFILE hf;
OFSTRUCT OfS;
// hChannelParamMem = GlobalAlloc (GMEM_NODISCARD|GMEM_MOVEABLE|GMEM_ZEROINIT, sizeof(CHANNELPARAM)*CHANNELMAXNUM);
hChannelParamMem = GlobalAlloc (GMEM_NODISCARD|GMEM_MOVEABLE|GMEM_SHARE|GMEM_ZEROINIT, (DWORD)sizeof(CHANNELPARAM)*(CHANNELMAXNUM+1));
if (!hChannelParamMem) MessageBox (HWindow, "", "Alloc Error", MB_OK);
// hCTKSIOMem = GlobalAlloc (GMEM_NODISCARD|GMEM_MOVEABLE|GMEM_ZEROINIT, sizeof(CTKSIO));
hCTKSIOMem = GlobalAlloc (GMEM_NODISCARD|GMEM_MOVEABLE|GMEM_SHARE|GMEM_ZEROINIT, sizeof(CTKSIO));
if (!hCTKSIOMem) MessageBox (HWindow, "", "Alloc Error", MB_OK);
// hMsgDataMem = GlobalAlloc (GMEM_SHARE|GMEM_NODISCARD|GMEM_MOVEABLE|GMEM_ZEROINIT, RDBMSGDATAMAXLEN);
hMsgDataMem = GlobalAlloc (GMEM_NODISCARD|GMEM_MOVEABLE|GMEM_SHARE|GMEM_ZEROINIT, RDBMSGDATAMAXLEN);
if (!hMsgDataMem) MessageBox (HWindow, "", "Alloc Error", MB_OK);
lpMsgBuf = (char FAR *)GlobalLock(hMsgDataMem);
// GlobalUnlock(hChannelParamMem); //tzc--
TotalStaNum = GetRcdNum(RTUDB, 0);
// hStaParamMem = GlobalAlloc (GMEM_NODISCARD|GMEM_MOVEABLE|GMEM_ZEROINIT, sizeof(STATIONPARAM)*TotalStaNum);
hStaParamMem = GlobalAlloc (GMEM_NODISCARD|GMEM_MOVEABLE|GMEM_SHARE|GMEM_ZEROINIT, (DWORD)sizeof(STATIONPARAM)*TotalStaNum);
if (!hStaParamMem)MessageBox (HWindow, "", "Alloc Error", MB_OK);
lpStaParam = (STATIONPARAM FAR *)GlobalLock(hStaParamMem);
for (int PARA=0;PARA<TotalStaNum;PARA++)
{
(lpStaParam+PARA)->SoeNum=0;
(lpStaParam+PARA)->Soe[0].DATE=0;
(lpStaParam+PARA)->Soe[1].DATE=1;
(lpStaParam+PARA)->Soe[2].DATE=2;
}
syscfg->ReadData();
//读多串口卡参数
FILE *f=fopen("c:\\tcz\\commcard.dat","rt");
if (f!=NULL) fread(&CommPara[0],1,sizeof(COMMPARA)*80,f);
else for (int o=0;o<80;o++)
{
CommPara[o].COMMBAUD=3;
CommPara[o].Used=FALSE;
CommPara[o].CHANEL1=0;
CommPara[o].CHANEL2=1;
}
// 读CTK板初始化参数
CTKSIO FAR *lpCtkSioParam = (CTKSIO FAR *)GlobalLock(hCTKSIOMem);
hf = OpenFile ((LPSTR)"c:\\TCZ\\CTKSIO.dat", (LPOFSTRUCT)&OfS, OF_READ);
if (hf != HFILE_ERROR)
{
_lread(hf, lpCtkSioParam, sizeof(CTKSIO));
_lclose(hf);
}
else
{
lpCtkSioParam->SIONum = 64;
lpCtkSioParam->DataRSIrqNo = IRQ3;
lpCtkSioParam->IntTimer1 = 2000;
lpCtkSioParam->DataProcIrqNo = IRQ5;
lpCtkSioParam->IntTimer2 = 33000l;
for (int i=0; i<64; i++)
{
lpCtkSioParam->BaudRate[i] = 3072;
lpCtkSioParam->SIOWriteReg[i][0] = 0x1818;
lpCtkSioParam->SIOWriteReg[i][1] = 0x0104;
lpCtkSioParam->SIOWriteReg[i][2] = 0x0200;
lpCtkSioParam->SIOWriteReg[i][3] = 0x13d1;
lpCtkSioParam->SIOWriteReg[i][4] = 0x0410;
lpCtkSioParam->SIOWriteReg[i][5] = 0x15e8;
lpCtkSioParam->SIOWriteReg[i][6] = 0x46eb;
lpCtkSioParam->SIOWriteReg[i][7] = 0x8790;
}
}
// 读规约参数
for (i=0; i<PROTOMAXNUM; i++)
{
Protocal[i].ProtoName[0] = '\0';
Protocal[i].DllName[0] = '\0';
Protocal[i].hDLLInst = NULL;
Protocal[i].RxProc = NULL;
Protocal[i].TxProc = NULL;
}
FILE *fp = fopen((LPSTR)"c:\\TCZ\\PROTOCAL.dat", "rt");
if (fp != NULL)
{
char EquName[50];
do {
fscanf (fp, "%s", EquName);
if (strcmpi (EquName, "规约数:")==0 || strcmpi (EquName, "规约数:")==0)
{
fscanf (fp, "%d\n", &TotalProtoNum);
break;
}
else TotalProtoNum=0;
} while (!feof (fp));
if (feof(fp) || !TotalProtoNum) fclose (fp);
else
{
for (int i=0; i<TotalProtoNum; i++)
{
char topchar[100];
do {
fscanf (fp, "%s", topchar);
}while (topchar[0]!='@' && !feof(fp));
fscanf (fp, "%s %s\n", Protocal[i].ProtoName, Protocal[i].DllName);
} /* end for */
fclose (fp);
} /* end else */
}
else
TotalProtoNum = 0;
// 读通道参数,并对通道进行初始化
lpChannelParam = (CHANNELPARAM FAR *)GlobalLock(hChannelParamMem);
hf = OpenFile ((LPSTR)"c:\\TCZ\\COMM.dat", (LPOFSTRUCT)&OfS, OF_READ);
if (hf != HFILE_ERROR)
{
_lread(hf, (LPSTR)&TotalChNum, sizeof(WORD));
if (TotalChNum>CHANNELMAXNUM) TotalChNum = CHANNELMAXNUM;
_lread(hf, lpChannelParam, sizeof(CHANNELPARAM)*TotalChNum);
_lclose(hf);
}
else
{
TotalChNum = CHANNELMAXNUM;
for (int i=0; i<TotalChNum; i++)
{
(lpChannelParam+i)->CHValidFlag = 0;
(lpChannelParam+i)->CHCheckFlag = 1;
(lpChannelParam+i)->CHType = CTKBOARD;
(lpChannelParam+i)->SIOOrd = i;
(lpChannelParam+i)->StaNo =0xffff;
(lpChannelParam+i)->RxBuffLen = 256; //jgx 256
(lpChannelParam+i)->TxBuffLen = 256; //jgx 256
(lpChannelParam+i)->SyncWord[0] = 0xeb;
(lpChannelParam+i)->SyncWord[1] = 0x90;
}
}
int k;
typedef struct
{
BYTE SSTFlag,Retry,RepTimes,RANDOM0,RANDOM1,RANDOM2,Poll,PAFFLAG,TIME,SDBB,DRFTIME;
WORD PollOver;
}Flag;
Flag *FLAG;
for (i=0; i<TotalChNum; i++)
{
(lpChannelParam+i)->CHStatus = 0l|ChOpen;
(lpChannelParam+i)->CHProcessFlag = 0l;
(lpChannelParam+i)->DownCmdSta = 0;
(lpChannelParam+i)->RxReadP = 0;
(lpChannelParam+i)->RxWriteP = 0;
(lpChannelParam+i)->hChRxBuff = NULL;
(lpChannelParam+i)->RecBuff = NULL;
(lpChannelParam+i)->TxReadP = 0;
(lpChannelParam+i)->TxWriteP = 0;
(lpChannelParam+i)->hChTxBuff = NULL;
(lpChannelParam+i)->SendBuff = NULL;
(lpChannelParam+i)->ErrDataNum=0;
for (int j=0; j<256; j++) (lpChannelParam+i)->Reserved[j]=0;
(lpChannelParam+i)->Reserved[92]=0x80;
Flag *FLAG=(Flag *)((lpChannelParam+i)->Reserved+80);
FLAG->PollOver=0x8000;
// (lpChannelParam+i)->StaNo =0;
if ((lpChannelParam+i)->CHValidFlag)
{
// (lpChannelParam+i)->hChRxBuff = GlobalAlloc (GMEM_NODISCARD|GMEM_MOVEABLE|GMEM_ZEROINIT,
// (lpChannelParam+i)->RxBuffLen);
(lpChannelParam+i)->hChRxBuff = GlobalAlloc (GMEM_NODISCARD|GMEM_MOVEABLE|GMEM_SHARE|GMEM_ZEROINIT,
(lpChannelParam+i)->RxBuffLen);
// (lpChannelParam+i)->hChTxBuff = GlobalAlloc (GMEM_NODISCARD|GMEM_MOVEABLE|GMEM_ZEROINIT,
// (lpChannelParam+i)->TxBuffLen);
(lpChannelParam+i)->hChTxBuff = GlobalAlloc (GMEM_NODISCARD|GMEM_MOVEABLE|GMEM_SHARE|GMEM_ZEROINIT,
(lpChannelParam+i)->TxBuffLen);
(lpChannelParam+i)->RecBuff = (BYTE FAR *)GlobalLock((lpChannelParam+i)->hChRxBuff);
(lpChannelParam+i)->SendBuff = (BYTE FAR *)GlobalLock((lpChannelParam+i)->hChTxBuff);
}
}
// 站参数设置
for (i=0; i<TotalStaNum; i++)
{
(lpStaParam+i)->BackCh[0] = -1;
(lpStaParam+i)->CurrUsedCh = (lpStaParam+i)->BackCh[0];
(lpStaParam+i)->BackCh[1] = -1;
(lpStaParam+i)->ProtoType = 0;
(lpStaParam+i)->DownCmdRP = 0;
(lpStaParam+i)->DownCmdWP = 0;
}
hf = OpenFile ((LPSTR)"c:\\TCZ\\STADEF.dat", (LPOFSTRUCT)&OfS, OF_READ);
if (hf != HFILE_ERROR)
{
_lread(hf, lpStaParam, sizeof(STATIONPARAM)*TotalStaNum);
_lclose(hf);
}
for (i=0; i<TotalStaNum; i++)
{
(lpStaParam+i)->DownCmdRP = 0;
(lpStaParam+i)->DownCmdWP = 0;
}
//将使用到的规约调入
for (i=0; i<TotalStaNum; i++)
{
k=(lpStaParam+i)->ProtoType;
if ((Protocal[k].hDLLInst==NULL))// && ((lpStaParam+i)->CurrUsedCh!=0xff))
{
Protocal[k].hDLLInst = LoadLibrary(Protocal[k].DllName);
if ((UINT)Protocal[k].hDLLInst >= 32)
{
Protocal[k].RxProc=(RXPROC)GetProcAddress(Protocal[k].hDLLInst,"RxProc");
Protocal[k].TxProc=(TXPROC)GetProcAddress(Protocal[k].hDLLInst,"TxProc");
}
}
}
//将使用到的硬件串行口初始化
for (i=0; i<TotalChNum; i++)
{
k=(lpChannelParam+i)->CHType;
if (!HardwareInstallFlag[k])
{
switch (k)
{
case CTKBOARD:
HardwareInstallFlag[k]=InitialCTK(HWindow, lpChannelParam, lpCtkSioParam);
break;
case STANDRS232:
break;
case MULTIRS232:
break;
case OTHERSIO:
break;
}
}
}
GlobalUnlock(hCTKSIOMem);
}
void TMainWindow::FreeSystemPara ()
{
WORD i;
for (i=0; i<TotalChNum; i++)
{
if ((lpChannelParam+i)->hChRxBuff) GlobalFree((lpChannelParam+i)->hChRxBuff);
if ((lpChannelParam+i)->hChTxBuff) GlobalFree((lpChannelParam+i)->hChTxBuff);
}
while (GlobalFlags (hChannelParamMem)&GMEM_LOCKCOUNT) GlobalUnlock (hChannelParamMem);
GlobalFree (hChannelParamMem);
while (GlobalFlags (hCTKSIOMem)&GMEM_LOCKCOUNT) GlobalUnlock (hCTKSIOMem);
GlobalFree (hCTKSIOMem);
while (GlobalFlags (hStaParamMem)&GMEM_LOCKCOUNT) GlobalUnlock (hStaParamMem);
GlobalFree (hStaParamMem);
while (GlobalFlags (hMsgDataMem)&GMEM_LOCKCOUNT) GlobalUnlock (hMsgDataMem);
GlobalFree (hMsgDataMem);
for (i=0; i<PROTOMAXNUM; i++)
{
if ((UINT)Protocal[i].hDLLInst >= 32)
FreeLibrary(Protocal[i].hDLLInst);
}
}
//--------------------------------------------------------------------------
TTczApp::TTczApp (LPSTR AName, HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
: TApplication (AName, hInstance, hPrevInstance, lpCmdLine,
nCmdShow)
{
// hBlueBrush = CreateSolidBrush (GetSysColor (COLOR_ACTIVECAPTION));
// hBlackBrush = CreateSolidBrush (RGB (0, 0, 0));
}
void TTczApp::InitInstance ()
{
if (!hPrevInstance) {
TApplication::InitInstance ();
// 装入加速健表
// HAccTable = LoadAccelerators (hInstance, "ACCELERATORS_1");
}
}
void TTczApp::InitMainWindow ()
{
MainWindow = new TMainWindow ();
}
void TTczApp::MessageLoop()
{
MSG msg;
while (GetMessage(&msg,NULL,NULL,NULL))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
//extern char WndTitle[100];
int PASCAL WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
if (!hPrevInstance) {
while (SetMessageQueue (30) == 0) ;
TTczApp MyApp ("通信处理系统", hInstance, hPrevInstance, lpCmdLine, nCmdShow);
HINSTANCE hLib;
hLib = LoadLibrary ("BWCC.DLL");
if (hLib < (HINSTANCE)32) return 0;
// 生成窗口背景逻辑刷子
HRSRC hrsrc = FindResource (hInstance, "BITMAP1", RT_BITMAP);
HGLOBAL hglbl = LoadResource (hInstance, hrsrc);
LockResource (hglbl);
hBackgroundBrush = CreateDIBPatternBrush (hglbl, DIB_RGB_COLORS);
MyApp.Run ();
UnlockResource (hglbl); // 删除窗口背景逻辑刷子
DeleteObject (hBackgroundBrush);
FreeLibrary (hLib);
return (MyApp.Status);
}
else {
// HWND hwnd = FindWindow ("MainWC", WndTitle);
// BringWindowToTop (hwnd);
// ShowWindow (hwnd, SW_RESTORE);
return (0);
}
}
//------------------------------------------------------------------//
void TSystemCfg::ReadData()
{
BYTE nodeno;
OFSTRUCT OfS;
HFILE hf = OpenFile ((LPSTR)"c:\\TCZ\\COMMCFG.dat", (LPOFSTRUCT)&OfS, OF_READ);
if (hf != HFILE_ERROR)
{
_lread(hf, (LPSTR)syscfg, sizeof(TSystemCfg));
_lclose(hf);
}
else
{
SetNode(0);
SetNetProto(0);
SetSysProto(1);
}
}
void TSystemCfg::SaveData()
{
BYTE nodeno;
OFSTRUCT OfS;
HFILE hf = OpenFile ((LPSTR)"c:\\TCZ\\COMMCFG.dat", (LPOFSTRUCT)&OfS, OF_CREATE);
if (hf != HFILE_ERROR)
{
_lwrite(hf, (LPSTR)syscfg, sizeof(TSystemCfg));
_lclose(hf);
}
}
//------------------------------------------------------------------//
void DrawStatusLine (LPSTR Str, LPSTR TypeName, RECT &rect)
{
int StatusBarW[5]={100, 110, 90, 360, 137};
COLORREF StatusLineC[5]={RGB(128,0,0), RGB(0,128,128), RGB(128,128,64), RGB(0,0,128),RGB(0,128,64)};
char *myweek[7] ={"日","一","二","三","四","五","六"};
char text[64];
RECT r;
struct dosdate_t d;
struct dostime_t t;
r=rect;
HDC DC = GetDC (hMainWindow);
r.top += 6;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?