簡體   English   中英

.NET SerialPort類(C#)在舊系統上的行為是否有所不同?

[英]Does the .NET SerialPort class (C#) behave differently on older systems?

我有一個相對較短的C#程序,它使用以下格式通過RS232端口饋送數據:

'STX'標頭'Checksum''ETX'

'STX'數據1'校驗和''ETX'

'STX'...'校驗和''ETX'

'STX'數據N'校驗和''ETB'

接收端應該在收到ETX / ETB時以ACK或NAK字節進行回復。

在具有Windows 7 64位的計算機上運行可以正常工作。

但是,使程序在Win XP 32機器上啟動時存在問題,因為我已經針對.NET 4.5版構建了該程序(顯然,該版本的Win XP不支持)。

我將其更改為目標.NET版本4,現在程序啟動正常。 但是接收端不再是ACK或NAK響應,而只是第一次(在發送數據文件頭時)。 我在控制台上打印出了字節緩沖區,在應該保留ETX字節的地方打印了一個UP DOWN ARROW WITH BASE符號(↨),它告訴我它根本不發送ETX。

奇怪的是,它在Windows 7機器上可以正常工作,並且第一個傳輸(標頭)返回一個ACK,就像應該的那樣,但是當發送第一個數據包時,不再有任何答復……沒有ACK或NAK。

萬一有人遇到類似的問題; 我的問題是我使用了USB到串行轉換器。 它導致時機變得混亂。 我要解決的問題是訂閱SerialPortDataReceived事件,然后使用serialport.ReadExisting() (還清除接收緩沖區)在事件處理程序中獲取數據。 因此該線程將大致執行以下操作:

發送數據-> 等待DataReceive觸發 ->處理數據->重復。

只要確保在等待循環中設置超時即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM