我遇到一个问题,花了我太多时间,但没有解决它。所以我真的希望你帮助我。
我有一个用c#wpf构建的应用程序,并通过串口与烤箱通信。
我需要发送的帧格式如下:[EOT] (GID) (UID) (Temp) [ENQ]
gid uid:组标识符和单元标识符(机器的地址)。
(eof),(enq):构成消息的框架。
(temp)表示:给我温度值。
唯一具有相同地址的计算机可以应答(主从架构)。
回复邮件的格式为:[STX] (Temp) <DATA> [ETX].
该字段仅包含温度值
stx开始文本。 etx end text。
我发送和接收数据没有问题,我可以显示连接的单台机器的温度值。 但是当我连接更多的机器时,我不知道哪台机器已经回答了我发送的帧,因为响应帧没有任何地址,所以我可以确定哪个烤箱有响应。
所以简要的情况是:
- 我向烤箱发送数据
- 我收到了数据
- 我无法决定回答哪个烤箱
请任何人有个主意。
PS:我使用协议:eurotherm EuroTherm
答案 0 :(得分:1)
在这些情况下,您所处理的机器正在响应(或至少它被假定为)单主机 - 多从机。含义: -
这个想法是没有其他奴隶会回应。按照议定书的惯例。
除了这种串行系统外,很难做任何其他事情。在设计方面,如果您创建类似命令队列的东西。每个命令都知道它想要与之通信的设备,以及它想要问的问题。您处理每个命令,发送串行消息,获取响应,并将其返回给命令。现在你有一个命令,它知道它与哪个设备通信,以及该设备的响应是什么。
答案 1 :(得分:1)
在这些条件下,典型的解决方案是:
基本上你应该能够将这里描述的代码包装成循环: Providing Asynchronous Serial Port Communication
这是一个与AutoResetEvent一起使用的示例。一个.Net多线程,允许同步线程(在循环中发送请求的线程,以及在循环中接收消息的线程)
答案 2 :(得分:0)
只要您只有一个“飞行中”命令等待响应,并且您知道将命令发送到哪个设备,您可以认为接下来响应的设备是您询问的设备回复。现在,如果您的设备可能发送未提示的响应,则不一定总是如此。