Writing to Specific Calendar and Schedule Properties
- Last UpdatedJul 07, 2025
- 6 minute read
Tag addresses are available that allow you to write to the BACnet properties identified in the following table.
|
Tag address |
Associated BACnet property |
|---|---|
|
DateListEx |
Calendar.DateList |
|
WeeklyScheduleExInt[.Monday...Sunday] WeeklyScheduleExDig[.Monday...Sunday] WeeklyScehduleExDbl[.Monday...Sunday] WeeklyScehduleExEnum[.Monday...Sunday] WeeklyScehduleExUInt[.Monday...Sunday] WeeklyScehduleExReal[.Monday...Sunday] See Schedule Objects. |
Schedule.WeeklySchedule |
|
ExceptionScheduleExInt[.1...31] ExceptionScheduleExDig[.1...31] ExceptionScheduleExDbl[.1...31] ExceptionScheduleExEnum[.1...31] ExceptionScheduleExUInt[.1...31] ExceptionScheduleExReal[.1...31] See Schedule Objects. |
Schedule.ExceptionSchedule |
When configuring these tags, you should consider the following:
-
These tags are STRING Plant SCADA data type.
-
Using wildcards (*) when writing to the schedule or calendar is not supported, for example, {(05/**/2011)}. However, any unspecified entries existing in the device will be read as wildcards (*). For example, the driver will read the Calendar entry {(05/**/2011)} from the device as it is. This is interpreted as the 5th day of any month of the year 2011.
-
Currently the only supported date and time format is Australian. Date: dd/mm/yyyy. Time: hh:mm:ss.mmm.
-
A write will be unsuccessful if an incorrect string format is used.
The driver is only capable of writing a string no longer that 252 characters because of Plant SCADA limitations. Any attempt to write a string longer than 252 characters will be unsuccessful. The following provides examples of the limitations you need to be aware of:
-
Schedule.WeeklySchedule[0..1].BACnetDailySchedule, Schedule.ExceptionSchedule[0..N].BACnetSpecialEvents and Calendar.DateList are BACnet lists with an arbitrary number of elements. A list with a large number of elements may not fit into the string length limitation. If the string requires more than 252 characters, the corresponding tag value will be set to empty string with BAD quality.
-
For a Calendar.DateList property that contains a list of BACnetDate elements ("{DT(04/11/2015)} {DT(05/11/2015)}{DT(06/11/2015)}") , the maximum number of elements in the list is 15.
-
For a Calendar.DateList property that contains a list of BACnetDateRange elements ("{DR(31/12/2000)(25/10/2020)}{DR(31/12/2000)(25/10/2020)}"), the maximum number of elements in the list is 8.
-
For Schedule.WeeklySchedule and Schedule.ExceptionSchedule properties, the maximum number of elements depends on the number of time-value pairs in BACnetDailySchedule or BACnetSpecialEvents lists.
For example, a Schedule.WeeklySchedule.Monday property that has only digital values can contain 16 time-value pairs. This number will decrease if a weekly or exception schedule contains integer or real values. Also, it will be less for an exception schedules as it will contain date/calendar references.
Note: Not every BACnet device uses the same object indexing rules. For example, with the Alerton BCM-ETH, both the schedule object index and the calendar object index start independently at 1, whereas Andover™ TAC devices use common indexing for every object type, starting at 7001.
When writing to one of these tags, you need to compose a string in a format described below. The driver will parse the string and update the corresponding property in the device.
Calendar.DateListEx property
This tag represents a sequence of BACnetCalendarEntry.
String format for BACnetCalendarEntry:
{DT(dd/mm/yyyy)}
or
{DR(dd/mm/yyyy)(dd/mm/yyyy)}
or
{WD(DayOfWeek/WeekOfMonth/Month)}
where:
-
DT represents a 'Date' type BACnetCalendarEntry
-
DR represents a 'DateRange' type BACnetCalendarEntry
-
WD represents a 'WeekNDay' type BACnetCalendarEntry
-
DayOfWeek is a numerical representation of a day: 1 for Monday, 2 for Tuesday and so on
-
WeekOfMonth is 1 for days 1-7; 2 for days 8-14; 3 for days 15-21; 4 for days 22-28; 5 for days 29-31
-
Month is a numerical representation of a month: 1 for January, 2 for February and so on
For example, when defining a string you could use the following:
-
CAL_2 = "{DT(04/11/2009)}"
-
CAL_2 = "{DT(04/11/2009)}{ DT(24/12/2020)}"
-
CAL_2 = "{DR(31/12/2000)(25/10/2020)}"
-
CAL_2 = "{WD(1/2/11)}{WD(7/3/10)}"
-
CAL_2 = "{DT(04/11/2009)}{DR(03/05/2011)(15/08/2017)}{WD(4/5/3)}"
Be aware when specifying a year value (yyyy), that the driver will support 1900 to 2154. However, you will need to consider that the range supported by a device may be more restrictive.
Schedule.WeeklySchedule Tags
These tags represent a single array of BACnet Schedule.WeeklySchedule property. Each array has seven elements to represent days of the week. You will need to create a separate tag for each day in a week. The driver reads and writes individual array elements of BACnet Schedule.WeeklySchedule property.
There are separate tag addresses for different value data types. The driver support BACnet Boolean, Signed Integer and Double data types.
The tag address format is:
SCH.<objectInstance>.WeeklyScheduleExDig[.Monday...Sunday]
SCH.<objectInstance>.WeeklyScheduleExInt[.Monday...Sunday]
SCH.<objectInstance>.WeeklyScheduleExDbl[.Monday...Sunday]
SCH.<objectInstance>.WeeklyScheduleExEnuml[.Monday...Sunday]
SCH.<objectInstance>.WeeklyScheduleExUInt[.Monday...Sunday]
SCH.<objectInstance>.WeeklyScheduleExReal[.Monday...Sunday]
For example:
-
The following tag represents a daily schedule for Monday, supporting an Integer data type:
Schedule.3.WeeklyScheduleExInt.Monday
-
The following tag represents a daily schedule for Saturday, supporting a Double data type:
Schedule.1.WeeklyScheduleExDbl.Saturday
-
The following tag represents a number of elements in a WeeklySchedule array:
Schedule.3.WeeklyScheduleExInt
-
The following tag represents a number of elements in a WeeklySchedule array:
Schedule.3.WeeklyScheduleExReal
-
The following tag represents a daily schedule for Monday, supporting an unsigned Integer data type:
Schedule.3.WeeklyScheduleExUInt.Monday
-
The following tag represents a daily schedule for Monday, supporting an enumerated data type:
Schedule.3.WeeklyScheduleExEnum.Saturday
The value of these tags is represented by a string in a format.
The string format is:
(time;value)(time;value)(time;value)
where:
-
time is in BACnetTime in a format "hh:mm:ss.mmm" or "HH:mm:ss.mmm"
-
value is a Boolean, Signed Integer or Double, depending on a tag address.
Example
(07:00:00.00;18.5)(09:15:00.00;20.5)
Schedule.ExceptionSchedule Tags
These tags represent a single array element of BACnet Schedule.ExceptionSchedule property. The user will need to create a separate tag for each special event. The driver reads and writes individual array elements of BACnet Schedule.ExceptionSchedule property.
There are separate tag addresses for different value data types. The driver support BACnet Boolean, Signed Integer and Double data types.
The tag address format is:
SCH.<objectInstance>.ExceptionScheduleExDig[.1...31]
SCH.<objectInstance>.ExceptionScheduleExInt[.1...31]
SCH.<objectInstance>.ExceptionScheduleExDbl[.1...31]
SCH.<objectInstance>.ExceptionScheduleExEnum[.1...31]
SCH.<objectInstance>.ExceptionScheduleExUInt[.1...31]
SCH.<objectInstance>.ExceptionScheduleExReal[.1...31]
For example:
-
The following tag represents a special event number 1, supporting an Integer data type:
Schedule.3. ExceptionScheduleExInt.1
-
The following tag represents a special event number 4, supporting a Double data type:
Schedule.1. ExceptionScheduleExDbl.4
-
The following tag represents a number of elements in an ExceptionSchedule array:
Schedule.1. ExceptionScheduleExDbl
-
The following tag represents a special event number 3, supporting a enumerated data type:
Schedule.1. ExceptionScheduleExEnum.3
-
The following tag represents a special event number 4, supporting unsigned Integer data type:
Schedule.2.ExceptionScheduleExUInt.4
-
The following tag represents a special event number 4, supporting real data type:
Schedule.2.ExceptionScheduleExReal.4
The value of these tags is represented by a string in a format.
Note:
The driver can only read/write the first 31 special events for a configured schedule
object, regardless of how many of them exist in the device. For example, for a device
supporting a signed integer data type, the tag address for the first special event
should be "SCH.<objectInstance>.ExceptionScheduleExInt.1". The tag address of 31st
special event should be "SCH.<objectInstance>.ExceptionScheduleExInt.31".
Unlike weekly schedule events, deleting special events or exception schedule events
is not supported. However, special events can be overwritten.
The driver cannot create exception schedule or special events in the device. It can
only read and write to such events if they have already been created. The driver will
return bad quality for non-existent exception schedule or special events, however,
the tag address "SCH.<objectInstance>.ExceptionScheduleExInt" will correctly read
the total number of special events configured for the schedule object in the device.
Schedule. EffectivePeriodEx
This tag specifies the range of dates within which the Schedule object is active. This is represented as BACnetDateRange (string).
The tag addressing format is:
SCH.<objectInstance>.EffectivePeriodEx
For example the date range format is:
DR (11/01/2010)(23/06/27)
String format for a calendar reference:
CL(CalendarObjectId),(time;value)(time;value),Event Priority
where:
-
CalendarObjectId represents a configured calendar object ID
-
time is in BACnetTime in a format "hh:mm:ss.mmm" or "HH:mm:ss.mmm"
-
value is a Boolean, Signed Integer or Double, depending on a tag address.
For example:
CL(3),(07:07:07.25;1),16
String format for BACnetCalendarEntry:
DT(dd/mm/yyyy),(time;value)(time;value),Event Priority
or
DR(dd/mm/yyyy)(dd/mm/yyyy),(time;value)(time;value),Event Priority
or
WD(DayOfWeek/WeekOfMonth/Month),(time;value)(time;value),Event Priority
where:
-
DT represents a 'Date' type BACnetCalendarEntry
-
DR represents a 'DateRange' type BACnetCalendarEntry
-
WD represents a 'WeekNDay' type BACnetCalendarEntry
-
time is in BACnetTime format (hh:mm:ss.mmm)
-
DayOfWeek is a numerical representation of a day: 1 for Monday, 2 for Tuesday and so on
-
WeekOfMonth is 1 for days 1-7; 2 for days 8-14; 3 for days 15-21; 4 for days 22-28; 5 for days 29-31;
-
Month is a numerical representation of a month: 1 for January, 2 for February and so on.
For example:
DT(05/11/2000),(07:00:00.00;18.5)(09:15:00.00;20.5),12
DR(11/01/2010)(23/06/27),(07:00:00.00;18.5)(09:15:00.00;20.5),7