>最近我想在C#中使用SerialPort Class从串行端口连接和读取数据。我有一台来自Hundura的名为RTA600的考勤机。它通过串行到USB转换器连接到我的PC。我测试的代码如下
SerialPort serialPort1 = new SerialPort();
serialPort1.PortName = "COM1";
serialPort1.BaudRate = 9600;
serialPort1.Parity = System.IO.Ports.Parity.None;
serialPort1.DataBits = 8;
serialPort1.StopBits = System.IO.Ports.StopBits.One;
serialPort1.Handshake = System.IO.Ports.Handshake.None;
serialPort1.RtsEnable = true;
// Open the Serial Port
serialPort1.Open();
// Read Data from Serial port
string RXstring = serialPort1.ReadLine();
我使用 System.Io.Ports 命名空间的 SerialPort 类。但是当 serialPort1.ReadLine() 执行时,它的代码会挂起。有人可以告诉我如何通过串行到USB转换器通过时间机器读取数据
您可以使用
ReadExisting()
一次读取整个数据。您需要处理DataReceived
SerialPort
事件
serialPort1.ReadExisting();
样本:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
String myData=serialPort1.ReadExisting();
}
示例代码:在这里,我想向您展示读取数据的代码(RFID标签代码,基本上长度为12)
String macid = "";
private void DoWork()
{
Invoke(
new SetTextDeleg(machineExe ),
new object[] { macid });
macid = "";
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string str1;
macid += serialPort1.ReadExisting();
if (macid.Length == 12)
{
macid = macid.Substring(0, 10);
Thread t = new Thread(new ThreadStart(DoWork));
t.Start();
}
}
public void machineExe(string text)
{
TextBox1.Text=text;
}