bacnet的schedule特讲

bacnet的schedule特讲

奇怪的技能又增加了,我学会了用ETS5配置KNX_wwyyxx26的专栏-CSDN博客_ets knx

opcda获取目录及点位_wwyyxx26的专栏-CSDN博客里提到的原因,我还做了bacnet的接入,因为找到了yabe这个带源码的demo软件,接入相对顺利。

这里就只讲讲schedule,在处理schedule时,还是有一些概念是需要了解的。

schedule是bacnet的一种数据类型。具体的所有数据类型说明可以到下面连接的文档里里找到。

18种BACnet对象说明.docx_bacnet-制造文档类资源-CSDN文库

官方的文档我没有,就算有人有也是不会放出来的,因为是要花钱的。

这我把连接文档的关于schedule描述复制出来,如下

18 Schedule(时间安排)对象

该对象表示在一段时间内以一个星期为周期的控制过程,其中,可以允许对特定的日期定义不容的操作。在BACnet标准中,所谓控制过程就是向某些对象的属性写入一定的值。因此该对象主要定义了以一个星期为周期的写操作过程表。

该对象虽然以一个星期作为控制过程或操作表的周期,但操作表的每一项定义的是一天中的所有操作过程。因此在相邻两天中,前一天所有操作过程中最后一个控制过程通常为后一天的操作过程中第一个操作的起点,若不能作为后一天第一个操作的起点,则必须在后一天的操作表中加入00:00时刻的操作过程,将控制系统的状态调整为所有操作过程的起始状态。

该对象与Calendar对象和Command对象相比,该对象既定义了日期,又定义了操作的过程,且要求在定义的日期和时间上自动进行操作。

Schedule对象可以用如下结构定义:

属性类型

属性名称

属性编码

属性说明

BACnetObjectIdentifier

Object_Identifier

75

同13

CharacterString

Object_Name

77

同13

BACnetObjectType

Object_Type

79

同13

Any

Present_Value//当前值

85

该属性可以为任意类型。但在某一时刻的类型和值分别等于与刚写入List_Of_Object_Property_References列表中引用的属性类型和值。如果List_Of_Object_Property_References属性列表长度为0,该属性的值等于刚写入的值。这个值为Weekly_Schedule属性中(Time,Value)对的value值。

CharactreString

Description//描述

28

同4.3.13

BACnetDataRange

Effective_Period

//有效周期

32

该属性定义了周期性操作的有效时间范围

BACnetDailySchedule

Weekly_Schedule[7]

//周时间表

123

该属性为包含7个元素的BACnetARRAY列表。其中每一项的数据类型为BACnetDailySchedule。而BACnetDailySchedule类型为BACnetTimeValues类型的列表。BACnetTimeValues则为(时刻,值)序对,它表示在一天中的某个时刻(序对中的时刻)向List_Of_Object_Property_References属性引用的属性写入序对中的”值“。7个元素的排列顺序分别代表星期1至星期日的操作过程。如果某天的日期正好与Exception_Schedule属性定义的日期相同,则这天的操作按Exception_Schedule属性定义的操作执行

BACnetSpecialEvent

Exception_Schedule[n]//例外时间表

38

该属性定义了周期操作中的特殊日期中的特殊操作

BACnetObjectPropertyReference

List_Of_Object_Property_Reference//对象属性引用列表

54

该属性定义了控制过程中药写入属性的Property_Identifier(属性标志符)和Object_Identifier(对象标志符)

Unsigned

Priority_For_Writing//写入优先级(1...16)

88

要注意的是上面的文档并没有提到一个属性叫做Schedule Default,就是下图里的Schedule Default Value,他的id是174,下文有详细的说明。

下图是yabe(yetanotherbacnetexplorer)这个软件所显示的一个schedule的内容

 这里我们可以看到一个星期的每一天的设置是怎么样的。比如,在Monday,它在08:30:00时置为1,在09:00:00置为null,在10:30:00时置为1,在11:00:00置为null。

这里null是未设置的意思,当是null时会使用Default Value的值,就是上面的0。

所以这个Default Value值还是多重要的,请看下面的这段话,这是我在一份厂商的说明文档里摘录下来的

Schedule Default is the value used during times not covered during the schedule (e.g., at night). At midnight the schedule restarts with the schedule default if no value is set. If a (default) value on the schedule is null, objects commanded by the schedule will be relinquished at their set priority for writing. For example, a schedule writing to BO1 @ priority 8 will normally command 0 or 1 and write to the BO1’s priority array @ 8. However, if the schedule default is set to null and neither the weekly nor the holiday schedules are controlling, BO1’s present value will become null, and BO1 will be relinquished @ level 8 in its priority array.

翻译如下,希望大家能看懂我的翻译:

 Schedule Default是计划任务期间,在设定的时间段未覆盖时使用的值(比如在夜间)。
        在午夜,如果未设置时间段,计划任务将使用Schedule Default值来重新启动。如果Schedule Default为null,由这个计划任务schedule所控制的对象(比如一个BO点),
将按设定的优先顺序放弃写入(设置)操作。
        例如,通常,将计划任务写入优先级为8的BO1,通常是将命令0或1并写入BO1的优先级数组@8。但是,如果Schedule Default默认是null,并且当前时间段既不在设置的工作日时间段也不在设置的假日的时间段里时,计划控制,BO1的present value将变为null,则BO1将在优先级8这个等级上被放弃操作。

       这个Schedule Default可以不仅仅是开关量,还可以是模拟量,比如,这样一个场景,上午我们把空调设置为26度,下午需要把空调设置为24度,我们这里就可以把Schedule Default设置为一个模拟量值,对应的一个BACnetDailySchedule也是要是模拟量。

 再上一张图,他表明了一个schedule的生效规则

 不具体将这个图了,相信大家能看得明白。

说了这么多,那一个Schedule是如何同一个点位关联起来的呢,比如在这个delta的软件里,就可以通过编程的方式来将一个schedule赋值给一个BO点位,如图。

 这里,BO1被赋值为了DEMO,DEMO就是一个Schedule

这是一个抓包数据,有兴趣可以看看

bacnet获取schedule的抓包.pcapng-嵌入式文档类资源-CSDN文库

       ps 

最后,如果你看到这里请给个赞吧!:)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值