C# 在任务完成后从 2 个 SerialPorts 读取数据
C# read data from 2 SerialPorts after task
我有一个 GPS- 跟踪器和一个 RFID-Reader。
我想在将我的 RFID 卡放在 der RFID-Reader 上后读取最后的 GPS 位置。
在我的代码中,我获得了永久性的 GPS 坐标。我有两个 SerialPorts
"gpsPort" 和 "rfidPort"。我不知道如何以这种方式中断两个 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);
}
}
使 string indata
成为第一个 DataReceived 事件范围之外的静态变量。
class Program
{
private static string indata_GPS = "";
....
}
现在你应该从 GPS 读取这个变量:
public static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
indata_GPS = sp.ReadExisting();
一旦从 RFID 设备触发第二个 DataReceived
事件,您只需从 indata_GPS
中读取值即可。这样您将获得来自 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);
}
I dont know how Interrupt two EventHandler
无需打扰任何事情 ;)
我有一个 GPS- 跟踪器和一个 RFID-Reader。 我想在将我的 RFID 卡放在 der RFID-Reader 上后读取最后的 GPS 位置。
在我的代码中,我获得了永久性的 GPS 坐标。我有两个 SerialPorts "gpsPort" 和 "rfidPort"。我不知道如何以这种方式中断两个 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);
}
}
使 string indata
成为第一个 DataReceived 事件范围之外的静态变量。
class Program
{
private static string indata_GPS = "";
....
}
现在你应该从 GPS 读取这个变量:
public static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
indata_GPS = sp.ReadExisting();
一旦从 RFID 设备触发第二个 DataReceived
事件,您只需从 indata_GPS
中读取值即可。这样您将获得来自 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);
}
I dont know how Interrupt two EventHandler
无需打扰任何事情 ;)