2017-09-27 8 views
1

私はGPSトラッカーとRFIDリーダーを持っています。 私はRFIDリーダーをRFIDリーダーに載せた後、最後のGPS位置を読んでいます。C#タスクの後に2つのSerialPortsからデータを読み込みます。

私のコードでは、GPS座標を永久に取得しています。私は2つのSerialPortsを持っています "gpsPort"と "rfidPort"。私はどのようにこの方法で2つのEventHandlerを中断するのか知りません。あなたは問題か何かのアイデアを解決できますか?ここで

は私のコードです:

class Program 
{ 
    static void Main(string[] args) 
    { 
     SerialPort gpsPort = new SerialPort("COM5"); 
     gpsPort.BaudRate = 9600; 
     gpsPort.Parity = Parity.None; 
     gpsPort.StopBits = StopBits.One; 
     gpsPort.DataBits = 8; 
     gpsPort.Handshake = Handshake.None; 
     gpsPort.RtsEnable = true; 
     gpsPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); 
     gpsPort.Open(); 

     SerialPort rfidPort = new SerialPort("COM4"); 
     rfidPort.BaudRate = 9600; 
     rfidPort.Parity = Parity.None; 
     rfidPort.StopBits = StopBits.One; 
     rfidPort.DataBits = 8; 
     rfidPort.Handshake = Handshake.None; 
     rfidPort.RtsEnable = true; 
     rfidPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler2); 
     rfidPort.Open(); 
     Console.ReadKey();    
    } 

    public static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) 
    { 

     SerialPort sp = (SerialPort)sender; 

     string indata = sp.ReadExisting(); 

     if (indata.Contains("GPRMC")) 
     { 
      string[] sentence = indata.Split(','); 

      string latitude = sentence[3].Substring(0, 2) + "°"; 
      latitude = latitude + sentence[3].Substring(2); 
      latitude = latitude + sentence[4]; 

      string longitude = sentence[5].Substring(2, 1) + "°"; 
      longitude = longitude + sentence[5].Substring(3); 
      longitude = longitude + sentence[6]; 

      Console.Write("Latitude:" + latitude + Environment.NewLine + "Longitude:" + longitude + Environment.NewLine + Environment.NewLine); 
     }    
    } 

    public static void DataReceivedHandler2(object sender, SerialDataReceivedEventArgs e) 
    { 
     SerialPort sp = (SerialPort)sender; 
     string indata = sp.ReadExisting(); 

     Console.Write(indata + Environment.NewLine);  
    } 
} 

答えて

0

もみDataReceivedイベントの範囲外string indata静的変数を作成します。

class Program 
{ 
    private static string indata_GPS = ""; 
.... 
} 

今、あなたは、この変数にGPSから読み取る必要があります。

public static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) 
{ 
    SerialPort sp = (SerialPort)sender; 
    indata_GPS = sp.ReadExisting(); 

とすぐにあなたは、単にindata_GPSから値を読み出すRFIDデバイスからの第二DataReceivedイベントが発生など。

+0

は、それが動作ありがとう);あなたはGPS

public static void DataReceivedHandler2(object sender, SerialDataReceivedEventArgs e) { SerialPort sp = (SerialPort)sender; string indata = sp.ReadExisting(); Console.Write("RFID: " + indata + Environment.NewLine); Console.Write("GPS latest Data: " + indata_GPS + Environment.NewLine); } 

から最新の値を持つことになります。この方法では、私がどのように割り込み2つのEventHandler

何かを中断する必要はありません知りません!しかし、私はコンソールの最後のGPSデータから毎回2つのタグを取得します。あなたは今なぜですか? –

+0

@ hx_9009私は本当に知らない。あなたのコードがどのように正確に見えるかはわかりません。両方の 'DataReceived'イベントに' Console.Write'がありますか? –

+0

には、DataReceivedHandler2にConsole.Writeが1つしかありませんでした。 Iamが最初にアプリケーションを起動するとき、タグは1つしかありません。しかし、私は常に2つのタグ –

関連する問題