• 主页
  • Windows SDK/API
  • 基础类
  • ActiveX
  • 数据库及相关技术
  • 网络及通讯开发
  • VCL组件使用和开发

BCB中 MSComm 控件发命令的问题

_fastcall 2012-03-13 05:30:38
我想用MSComm 控件向串口发送命令“5a5a11a5a5”(HEX文件格式) 请问各位大侠该如何发送
MSComm->Output =
应该怎么写???
...全文
269 点赞 收藏 8
写回复
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"
回复 点赞
发动态
发帖子
C++ Builder
创建于2007-08-02

2562

社区成员

10.2w+

社区内容

C++ Builder相关内容讨论区
社区公告
暂无公告