Login
升级VIP 登录 注册 安全退出
当前位置: 首页 > word文档 > 标准规范 > BACnet-MSTP开发的入门篇

BACnet-MSTP开发的入门篇

收藏

本作品内容为BACnet-MSTP开发的入门篇,格式为 docx ,大小 19836 KB ,页数为 4页

BACnet-MSTP开发的入门篇


('工欲善其事,必先利其器。首先,给大家介绍BACnetMS/TP开发的入门篇--工具准备篇。1串口调试程序因为在BACnetMS/TP开发中,开发者要时刻关心BACnet数据包的状态,在这里仅给大家推荐4款串口监视调试软件。1.1串口调试助手这个工具很常见,在网络上可以搜索到很多,笔者用的是图标为两把剑的那款,在BACnet下载页面中,您可以找到该工具。该工具用来确认PC和设备的串口状态必备,因为很多时候,大家不太好区分哪个是COMPortxx,所以用这个小工具一下就可以试探出来。1.2串口监听软件笔者使用的是图标为一把鹤嘴钳的小工具,工具很小,但是它是从驱动层抓取数据包,有时候条件简单的情况下,可以快速分析出通讯错误来。该工具在BACnet下载页面中也有提供。1.3DeviceMonitoringStudio笔者后来在网上找到了该软件,感觉功能很强的,也是在驱动层直接抓取数据包,但是他反馈的数据包之间的时间间隔很准确,可以在BACnet协议开发的后期,调系统性能阶段使用。该工具在BACnet下载页面中也有提供,不过是30天的试用版。1.4COMWATCH这个工具是把好剑,不过是一把双刃剑,不便的原因是他在DOS下运行,要求笔者有两台电脑才适用,不过往往越简单越能见真理,分析起数据包的时序来,感觉还真是非它莫属在后期调时序阶段必不可少,由于版权问题,该软件咱不提供下载服务。2数据包仿真软件什么样的BACnetMS/TP数据包是准确的符合BACnetMS/TP协议标准的数据包,这个是初级开发人员时常困惑的问题,笔者在初步接触BACnet的时候,也是无从下手,好在笔者开发的条件比较充足,手上不仅有一个标准的BACnetMS/TPDDC,还有一些前辈已经摸着石头趟了一番BACnetMS/TP开发的浑水,并且留下了一批枪支弹药。2.1VTSVTS是BACnet开发认证的官方测试工具,功能很好很强大,但是由于文档有限,很多功能都需要慢慢挖掘,不过在后续章节中,笔者会给大家详细介绍VTS,并以图式的方式给大家一个VTS使用的快速入门。注:在BACnet官方认证阶段,BACnet是否符合BACnetBTL认证标准,也需要提供一个预先在VTS中Pre-Scan的PICS脚本文档,该文档是BTL认证的重要组成部分。2.2BACbeatBACbeat也是笔者开发中经常用到的一款很不错的BACnet开发工具,他的数据包和数据分发方式,笔者认为借鉴作用很大,不过也有一些弊端,后续会和大家分享。在本章节中,给大家介绍BACnetMS/TP开发经验分享--BACnetMS/TP数据包篇。在BACnet中国技术联盟的BACnet开发讨论栏目中,已经介绍了相关的数据包格式,这里主要是分享一下,BACnetMS/TP数据包EncodingDecoding中的注意事项。其网站链接如下:BACnet协议BACnet标准中文资料中关于BACnetMS/TP部分详细解析(3)BACnetMS/TP的实现,按照实现的硬件平台,可以分为设备级(在楼宇自动化行业中主要是在DDC上以Firmware的方式实现)和PC级实现(主要是作为BACnetMS/TP的配置工具或仿真、调试工具在个人电脑上以执行文件EXE的方式实现),在后续的章节中,我们都假设为后面的这种实现方式,即在PC上以配置、调试工具的方式在Windows上的实现。1BACnetMS/TP数据包的接收按照BACnetMS/TP协议的规则,要有一个5ms或精度更高的Timer,这个条件在Windows下实现,的确有些不太容易,原因是Windows是一个分时处理的多任务操作系统,系统的标准Timer精度都在12-15ms左右,精度不会太高,即使在实时性好的WinCE5.0上,笔者测试的结果也是在3-5ms左右,如果真是提供如此高精度的Timer的话,Windows操作系统就会很卡,没有机会再去处理其他任务了,CPU基本上被占用到99%以上了。读者很疑问了,真是这样那BACnetMS/TP的状态机如何在Windows这样的非实时操作系统下实现呢。且听笔者慢慢道来。这个5ms的Timer只是为了达到后面将要讲到的BACnetMS/TP状态机的实现过程中的各个关键时间点的Check精度,并不是要求BACnetMS/TP接收状态机和主状态机的循环时间控制在5ms,而且仔细想想,这个实现在BACnetMS/TP要求的9600Baud波特率下也是无法实现的,发送完一个Token令牌的过程,时间大约就会是8ms左右了(每个字节大约1ms,一个令牌在8-9个字节,如果有Padding字符为9个字节,其余情况为8个字节)。所以这个5msTimer只是要求的Timer的精度,也就是系统的配置状况,就像按照某些软件,都会在UserManual中给一个系统的最低配置一样,其实他的最低配置一般PC或DDC早就达到了,他这样的规定只是让大家知道,如果您真是提供了一个配置超低的平台,而运行该软件又是老出问题,那责任就不是软件的事情了,问题已经是您的硬件平台的责任了。话糙理不糙,BACnetMS/TP的5msTimer的规定也是这个道理。言归正传,那数据包如何接收合适呢,最简单的解释就是只要不影响您的OS系统的其他任务的运行,采样越快越好,这样才不会造成通讯过程中数据包的丢失。如果读者还是无法理解,可以到Bacnet技术交流QQ群:121189657,中和相关的专家请教一下。2BACnetMS/TP数据包的发送数据包的发送小节,主要是介绍BACnetMS/TP的广播过程。按照BACnetMS/TP的协议规定,当目标地址设定为0xFF,就是发送的为广播数据包。有些设备为了断线侦测的需要,可能会每隔一定的时间间隔就会发送一个IAM的广播数据包,告诉BACnetMS/TP令牌环网自己的状况。有人可能会问了,RS-485的数据线上,大家都发广播,那不就造成数据包碰撞,数据包乱成一团的状况吗?这个就要归功于令牌环网的令牌的作用,令牌简单理解就是不管您要说什么话,只有得到令牌环网的允许,也就是只有手掌令牌的人才可以发号施令。但这个和古代皇帝和军机大臣议事又不太一样,皇帝和军机大臣议事,基本上是皇帝一个人说了算,就是说令牌一直在他手中掌握,他一直有话语优先权。而令牌环网就民主的太多了,基本上每个人都有轮流坐庄的机会,每个人都会按照StationID的顺序拿到令牌,只要拿到令牌,不管你是发号施令给其他任何人还是敞开嗓门发广播,那就是随您高兴的事情了。BACnetMS/TP协议定义了3个有限状态机。1一个是接收数据帧状态机(BACnetReceiveFrameFiniteStateMachine),2一个是Master节点状态机(BACnetMasterNodeFiniteStateMachine),3一个是Slave节点状态机(BACnetSlaveNodeStateMachine)。Slave节点状态机比较简单,是Master节点状态机的一个子集SubSet,Slave节点状态机主要用来处理不需要维护令牌环的设备,像I/O模块、BACnet传感器、BACnet执行器等,主要做为其他设备请求的一个应答设备。这里重点给大家解释BACnetMS/TP的接收数据帧状态机(BACnetReceiveFrameFiniteStateMachine)和Master节点状态机(BACnetMasterNodeFiniteStateMachine)。在BACnetMS/TP的接收数据帧状态机(BACnetReceiveFrameFiniteStateMachine)中,如果按照协议规定,接收程序要一个字节一个字节的接收并解析,在Firmware级别的设备中,UART会产生硬件中断,CPU要处理的逻辑比较简单,处理起来没有大的问题。但是在像Windows这样的平台上,如果单个字节去解析,时间上就无法满足BACnetMS/TP接收状态机的时序要求,造成和其他设备通讯上的异常。如何解决这个问题,就要在串口接收上做文章,提前进行数据处理,详细实现内容会在以后的咨询服务中给大家做详细解答。在BACnetMS/TP的主程序中,当主程序处理完接收数据帧状态机(BACnetReceiveFrameFiniteStateMachine),就会进入BACnetMS/TP的Master节点状态机(BACnetMasterNodeFiniteStateMachine)中,在接收数据帧状态机(BACnetReceiveFrameFiniteStateMachine)中会反馈接收状态,该状态会在Master节点状态机(BACnetMasterNodeFiniteStateMachine)中做为函数执行的一个判断条件,然后在安装BACnet协议第9章节中的状态机各个分状态进行解析。此处要提醒开发人员的是,一定要严格按照Master节点状态机(BACnetMasterNodeFiniteStateMachine)要求的时序进行处理,否则和其他标准BACnet设备的通讯会出现严重的问题,甚至于完全无法通讯。在BACnetMS/TP的Master节点状态机(BACnetMasterNodeFiniteStateMachine)的开发中,令牌Token的维护是开发工作的重中之重,衡量BACnetMS/TP的Master节点状态机(BACnetMasterNodeFiniteStateMachine)是否开发成功的关键也是看是否该状态机和其他的标准BACnet设备是否通讯顺畅,令牌Token维护稳健,不造成令牌Token的频繁丢失。在本章节中,给大家介绍BACnetMS/TP开发经验分享--串口传输篇。在BACnet串口传输这个章节中,重点给大家介绍两部分内容。1BACnet数据包的接收部分在BACnet数据包的接收部分,要在串口配置参数时,优化读写串口的Timeout参数,并且对于串口的异常,应用串口清理APIPurgeComm(),及时进行串口清理动作,在数据处理过程中,无效的信息和运行时间都要监控,依照当前的系统波特率去动态调整各个参数的最佳配置。该部分内容的详细代码实现部分,将会在后面的BACnet培训认证环节给大家重点讲解。2BACnet数据包的发送部分在BACnet数据包的发送部分,如果BACnet数据包字节个数不是很多的话,最好一次性的输出,防止BACnet接收设备在BACnet数据帧接收时序比较严格的情况下,认为该数据包无效而丢弃不处理的状况发生。BACnet开发注意事项:在BACnetMS/TP的串口传输过程中,数据的处理要进行预期的筛选和判断,防止无效的数据过多的影响后面的BACnet状态机状态,造成BACnet设备CPU的Loading过高,影响其他事务的处理过程。在BACnetMS/TP开发经验分享的本章节中,给大家介绍BACnet开发的优化处理部分。1在Windows操作系统中,如何给BACnetMS/TP状态机提供高精度的Timer在BACnetMS/TP的开发过程中,大家很关注的一点就是BACnetMS/TP的各个状态机都规定了严格的时序,并且各个时间参数的精度都是很高,有几个BACnet的时序参数都是毫秒级别的,而且BACnet时序之间啮合很紧密,所以笔者给BACnet开发人员的建议是尽量不去用系统的ms级别的时间函数去处理,如GetTickCount(),这类常用的API,而是使用两个高精度的系统时间参数QueryPerformanceCounter()和QueryPerformanceFrequency(),这组函数来判断系统执行时序状况,经验表明,这对函数的时间精度很高,很精确。2如何提高BACnet设备的数据访问速度由于BACnetMS/TP采用的是令牌环网的机制,这就造成BACnet设备访问上在特定时间内有RS-485总线被占用的状况。如何实现设备之间的快速访问呢,尽量让令牌环网高效率的运行。这里笔者介绍的BACnetMS/TP环网高效运行的机制就是尽量把设备的StationID设定为连续的,并且主要的令牌使用设备,如所有BACnet设备的参数配置、数据采集设备的StationID设定为0,这样就会得到一个高效的令牌环网。还有一个重要参数就是Nmax_master参数,如果BACnetMS/TP令牌环网的设备个数比较固定,设备网络规划已经稳定,则建议用户把该Nmax_master参数设定为该BACnet令牌环网的最大设备StationID值,也就是该令牌环网中的设备个数。1BACnetMS/TP的状态机按照BACnet协议的标准文档开发就能够实现也许很多资深技术人员会给出绝对可以的答案,但是笔者的经验是最好有一份BACnetMS/TP接收状态机和Master节点状态机的源代码,这样开发起来才不会走太多的冤枉路,拖延宝贵的BACnet产品开发周期,并且请资深的BAcnet开发咨询师或开发咨询机构进行指导,起到事倍功半的效果,而且如果BACnet产品要进行国际化拓展的话,即要求进行BACnet认证BTL测试的话,一份有参考价值的BACnetMS/TP源代码的贡献度会很高。2BACnetMS/TP设备开发只要肯下工夫就可以通过BTL认证BACnet标准的确是楼宇自动化领域第一份公开免费的行业准标准。但是天下没有免费的午餐,就像OPC开发一样,都是有一定的技术门槛和难点,若想通过BACnetBTL认证,一份BACnet源代码的确必不可少,至少笔者多年的楼宇自动化开发经验提醒BACnet开发者,BACnet协议开放的背后是有很大的技术开发难度的,尤其是BACnetMS/TP的时序调整优化的部分,更需要BACnet专家的指点迷津和必要的技术指导。',)


  • 编号:1700877631
  • 分类:标准规范
  • 软件: wps,office word
  • 大小:4页
  • 格式:docx
  • 风格:商务
  • PPT页数:19836 KB
  • 标签:

广告位推荐

相关标准规范更多>