串口通讯问题。在线等待!

cdwps 2008-09-22 04:26:26
void __fastcall TForm1::MSComm1Comm(TObject *Sender)
{
String mm,aa,bb;
OleVariant s;
char *buf;
switch(this->MSComm1->CommEvent)
{
case 2:
{
Sleep(500);
s=this->MSComm1->Input;
mm=s.AsType(varString);
for(int i=1;i<=mm.Length();i++)
{
aa=IntToHex(mm[i],2);
if(aa.Length()==8) ///////////////清除“FFFFFF ”
{
bb=bb+aa.SubString(7,2);
}
else
{
bb=bb+aa;
}
}
this->RzRichEdit1->Text=this->RzRichEdit1->Text+bb;
}
}
}
ONCOMM事件可以得到回传的16进制数据,但是数据总是缺少。应该怎么解决?
...全文
160 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
小猫猫爱吃鱼 2008-09-30
  • 打赏
  • 举报
回复
void __fastcall TForm1::MSComm1Comm(TObject *Sender)
{
// COM1:接收事件,格式与InputMode一致,
// 当无新来字符时,即使有未取字符,可能不会再次发生接收事件
// 接收的字符边界是乱的
static int js=0;
js++;
static String gs="";
String ss="";
OleVariant buf;
int bl;
while (buf=MSComm1->Input,
bl=buf.ArrayHighBound()+1,bl!=0) // 要反复取字符串,直至空
{
if (MSComm1->InputMode==0) // 文本方式,变体是一个串(0维)
ss=(WideString)buf;
else // 二进方式,变体1维数组
{
Memo1->Lines->Add(String(js)+":"+String(bl));
for (int i=0;i<bl;i++)
ss=ss+(char)(unsigned char)buf.GetElement(i);
break;
}
}
if (bl==0)
Memo1->Lines->Add(String(js)+":"+String(bl));
for (int i=1;i<=ss.Length();i++) // 找结束符\n
if (ss=='\n')
{
Memo1->Lines->Add(gs);
gs="";
}
else
gs=gs+ss;
}
小猫猫爱吃鱼 2008-09-30
  • 打赏
  • 举报
回复
应该是波特率的问题吧,问题解决了吗
BCBPLC 2008-09-28
  • 打赏
  • 举报
回复
我用MSCOMM32。OCX做了个通讯小项目,没有发生所谓传输丢失问题;
zhangchunge 2008-09-28
  • 打赏
  • 举报
回复
关注!
queshiybb 2008-09-28
  • 打赏
  • 举报
回复
波特率不一致吧
springworker 2008-09-28
  • 打赏
  • 举报
回复
关注!
xabcxyz 2008-09-23
  • 打赏
  • 举报
回复
长度都不对应该是线路或者波特率的问题
constantine 2008-09-23
  • 打赏
  • 举报
回复
串口设置2端是否一样,请检查!
cdwps 2008-09-23
  • 打赏
  • 举报
回复
此为错误数据:A6 A6 3F 22 3F 42 00 42 01 3B 00
正确的数据为:A6 A6 A6 07 22 88 06 42 00 42 01 3B BB
是什么原因?能帮忙解决一下吗?
rookieme 2008-09-22
  • 打赏
  • 举报
回复
是数据不够还是误码?缓冲区足够吗?等待的时间够吗?
rookieme 2008-09-22
  • 打赏
  • 举报
回复
设置为2进制传输了吗?

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧