我需要做一个软件来与这个嵌入式设备进行通信.
我用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 – 如何以面向对象的形式实现串行通信协议?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)