繁体   English   中英

C#/ GTK#串行端口读取问题

[英]C# / GTK# Serial Port Read Issue

因此,我试图从C#/ Gtk#中的串行端口对象读取实时数据。 我有一种产品,它通过RF与计算机进行通信,并且每当它收到命令时就会发送回ACK。 如果我使用AccessPort并每500毫秒自动发送一条命令,则会收到我的ACK。 我已经运行了AccessPort数小时,并且能够将每个命令与ACK匹配,所以我知道这在物理上是可行的。

我用C#/ Gtk#编写了一个小程序,该程序在X ms处从串行端口发送数据,并有一个委托线程,该线程读取串行端口返回的所有字节。 我的问题是,无论我如何编写用于串行读取的方法,它都不会真正捕获我知道的所有字节。

到目前为止,这是我拥有的“最轻巧”的代码:

    private void readSerial(){
    byte readByte = 0x00;

    Gtk.Application.Invoke (delegate {
        try {
            readByte = (byte)serialPort.ReadByte();
            Console.WriteLine(readByte.ToString("X2"));
        } catch (System.ArgumentException sae) {
            Console.WriteLine(sae.Message);
        }
    });
}

我已经将该方法分配给主函数中的线程:

    writeThread = new Thread (writeSerial);
    readThread = new Thread (readSerial);

当按下连接按钮以及writeThread时,我将启动它。 我可以看到产品每X毫秒执行一次正确的指令,因此writeThread运行正常(目前我正在500毫秒进行测试)。 ACK应该每隔X ms + 35 ms *模块ID到达计算机一次,因此,如果我的最终产品的模块ID为2,则响应将延迟70ms,因此计算机应在570ms或X + 70ms看到它。

有一个更好的方法吗? 我在做一些愚蠢的错误吗?

我玩过的其他代码是从串行端口读取0x0E字节并将这些字节存储到缓冲区中,这也错过了很多我知道会回来的字节。

谁能提供帮助? 我确实知道readSerial方法实际上正在启动,因为我确实在控制台上看到一个0x00弹出,这是正确的,因为0x00分散在我要查找的数据中。

弄清楚了!

我不确定确切的问题是什么,但是当我删除代表团并只是在该方法中使用一会儿(true)外观时,它工作正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM