2010-05-27 69 views
0

我可以使用一些帮助来设计我的COMport连接类。C#COM消息系统设计

我有一个微控制器(我编程)连接到我的comport设备。 每当我给它发送消息时,它都应该发送一个确认。

因此,无论何时我发送一些东西在comport上,它都应该等待确认后再继续。 当然,我不想要像while(!ack) wait()这样的东西。

当1秒左右没有收到确认时,应该再次发送该命令。 对于每种类型的命令,Ack看起来都不同(注意:只有类型,没有消息特定的id)。 连接的设备还会发送消息(除了ACK),这些消息需要由应用程序自己处理。

有没有人有一个简单而灵活的方式(设计模式可能?样本?)来解决这个问题的建议?

回答

1

您可能需要一个处理通信的专用线程。您需要一个客户端代码可以推送消息的队列,并使用ReaderWriterLockSlim对其进行保护。不需要DataReceived事件,只需直接调用SerialPort.Read()即可。使用ReadTimeout属性检测超时。如果您收到需要返回客户端代码的响应,请使用事件。

小心设计协议,这样做并不容易。您将防止您的方案丢失字节,但ACK可能会丢失。微控制器将看到相同的命令两次。现在你需要一个“消息编号”来抑制重复和两端同步的方法。看看RFC 916.

+0

非常感谢,你似乎得到了我正在谈论的。 我不认为我有足够的经验来制作专用线程等东西(我需要一些示例),您只是给了我所寻找的关键字:“异步”。现在有更多的谷歌搜索应该帮助我:)谢谢! – SirLenz0rlot 2010-05-28 07:24:59