看板 C_Sharp 關於我們 聯絡資訊
※ 引述《liaommx (Orz)》之銘言: : 網路上找了很多資料, : 都是寫入的比較多, : 讀取的比較少. : 寫入的比較簡單, : 先加一個 : using System.IO.Ports; : 然後後面要列出所有電腦上的com port : this.comboBox1.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames()); : 這樣一個指令就可以打發, : 然後設定一個serialport port, : SerialPort port = new SerialPort( : "COM1", 9600, Parity.None, 8, StopBits.One); : 用port.write(string) : 這樣就可以寫入, : 若是要寫入byte, : port.Write(new byte[] { 0x31, 0xE2, 0xFF }, 0, 3); : 這樣就可以. : 但是要讀取的話,比較困難.. : 這也是我這篇問題比較主要的地方. : 我原本想說也利用 : serialport port_open : 這樣一個指令,去開啟serialport : (PS:讀取的port和上面寫入的port不同 : 因為打算做兩件不同的事情. : 一個是寫入裝置,另一個是從無線裝置讀取剛剛寫入的資料,並確認是否正確) : 因為讀取的資料還不確定是byte coding (HEX)或是ASCII coding. : 所以這邊還不敢肯定要用readbyte還是readline比較適合 用ReadBytes()讀入再經System.Text.Encoding那些class轉換就可以了. 沒有衝突的. :P 介面的話像一般Hex Editor用左邊Hex加右邊Text的方式處理就好. 灌DataTable放Grid簡單明瞭. : 這邊就暫時略過不談, : 但是read的問題滿大的. : 我是應該用timer去定時抓取資料呢, : 還是該用thread搭配while去一直撈資料呢.. : 有沒有人可以給一點意見? SerialPort class有DataReceived這event的. : 這個邏輯沒什麼問題, : 可是我想要讓撈完資料之後能跳出個視窗定住, : 讓使用者確認剛剛撈到的資料和寫入資料是同樣的內容. 讓EventHandler在這段時間把data存到buffer裡就可以了. 確認內容把兩邊都加上行號就足夠了? : 這讓我苦惱了很久, : 該用什麼方法比較直覺... : 另外,com port建立連線的時候. : 是不是可以在同樣的com port讀取和寫入? Serial Port是Half Duplex的. 因此無法同時讀取/寫入. 讀取/寫入的時機大多是看Handshake是用DTR/DSR或RTS/CTS吧. : 有沒有可以參考的內容? : 找了MSDN和codeproject都沒有比較好的說明. : 下面附上port_open.read while和timer不同的想法 CodeProject中那C++的Serial Library是很好的參考. http://www.codeproject.com/KB/system/serial.aspx 說明的用語不論是在用甚麼programming language都是通用的. 瞭解基礎知識後可以更明白的正確的Serial communication 使用方式了. -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.92.89.78
windsheep:SerialPort是Half或Full Duplex要看是RS-232/422 or 485 01/20 08:22
windsheep:要是是RS485的話,它是Half Duplex,這時就要小心處理讀寫 01/20 08:23
takashi737:判斷完後將buffer清除,等待新事件發生繼續處理! 01/25 16:47