//---------------------------------------------------------------------------
#pragma pack(push,1) //开始定义数据包, 采用字节对齐方式
const MyPkgSize = 1024; //数据包最大长度
typedef struct
{
long nBytes; //第一个参数必须是 32 位整数, 表示数据的字节数
char Data[MyPkgSize]; //数据, 可以是任意的
} TMyPackage; //自定义的数据包
#pragma pack(pop) //结束定义数据包, 恢复原来对齐方式
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
YbCommDevice1->FrameSettings->FrameHead
= 0xdb; //数据包头
YbCommDevice1->FrameSettings->FrameTail
= 0xde; //数据包尾
YbCommDevice1->FrameSettings->FrameCtrl
= 0xdc; //数据控制符
try
{
YbCommDevice1->Active
= true;
}
catch(Exception &e)
{
ShowMessage("YbCommDevice1:
"+e.Message);
if(!YbCommDevice1->SettingsDialog(this,true))
Application->Terminate();
}
YbCommDevice1->PackageSize =
MyPkgSize; //这个数据必须正确!
YbCommDevice1->UsePackage = true;
//启动数据包 (可以随时启动和停止, 与 Active 属性无关)
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonSetClick(TObject *Sender)
{
YbCommDevice1->SettingsDialog(this,true);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonSendClick(TObject *Sender)
{
TMyPackage pkg;
pkg.nBytes = 0;
char *EndPtr=0; //指示数据转换错误 if(EndPtr){if(*EndPtr){
转换失败 }}
AnsiString t,s = Edit1->Text.Trim();
while(s.Length()>0)
{
int p = s.Pos('
'); //空格
if(p>0)
{
t
= s.SubString(1,p-1);
s
= s.SubString(p+1,s.Length()).Trim();
pkg.Data[pkg.nBytes++]
= strtol(t.c_str(), &EndPtr, 16); //十六进制字符串转成字节
}
else //还剩下最后一个字节
{
t
= s;
s
= "";
pkg.Data[pkg.nBytes++]
= strtol(t.c_str(), &EndPtr, 16); //十六进制字符串转成字节
}
}
YbCommDevice1->WritePackage(&pkg);
//发送数据包
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
TMyPackage pkg;
while(YbCommDevice1->ReadPackage(&pkg))
{
AnsiString
s;
for(int i=0;
i<pkg.nBytes; i++)
s += IntToHex((unsigned
char)pkg.Data[i],2) + " ";
s = s.Trim();
if(!s.IsEmpty())
Memo1->Lines->Add(s);
}
}
//---------------------------------------------------------------------------
|