2014-09-03 79 views
0

我有這樣的代碼,但我不知道如何來獲取數據,並把它放在一個變量:如何從串口獲取數據?

protected override void OnStart(string[] args) 
     { 
      /* This WaitHandle will allow us to shutdown the thread when 
       the OnStop method is called. */ 
      _shutdownEvent = new ManualResetEvent(false); 

      /* Create the thread. Note that it will do its work in the 
       appropriately named DoWork method below. */ 
      _thread = new Thread(DoWork); 

      /* Start the thread. */ 
      _thread.Start(); 
     } 

然後在DoWork的,我有以下:

private void DoWork() 
     { 

//opening serial port 
      SerialPort objSerialPort; 
      objSerialPort = new SerialPort(); 

      objSerialPort.PortName = "COM2"; 
      objSerialPort.BaudRate = 11500; 
      objSerialPort.Parity = Parity.None; 
      objSerialPort.DataBits = 16; 
      objSerialPort.StopBits = StopBits.One; 
      objSerialPort.Open(); 

所以,我打開端口,但從哪裏開始獲取數據?如何初始化變量?收到的消息將採用52 45 41 44 45 52 30 31的格式,其中41 44 45 53 30是十六進制的消息,而52 45是頭文件和31 CRC。

請讓我知道如何去做。

謝謝....

+0

您是否閱讀過[MSDN](http://msdn.microsoft.com/en-us/library/system.io.ports.serialport(v = vs.110).aspx)上的文檔? – 2014-09-03 07:47:30

+0

是的,但我需要操作doWork中的數據我不想調用另一個functon – 2014-09-03 07:48:40

+0

根據我的回答中的評論,我想問你是否知道**線程**的任何內容?如果你不這樣做,我會建議你這樣做,就好像這是在一個線程上運行一樣,你將會有一個非常慢的應用程序! :D – jbutler483 2014-09-03 08:14:10

回答

1

與串口工作就像是與文件或套接字工作:

while ((bytesRead = objSerialPort.Read(buffer, 0, buffer.Length)) > 0) 
{ 
    var checksum = buffer[bytesRead - 1]; 

    if (VerifyChecksum(checksum, buffer, bytesRead)) // Check the checksum 
    { 
     DoSomethinWithData(buffer, bytesRead); // Do something with this bytes 
    } 
} 
+0

所以我會在DoWork中加入這個? – 2014-09-03 07:58:06

+0

@BesaNeziri,是的。 – rufanov 2014-09-03 07:59:19

+0

何處以及如何定義var bytestoRead,buffer,checksum ??? 對不起,我是初學者..... – 2014-09-03 08:01:11

1
byte[] buffer = new byte[1]; 
String message = ""; 

While (true) 
{ 
    if(objSerialPort.Read(buffer,0,1)>0) 
    { 
    message+= System.Text.Encoding.UTF8.GetChars(buffer).ToString(); 
    //Or you could call another function here that will DoSomething with each byte coming in! 
    } 

} 

應該做的伎倆!

+0

「System.Text.Encoding.UTF8.GetChars(buffer).ToString();」可以安全地替換爲「objSerialPort.ReadExisting()」 – rufanov 2014-09-03 08:00:43

+0

我習慣了使用netMF,對不起! (所以只能保證前者)。但是,如果** ReadExisting **起作用,那麼它也是一個有效的更改! – jbutler483 2014-09-03 08:03:19

+0

我也建議包括創建一個新的線程! – 2014-09-03 08:11:58