如何正确读取SerialPort C#

时间:2016-01-25 22:42:14

标签: c# serial-port console.writeline

我有以下问题:

我从串口读取,输出非常奇怪。

这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.IO.Ports;
using System.Threading;
using System.Text.RegularExpressions;
using System.Globalization; 

namespace SerialPort_Test
{
    class Program
    {
        static SerialPort mySerialPort;
        static void Main(string[] args)
        {
            mySerialPort = new SerialPort("COM3", 19200, Parity.Even, 7, StopBits.One);
            //mySerialPort = new SerialPort("COM6", 9600, Parity.None, 8, StopBits.One);


            mySerialPort.RtsEnable = true;

            mySerialPort.Open();
            mySerialPort.DataReceived += new SerialDataReceivedEventHandler(mySerialPort_DataReceived);

            while (true)
            {
                Console.ReadLine();
            }

        }

        public static string clean(string s)
        {
            string ss = "";
            //s = string.Join("", Regex.Split(s, "(ID|I<|P<|V<|VI)").Skip(1));

            char[] arr = s.ToCharArray();
            char[] db = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 
                            'P','Q','R','S','T','U','V','X','Y','Z','<','|','0','1','2','3','4','5','6',
                            '7','8','9'};
            for (int i = 0; i < arr.Length; i++)
            {
                for (int j = 0; j < db.Length; j++)
                {
                    if (arr[i] == db[j])
                    {
                        ss += arr[i];
                    }
                }
            }
            return ss;
        }

        private static void mySerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
        string s = clean(mySerialPort.ReadExisting().Replace("\r", "|"));

             Console.WriteLine(s);

        }

    }
}

我的设备是使用虚拟配件连接到USB端口的ID / Passport读卡器我可以获取数据但是它不一致。

当我第一次刷我的身份证时,我得到一个输出,即 (实施例)

  

IDROU745357465&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT; | 424762M46278738753753 | ILI&LT;

但问题是这应该只有1行。

当我再次滑动时,我会得到一个非常不同的结果,每次下一张幻灯片都会有所不同

第二次例子:

  

我DR OU

     

7 4535 7465&lt;&lt;&lt;&lt; &LT;&LT; &LT; &LT; | 424 76 2M 46278 73 8 75375 3 | I LI&lt; &LT; L A Z&lt;   V K GHJDK&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; |

请考虑空格换行符,因为它们显示为新行!

没有模式。我想将所有缓冲的字节放入一个字符串中。当我不使用

WriteLine();

似乎没关系,我把它放在一条线上,但我不想这样,我需要使用

 WriteLine(); 

并在每次刷卡时获得一致的输出。

感谢您的任何建议。

此致 Iliali

0 个答案:

没有答案