主页C++ Builder 资料C++ Builder 串口控件Victor 串口控件示例程序二进制数据收发演示程序
C++ Builder 串口控件
Victor 串口控件使用说明
Victor 串口控件示例程序
 • 文本收发演示程序
 • 二进制数据收发演示程序
 • 数据包收发演示程序
C++ Builder 编程技巧
C++ Builder 操作指南
C++ Builder 参考手册
网友留言/技术支持
二进制数据收发演示程序 - Victor 串口控件示例程序

串口通讯程序在大部分情况下都采用二进制数据收发
利用 Read 和 Write 方法, 可发送和接收任意类型的数据。

例(1), 发送简单数据类型:

char a[10];
AnsiString s;
short n;

YbCommDevice1->Write(a,10); //发送字符数组
YbCommDevice1->Write(s.c_str(),s.Length()); //发送字符串
YbCommDevice1->Write(&n,2); //发送一个 16 位的短整数, 先发送低位字节, 后发送高位字节


例(2), 发送结构:

#pragma pack(push,1) //用字节型对齐方式,下面的 TMyStruct 结构是 7 个字节, 否则 TMyStruct 结构是8个字节
typedef struct
{
char a; //字节型变量, 1 个字节
short b; //短整数变量, 2 个字节
long c; //长整数变量, 4 个字节
} TMyStruct;
#pragma pack(pop) //恢复原来的对齐方式

TMyStruct MyStruct; //定义结构变量
YbCommDevice1->Write(&MyStruct,sizeof(TMyStruct));


例(3), 接收数据:

char Buffer[8192]; //定义一个 8kb 缓存
int n = YbCommDevice1->Read(Buffer,8192); //收到 n 个字节, 接收的数据保存到 Buffer 里


例(4), 完整的例子 (此例子已包含在控件压缩包里面):
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
  try
   {
     YbCommDevice1->Active = true;
   }
  catch(Exception &e)
   {
     ShowMessage(L"YbCommDevice1: "+e.Message);
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonSet1Click(TObject *Sender)
{
  YbCommDevice1->SettingsDialog(this,true);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonSend1Click(TObject *Sender)
{
  int nBytes = 0;
  char Buffer[1000];
  wchar_t *EndPtr;
  UnicodeString 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();
        Buffer[nBytes++] = wcstol(t.w_str(), &EndPtr, 16); //十六进制字符串转成字节
      }
     else //还剩下最后一个字节
      {
        t = s;
        s = L"";
        Buffer[nBytes++] = wcstol(t.w_str(), &EndPtr, 16); //十六进制字符串转成字节
      }
   }
  YbCommDevice1->Write(Buffer,nBytes);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::YbCommDevice1CommNotify(TObject *Sender, int NotifyType)
{
  UnicodeString s;
  unsigned char Buf[8192]; //收到的字节数不会超过串口缓存的容量, 所以分配一个缓存容量相同的Buf
  int n = YbCommDevice1->Read(Buf,8192); //收到 n 个字节

  for(int i=0; i<n; i++)
    s += IntToHex(Buf[i],2) + " ";
  s = s.Trim();

  if(!s.IsEmpty())
   {
     Memo1->Lines->Add(s);
   }
}
//---------------------------------------------------------------------------
◤上一页:文本收发演示程序下一页:数据包收发演示程序

C++ 爱好者 -- Victor Chen 的个人网站 www.cppfans.com 辽ICP备11016859号