MSComm怎么總是返回上一條指令的結果?

ismart 2011-04-01 11:03:04
代碼如下:

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
MSComm1->OutBufferCount = 0;
MSComm1->Output = Edit1->Text + "\r";
MSComm1->RThreshold = 1;
Memo1->Lines->Add("\n" + Edit1->Text);
Memo1->Lines->Add(temp);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MSComm1Comm(TObject *Sender)
{
OleVariant rec;

rec = MSComm1->Input;
temp = temp + rec.AsType(varString);
MSComm1->InBufferCount = 0;
}
//---------------------------------------------------------------------------


運行后發送指令,它總是返回上一條指令的執行結果而不是當前指令的返回值,我以為是設備需要時間
但是我用Sleep(1000)后,結果也是這樣。有高手知道是怎么回事嗎?
...全文
125 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fall513 2011-04-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fall513 的回复:]

MSComm1->Output = Edit1->Text + "\r";
改成
MSComm1->Output = Edit1->Text + "\n";
看看
[/Quote]

搞錯

是你的代碼有問題

把 Memo1->Lines->Add(temp);放到MSComm1Comm中




fall513 2011-04-01
  • 打赏
  • 举报
回复
MSComm1->Output = Edit1->Text + "\r";
改成
MSComm1->Output = Edit1->Text + "\n";
看看
wangcftxz 2011-04-01
  • 打赏
  • 举报
回复
學習了
fall513 2011-04-01
  • 打赏
  • 举报
回复
....
if (tmp[strlen(tmp.c_str()) - 1 ] == '\r') {
//do somethings
tmp = "";
}
ismart 2011-04-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fall513 的回复:]
if (tmp[strlen(tmp) - 1 ] == '\r') {
//do somethings
tmp = "";
}
[/Quote]
[C++ Error] Unit1.cpp(80): E2034 Cannot convert 'AnsiString' to 'const char *'
fall513 2011-04-01
  • 打赏
  • 举报
回复
if (tmp[strlen(tmp) - 1 ] == '\r') {
//do somethings
tmp = "";
}
ismart 2011-04-01
  • 打赏
  • 举报
回复
如果我不是要在Memo顯示,而是要發一條指令,返回一個結果,再根據結果判定下一步怎么辦,怎么來接收這個返回結果?儀器返回值的分隔符是 CR(0DH)。
fall513 2011-04-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ismart 的回复:]

引用 2 楼 fall513 的回复:
引用 1 楼 fall513 的回复:

MSComm1->Output = Edit1->Text + "\r";
改成
MSComm1->Output = Edit1->Text + "\n";
看看


搞錯

是你的代碼有問題

把 Memo1->Lines->Add(temp);放到MSComm1Comm中


……
[/Quote]

那你就别用Memo1->Lines->Add(temp),用Memo1->Text = Memo1->Text + tmp;
add会自动在后面加上回车换行
ismart 2011-04-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fall513 的回复:]
引用 1 楼 fall513 的回复:

MSComm1->Output = Edit1->Text + "\r";
改成
MSComm1->Output = Edit1->Text + "\n";
看看


搞錯

是你的代碼有問題

把 Memo1->Lines->Add(temp);放到MSComm1Comm中
[/Quote]

這樣會每返回一個字符就add一次,比如返回ok,它就變成
o
k

我需要它所有的返回字符 “ok”啊~

703

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder ActiveX/COM/DCOM
社区管理员
  • ActiveX/COM/DCOM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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