📄 main_cdtcpp.~cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "MAIN_CDTcpp.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMain *Main;
/*struct YX{
DWORD TBZ[3];
unsigned char KZZ[6];
unsigned char XXZ[4][6];
};
struct YC{
DWORD TBZ[3];
unsigned char KZZ[6];
unsigned char XXZ[38][6];
};*/
//---------------------------------------------------------------------------
__fastcall TMain::TMain(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TMain::FormCreate(TObject *Sender)
{
hComm = INVALID_HANDLE_VALUE;
Timer1->Enabled=false;
BufferLenght=100;
hComm = CreateFile("COM1", GENERIC_READ, 0, 0,
OPEN_EXISTING, 0, NULL);
if( INVALID_HANDLE_VALUE == hComm ){
ShowMessage("无法打开串口1");
//Close();
}
DCB dcb;
dcb.DCBlength=sizeof(DCB);
if( !GetCommState(hComm, &dcb) ){
CloseHandle(hComm);
ShowMessage("无法获取串口1设置");
//Close();
}
dcb.BaudRate = 4800;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.ByteSize=8;
if( !SetCommState(hComm,&dcb) ){
CloseHandle(hComm);
ShowMessage("无法设置串口1");
//Close();
}
SetupComm(hComm, 1024, 0);
COMMTIMEOUTS t;
t.ReadIntervalTimeout = MAXDWORD;
t.ReadTotalTimeoutMultiplier = 5000;
t.ReadTotalTimeoutConstant = 500;
t.WriteTotalTimeoutMultiplier = 5000;
t.WriteTotalTimeoutConstant = 500;
if( !SetCommTimeouts(hComm, &t) ){
CloseHandle(hComm);
ShowMessage("串口1设置错误");
//Close();
}
PurgeComm(hComm, PURGE_TXCLEAR);
PurgeComm(hComm, PURGE_RXCLEAR);
Timer1->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TMain::FormClose(TObject *Sender, TCloseAction &Action)
{
if(hComm)
CloseHandle(hComm);
/*if(MSComm1->PortOpen==true)
MSComm1->PortOpen=false;*/
}
void __fastcall TMain::Timer1Timer(TObject *Sender)
{
OVERLAPPED sa;
unsigned long error;
Timer1->Enabled=false;
sa.Offset=0;
sa.OffsetHigh=0;
sa.hEvent = NULL;
if( INVALID_HANDLE_VALUE != hComm ){
//从串口读数据
ClearCommError(hComm, &error, NULL);
ReadFile(hComm, uchCommBuffer, 500, &BufferLenght, &sa);
Label4->Caption = AnsiString(BufferLenght);
if( BufferLenght>30 ) {
ShowMemoData();
GetCDTData();
}
}
Timer1->Enabled=true;
}
//---------------------------------------------------------------------------
void TMain::GetCDTData(void)
{
DWORD start=0;
//查找帧开始位置
for( DWORD i=0; i<BufferLenght-6; i++ ){
if( ( 0xEB == uchCommBuffer[i] ) & (0x90 == uchCommBuffer[i+1] )&&
(0xEB == uchCommBuffer[i+2]) & (0x90 == uchCommBuffer[i+3])&&
(0xEB == uchCommBuffer[i+4]) & (0x90 == uchCommBuffer[i+5]) ){
start=i;
break;
}
}
//ShowMessage(start);
if( start!=0 ){
if( uchCommBuffer[start+6] < 128 ){//如果控制字第7bit为0(有信息字)
switch( uchCommBuffer[start+7] ){//根据帧类别处理
case 0x61:
GetYC(start);
break;
case 0xC2:
break;
case 0xB3:
break;
case 0xF4:
GetYX(start);
break;
case 0x85:
break;
case 0x26:
break;
case 0x57:
break;
case 0xA8:
break;
case 0xD9:
break;
case 0x7A:
break;
case 0x0B:
break;
case 0x4C:
break;
case 0x3D:
break;
case 0x9E:
break;
default:
break;
}
}
}
}
void TMain::GetYC(int i)
{
unsigned char *p=&uchCommBuffer[i+12];
if( BufferLenght-12 < 24 )
return;
Memo1->Lines->Add("1234");
for( int i=0; i<4; i++)
for( int j=0; j<6; j++ )
StringGrid2->Cells[i][j]=*(p+i*6+j);
}
void TMain::GetYX(int i)
{
unsigned char *p=&uchCommBuffer[i+12];
if( BufferLenght-12 < 24 )
return;
}
//---------------------------------------------------------------------------
/*void __fastcall TMain::MSComm1Comm(TObject *Sender)
{
//ShowMessage("abcdefg");
AnsiString str; //声明一个AnsiString类型的变量
OleVariant s; //声明一个用于接收数据的OleVariant变量。
if(MSComm1->CommEvent==comEvReceive){// 接收缓冲区中是否收到Rthreshold个字符。
if(MSComm1->InBufferCount){// 是否有字符驻留在接收缓冲区等待被取出
s=MSComm1->Input;//接收数据
str=" ";
str+=s.AsType(varString);
Memo1->Text+=str;
}
}
}*/
//---------------------------------------------------------------------------
void TMain::ShowMemoData()
{
for(DWORD i=0; i<BufferLenght; i+=6){
Memo1->Lines->Add(IntToHex(uchCommBuffer[i], 2)+" "+
IntToHex(uchCommBuffer[i+1], 2)+" "+
IntToHex(uchCommBuffer[i+2], 2)+" "+
IntToHex(uchCommBuffer[i+3], 2)+" "+
IntToHex(uchCommBuffer[i+4], 2)+" "+
IntToHex(uchCommBuffer[i+5], 2)+" ");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -