在将程序发送到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);
}