BACnet协议详解————MS/TP物理层,数据链路层和网络层

news2024/11/18 23:45:56

文章目录

  • 写在前面
  • 1 物理层
  • 2 数据链路层
      • MSTP的流程如下
      • note
      • MS/TP帧格式
  • 3 网络层

写在前面

这周加更一篇,来弥补一下之前落下的进度。简单的说两句,之前讲应用层的时候,只是跟官方的手册来同步一下,但是从个人理解来说,自下而上的讲解和理解是更有好处的。因此,今天我就把物理层,数据链路层和网络层放在一起来讲,这样形成一个自下而上的知识体系,应该更适合各位看官的理解。
物理层有很多,比如MS/TP, IP等等,在产品中比较常用也是这两种,尤其是MS/TP,因此,在这里我就以MS/TP为例进行讲解。IP的东西如果有时间或者精力的话,我再加进来。这里强调一下,数据链路层也就是MS/TP还是很有用的,肯定要弄懂。它是整个BACnet通信的基础,也就是BACnet正常运行起来的前提条件就是MS/TP通信是正常的。调试BACnet的时候,先是确定物理层的RS485是否正常,然后用抓包工具看整个总线的MS/TP是否正常工作,最后再看BACnet运行的service或者object是否正常。

1 物理层


其实,正常说来,MS/TP是数据链路层,而物理层是RS485。RS485其实就是串口改成差分信号,因此传输距离相对于串口有了很大的提升。作为firmware工程师,我就不在这里说硬件隔离什么的东西,我也不是很懂的。但是,从firmware工程师的角度来,物理层就是RS485或者说串口加使能引脚。

2 数据链路层

在这里的数据链路层,就是在整个RS485拓扑里面的设备能够共同完整地进行通信。它采用的方式就MS/TP(MASTER-SLAVE/TOKEN-PASS),字面的意思就是主从设备的令牌传输。在整个RS485的总线中,令牌是在主设备之间进行传输的,而从设备只是对总线中的数据进行侦听而已。
在MS/TP的总线中,每个设备都必须有一个唯一的地址来标识自己。这个地址是一个无符号的8bit数据,其中以0xFF为目的地址的数据代表广播数据,而0xFF不能作为源地址出现在MS/TP协议中。0-127都可以作为主节点和从节点的地址,而128-254只能作为从节点的地址。

MSTP的流程如下

假如在整个MS/TP总线中存在地址分别为1、3、5的三个设备。我们分别叫它们为阿大,阿二,阿三。

  • 阿大、阿二、阿三都在总线上等着收消息。
  • 三个人等了半天都没收到消息,也不知道总线上都有谁
  • 阿大等不及了(阿大先等不及的原因是address越小,timeout的时间越小),阿大就开始问2地址有人不(用的是Poll for Master消息)?没人回复
  • 阿大又开始问,3地址有人不?这时候,阿二开始回复我在啊!(用的是Reply Poll for Master消息)
  • 阿大知道阿二在了,就告诉阿二,我用完总线了,你可以用总线了(也就是把token传给了3地址)
  • 阿二这时候也不知道他的令牌传给谁,因此也需要在总线上问4地址的人在不在?
  • 5地址的人在不在?阿三开始回复说,我在了。
  • 阿二就告诉阿三,你可以说话了
  • 阿三按照同样的方法找到了阿大,此时,阿大、阿二、阿三就都知道它们的下一个设备了
  • 阿三就把令牌传给了阿大,在阿大拥有令牌的这段时间,阿大可以主动发起对话,其它设备只能进行回复
  • 这样阿大说完话,就让阿二说,再让阿三说,周而复始
  • 同时阿大、阿二、阿三还会周期的在总线上问其它的地址在不在,这样就能保证新设备也能加入这个对话流程

note

需要注意的是:

  • 当总线上没有令牌的时候,超时时间=Tno_token + 地址 * Tslot,其中Tno_token是500ms,Tslot是10ms。因此,阿大最先发现没有令牌。
  • 当阿三问地址在不在的时候,肯定有一个最大值,才能问道阿大,这个最大值是device object的一个property,需要在初始化的时候进行设定(max_master)
  • 阿大、阿二、阿三每个人在自己的对话窗口期或者说令牌持有期能说多少话,也是有限制的,也是device的一个property,需要在初始化的时候进行设定
  • 需要说明的是,阿大、阿二、阿三都是MASTER,这里面没有SLAVE,首先在BACnet里面基本上没有SLAVE的使用了;其次,从字义上也可以理解,SLAVE是无法获取令牌的,也就是SLAVE无法主动发起对话,只能等待其他人的问询,从而进行回复
  • 阿大、阿二、阿三这种传递话语权和询问加入者的过程,就是MS/TP的过程,也就是数据链路层的过程,它保证了总线上的节点或者设备能够相互完整顺畅的通信起来
  • 看到这里,各位看官基本上应该理解了整个链路层或者说MS/TP的工作过程,但是就会有看官问了,BACnet的通信是在哪里的呢?就是在阿大、阿二、阿三获取令牌之后,每个人说的话就是BACnet相关的通信了

MS/TP帧格式

前导码帧类型目的地址源地址长度帧头CRC数据数据CRC
2*U81*U81*U81*U82*U81*U8可以没有2*U8(可以没有)
  • 前导码由0x55和0xFF组成

  • 帧类型包括

    • 00 ———— Token:用于将总线的主导权传递给目的地址
    • 01 ———— Poll For Master:用于发现总线上的MASTER设备,并决定令牌环上的后续设备
    • 02 ———— Reply To Poll For Master:用于表示发送设备想加入到令牌环
    • 03 ———— Test_Request:用于回环测试
    • 04 ———— Test_Response:用于回环测试
    • 05 ———— BACnet Data Expecting Reply:用于发送需确认的BACnet消息,消息长度可以使0-501
    • 06 ———— BACnet Data Not Expecting Reply:用于发送不需要确认的BACnet消息,消息长度可以是0-501
    • 07 ———— Reply PostPoned:当设备接收到需确认的消息的时候,来不及处理这个消息,就会回复Reply PostPoned用于告诉发送者,回复的设备需要等一会才能回复
    • 32 ———— BACnet Extended Data Expecting Reply
    • 33 ———— BACnet Extended Data Not Expecting Reply
    • 8-21和34-127预留下来
    • 128-255是为开发者用作非BACnet的私有帧用的,数据区的前两个字符必须填写唯一的开发者的id,所以数据的长度最少应该是2个字节,最大到501个字节

3 网络层

在这里插入图片描述从上图中可以看到,物理层和数据链路层有很多选择,比如IP, RS485, LonTalk等等。但是网络层就一个选择,那么网络层是干什么的呢?网络层就是将具有多种物理硬件和数据链路层的设备整合起来进行通信的层。咱们在数据链路层也就是第2部分简单讲述了MS/TP的通信过程,但这个MS/TP的通信过程能够完成的条件就是所有的设备都是以RS485为硬件进行通信。如果整个网络中,既有IP设备,又有RS485设备,那怎么进行通信呢?这时就需要BACnet的网络层的功能了。这部分的具体实现,我就不在这里说明了。首先,在开发的过程,这部分的功能基本都是在协议栈中包含,对于开发者来说就是个黑盒,不需要太多关注;其次,我对这方面的研究还不足以通俗地把它讲解出来,因为它的分支很多,不像一个MS/TP一样,能一个逻辑的把整套东西讲完。所以呢,有兴趣的同学可以去研究一下协议本身。但是我建议你还是不要了,除非开发的时候遇到什么问题,因为就单单是它的帧头就会因为不同的情况有很多种形态,看的时候有点难。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/371551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring拦截器

SpringMVC提供了拦截器机制,允许运行目标方法之前进行一些拦截工作或者目标方法运行之后进行一下其他相关的处理。自定义的拦截器必须实现HandlerInterceptor接口。preHandle():这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求…

(周末公众号解读系列)2000字-视觉SLAM综述

参考链接:https://mp.weixin.qq.com/s?__bizMzg2NzUxNTU1OA&mid2247528395&idx1&sn6c9290dd7fd926f11cbaca312fbe99a2&chksmceb84202f9cfcb1410353c805b122e8df2e2b79bd4031ddc5d8678f8b11c356a25f55f488907&scene126&sessionid1677323905…

10 分钟把你的 Web 应用转为桌面端应用

在桌面端应用上,Electron 也早已做大做强,GitHub桌面端、VSCode、Figma、Notion、飞书、剪映、得物都基于此。但最近后起之秀的 Tauri 也引人注目,它解决了 Electron 一个大的痛点——打包产物特别大。 我们知道 Electron 基于谷歌内核 Chro…

C++回顾(二)——const和引用

2.1 C中的const 2.1.1 C与C中const的比较 (1)C语言中的const C语言中 const修饰的变量是一个 常变量,本质还是变量,有自己的地址空间。 (2)C中的const 1、C中 const 变量声明的是一个真正的常量&#xff…

24 openEuler管理进程-调度启动进程

文章目录24 openEuler管理进程-调度启动进程24.1 定时运行一批程序(at)24.1.1 at命令24.1.2 设置时间24.1.3 执行权限24.2 周期性运行一批程序(cron)24.2.1 运行机制24.2.2 crontab命令24.2.3 crontab文件24.2.4 编辑配置文件操作…

Linux基础命令-whereis查找命令及相关文件

文章目录 whereis 命令介绍 命令格式 基本参数 参考实例 1)查找date命令及相关文件 2)只显示date的二进制文件 3)只显示源代码文件 4)指定目录查找二进制文件 which与whereis对比 命令总结 whereis 命令介绍 通过帮助…

【TCSVT22】Pareto Refocusing for Drone-view Object Detection【航拍目标检测】

论文与代码论文地址:https://ieeexplore.ieee.org/document/9905640/代码地址:未开源背景与动机作者认为阻碍航拍场景目标检测发展的原因主要有以下两个:航拍图像中存在大量困难目标,文中作者把困难目标总结为小目标和遮挡的目标。…

机械革命旷世G16电脑开机变成绿屏了无法使用怎么办?

机械革命旷世G16电脑开机变成绿屏了无法使用怎么办?最近有用户使用的机械革命旷世G16电脑一开机之后,电脑屏幕就变成了绿色的,无法进行任何的操作。出现这个问题可能是因为电脑中病毒了,或者是系统出现故障。我们可以通过U盘来重新…

实习-----Mybatis 框架

Mybatis 框架ORM持久化介绍 了解什么是“持久化”即把数据(如内存中的对象)保存的磁盘的某一文件中ORM概念ORM,即Object Relational Mapping,它是对象关系映射的简称。它的作用是在关系型数据库和对象之间作一个映射,是…

CNTM 和ADA线下会议总结!

预计CNTM将会是ADA和Ocean共同孵化的第二个AI项M!CNTM25号和ADA在台湾举办线下会议 并在近期CNTM和Ocean在一起交流AI技术,同时AGIX也是ADA和Ocean深度孵化的项目,预计CNTM将会是ADA和Ocean共同孵化的第二个AI项目!什么是 CNTM &a…

【测试平台系列】如何停止测试任务执行

今天我们就玩点好玩的,和大家一起探讨:怎么停止一段python代码。之后我们将会运用到pity之中。 知识要点 本文需要大家对asyncio相关知识有一些了解,至于原理方面,大家可以自行查阅,因为我也没细看。 为什么要做这个…

Spring使用mongoDB步骤

1. 在Linux系统使用docker安装mongoDB 1.1. 安装 在docker运行的情况下,执行下述命令。 docker run \ -itd \ --name mongoDB \ -v mongoDB_db:/data/db \ -p 27017:27017 \ mongo:4.4 \ --auth执行docker ps后,出现下列行,即表示mongoDB安…

【项目精选】网络考试系统的设计与实现(源码+视频+论文)

点击下载源码 网络考试系统主要用于实现高校在线考试,基本功能包括:自动组卷、试卷发布、试卷批阅、试卷成绩统计等。本系统结构如下: (1)学生端: 登录模块:登录功能; 网络考试模块…

gdb openocd jlink arm-a9调试

连接关系是这样的:gdb —> openocd —>(这里需要两个xx.cfg配置文件) jlink —> arm-a9板子 具体流程是这样的: 给jlink(硬件调试器)安装驱动,用USB Driver Tool这个软件,…

02.24:图片的风格转换

Github网址:https://github.com/lengstrom/fast-style-transfer 在anaconda prompt中切换环境命令:activate 环境名 列出所有环境名:conda info --envs 安装环境:conda create -n 环境名 pythonx.x.x 删除某环境:co…

Spring Cloud Nacos源码讲解(八)- Nacos客户端服务订阅的事件机制剖析

Nacos客户端服务订阅的事件机制剖析 ​ 上次我们已经分析了Nacos客户端订阅的核心流程:Nacos客户端通过一个定时任务,每6秒从注册中心获取实例列表,当发现实例发生变化时,发布变更事件,订阅者进行业务处理&#xff0c…

WAF渗透攻防实践(16)

预备知识 WAF:WEB攻击一直是黑客攻击的主流手段,WAF作为网站安全基础设施的标配。Web Application Firewall,Web应用防火墙,通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的产品。 Nginx:Nginx 是…

京东10年经验测试工程师,整理出来的自动化测试学习路线,写给还在迷茫的你们

1、学习python基本语法。 2、上w3school这个网站(2019年4月6日补充:网址是http://www.w3schools.com。但是现在这个网站被墙,而且出现众多山寨站点。。。这个网站的特点是你可以在网页上做一些练习,比如他教html的时候会让读者直…

Word的多级列表及自定义带级联编号有序列表的方法

1.多级列表的应用 输入列表时,列表项目符号或编号不应手动输入。可在输入文字后将光标放在文字所在段落,点击开始面板段落工具组的编号命令或者多级列表命令来生成编号。由于多级列表命令完全可以覆盖编号命令,且格式调整功能更强大&#xf…

ES数据迁移_snapshot(不需要安装其他软件)

参考文章: 三种常用的 Elasticsearch 数据迁移方案ES基于Snapshot(快照)的数据备份和还原CDH修改ElasticSearch配置文件不生效问题 目录1、更改老ES和新ES的config/elasticsearch.yml2、重启老ES,在老ES执行Postman中创建备份目录…