小编Tim*_*ang的帖子

串行端口轮询和数据处理

我试图从传感器到微控制器的几个串口读取.每个串口将接收超过2000个测量值(每个测量值为7个字节,全部为十六进制).他们同时开枪.现在我正在从4个串口进行轮询.此外,我将每个测量值转换为String并将其附加到Stringbuilder.当我完成数据接收后,它们将被输入到文件中.问题是CPU消耗非常高,从80%到100%不等.

我浏览了一些文章并将Thread.Sleep(100)放在最后.它可以在没有数据时减少CPU时间.当BytesToRead小于100时,我还在每次轮询结束时放置Thread.Sleep.它只在一定程度上有所帮助.

有人可以提出一个解决方案来从串口轮询并处理我得到的数据吗?也许每次我得到的东西附加都会导致问题?

//I use separate threads for all sensors
private void SensorThread(SerialPort mySerialPort, int bytesPerMeasurement, TextBox textBox,     StringBuilder data)
    {
        textBox.BeginInvoke(new MethodInvoker(delegate() { textBox.Text = ""; }));

        int bytesRead;
        int t;
        Byte[] dataIn;

        while (mySerialPort.IsOpen)
        {
            try
            {
                if (mySerialPort.BytesToRead != 0)
                {
                  //trying to read a fix number of bytes
                    bytesRead = 0;
                    t = 0;
                    dataIn = new Byte[bytesPerMeasurement];
                    t = mySerialPort.Read(dataIn, 0, bytesPerMeasurement);
                    bytesRead += t;
                    while (bytesRead != bytesPerMeasurement)
                    {
                        t = mySerialPort.Read(dataIn, bytesRead, bytesPerMeasurement …
Run Code Online (Sandbox Code Playgroud)

c# serial-port polling

5
推荐指数
1
解决办法
9729
查看次数

将serialport.readline()非ascii字符串转换为字节数组

我想使用serialport.readline(),因为它是一个阻塞调用,我得到的数据最后有0x0D 0x0A(CR LF).但是,我想要的是Hex String而不是Ascii表示.

例如,我与之通信的设备正在发送字节数组,如{0xff,0xff,0x45,0x0D,0x0A}.我想在我的程序中打印出来就像这样:0xff,0xff,0x45.Readline()请修剪LF和CR.

我虽然通过指定我想要读取的字节数来使用serialport.read(buff [] ...).但它不能很好地工作,因为如果我读得太快,一半的数组将是0x00,如果我读得太慢,那么com端口就会出现溢出.我不想丢失任何字节.

我试图将我从serialport.readline()获得的内容转换为字节数组,但我得到的十六进制字符串通常变为0x3f.代码是这样的:

var line = string.Join(",", mySerialPort.ReadLine().Select(c => ((Byte)c).ToString("X")).ToArray());
Run Code Online (Sandbox Code Playgroud)

我改变了几次编码(ASCII,UTF8,UNICODE),但仍然没有.

有没有办法将我从readline()获得的非Ascii字符串转换为字节数组?

c# string encoding serial-port

0
推荐指数
1
解决办法
3025
查看次数

标签 统计

c# ×2

serial-port ×2

encoding ×1

polling ×1

string ×1