作者liaommx (Orz)
看板C_Sharp
標題[問題] 幾個有關serial port的問題.
時間Tue Jan 19 19:33:14 2010
網路上找了很多資料,
都是寫入的比較多,
讀取的比較少.
寫入的比較簡單,
先加一個
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比較適合
這邊就暫時略過不談,
但是read的問題滿大的.
我是應該用timer去定時抓取資料呢,
還是該用thread搭配while去一直撈資料呢..
有沒有人可以給一點意見?
這個邏輯沒什麼問題,
可是我想要讓撈完資料之後能跳出個視窗定住,
讓使用者確認剛剛撈到的資料和寫入資料是同樣的內容.
這讓我苦惱了很久,
該用什麼方法比較直覺...
另外,com port建立連線的時候.
是不是可以在同樣的com port讀取和寫入?
有沒有可以參考的內容?
找了MSDN和codeproject都沒有比較好的說明.
下面附上port_open.read while和timer不同的想法
--
timer()
{
if (port_open.Bytestoread!=0)
{
textBox2.Text += Convert.ToString(port_op.ReadByte(),
16).ToUpper().PadLeft(2, '0');
//PS:這是read byte並補齊0的作法..
}
else
{
label.text="nothing read";
}
}
while(port_open.Bytestoread!=0)
{
textBox2.Text += Convert.ToString(port_op.ReadByte(),
16).ToUpper().PadLeft(2, '0');
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.169.229.97
推 takashi737:在DataReceiver裡用一個Buffer(string) 來暫存資料 01/25 16:45
→ takashi737:用一個執行緒While迴圈判斷buffer是否出現結尾字元 01/25 16:46