如何在Linux中修改Windows C#代码以从mono中的串行端口读取

本文关键字:mono 读取 串行端口 代码 Linux 修改 Windows | 更新日期: 2024-09-19 14:54:20

我正在尝试将一个用C#为Windows系统编写的服务移植到Linux上,目的是完全取代Windows。硬件在Windows和Linux环境中保持相同。

到目前为止,这一切都很顺利-我已经安装了Mono完整版,修改了那些需要修改的部分,以阻止它寻找Nuget,编译了软件,只有外观错误,使用Mono服务运行它,并与串行端口建立了通信。

这就是事情开始出错的地方。

我能够打开端口,并且能够向端口发送消息,从而得到正确的响应。

通过运行"cat/dev/ttyUSB0",我看到了来自端口的正确响应-符号@

然而,这个符号根本没有被软件读取,我每次都会超时。

我在代码中没有做任何更改,只是打开了端口"/dev/ttyUSB0"而不是"COM1"(或它需要的任何端口)。

为什么我可以写入串行端口,但不能从串行端口读取

我试过扰乱返回位的编码,我认为这可能是一个大端/小端问题,但它正确地将信号发送到了设备("M2"-没有引号)。

返回通信看起来也很好——cat/dev/ttyUSB0显示了一系列被返回的"@"符号,每个符号都在一行新行上。

然而,没有发生的是,软件正在读取此消息,而是在等待响应时超时。

我想知道这是否是一个换行问题,但为什么它会在Windows系统上按原样工作,为什么它会非常愉快地发送(换行目前明确设置为"''r''n")

我缺少Linux特有的东西吗?

如何在Linux中修改Windows C#代码以从mono中的串行端口读取

我知道这晚了一段时间,但我把项目放在一边有一段时间了,刚刚把它拿回来。

事实证明,问题在于mono没有触发DataReceivedEvents,所以当代码从Windows移植时。Net听到了他们的声音——他们没有被抓住,因为他们没有被解雇。

我通过生成一个新线程来克服这一问题,该线程的唯一目的是在端口上侦听,并且在serialPort时侦听。BytesToRead大于0,请运行事件激发时运行的任何代码。