gpt4 book ai didi

c# - 如何修改 Windows C# 代码以从 Linux 中的单声道串行端口读取?

转载 作者:太空宇宙 更新时间:2023-11-04 12:52:39 25 4
gpt4 key购买 nike

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

到目前为止一切进展顺利——我已经安装了 Mono-complete,修改了那些需要修改以阻止它寻找 Nuget 的位,编译了只有表面错误的软件,使用 mono-service 运行它并与串口。

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

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

通过运行“cat/dev/ttyUSB0”,我看到端口的正确响应 - 符号@

但是,软件根本就没有读取该符号,我每次都遇到超时。

除了打开端口“/dev/ttyUSB0”而不是“COM1”(或它需要的任何端口)之外,我没有对代码进行任何更改。

为什么我可以写入但不能读取串口?

我试过弄乱返回位的编码,我认为这可能是大端/小端问题,但它正确地将信号发送到设备(“M2” - 无引号)。

返回通信看起来也不错 - cat/dev/ttyUSB0 显示返回的一系列“@”符号,每个符号占一行。

但没有发生的是软件然后读取它,而是在等待响应时超时。

我想知道这是否可能是一个换行符问题 - 但为什么它会在 Windows 系统上按原样工作,为什么它会完美地愉快地发送(换行符当前明确设置为 '\r\n')

是否有我遗漏的特定于 Linux 的内容?

最佳答案

我知道这有点晚了,但我已经将项目搁置了一段时间,现在才重新开始。

事实证明,问题在于 mono 没有触发 DataReceivedEvents,所以当从 Windows .Net 移植的代码遇到监听它们时,它们没有被拾取,因为它们没有被触发。

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

关于c# - 如何修改 Windows C# 代码以从 Linux 中的单声道串行端口读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36674328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com