如何修复serialPort.Write减慢程序速度

时间:2019-01-01 00:40:48

标签: c#

在将程序发送到CNC(计算机数控)机器时,我的程序可以以4800波特的罚款接收数据,但是当我使用serialPort.Write时,我必须放入某种等待功能或立即排除机器错误。

即使我使用小于或小于System.Threading.Thread.Sleep(10);的等待,它也会导致输出花费的时间至少是商业程序在4800波特时的3倍。

此睡眠代码发生在每个字符上,但是在如此低的波特率下,10ms在事物方案中应该不会引起注意。它可以工作,但是速度太慢,太慢,机器实际上可能无法运行它。

我以9600波特的速度尝试了一下,但它以相同的速度工作。我做了一个老式的循环作为计时器,它的工作方式相同。我的代码很简单,关于写入串行端口一定有一些我不了解或了解的东西。

如果我尝试使用serialPort.Writeline或除去任何睡眠,机器将立即出错。如果我取出其中一个sleep命令,机器将立即出错,然后输出以极快的速度运行到监视器文本框,因此我知道不是代码很慢,它与写有关命令?

这就像如果您在上一次机器错误之后过早写一个字符,但其他程序实际上却获得了2400波特率,那么它就是我...我的计算机科学学位是OOP(83)以前,我是全职工作在过去的25年中一直在一家机械厂工作,所以林不应该这样做。

for (int i = 0; i <= j; i++)// step thru all lines of program
            {
                ln = sendtext.Lines[i];
                leng = ln.Length;

                for (int x = 0; x <= leng - 1; x++)
                //step thru all characters of line
                {
                    ch = Convert.ToString(ln[x]);
                    serialPort1.Write(ch);
                    System.Threading.Thread.Sleep(10);
                    //  await Task.Delay(1); // does not change preformance
                    //  Task.Delay(timingconst).Wait();//does not change
                    textBox4.AppendText(Convert.ToString(ch));
                }
                serialPort1.Write(Convert.ToString((char)13));
                System.Threading.Thread.Sleep(timingconst);
                textBox4.AppendText(Convert.ToString((char)13));
                serialPort1.Write(Convert.ToString((char)10));
                textBox4.AppendText(Convert.ToString((char)10));
                System.Threading.Thread.Sleep(timingconst);
             }

0 个答案:

没有答案