?? unit1.cpp
字號(hào):
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "MSCommLib_OCX"
#pragma resource "*.dfm"
TfrmMain *frmMain;
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::OpenComm()//打開串行端口
{
AnsiString strMeg="不能打開端口"+String(PortNum);
try
{
MSComm1->CommPort=1;//PortNum;
MSComm1->PortOpen=true;
}
catch(...)
{ Application->MessageBox(strMeg.c_str(),"端口錯(cuò)誤,重新設(shè)置端口",MB_OK);}
//改變菜單
switch(PortNum)
{
case 1:
smnuPort1->Checked=true;smnuPort2->Checked=false;
break;
case 2:
smnuPort1->Checked=false;smnuPort2->Checked=true;
break;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::ReceiveReport()
{//讀模塊數(shù)據(jù)
rBuff = VarArrayCreate(OPENARRAY(int,(0,InBufferCount-1)),varByte);
rBuff = MSComm1->Input;
for(int i = 0;i<InBufferCount;i++)
rData[i]=rBuff.GetElement(i);
if(rData[0] == 0XEB && rData[1] == 0X90 && rData[2] == 0XEB && rData[3] == 0X90
&& rData[4] == 0XEB && rData[5] == 0X90 && rData[11]==CDTCRC(6))//判斷報(bào)文頭與校驗(yàn)碼
{
switch(rData[7])
{
case 0X61://重要遙測(cè)
for(int i=0;i<rData[8];i++)
{ if(rData[17+i*6]==CDTCRC(12+i*6))//判各遙測(cè)值校驗(yàn)碼
RM[i]= (rData[14+i*2]*256+rData[13+i*2]) & 0XFFF;//應(yīng)根據(jù)實(shí)際需要再乘以變比
}
break;
case 0XC2://次要遙測(cè)
break;
case 0XB3://一般遙測(cè)
break;
case 0XF4://遙信狀態(tài)
break;
case 0X57://設(shè)定命令
break;
}
}
RefreshData();
}
//---------------------------------------------------------------------------
Byte __fastcall TfrmMain::CDTCRC(int Pos)
{//計(jì)算CRC
ChkCRC=0;
for(int i=Pos;i<Pos+5;i++)//計(jì)算校驗(yàn)碼
{
ChkCRC^= rData[i];
for(int j=0;j<8;j++)
{ ChkCRC<<=1;
if(ChkCRC & 0X100) ChkCRC ^= 0X107;
}
}
return(~ChkCRC & 0xFF);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::Timer1Timer(TObject *Sender)
{//定時(shí)1秒檢測(cè)輸入緩沖區(qū)字節(jié)數(shù)
InBufferCount=MSComm1->InBufferCount;
StatusBar->Panels->Items[0]->Text =AnsiString(InBufferCount);
if(InBufferCount>80) MSComm1->InBufferCount=0;//保護(hù)將輸入緩沖區(qū)清零
if(InBufferCount==30)
ReceiveReport();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::RefreshData()
{//刷新數(shù)據(jù)
lblRM1->Caption=RM[0];
lblRM2->Caption=RM[1];
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
OpenComm();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::smnuExitClick(TObject *Sender)
{//退出
if(MSComm1->PortOpen) MSComm1->PortOpen=false;
Close();
}
//---------------------------------------------------------------------------
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -