VC++程序员开发工作笔记,BacNet协议学习与实现(三)通讯篇

在实际工作中的开发与实现,上次,我找到了一些工具,通过这些工具,我们可以搭建起一个简单但是完全能够反映实际的模拟。

关键字:通讯、服务、原语、UDP、PDUS、APDU、异常处理

OK,我们接着学习BacNet\IP协议,在实际工作中的 开发与实现,上次,我找到了一些工具,通过这些工具,我们可以搭建起一个简单但是完全能够反映实际的模拟环境。我们不需要考虑楼控设备是具体怎么工作的,是怎么通过各个网络层完成所有的数据交换工作的 ,在这里,我们的目的很明确,就是从一个已经搭建并部署完善的楼控系统中,获取我们需要的设备,所有很多基本的概念可以略过不学,如果朋友们有感兴趣的,我这里还有比较多的协议文档,中英文的都有,可以关注我并给我发私信,可以共享。

萝卜快了不洗泥,带着目标去学习,通过不停的使用模拟器模拟设备,并分析报文,我们可以知道,要达到我们的目标,要解决以下三个难题:

  1. 实现协议通讯过程的开发。

  2. 实现传输报文的封装与解封的开发。

  3. 实现对报文数据的解析的开发。

VC++程序员开发工作笔记,BacNet协议学习与实现(三)通讯篇

应用进程模型

我们一步步来,首先我们先解决协议通讯的问题,之前的网络结构图中,我们可以了解到,应用程序与楼控设备的通讯,主要实在应用层来实现,协议很明确的指出通讯是通过UDP协议实现的,具体UDP协议就不详细介绍了,相信大家都是非常熟悉的,手头上各种环境下的代码库都是一大堆,我们主要具体了解一下BacNet\IP协议通讯的过程。

BacNet提供了两种服务,正式服务与未证实服务,同时提供了四种服务原语:Request、Indication、Response、Confirm。通过这些服务以及原语,实现特定的服务参数的传输。下面两张图,是我在学习过程中发现的最简洁明了的两幅图,我们开发的实现就是在这个基础之上的。

VC++程序员开发工作笔记,BacNet协议学习与实现(三)通讯篇

证实服务的通讯方式

VC++程序员开发工作笔记,BacNet协议学习与实现(三)通讯篇

非证实服务的通讯方式

服务原语通过PDUS数据单元进行表达,产生的数据单元叫做APDU,这个数据单元就成为了网络层的数据部分,接着网络层的原语进入链路层,最终进入设备,设备进行接收,然后请求就在远程设备协议栈中一层层上传,最后相应设备的响应也是这样一层层传给请求设备的,过程很清晰,在软件实现上,其实就是定义了两个UDP端口,一个发送请求,一个接收响应。

再具体实现传输的过程中还涉及到一些其他的问题,比如分段报文的处理;分段报文传输过程中丢失、补发等异常处理;各种事务状态的停止的异常处理;重复报文的处理;以及资源的管理与回收等等;我们在做实验过程中,可以只考虑完美状态下的数据传输,但是在实际开发应用的时候一定要把这些考虑进去,并投入更大的精力去实现。

下一次,我们就学习一下具体的数据单元的结构以及怎么实现封装与解封的。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/83522.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信