我很新,通過.net通過串行端口發送數據,我注意到實現TCP對應後我不會得到這很容易與串行!需要.NET串行端口幫助,主要是通過多個「數據包」接收數據
因此,爲了從頂部開始,我幾乎沒有與我的串行雙向通信的實現,我只是陷入幾件事情: -
- 我讀被拆分到多個消息或接收作爲通過COM端口的碎片化響應,我不知道我可能需要什麼設置,或者我應該如何編寫代碼來修復此問題。什麼會造成這種情況?我在一個斷點上
SerialPort_DataReceived.
基本上數據檢查該消息應當被髮送爲:
01: LS|DA090521|TI111043|q
02: PS|RN102|PTC|TA1040000|P#0|DA090521|TI111429|j
但它是被分割(在每個隨機位置請求的讀)
01: LS|DA090521|TI111
02: 043|q
03: PS|RN102|PTC|TA1
04: 0000|P#0|DA090521|TI111429|j
- 問題1已經回答,謝謝Chris W.等人!我現在有了我期望從片段逐步構建的消息(尋找STX,{msg body},ETX),然後在消息完全構建時執行一個動作,並且使用線程安全隊列進行操作,非常高興。
。 2.我收到「|」符號通過我幾乎每個週期讀取,這是由於我設置了錯誤的命令,串行通信的神器,或設備發送給我的東西? (我不這麼認爲,因爲超級終端連接性顯示這個字符沒有被連續發送。)
。 3.你能否確認我正在用各自的方法正確讀寫數據。
謝謝你們看我的其他兩個問題。
相關代碼如下:
...
// COM3, 9600, None, 8, One
SerialPort = new SerialPort(comPort, baudRate, parity, dataBits, stopBits);
if (SerialPort.IsOpen) SerialPort.Close();
// SerialPort.RtsEnable = true; // Request-to-send
// SerialPort.DtrEnable = true; // Data-terminal-ready
SerialPort.ReadTimeout = 150; // tried this, but didn't help
SerialPort.WriteTimeout = 150; // tried this, but didn't help
SerialPort.Open();
SerialPort.DataReceived += new SerialDataReceivedEventHandler(SerialPort_DataReceived);
}
void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// Process received data
SerialPort sp = (SerialPort)sender;
byte[] buffer = new byte[sp.BytesToRead];
int bytesRead = sp.Read(buffer, 0, buffer.Length);
// message has successfully been received
message = Encoding.ASCII.GetString(buffer, 0, bytesRead);
}
public bool SendMessage(string text)
{
// Only send message if a client is connected
if (SerialPort != null && SerialPort.IsOpen)
{
byte[] buffer = Encoding.ASCII.GetBytes(text);
SerialPort.Write(buffer, 0, buffer.Length);
}
}
感謝Chris的回覆,非常感謝。好吧,也許我試圖把它放在太多的盒子裏,如果你說的是我們幾乎需要做我們自己的'數據包管理',可惜(我沒有意識到)可能是序列背後的基礎運輸,那麼我可能需要詢問味精/味精字符的開始,將其包裝起來,清潔並沖洗並重復。 – GONeale 2009-05-21 05:40:29
'|'等於124 btw。 – GONeale 2009-05-21 05:41:30
我不知道,默認的XON/XOFF值是0x13和0x11: - http://en.wikipedia.org/wiki/XON – ChrisW 2009-05-21 05:45:51