//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#define IfEmptyText(Text) ((Text)=="" || (Text)==" ")
#define STRINGBEGIN '!'
#define STRINGEND '@'
#define STRINGTAG1 7
#define STRINGTAG2 29
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CPort"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Init();
}
//---------------------------------------------------------------------------
void TForm1::Init(void)
{
SerialOpenFlag=0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//Type
CBType->Clear();
CBType->Items->Add("Type_None");
CBType->Items->Add("Type_Amend");
CBType->ItemIndex=0;
//Cmd
CBCmd->Clear();
CBCmd->Items->Add("Cmd_None");
CBCmd->Items->Add("Cmd_Read");
CBCmd->Items->Add("Cmd_Write");
CBCmd->ItemIndex=0;
//DataType
CBDataType->Clear();
CBDataType->Items->Add("DataType_None");
CBDataType->Items->Add("DataType_ColdAdd");
CBDataType->Items->Add("DataType_mA");
CBDataType->Items->Add("DataType_lR1");
CBDataType->Items->Add("DataType_lR2");
CBDataType->Items->Add("DataType_V");
CBDataType->Items->Add("DataType_mV1");
CBDataType->Items->Add("DataType_mV2");
CBDataType->Items->Add("DataType_mV3");
CBDataType->Items->Add("DataType_hR1");
CBDataType->Items->Add("DataType_hR2");
CBDataType->Items->Add("DataType_hR3");
CBDataType->Items->Add("DataType_hR4");
CBDataType->Items->Add("DataType_hR5");
CBDataType->Items->Add("DataType_mAout");
CBDataType->ItemIndex=0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
SerialClose();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonOKClick(TObject *Sender)
{
try
{
BYTE type,cmd,dacount,datype,str[32],count;
int a,b;
AnsiString string;
EditString->Text="";
type=CBType->ItemIndex;
cmd=CBCmd->ItemIndex;
dacount=1;
datype=CBDataType->ItemIndex;
if(!IfEmptyText(EditA->Text) && !IfEmptyText(EditB->Text))
{
a=StrToInt(EditA->Text);
b=StrToInt(EditB->Text);
GetString(type,cmd,dacount,datype,a,b,str,&count);
string=PCharToStr(str,count);
EditString->Text=string;
SerialWrite(str,count);
}
}
catch(Exception &e)
{
ShowMessage(e.Message);
}
}
//---------------------------------------------------------------------------
AnsiString TForm1::PCharToStr(BYTE *pch,BYTE count)
{
BYTE i;
AnsiString str;
str="";
for(i=0;i<count;i++)
{
str+=IntToHex((int)*(pch+i),2)+" ";
}
return str;
}
void TForm1::GetString(BYTE type,BYTE cmd,BYTE dacount,BYTE datype,int a,int b,BYTE *str,BYTE *count)
{
*count=0;
//21 07 1D 01 02 01 01 32 36 41 33 46 44 44 37 40 -- 9891 -553
*(str+(*count)++)=STRINGBEGIN;
*(str+(*count)++)=STRINGTAG1;
*(str+(*count)++)=STRINGTAG2;
*(str+(*count)++)=type;
*(str+(*count)++)=cmd;
*(str+(*count)++)=dacount;
*(str+(*count)++)=datype;
IntToHexA(a,str+(*count),4);
(*count)+=4;
IntToHexA(b,str+(*count),4);
(*count)+=4;
*(str+(*count)++)=STRINGEND;
}
//---------------------------------------------------------------------------
void TForm1::IntToHexA(int da,BYTE *pda,BYTE len)
{
BYTE i,t;
for(i=0;i<len;i++)
{
t=da&0x0f;
if(t<=9) t+='0';
if(t>=10 && t<=15) t=t-10+'A';
*(pda+len-1-i)=t;
da>>=4;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonSetupClick(TObject *Sender)
{
ComPort1->ShowSetupDialog();
}
//---------------------------------------------------------------------------
void TForm1::SerialOpen(void)
{
try
{
if(!SerialOpenFlag)
{
ComPort1->Open();
SerialOpenFlag=1;
}
}
catch(Exception &e)
{
ShowMessage(e.Message);
}
}
//---------------------------------------------------------------------------
void TForm1::SerialClose(void)
{
try
{
if(SerialOpenFlag)
{
ComPort1->Close();
SerialOpenFlag=0;
}
}
catch(Exception &e)
{
ShowMessage(e.Message);
}
}
//---------------------------------------------------------------------------
void TForm1::SerialWrite(BYTE *buf,int count)
{
try
{
if(!SerialOpenFlag) SerialOpen();
if(SerialOpenFlag && buf)
{
ComPort1->Write(buf,count);
}
}
catch(Exception &e)
{
ShowMessage(e.Message);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonOpenClick(TObject *Sender)
{
SerialOpen();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonCloseClick(TObject *Sender)
{
SerialClose();
}
//---------------------------------------------------------------------------