我正在編寫應該通過COM端口控制一塊科學硬件的程序。該程序本身寫入wxWidgets並使用ctb庫。爲了測試,在連接到300k€設備之前,我使用com0com(空調制解調器模擬器)轉發COM2端口。爲了模擬我的硬件,我使用wxTerminal(COM3)。總的來說,它很好。不僅可以在VS或DB中進行調試,還可以在wxTerminal中查看整個數據傳輸。ctb :: SerialPort - Write()中的超時
現在我的問題。我用來發送數據到COM端口ctb::SerialPort::Write()
函數。
device->Write((char*)line.c_str(), line.size());
但是,如果我斷開上的wxTerminal比程序的一側(即 COM2-> NULL)連接掛在此功能。
很明顯,我應該添加一些功能來測試我的設備是否仍然存在,但要做到這一點,我需要發送數據包給它,並希望得到一些答案。所以我回到了Write()
。
「以防萬一」我也試過用ctb::IOBase::Writev (char ∗ buf, size_t len, unsigned int timeout_in_ms)
超時一套爲100ms和我還有程序掛在同一條線上。實際上預期的行爲,因爲在這種情況下,超時意味着連接線被阻塞,直到整個緩衝區被傳送或者超時被達到。
將wxTerminal連接到COM3可以解除調試器或獨立程序的凍結。太陽正在閃耀,鳥兒在唱歌。
有人可以給我一個提示如何克服我的問題?我會很感激,如果意見將被限制在wxWidgets世界 - 我真的不想用其他工具包重新編寫整個程序。
這不是一個知名的圖書館;如果您聯繫作者,您可能會得到更好的支持。也許你可以嘗試一個不同的串口庫。 Boost.Asio(http://www.boost.org/doc/libs/release/doc/html/boost_asio.html)支持串行端口。看到這個問題(http://stackoverflow.com/questions/267752/boost-asio-serial-port-need-help-with-io)作爲示例的鏈接(在其中一個答案中)。 – 2012-01-06 19:39:52
奇怪的是,大家都認爲,當它在通電和使用時從串口拔出一個連接器時應該會發生一些快樂。但他們永遠不會推動運行的硬盤驅動器,並期望*那*工作。追逐超時參數的實現,這無疑意味着要檢測到這一點。或者使用連接螺絲。 – 2012-01-06 19:49:41