我目前正致力于写一个串口来刺激设备。界面按照特定表单的字符串工作,以换行和回车结束。
波特率为9600,8N1。我们正在使用USB转串口转换器来创建虚拟COM端口。
问题:这只有在我一次发送一个字节的字符串(例如" ABC123FF")时才有效,每个字节之间至少有5毫秒的延迟。
简单的代码(C#):
using System;
using System.IO.Ports;
using System.Threading;
namespace COM_tester
{
class Program
{
static void Main(string[] args)
{
SerialPort port = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
if (port.IsOpen)
port.Close();
port.Open();
Write(port, "ABC123FF", true);
Console.Out.WriteLine("PORT: " + port.ReadExisting());
port.Close();
Console.In.Read();
}
static void Write(SerialPort port, string data, bool sleep)
{
foreach (char c in data)
{
port.Write(new string(c, 1));
if (sleep)
Thread.Sleep(10);
}
port.Write(Environment.NewLine);
}
}
}
但是,在没有睡眠的情况下调用Write函数根本不起作用。如果有任何回应,那只是几个问号。使用port.WriteLine()具有相同的问题。
我也尝试过使用COM(CreateFile,WriteFile),同样的问题。
在PuTTy中与它连接起作用,但是我猜这是因为PuTTy正在以我输入的速度发送字节(大于10ms)。
这里发生了什么?
编辑:很遗憾,我无法再访问该设备,因此无法验证任何建议的修复程序。
答案 0 :(得分:0)
在阅读之前,你需要等待进来。 在您调用ReadExisting之前,设备没有时间响应。 没有这项工作
Write(port, "ABC123FF", false);
Thread.Sleep(100)
Console.Out.WriteLine("PORT: " + port.ReadExisting());
理想情况下,您可以使用Read(缓冲区,偏移量,计数值)来等待某些事情进入。