2013-03-04 174 views
1

我試圖通過串口讀取消息(通過USB插入RS-422到我的電腦)無法從串口讀取

問題是我有2個這種類型的電纜。

一個是直接連接到422的USB,另一個是帶有RS-232到RS-422適配器​​的USB-RS-232電纜。

我已經安裝了所有驅動程序。 我寫的行:m_Pod.read(response, 0, 1000);其中m_Pod是SerialPort對象和response在byte []中保存讀取的消息。

這條線是在一個事件,如果數據收到,所以我讀的消息。

第一個連接器工作正常,並且當事件發生時我讀取消息。 但是,第二個連接器不起作用。該事件不會發生。 如果我嘗試手動讀取消息,我會得到一個隨機數(63),而不是我應該看到的長消息。

這是第二適配器的圖片: http://oi50.tinypic.com/34nh4kz.jpg

在右邊的USB到RS-232和左側是RS-232與RS-422。

+2

如果第一個連接器工作正常,我懷疑你的問題是與第二個連接器,而不是C#。 – 2013-03-04 18:57:43

+0

有一點是有另一個程序(用C++編寫),第二個程序在那裏工作。 抱歉保存此信息。 – 2013-03-04 19:06:46

+0

你有該C++程序的源代碼嗎?你可以分析它,並檢查你的C#應用​​程序的差異... – 2013-03-04 19:13:31

回答

1

你有沒有試過玩Handshake屬性? http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.handshake.aspx 根據您的適配器使用/提供的信號,您可能需要從軟件/硬件握手中進行選擇。

+0

我嘗試閱讀有關握手的內容,當我要求它時,它用於發送消息嗎? 我不知道它是否會幫助我,因爲串口不發送消息,只有「??」 – 2013-03-04 19:57:18

+0

握手用於流量控制。某些設備可能無法進行全雙工通信,或者可能不會經常匯聚以讀取數據,而是等待一些啓動傳輸的「信號」(中斷)。 這樣,這些「握手」部分對於建立通信至關重要。某些設備(和/或電纜)可能僅支持特定的握手類型。 這也解釋了爲什麼兩個適配器都用C#工作,而第二個適配器只用C++工作。 – 2013-03-05 18:37:15

+0

您也可以嘗試使用http://www.rohitab.com/來監控C++應用程序的API調用。這樣你可以很容易地知道它是如何訪問串行端口的。 – 2013-03-05 18:44:02