delphi – 如何以面向对象的形式实现串行通信协议?

delphi – 如何以面向对象的形式实现串行通信协议?,第1张

概述我正在研究使用RS232连接到PC的嵌入式设备. 我需要做一个软件来与这个嵌入式设备进行通信. 我用Delphi编程.我以前从未习惯使用面向对象.但我试图改变这一点. 我无法以面向对象的方式思考解决这个问题. 我有这个协议: <STX><STX><COMMAND>[<DATA><DATA>...]<CHKSUM><ETX> 哪里: <STX> is the Start of TeXt (0x55) 我正在研究使用RS232连接到PC的嵌入式设备.

我需要做一个软件来与这个嵌入式设备进行通信.

我用Delphi编程.我以前从未习惯使用面向对象.但我试图改变这一点.

我无法以面向对象的方式思考解决这个问题.

我有这个协议:

<STX><STX><COMMAND>[<DATA><DATA>...]<CHKSUM><ETX>

哪里:

<STX> is the Start of TeXt (0x55);<COMMAND> can be 0x01 for read,0x02 for write,etc;<DATA> is any value;<CHKSUM> is the checksum;<ETX> is the End of TeXt (0x04).

软件计算机将通过串行发送命令,设备将使用相同的协议应答.

例如:

reset commandPC sends     : <STX><STX><0x09><0x00><CHKSUM><ETX>Device answer: <STX><STX><0x09><0x00><CHKSUM><ETX>Get VersionPC sends     : <STX><STX><0x00><0x02><CHKSUM><ETX>Device answer: <STX><STX><0x00><0x00><VER_L><VER_H><CHKSUM><ETX>

我必须将文件流发送到设备.

我想获得以面向对象的方式实现这一点的最佳方法的建议和/或示例.我也希望能够进行单元测试.

谢谢

解决方法 您应该查看其他串行发送/接收通信模型,例如http.在.NET中,httpWebRequest对象是您将通过线路发送的所有信息收集在一起的地方 – 包括命令(http METHOD:GET,PUT,POST等)和字节流. httpWebRequest对象(和http堆栈)内部处理计算数据校验和的“文书工作”,将大数据分块为较小的数据包等.您的所有代码都要构造请求对象,设置命令,分配数据流到请求对象的属性,并发送.

您应该查看现有通信对象模型(如.NET http)的另一个原因是,从主机cpu的角度来看,串行通信通常是异步的.在串口上传输请求的字符时,等待响应时,可以经过很多cpu时间.为请求/响应使用异步模型,这样就不会阻止调用线程并可能冻结UI.

要继续.NET http示例,httpWebRequest有一个GetResponse方法,该方法发送请求并阻止调用线程,直到收到响应. httpWebRequest还有一个BeginGetResponse()/ EndGetResponse()对,以便您可以发送请求并提供一个回调,以便在响应稍后到达时执行.

即使你的直接设计可以通过线程阻塞同步调用模型,你至少应该研究异步编码模式并考虑实现你的对象.您始终可以以线程阻塞同步方式调用异步方法,但以异步方式调用同步方法要困难得多.现在投入一点时间为自己提供更多选择.

总结

以上是内存溢出为你收集整理的delphi – 如何以面向对象的形式实现串行通信协议?全部内容,希望文章能够帮你解决delphi – 如何以面向对象的形式实现串行通信协议?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1266073.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存