0

我正在尝试使用串行端口与外部机器通信,我做了什么,发送一个得到肯定响应的命令然后发送 ENQ 并在输出中显示最终响应。

第一个问题是输出结果重复了 3 次,这很奇怪,因为我没有在程序中使用任何循环,

第二个问题是我想提取结果以计算响应 BCC 我不确定如何从缓冲区读取和从缓冲区提取!

4

1 回答 1

1

当使用串行通信端口或其他类型的慢速数据传输机制时,您必须考虑到 CPU 可能比通过慢得多的通信端口传输数据要快得多。

我建议你看看这个堆栈溢出从串口解析/格式化数据 - C#

您将遇到的第二个问题是在字节流上放置一个结构,该结构将字节流中的各种消息分开。通常的方法是拥有一系列软件级别,一种类似于 OSI 模型的协议栈,以便软件的不同区域处理通信问题的不同方面或部分。

对于串行通信端口,通常有某种协议指定起始指示符字节、消息字节系列和结束指示符。

该协议指定传输的实际消息,以便发送方和接收方可以获取字节流并将其分割成单独的消息。然后将这些单独的消息提供给其他一些函数以实际解析并执行某些操作。

阅读您的源代码,您似乎需要重新考虑采用更模块化和更分层的方法的方法。

例如,您的端口接口层应该处理单个字节,以便将字节组装成消息。我将为此采取的方法是使用有限状态机方法(另请参阅状态机 - 计算机科学基础)。我会使用观察者模式,以便在组装消息时,任何想要组装消息的对象都将注册为侦听器,然后提供组装消息。

所以我会有一个处理通信端口事件的对象。该对象将从通信端口读取字节流,然后从流中组装单个消息的字节数组。我希望这将是一个单例对象,以确保只有一个对象与通信端口交互,因此该对象也将具有向通信端口写入消息的方法。

该对象还将实现观察者模式,以便其他对象可以注册通信端口消息。一旦收到完整的消息,通信端口对象就会将其提供给所有注册的侦听器。

于 2012-12-10T03:08:41.620 回答