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.规程中不明确哪些是…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
命令行关闭Windows防火墙
命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)方法二:CMD命令…...
Java多线程实现之Runnable接口深度解析
Java多线程实现之Runnable接口深度解析 一、Runnable接口概述1.1 接口定义1.2 与Thread类的关系1.3 使用Runnable接口的优势 二、Runnable接口的基本实现方式2.1 传统方式实现Runnable接口2.2 使用匿名内部类实现Runnable接口2.3 使用Lambda表达式实现Runnable接口 三、Runnabl…...
Qt Quick Controls模块功能及架构
Qt Quick Controls是Qt Quick的一个附加模块,提供了一套用于构建完整用户界面的UI控件。在Qt 6.0中,这个模块经历了重大重构和改进。 一、主要功能和特点 1. 架构重构 完全重写了底层架构,与Qt Quick更紧密集成 移除了对Qt Widgets的依赖&…...