BCB中 MSComm 控件发命令的问题

_fastcall 2012-03-13 05:30:38
我想用MSComm 控件向串口发送命令“5a5a11a5a5”(HEX文件格式) 请问各位大侠该如何发送
MSComm->Output =
应该怎么写???
...全文
351 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wodejia4107 2012-12-24
  • 打赏
  • 举报
回复
兄弟,你应该说说你是怎么解决的呀,要不然,问题没说明白,大家也不会提高呀。
缘中人 2012-03-14
  • 打赏
  • 举报
回复
通过OnComm事件接收数据,必须把MSComm的RThreshold属性设置为大于0,只有这样在接收到字符时才会产生一个OnComm事件。

void __fastcall TForm1::MSComm1Comm(TObject *Sender)
{
AnsiString str; file://声明一个AnsiString类型的变量
OleVariant s; file://声明一个用于接收数据的OleVariant变量。
if(MSComm1->CommEvent==comEvReceive)
// 接收缓冲区中是否收到Rthreshold个字符。
{
if(MSComm1->InBufferCount)// 是否有字符驻留在接收缓冲区等待被取出
{
s=MSComm1->Input;//接收数据
str=s.AsType(varString); file://把接收到的OleVariant变量转换成AnsiString类型
Memo1->Text=Memo1->Text+str;//把接收到的数据显示在Memo1中。

}
}
}

缘中人 2012-03-14
  • 打赏
  • 举报
回复
MSComm挺简单的,就是几个属性理解了就可以了。

MSComm1->Output=StringToOleStr(Memo2->Text); file://把AnsiString型转化成//Ole形式。
_fastcall 2012-03-14
  • 打赏
  • 举报
回复
多谢楼上两位大哥,问题已经解决了!以后还要多多请教..
ccrun.com 2012-03-14
  • 打赏
  • 举报
回复
你需要按16进制发送。试试这样:

byte Command[5] = { 0x5A, 0x5A, 0x11, 0xA5, 0xA5 };

OleVariant vBuff = VarArrayCreate(OPENARRAY(int, (0, 5)), varByte);
for (int i = 0; i < 5; i++)
vBuff.PutElement(Command[i], i);

MSComm1->Output = vBuff;
_fastcall 2012-03-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ksrsoft 的回复:]

MSComm挺简单的,就是几个属性理解了就可以了。

MSComm1->Output=StringToOleStr(Memo2->Text); file://把AnsiString型转化成//Ole形式。
[/Quote]

谢谢 ksrsoft 的回答

我也是这么写的 MScomm1->Output = StringToOleStr( edt3->Tex);
可是板子还是收不到命令

我想得到的是这样的效果:
板子和电脑通过串口连接,我向串口发送开始命令:5a5a11a5a5, 板子接收到命令返回数据,我在通过串口接收数据 然后显示出来 我现在不懂这5a5a11a5a5 是发字符串还是字节,接收的数据是12进制的但是显示时候是16进制显示,我是不是发命令也要发16进制的?
ccrun.com 2012-03-14
  • 打赏
  • 举报
回复
Google "site:csdn.net MSComm Output"

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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