全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3005
推到 Plurk!
推到 Facebook!

寫入COM PORT失敗

答題得分者是:aftcast
Solaris2005
一般會員


發表:7
回覆:13
積分:4
註冊:2003-05-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2013-02-27 17:24:05 IP:219.87.xxx.xxx 訂閱
請教各位前輩,
(1)的寫法, 寫到comport, write file 成功之後, 卻要2到3秒, 合理嗎? 是不是我有什麼地方寫錯了?
(2)的寫法, 寫到comport, 失敗, 卻立即回應, 這樣是錯在什麼地方?
==================================================
(1) hCom = CreateFile("COM1", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
(2) hCom = CreateFile("COM1", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,, NULL);

// 以下在兩種寫法不變
if(hCom == INVALID_HANDLE_VALUE)
{
return false;
}
DCB dcb;
if(!GetCommState(hCom, &dcb))
{
return false;
}
dcb.BaudRate = 19200;
dcb.ByteSize = 8;
dcb.Parity = ODDPARITY;
dcb.StopBits = ONESTOPBIT;
if(SetCommState(hCom, &dcb) == 0)
{
return false;
}

char sCommandBuf[MAX_COMMAND_NUM];

DWORD dwBytesWritten;
if(!WriteFile(hCom, sCommandBuf, sizeof(sCommandBuf), &dwBytesWritten, NULL))
{
// ng
}
else
{
// ok
}
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2013-02-28 18:19:50 IP:114.42.xxx.xxx 訂閱
你好,
(1) 2至3秒並不一定不合理,而且你的baud rate 19200而已,若資料量大的話則有可能數秒。

(2) 第二種寫法FILE_FLAG_OVERLAPPED的參數,會立即回應是正確的!,它本來就是會立即回應。這種寫法較複雜,要自己實作event的處理,詳情google一下應該有不少的文章!

===================引 用 Solaris2005 文 章===================
請教各位前輩,
(1)的寫法, 寫到comport, write file 成功之後, 卻要2到3秒, 合理嗎? 是不是我有什麼地方寫錯了?
(2)的寫法, 寫到comport, 失敗, 卻立即回應, 這樣是錯在什麼地方?
==================================================
(1) hCom = CreateFile("COM1", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
(2) hCom = CreateFile("COM1", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,, NULL);

// 以下在兩種寫法不變
if(hCom == INVALID_HANDLE_VALUE)
{
return false;
}
DCB dcb;
if(!GetCommState(hCom, &dcb))
{
return false;
}
dcb.BaudRate = 19200;
dcb.ByteSize = 8;
dcb.Parity = ODDPARITY;
dcb.StopBits = ONESTOPBIT;
if(SetCommState(hCom, &dcb) == 0)
{
return false;
}

char sCommandBuf[MAX_COMMAND_NUM];

DWORD dwBytesWritten;
if(!WriteFile(hCom, sCommandBuf, sizeof(sCommandBuf), &dwBytesWritten, NULL))
{
// ng
}
else
{
// ok
}
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
Solaris2005
一般會員


發表:7
回覆:13
積分:4
註冊:2003-05-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2013-02-28 22:46:23 IP:114.39.xxx.xxx 訂閱
謝謝前輩指教, 我試著改BAUD RATE試試看, 感恩!
系統時間:2024-03-29 8:48:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!