作者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
1F:推 takashi737:在DataReceiver里用一个Buffer(string) 来暂存资料 01/25 16:45
2F:→ takashi737:用一个执行绪While回圈判断buffer是否出现结尾字元 01/25 16:46