加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 09:33:17 所属栏目:大数据 来源:网络整理
导读:我正在研究使用RS232连接到PC的嵌入式设备. 我需要做一个软件来与这个嵌入式设备进行通信. 我用Delphi编程.我以前从未习惯使用面向对象.但我试图改变这一点. 我无法以面向对象的方式思考解决这个问题. 我有这个协议: STXSTXCOMMAND[DATADATA...]CHKSUMETX
我正在研究使用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 command
PC sends     : <STX><STX><0x09><0x00><CHKSUM><ETX>
Device answer: <STX><STX><0x09><0x00><CHKSUM><ETX>

Get Version
PC 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()对,以便您可以发送请求并提供一个回调,以便在响应稍后到达时执行.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读