📄 basemain.cpp.bak
字号:
void __fastcall TForm1::btnOpenClick(TObject *Sender)
{
m_bOpenPort=!m_bOpenPort;
if(m_bOpenPort)
{
btnOpen->Caption = "打开";
m_Port.ClosePort();
ShpPort->Brush->Color = clBlack;
m_bOpenPort = true;
}
else
{
m_nBaud = StrToInt(CmbBand->Text);
m_nCom = strtol(((CmbPort->Text).SubString(4,1)).c_str(), NULL, 10);
m_cParity='N';
m_nDatabits=8;
m_nStopbits=1;
m_dwCommEvents = EV_RXFLAG | EV_RXCHAR;
if(m_Port.InitPort(m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits,m_dwCommEvents,512))
{
m_Port.StartMonitoring();
ShpPort->Brush->Color = clRed;
btnOpen->Caption = "关闭";
}
else
{
Form2->SetMsgText("串口资源被占用!");
Form2->ShowModal();
ShpPort->Brush->Color = clBlack;
btnOpen->Caption = "打开";
m_bOpenPort = true;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnCloseClick(TObject *Sender)
{
m_Port.ClosePort();
ShpPort->Brush->Color = clBlack;
btnOpen->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnQueryClick(TObject *Sender)
{
if(m_Port.m_hComm==NULL)
{
Form2->SetMsgText("请打开串行口!");
Form2->ShowModal();
return;
}
else
{
miCmd = 0x11;
Form3->InitShow(DELAY_DIRECT/1000 * 9);
Timer1->Enabled = false;
SetEvent(m_Port.m_hEvent);
if(gb_Direct)
{
gpmemfun = &TForm1::SendQueryPackDirect;
}
StartThread();
Form3->ShowModal();
}
}
void __fastcall TForm1::StartThread()
{
mhSubThread = CreateThread (NULL, 0, StartSubThread, NULL, 4, NULL);
ResumeThread(mhSubThread);
}
int __fastcall TForm1::StaticsActualPack(INT8U QueryStatus, INT8U bModem)
{
int i=0, posLen = 0;
INT8U Temp[50], Max_Pack;
bool flag = false;
AnsiString MessageText;
if(QueryStatus == 0x02)
MessageText = "请选择您要查询的监控参量";
else if(QueryStatus == 0x03)
MessageText = "你要设置的监控参量不能为空!";
miSelCount = 0;
for(i = 0; i < MAX_OBJECTID; i++)
{
if(gp_ComGrid[i].bUsed)
{
if(gp_ComGrid[i].pCb->Checked)
{
if(QueryStatus == 0x03)
{
if(i>0x0300 && i<0x03FF)
continue;
else if((i>0x0500 && i<0x05FF) || i==0x0606 || i==0x0019)
{
if(!flag)
{
mSelObject[miSelCount].Object_ID = 0xA204;
mSelObject[miSelCount++].Object_Length = 24;
flag = true;
}
continue;
}
if(gObjectValue[i].bSingle)
{
if(gp_ComGrid[i].pCbx->ItemIndex == -1)
{
Form2->SetMsgText("对不起,有对象未设置实例");
Form2->ShowModal();
return 0;
}
}
else
{
if((gp_ComGrid[i].pEd->Text).IsEmpty())
{
Form2->SetMsgText("对不起,有对象未设置实例");
Form2->ShowModal();
return 0;
}
}
}
mSelObject[miSelCount].Object_ID = gp_ComGrid[i].ObjectID;
mSelObject[miSelCount++].Object_Length = gp_ComGrid[i].SizeLen;
}
}
}
if(miSelCount == 0)
{
Form2->SetMsgText(MessageText);
Form2->ShowModal();
return 0;
}
PackCount = 0;
posLen = 0;
if(bModem)
Max_Pack = MAX_MDM_VALID_PACK_SIZE;
else
Max_Pack = MAX_VALID_PACK_SIZE;
for(i = 0; i < miSelCount; i++)
{
BuildObjectPack(mSelObject[i].Object_ID, mSelObject[i].Object_Length, Temp);
if((posLen + mSelObject[i].Object_Length + 3) > Max_Pack)
{
posLen = 0;
PackCount ++;
}
posLen = posLen + mSelObject[i].Object_Length + 3;
}
if(posLen > 0)
PackCount++;
return PackCount;
}
int __fastcall TForm1::StaticsObjPack(INT16U SelObject[][2], INT8U QueryStatus, INT8U bModem)
{
int i=0, posLen = 0;
INT8U Temp[50], Max_Pack;
AnsiString MessageText;
if(QueryStatus == 0x02)
MessageText = "请选择您要查询的监控参量";
else if(QueryStatus == 0x03)
MessageText = "你要设置的监控参量不能为空!";
PackCount = 0;
posLen = 0;
if(bModem)
Max_Pack = MAX_MDM_VALID_PACK_SIZE;
else
Max_Pack = MAX_VALID_PACK_SIZE;
for(i = 0; i < SelObject[i][0]!=0; i++)
{
mSelObject[i].Object_ID = gp_ComGrid[SelObject[i][0]].ObjectID;
mSelObject[i].Object_Length = gp_ComGrid[SelObject[i][0]].SizeLen;
BuildObjectPack(mSelObject[i].Object_ID, mSelObject[i].Object_Length, Temp);
if((posLen + mSelObject[i].Object_Length + 3) > Max_Pack)
{
posLen = 0;
PackCount ++;
}
posLen = posLen + mSelObject[i].Object_Length + 3;
}
miSelCount = i;
if(posLen > 0)
PackCount++;
return PackCount;
}
void __fastcall TForm1::CommonSend(INT8U QueryStatus, INT8U *SndPack, int PackLen)
{
String InfoLine, InfoTitle;
char szHead[100];
INT8U rslt = FALSE;
static char szType[][20]=
{
"",
"查询监控列表",
"查询",
"设置",
"恢复到出厂设置",
"",
"",
"",
"",
"",
"",
"切换监控软件版本",
"",
};
memset(gSPackData.depack_data, 0 , DEPACK_LENGTH);
if(!gb_Direct)
{
Form3->InitShow(DELAY_DIRECT/1000 * 9);
Timer2->Enabled = true;
}
if(QueryStatus == 0x0B)
gSPackData.depack_data[PRTCL_POS_TYPE] = 0x11;
else if(QueryStatus >= 0x03)
gSPackData.depack_data[PRTCL_POS_TYPE] = 0x03;
else
gSPackData.depack_data[PRTCL_POS_TYPE] = 0x02;
str_cpy(&gSPackData.depack_data[PRTCL_POS_VARIABLE], SndPack, PackLen);
gp_SPack->Build_Pack(&gSPackData, PackLen);
InfoTitle.sprintf("正在发送%d/%d包数据(%s)。", PackPos, PackCount,szType[QueryStatus]);
Form3->st_Status->Caption = InfoTitle;
if(gb_Direct)
InfoLine = INT8U_2_Str(gSPackData.depack_data, gSPackData.len_depack);
else
{
InfoLine = (char*)gSPackData.packed_data;
sprintf(szHead, "成功接收%d/%d包数据:(%s)", PackPos, PackCount, szType[QueryStatus]);
CIntPtrMap *t = new CIntPtrMap(gp_SPack->GetPackId(), szHead);
if(!gSendPackTree.Insert(t))
{
MessageBox(NULL, "Insert Node", "Fail!", MB_OK);
}
}
InfoTitle.sprintf("正在发送%d/%d包数据(%s):", PackPos++, PackCount, szType[QueryStatus]);
InfoLine = InfoTitle + InfoLine;
MergeObjectInfo(InfoLine);
ResetEvent(gOkEvent);
ResetEvent(gErrEvent);
rslt = gp_SPack->Send_Data();
if(!gb_Direct)
{
if(rslt == FALSE)
InfoLine += " 发送失败!";
else
InfoLine += " 发送完毕!";
EnterCriticalSection(&g_csSync);
Memo1->Lines->Delete(Memo1->Lines->Count - 1);
Memo1->Lines->Add(InfoLine);
LeaveCriticalSection(&g_csSync);
Timer2->Enabled = false;
}
}
void TForm1::SendQueryPackDirect()
{
String InfoLine, InfoTitle;
char buf[_1K];
INT8U SinglePack[MAX_PACK_SIZE], PackLen;
DWORD Event;
strcpy(buf, "00");
PackPos = 1;
PackCount = 1;
gSendPackCount = PackCount;
SinglePack[0] = 0x0;
str_cpy(&gSPackData.depack_data[6], SinglePack, 0);
gp_SPack->Build_485Pack(&gSPackData, 0, miCmd);
InfoLine = INT8U_2_Str(gSPackData.depack_data, gSPackData.len_depack);
InfoTitle.sprintf("正在发送数据包:%s", InfoLine);
MergeObjectInfo(InfoTitle);
Form3->st_Status->Caption = "正在发送1包数据....";
ResetEvent(gOkEvent);
ResetEvent(gErrEvent);
gp_SPack->Send_Data();
Timer2->Enabled = true;
Form3->pr_Bar_Status->Position = 0;
Event = WaitForMultipleObjects(2, m_hEventArray, FALSE, DELAY_DIRECT);
Timer2->Enabled = false;
if(Event == WAIT_TIMEOUT || Event == 1)
{
goto Exit;
}
gSendPackCount--;
InfoLine.sprintf("成功接受数据包%s", INT8U_2_Str(gReceivePackData.depack_data, gReceivePackData.len_depack));
MergeObjectInfo(InfoLine);
DealReceivePack();
Exit:
if(Form3->Visible)
Form3->Close();
if(gSendPackCount == 0)
MsgText = "数据发送成功";
else
MsgText = "通讯超时:发送数据失败!";
SendMessage(this->Handle, MESSAGE_SHOW, 0, 0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DispReceiveLine(char *pStatus)
{
String InfoLine, InfoTitle;
if(gb_Direct)
InfoLine = INT8U_2_Str(gReceivePackData.depack_data, gReceivePackData.len_depack);
else
InfoLine = (char*)gReceivePackData.packed_data;
InfoTitle.sprintf("成功接收%d/%d包数据:(%s):", PackPos-1, PackCount, pStatus);
InfoLine = InfoTitle + InfoLine;
MergeObjectInfo(InfoLine);
}
void __fastcall TForm1::DispErrorLine(char *pStatus)
{
String InfoLine, InfoTitle;
if(gb_Direct)
InfoLine = INT8U_2_Str(gReceivePackData.depack_data, gReceivePackData.len_depack);
else
InfoLine = (char*)gReceivePackData.packed_data;
InfoTitle.sprintf("%s:", pStatus);
InfoLine = InfoTitle + InfoLine;
MergeObjectInfo(InfoLine);
}
void __fastcall TForm1::btnAllClick(TObject *Sender)
{
for(int i=0; i<MAX_OBJECTID; i++)
{
if(gp_ComGrid[i].bUsed)
gp_ComGrid[i].pCb->Checked = true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnCancelClick(TObject *Sender)
{
for(int i=0; i<MAX_OBJECTID; i++)
{
if(gp_ComGrid[i].bUsed)
gp_ComGrid[i].pCb->Checked = false;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CmbPortChange(TObject *Sender)
{
mbConnect = false;
if(m_Port.m_hComm!=NULL)
{
m_Port.ClosePort();
}
btnOpen->Caption = "打开";
ShpPort->Brush->Color = clBlack;
m_bOpenPort = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N12Click(TObject *Sender)
{
INT8U pageid;
INT16U iStart, iEnd;
pageid = TabbedNotebook1->PageIndex;
iStart = pageid<<8;
iEnd = iStart + 0xFF;
for(int i=iStart; i<iEnd; i++)
{
if(gp_ComGrid[i].bUsed)
gp_ComGrid[i].pCb->Checked = true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N13Click(TObject *Sender)
{
INT8U pageid;
INT16U iStart, iEnd;
pageid = TabbedNotebook1->PageIndex;
iStart = pageid<<8;
iEnd = iStart + 0xFF;
for(int i=iStart; i<iEnd; i++)
{
if(gp_ComGrid[i].bUsed)
gp_ComGrid[i].pCb->Checked = false;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N15Click(TObject *Sender)
{
for(int i= 0x0200; i<0x02FF; i++)
{
if(gp_ComGrid[i].bUsed)
gp_ComGrid[i].pCbx->ItemIndex = 1;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N16Click(TObject *Sender)
{
for(int i= 0x0200; i<0x02FF; i++)
{
if(gp_ComGrid[i].bUsed)
gp_ComGrid[i].pCbx->ItemIndex = 0;
}
}
//---------------------------------------------------------------------------
void FreeMemory()
{
for(int i=0; i< MAX_OBJECTID; i++)
{
gp_ComGrid[i].MakeEmpty();
}
}
void __fastcall TForm1::SelectType()
{
if(CmbWays->Text == "本地")
{
if(gp_SPack)
delete gp_SPack;
gp_SPack = new CPack485Local();
if(gp_RPack)
delete gp_RPack;
gp_RPack = new CPack485Local();
gb_Direct = true;
}
else
{
if(gp_SPack)
delete gp_SPack;
gp_SPack = new CPackSMS();
if(gp_RPack)
delete gp_RPack;
gp_RPack = new CPackSMS();
gb_Direct = false;
}
gp_SPack->SetSerialPort(&m_Port);
}
void __fastcall TForm1::btnIntClick(TObject *Sender)
{
gsModuleAdd = txtAddr->Text;
}
//---------------------------------------------------------------------------
void TForm1::RefreshGrid()
{
if(!m_bWays)
{
for(int i=0; i<MAX_OBJECTID; i++)
{
if(gp_ComGrid[i].bUsed == 0) continue;
gp_ComGrid[i].pCb->Checked = false;
if(gp_ComGrid[i].EditStyle == 0)
{
gp_ComGrid[i].pEd->Text = "";
}
else if(gp_ComGrid[i].EditStyle == 1)
{
if(i>=0x0200 && i<=0x02FF)
gp_ComGrid[i].pCbx->ItemIndex = 0;
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -