BACnet协议详解————MS/TP物理层,数据链路层和网络层
文章目录
- 写在前面
- 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*U8 | 1*U8 | 1*U8 | 1*U8 | 2*U8 | 1*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一样,能一个逻辑的把整套东西讲完。所以呢,有兴趣的同学可以去研究一下协议本身。但是我建议你还是不要了,除非开发的时候遇到什么问题,因为就单单是它的帧头就会因为不同的情况有很多种形态,看的时候有点难。
相关文章:

BACnet协议详解————MS/TP物理层,数据链路层和网络层
文章目录写在前面1 物理层2 数据链路层MSTP的流程如下noteMS/TP帧格式3 网络层写在前面 这周加更一篇,来弥补一下之前落下的进度。简单的说两句,之前讲应用层的时候,只是跟官方的手册来同步一下,但是从个人理解来说,自…...

Tomcat
Tomcat 1 简介 1.1 什么是Web服务器 Web服务器是一个应用程序(软件),对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让Web开发更加便捷。主要功能是"提供网上信息浏览服务"。 Web服务器是安…...

创客匠人直播:构建公域到私域的用户增长模型
进入知识付费直播带货时代,很多拥有知识技能经验的老师和培训机构吃到了流量红利。通过知识付费直播,老师们可以轻松实现引流、变现,还可以突破时间、地域的限制,为全国各地的学员带来优质的教学服务,因此越来越受到教…...

机试指南
文章目录零、绪论和IDE安装int取值范围常犯的编程小错误一、枚举和模拟 (暴力求解)(一) 枚举1.Reverse函数 求 反序数2.程序出错的原因1.编译错误 (compile):基本语法错误2.链接错误 (link):函数名写错了3.运行错误 (run):结果与预期不符&…...
Android CTA认证设定首选网络类型
需求 硬件只支持4G,过CTA认证时打网络电话,会出现3G网络的选择,会导致过不了,需要禁用3G网络选择功能。 Android 8.1.0 分析 可adb命令查看当前的网络类型 getprop | grep “network” 打印如下: [gsm.network.type]: [LTE,LTE] [ro.telephony.default_network]: [9] …...

Android 动态切换应用图标方案
经常听到大家讨论类似的需求,怀疑大厂是不是用了此方案,据我个人了解,多数头部 app 其实都是发版来更新节假日的 icon。当然本方案也是一种可选的方案,以前我也调研过,存在问题和作者所述差不多,此外原文链…...
SMART PLC斜坡函数功能块(梯形图代码)
斜坡函数Ramp的具体应用可以参看下面的文章链接: PID优化系列之给定值斜坡函数(PLC代码+Simulink仿真测试)_RXXW_Dor的博客-CSDN博客很多变频器里的工艺PID,都有"PID给定值变化时间"这个参数,这里的给定值变化时间我们可以利用斜坡函数实现,当然也可以利用PT1…...
不那么认真的linux复习
这是个不那么认真的linux总结,可能有一些错误 1、linuxkernel(内核)shell(外壳)fs(文件系统)pro/uti/tol(应用程序) 2、ls(列出文件) -a…...
Redis系列文章总纲
跟着老万学Redis 前言 从事开发工作这么久,很多核心技术其实都还只是局限在满足日常开发工作中的基础使用,并没有完整的总结研究。今年的目标之一是完成几个技术栈的系列博客,系统的总结一下知识体系,目前计划是从Redis开始。 Re…...

更新丨三大模块升级,助力高效交付商业项目!
功能更新!本文将介绍最新升级的步进漫游、行业方案、VR漫游三个模块,让您更快更好的了解系统能力,为您带来更加便捷、高效的使用体验。步进漫游 离线导出步进式漫游系统,是基于全景图自动生成三维建模的解决方案,实现大…...

C++回顾(二)——const和引用
2.1 C中的const 2.1.1 C与C中const的比较 (1)C语言中的const C语言中 const修饰的变量是一个 常变量,本质还是变量,有自己的地址空间。 (2)C中的const 1、C中 const 变量声明的是一个真正的常量ÿ…...
MXNet中使用双向循环神经网络BiRNN对文本进行情感分类<改进版>
在上一节的情感分类当中,有些评论是负面的,但预测的结果是正面的,比如,"this movie was shit"这部电影是狗屎,很明显就是对这部电影极不友好的评价,属于负类评价,给出的却是positive。…...

DNS 域名解析
介绍域名 网域名称(英语:Domain Name,简称:Domain),简称域名、网域。 域名是互联网上某一台计算机或计算机组的名称。 域名可以说是一个 IP 地址的代称,目的是为了便于记忆。例如,…...

Spring MVC 源码- ViewResolver 组件
ViewResolver 组件ViewResolver 组件,视图解析器,根据视图名和国际化,获得最终的视图 View 对象回顾先来回顾一下在 DispatcherServlet 中处理请求的过程中哪里使用到 ViewResolver 组件,可以回到《一个请求响应的旅行过程》中的 …...

【Hello Linux】初识冯诺伊曼体系
作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:简单介绍冯诺伊曼体系 冯诺伊曼体系 冯诺伊曼体系结构的合理性 我们在Linux的第一篇博客中讲解了第一台计算机的发明是为了解决导弹的…...
mysql索引,主从多个核心主题去探索问题。
网上收集不错的优化方案 事务 mvcc 详讲 详讲 索引 索引概念 MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据 库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数 据…...

前端一面必会面试题(边面边更)
哪些情况会导致内存泄漏 以下四种情况会造成内存的泄漏: 意外的全局变量: 由于使用未声明的变量,而意外的创建了一个全局变量,而使这个变量一直留在内存中无法被回收。被遗忘的计时器或回调函数: 设置了 setInterval…...

【Hello Linux】初识操作系统
作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:简单介绍下操作系统的概念 操作系统 操作系统是什么? 操作系统是管理软硬件资源的软件 为什么要设计操作系统 为什么要设…...
完美的vue3动态渲染菜单路由全程
前言: 首先,我们需要知道,动态路由菜单并非一开始就写好的,而是用户登录之后获取的路由菜单再进行渲染,从而可以起到资源节约何最大程度的保护系统的安全性。 需要配合后端,如果后端的值不匹配࿰…...
2023年CDGA考试模拟题库(301-400)
2023年CDGA考试模拟题库(301-400) 300.无附加价值的信息通常也不会被删除,因为:[1分] A.它不应该被移除,所有数据都是有价值的 B.我们可能在以后的某个阶段需更这些信息 C.规程中不明确是否应该保留 D.数据是一种资产它很可能在未来被认为是有价值的 E.规程中不明确哪些是…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...