C# 中的串行端口编程帮助



>最近我想在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;
          }

最新更新