PPCL Manual

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 195

APOGEE™

PXC.A PPCL User Manual

A6V10374898

2023-05-15
Edition notice

Edition notice
Technical specifications and availability subject to change without notice.
This document may not be reproduced, disseminated to third parties or processed and its contents may not be
used or disclosed without express permission. Non-compliance shall result in compensation for damages. All rights,
including those resulting from a successful patent application and registration of a utility model or design patent,
are reserved.
Edition: 2023-05-15
Document ID: A6V10374898
125-1986

© Siemens 2023

2 | 195 2023-05-15 A6V10374898


Copyright

Copyright
This document may be duplicated and distributed only with the express permission of Siemens, and may be
passed only to authorized persons or companies with the required technical knowledge.

A6V10374898 2023-05-15 3 | 195


Table of Contents

Manual Organization.....................................................................................................................................................9
Manual Conventions .....................................................................................................................................................9
Syntax Page Example ......................................................................................................................................10
Chapter 1 - Program Methodology..........................................................................................................................12
What's New .................................................................................................................................................................13
Obsolete PPCL Statements Removed from the Language..............................................................................13
Redundant PPCL Statements ..........................................................................................................................14
New and Modified PPCL Statements ...............................................................................................................14
General PPCL Rules ........................................................................................................................................15
PPCL Rules for PXC.A Controllers ..................................................................................................................16
BACnet Point Naming (Encoded names) ...................................................................................................................18
Equal to (.EQ.) ..................................................................................................................................................22
Greater than (.GT.) ...........................................................................................................................................22
Greater than or equal to (.GE.).........................................................................................................................23
Less than (.LT.) ................................................................................................................................................24
Less than or equal to (.LE.) ..............................................................................................................................24
Not equal to (.NE.)............................................................................................................................................25
And (.AND.) ......................................................................................................................................................26
Not And (.NAND.) .............................................................................................................................................27
Or (.OR.) 28
Exclusive Or (.XOR.) ........................................................................................................................................29
Addition 30
Assignment .......................................................................................................................................................31
Division 31
Multiplication .....................................................................................................................................................32
Subtraction .......................................................................................................................................................32
Arc-Tangent (ATN) ...........................................................................................................................................33
Complement (COM) .........................................................................................................................................34
Cosine (COS) ...................................................................................................................................................34
Natural Antilog (EXP) .......................................................................................................................................35
Natural Log (LOG) ............................................................................................................................................35
Root (.ROOT.) ..................................................................................................................................................36
Square Root (SQRT) ........................................................................................................................................36
Tangent (TAN) ..................................................................................................................................................37
Alarm priority (ALMPRI)....................................................................................................................................39
Totalized value (TOTAL) ..................................................................................................................................40
Changing Precedence Levels with Parentheses..............................................................................................42
Alarm count (ALMCNT) ....................................................................................................................................45
Alarm count 2 (ALMCT2)..................................................................................................................................46

4 | 195 2023-05-15 A6V10374898


Battery condition ($BATT) ................................................................................................................................47
Communications link (LINK).............................................................................................................................48
Day (DAY) ........................................................................................................................................................48
Day of the month (DAYOFM) ...........................................................................................................................49
Decimal time (CRTIME) ...................................................................................................................................50
Military time (TIME) ..........................................................................................................................................51
Month (MONTH) ...............................................................................................................................................52
PDL monitor ($PDL) .........................................................................................................................................53
Seconds counter (SECNDS) ............................................................................................................................53
Seconds counters (SECND1 through SECND7)..............................................................................................54
$ARG1 through $ARG15..................................................................................................................................56
$LOC1 through $LOC15 ..................................................................................................................................57
Testing Point Priorities .....................................................................................................................................58
Operator (@OPER) ..........................................................................................................................................60
Smoke (@SMOKE) ..........................................................................................................................................61
Emergency (@EMER) ......................................................................................................................................62
Peak Demand Limiting (@PDL) .......................................................................................................................63
PPCL (@NONE)...............................................................................................................................................64
Pre-APOGEE Firmware ...................................................................................................................................64
Failed Object Values ........................................................................................................................................66
Determining Object Status ...............................................................................................................................66
Commanding and Evaluating the HAND Status...............................................................................................67
Object Status Indicators Supported..................................................................................................................68
Guidelines.........................................................................................................................................................77
Designing Programs Using a Modular Structure ..............................................................................................77
Subroutine Commands.....................................................................................................................................79
Multiple Programs versus Subroutines.............................................................................................................79
Program Testing ...............................................................................................................................................80
Program Documentation ..................................................................................................................................80
Chapter 2 - Control Option Comparisons ..............................................................................................................83
Duty Cycling Commands ..................................................................................................................................84
Example—Economizer Comparison ................................................................................................................85
Enthalpy Economizer Calculations...................................................................................................................85
Why Use PDL? .................................................................................................................................................86
Why Use PDL Instead of Duty Cycling?...........................................................................................................86
Distributed Peak Demand Limiting ...................................................................................................................86
Defining Distributed PDL ..................................................................................................................................87
Where to Use SSTO.........................................................................................................................................88
Defining SSTO..................................................................................................................................................88
SSTO Formulas................................................................................................................................................89
Defining Time-of-Day........................................................................................................................................93
IF/THEN/ELSE Time-Of-Day............................................................................................................................96
APOGEE Interaction with PPCL TOD ..............................................................................................................96

A6V10374898 2023-05-15 5 | 195


Chapter 3 - Command Syntax..................................................................................................................................97
Overview .....................................................................................................................................................................97
ACT (Activate lines) ....................................................................................................................................................99
ADAPTM (Adaptive control, multiple) .......................................................................................................................100
tcd Example ....................................................................................................................................................106
tch Example ....................................................................................................................................................106
tcc Example ....................................................................................................................................................107
ADAPTS (Adaptive control, single)...........................................................................................................................109
llpv Example 1 ................................................................................................................................................113
llpv Example 2 ................................................................................................................................................113
hlpv Example 1 ...............................................................................................................................................113
hlpv Example 2 ...............................................................................................................................................113
ALARM (Alarm state) ................................................................................................................................................114
AUTO (Auto status) ..................................................................................................................................................115
DAY (Day mode).......................................................................................................................................................115
DBSWIT (Dead band switch)....................................................................................................................................116
DC (Duty cycle).........................................................................................................................................................117
DCR (Duty cycle routine) ..........................................................................................................................................119
DEACT (Deactivate lines).........................................................................................................................................120
DEFINE (Define abbreviation) ..................................................................................................................................121
DISABL (Disable lines) .............................................................................................................................................122
DISALM (Disable alarm) ...........................................................................................................................................123
DISCOV (Disable COV) ............................................................................................................................................124
DPHONE (Disable phone) ........................................................................................................................................125
EMAUTO (Emergency, Auto status).........................................................................................................................125
EMFAST (Emergency, Fast status) ..........................................................................................................................126
EMOFF (Emergency, Off status) ..............................................................................................................................126
EMON (Emergency, On status .................................................................................................................................127
EMSET (Emergency, set value) ...............................................................................................................................127
EMSLOW (Emergency, Slow status)........................................................................................................................128
ENABLE (Enable lines).............................................................................................................................................128
ENALM (Enable alarm).............................................................................................................................................129
ENCOV (Enable COV)..............................................................................................................................................130
EPHONE (Enable phone) .........................................................................................................................................131
FAST (Fast status)....................................................................................................................................................132
GETVAL (Read property values) ..............................................................................................................................133
GOSUB (Go to subroutine).......................................................................................................................................134
GOTO (Go to line) ....................................................................................................................................................139
HLIMIT (High limit) ....................................................................................................................................................140
HOLIDA (Holiday) .....................................................................................................................................................141
IF/THEN and IF/THEN/ELSE (Conditional control) ..................................................................................................142
INITTO (Initialize totalized value)..............................................................................................................................143
LLIMIT (Low limit) .....................................................................................................................................................144

6 | 195 2023-05-15 A6V10374898


LOCAL (Local variable) ............................................................................................................................................145
LOOP (Loop control).................................................................................................................................................146
MAX (Maximum value) .............................................................................................................................................148
MIN (Minimum value)................................................................................................................................................148
NIGHT (Night mode).................................................................................................................................................149
NORMAL (Normal operating mode) .........................................................................................................................150
OFF (Off status)........................................................................................................................................................151
OIP (Operator interface program).............................................................................................................................152
ON (On status)..........................................................................................................................................................154
ONPWRT (On after power return) ............................................................................................................................155
PDL (Peak demand limiting) .....................................................................................................................................156
PDLDAT (PDL, define load attributes)......................................................................................................................158
PDLDPG (PDL, digital point group) ..........................................................................................................................159
PDLMTR (PDL, meter monitor) ................................................................................................................................160
PDLSET (PDL, setpoints) .........................................................................................................................................162
RELEAS (Release) ...................................................................................................................................................163
RETURN (Return/end subroutine)............................................................................................................................165
SAMPLE (Sample a statement)................................................................................................................................166
SET (Set point value)................................................................................................................................................167
SETVAL (Write property values) ..............................................................................................................................169
SLOW (Slow status) .................................................................................................................................................170
SSTO (Start/stop time optimization) .........................................................................................................................170
SSTOCO (SSTO coefficients) ..................................................................................................................................173
STATE (State text command)...................................................................................................................................175
TABLE (Table of coordinates) ..................................................................................................................................177
TIMAVG (Average over time) ...................................................................................................................................178
TOD (Time of day, digital points)..............................................................................................................................179
TODMOD (TOD modes) ...........................................................................................................................................180
TODSET (Time of day, analog points) .....................................................................................................................182
WAIT (Wait time) ......................................................................................................................................................184
1 Appendix A—PPCL Reserved Word List ...................................................................................................186
2 Appendix B−Property Short Names, Numbers, and Descriptions ..........................................................190
3 Appendix C—Program for MEC100K..........................................................................................................193

A6V10374898 2023-05-15 7 | 195


How to Use This Manual

How to Use This Manual


To effectively use this manual, you should be familiar with the equipment controlled by the PPCL programming
language. Some of the ways you can become familiar with APOGEE PXC.A products are as
follows:
● Siemens Industry, Inc. Training Classes
● Hands-on experience
● Reading user documentation
If you have knowledge or experience with HVAC equipment, the task of learning the programming language
becomes easier.
Your feedback is important to us. If you have comments about this manual, please submit them to
SBT_technical.editor.us.sbt@siemens.com

Manual Organization
The PPCL User's Manual contains the following chapters:
● Chapter 1 – Programming Methodology gives a complete overview of the PPCL environment. This chapter
includes discussions about relational, logical, and arithmetic operators, as well as information about
precedence levels, resident points, special functions, point priority, point status, and modular programming.
● Chapter 2 – Control Option Comparisons describes different control applications, how they should be used, and
how their PPCL commands should be organized.
● Chapter 3 – Syntax lists all control commands. This chapter describes the syntax, functionality, and special
exceptions for each command, as well as related commands.
● The Glossary describes the terms and acronyms used in this manual.
● Appendix A lists the PPCL reserved word list.
● An Index is provided to help you locate information presented in this manual.

Manual Conventions
The following table lists text conventions used in this manual.

Convention Example
Syntax commands are in uppercase ON

Point names are in uppercase and italics OATEMP

User-defined parameters are in lowercase and italics. This (pt1, pt2, pt3)
indicates parameters that you must specify depending on
your job.

Error messages and computer code are displayed in 610 IF (FANDO1.EQ.1.0) THEN ...
Courier New font.

Three periods placed after program code denotes a 610 IF (FANDO1.EQ.1.0) THEN ...
continuation of program code.
This convention is used to prevent programming examples
from becoming cluttered.

A6V10374898 2023-05-15 9 | 195


How to Use This Manual

Syntax Page Example


Section 1
Compatibility Bar
Section 2 Syntax
Syntax DISALM(pt1,...,pt16)
pt1 through pt16
Names of the points that should have alarm reporting disabled.
Section 3 Use
Use This command disables the alarm printing capabilities for specified points. Up
to 16 points can be enabled for alarm reporting by one command. The point
status changes to *PDSB* after it has been DISALMed.
Example
50 IF (SFAN.EQ.OFF) THEN DISALM(ROOM1) ELSE
ENALM(ROOM1)
Section 4 Notes
Notes (If Applicable) This command cannot be used for points that do not reside in the device in
which the control program is written. DISALM cannot be used to directly
disable alarm reporting over the network.
Section 5 See also
See Also (If Applicable) ALARM, ENALM, HLIMIT, LLIMIT, NORMAL

Compatibility bar
The compatibility bar indicates if the command can be used with a specific type of firmware.

Unitary Pre-APOGEE APOGEE BACnet PXC.A


● ● ● ● ●

The symbol indicates the command is available in all supported firmware revisions of that type. The bar shown
indicates all firmware types are supported.

Syntax
The Syntax section provides the command format. You’ll also find a description for each parameter in the
command, as well as the valid inputs and any calculations you may need.

Use
The Use section describes what function the command performs. Examples of program code are provided to show
you how parameters and values are defined.

Truth Tables
Truth tables help explain conditional and comparison logic. Inputs are defined in the truth table, and then they are
logically compared to produce outputs (results).

10 | 195 2023-05-15 A6V10374898


How to Use This Manual

Notes
The Notes section contains helpful hints that relate to how the command operates, as well as specific details for
commonly missed items and subsequent errors in the program.

See also (if applicable)


The See also section directs you to other commands, operators, or sections that are related to the command.

A6V10374898 2023-05-15 11 | 195


Chapter 1 - Program Methodology
Manual Conventions

Chapter 1 - Program Methodology

Overview
This chapter contains information related to the design, coding, and implementation of a program. The following
concepts are discussed in this chapter:
● Introduction to PPCL
● What's New
– Obsolete PPCL Statements Removed from the Language
– Redundant PPCL Statements Planned for Removal from the Language
– New and Modified PPCL Statements
● PPCL Rules
– General PPCL Rules
– Defining Objects in a PPCL Program
– Rules for Naming Objects
– Rules for Naming a PPCL Program
– PPCL Program Design Guidelines
– Designing a Program that is Easy to Maintain
– Designing a Program that Operates Efficiently
● Making Comparisons
– Relational Operators
– Logical Operators
– Arithmetic Operators
● Performing Mathematical Functions and Calculations
– Arithmetic Functions
– Special Functions
● Order of Precedence
– Changing Precedence Levels with Parentheses
● Using Resident Objects and Storage Locations for Data
– Resident Objects
– Local Variables
● Understanding the Relationship Between Point Priority and Status
– Point Priority Overview
– At (@) Priority Status Indicators
– Point Status Indicators
● Converting a Sequence of Operation into Program Code
– Guidelines
– Designing Programs Using a Modular Structure
– Subroutine Commands
– Multiple Programs versus Subroutines
– Program Testing
– Program Documentation

12 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
What's New

Introduction
Siemens Building Automation controllers use PPCL (Powers Process Control Language) to control all aspects of
the building’s mechanical systems, in a simple to understand text-based program structure.
● Programs should be logically thought out and their processes understood before writing program code.
● Programs can be organized differently, but still perform the same function.

What's New
PPCL Updates
● Add user role limitations on write and read privileges in the PPCL Editor.
● Add support for point resolutions for TECs. PPCL now supports constructed names with the inclusion of TECs
in the PXC.A platform.

Obsolete PPCL Statements Removed from the Language


The following statements are not supported in PXC.A devices. The PXC.A PPCL runtime will consider these
statements to be invalid, and no replacements are provided.

Statement(s) Removed Notes


ADAPTM (Adaptive control, multiple) The ADAPT application is not supported in PXC.A devices.
ADAPTS (Adaptive control, single)

DISCOV (Disable COV Reporting) Programmatic COV enable/disable is not supported in PXC.A devices.
ENCOV (Enable COV Reporting)

DPHONE (Disable phone) Dialup modems are not supported in PXC.A devices.
EPHONE (Enable phone)

OIP (Operator interface program) The PRMMI, along with its menu prompt tree, is not supported in
PXC.A devices. Based on need, limited alternative to the OIP
statement may be provided in a future product release.

ONPWRT (On after power return) PXC.A devices do not have warmstart functionality, therefore a PPCL
program will always start at the first line after a power failure.

ALARM (Command to alarm state) Commanding into and out of alarm state is not supported in PXC.A
NORMAL (Command to normal state) devices.

A6V10374898 2023-05-15 13 | 195


Chapter 1 - Program Methodology
What's New

Redundant PPCL Statements


The following statements are not recommended for use when creating new PPCL programs. Alternatively, the new
replacement statements with more optimal capabilities are recommended for new programs.

The current PPCL statements are still supported by the compiler and will continue to
be supported for migration projects.

Current Statement(s) Replacement Statements


ACT (activate lines) Replace with GoTo( ) [➙ 139]/Return( ) [➙ 165] logic or alternate.

DAY(set to day/occupied mode) Replace with Set() [➙ 167].

NGT (set to NGT/unoccupied mode) Replace with Set() [➙ 167].

DEACT(deactivate lines) Replace with GoTo( ) [➙ 139]/ Return( ) [➙ 165] logic or alternate.

DISALM (disable alarm) Replace with SETVAL (Write property values).

ENALM (enable alarm) Replace with SETVAL (Write property values).

EMAUTO (set to AUTO @EMER priority) Replace with Set() [➙ 167].

EMFAST (set to FAST @EMER priority) Replace with Set() [➙ 167].

EMOFF (set to OFF @EMER priority) Replace with Set() [➙ 167].

EMON (set to ON @EMER priority) Replace with Set() [➙ 167].

EMSET (set @EMER priority) Replace with Set() [➙ 167].

EMSLOW (set to SLOW @EMER priority) Replace with Set() [➙ 167].

AUTO (set to AUTO @NONE priority) Replace with Set() [➙ 167].

FAST (set to FAST @NONE priority) Replace with Set() [➙ 167].

OFF (set to OFF @NONE priority) Replace with Set() [➙ 167] or OFF_STATE.

ON (set to ON @NONE priority) Replace with Set() [➙ 167] or ON_STATE.

SLOW (set to SLOW @NONE priority( Replace with Set() [➙ 167].

HLIMIT (set high alarm limit) Replace with SETVAL (Write property values).

LLIMIT (set low alarm limit) Replace with SETVAL (Write property values).

STATE (set value by state text) For binary objects, replace with Set() [➙ 167].

See also
 SET (Set point value) [➙ 167]
 SETVAL (Write property values) [➙ 169]
 GOSUB (Go to subroutine) [➙ 134]

New and Modified PPCL Statements


In earlier versions of PPCL, such as in APOGEE PXC compact and modular controllers, you could use ACT,
DEACT, ENABL, and DISABL to programmatically enable and disable lines of code. These statements are still
supported in PXC.A controllers, but it is advised to use the new statements Goto() to go around the logic instead

14 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
What's New

of disabling and enabling lines in new programs for PXC.A controllers. Uncommenting (enabling) and commenting
out (disabling) statements that use ACT, DEACT, ENABL, and DISABL cause the device to use more system
resources. Commenting out or uncommenting statements or using the new statements to go around the logic have
the same effect on the program, but do not use as many system resources.

Statement Description
SetVal() A new statement that writes the value of a specified property in one or
more object instances.

GetVal() A new statement that reads the value of a specified property in a


specified object instance.

Set() For commandable properties, Set() has been modified to support


BACnet command prioritization.

Releas() Releas() has been modified to support BACnet command prioritization


and to support releasing multiple priority slots with a single statement.

State() In PXC.A firmware, State() can only be used with multistate objects.
State() has been modified to support BACnet command prioritization
and to support values passed as either object references or state text
strings.

PPCL Rules
Just as grammatical rules are used for the spoken language, PPCL uses rules to create commands and
instructions. Each PPCL program must conform to these rules; otherwise, the computer will not understand what
you are trying to say.
● Program lines are executed in ascending order according to their line numbers, unless directed otherwise.
● When the last line of the program is reached, the computer automatically returns to the first line of the program
and continues processing.
● Any program line that begins with C must be enclosed by parentheses ( ).
● PPCL statements that do not follow the correct structure may produce unexpected results.

General PPCL Rules


The general rules for PPCL are as follows:
● Each PPCL program contains one or more PPCL statements.
● Each PPCL statement must be assigned a unique line number. Valid program line numbers are 1 through
32,767.
● The maximum number of program lines a device can contain is limited to the amount of free memory of that
device.
● The maximum number of characters in a single line is 512.
NOTE: Good programming practice is to not use the maximum number of characters in a single line as it
becomes hard to read.
● When transferring program control from a subroutine (GOSUB), you must use the RETURN command.
● For APOGEE firmware only:
– Each automation station running PPCL contains one or more separate programs.
– The last line of the program does not need to be executed on every pass of the program.

A6V10374898 2023-05-15 15 | 195


Chapter 1 - Program Methodology
What's New

Maximum Number of Characters per Program Line


Firmware
When entering program lines through the web user interface, the maximum number of characters per line is 512
(including the line number).

Maximum Number of Characters per Comment Line


When entering comment lines through the web user interface, the maximum number of characters per line is 512
(not including the line number or operator C).

Creating a Notepad at the Automation Station


A PPCL program containing only comment lines can be used as a notepad for the automation station. This allows
you to record information regarding activities, modifications, a to-do list, special instructions to follow-up personnel,
or general notes.
● The comment lines can be added and viewed from the web user interface.
● The program can be archived for historical purposes.

PPCL Rules for PXC.A Controllers


PXC7.A controllers support up to 50 PPCL programs. The number of programs that a PXC7.A controller can
support depends on the size of the program.
● One very large program (less than 10,000 lines)
● One large program (less than 5,000 lines)
● A few medium programs (less than 1,000 lines)
● Several small programs (less than 400 lines)
PXC4.A controllers support up to 10 PPCL programs. The number of programs that a PXC4.A controller can
support depends on the size of the program.
● One large program (less than 5,000 lines)
● A few medium programs (less than 1,000 lines)
● Several small programs (less than 400 lines)

Syntax Errors
Syntax errors include missing line numbers, missing parentheses, missing statement parentheses, and incorrectly
spelled statement names. Lines that include syntax errors are indicated by the line status S.
In the example below, line 20 has a syntax error (missing parenthesis).
10 ET LOCAL(MYPOINT)
20 E S SET(50, MYPOINT

16 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
What's New

Defining Objects in a PPCL Program


● When accessing objects in devices other than automation stations, the use of encoded names is required.
● Object names that begin with numbers must be enclosed in double quotes.
● Object names that use characters other than A-Z or 0-9 must be enclosed in double quotes.
● Object names that contain a space must be enclosed in double quotes.
Example
10 "3_AV = 5"
● The object (3_AV = 5) requires quotes. Without quotes, it will be interpreted as 103_AV = 5.
"AV02 = 01 AV"
● The object requires quotes. Without quotes, it will be interpreted as AV02 = 1.

Rules for Naming Objects


Use the following rules to establish an object naming convention that provides meaningful information.
● Valid names are from 1 to 30 characters.
● Acceptable characters include: A-Z, a-z, 0-9, spaces ( ), periods (.), commas (,), dashes (-), underlines (_), and
apostrophes (').
● Do not use the following characters in object names: & ? * [ ] { } %
● Only use a colon (:) in an object name when working with subpoints.

Rules for Naming a PPCL Program


PPCL programs use an assigned name. Use the following rules to assign a program name:
● Valid names are from 1 to 30 characters.
● Acceptable characters include: A-Z, a-z, 0-9, spaces ( ), periods (.), commas (,), dashes (-), underlines (_), and
apostrophes (').
● Do not use the following characters in object names: & ? * { } %

A6V10374898 2023-05-15 17 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

BACnet Point Naming (Encoded names)


Encoded name is a universal format used to reference any object on the BACnet network. The BACnet encoded
name consists of the device object instance and the object ID. The encoded name can be used to reference third-
party, non-PXC.A devices, or object references external to the ALN.

Device Name Component Object Name Component*


BAC_ + DeviceObjectInstance_ ObjectTypeSpecifier_ + BACnetObjectInstance

BAC_15 _AI_10

*
BACnet supports many object types. In this example, the object is a point.

In this example:
● BAC identifies this as a BACnet device.
● 15 is the device object instance, unique throughout the network.
● AI is the BACnet object type specifier. It identifies the object as a physical Analog Input point.
● 10 is the BACnet object instance for this Analog Input object. The number is unique for this object type within
the BAC_15 device.

Unique BACnet Object Name


You can use the Unique BACnet Object Name to reference objects PXC.A networks only. These PXC.A devices
must all be on the same ALN. . This format cannot be used to reference objects in non-PXC.A devices.
NOTE: Legacy APOGEE devices are treated as 3rd party references.
Use the BACnet Object Name alone to reference an object when:
● The object is local to the PXC.A. For example, local automation station I/O and virtual objects.
● The object exists on a PXC.A on the same ALN.

Object type specifier


An object type specifier is either an abbreviation string or a numeric value equal to the BACnetObjectType
enumeration value defined in clause 21 of the BACnet standard.

BACnet Object Type Abbreviation Value BACnet Object Type Abbreviation Value

Analog Output AO 1 Device Object DV 8

Analog Input AI 0 Program Object PG 16

Analog Value AV 2 Command Object CO 7

Binary Output BO 4 Calendar CA 6

Binary Value BV 5 File FI 10

Binary Input BI 3 Trend Log TL 20

Multistate Output MO 14 Event Log EL 25

Multistate Input MI 13 Integer Value IV 45

Multistate Value MV 19 Positive Integer PI 48

Accumulator AC 23 Structured View SV 29

Event Enrollment EE 9 Loop LP 12

Notification Class NC 15 Pulse Converter PC 24

18 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Objects with named references


When referencing other BACnet objects, using the named reference is required. The named reference can be the
object name if it is part of the ALN, or use the encoded BACnet name. The following BACnet objects use named
references:
● L2SL - feedback object reference (proof point)
● Trend Log - monitoring referenced object
● Event Enrollment - monitoring referenced object

Object Type Reference(s) To BACnet Reference Format

Binary Output Feedback object BACnetObjectIdentifier

Command Commanded Objects Special handling - references embedded in a non-extensible


sequence (Action List).

Node List Entry Device Object BACnetObjectIdentifier

Schedule Scheduled Points, Command Object References Array of BACnetDeviceObjectPropertyReference

Trend Log Logged Object BACnetDeviceObjectPropertyReference

Subpoint member reference


Subpoint Member Reference, format Name:memberName is used to reference PXC.A objects that are part of other
applications. FLN devices and PPCL have multiple objects that are part of those applications. To access those
specific objects, use the Name:memberName to reference the object in any application.
Examples:

Rm1001:DAY.NGT The day/night point in TEC “RM1001”


Floor10:ALMCNT The alarm count in PXC.A controller “Floor10”
Prog10A:SECNDS The seconds counter in PPCL program “Prog10A”

Syntax Errors
Syntax errors include missing line numbers, missing parentheses, missing statement parentheses, and incorrectly
spelled statement names. Lines that include syntax errors are indicated by the line status S.
In the example below, line 20 has a syntax error (missing parenthesis).
10 ET LOCAL(MYPOINT)
20 E S SET(50, MYPOINT

Invalid Property Specifiers


Invalid property specifiers are lines of PPCL that contain a number or name that either does not exist in a target
object instance or is not accessible in PPCL programs. Lines that include invalid property specifiers are indicated
by the line status F.
In the example below, line 20 references a property that does not exist in analog input objects.
10 ET LOCAL(MYPOINT)
20 E F GETVAL(MYPOINT, ROOMTEMP, PrioArr, 8)

A6V10374898 2023-05-15 19 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

PPCL Program Design Guidelines


These guidelines will help you avoid common programming errors and write programs that run faster and are
easier to maintain. The PPCL guidelines are as follows:
● A program defined in one automation station is not recommended to be used to control objects in a different
automation station.
● Loop statements should not be closed across a network.
● Time-based commands (for example, LOOP, SAMPLE, TOD, WAIT, etc.) should be evaluated through every
pass of the program for proper operation.
● If program execution is interrupted (for example, during a power failure), the system always resumes
processing at the first line of the program. Therefore, the first line of the program should be executed through
every pass of the program.
– Routing commands (such as GOTO) should transfer program control to a sequentially higher line number.
This practice prevents programs from being caught in endless loops.
● On PXC.A controllers, jumping backwards in the program signals an end to the program cycle and restarts the
cycle time calculations.

Designing a Program that is Easy to Maintain


Use comment lines to document program logic.
Number program lines in multiples of ten (10, 20, 30) or more so that modifications can be made without
renumbering the program.
Use object names that are meaningful and describe the function for which they are being used. For example, an
object name monitoring outside air temperature could be named OATEMP.
A subroutine should only be used in situations where it is more beneficial to place a block of code in a subroutine
instead of using straight-line code.
Whenever possible, re-use blocks of program code in other devices that require the same control. Reusing
program code helps reduce testing time and minimizes the number of errors in program logic.

NOTE:
Since PPCL requires a unique database, you must modify the object names in the
reused program code to reflect the database for that device.

20 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Designing a Program that Operates Efficiently


● For APOGEE Compacts and Modular controllers, the number of FLN devices connected to the automation
station has the greatest influence on program code evaluation speed. This does not apply to PXC.A controllers.
● For APOGEE Compacts and Modular controllers, the number of program lines defined in a device affects the
line evaluation rate. This does not apply to PXC.A controllers.
● When using time-based commands, be aware that different versions of the same device may execute the same
program code at different rates.
For example, Version 3.0 controller boards are capable of evaluating an average of 350 lines of program code per
second. Automation stations using Version 4.0 controller boards are capable of evaluating an average of 500 lines
of program code per second.
● When multiple PPCL programs are installed in a automation station, try to create programs that are roughly the
same number of lines per program. Since the computer sequentially executes one line of each enabled
program, the program with the fewest lines will be executed more often the program with the most lines.
For example, an automation station contains two programs: one with 10 lines and the other with 50 lines. The
shorter program will be executed five times before the longer program is executed once.

Relational Operators
Both relational operators and logical operators compare two values and produce a result that is called a condition.
With relational operators, a related action is taken only if the condition is true. No action is taken if the condition is
false. For information on the order in which relational operators are evaluated, see the Order of Precedence
[➙ 41].
The following example describes the function of the relational operator.
Example
You are reading the newspaper one morning and find that it is going to be a beautiful day. You say to yourself, "If it
gets warmer than 80F, I will go to the beach. If not, then I will stay home."
You have just used a relational operator to determine your actions for the day. Your condition is the temperature. If
the temperature is greater than 80F (the condition is true), then you will go to the beach. If the temperature is 80F
or less (the condition is false), then you will stay home.
PPCL supports the following relational operators:
● Equal to (.EQ.)
● Greater than or equal to (.GE.)
● Greater than (.GT.)
● Less than or equal to (.LE.)
● Less than (.LT.)
● Not equal to (.NE.)

A6V10374898 2023-05-15 21 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Equal to (.EQ.)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
If (value1.EQ.value2) then...

value1,value2 These values are defined as analog or digital numbers, local variables, or object names.

Use
Compares two values to determine if the first value (value1) is equal to the second value (value2). The comparison
is true if value1 is equal to value2.
Example
500 C IF THE ROOM TEMP IS EQUAL TO 80,
510 C THEN SET THE SET OBJECT TO 70.
520 C
530 IF (RMTEMP.EQ.80.0) THEN RMSET = 70.0

Notes
Check the object format and number of decimal places used before comparing values with this relational operator.
Certain objects (primarily analog input) may contain precise values. When comparing a object value to a whole
number, the result will be false if the values are not identical.

Greater than (.GT.)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
If (value1.GT.value2) then...

value1,value2 These values are defined as analog or digital numbers, local variables, or object names.

Use
Compares two values to determine if the first value (value1) is greater than the second value (value2). The
comparison is true if value1 is equal to value2.
Example
250 C IF THE ROOM TEMP IS GREATER THAN
260 C 80, THEN SET THE SET OBJECT TO 70
270 C
280 IF (RMTEMP.GT.80.0) THEN RMSET = 70.0

22 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Greater than or equal to (.GE.)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
If (value1.GE.value2) then...

value1,value2 These values are defined as analog or digital numbers, local variables, or object names.

Use
Compares two values to determine if the first value (value1) is greater than or equal to the second value (value2).
The comparison is true if value1 is equal to value2.
Example
700 C IF THE ROOM TEMP IS GREATER THAN
710 C OR EQUAL TO 80, THEN SET THE SET
720 C OBJECT TO 70
730 C
740 IF (RMTEMP.GE.80.0) THEN RMSET = 70.0

A6V10374898 2023-05-15 23 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Less than (.LT.)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
If (value1.LT.value2) then...

value1,value2 These values are defined as analog or digital numbers, local variables, or object names.

Use
Compares two values to determine if the first value (value1) is less than the second value (value2). The
comparison is true if value1 is equal to value2.
Example
900 C IF THE ROOM TEMP IS LESS THAN 80,
910 C THEN SET THE SET OBJECT TO 70.
920 C
930 IF (RMTEMP.LT.80.0) THEN RMSET = 70.0

Less than or equal to (.LE.)


Syntax
If (value1.LE.value2) then...

value1,value2 These values are defined as analog or digital numbers, local variables, or object names.

Use
Compares two values to determine if the first value (value1) is less than or equal to the second value (value2). The
comparison is true if value1 is equal to value2.
Example
300 C IF THE ROOM TEMP IS LESS THAN OR
310 C EQUAL TO 80, THEN SET THE SET OBJECT
320 C TO 70
330 C
340 IF (RMTEMP.LE.80.0) THEN RMSET = 70.0

24 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Not equal to (.NE.)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
If (value1.NE.value2) then...

value1,value2 These values are defined as analog or digital numbers, local variables, or object names.

Use
Compares two values to determine if the first value (value1) is not equal to the second value (value2). The
comparison is true if value1 is equal to value2.
Example
600 C IF THE ROOM TEMP IS NOT EQUAL TO
610 C 80, THEN SET THE SET OBJECT TO 70.
620 C
630 IF (RMTEMP.NE.80.0) THEN RMSET = 70.0

A6V10374898 2023-05-15 25 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Logical Operators
Both relational operators and logical operators compare two values and produce a result that is called a
condition. With logical operators, there is a related action for each possible outcome of the condition. If the
condition is true, then a specific action is taken. If the condition is false, then an alternate action is performed. For
information on the order in which logical operators are evaluated, see the Order of Precedence [➙ 41].
The following example describes the function of the logical operator.
Example
You are reading the newspaper one morning and find that it is going to be a beautiful day. You say to yourself, "If it
gets warmer than 80F and I do not have to work, then I will go to the beach."
You have just used a logical operator to define two conditions. Your first condition is that the temperature must be
greater than 80F. Your second condition tests if you have to work. Both conditions must be true in order for you to
go to the beach. If one condition is not true, then you will not go to the beach.
PPCL supports the following logical operators:
● And (.AND.)
● Not And (.NAND.)
● Or (.OR.)
● Exclusive Or (.XOR.)

And (.AND.)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
If (cond1.AND.cond2) then...

cond1,cond2 Defines a condition that is the result of a comparison between two values.

Use
● Used to compare two logical conditions.
● If both conditions are true, the result of the comparison is true.
● A single statement can incorporate a combined total of 16 relational and logical operators.
See Table 1-1 for a comparison of conditions used with the .AND. logical operator:

Table1-1. Truth Table for .AND. Logical Operator.


Condition 1 False Condition 1 True

Condition 2 False Result is False Result is False

Condition 2 True Result is False True

Example
200 IF (TIME LT.19:00.AND.TIME.GT.5:00) THEN ON(LIGHTS)

26 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Not And (.NAND.)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Syntax
If (cond1.NAND.cond2) then...

cond1,cond2 Defines a condition that is the result of a comparison between two values.

Use
● Used to compare two logical conditions.
● If both conditions are true, then the result of the .NAND. statement is false.
● A single statement can incorporate a combined total of 16 relational and logical operators.
Example
00 IF (LDO1.EQ.ON.NAND.LDO2.EQ.ON) THEN ON(LDO3) ELSE OFF(LDO3)

LDO1 State LDO2 State LDO3 State NAND Result


OFF OFF ON TRUE

OFF ON ON TRUE

ON OFF ON TRUE

ON ON OFF FALSE

Notes
For APOGEE Firmware Revision 2.3 and earlier, AND statements should be used instead of NAND. In this case,
the above example would be written as:
100 IF (LDO1.EQ.ON.AND.LDO2.EQ.ON) THEN OFF(LDO3) ELSE ON(LDO3)

A6V10374898 2023-05-15 27 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Or (.OR.)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
If (cond1.OR.cond2) then...

cond1,cond2 Defines a condition that is the result of a comparison between two values.

Use
● Used to compare two logical conditions.
● If at least one of the conditions is true, the result of the statement is true.
● A single statement can incorporate a combined total of 16 relational and logical operators.
See Table 1-2 for a comparison of conditions used with the .OR. logical operator:

Table 1-2. Truth Table for .OR. Logical Operator.


Condition 1 False Condition 1 True

Condition 2 False Result is False Results is True

Condition 2 True Result is True Result is True

Example
200 IF (TIME.LT.5:00.OR.TIME.GT.17:00) THEN ON(LIGHTS)

28 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Exclusive Or (.XOR.)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
If (cond1.XOR.cond2) then...

cond1,cond2 Defines a condition that is the result of a comparison between two values.

Use
● Used to compare two logical conditions.
● If cond1 is true and cond2 is false, the result of the statement is true. If cond1 is false and cond2 is true, this
statement is also true.
● A single statement can incorporate a combined total of 16 relational and logical operators.
See Table 1-3 for a comparison of conditions used with the .XOR. logical operator:

Table1-3. Truth Table for .XOR. Logical Operator.


Condition 1 False Condition 1 True

Condition 2 False Result is False Result is True

Condition 2 True Result is True Result is False

Example
200 IF (PMP1.EQ.ON.XOR.PMP2.EQ.ON) THEN NORMAL(PMPALM)

A6V10374898 2023-05-15 29 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Arithmetic Operators
Arithmetic operators are mathematic functions that are performed on two or more numbers (operands). When used
in PPCL, the result of a calculation is determined and assigned to a point name or local variable for future
reference. For information on the order in which arithmetic operators are evaluated, see the Order of Precedence
[➙ 41].

NOTE:
A maximum of 15 arithmetic operators can be used in one PPCL program line.

PPCL supports the following arithmetic operators:


● Addition (+)
● Assignment (=)
● Division (/)
● Multiplication (*)
● Subtraction (-)

Addition
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
pt1 = value1 + value2

pt1 A point name or local variable that receives the value of the calculation.
value1, value2 Point names, local variables, expressions, or numbers that are used in the calculation.

Use
Adds two or more values and stores the sum in a defined location as pt1.
Example
560 COUNT = COUNT + 1.0

30 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Assignment
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
pt1 = (value1)

pt1 The point name or local variable that receives the value from value1.

value1 A point name, local variable, expression, or number that is assigned to pt1.

Use
Assigns the value of value1 to the value of pt1.
Example
COUNT = COUNT + 1.0

Notes
Do not to assign values to reserved words. See the Appendix A - Reserved Word List.
Example
500 C = OATEMP
The code in this example would fail due to the “C” being used like a variable, when instead the automation station
interprets the line as a comment.

Division
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
pt1 = value1 / value2

pt1 A point name or local variable that receives the value of the calculation.
value1 A point name, local variable, expression, or number used in the calculation. In PPCL, value1 represents the numerator.
Value2 A point name, local variable, expression or number used in the calculation. In PPCL, value2 represents the denominator.

Use
Divides two values (value1 by value2) and stores the quotient in a defined location (pt1).
Example
890 AVERAG = TOTAL / 5.0

A6V10374898 2023-05-15 31 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Multiplication
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
pt1 = value1 * value2

pt1 A point name or local variable that receives the value of the calculation.
value1, value2 Point names, local variables, expressions, or numbers used in the calculation.

Use
Multiplies two or more values (value1 and value2) and stores the product in a defined location (pt1).
Example
300 SETPT = TEMP * 0.00438

Subtraction
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
pt1 = value1 - value2

pt1 A point name or local variable that receives the value of the calculation.
value1, value2 Point names, local variables, expressions, or numbers that are used in the calculation.

Use
Subtracts a value (value2) from another value (value1) and stores the difference in a defined location (pt1).
Example
300 COUNT = COUNT - 1.0

32 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Arithmetic Functions
Arithmetic functions perform mathematical calculations on a number (value). When used in PPCL, the result of a
calculation is usually assigned to a point name for future reference. For information on the order in which arithmetic
functions are evaluated, see the Order of Precedence [➙ 41].
PPCL supports the following arithmetic functions:
● Arc-Tangent (ATN)
● Complement (COM)
● Cosine (COS)
● Natural Antilog (EXP)
● Natural Log (LOG)
● Root (.ROOT.)
● Sine (SIN)
● Square Root (SQRT)
● Tangent (TAN)

Arc-Tangent (ATN)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
pt1 = ATN(value1)

pt1 A point name or local variable that receives the value of the calculation.
value1 A point name, local variable, or number from which the value of the arc-tangent is calculated.

Use
A trigonometric function that calculates the arc-tangent of a value (value1). The result of the calculation is then
stored in a defined location (pt1).
All values used with this function are expressed in degrees.
Example
500 THETA = ATN(VALUE1)

A6V10374898 2023-05-15 33 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Complement (COM)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
pt1 = COM(value1)

pt1 A point name or local variable that receives the value of the calculation.

value1 A point name, local variable, or number from which the value of the complement is calculated.

Use
A function that calculates a one's complement value for a point (value1). The one's complement function converts
digital values (0 or 1) to their opposite values. The result of the calculation is then stored in a defined location (pt1).
Example
500 LLSTAT = COM(PROF01)

Cosine (COS)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
pt1 = COS(value1)

pt1 A point name or local variable that receives the value of the calculation.
value1 A point name, local variable, or number from which the value of the cosine is calculated.

Use
A trigonometric function that calculates the cosine of a value (value1). The result of the calculation is then stored in
a defined location (pt1).
All values used with this function are expressed in degrees.
Example
700 C
701 C THIS FORMULA COMPUTES REAL POWER
702 C WHEN VOLTS, AMPS, AND PHASE ANGLE
703 C ARE KNOWN.
704 C
706 PWR = V * I * COS(THETA)

34 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Natural Antilog (EXP)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
pt1 = EXP(value1)

pt1 A point name or local variable that receives the value of the calculation.
value1 A point name, local variable, or number from which the value of the antilog is calculated.

Use
Calculates the natural antilog of a point (value1) and stores the result of the calculation in a defined location (pt1).
Example
860 NATANT = EXP(VALUE1)

Natural Log (LOG)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
pt1 = LOG(value1)

pt1 A point name or local variable that receives the value of the calculation.
value1 A point name, local variable, or number from which the value of the log is calculated.

Use
Calculates the natural log of a point (value1) and stores the result of the calculation in a defined location (pt1).
Example
200 ENTH = LOG(VALUE1)

A6V10374898 2023-05-15 35 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Root (.ROOT.)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
pt1 = (value1.ROOT.value2)

pt1 A point name or local variable that receives the value of the calculation.
value1 A point name, local variable, or number from which the value of the root is calculated.

Use
This function calculates the root of the defined points by raising the value of value1to the inverse power of value2.
The result of the calculation is then stored in a defined location (pt1).
The following example demonstrates the same values defined as a line of PPCL program code:
Example
310 RVAL = (TEMP.ROOT.3.0)

Square Root (SQRT)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
pt1 = SQRT(value1)

pt1 A point name or local variable that receives the value of the calculation.

value1 A point name, local variable, or number from which the value of the square root is calculated.

Use
Derives the square root of a value. The result of the calculation is then stored in a defined location (pt1).
Example
180 SRPT1 = SQRT(PT1)

36 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Sine (SIN)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
pt1 = SIN(value1)

pt1 A point name or local variable that receives the value of the calculation.
value1 A point name, local variable, or number from which the value of the sine is calculated.

Use
A trigonometric function that derives the sine of a value (value1). The result of the calculation is then stored in a
defined location (pt1).
All values used with this function are expressed in degrees.
Example
180 VAR = SIN(THETA)

Tangent (TAN)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
pt1 = TAN(value1)

pt1 A point name or local variable that receives the value of the calculation.
value1 A point name, local variable, or number from which the value of the tangent is calculated.

Use
A trigonometric function that calculates the tangent of a value (value1). The result of the calculation is then stored
in a defined location (pt1).
All values used with this function are expressed in degrees.
Example
930 TANPT1 = TAN(PT1)

A6V10374898 2023-05-15 37 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Special Functions
Special functions are used to access a specific value that is unique to a point. The value of the point can then be
tested or assigned to other points. Since special functions are maintained by the system, they cannot be manually
commanded to a different value. For information on the order in which special functions are evaluated, see the
Order of Precedence [➙ 41].

NOTE:
Special functions cannot be used over the network.

PPCL supports the following special functions:


● Alarm priority (ALMPRI)
● Totalized value (TOTAL)

38 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Alarm priority (ALMPRI)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
ALMPRI(pt1)

pt1 A point name for which the current alarm priority is taken.

Use
Accesses the alarm priority level of a point defined in an enhanced alarming control strategy. The value of ALMPRI
can range from 1 through 6. Besides testing ALMPRI for a specific value, you can also assign the value of ALMPRI
to another point.
Example 1
230 C
232 C THIS LINE TESTS IF THE POINT CALLED
234 C RMTEMP IS AT ALARM PRIORITY LEVEL 1.
236 C
240 IF (ALMPRI(RMTEMP).EQ.1) THEN ON (OPBELL)
Example 2
330 C
332 C THIS LINE ASSIGNS THE ALARM PRIORITY LEVEL
334 C OF RMTEMP TO THE POINT CALLED TMPPRI.
336 C
340 TMPPRI = ALMPRI(RMTEMP)

Notes
ALMPRI must reside in the same automation station as the point on which the function is being performed.
For BACnet firmware, the ALMPRI value corresponds to a priority in the Notification class for the point’s current
alarm state. Table 1-4 outlines the BACnet Notification classes and shows how they relate to the APOGEE
ALMPRI values.

Table 1-4. APOGEE to BACnet Notification Class Reference.


ALMPRI Value BACnet Notification Class
1 0-31
2 32-63
3 64-95
4 96-127
5 128-191
6 192-255

A6V10374898 2023-05-15 39 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Totalized value (TOTAL)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
TOTAL(pt1)

pt1 A point name for which the current alarm priority is taken.

Use
Allows you to access the totalized value of a point.
Example 1
800 C
801 C THIS LINE COMPARES THE TOTALIZED VALUE OF FAN1
802 C TO DETERMINE IF IT IS GREATER THAN 500.
803 C IF THE CONDITION IS TRUE, FAN1 WILL BE PLACED
804 C INTO ALARM.
805 C
810 IF(TOTAL(FAN1).GT.500.0)THEN ALARM(FAN1)
Example 2
800 C
801 C THIS LINE ASSIGNS THE TOTALIZED VALUE
802 C OF FAN1 TO THE POINT CALLED FANRUN.
803 C
810 FANRUN = TOTAL(FAN1)

Notes
TOTAL must reside in the same automation station as the point on which the function is being performed.
See also the INITTO topic.

40 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Order of Precedence
The order of precedence is the order in which operators (relational, logical, mathematical, and special function) are
evaluated.
Operators that have a higher precedence are evaluated before operators that have a lower precedence.
If all the operators in the formula have equivalent precedence levels, then the operators are evaluated from left to
right.
The following example illustrates how precedence levels are applied to mathematical operators.
Example 1
10 - 5 + 2 * 3 = x
This equation is solved as follows:
● Multiplication has the highest precedence level in this equation. The first step in evaluating the equation is as
follows:
2 * 3 = 6
After the first level of operators has been evaluated, the equation appears as follows:
10 - 5 + 6 = x
● Since the remaining operators have the same precedence level, operators are now evaluated from left to right.
The last step in evaluating the equation is as follows:
10 - 5 = 5
5 + 6 = 11
● The solution to this equation is 11.
See Table 1-5 for a complete list of precedence levels for PPCL operators.
Statements containing relational and logical operators are also assigned a precedence level.
Note that in problems comparing values using relational operators (.EQ. and .NE.), the result of the comparison
can change the output of the statement.
Example 2
If (value1 .EQ. value2 .AND. value1 .NE. value3) then...
This equation is solved as follows:
● The relational operators (.EQ. and .NE.) have the highest precedence level in the formula. Since these two
operators have the same precedence level, they are evaluated from left to right.
In this example, assume that both comparisons (condition1 and condition2) are true.
value1 .EQ. value2 (condition1 = true)
value1 .NE. value3 (condition2 = true)
● After the first level of operators has been evaluated, the equation now looks like the following:
If (condition1 .AND. condition2) then...
● The logical operator .AND. is then evaluated.
Since .AND. requires both conditions to be true, the solution to this problem will also be true.

A6V10374898 2023-05-15 41 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Changing Precedence Levels with Parentheses


Parentheses can be used to override the normal order of precedence. Placing parentheses around specific values
or operations gives the information within the set of parentheses the highest order of precedence. If all the
operators within in the parentheses have equivalent precedence levels, then the operators are evaluated from left
to right.
When the computer evaluates multiple pairs of parentheses, each pair is evaluated according to how it is
positioned in the formula. Multiple parentheses are evaluated as follows:
● For a pair of parentheses defined within another pair of parentheses, the computer always evaluates the
innermost set first.
● For parentheses defined as individual pairs, each pair is evaluated from left to right.
The following example illustrates how parentheses change the way the computer evaluates equations.
Example
10 - 5 + 2 * 3 = x
This equation uses two levels of precedence: multiplication and addition/subtraction. Following the order of
precedence rules, the solution to this equation is 11.
When parentheses are inserted, the same equation produces a different solution.
(10 - 5 + 2) * 3 = x
The equation is now solved as follows:
● Parentheses give the information within the set of parentheses the highest order of precedence. The operators
within the parentheses are evaluated from left to right because they all have the same precedence. The first
step in evaluating the equation is as follows:
(10 - 5 + 2) = 7
After the operators within parentheses have been evaluated, the equation appears as follows:
7 * 3 = 21
● The standard precedence rules now apply to the remaining operators. With only one operation left, the
multiplication operator is evaluated and produces a solution of 21.

Table 1-5. Order of Precedence for PPCL Operators.


Precedence Level Command Syntax

1 (Highest) Parentheses (expression or value)

Alarm priority ALMPRI(pt1)

Arc-tangent ATN(value1)

Complement COM(value1)

Cosine COS(value1)

Natural antilog EXP(value1)

Natural log LOG(value1)

Sine SIN(value1)

2 Square root SORT(value1)

Tangent TAN(value1)

Totalized value TOTAL(pt1)

3 Root (value1.ROOT.value2)

Multiplication value1 * value2


4 Division value1 / value2

42 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Table 1-5. Order of Precedence for PPCL Operators.


Addition value1 + value2
5 Subtraction value1 - value2

Equal to .EQ.

Not equal to .NE.

Greater than .GT.

Greater than or equal to .GE.


6 Less than .LT.

Less than or equal to .LE.

And .AND.
7 Not and .NAND.

Or .OR.
8 (Lowest) Exclusive Or .XOR.

A6V10374898 2023-05-15 43 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Resident Points
Resident points provide time-based and system status information. These points are used to determine the time,
date, month, and day of the month, or to monitor alarms, modes of operation (DAY or NIGHT), and communication
between nodes.
The value of a resident point can be tested or assigned to other points.
Resident points are predefined and maintained by the device. Since each device maintains its own set of resident
points, a resident point cannot be used across the network.

NOTE:
Do not use resident points in TABLE commands.

PPCL supports the following resident points:


● Alarm count (ALMCNT)
● Battery status ($BATT)
● Decimal time (CRTIME)
● Day (DAY)
● Day of the month (DAYOFM)
● Communications link (LINK)
● Month (MONTH)
● Peak Demand Limiting point ($PDL)
● Seconds counter (SECNDS)
● Seconds counters (SECND1 through SECND7)
● Military time (TIME)

44 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Alarm count (ALMCNT)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
ALMCNT

Use
The value of ALMCNT represents the number of points within an automation station or unitary controller that are
currently in the ALARM state.
When a point enters the ALARM state, the computer adds one (1) to the value of ALMCNT. When a point returns to
the NORMAL state, the computer subtracts one (1) from the value of ALMCNT.
Example
340 IF (ALMCNT.GT.0) THEN ON(ALARM7)

Notes
● A point must be defined as alarmable in order to be counted when that point enters the ALARM state.
● In all revisions of automation station firmware, the ALMCNT counter works the same with enhanced alarms as
it does with regular alarms.
● The level of alarm does not affect ALMCNT. In other words, the counter does not increment again when an
enhanced alarm point changes from one alarm level to another.
● If a point is disabled (*PDSB*) or operator disabled (*ODSB*), ALMCNT will still increment and decrement
accordingly.
See also the ENALM and DISALM topics.

A6V10374898 2023-05-15 45 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Alarm count 2 (ALMCT2)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Syntax
ALMCT2

Use
This resident point is similar to the ALMCNT point. ALMCT2 specifies if the second alarm counter should be
incremented when a point enters the ALARM state.
When a point enters the ALARM state, the computer adds one (1) to both the value of ALMCNT and ALMCT2.
When a point returns to the NORMAL state, the computer subtracts one (1) from both values.
Example
300 C IF THE SECOND LEVEL ALARM COUNTER BECOMES
310 C GREATER THAN 5, COMMAND ON ALARM8
320 C
330 IF (ALMCT2.GT.5) THEN ON(ALARM8)

Notes
● A point must be defined as alarmable and enabled for ALMCT2 in order to be counted when that point enters
the ALARM state.*
● In all revisions of field panel firmware, the ALMCNT and ALMCT2 counters work the same with enhanced
alarms as with regular alarms.
● The level of alarm does not affect ALMCNT and ALMCT2. In other words, these counters do not increment
again when an enhanced alarm point changes from one alarm level to another.
*For pre-APOGEE, ALMCT2 can only be used with digital points.
See also the ALMCNT, ENALM [➙ 129], and DISALM [➙ 123] topics.

46 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Battery condition ($BATT)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Syntax
$BATT

Use
This resident point is used with automation stations that can monitor the strength of their backup battery. Either a
numeric value or the backup battery status indicators indicate the current status of $BATT.
$BATT numeric values are 0, 50, or 100.
● A $BATT value of 0 indicates the battery has discharged and must be replaced.
● A $BATT value of 50 indicates the battery is about to discharge and should be replaced to prevent any loss of
data.
● A $BATT value of 100 indicates the battery does not need to be replaced.
$BATT status indicators are LOW, DEAD, or OK.
● If $BATT status is LOW or DEAD, then the battery has discharged and must be replaced.
● If $BATT status is OK, then the battery does not need to be replaced.
Example 1
200 IF ($BATT.EQ.0) THEN ALARM(P26BAT)
Example 2
210 IF ($BATT.EQ.DEAD) THEN ALARM(P26BAT)
See also the LOW, DEAD, and OK topics.

Notes
The PPCL runtime for PXC.A controllers considers $BATT, DEAD, LOW, and OK to be unresolved names.

A6V10374898 2023-05-15 47 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Communications link (LINK)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
LINK

Use
This resident point indicates the condition of communications.
Depending on the status of the communications link, a point contains the value 0 or 1.
● If the LINK value is 0, the node where the LINK point resides is not communicating with the network.
● If the LINK value is 1, the node where the LINK point resides is actively communicating with the network.
Example
300 IF (LINK.EQ.0) THEN ON(ALARM1)
See also the Node Number (NODEn) topic.

Day (DAY)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
DAY

Use
This resident point specifies the current day of the week. The values used for the DAY point are as follows:

Number Day of the Week


1 Monday

2 Tuesday

3 Wednesday

4 Thursday

5 Friday

6 Saturday

7 Sunday

Example
300 IF (DAY.EQ.1) THEN TOTRAN = 0

Notes
These values are not related to the modes used in the TODMOD statement.

48 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Day of the month (DAYOFM)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
DAYOFM

Use
This resident point specifies a particular day of any month.
Valid values for DAYOFM are 1 through 31. The value corresponds to the numerical calendar day of a month.
Example
160 C THIS SECTION OF CODE DETERMINES IF
162 C IT IS THE FIRST DAY OF THE MONTH.
164 C IF SO, SET TOTMON TO 0.
166 C
180 IF (DAYOFM.EQ.1) THEN TOTMON = 0

Notes
This point is helpful when you have to perform certain operations on a specific day (for example, generating a
report on the first day in the month).

A6V10374898 2023-05-15 49 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Decimal time (CRTIME)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
CRTIME

Use
This resident point maintains the current time and stores the value in a decimal format. The following examples
show how CRTIME stores values:
7:15 a.m. = 7.25
7:30 p.m. = 19.50
The values for this point can range from 0.00 to 23.999721.
Example
500 C
501 C THIS CODE DEFINES A TIME PERIOD
502 C FROM 6:45 A.M. TO 5:30 P.M. FOR
503 C SFAN TO OPERATE.
504 C
510 IF (CRTIME.GE.6.75.AND.CRTIME.LE.17.50) THEN ON(SFAN)ELSE OFF(SFAN)
CRTIME can also be used to assign the current value of time to a virtual LAO type point which allows you to read
the current time on a graphic, point log, etc. For example:
100 VTIME = CRTIME

Notes
CRTIME is updated every second.
It is not recommended to check for exact time as the time of execution could create inconsistent results.

50 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Military time (TIME)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
TIME

Use
This resident point maintains the current time and stores the value in military time.
The TIME value can contain a value from 0:00 to 23:59. The following examples show how TIME stores values
follows:
7:15 a.m. = 7:15
7:30 p.m. = 19:30
Example
500 C
501 C THIS CODE DEFINES A TIME PERIOD
502 C FROM 6:45 A.M. TO 5:30 P.M. FOR
503 C SFAN TO OPERATE.
502 C
510 IF(TIME.GE.6:45.AND.TIME.LE.17:30)THEN ON(SFAN)ELSE OFF(SFAN)

Notes
The time is updated every second. TIME cannot be used to assign a value to a virtual point since its value is not in
a standard decimal form. CRTIME should be used for this purpose. TIME can be used in PPCL for comparison in
the IF/THEN/ELSE statement.

A6V10374898 2023-05-15 51 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Month (MONTH)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
MONTH

Use
This resident point specifies the current month. The values used for the MONTH point are as follows:

Number Month
1 January

2 February

3 March

4 April

5 May

6 June

7 July

8 August

9 September

10 October

11 November

12 December

Example
950 IF (MONTH.GE.4.AND.MONTH.LE.10) THEN SEASON = 1 ELSE SEASON = 0

52 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

PDL monitor ($PDL)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
$PDL

Use
This resident point takes on the current value of the demand prediction for each calculated interval made by the
PDLMTR statement. The point can be assigned to a virtual LAO point, displayed, and trended.
Example
350 KWH = $PDL

Seconds counter (SECNDS)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
SECNDS

Use
This resident point counts real time seconds and can be used as a timer. The computer adds one (1) to the
SECNDS variable for every one second of real time that passes.
● The initial value of the SECNDS point is set by a PPCL command.
● The SECNDS point can be set to a maximum value of 9,999.
● SECNDS points do not roll over. The present value will stay at 9,999 until it is written to a value less than 9,999.
Example
890 IF (SFAN.NE.PRFON) THEN SECNDS = 0

Notes
For APOGEE automation stations, each program has a unique SECNDS point. This point can also be viewed in the
interface using the program name, system delimiter (:)SECNDS format.
SECNDS are also local variables and can only be seen locally in the device, not over BACnet. If necessary, they
can be linked to BACnet AV, BV, or MSV to be read over the network.

A6V10374898 2023-05-15 53 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Seconds counters (SECND1 through SECND7)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
SECNDn

n The number that describes which SECNDn point is referenced.


- Valid values for SECNDn are 1 through 7.

Use
These seven resident points count real time seconds and can be used as timers. The computer adds one (1) to the
SECNDn variable for every one second of real time that passes.
● The value of a SECNDn point can only be set by a PPCL command.
● The maximum value a SECNDn point can be set to is 9,999.
Example
600 IF(SECND1.GT.15) THEN ON(RF) ELSE OFF(RF)

Notes
For APOGEE automation stations, each program has unique SECNDSn points. These points can also be viewed in
the interface using the program name, system delimiter (:)SECNDSn format.

54 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Local Variables
Local variables are storage locations for data. Local variables function like virtual points except that they require
less memory, are predefined, and cannot be directly displayed.
● Local variables can contain analog or digital values.
● Each set of local variables is designed for a specific task.
● Local variables are divided into two categories: subroutine and global storage variables.
● Local variables are only local to the device through the web interface. They are not available over BACnet.
● Local variables cannot be read by other devices on the BACnet network and cannot be used in their
applications.
● Local points using the Local statements can be seen in the PXC.A controller web interface.
● To make a point network-visible, it must be created outside of the PPCL program (BACnet AV, BV, or MSV).
Local variables in PPCL can be bound to these BACnet virtual points and in turn can be ready by other devices
over the network.
PPCL supports the following local variables:
● $ARG1 through $ARG15, which are used for subroutines.
● $LOC1 through $LOC15, which are used to store the results of calculations.
● LOCAL (the definition of user-defined local variables in APOGEE automation stations is discussed in Chapter 3
– Syntax.
For APOGEE automation stations, each program has unique $ARG and $LOC variables. $LOC points can also be
viewed and commanded through the interface using the program name, system delimiter (:), local variable name
format.

A6V10374898 2023-05-15 55 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

$ARG1 through $ARG15


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
$ARGn

n The number that describes what $ARGn point is referenced.


- Valid values are 1 through 15.

Use
A $ARGn variable represents an actual point name used in a subroutine. Instead of defining actual point names in
a subroutine, values are transferred to $ARGn variables. The $ARGn variables represent their corresponding
points as functions and calculations are performed in the subroutine.
When the value of a $ARGn variable changes, the value of the corresponding point is also updated.
When a $ARGn variable is encountered in the subroutine section of the program, the computer checks the calling
GOSUB command for an available point name.
Example
1000 GOSUB 2000 OATEMP, RMTEMP, SETPT
...
2000 $ARG1 = $ARG1 + 1
2010 $ARG2 = $ARG2 + 1
2020 $ARG3 = $ARG3 + 1
The program branches to line number 2000. When $ARG1 is encountered in line 2000, the computer assigns the
value of the first point name (OATEMP) to $ARG1. When the computer encounters $ARG2, it assigns the value of
the next point defined in the GOSUB command (RMTEMP).
In this example, the values would be assigned as follows:
The value of OATEMP = $ARG1
The value of RMTEMP = $ARG2
The value of SETPT = $ARG3

Notes
$ARGn points can only be used in subroutines.
See also the Using GOSUB [➙ 79] topic.

56 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

$LOC1 through $LOC15


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
$LOCn

n The number that describes what $LOCn point is referenced.


- Valid values are 1 through 15.

Use
These points are used to store the results of calculations.
● $LOCn variables can store an analog or digital value.
● $LOCn variables can be used throughout the program.
● There is no limit to the value that can be stored in a $LOC point.
Example 1
200 MIN ($LOC1,PT1,PT2,PT3)
Example 2
100 $LOC7 = (50/VALUE1+10.0) * 2.0

Notes
Local points in APOGEE automation stations can store values greater than 32,767 (up to 10,000,000)
See also the LOCAL Variables [➙ 55] topic.

A6V10374898 2023-05-15 57 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

At (@) Priority Status Indicators


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ●

At (@) priority indicators are used to monitor the priority status on points defined in a device. They can also be
used to test if a point is at a specific priority or to command a point to a specific priority.
BACnet command priority specifiers will be formatted as @PRI[prio], where prio is a value between 1 and 16. For
example:
10 SET(@PRI11, 73, SETPT)
.
.
50 RELEASE(@PRI11, SETPT)
Conversion from Apogee priority specifiers to BACnet priority specifiers are automated by database migration tools.

Testing Point Priorities


Programs sometimes fail because a command outside the operation being performed interferes with a point inside
the operation. Testing the priority of a point helps prevent this from happening.
If numerous tasks are being performed in the program, testing point priority levels is one method of preventing
those tasks from interfering with each other.
Example
200 IF (SFAN.EQ.@EMER) THEN ON(@EMER,RFAN)
This statement tests SFAN to determine if it's at EMER priority before turning ON RFAN. If SFAN is at EMER
priority, RFAN will be command ON.

58 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Commanding Points to a Specific Priority


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Points can be commanded to a specific priority, as well as a specific status, by placing the at (@) symbol before
the priority syntax (see Table 1-8).

Table 1-8. System Variables for Priority Monitoring.


Priority Priority syntax

Operator @OPER

Smoke @SMOKE

Emergency @EMER

Peak Demand Limiting @PDL

No priority (PPCL) @NONE

Relinquish Default @PRIO17

Example
120 OFF(@OPER,SFAN,RFAN)
When this command is executed, SFAN and RFAN are shut OFF and their priorities are changed to OPER. An
operator interface command (such as OIP) is not needed to change the point priority.

Notes
There is no warm start on PXC.A. Only Priority 8 and Relinquish Default values are stored to memory and used in
case of an unexpected power loss.

A6V10374898 2023-05-15 59 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Operator (@OPER)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
@OPER

Use
This command identifies the operator priority level indicator. The @OPER command is typically used in one of the
following situations:
● To test if a point is currently at operator priority, an IF/THEN/ELSE statement would look like the following:
300 IF (SFAN.EQ.@OPER) THEN ON(HORN)
● To command a point to operator priority, an example of program code might look like the following:
500 ON(@OPER,SFAN)
● To release a point from operator to PPCL priority, an example of program code might look like the following:
RELEAS(@OPER,SFAN)

Notes
● For APOGEE and pre-APOGEE firmware, the @ priority indicator must be used to release points in any priority
to NONE.
● For BACnet firmware, the automation station releases the slot corresponding to OPER in the Command Priority
Table. The value of the point is set based on the highest slot in the Command Priority Array; relinquish default
is used if the Command Priority Array is now empty.

60 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Smoke (@SMOKE)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
@SMOKE

Use
This command identifies the smoke priority level indicator. The @SMOKE command is typically used in one of the
following situations:
● To test if a point is currently at smoke priority, an IF/THEN/ELSE statement would look like the following:
300 IF (SFAN.EQ.@SMOKE) THEN ON(HORN)
● To release a point in the device from smoke to PPCL priority, an example of program code might look like the
following:
700 RELEAS(@SMOKE,SFAN)

NOTE:
Using the @ priority indicator in this manner will not release the point if it has a
higher priority (OPER).

NOTES
● For APOGEE and pre-APOGEE firmware, the @ priority indicator must be used to release points from SMOKE,
EMER, and PDL to NONE priority.
● For BACnet firmware, the automation station releases the slot corresponding to SMOKE in the Command
Priority Table. The value of the point is set based on the highest slot in the Command Priority Array; relinquish
default is used if the Command Priority Array is now empty.

A6V10374898 2023-05-15 61 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Emergency (@EMER)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
@EMER

Use
This command identifies the emergency priority level indicator. The @EMER command is typically used in one of
the following situations:
● To test if a point is currently at emergency priority, an IF/THEN/ELSE statement would look like the following:
300 IF (SFAN.EQ.@EMER) THEN ON(HORN)
● To command a point at emergency priority, the program code might look like the following:
500 ON(@EMER,SFAN)
● To release a point in the device from emergency to PPCL priority, an example of program code might look like
the following:
700 RELEAS(@EMER,SFAN)

NOTE:
Using the @ priority indicator in this manner will not release the point if it has a
higher priority (SMOKE or OPER).

Notes
● For APOGEE and pre-APOGEE firmware, if the @ priority indicator is not used, the automation station will
release points from PDL or EMER priority to NONE.
● For BACnet firmware, the automation station releases the slot corresponding to EMER in the Command Priority
Table. The value of the point is set based on the highest slot in the Command Priority Array; relinquish default
is used if the Command Priority Array is now empty.

62 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Peak Demand Limiting (@PDL)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
@PDL

Use
This command identifies the peak demand limiting priority level indicator. The @PDL command is typically used in
one of the following situations:
● To test if a point is currently at PDL priority, an IF/THEN/ELSE statement would look like the following:
300 IF (SFAN.EQ.@PDL) THEN ON(HORN)
● To release a point in the device from PDL to PPCL priority, an example of program code might look like the
following:
700 RELEAS (@PDL,SFAN)

NOTE:
Using the @ priority indicator in this manner will not release the point if it has a
higher priority (EMER, SMOKE, and OPER.

Notes
● It is not recommended to release points from PDL priority unless absolutely necessary.
● For APOGEE and pre-APOGEE firmware, if the @ priority indicator is not used, the automation station will
release points from PDL to NONE.
● For BACnet firmware, the automation station releases the slot corresponding to PDL in the Command Priority
Table. The value of the point is set based on the highest slot in the Command Priority Array; relinquish default
is used if the Command Priority Array is now empty.

A6V10374898 2023-05-15 63 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

PPCL (@NONE)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
@NONE

Use
This command identifies the PPCL priority level indicator. The @NONE command can be used to test if a point
currently is at PPCL priority.
Example
The IF/THEN/ELSE statement would look like the following:
300 IF (SFAN.EQ.@NONE) THEN OFF(HORN)

Notes
● For BACnet firmware, the automation station uses the slot corresponding to the program's "Priority for Writing".
The value of the point is set based on the highest slot in the Command Priority Array; relinquish default is used
if the Command Priority Array is now empty.

Pre-APOGEE Firmware
The RELEAS command quickly changes the priority of a point or group of points. With pre-APOGEE firmware, you
have two options for changing point priorities with the RELEAS command:
● Release the point to NONE priority.
● Release the point from a specific priority to NONE priority.

Releasing the Point to NONE Priority


The first option allows you to release points to the NONE priority. In the following example, the points FAN1 and
FAN2 are released to NONE priority.
160 RELEAS(FAN1,FAN2)

64 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Releasing the Point from a Specific Priority to NONE Priority


The second option allows you to release points at a specific priority to the NONE priority. In the following example,
any of the points included in the RELEAS command that have a priority of EMER or lower, will be released to the
NONE priority:
300 RELEAS(@EMER,FAN1,FAN2)
Note that if the point specified is at an equal or lower priority than EMER, it will also be released to NONE. In other
words:

If the point specified is at this priority… Using this pre-APOGEE command… Changes the priority to…
OPER RELEAS(@OPER … ) NONE

SMOKE NONE

EMER NONE

PDL NONE

OPER RELEAS(@SMOKE … ) OPER


or
RELEASE(@EMER … )

SMOKE NONE

EMER NONE

PDL NONE

OPER RELEAS(@PDL … ) OPER

SMOKE SMOKE

EMER EMER

PDL NONE

For a complete description of the RELEAS command, see the RELEAS [➙ 163] topic.

A6V10374898 2023-05-15 65 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Object Status Indicators


Object status indicators are used to monitor the current status of objects defined in the device. Object status
indicators can be used to test if a object is at a specific status, and then act accordingly. Firmware uses syntactical
words (ON, OFF, AUTO...) to indicate the status of a object.

NOTE:
Since these objects are related specifically to the functions of the device, object
status indicators cannot be used over the network.

Failed Object Values


If an object in a PPCL statement fails, the statement continues to use the object's last known value. For example:
MIN(RMMIN,RM1TMP,RM2TMP,RM3TMP)
If RM1TMP is a physical object that fails when it has the lowest value of the three RMTMP objects, the MIN
statement will set RMMIN to the last known value for RM1TMP.

Determining Object Status


Object status indicators can be used with IF/THEN/ELSE commands to determine the status of an object. When a
object is at a specific status, a certain action is taken
Example
This example uses an L2SL object to explain the methodology of testing object status. The object name is LIGHTS
and its function is to control the lights for a large conference room.
The configuration for an L2SL object uses two addresses:
● The first address controls an ON/OFF switch.
● The second address monitors a proof condition. Use of this address is optional.
To verify that the lights are ON in the conference room, you could use the following test:
740 IF (LIGHTS.EQ.ON) THEN ...
When this line of code is executed, the status of LIGHTS is checked to see if it is ON. If the object status equals
ON, then a particular action occurs. If the object status does not equal ON, an alternate action occurs.

66 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Commanding and Evaluating the HAND Status


Some devices have an optional HAND-OFF-AUTO (HOA) manual override switch that enables you to control
equipment at the automation station.

CAUTION
The HOA override switch is not to be used as a safety device when performing
maintenance. If the HOA switch is used as a safety device, it can result in
serious injury to personnel or cause damage to property or equipment. Always
follow safety procedures when performing maintenance.

The HAND status identifies a point being controlled by an HOA manual override switch and not the system. The
HOA override switch is only method you can use to control whether a point is placed into or taken out of HAND
status.
● Points cannot be commanded to HAND by using an operator interface.
● Points cannot be commanded to or removed from HAND status by using program statements.
Before attempting to command points that contain HOA override switches, check the status of the controller to
ensure that the point can be commanded.
The HAND status appears as part of the overall point status. This status indicates that an HOA override switch is
controlling a piece of equipment. The equipment cannot be controlled through the operator interface or PPCL until
the HOA override is switched back to the AUTO position.
When a point is at HAND status, PPCL continues to issue commands to that point. Since the HOA override switch
is controlling the point, the PPCL commands do not take effect. When the HOA override is switched back to the
AUTO position, the last command issued to that point, while in HAND status, is executed.
See Table 1-9 for a comparison of the point status while using the HOA override switch.

Table 1-9. Point Status with the HOA Override Switch.


HOA Switch Setting Point is being controlled by… Result

HAND HOA Switch Digital points: *ON* or *OFF*


Analog points: Value of the current HAND position. This value could
differ from the last commanded value.

OFF HOA Switch Equipment being controlled is OFF.

AUTO Operator interface or PPCL Equipment is being controlled by operator interface or PPCL.

CAUTION
Be aware of how your system will react before attempting to control equipment
by using an HOA override switch.
Manually controlling equipment can cause the system to react in an unstable
manner. Once control is returned to the system, you may need to perform other
functions before normal operations can resume.

A6V10374898 2023-05-15 67 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Object Status Indicators Supported


APOGEE Firmware supports the following object status indicators:
● Alarm (ALARM)
● Alarm acknowledge (ALMACK)
● Auto (AUTO)
● Battery status - discharged (DEAD)
● Battery status - almost discharged (LOW)
● Battery status - charged (OK)
● Day mode (DAYMOD)
● Failed (FAILED)
● Fast (FAST)
● Manual override (HAND)
● Night mode (NGTMOD)
● Off (OFF)
● On (ON)
● Proof on (PRFON)
● Slow (SLOW)

Alarm (ALARM)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
If (pt1.eq ALARM) then...

pt1 A point name whose operational status is compared to the status indicator.
- This parameter can be a digital, analog, logical controller, or pulsed accumulator point type.

Use
This status indicator determines if a point (pt1) is in the ALARM state. This comparison is true if the point status is
ALARM.
Example
200 IF (TEMP02.EQ.ALARM) THEN ON(FAN)

68 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Alarm Acknowledge (ALMACK)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Syntax
If (pt1.eq ALMACK) then...

pt1 A point name that is alarmable.

Use
This status indicator determines the status of an alarm acknowledgement. This comparison is true if the point alarm
state has been acknowledged.
Example 1
In the following statement, FAN is an alarmable point with Normal Acknowledge Required by Operator Enabled.
200 IF (FAN.EQ.ALMACK) THEN ON(PT1) ELSE OFF(PT1)

Action System Response


FAN is commanded ON Alarm

Alarm state is acknowledged pt1 turns ON

FAN is commanded OFF pt1 turns OFF (Fan is OFF and Normal, but requires
acknowledgement)

FAN Return to Normal state is acknowledged p1 turns ON

Example 2
In the following statement, FAN is an alarmable point with Normal Acknowledge Required by Operator Disabled.
200 IF (TEMP02.EQ.ALARM) THEN ON(FAN)

Action System Response


FAN is commanded ON Alarm

Alarm state is acknowledged pt1 turns ON

FAN is commanded OFF pt1 remains ON (Fan is OFF and Normal. The Return to Normal has
been acknowledged internally.)

Notes
For BACnet firmware, the ALMACK is true if any alarm event has been acknowledged; that is, OFFNORMAL,
NORMAL, or FAULT

A6V10374898 2023-05-15 69 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Auto (AUTO)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
If (pt1.eq AUTO) then...

pt1 A point name whose operational status is compared to the status indicator.
- This parameter must be a LOOAP or LOOAL point type.

Use
This status indicator determines if a point (pt1) is in the AUTO state. This comparison is true if the point status is
AUTO.
Example
200 IF (HOAFAN.EQ.AUTO) THEN ON(LIGHT3)

Battery Status—Charged (OK)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Syntax
If ($BATT.eq.OK) then...

Use
This status indicator compares the value of the $BATT resident point to determine if the backup battery is
operational. This comparison is true if the battery is charged.
Example
600 IF ($BATT.EQ.LOW) THEN ALARM(P26BAT)
An alternate method to test the battery strength is to use the numeric value (50) of LOW.
600 IF ($BATT.EQ.50) THEN ALARM(P26BAT)

Notes
This function can only be used in automation stations that have the ability to monitor the strength of their backup
battery.
See also the Battery Status – Discharged (DEAD) [➙ 71] and Battery Status – Almost Discharged (LOW) topics.

70 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Battery Status—Discharged (DEAD)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Syntax
If ($BATT.eq.DEAD) then...

Use
This status indicator compares the value of the $BATT resident point to determine if the backup battery is
discharged. This comparison is true if the battery is discharged.
Example
600 IF ($BATT.EQ.DEAD) THEN ALARM(P26BAT)
An alternate method to test the battery strength is to use the numeric value (0) of DEAD.
600 IF ($BATT.EQ.0) THEN ALARM(P26BAT)

Notes
This function can only be used in automation stations that have the ability to monitor the strength of their backup
battery.
See also Battery Status – Almost Discharged (LOW) and Battery Status – Charged (OK) [➙ 70] topics.

Battery Status—Almost Discharged (LOW)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Syntax
If ($BATT.eq LOW) then...

Use
This status indicator compares the value of the $BATT resident point to determine if the backup battery is about to
discharge. This comparison is true if the battery is close to discharging.
Example
600 IF ($BATT.EQ.LOW) THEN ALARM(P26BAT)
An alternate method to test the battery strength is to use the numeric value (50) of LOW.
600 IF ($BATT.EQ.50) THEN ALARM(P26BAT)

Notes
This function can only be used in automation stations that have the ability to monitor the strength of their backup
battery.
See also the Battery Status – Discharged (DEAD) [➙ 71] and Battery Status – Charged (OK) [➙ 70] topics.

A6V10374898 2023-05-15 71 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Day mode (DAYMOD)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
If (pt1.eq.DAYMOD) then...

pt1 A point name whose operational status is compared to the status indicator.
Use the equipment controller application name.
- For APOGEE firmware, use the TEC application name.
- For pre-APOGEE firmware, define the point as an LCTLR point type

Use
This status indicator determines if an equipment controller is in DAY mode.
For some equipment controllers, DAY mode is also referred to as OCC (occupied) mode. If an equipment controller
is in occupied mode, PPCL recognizes this status as DAYMOD.
Example
200 IF (CTLR1.EQ.DAYMOD) THEN DAYSP = 75.0

Notes
This command is only valid for FLN controllers and is not recommended for use with PXC.A firmware.
● For BACnet firmware, the application name corresponds to PTECs and DXR2s.
● For APOGEE firmware, the application name can correspond to a TEC, LTEC, or UC.
● For pre-APOGEE firmware, LCTLR and LTCU point types must be used.

Failed (FAILED)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
If (pt1.eq.FAILED) then...

pt1 A point name whose operational status is compared to the status indicator.
- This parameter can be a digital, analog, logical controller, or pulsed accumulator point type.

Use
This status indicator determines if a point (pt1) is in the FAILED state. This comparison is true if the point status is
FAILED.
Example
200 IF (AHU2.EQ.FAILED) THEN ON(HORN)

72 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Fast (FAST)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
If (pt1.eq.FAST) then...

pt1 A point name whose operational status is compared to the status indicator.
- This parameter must be defined as an LFSSL or LFSSP point type.

Use
This status indicator determines if a point (pt1) is in the FAST state. This comparison is true if the point status is
FAST.
Example
200 IF (FAN.EQ.FAST) THEN DAMPER = 8.0

Manual Override (HAND)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
If (pt1.eq.HAND) then...

pt1 A point name whose operational status is compared to the status indicator.

Use
This status indicator determines if a point (pt1) is in the HAND state. This comparison is true if the point is currently
being controlled through a manual override switch.
Example
200 IF (FAN.EQ.HAND) THEN OADAMP = 8.0

Notes
Points must be terminated on an automation station with a manual override switch.

A6V10374898 2023-05-15 73 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Night Mode (NGTMOD)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
If (pt1.eq.NGTMOD) then...

pt1 A point name whose operational status is compared to the status indicator.
- This parameter must be defined as an LCTLR point type.

Use
This status indicator determines if an equipment controller is in NIGHT mode.
For some equipment controllers, NIGHT mode is also referred to as UNOCC (unoccupied) mode. If an equipment
controller is in unoccupied mode, PPCL recognizes this status as NGTMOD.
Example
200 IF (CNTRL1.EQ.NGTMOD) THEN NGTSP = 78.0

Notes
For PXC.A, controllers use SET (Set point value).
This point is only valid for equipment controllers and is only valid when used with the LCTLR or LTCU (pre-
APOGEE only) point type.

Off (OFF)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
If (pt1.eq.OFF) then...

pt1 A point name whose operational status is compared to the status indicator.
- This parameter must be defined as an LDI, LDO, L2SP, L2SL, LOOAL, LOOAP, LFSSL, or LFSSP point type.

Use
This status indicator determines if a point (pt1) is in the OFF state. This comparison is true if the point status is
OFF.
Example
200 IF (FAN.EQ.OFF) THEN RTDAMP = 3.0

74 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

On (ON)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
If (pt1.eq.ON) then...

pt1 A point name whose operational status is compared to the status indicator.
- This point must be defined as any LDI, LDO, L2SP, L2SL, LOOAL, or LOOAP point type.

Use
This status indicator determines if a point (pt1) is in the ON state. This comparison is true if the point status is ON.
Example
200 IF (FAN.EQ.ON) THEN RTDAMP = 3.0

Proof on (PRFON)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
If (pt1.eq.PRFON) then...

pt1 A point name whose operational status is compared to the status indicator.
- This point must be defined as any L2SP, L2SL, LOOAL, or LOOAP point type.

Use
This status indicator compares the operational status of a point to the PRFON status indicator. This comparison is
true if the proof for the point is in the ON state.
Example
200 IF (FAN.EQ.PRFON) THEN OADAMP = 8.5

A6V10374898 2023-05-15 75 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Slow (SLOW)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
If (pt1.eq.SLOW) then...

pt1 A point name whose operational status is compared to the status indicator.
- This point must be defined as an LFSSL or LFSSP point type.

Use
This status indicator determines if a point (pt1) is in the SLOW state. This comparison is true if the point status is
SLOW.
Example
200 IF (FAN.EQ.SLOW) THEN DAMPER = 13.0

76 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Converting a Sequence of Operation into Program Code


Before you begin writing a program, determine the order in which the PPCL statements are executed. Consider
that you will most likely make modifications during the life of a program, such as:
● Changing the setpoint of a control loop.
● Adding code for new equipment.
● Modifying the control strategy.

Guidelines
The following guidelines will help you design a well-organized program that is easy to modify and maintain:
● Use point names that describe the function of the point.
● Organize the flow of the program logic from top to bottom so that errors are easier to trace.
● Use comment lines to document the functions performed by specific groups of statements.
● Use a subroutine (also called a module) for a group of statements that perform a specific task more than once
during each pass of the program.
● Make sure routing commands (GOTO) are used correctly. See Subroutine Commands [➙ 79] for more
information.
● With APOGEE firmware, it is best to create a separate program in the same automation station rather than
duplicate the control strategy within a single program.

Designing Programs Using a Modular Structure


Modular programming is a style of programming that logically organizes code into common functions. This style of
programming can be applied to a single program, or to multiple programs running on the network or in one
automation station.

Objectives of Modular Programming


The objectives of modular programming are to reduce program code and standardize program code.

Reducing Program Code


If a section of code is used many times during one pass of the program, that code can be defined as a subroutine
(also called a module). When that routine is needed, control is transferred to that part of the program.

Standardizing Program Code


Subroutines help set programming standards that define where functionality is placed in the program. If you use an
established block of code and do not change the line numbers, then that subroutine will always be placed in the
same location in the program.

A6V10374898 2023-05-15 77 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Benefits of Using Subroutines


By defining functions, procedures, and formulas in subroutines, programs become faster to create, easier to write,
and require less time to test. A subroutine used for one device can also be adapted for other devices.
For example, if a specific operation is performed five different times during one pass of the program, you have two
programming options.
● The first option is to duplicate the code in five different places in the program.
– This option adds five times as much program code.
– When making a change to one segment, you must remember to change all occurrences of that code.
● The second option is to use a subroutine. Every time the operation is needed, program control is transferred to
the subroutine.
– This option reduces the amount of mainline program code.
– When making a change, there is only one section of code to change.

When to Use a Subroutine


Before creating a subroutine, determine if the subroutine contains enough lines and is accessed enough times
through one pass of the program to be of any benefit. There are times that straight-line program code will be the
optimal solution.
A single line of program code placed in a subroutine will never be executed enough times to be of any benefit. In
this case, you would create more program code for a subroutine than you would by using straight-line program
code.
Conversely, a subroutine containing four lines of program code becomes beneficial when it is called more than
once.

Table 1-10. Efficient Use of Subroutines.


Number of Program Lines

Number of Calls per 1 Line 2 Lines 3 Lines 4 Lines or more


Program Pass

1 Call No No No No

2 Calls No No Even Yes

3 Calls No No Yes Yes

4 Calls or more No Yes Yes Yes

Use the following steps and Table 1-10 to determine when it becomes beneficial to use a subroutine:
1. Determine how many program lines a subroutine will contain (excluding the RETURN command).
2. Determine how many times the subroutine will be called through one pass of the program.
 If the result is "NO," then it is more efficient to use straight-line program code.
 If the result is "EVEN," then there is no benefit for using either method.
 If the result is "YES," then it is more efficient to use a subroutine.

78 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Subroutine Commands

Using GOTO
The GOTO command is commonly used to skip over subroutines or blocks of code and transfer control to another
location in the program. Observe the following guidelines when using a GOTO command:
● Make sure GOTO commands are routing control to a program line and not a comment line.
● Except for the last line of the program, all GOTO commands must transfer control to the same or a sequentially
higher line number.
● The GOTO command in the last line of the program is the only command that transfers control to the top of the
program.
● If no other program lines need to be read during a pass, transfer program control to the GOTO command in the
last line of the program.
● Use GOSUB and RETURN to transfer program control to and from subroutines. Do not use the GOTO
command.

Using GOSUB
The GOSUB command transfers control to a subroutine. Variable arguments can be passed to the subroutine from
the mainline code using $ARG local variables (if applicable). The values in the $ARG points replace their
respective point values.
When the subroutine processing is complete, program control is transferred back to the GOSUB statement by the
RETURN command. The automation station then continues processing at the next sequential line number.
For information on transferring control to a subroutine, see the GOSUB and RETURN topics.

Multiple Programs versus Subroutines


For APOGEE automation stations, individual PPCL programs can be used to replace subroutines. In some cases,
time-based statements should not be used in subroutines, and therefore require an individual program.
Example
Five Air Handling Units (AHUs) use the same control strategy. Two possible options for PPCL programming are as
follows:
● Use one PPCL program that contains five duplicate blocks of program code.
● Use five programs that duplicate one block of program code.
When using multiple programs, the DEFINE statement can be added to each block of code to identify the unique
portion of the point names. A section of code might look like the following:

100 DEFINE (AHU, “BUILDING1.AHU01”)


110 ON (“%AHU%SFAN”)
...

Since the DEFINE statement identifies the AHU that this program controls, there is no need to change the point
names throughout the block of code. This block can be copied to each program with changes made only to the
DEFINE statement.
For more information, see DEFINE topic.

A6V10374898 2023-05-15 79 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Program Testing
To ensure that a program is working properly, it should be tested.
● Testing verifies that the program code works properly under normal operating conditions.
● Testing checks the durability of the program by providing a wide variety of operating conditions that the
program must evaluate.
Modular programming practices make it less time consuming to completely test a program. Programs with a
modular design are easier to test because there are fewer variables and lines of code to test.

What Should be Tested?


Tests can be developed for individual modules or the complete program. When the complete program is tested, the
data used should adequately test all conditions that may be encountered.
Testing conditions should include values that the program does not expect to encounter. For example, you might
include the following conditions:
● Enter an input value of 40F for an input that is defined to accept values from 50F to 70F.
● If the program turns a point ON, find out what happens when you turn it OFF.
● Simulate a sensor or fan motor failure and see how the program reacts.
The precautions taken in programming and testing will show you how the program processes errors and help
prevent downtime when the system encounters unusual operating conditions.

Program Documentation
Programs should have documentation that identifies the program functions and the equipment being controlled.
Fortunately, the modular programming method makes an easier task of documentation.
The following documentation methods are described in more detail on the following pages:
● Internal documentation
● External documentation
One or more of these methods can be used to document program operation. In addition, you can use these
documentation methods as planning tools when designing a PPCL program.

80 | 195 2023-05-15 A6V10374898


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Internal Documentation
Internal documentation refers to information written into the program using comment lines.
● Comment lines allow you to enter text information describing the functionality of a specific section of code.
● Comment lines are especially helpful for describing subroutines and areas of program code that are difficult to
understand.
You must enter the letter C after the line number to prevent the program from interpreting your comments as
program commands. For example:
200 C THIS COMMAND WILL TURN ON SFAN01
210 C IF RMTEMP VALUE FALLS BELOW 68 OR
220 C RISES ABOVE 78. SFAN01 WILL REMAIN
230 C ON/OFF FOR AT LEAST 5 MINUTES.

NOTE:
The device and software used to program PPCL determines how comment lines
must be entered. For more information on using comment lines, see the user's
manual for the device or software you are using.

External Documentation
External documentation refers to physical control diagrams, layouts, and information written about the program.
This information can be used as a reference to learn about the functions of the control system. The following two
methods are commonly used for external documentation:
● Decision tables
● Pseudocode

Decision Tables
Decision tables provide a visual representation of how a specific piece of equipment interacts with other equipment
during each mode of operation. Like truth tables, a decision table defines inputs that are logically compared to
produce outputs (results).
● Inputs for a decision table are the types of equipment and all possible modes of operation.
● In each row of the table, a piece of equipment is compared to each mode of operation to determine the status
of that equipment during the mode.
Table 1-11 provides an example of a decision table that defines six pieces of equipment and four modes of
operation.

Table 1-11. Example of a Decision Table.


Modes of Operation

Equipment type Shutdown Day mode Smoke Warm-up

Supply Fan Off On On On

Return Fan Off On On On

CC Valve Closed Modulate Modulate Closed

Mixing Dampers Closed Modulate Modulate Closed

Supply Fan Vol Modulate Modulate Open Modulate

Return Fan Vol Modulate Modulate Open Modulate

A6V10374898 2023-05-15 81 | 195


Chapter 1 - Program Methodology
BACnet Point Naming (Encoded names)

Pseudocode
Pseudocode is information written in a non-syntactical manner to document program code. Programmers often use
pseudocode to quickly organize their ideas before writing the code. After the code is written, the pseudocode
becomes a reference that describes the functionality of the program.
For example, when solving a programming problem, you might start by asking yourself questions about what is to
be accomplished. As you define what must be accomplished, you can create a logical list of the steps the program
should perform. You might create a pseudocode list with the following items:
● Check mixed air temperatures
● Check outside air temperatures
● Open/close dampers as needed
● Start/stop fans
From this list, you would begin writing program code to accomplish these functions.

82 | 195 2023-05-15 A6V10374898


Chapter 2 - Control Option Comparisons
BACnet Point Naming (Encoded names)

Chapter 2 - Control Option Comparisons

Overview
Chapter 2 discusses the following topics:
● Concepts behind some of the major control applications in the APOGEE Automation System, namely:
– Duty Cycling (DC)
– Enthalpy and Dry Bulb Economizer Control
– Peak Demand Limiting (PDL)
● Procedures the system uses to schedule operations and optimize system use, namely:
– Start/Stop Time Optimization (SSTO)
– Time-of-Day (TOD)
For specific information on using the PPCL commands identified in this chapter, see Chapter 3 –Syntax.

A6V10374898 2023-05-15 83 | 195


Chapter 2 - Control Option Comparisons
BACnet Point Naming (Encoded names)

Duty Cycling (DC)


Most building control systems are designed to meet the expected maximum system demand. However, the
maximum demand is usually required only a few times per year for short periods of time. As a result, the system is
oversized for the normal load so that it can meet this exceptional demand.
The duty cycling (DC) function coordinates the operation of all available equipment to compensate for additional
equipment capacity that is not normally needed. During normal system operation, some equipment is cycled off for
short periods of time to distribute equipment wear and reduce operating costs.
Applications that can use ON/OFF switching in hourly patterns work best with a duty cycling program.

CAUTION
Be careful when designing your programs so that functions do not conflict.
If objects used for DC are also commanded by another application, such as Time-of-
Day (TOD), one program may interfere with the operation of the other if both
functions are trying to control a object during the same time period.

Example
The following example uses duty cycling in a school building to control a hall fan, called HFAN.
● In order to conserve energy, the fan will run only during the times when students are in the hall.
● In this school, classes start on the hour and last for 50 minutes.
● Students are in the hall during a 10-minute period before the next class.
● Since the hall that HFAN serves has good ventilation, the fan should run for the last 15 minutes of the hour and
for the first five minutes of the next hour.
● The rest of the time the fan is shut off.
The code for duty cycling HFAN is as follows:

1000 C THIS DC COMMAND DUTY CYCLES HFAN


1010 C ACCORDING TO THE FOLLOWING SCHEDULE:
1020 C
1030 C FIRST 15 MINUTES – ON, OFF, OFF (1)
1040 C SECOND 15 MINUTES – OFF, OFF, OFF (0)

1050 C THIRD 15 MINUTES – OFF, OFF, OFF (0)


1060 C FOURTH 15 MINUTES – ON, ON, ON (7)
1070 C
1100 DC(HFAN,7001)

Duty Cycling Commands


Duty cycling has two commands that can be used independently of each other: DC and DCR. The DC and DCR
commands do not have to be defined in a specific order.

84 | 195 2023-05-15 A6V10374898


Chapter 2 - Control Option Comparisons
BACnet Point Naming (Encoded names)

The DC Command
● The DC command turns objects ON and OFF according to a defined schedule.
● This command is best applied in situations where the environment is constant or where there are minor
deviations in temperature or humidity. For example, a storeroom, maintenance shop, building core, or service
area.
For more information, see the DC topic.

The DCR Command


● The DCR command turns objects ON and OFF according to a temperature range defined with a dead band
(DBSWIT).
● DCR checks the temperature object value every five minutes.
● This command is best used in situations where the environment fluctuates or where deviations in temperature
or humidity are undesirable. For example, a classroom, meeting room, lobby area, or an area adjacent to an
exterior wall.
For more information, see the DCR and DBSWIT topics.

Enthalpy and Dry Bulb Economizer Control


Enthalpy is the total amount of heat energy contained within one pound of air.
When a coil cools the air, it is cooling both the air and the water vapor contained in the air as humidity. The higher
the humidity, the more water vapor is in the air. Since humid air takes more energy to cool than dry air, it would
make sense to monitor both the temperature and the humidity of the outside air when we consider the economizer
control.
Conventional economizer control uses only the temperatures of the outside air and return air to determine when to
minimize the damper position. The total energy content of the return air may or may not be higher than the outside
air.

Example—Economizer Comparison
The cooling coil needs to drop the energy of the air to 23.2 Btu/lb before it enters the room. With a conventional
economizer, the control system compares the 77°F return temperature and the 85°F outside air temperature and
closes the outside air dampers to minimum. This results in each pound of recycled air requiring the removal of 8.4
Btu of energy.
With an economizer that checks the enthalpy, the total enthalpies would be compared. In this case, the 28.8 Btu/lb
would be compared to the 31.6 Btu/lb and the outside air dampers would be set to full open. The supply air now
only needs to remove 5.6 Btu for each pound of air.
Using an enthalpy economizer for this situation has reduced the cooling energy demand by 50%.

Enthalpy Economizer Calculations


Enthalpy economizer control uses a subroutine to perform the enthalpy calculation. The following calculations can
be added to a PPCL program:
● Enthalpy from dry bulb and relative humidity (Btu/lb or kJ/kg)
● Enthalpy from dry bulb and dew object (Btu/lb or kJ/kg)
For implementation of enthalpy and dry bulb economizer control, contact your Siemens Building Technologies
representative.

A6V10374898 2023-05-15 85 | 195


Chapter 2 - Control Option Comparisons
BACnet Point Naming (Encoded names)

Peak Demand Limiting (PDL)


Peak Demand Limiting (PDL) helps companies manage their electrical consumption during periods of peak
demand.
PDL reduces the electrical consumption of a building control system by shedding loads (turning OFF equipment)
when the electrical demand exceeds a setpoint.
Loads are restored (equipment is turned ON) when electrical demand falls below the setpoint. However, the
equipment remains OFF if restoring the load will exceed the setpoint.
Example
PDL is monitoring an electrical meter that supplies power to three air handling units and some auxiliary equipment.
Two of the air handlers are currently ON while the third air handler is about to be turned ON. If all three air handlers
and the auxiliary equipment are operating at one time, PDL predicts that electrical demand will exceed the peak
setpoint of 500 kWh.
To keep electrical demand from exceeding the setpoint, PDL shuts OFF (sheds) the auxiliary loads that are not
critical. Once the building is operating at a level where the electrical demand will stay within the setpoint, the
auxiliary equipment will be restored.

Why Use PDL?


Companies often have a contracted rate with the utility company based on their expected electrical consumption
throughout the year. The contract often limits electrical use during periods of peak demand and sets a maximum
use over a period of time. If the company exceeds the contractual demand, the utility company can impose
surcharges or charge higher rates.

Why Use PDL Instead of Duty Cycling?


Although duty cycling (DC) can also be used to reduce electrical demand, duty cycling only controls loads
according to a time schedule. The PDL function can monitor the total electrical demand and prevent the system
from exceeding a demand setpoint.

Distributed Peak Demand Limiting


With Distributed PDL, an automation station on the network monitors meter readings, forecasts the demand, and
assigns shed targets to the other automation stations on the network.

NOTE:
Distributed PDL can only work on Protocol 2 networks.

The Predictor Automation Station


PPCL statements are entered in a specified automation station (called the predictor automation station) to control
all meter monitoring and demand forecasts for a meter area. All meter inputs from the field must be connected
directly to the predictor automation station.
The predictor automation station compares predicted demand to the demand limit setpoint and decides how many
kilowatts of load must be shed for the meter area. In addition to monitoring and predicting demand, the predictor
automation station is also responsible for keeping data for the reports.
Each predictor automation station can control a total of seven load-handling automation stations.

86 | 195 2023-05-15 A6V10374898


Chapter 2 - Control Option Comparisons
BACnet Point Naming (Encoded names)

The Load-Handling Automation Stations


Each load-handling automation station receives a demand target from the predictor panel.
The load-handling automation station maintains the demand target level by shedding and restoring the loads that it
controls.

Defining Distributed PDL


Distributed PDL uses five PPCL commands that must be defined in the following order:
1. PDLMTR – Monitors consumption meters to determine power usage, maintains consumption reports, predicts
usage, issues warnings, and restarts meters.
2. PDLSET – Assigns various consumption limiting setpoints to specific time intervals.
3. PDLDPG – Distributes the difference between the PDL resident object and the setpoint.
4. PDL – Maintains the target kilowatt consumption level by shedding and restoring loads as needed.
5. PDLDAT – Defines a power consuming load that will be controlled by a PDL command.
– The predictor automation station must have the PDLMTR, PDLSET, and PDLDPG commands defined in its
PPCL program.
– Each load-handling automation station must have the PDL and PDLDAT statements defined in its PPCL
program.

NOTE:
This configuration assumes that the predictor automation station does not have any
loads defined. If the predictor automation station is also controlling loads, the PDL
and PDLDAT commands must also be defined in the PPCL program.

Defining Distributed PDL


Distributed PDL uses five PPCL commands that must be defined in the following order:
1. PDLMTR – Monitors consumption meters to determine power usage, maintains consumption reports, predicts
usage, issues warnings, and restarts meters.
2. PDLSET – Assigns various consumption limiting setpoints to specific time intervals.
3. PDLDPG – Distributes the difference between the PDL resident object and the setpoint.
4. PDL – Maintains the target kilowatt consumption level by shedding and restoring loads as needed.
5. PDLDAT – Defines a power consuming load that will be controlled by a PDL command.
– The predictor automation station must have the PDLMTR, PDLSET, and PDLDPG commands defined in its
PPCL program.
– Each load-handling automation station must have the PDL and PDLDAT statements defined in its PPCL
program.

NOTE:
This configuration assumes that the predictor automation station does not have any
loads defined. If the predictor automation station is also controlling loads, the PDL
and PDLDAT commands must also be defined in the PPCL program.

A6V10374898 2023-05-15 87 | 195


Chapter 2 - Control Option Comparisons
BACnet Point Naming (Encoded names)

Start/Stop Time Optimization (SSTO)


The Start/Stop Time Optimization (SSTO) feature adjusts the equipment start and stop based on calculations that
optimize use of the system.
The equipment start and stop times are based on the outside and inside temperatures of the building. Each time
the value of the indoor or outdoor air temperature changes, SSTO recalculates the optimal values for system
operation.

Where to Use SSTO


SSTO programs should be used in areas with extreme outside zones, unstable environments, or zones where the
space temperature is affected by elements like wind, sunlight, or auxiliary sources of heating or cooling loads.
Example
SSTO is controlling the lobby of a building. When the lobby opens at 8:00 A.M.,, the temperature must be 75F.
If the lobby temperature is 72F at 7:30 A.M., SSTO calculates that the system needs 10 minutes to warm the lobby
to 75F by 8:00. SSTO starts the warm-up procedure for the lobby at 7:50 A.M.
On another day, the lobby temperature is 69F. SSTO calculates that the system needs 20 minutes to warm the
lobby to 75F by 8:00 A.M. SSTO starts the warm-up procedure at 7:40 A.M.

Defining SSTO
Three PPCL commands are defined in the automation station for SSTO. They must be specified in the following
order:
1. TODMOD – Defines the specific mode for each day of the week. This command is shared with the Time-Of-
Day group of statements and is necessary for SSTO to work.
2. SSTOCO – Establishes the thermal characteristics of the building based on how the building reacts to changes
in temperature.
3. SSTO – Calculates optimal start and stop times.
All optimization calculations and equipment control are performed in the automation station where the SSTO and
SSTOCO commands are defined. Each program within an automation station may also perform SSTO calculations
for up to 5 zones.

CAUTION
Be careful when designing your programs so that functions do not conflict.
If objects used for SSTO are also commanded by another application, such as Duty
Cycling (DC), one program may interfere with the operation of the other if both
functions are trying to control a object during the same time period.

88 | 195 2023-05-15 A6V10374898


Chapter 2 - Control Option Comparisons
BACnet Point Naming (Encoded names)

SSTO Formulas
The following formulas, used for calculating the optimal start and stop times during the heating and cooling
seasons, are outlined on the following topics:
● Cooling Season—Optimum Start Time
● Cooling Season—Optimum Stop Time
● Heating Season—Optimum Start Time
● Heating Season—Optimum Stop Time
● Cooling Mode at Occupancy Begin
● Cooling Mode at Occupancy End
● Heating Mode at Occupancy Begin
● Heating Mode at Occupancy End

NOTE:
The example values for coefficients shown in this manual should not be used without
first calculating what the number should be.

Cooling Season—Optimum Start Time


If the indoor temperature is less than the desired temperature, then the optimum start time is LB.
Where:

LB = Latest begin time defined in the SSTO command.

If the indoor temperature is greater than or equal to the desired temperature, then the optimum start time is:
OB - (d * CC) - (d * f * (CT/10)) + AB
Where:

OB = Occupancy begin time from SSTO command.


d = Indoor temperature minus the desired temperature.
CC = Cooling coefficient (ccoef1) from SSTOCO command.
f = Outdoor temperature minus the desired temperature.
CT = Cooling transfer coefficient (ccoef3) from SSTOCO command.
AB = Adjust begin time from SSTO command.

A6V10374898 2023-05-15 89 | 195


Chapter 2 - Control Option Comparisons
BACnet Point Naming (Encoded names)

Cooling Season—Optimum Stop Time


If the indoor temperature is less than the desired temperature, then the optimum stop time is:
OE + ((10 * CR * d)/f) + AE
Where:

OE = Occupancy end time from SSTO command.

CR = Cooling retention coefficient in hours (ccoef2) from SSTOCO command.


d = Indoor temperature minus the desired temperature.
f = Outdoor temperature minus the desired temperature.

AE = Adjust end time from SSTO command.

If the indoor temperature is greater than or equal to the desired temperature, the optimum stop time is LE:
Where:

LE = Latest end time from SSTO command.

Heating Season—Optimum Start Time


If the indoor temperature is less than the desired temperature, then the optimum start time is:
OB + (d x HC) - ((d * f * HT) / 25) + AB
Where:

OB = Occupancy begin time from SSTO command.


d = Indoor temperature minus the desired temperature.
HC = Heating coefficient (hcoef1) from SSTOCO command.

f = Outdoor temperature minus the desired temperature.


HT = Heating transfer coefficient (hcoef3) from SSTOCO command.
AB = Adjust begin time from SSTO command.

If the indoor temperature is greater than or equal to the desired temperature, then the optimum stop time is LB:
Where:

LB = Latest begin time from SSTO command.

90 | 195 2023-05-15 A6V10374898


Chapter 2 - Control Option Comparisons
BACnet Point Naming (Encoded names)

Heating Season—Optimum Stop Time


If the indoor temperature is less than the desired temperature, then the optimum stop time is LE:
Where:

LE = Latest end time from SSTO command.

If the indoor temperature is greater than or equal to the desired temperature, then the optimum stop time is:
OE - ((25 * HR * d) / f) + AE
Where:

OE = Occupancy end time from SSTO command.


HR = Heating retention coefficient (hcoef2) from SSTOCO command.
d = Indoor temperature minus the desired temperature.
f = Outdoor temperature minus the desired temperature.
AE = Adjust end time from SSTO command.

Cooling Mode at Occupancy Begin


If the indoor temperature is greater than the desired temperature plus one degree, then:
AB = AB - CA
Where:

AB = Adjust begin time from SSTO command.


CA = Cooling auto-tune coefficient (ccoef4) from SSTOCO command.

If the indoor temperature is less than the desired temperature minus one degree, then:
AB = AB + CA
Where:

AB = Adjust begin time from SSTO command.


CA = Cooling auto-tune coefficient (ccoef4) from SSTOCO command.

Cooling Mode at Occupancy End


If the indoor temperature is greater than the desired temperature plus one degree, then:
AE = AE + CA
Where:

AE = Adjust end time from SSTO command.


CA = Cooling auto-tune coefficient (ccoef4) from SSTOCO command.

If the indoor temperature is less than the desired temperature minus one degree, then:
AE = AE - CA
Where:

AE = Adjust end time from SSTO command.


CA = Cooling auto-tune coefficient (ccoef4) from SSTOCO command.

A6V10374898 2023-05-15 91 | 195


Chapter 2 - Control Option Comparisons
BACnet Point Naming (Encoded names)

Heating Mode at Occupancy Begin


If the indoor temperature is greater than the desired temperature plus one degree, then:
AB = AB + HA
Where:

AB = Adjust begin time from SSTO command.


HA = Heating auto-tune coefficient (hcoef4) from SSTOCO command.

If the indoor temperature is less than desired the temperature minus one degree, then:
AB = AB - HA
Where:

AB = Adjust begin time from SSTO command.


HA = Heating auto-tune coefficient (hcoef4) from SSTOCO command.

Heating Mode at Occupancy End


If the indoor temperature is greater than the desired temperature plus one degree, then:
AE = AE - HA
Where:

AE = Adjust end time from SSTO command.

HA = Heating auto-tune coefficient (hcoef4) from SSTOCO command.

If the indoor temperature is less than the desired temperature minus one degree, then:
AE = AE + HA
Where:

AE = Adjust end time from SSTO command.

HA = Heating auto-tune coefficient (hcoef4) from SSTOCO command.

92 | 195 2023-05-15 A6V10374898


Chapter 2 - Control Option Comparisons
BACnet Point Naming (Encoded names)

Time-of-Day (TOD)
The Time-Of-Day (TOD) function is the software equivalent of the time clock. TOD starts and stops equipment
according to a defined schedule.

Where to Use TOD


TOD can be used for running equipment on a scheduled basis. For example, lights, doors (locking and unlocking),
or exhaust fans.

CAUTION
Be careful when designing your programs so that functions do not conflict.
If objects used for TOD are also commanded by another application, such as Duty
Cycling (DC), one program may interfere with the operation of the other if both
functions are trying to control a object during the same time period.

Defining Time-of-Day
The following PPCL commands are defined in the automation station for the TOD function:
● TODMOD – Defines the types of schedules (normal, weekend, etc.) for each day of the week. The TODMOD
statement must be defined first.
● HOLIDA – Used in conjunction with the TOD function to set schedules for equipment during holidays. The
HOLIDA command must be placed before any TOD or TODSET commands.
● TOD – Commands up to 16 digital objects ON or OFF at specified times.
● TODSET – Sets the values of up to ten analog objects at specified start and stop times during the day.
● The TOD and TODSET commands do not have to be defined in a specific order.

NOTE:
Schedules can also be created using the Time-of-Day (TOD) calendar that offers a
menu-driven interface. For complete information on defining and maintaining daily
operating schedules using the TOD calendar, see the PXC.A Reference Manual
(A6V12954388) or the PXC.A Web Interface User Guide (A6V12893115).

A6V10374898 2023-05-15 93 | 195


Chapter 2 - Control Option Comparisons
BACnet Point Naming (Encoded names)

Example 1: Holidays defined in PPCL, but not in the TOD calendar


The following example illustrates the results when defining holidays using the PPCL HOLIDA command.
50 HOLIDA(5,3,9,8)
The following TOD commands are defined in the TOD database:

Monday - Sunday
07:00:00 OFF LITE1
18:00:00 ON FAN1
18:00:00 ON LITE1
19:00:00 OFF FAN1
Holiday
10:30:00 OFF LITE1
17:00:00 ON LITE1

Based on this schedule, the following will occur:


● Every day except May 3 and September 8, LITE1 will go ON at 18:00 and turn OFF at 07:00, and FAN1 will go
ON at 18:00 and turn OFF at 19:00.
● On May 3 and September 8, LITE1 will go ON at 17:00 and turn OFF at 10:30, while FAN1 will not be
commanded.

Example 2: Holidays defined in TOD calendar, but not in PPCL


The following example illustrates the results when defining holidays using the TOD Calendar.
The TOD calendar has the following entries:

03-May-1994 Holiday
08-Sept-1994 Holiday

The program contains the following PPCL TOD commands:


100 TODMOD(1,1,1,1,1,1,1)
110 TOD(1,1,18:00,07:00,LITE1)
120 TOD(1,1,18:00,19:00,FAN1)
130 TOD(16,1,17:00,10:30,LITE1)
Based on this schedule, the following will occur:
● Every day except May 3 or September 8, LITE1 will go ON at 18:00 and turn OFF at 07:00, and FAN1 will go
ON at 18:00 and turn OFF at 19:00.
● On May 3 and September 8, LITE1 will go ON at 17:00 and turn OFF at 10:30, while FAN1 will not be
commanded.

94 | 195 2023-05-15 A6V10374898


Chapter 2 - Control Option Comparisons
BACnet Point Naming (Encoded names)

Example 3: Holidays defined in both PPCL HOLIDA and the TOD calendar
The following example illustrates the results when defining holidays using both the PPCL HOLIDA statement and
the TOD calendar.

NOTE:
Problems can occur if different holiday schedules are defined in the HOLIDA
statement and in the TOD calendar, and then both methods are used at the same
time. The equipment commanded by the PPCL TOD command will not only execute
the holidays defined in the HOLIDA statement, but also those defined in the TOD
calendar.

If you choose to define a holiday using the PPCL HOLIDA statement and the TOD calendar, make sure that the
holiday is defined the same in both places.
The following TOD commands are defined in the TOD database:

Monday - Sunday
07:00:00 OFF LITE1
18:00:00 ON FAN1
18:00:00 ON LITE1
19:00:00 OFF FAN1
Holiday
10:30:00 OFF LITE1
17:00:00 ON LITE1

The PPCL HOLIDA command defines the following holidays:


100 HOLIDA(4,1,6,14)
The TOD calendar defines the following holidays:

03-May-1994 Holiday
08-Sept-1994 Holiday

Based on these schedules, the following will occur:


● LITE1 operates according to the holiday schedule on four days: April 1, May 3, June 14, and September 8.
● This causes a problem if LITE1 should only operate on a holiday schedule of May 3 and September 8.

A6V10374898 2023-05-15 95 | 195


Chapter 2 - Control Option Comparisons
BACnet Point Naming (Encoded names)

IF/THEN/ELSE Time-Of-Day
Although Time-Of-Day uses actual commands dedicated to performing TOD functions, time scheduling can be
accomplished using the IF/THEN/ELSE command.
Example
The following example illustrates TOD scheduling using the IF/THEN/ELSE command to control the outdoor
parking lights for a building.
The lights must be ON from 7:00 p.m. until 5:00 A.M. The IF/THEN/ELSE statement for this schedule might look
like the following:
100 C THIS LINE OF CODE TURNS THE LIGHTS
102 C OFF AT 5:00 AM AND ON AT 7:00 PM.
104 C
110 IF(TIME.GT.5:00.AND.TIME.LT.19:00)THEN OFF(LITES)ELSE ON(LITES)

APOGEE Interaction with PPCL TOD


APOGEE automation stations contain an equipment scheduling application, which replaces TOD in PPCL. Some
portions of TOD programming are shared by equipment scheduling, specifically the system calendar.
Equipment scheduling uses replacement days and special days.
The R1 replacement day in equipment scheduling corresponds to the Holiday Schedule in the TODMOD
command.

96 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
Overview

Chapter 3 - Command Syntax

Overview
Chapter 3 describes the syntax, functionality, and special exceptions for each command, as well as related
commands.
This chapter is arranged alphabetically by command. The following list groups the commands by control function:

Activate/Deactivate PPCL Lines


ACT
DEACT
DISABL
ENABLE

Closed Loop Control


ADAPTM
ADAPTS
LOOP

Conditional Control
IF/THEN and IF/THEN/ELSE
COV Control
DISCOV
ENCOV

Emergency Control
EMON
EMOFF
EMFAST
EMSLOW
EMAUTO
EMSET

Dead Band Switching


DBSWIT
Duty Cycling
DC
DCR

Enthalpy Optimization
GOSUB
RETURN

GOTO Statement
GOTO

A6V10374898 2023-05-15 97 | 195


Chapter 3 - Command Syntax
Overview

Local Variables
LOCAL

Operator Interface Program


OIP

Peak Demand Limiting


PDL
PDLDAT
PDLDPG
PDLMTR
PDLSET

Point Commands
ON
OFF
STATE
AUTO
FAST
SLOW
SET
DAY
NIGHT

Point Control
INITTO
MAX
MIN
TIMAVG
WAIT

Point Control and Characteristics


ALARM
DISALM
ENALM
HLIMIT
LLIMIT
NORMAL

Program Control
DEFINE
ONPWRT
SAMPLE
TABLE

98 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
ACT (Activate lines)

Release Statement
RELEAS

Start/Stop Time Optimization


SSTO
SSTOCO

Telephone ID Numbers
DPHONE
EPHONE

Time of Day
HOLIDA
TOD
TODMOD
TODSET

ACT (Activate lines)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
ACT(line1,...,line16)

line1 through Valid PPCL line numbers.


line16 - Line numbers must be entered as integers ranging from 1 to 32767.
- A range of PPCL lines cannot be defined using the ACT command.

Use
For PXC.A devices, this statement has been replaced with GOTO( ) [➙ 139], GOSUB( ) [➙ 134] and RETURN( )
[➙ 165].
Activates lines of PPCL code so they can be examined and executed.
● The ACT command only affects the lines of PPCL program for the device where the program resides.
● ACT only enables PPCL lines that are specifically defined in the command.
● A maximum of 16 lines of PPCL code can be controlled with one ACT command.
Example
100 IF (TIME.GT.8:00.AND.TIME.LT.17:00) THEN ACT(120) ELSE DEACT(120)

Notes
The ACT and ENABLE commands can be used interchangeably.
See also the DEACT [➙ 120], DISABL [➙ 122], and ENABLE [➙ 128] topics.

A6V10374898 2023-05-15 99 | 195


Chapter 3 - Command Syntax
ADAPTM (Adaptive control, multiple)

ADAPTM (Adaptive control, multiple)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Syntax
ADAPTM(pv,cv,sp,matctl,mam,st,kc,tcd,tch,tcc,her,dbr,der,err)

pv Point name of the process variable being controlled.


This parameter is usually an LAI point, but it can be an LAO point or a local variable that represents supply air
temperature.
This value should be between -50.0 and 150.0.
cv Controlled variable (output signal). This signal is 0.0 to 100.0 percent, direct acting, and is intended to go to TABLE
statements–one for each output actuator point (for example, heating, dampers and cooling).
- This parameter can be a point name or local variable.
sp Setpoint for the loop against which the process variable is compared.
- This parameter can be a point name, local variable name, or decimal number.
- This value must be between -50.0 and 150.0, and should be in the same engineering units as pv.
matcl Represents the output of the mixed air temperature control loop (usually an ADAPTS loop). When the value of matctl is
equal to or drops below the value of mam, the cv output will not rise above the her value.
- This parameter can be a point name, local variable name, or decimal number.
- This value must be between 0.0 and 100.0.
- For applications without dampers or without mixed air temperature override of the dampers, set matctl to 100.0.
mam Mixed air damper minimum position.
- This parameter can be a point name, local variable name, or decimal number.
- This value must be between 0.0 and 100.0.
For applications without dampers (heating and cooling only), set mam to 0.0.
st Sample time (in seconds). This is the time, in seconds, between two successive starts of execution of the ADAPTM
algorithm. It is also the time interval between two samples of data by ADAPTM.
- This parameter can be an integer, point name, or local variable name.
- The minimum sample time allowed is 1 second.
- For a system with smaller size coils, typically set st to 5 seconds.
- For a system with larger size coils, typically set st to 10 seconds.
- The Sample Time must be less than or equal to one-third of the smallest Time Constant. That is,

Where:
st is the Sample Time, and
tc is the smallest of tcd, tch, and tcc.
kc Control gain.
- This parameter can be a point name, local variable name, or decimal number.
- This value must be greater than 0.0.
- For English units set kc to 3.0. For SI Units set kc to 6.0.

100 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
ADAPTM (Adaptive control, multiple)

tcd Damper time constant (in seconds).


- This parameter can be a point name, local variable name, or decimal number.
- This value must be greater than or equal to 3 times the st value.
- For applications with heating and cooling only (no dampers), set tcd to the value of tcc.
The damper time constant is, itself, very small in value–typically equal to that of the supply air temperature sensor and the
damper actuator stroke time. However, since the air from the dampers must go through the coil(s) before reaching the
supply air temperature sensor, the coil(s) time constant(s) (minus their actuator times and the supply air temperature
sensor's time constant) must be added to the damper time constant.
The ADAPTM damper time constant parameter entry (in seconds) is calculated using this formula:
[image here ???]
Where:
tcd = ADAPTM damper time constant parameter entry (in seconds)
T downstream coils = time constants of coils alone downstream of dampers (between the dampers and the duct
temperature sensor).
T sensor = time constant of the supply air sensor (usually about 30 seconds)
T damper actuator = stroke time of the damper actuator (often 30 seconds)
tch Heating time constant (seconds).
- This parameter can be a point name, local variable name, or decimal number.
- This value must be greater than or equal to 3 times the st value.
- For applications with dampers and cooling only (no heating), set tch to the value of tcd.
The time constant of the heating coil alone is calculated using the following formula:

Where:
CFMmax = Maximum or design airflow rate in cubic feet per minute
GPMmax = Maximum or design hot water flow rate in gallons per minute
l/s air max = Maximum or design air flow rate in liters per second
l/s hot water max = Maximum or design hot water flow rate in liters per second
The ADAPTM heating time constant parameter entry (in seconds) is calculated using this formula:

Where:
tch = ADAPTM heating time constant parameter (in seconds).
T downstream coils = time constants of other coils alone downstream of heating coil (between heating coil and duct
temperature sensor).
T sensor = time constant of the supply air sensor (usually about 30 seconds).
T hc actuator = stroke time of the heating coil actuator (often 30 seconds).

A6V10374898 2023-05-15 101 | 195


Chapter 3 - Command Syntax
ADAPTM (Adaptive control, multiple)

tcc Cooling time constant (in seconds).


- This parameter can be a point name, local variable name, or decimal number.
- This value must be greater than or equal to 3 times the st value.
- For applications with heating and dampers only (no cooling coil), set tcc to the value of tcd.
The time constant of the cooling coil alone is calculated using the following formula:

Where:
CFMmax = Maximum or design airflow rate in cubic feet per minute
GPMmax = Maximum or design chilled water flow rate in gallons per minute
L/s air max = Maximum or design air flow rate in liters per second
L/s chilled water max = Maximum or design chilled water flow rate in liters per second
The ADAPTM cooling time constant parameter entry (in seconds) is calculated using this formula:

Where:
tcc = ADAPTM cooling time constant parameter (in seconds)
Tdownstream coils = time constants of coils alone downstream of cooling coil (between
cooling coil and duct temperature sensor)
Tsensor = time constant of the supply air sensor (often 30 seconds)
tcc actuator = stroke time of the cooling coil actuator (often 30 seconds)

her Heating end of range (in percent). This parameter tells ADAPTM what percentage of its output is used for heating. It is
assumed that the beginning of the heating range is at 0%.
- This parameter can be a point name, local variable name, or decimal number.
- This value must be:
- Equal to or greater than 0, and
- Less than or equal to dbr.
- For applications with dampers and cooling only (no heating), set her to 0.
The following figure shows the relationship of her to the operation of the heating, dampers and cooling outputs.

Typically, the value for her will be the same as the second to the last parameter for the TABLE statement controlling the
heating coil. For example, as shown in the line of code below, this value is 45.
05030 TABLE (%X%VRT,%X%HCO,0,100,45,0)
If the value of her varies slightly due to the path taken in the code, choose a nominal value for her. ADAPTM can handle
minor variations in the value of her.

102 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
ADAPTM (Adaptive control, multiple)

dbr Damper beginning of range. This parameter, along with the Damper End of Range (der), tells ADAPTM what percentage
of its output is used for mixed air damper control (free cooling).
- This parameter can be a point name, local variable name, or decimal number.
- This value must be:
- Greater than or equal to her, and
- Less than der.
- For applications with heating and cooling only (no dampers), set dbr to the value of der.
- For applications with dampers and cooling only (no heating), set dbr to 0.
The following figure shows the relationship of dbr to the operation of the heating, dampers and cooling outputs.

Typically, the value for dbr will be the same as the third parameter for the TABLE statement controlling the mixed air
damper. For example, as shown below in the line of code below, this value is 50.
5050 TABLE (%X%VRT,$MADCTL,50,%X%MAM,65,100)
If other PPCL code is used, dbr must still be the value of the output of ADAPTM at which mixed air dampers begin to open
from minimum position.
If the value of dbr varies slightly due to the path taken in the code, choose a nominal value for dbr. ADAPTM can handle
minor variations in the value of dbr.

der Damper end of range. This parameter, along with the Damper Beginning of Range (dbr), tells ADAPTM what percentage
of its output is used for mixed air damper control (free cooling). Damper End of Range also tells ADAPTM what
percentage of its output is used for cooling since der defines the beginning of the cooling coil range.
- This parameter can be a point name, local variable name, or decimal number.
- This value must be:
- Greater than or equal to dbr, and
- Less than or equal to 100.
- For applications with heating and dampers only (no cooling), set der to 100.
- For applications with heating and cooling only (no dampers), set der to the value of dbr.
- The end of the cooling range is assumed to be at the adaptive control output of 100%.
The following figure shows the relationship of der to the operation of the heating, dampers (for cooling), and cooling coil
outputs.

Typically, the value for der will be the same as the third parameter for the TABLE statement controlling the cooling coil.
If there are two cooling coil TABLE statements because there is an Economizer, choose the one for Economizer ON. For
example, as shown in the line of code below, this value is 65.
2060 TABLE (%X%VRT,%X%CCO,65,0,100,100)
If other PPCL code is used, der must still be the value of the output of ADAPTM at which mixed air dampers are fully open
and the cooling coil valve is just beginning to open.
If the value of der varies slightly due to the path taken in the code, choose a nominal value for der. ADAPTM can handle
minor variations in the value of der.

A6V10374898 2023-05-15 103 | 195


Chapter 3 - Command Syntax
ADAPTM (Adaptive control, multiple)

err Error reporting point. ADAPTM writes to this point. A zero means no error. A non-zero means an error.
- This parameter is entered as a point name or local variable name.

CAUTION
Each ADAPTM PPCL line of code must have its own unique error point.
Do not share one error point among multiple ADAPTM lines.

ADAPTM Example
The following example also includes an ADAPTS command for mixed air temperature.
2000 C ADAPTM CONTROL STATISTICS (LOGICAL
2002 C FIRMWARE)
2004 C DIRECT CONTROL LOOP
2006 C INPUT = %X%SAT
2008 C OUTPUT = %X%VRT
2010 C SETPOINT = %X%SAS
2012 C MA TEMP CNTRL OUTPUT = $MATCTL
2014 C MA MIN POSITION = %X%MAM
2016 C SAMPLE TIME = 5 SECONDS
2018 C GAIN = %X%KC1
2020 C DAMPER TIME CONSTANT = %X%TD1
2022 C HEATING TIME CONSTANT = %X%TH1
2024 C COOLING TIME CONSTANT = %X%TC1
2026 C HEATING END OF RANGE = 45.0
2028 C DAMPER BEGIN RANGE = 50.0
2030 C DAMPER END OF RANGE = 65.0
2032 C ERROR REPORT POINT = %X%ERR
2034 ADAPTM(%X%SAT,%X%VRT,%X%SAS,$MATCTL,
%X%MAM,5,%X%KC1,%X%TD1,%X%TH1,%X%TC1,
45.0,50.0,65.0,%X%ER1)
2036 C HEATING COIL SIGNAL
2038 TABLE (%X%VRT,%X%HCO,0,100,45,0)
2040 C DAMPER RAMP
2042 TABLE ($MADRMP,$MADRCT,0,0,10,%X%MAM, 180,100)
2044 C DAMPER CONTROL SIGNAL
2046 TABLE (%X%VRT,$MADCTL,50,%X%MAM,65,100)
2048 C MIXED AIR TEMPERATURE CONTROL LOOP
2050 IF($MADRCT.LT.$MATCTL) THEN GOTO 2056
2052 ADAPTS(%X%MAT,$MATCTL,%X%MLS,10,%X%KC2,
%X%TM2,0,30.0,130.0,0.0,100.0,0.0,0.0,%X%ER2)
2054 C ECONOMIZER CONTROL
2056 IF (%X%ECM .EQ. OFF) THEN GOTO 2072
2058 C COOLING COIL SIGNAL (ECON=ON)

104 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
ADAPTM (Adaptive control, multiple)

2060 TABLE (%X%VRT,%X%CCO,65,0,100,100)


2062 C FINAL DAMPER SIGNAL
2064 MIN (%X%MAO,$MADRCT,$MADCTL,$MATCTL)
2068 GOTO 2074
2070 C COOLING COIL SIGNAL (ECON=OFF)
2072 TABLE (%X%VRT,%X%CCO,55,0,100,100)
2074

Use
This statement is no longer supported in PXC.A devices. The PXC.A PPCL runtime will consider this statement
invalid, and no replacements have been provided.
Adaptive control technology is a closed loop control application, which automatically adjusts the automation station
operating parameters to compensate for changes that continuously occur during the normal building control
process. With adaptive control technology, tuning and retuning are not required.
Either the ADAPTM or ADAPTS control statement can be implemented as a one-line replacement for an existing
LOOP statement in PPCL.
ADAPTM is specifically designed for supply air temperature control in which two or three output devices are
controlled in sequence without overlap.
The output of ADAPTM is direct acting–it rises in value as the process variable rises. To control multiple outputs,
ADAPTM must be connected to TABLE statements with parameters set such that the mixed air damper output and
the cooling coil output have direct action, and the heating coil output has reverse action.
To be able to control, adaptive control requires that the loop be:
● Controllable–this means that the sensor is in the right range and the output is sufficient to bring the process
variable to setpoint.
● Open-loop Stable–this means that the process can achieve a steady state for every position of the final output
device. (All AHU loops are open-loop stable.)
● Direct or Reverse Acting–this means the process is either always direct or always reverse acting. That is, the
process does not change its action (direction or sign) within the control range.
● Modulating–this refers to the loop’s output device, such as a cooling coil with a modulating water valve. For
example, DX cooling or step controlled electric heat, cannot be controlled by the ADAPTM or ADAPTS
statements in PPCL.
● Not Excessive in Dead Time–this means that the total delay in the sensor and actuator signals should not
exceed two times the time constant of the process.

NOTE:
The Soft Controller does not support adaptive control technology.

See also the ADAPTS [➙ 109] and LOOP [➙ 146] topics.

A6V10374898 2023-05-15 105 | 195


Chapter 3 - Command Syntax
ADAPTM (Adaptive control, multiple)

tcd Example
The AHU has mixed air dampers, a heating coil, and a cooling coil.

The heating coil alone has a 5 second time constant. The cooling coil alone has a 20 second time constant. The
supply air temperature sensor time constant is 30 seconds. The damper actuator stroke time is 30 seconds.
Therefore, the damper time constant is:
Heating coil time constant: 5 seconds
Cooling coil time constant: 20
Supply air temp. sensor: 30
Damper actuator: 30
Total 85 seconds

tch Example
An AHU has a design CFM of 50000 and the design flow through the heating coil is 465 gpm. The heating coil
valve has a 30 second electric actuator. Downstream of the heating coil, there is a cooling coil with a time constant
(alone) of 33 seconds. The time constant of the heating coil alone is:

106 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
ADAPTM (Adaptive control, multiple)

The tch parameter entry into ADAPTM is:

Fig. 1:

tcc Example
An AHU has a design CFM of 15000 and the design flow through the cooling coil is 258 gpm. The cooling coil valve
has a 30 second electric actuator. Downstream of the cooling coil, there is a heating coil with a time constant
(alone) of 15 seconds. The time constant of the cooling coil alone is:

The tcc parameter entry into ADAPTM is:

A6V10374898 2023-05-15 107 | 195


Chapter 3 - Command Syntax
ADAPTM (Adaptive control, multiple)

108 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
ADAPTS (Adaptive control, single)

ADAPTS (Adaptive control, single)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Syntax
ADAPTS(pv,cv,sp,st,kc,tc,ra,llpv,hlpv,llcv,hlcv,edb,npv,err)

pv Process variable that is being controlled.


- This parameter can be a point name or local variable. It is usually an LAI point, but can be an LAO point–a calculated
point representing a temperature, flow rate, air velocity, etc.
- This value should be between llpv and hlpv.

cv Controlled variable (loop output). This signal is 0.0 to 100.0 percent, direct acting, and is intended to go to TABLE
statements–one for each output actuator point (for example, heating, dampers and cooling).
- This parameter can be a point name or local variable. It is usually an LAO point that represents an actuator signal.
sp Setpoint for the loop against which the process variable is compared.
- This parameter can be entered as a point name, local variable name, or decimal number.
- This value must be between llpv and hlpv, and should represent the same engineering units as the process variable.
st Sample time (in seconds). This is the time, in seconds, between two successive starts of execution of the ADAPTM
algorithm. It is also the time interval between two samples of data by ADAPTM.
- This parameter can be an integer, point name, or local variable name.
- The minimum sample time allowed is 1 second.
- The Sample Time must be less than or equal to one-third of the Time Constant. That is,

Where:
st is the Sample Time, and
tc is the Time Constant.
Suggested Sample Times
Temperature Loops (single input, single output)
- 5 seconds for fast loops;
- 10 seconds for slow loops.
Humidity Loops
- 5 to 10 seconds for return air or space loop;
- 1 or 2 seconds for a discharge air loop.
Flow and Static Pressure Loops
- 1 or 2 seconds

kc Control gain.
- This parameter can be a point name, local variable name, or decimal number.
- This value must be greater than 0.0.
- Since ADAPTS will adapt to the process it is controlling, set kc to 3.0 for both English and SI Unit applications.

A6V10374898 2023-05-15 109 | 195


Chapter 3 - Command Syntax
ADAPTS (Adaptive control, single)

tc Time constant (in seconds). The Time Constant value is a rough estimate of the time constant of the process.
- This parameter can be a point name, local variable name, or decimal number.
- This value must be greater than or equal to 3 times the st value. Note: Increasing the value of tc slows down the
adaptation process.
Cooling Coils
Use the following formula:

Where:
tc = ADAPTS cooling time constant parameter entry (in seconds).
CFMmax = Maximum or design airflow rate in cubic feet per minute.
L/s air max = Maximum or design airflow rate in liters per second.
GPMmax = Maximum or design chilled water flow rate in gallons per minute.
L/s chilled water max = Maximum or design chilled water rate in liters per second.
Tsensor = time constant of the supply air sensor; typically about 30 seconds.
Tcc actuator = stroke time of the cooling coil actuator; typically 30 seconds.
Heating Coils
Use the following formula:

Where:
tc = ADAPTS heating time constant parameter entry (in seconds).
CFMmax = Maximum or design airflow rate in cubic feet per minute.
L/s air max = Maximum or design airflow rate in liters per second.
GPMmax = Maximum or design hot water flow rate in gallons per minute.
l/s hot water max = Maximum or design hot water rate in liters per second.
Tsensor = time constant of the supply air sensor; typically about 30 seconds.
Thc actuator = stroke time of the heating coil actuator; typically 30 seconds.
Mixed Air Temperature
Use the following formula:
Where:
tc = ADAPTS mixed air temperature time constant parameter entry (in seconds); typically 40 seconds.

Tma sensor = time constant of the mixed air temperature sensor; typically about 30 seconds.
Tdamper actuator = stroke time of the mixed air damper actuator; typically 30 seconds.
Duct Static Pressure
- 6 seconds for small size systems,
- 10 seconds for medium size systems, and
- 20 seconds for large size systems.
Airflow Control
- 6 seconds for small size systems,
- 10 seconds for medium size systems, and
- 20 seconds for large size systems.
Duct Humidity Control
- 50 seconds for small size systems,
- 100 seconds for medium size systems, and
- 200 seconds for large size systems.
Cascade Control (setpoint reset)
For the return air/room air (outer/slow) temperature or humidity loop:
- 100 seconds for small size systems/rooms*,
- 250 seconds for medium size systems/rooms*, and
110 | 195 2023-05-15 A6V10374898
- 500 seconds for large size systems/rooms*.
* A full room should have a longer time constant than an empty room.
Chapter 3 - Command Syntax
ADAPTS (Adaptive control, single)

ra Reverse acting flag. This parameter defines the action of the ADAPTS controller.
- Reverse acting means cv (output) decreases as pv (input) increases.)
- This parameter can be an integer, point name, or local variable name.
- Valid values are 0 and 1.
1 = reverse acting
0 = direct acting
llpv Low limit of process variable. The llpv is typically the lowest value that the pv is expected to achieve. This value may differ
from the sensor’s low range.
- This parameter can be a point name, local variable name, or decimal number.
- This value must be less than hlpv.
hlpv High limit of process variable. The hlpv is typically the highest value that the pv is expected to achieve. This value may
differ from the sensor’s high range.
- This parameter can be a point name, local variable name, or decimal number.
- This value must be greater than llpv.
llcv Low limit of control variable. The llcv represents the low limit of the ADAPTS output.
- This parameter can be a point name, local variable name, or decimal number.
- This value must be less than hlcv.
- For electric actuators, typically llcv is 0.0% or 0.0 volts.
- For pneumatic actuators, typically llcv is the low end of the actuator spring range.
hlcv High limit of control variable. The hlcv represents the high limit of the ADAPTS output.
- This parameter can be a point name, local variable name, or decimal number.
- This value must be greater than llcv.
- For electric actuators, typically hlcv is 100.0% or 10.0 volts.
- For pneumatic actuators, typically hlcv is the high end of the actuator spring range.
edb Error deadband. This parameter determines how much error (process variable minus setpoint) must exist before ADAPTS
recalculates its output signal (control variable).
Noisy process variable signals can cause much actuator movement. Setting edb to a value equal to that of the noise will
eliminate unnecessary actuator movement. Thus, actuator repositioning, and actuator life, can be affected by the use of
this parameter.
- This parameter can be a point name, local variable name, or decimal number.
- This value must be greater than or equal to 0.0.
- The drawback when setting edb to a non-zero value is lack of control accuracy when near setpoint. The effective setpoint
becomes the value of parameter sp +/- edb.
- Initially set edb to the loop’s maximum allowable setpoint tolerance.
- For temperature and humidity loops, edb can be very low–even 0.0 is acceptable.
- For static pressure and flow loops, start with 1% to 3% of the maximum input value.
- If small actuator oscillations are observed, edb can be increased in value until the maximum setpoint tolerance is
reached.

npv Noisy process variable. Noisy means that the value of the process variable jumps up or down abruptly from one sensor
scan to another.
Some processes inherently create a noisy process variable signal. An airflow signal, for example, can be very noisy at the
low end of its sensor range due to a lack of resolution. Other processes can be noisy under certain conditions. For
example, a static pressure signal can be noisy at certain fan speeds and with a certain sensor positioned too close to the
fan.
- This parameter can be an integer, point name, or local variable name.
- In general, follow these rules:
- npv = 1 (noisy) for a loop with a very noisy pv, such as airflow or static pressure control. Adaptation is slowed with
npv = 1.
- npv = 0 (not noisy) for a loop with a pv that is not noisy or only a little noisy, such as temperature control or
humidity control.

A6V10374898 2023-05-15 111 | 195


Chapter 3 - Command Syntax
ADAPTS (Adaptive control, single)

err Error reporting point. ADAPTS writes to this point.


- This parameter is entered as a point name or local variable name.
- A zero indicates no error.
- A non-zero indicates an error.

CAUTION
Each ADAPTS PPCL line of code must have its own unique error point.
Do not share one error point among multiple ADAPTM lines.

ADAPTS Example
The following example also includes an ADAPTS command for mixed air temperature.
2000 C ADAPTS CONTROL STATISTICS (LOGICAL
2002 C FIRMWARE) STATIC PRESSURE CONTROL
2004 C DIRECT CONTROL LOOP
2006 C INPUT = %X%SSP
2008 C OUTPUT = %X%LP1
2010 C SETPOINT = %X%SSS
2012 C SAMPLE TIME = 1 SECOND
2014 C GAIN = %X%KC
2016 C TIME CONSTANT = %X%TC
2018 C REVERSE ACTING FLAG = 1
2020 C LOW LIMIT OF INPUT = -0.1
2022 C HIGH LIMIT OF INPUT = 5.0
2024 C LOW LIMIT OF OUTPUT = 0.0
2026 C HIGH LIMIT OF OUTPUT = 100.0
2028 C ERROR DEADBAND = %X%DB1
2030 C NOISY PROCESS VARIABLE = %X%NP1
2034 C ERROR REPORT POINT = %X%ERR
2036 IF(%X%RP1.LT.%X%LP1) THEN GOTO 2042
2038 ADAPTS(%X%SSP,%X%LP1,%X%SSS,1,%X%KC,
%X%TC,1,-0.1,5.0,0.0,100.0,%X%DB1,
%X%NP1,%X%ERR)
2040 C SUPPLY FAN RAMP
2042 TABLE ($SPFRMP,%X%RP1,0,0,180,100)
2044 C SUPPLY FAN VFD SIGNAL
2046 MIN (%X%SVO,%X%LP1,%X%RP1)
......

Use
This statement will not be supported in PXC.A automation stations. The PXC.A PPCL runtime will consider this
statement invalid, and no replacements have been provided.

112 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
ADAPTS (Adaptive control, single)

Adaptive control technology is a closed loop control application, which automatically adjusts the automation station
operating parameters to compensate for changes that continuously occur during the normal building control
process. With adaptive control technology, tuning and retuning are not required.
Either the ADAPTM or ADAPTS control statement can be implemented as a one-line replacement for an existing
LOOP statement in PPCL.
ADAPTS is a general purpose single input, single output controller for both linear and non-linear processes.
Example applications are mixed air temperature, static pressure, return airflow, and humidity control.
To be able to control, adaptive control requires that the loop be:
● Controllable–this means that the sensor is in the right range and the output is sufficient to bring the process
variable to setpoint.
● Open-loop Stable–this means that the process can achieve a steady state for every position of the final output
device. (All AHU loops are open-loop stable.)
● Direct or Reverse Acting–this means the process is either always direct or always reverse acting. That is, the
process does not change its action (direction or sign) within the control range.
● Modulating–this refers to the loop’s output device, such as a cooling coil with a modulating water valve. For
example, DX cooling or step controlled electric heat, cannot be controlled by the ADAPTM or ADAPTS
statements in PPCL.
● Not Excessive in Dead Time–this means that the total delay in the sensor and actuator signals should not
exceed two times the time constant of the process.

NOTE:
The Soft Controller does not support adaptive control technology.

See also the ADAPTM and LOOP topics.

llpv Example 1
For static pressure control, enter a small negative value (-0.1) to cover the possibility of a miscalibrated sensor or
small negative air pressures when the fan is off.

llpv Example 2
For supply air temperature control with mixed air dampers, use 30°F or 0°C. The mixed air dampers should prevent
any lower temperatures from entering the supply duct even if the heating coil is not operating or hot water is
absent.

hlpv Example 1
For static pressure control, enter the highest pressure that will occur in the supply duct. The highest pressures
occur on startup and when there are large upsets.

hlpv Example 2
For supply air temperature control, use 130°F or 55°C.

A6V10374898 2023-05-15 113 | 195


Chapter 3 - Command Syntax
ALARM (Alarm state)

ALARM (Alarm state)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Syntax
ALARM(line1,...,line16)

line1 through Name of a point to be placed into the ALARM state.


line16 - Local variables cannot be used.

Use
This statement will not be supported in PXC.A automation station. The PXC.A PPCL runtime will consider this
statement invalid, and no replacements have been provided.
For PXC.A devices, commanding into and out of alarm state is not supported.
Forces the specified points into the ALARM state.
A maximum of 16 points can be changed with one ALARM command.
Example
100 IF (ROOM.GT.80.0) THEN ALARM(ROOM25)

Notes
● Points must reside in the same device as the program.
● Do not use ALARM to command points over the network.
● Points must be defined as alarmable and be enabled for alarming in order to be placed into the alarm-by-
command state.
● The status *AC* is displayed when a point is commanded to the ALARM state.
See also the DISALM [➙ 123], ENALM [➙ 129], HLIMIT [➙ 140], LLIMIT [➙ 144], and NORMAL [➙ 150] topics.

114 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
AUTO (Auto status)

AUTO (Auto status)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
AUTO(line1,...,line16)

line1 through Name of a point to be set to AUTO status.


line16 - This parameter must be a LOOAL or LOOAP point type.

Use
For PXC.A devices, this statement has been replaced with SET (Set point value) [➙ 167].
Changes the operational status of an ON/OFF/AUTO point to AUTO.
A maximum of 16 points can be changed with one AUTO command.
Example
100 AUTO(EFAN1,EFAN2,EFAN3)
See also the FAST [➙ 132], OFF [➙ 151], ON [➙ 154], and SLOW [➙ 170] topics.

DAY (Day mode)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
DAY(line1,...,line16)

line1 through Name of a point to be set to DAY mode.


line16 - This parameter must be a logical controller (LCTLR) point type.

Use
For PXC.A devices, this statement has been replaced with SET (Set point value) [➙ 167]
Changes a LCTLR point to DAY mode status.
A maximum of 16 points can be changed with one DAY command.
Example
100 IF (TIME.LT.7:00.OR.TIME.GT.18:00) THEN NIGHT(LCTLR2) ELSE DAY(LCTLR2)

Notes
For some equipment controllers, DAY mode is also referred to as OCC (occupied) mode. If an equipment controller
is in OCC mode, PPCL recognizes this status as DAY.
See also the NIGHT [➙ 149] topic.

A6V10374898 2023-05-15 115 | 195


Chapter 3 - Command Syntax
DBSWIT (Dead band switch)

DBSWIT (Dead band switch)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
DBSWIT(type,input,low,high,pt1,...,pt12)

type The type of dead band switch action.


- Valid values are 0 and 1.
0 = All output points (pt1,...,pt12) are commanded ON when the input point value rises above the high limit, and are
commanded OFF when the input point value falls below the low limit.
1 = All output points (pt1,...,pt12) are commanded ON when the input point value falls below the low limit, and are
commanded OFF when the input point value rises above the high limit.
Input Point name of the variable being controlled.
- This parameter is usually an analog point, but it can also be a local variable.
low The low temperature at which a switching action occurs.
- This parameter can be an integer, point name, local variable name, or decimal number.
high The high temperature at which a switching action occurs.
- This parameter can be an integer, point name, local variable name, or decimal number.
pt1 through pt12 Name of an output point to be turned ON and OFF.
- Local variables can be used.

Use
Provides the ON/OFF switching action of an output point. This is the software equivalent of a thermostat.
● A maximum of 12 points can be controlled with one DBSWIT command.
● The operational status of the point is regulated by an analog point using a predefined dead band.
Example 1
200 DBSWIT(1,RMTEMP,LDBAND,HDBAND,SFAN,RFAN)
Example 2
200 DBSWIT(1,RMTEMP,55,58,SFAN,RFAN)

Notes
The ACT and ENABLE commands can be used interchangeably.
See also the DEACT [➙ 120], DISABL [➙ 122], and ENABLE [➙ 128] topics.

116 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
DC (Duty cycle)

DC (Duty cycle)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
DC(pt1,pat1,...,pt8,pat8)

pt1 through pt8 Name of the output points to be duty cycled.


- This parameter can be an LDO, LOOAL, LOOAP, L2SL, or L2SP point type.
- Local, virtual, and physical points are valid for pt1, pt2, pt3, and pt4.
pat1 through pat8 Hourly pattern that describes how the point is duty cycled.
- This parameter can be a local, physical, or virtual point, as well as an integer.
- This pattern is a four-digit code using the numbers 0 through 7.
- Each digit represents the on/off pattern for one 15-minute segment of an hour. Table 3-1 lists the numeric codes and
their ON/OFF patterns.

Table 3-1. Duty Cycle Patterns and Numerical Codes.


Point Status During this Time Code Number for this 15-minute On/Off
Pattern
First 5 minutes Second 5 minutes Third 5 minutes
OFF OFF OFF 0
ON OFF OFF 1
OFF ON OFF 2
ON ON OFF 3
OFF OFF ON 4
ON OFF ON 5
OFF ON ON 6
ON ON ON 7

Use
Coordinates the operation of all available equipment to compensate for additional equipment capacity that is not
normally needed. During normal system operation, some equipment is cycled off for short periods of time to
distribute equipment wear and reduce operating costs.
A maximum of 8 points can be controlled with one DC command.
Do the following to create a duty cycle pattern:
1. Divide one-hour into four 15-minute segments.
2. Determine the ON/OFF state for each 5-minute increment of the segment.
3. Using Table 3-1, assign a number to represent the ON/OFF pattern for each 15-minute segment.
4. After the patterns are defined, enter the code numbers in reverse order. The right-most digit defines the first 15-
minute segment of the hour. The left-most digit defines the last 15-minute segment of the hour.

A6V10374898 2023-05-15 117 | 195


Chapter 3 - Command Syntax
DC (Duty cycle)

Example

1000 C THIS DC COMMAND DUTY CYCLES HFAN

1010 C ACCORDING TO THE FOLLOWING SCHEDULE:


1020 C
1030 C FIRST 15 MINUTES – ON, OFF, OFF (1)

1040 C SECOND 15 MINUTES – OFF, OFF, OFF (0)


1050 C THIRD 15 MINUTES – OFF, OFF, OFF (0)
1060 C FOURTH 15 MINUTES – ON, ON, ON (7)

1070 C
1100 DC(HFAN,7001)

Notes
The DC command has a priority of NONE. Therefore, the PPCL program must be structured with IF/THEN/ELSE
commands to prevent conflicts between DC and other commands with the same priority.
See also the DCR [➙ 119] topic.

118 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
DCR (Duty cycle routine)

DCR (Duty cycle routine)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
DCR(pt1,temp1,high1,low1,...,pt4,temp4,high4,low4)

pt1 through pt4 Point names of the output points to be duty cycled.
- This parameter can be an LDO, logical, physical, or virtual point type.
temp1 through Point names of the space temperature points.
temp4
high1 through High temperature limits of the space points.
high4 - This parameter can be a decimal, integer, point name, or local variable.
low1 through low4 Low temperature limits of the space points.
- This parameter can be a decimal, integer, point name, or local variable.

Use
Duty cycles an output point to keep a corresponding temperature within the low and high values of a dead band.
● Makes an ON/OFF decision every 5 minutes according to the value of the parameters.
– The output point is commanded ON when the temperature point value is above the high limit or below the
low limit.
– The output point is commanded OFF when the temperature point value is within the range of the high and
low limits.
● For each point, a space temperature, high temperature, and low temperature parameter must be defined.
● A maximum of 4 points can be controlled with one DCR command.
Example
200 C THIS COMMAND WILL TURN ON IF
210 C SFAN'S VALUE FALLS BELOW 68 OR
220 C RISES ABOVE 78. THE POINT SFAN01
230 C WILL REMAIN ON/OFF FOR AT LEAST 5
240 C MINUTES ON EACH CYCLE.
250 DCR(SFAN01,RM109,78.0,68.0)

Notes
The DCR command has a priority of NONE. Therefore, the PPCL program must be structured with IF/THEN/ELSE
commands to prevent conflicts between DCR and other commands with the same priority.
See also the DC [➙ 117] topic.

A6V10374898 2023-05-15 119 | 195


Chapter 3 - Command Syntax
DEACT (Deactivate lines)

DEACT (Deactivate lines)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
DEACT(line1,...,line16)

line1 through Valid PPCL line numbers.


line16 - Line numbers must be entered as integers ranging from 1 to 32767.
- A range of PPCL lines cannot be defined using the DEACT command.

Use
For PXC.A devices, this statement has been replaced with GOTO( ) [➙ 139], GOSUB( ) [➙ 134] and RETURN( )
[➙ 165].
Disables lines of PPCL code to prevent them from being examined or executed.
● The DEACT command only affects the lines of PPCL program for the device where the program resides.
● DEACT only disables PPCL lines that are specifically defined in the command.
● A maximum of 16 lines of PPCL code can be controlled with one DEACT command.
Example
100 IF (TIME.GT.8:00.AND.TIME.LE.17:00) THEN
ACT(120,130) ELSE DEACT(120,130)

Notes
The DEACT and DISABLE commands can be used interchangeably.
See also the ACT [➙ 99], DISABL [➙ 122], and ENABLE [➙ 128] topics.

120 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
DEFINE (Define abbreviation)

DEFINE (Define abbreviation)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Syntax
DEFINE(abbrev,string)

abbrev Abbreviation used in other PPCL statements. Represents the string parameter

string Actual text string that will be substituted where the abbreviation is used. The string text usually contains a significant
portion of a long point name.

Use
Creates an abbreviated notation for a long point name. DEFINE allows program logic to be easily duplicated
provided your facility uses a structured naming convention for point names.
A percentage sign (%) must be placed before and after the abbreviation when it is used in the program.
For PXC.A controllers, it is recommended to use GOTO (Go to line) [➙ 139].
Example
10 DEFINE(AHU,”BUILDING1.AHU01.”)
20 ON(“%AHU%SFAN”)
If DEFINE is not used, this same line of code looks like the following:
20 ON(“BUILDING1.AHU01.SFAN”)

Notes
This statement is executed when added to the automation station and does not require enabling or execution in the
normal program flow.
Abbreviation texts that begin with C will fail to compile.

A6V10374898 2023-05-15 121 | 195


Chapter 3 - Command Syntax
DISABL (Disable lines)

DISABL (Disable lines)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
DISABL(line1,...,line16)

line1 through Valid PPCL line numbers.


line16 - Line numbers must be entered as integers ranging from 1 to 32767.
- A range of PPCL lines cannot be defined using the DISABL command.

Use
Disables lines of PPCL code to prevent them from being examined or executed.
● The DISABL command only affects the lines of PPCL program for the device where the program resides.
● DISABL only disables PPCL lines that are specifically defined in the command.
● A maximum of 16 lines of PPCL code can be controlled with one DISABL command.
Example
100 IF (TIME.GT.8:00.AND.TIME.LE.17:00) THEN
ENABLE(120,130) ELSE DISABL (120,130)

Notes
The DEACT and DISABL commands can be used interchangeably.
See also the ACT [➙ 99], DEACT [➙ 120], ENABLE [➙ 128], and Redundant PPCL Statements [➙ 14] topics.

122 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
DISALM (Disable alarm)

DISALM (Disable alarm)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
DISALM(pt1,...,pt16)

pt1 through pt16 Point name that should not report alarms.

Use
For PXC.A devices, this statement has been replaced with SETVAL (Write property values).
Disables alarm reporting for the specified points.
A maximum of 16 points can be controlled with one DISALM command.
Example
50 IF (SFAN.EQ.OFF) THEN DISALM(ROOM1) ELSE ENALM(ROOM1)

Notes
● Points must reside in the same device as the program.
● Do not use DISALM to disable alarm reporting over the network.
● The status *PDSB* is displayed when a point is commanded to the DISALM state.
● For BACnet firmware, all three alarm events are disabled; that is, OFFNORMAL, NORMAL, and FAULT.
See also the ALARM [➙ 114], ENALM [➙ 129], HLIMIT [➙ 140], LLIMIT [➙ 144], and NORMAL [➙ 150] topics.

A6V10374898 2023-05-15 123 | 195


Chapter 3 - Command Syntax
DISCOV (Disable COV)

DISCOV (Disable COV)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Syntax
DISCOV(pt1,...,pt16)

pt1 through pt16 Point name that should not report updated changes-of-value (COV).

Use
This statement will not be supported in PXC.A automation stations. The PXC.A PPCL runtime will consider this
statement invalid, and no replacements have been provided.
Stops devices from reporting updated values (COVs) to the Insight workstation. When this command is executed,
all operations that use COVs to function will stop.
Until the points defined in this command are enabled, updates to graphics, archiving, COV printing, alarming, and
in some cases evaluation of equations, will stop.
A maximum of 16 points can be controlled with one DISCOV command.
Example
50 IF (SFAN.EQ.OFF) THEN DISCOV(ROOM1, ROOM2) ELSE ENCOV(ROOM1,ROOM2)

Notes
Points defined in the statement must reside in the same device as the DISCOV command.
See also the ENCOV [➙ 130] topic.

124 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
DPHONE (Disable phone)

DPHONE (Disable phone)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Syntax
DPHONE(pn#1,...,pn#16)

pn#1 through Telephone ID numbers that are defined in the device.


pn#16

Use
This statement will not be supported in PXC.A automation stations. The PXC.A PPCL runtime will consider this
statement invalid, and no replacements have been provided.
Disables telephone ID numbers. The telephone ID number is a numeric code that represents the actual telephone
number defined in the device.
A maximum of 16 telephone number IDs can be disabled with one DPHONE command.
Example
532 DPHONE(1,2,3,5,6)

Notes
Do not use the DPHONE command over the network.
See also the EPHONE [➙ 131] topic.

EMAUTO (Emergency, Auto status)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
EMAUTO(pt1,...,pt16)

pt1 through pt16 Point name to be set to AUTO status with emergency priority.
- This parameter can be a LOOAL or LOOAP point.

Use
For PXC.A devices, this statement has been replaced with SET (Set point value).
Changes the operational status of an ON/OFF/AUTO point to AUTO (local control) with emergency priority.
A maximum of 16 points can be changed with one EMAUTO command.
See also the EMFAST [➙ 126], EMOFF [➙ 126], EMON [➙ 127], and EMSET [➙ 127] topics.

A6V10374898 2023-05-15 125 | 195


Chapter 3 - Command Syntax
EMFAST (Emergency, Fast status)

EMFAST (Emergency, Fast status)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
EMFAST(pt1,...,pt16)

pt1 through pt16 Point name to be set to FAST status with emergency priority.
- This parameter can be a LFSSL or LFSSP point.

Use
For PXC.A devices, this statement has been replaced with SET (Set point value).
Changes the operational status of a FAST/SLOW/ STOP point to FAST with emergency priority.
A maximum of 16 points can be changed with one EMFAST command.
See also the EMAUTO [➙ 125], EMOFF [➙ 126], EMON [➙ 127], EMSET [➙ 127], and EMSLOW [➙ 128] topics.

EMOFF (Emergency, Off status)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
EMOFF(pt1,...,pt16)

pt1 through pt16 Point name to be set to OFF status with emergency priority.
- This parameter can be a LDI, LDO, LFSSL, LFSSP, LOOAL, LOOAP, L2SL, or L2SP point.

Use
For PXC.A devices, this statement has been replaced with SET (Set point value).
Changes the operational status of the specified points to OFF with emergency priority.
A maximum of 16 points can be changed with one EMOFF command.
See also the EMAUTO [➙ 125], EMFAST [➙ 126], EMON [➙ 127], EMSET [➙ 127], and EMSLOW [➙ 128]
topics.

126 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
EMON (Emergency, On status)

EMON (Emergency, On status)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
EMON(pt1,...,pt16)

pt1 through pt16 Point name to be set to ON status with emergency priority.
- This parameter can be a LDI, LDO, L2SL, L2SP, LOOAL, or LOOAP point.

Use
For PXC.A devices, this statement has been replaced with SET (Set point value).
Changes the operational status of the specified points to ON with emergency priority.
A maximum of 16 points can be changed with one EMON command.
See also the EMAUTO [➙ 125], EMFAST [➙ 126], EMOFF [➙ 126], EMSET [➙ 127], and EMSLOW [➙ 128]
topics.

EMSET (Emergency, set value)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
EMSET(value,pt1,...,pt15)

value Value to which points are commanded.


- This value can be a decimal, integer, point name, or local variable.
pt1 through pt15 Point name to be set to the specified value with emergency priority.
- This parameter can be a LAI or LAO point.

Use
For PXC.A devices, this statement has been replaced with SET (Set point value) [➙ 167].
Changes output points to a new value with emergency priority.
A maximum of 15 points can be changed with one EMSET command.
See also the EMAUTO [➙ 125], EMFAST [➙ 126], EMOFF [➙ 126], EMON [➙ 127], and EMSLOW [➙ 128]
topics.

A6V10374898 2023-05-15 127 | 195


Chapter 3 - Command Syntax
EMSLOW (Emergency, Slow status)

EMSLOW (Emergency, Slow status)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
EMSLOW(pt1,...,pt16)

pt1 through pt16 Point name to be set to SLOW status with emergency priority.
- This parameter can be a LFSSL or LFSSP point

Use
For PXC.A devices, this statement has been replaced with SET (Set point value) [➙ 167].
Changes the operational status of a FAST/SLOW/ STOP point to SLOW with emergency priority.
A maximum of 16 points can be changed with one EMSLOW command.
See also the EMAUTO [➙ 125], EMFAST [➙ 126], EMOFF [➙ 126], EMON [➙ 127], and EMSET [➙ 127] topics.

ENABLE (Enable lines)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Syntax
ENABLE(line1,...,line16)

line1 through Valid PPCL line numbers.


line16 - Line numbers must be entered as integers ranging from 1 to 32767.
- A range of PPCL lines cannot be defined using the ENABLE command.
- Each PPCL line must be specified separately.

Use
Enables lines of PPCL so they can be examined or executed.
● The ENABLE command only affects the lines of PPCL program for the device where the program resides.
● ENABLE only enables PPCL lines that are specifically defined in the command.
● A maximum of 16 lines of PPCL code can be controlled with one ENABLE command.
Example
100 IF (TIME.GT.8:00.AND.TIME.LT.17:00) THEN
ENABLE(120) ELSE DISABL(120)

Notes
The ACT and ENABLE commands can be used interchangeably.
See also the ACT [➙ 99], DEACT [➙ 120], DISABL [➙ 122] Redundant PPCL Statements [➙ 14] topics.

128 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
ENALM (Enable alarm)

ENALM (Enable alarm)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
ENALM(pt1,...,pt16)

pt1 through pt16 Point name that should have alarm reporting enabled.

Use
For PXC.A devices, this statement has been replaced with SETVAL (Write property values).
Enables alarm reporting for the specified points.
A maximum of 16 points can be enabled for alarm reporting with one ENALM command.
Example
50 IF (SFAN.EQ.ON) THEN ENALM(ROOM1) ELSE DISALM(ROOM1)

Notes
Points must reside in the same device as the program.
● This command reverses the DISALM command.
● Points must be set up for alarming and have the ability to report alarms.
● This command does not override *ODSB*.
● For BACnet firmware, all three alarm events are enabled; that is, OFFNORMAL, NORMAL, and FAULT.
See also the ALARM [➙ 114], DISALM [➙ 123], HLIMIT [➙ 140], LLIMIT [➙ 144], and NORMAL [➙ 150] topics.

A6V10374898 2023-05-15 129 | 195


Chapter 3 - Command Syntax
ENCOV (Enable COV)

ENCOV (Enable COV)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Syntax
ENCOV(pt1,...,pt16)

pt1 through pt16 Point name that is enabled to report updated changes-of-value (COV.

Use
This statement is no longer supported in PXC.A devices. The PXC.A PPCL runtime will consider this statement
invalid, and no replacements have been provided.
Enables devices to report change-of-value (COV) information to other nodes. When this command is executed, all
operations that use COVs to function will start reporting.
Unless the points defined in this command are disabled, updates to graphics, archiving, COV printing, alarming,
and in some cases evaluation of equations are reported.
● Points defined in the statement must reside in the same device as the command.
● A maximum of 16 points can be controlled with one ENCOV command.
Example
50 IF (SFAN.EQ.ON) THEN ENCOV(ROOM1, ROOM2)
ELSE DISCOV(ROOM1,ROOM2)
See also the DISCOV [➙ 124] topic.

130 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
EPHONE (Enable phone)

EPHONE (Enable phone)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Syntax
EPHONE(pn#1,...,pn#16)

pn#1 through Telephone ID numbers that are defined in the device.


pn#16

Use
This statement is no longer supported in PXC.A devices. The PXC.A PPCL runtime will consider this statement
invalid, and no replacements have been provided.
Enables telephone ID numbers. The telephone ID number is a numeric code that represents the actual telephone
number defined in the device.
A maximum of 16 telephone number IDs can be enabled with one EPHONE command.
Example
530 EPHONE(1,2,3,5,6)

Notes
Do not use the EPHONE command over the network.
See also the DPHONE [➙ 125] topic.

A6V10374898 2023-05-15 131 | 195


Chapter 3 - Command Syntax
FAST (Fast status)

FAST (Fast status)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
FAST(pt1,...,pt16)

pt1 through pt16 Point name to be set to FAST status.


- This parameter can be a LFSSL or LFSSP point.

FAST(@prior, pt1,...,pt15))

@prior Defines a specific point priority.


pt1 through pt16 Point name to be set to FAST status.
- This parameter can be a LFSSL or LFSSP point.

Use
Changes the operational status of a FAST/SLOW/STOP point to FAST.
● Acceptable point types are: LFSSL or LFSSP.
● A maximum of 16 points can be changed with one FAST command.
● A maximum of 15 points can be defined with one FAST(@prior…) command.
Example
10 IF (RMTEMP.GT.78.0)THEN FAST(@NONE, FAN1,FAN2)
See also the AUTO [➙ 115], OFF [➙ 151], ON [➙ 154], and SLOW [➙ 170] topics.

132 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
GETVAL (Read property values)

GETVAL (Read property values)


Syntax
Unitary Pre-APOGEE APOGEE BACnet PXC.A

GETVAL(targObjRef)

targObjRef A specifier for the target object, using the format for an object reference (for
example, BAC_7_AO_11, KwMeter). The value read from the source object
property will be written to the target object's present value property.

GETVAL(srcObjRef)

srcObjRef A specifier for the source object, using the format for an object reference (for
example, BAC_7_AO_11, KwMeter).

GETVAL(srcPropSpec)

srcPropSpec A specifier for the property to be read from the source object. srcPropSpec may
be passed in as:
- A numeric BACnetPropertyIdentifier from the standard range or a proprietary
range
- An abbreviated property name

GETVAL(srcIndex)

srcIndex An optional specifier for the target object(s) of the write operation. Between 1-
14 objects may be specified. The same property will be written in each target
object. An objectRef may be passed in using the format for an object reference
(for example, BAC_7_AO_11, KwMeter).

Use
GetVal is a new statement that allows PPCL access to individual object properties and supports either a numeric
property number or a textual property short name. Note that only properties with numeric data types or arrays of
numeric data types can be read or written in PPCL programs. The PPCL engine will handle conversions between
numeric types (Real, Unsigned, Integer).
Example
To read the reliability value from object RoomTemp10 GetVal(TheRoomTemp, [Room101]RoomTemp), Rlb in
device Room101 and save it as the present-value of local object TheRoomTemp:
10 GetVal(TheRoomTemp, [Room101]RoomTemp), Rlb
To read priority slot 5 from object RoomTemp in device Room101 and save it in local object TheLockVal:
10 GetVal(TheLockVal, [Room101]RoomTemp, PrioArr, 5)

Notes
Only properties of numeric data types can be read using GetVal.
See Appendix B−Property Short Names, Numbers, and Descriptions [➙ 190].

A6V10374898 2023-05-15 133 | 195


Chapter 3 - Command Syntax
GOSUB (Go to subroutine)

GOSUB (Go to subroutine)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
GOSUB line# (pt1,...,pt15)
or parentheses are optional
GOSUB line# pt1,...,pt15

line# Indicates which program command line number should be executed next (that is, where the subroutine starts).
- Line numbers must be entered as integers ranging from 1 to 32767.
pt1 through pt15 Point name or local variables whose values are to be passed to the subroutine.
- This parameter can be omitted if the subroutine does not use variable arguments

Use
Subroutines are particularly useful for programs in which the same calculation is carried out several times using
different values.
The main subroutine commands, GOSUB and RETURN are required for all subroutines. When this command is
executed, the line specified in the GOSUB command is the next line evaluated. When the computer encounters the
RETURN command, the next line evaluated is the line following the GOSUB statement.
The variable parameters in a subroutine are designated by the local variables $ARG1 through $ARG15. These
variables can be used by PPCL code in the subroutine in the same way that point names and constants are used.
Multiple-Level Subroutines
A multiple-level subroutine is a block of program code that is called from within another subroutine. Each call made
within a subroutine constitutes a level. You are limited to a total of eight levels.
When using multi-level subroutines, the rules that govern $ARGn variables and point name declarations for
GOSUB commands change as follows:
● $ARGn variables used in multi-level subroutines cannot be shared between subroutine levels. That is, you
cannot assign the value of PT1 to $ARG1 in the call to level one and then assign the value of PT2 to $ARG1 in
the call to level two.
● When defining a new level in a multi-level subroutine, list the previously-defined $ARGn variables in sequential
order to preserve their values.
● Any new points declared in that level must be placed after the $ARGn variables. For example, in the third level
of a multi-level subroutine, $ARG1 and $ARG2 would be redefined before the defining the new value of PT3.
● If a previously-defined $ARGn variable is not redefined in the call to a new level, any values introduced in the
new level replace the values in $ARGn.
Subroutine Examples
To explain the concept of subroutine program control, two examples of program code are provided in this section:
● Program flow sequence
● Multiple level subroutines
Program Flow Sequence
This example demonstrates how a number of PPCL commands are used in subroutines. Refer to Figure 3-1 as you
follow the program flow sequence.
● The variables PT1 and PT2 demonstrate the passing of values between subroutines.
● The $ARG local variable demonstrates how values are passed between subroutines.
● The GOTO command, which is used to bypass subroutines, is also shown in this example.

134 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
GOSUB (Go to subroutine)

The program flow through one complete pass is as follows:


1. At line 130, the GOSUB command transfers control to line 1010.
2. At line 1010, the program assigns a value of 10 to PT1 and the value of 20 to PT2. Line 1030 branches back to
the line after the GOSUB command (at line 130). After the program returns to the main line code, the values of
the two points become: PT1 = 10 PT2 = 20
3. The program continues to sequentially evaluate program lines until it encounters the GOSUB command at line
300. The program branches to line 2010. This command also defines two values that are passed (PT1 and
PT2).
4. At line 2010, a $ARGn point is assigned a value. When the program encounters a $ARGn point, it checks the
calling GOSUB command for point names. The GOSUB command used to call this subroutine contains two
point names. When the program encounters the first $ARGn variable at line 2010, it takes the first point name
defined in the GOSUB command (PT1) and stores that value in $ARG1 (10). Line 2010 also adds one (1) to the
value of $ARG1. When the program encounters the second $ARGn variable at line 2020, it takes the second
point name defined in the GOSUB command (PT2) and stores that value in $ARG2 (20). Line 2020 also adds
one (1) to the value of $ARG2. Line 2030 returns control of the program to the line after the GOSUB command
(at line 300). At line 400, the program executes the GOTO command to line 3000 that returns control back to
mainline code.
5. After one pass of the program, the values of the points after being updated by the $ARGn variables, will be as
follows: PT1 = 11 PT2 = 21
100 C MAINLINE PROGRAM FOR LOGICAL FIRMWARE
110 C LEARNING HOW TO USE GOSUB, RETURN, AND
112 C $ARG COMMANDS.***
120
130 GOSUB 1010
...
...
...
300 GOSUB 2010 PT1, PT2
...
...
...
400 GOTO 3000

1000 C --SUBROUTINE 1
1001 C THIS SUBROUTINE ASSIGNS NUMBERS
1002 C TO PT1 AND PT2. IT THEN RETURNS
1004 C CONTROL TO THE MAIN PROGRAM.
1008 C
1010 PT1 = 10
1020 PT2 = 20
1030 RETURN

2000 C --SUBROUTINE 2
2001 C THIS SUBROUTINE PASSES THE VALUE OF
2002 C PT1 AND PT2 TO THEIR RESPECTIVE $ARG
2003 C POINTS. IT THEN ADDS ONE TO BOTH $ARG
2004 C POINTS AND RETURNS THE NEW VALUES TO

A6V10374898 2023-05-15 135 | 195


Chapter 3 - Command Syntax
GOSUB (Go to subroutine)

2005 C PT1 AND PT2.


2006 C
2010 $ARG1 = $ARG1 + 1
2020 $ARG2 = $ARG2 + 1
2030 RETURN

3000 C WHEN THE SUBROUTINE IS FINISHED


3002 C EXECUTING, THE PROGRAM RETURNS TO
3004 C MAINLINE CODE.
Figure 3-1. Example Program with Two Subroutines.
Multiple-Level Subroutines
The following example demonstrates the use of $ARGn variables and point declarations used in multiple-level
subroutines.
This example demonstrates a method for preserving the values of $ARGn variables as program control is
transferred among subroutines. The example program contains a main line section of program code and three
subroutines. Refer to Figure 3-2 as you follow the program flow sequence.
The program flow through one complete pass is as follows:
1. At line 1500, the GOSUB command transfers control to line 2030 and passes the value defined in PT1 to
$ARG1 in the subroutine.
2. While executing the first subroutine, the program encounters a call to a second subroutine at line 2500.
● Since the GOSUB command at line 2500 is defined within another subroutine, this command must redefine
$ARG1 in order to preserve the value from the GOSUB command at line 1500.
● If $ARG1 is not redefined in the call to the second subroutine, any value introduced in the second subroutine
replaces the value in $ARG1.
● The new value introduced in the second subroutine (PT2 in the example) is defined after the $ARG1 variable.
● As the program works with the variables $ARG1 and PT2 in the second subroutine, $ARG1 continues to
represent the value of PT1, while $ARG2 represents the value of PT2.
1. At line 3200, the second subroutine calls a third subroutine.
● Since the GOSUB command at line 3200 is defined within two other subroutines, this command must redefine
both $ARG1 and $ARG2 in order to preserve their values.
● Note that $ARG1 and $ARG2 are placed in the same order in which they were originally defined.
● Line 3200 also defines a new point called PT3. Note that PT3 is placed after the two $ARGn variables.
● As the program branches from the second subroutine to the third subroutine, $ARG1 and $ARG2 continue to
represent PT1 and PT2 respectively.
1000 C MAINLINE PROGRAM FOR LOGICAL FIRMWARE
1010 C
1020 C THIS PROGRAM TEACHES HOW GOSUBS AND
1030 C $ARG POINTS WORK IN MULTIPLE
1040 C LEVEL SUBROUTINES.
1050 C
1100 ...
1200 ...
1300 ...
1350 C THIS GOSUB CALLS THE FIRST SUBROUTINE
1360 C AND PASSES THE VALUE DEFINED IN PT1 TO
1370 C TO $ARG1.

136 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
GOSUB (Go to subroutine)

1380 C
1500 GOSUB 2030 PT1

2000 C
2010 C SUBROUTINE #1
2020 C
2030 ...
2040 ...
2050 C IN ORDER TO PRESERVE THE VALUE LOCATED
2060 C IN $ARG1, YOU MUST DEFINE $ARG1 IN THE
2070 C SECOND SUBROUTINE'S CALLING GOSUB. THE
2080 C PROGRAM ALSO PASSES A SECOND POINT
2090 C VALUE NAMED PT2.
2100 C
2500 GOSUB 3030 $ARG1,PT2
2510 RETURN

3000 C
3010 C SUBROUTINE #2
3020 C
3030 ...
3040 ...
3050 C IN ORDER TO PRESERVE THE VALUES
3060 C LOCATED IN $ARG1 AND $ARG2, YOU MUST
3070 C DEFINE BOTH POINTS IN THE THIRD
3080 C SUBROUTINE'S CALLING GOSUB. THE
3090 C PROGRAM ALSO PASSES A THIRD POINT
3100 C VALUE CALLED PT3.
3200 GOSUB 4020 $ARG1,$ARG2,PT3
3210 RETURN

4000 C SUBROUTINE #3
4010 C
4020 ...
4030 ...
4040 RETURN
Figure 3-2. Multiple Level Subroutines.

Notes
● A GOSUB command can only reference point names or local variables.
● A GOTO command can be used inside of a subroutine only if the command does
● not transfer program control out of that subroutine.
● The last line of a subroutine must be a RETURN command.
● Do not transfer control out of a subroutine without using a RETURN command.

A6V10374898 2023-05-15 137 | 195


Chapter 3 - Command Syntax
GOSUB (Go to subroutine)

● Do not use time-based commands such as LOOP, SAMPLE, TOD, and WAIT inside a subroutine.
● Do not use an IF/THEN/ELSE command with a GOSUB command.
See also the GOTO [➙ 139] and RETURN [➙ 165] topics.

138 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
GOTO (Go to line)

GOTO (Go to line)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
GOTOline#

line# The next line number to which execution is directed.


- Line numbers must be entered as integers ranging from 1 to 32767.

Use
This command is used to control program execution by branching to a different section of the program.
Example
10 IF (FANRUN.GE.1000) THEN GOTO 50

Notes
● A GOTO command should only transfer program control to the same or a sequentially higher line number.
● If the line number indicated in the GOTO does not exist, execution is transferred to the next line after the line
number specified in the GOTO command.
● A GOTO command should not transfer program control to a comment line.
● Do not use the GOTO command to transfer control to the top of a program. If the last program line is missed
because of this, time-based commands (LOOP, WAIT, etc.) will not function properly.
See also the GOSUB [➙ 134] and RETURN [➙ 165] topics.

A6V10374898 2023-05-15 139 | 195


Chapter 3 - Command Syntax
HLIMIT (High limit)

HLIMIT (High limit)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
HLIMIT(value,pt1…pt15)

value New value to which the high limit is set.


- This value can be a decimal, a point name, or a local variable.
- Integers are not allowed.
pt1 through pt15 Logical names of analog points whose high limits are changed to the new value.

Use
For PXC.A devices, this statement has been replaced with SETVAL (Write property values).
Sets a new high alarm limit for alarmable analog points.
A maximum of 15 points can be set to the same high limit with one HLIMIT command.
Example
100 IF (OATEMP.GT.70.0) THEN HLIMIT(84.0,
ROOM16)ELSE HLIMIT(78.0,ROOM16)

Notes
● Points must reside in the same device as the program.
● Points used in the HLIMIT command must be defined as alarmable.
See also the ALARM [➙ 114], DISALM [➙ 123], ENALM [➙ 129], LLIMIT [➙ 144], and NORMAL [➙ 150] topics.

140 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
HOLIDA (Holiday)

HOLIDA (Holiday)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
HOLIDA(month1,day1,...,month8,day8)

lmonth1 through Month of the designated holiday. (January = 1, June = 6, December = 12, etc.)
month8
day1 through Day of the month for the designated holiday. The first day of the month is entered as 1.
day8

Use
Defines the dates of holidays up to a year in advance.
A maximum of eight holidays can be specified with a single HOLIDA command. If more than eight holiday
definitions are needed, multiple HOLIDA commands can be used.
Example
630 HOLIDA(12,24,12,25,12,26,12,27)

Notes
● The HOLIDA and TODMOD commands must precede any TOD or TODSET commands in order for
● the program to operate correctly.
● A HOLIDA or TODMOD command in a device will only affect TOD, TODSET and SSTO commands in that
device.
● When a holiday date occurs in a HOLIDA command, the mode number for that day in the TODMOD command
is set to 16.
● If holidays are defined using both the HOLIDA command and the TOD calendar, make sure that the holidays
are defined as the same day in both places. Otherwise, the equipment commanded will operate in holiday
mode on both the days defined in the PPCL HOLIDA statement and the days defined in the TOD calendar.
See also the TOD [➙ 179], TODMOD [➙ 180], and TODSET [➙ 182] topics.

A6V10374898 2023-05-15 141 | 195


Chapter 3 - Command Syntax
IF/THEN and IF/THEN/ELSE (Conditional control)

IF/THEN and IF/THEN/ELSE (Conditional control)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
IF(exp) THENx
or
IF(exp) THENxELSEy

exp Expression representing one or more logical or relational tests that are the basis for the THEN/ELSE decision making.
- The logical test can compare variables, constants, status indicators, priority indicators, and/or numbers, state text, and
system points.
- Several logical tests can be linked together with relational or logical operators.
- A maximum of 13 operands can be tested.
- Operands can be point names, status indicators (i.e., ON, ALARM, etc.), @ priority indicators, and/or numbers.
x Represents a condition, assignment, or course of action to take if the expression (exp) is true.
y Represents a condition, assignment, or course of action to take if the expression (exp) is false.

Use
This conditional logic command is used to provide customized decision logic.
● When the IF expression is true, the THEN command is executed.
● When the IF expression is false, the ELSE command (if defined) is executed.
● If the IF expression is false and no ELSE command is defined, execution continues with the next line of code.
Example 1
110 IF (OATEMP.GT.70.0) THEN OADPR = 80.0
Example 2
310 IF (TIME.GT.8:00.AND.TIME.LT.16:00) THEN
ON(@NONE,SFAN) ELSE ON(@OPER, SFAN)

Notes
● GOSUB commands should not be used for the x or y parameters.
● Time-based commands such as WAIT and TODMOD should not be directly used for the x or y parameters.

142 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
INITTO (Initialize totalized value)

INITTO (Initialize totalized value)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
INITTO(value,pt1,...,pt15)

value The new value which replaces the current totalized values for all specified points.
- This value can be a decimal, point name, or local variable. Integers are not allowed.
pt1 through pt15 Names of points that are defined for totalization. Points must reside in the same device as the control program

Use
Change the totalized value of a point to a new value (generally 0).
A maximum of 15 point names can receive the new value through one INITTO command.
Example
10 IF (DAYOFM.EQ.1.0) THEN INITTO(0.0, PMP1,PMP2)

Notes
● Points must reside in the same device as the command.
● The INITTO command cannot reset the value of LPACI point types.
● Only points that are defined to be totalized can be initialized by this command.
● When used in APOGEE automation stations (which can totalize individual states of a point), INITTO will reset
all totalized states of a digital point to zero.

A6V10374898 2023-05-15 143 | 195


Chapter 3 - Command Syntax
LLIMIT (Low limit)

LLIMIT (Low limit)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
LLIMITl(value,pt1,...,pt15)

value New value to which the low limit is set.


- This value can be a decimal, point name, or local variable. Integers are not allowed.
pt1 through pt15 Logical names of analog points whose low limits are changed to the new value. Points must reside in the same device as
the command.

Use
For PXC.A devices, this statement has been replaced with SETVAL (Write property values).
Sets a new low alarm limit for alarmable analog points.
A maximum of 15 points can be set to the same low limit with one LLIMIT command.
Example
100 IF (OATEMP.GT.68.0) THEN LLIMIT(76.0,
ROOM16) ELSE LLIMIT(68.0,ROOM16)

Notes
● Points must reside in the same device as the program.
● Points used in the LLIMIT command must be defined as alarmable.
See also the ALARM [➙ 114], DISALM [➙ 123], ENALM [➙ 129], HLIMIT [➙ 140], and NORMAL [➙ 150] topics.

144 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
LOCAL (Local variable)

LOCAL (Local variable)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Syntax
LOCAL(pt1,... ,pt16)

Use
Creates virtual points for the program.
● The program can reference these points as $pt1 through $pt16.
● Other programs can reference these points by referencing the program name, followed by the system delimiter
(:), followed by the local point name.
● For PXC.A controllers, these points can only be accessed from within the device.
● For PXC.A controllers, there is no limit to the number of local objects that can be generated.
Example 1
The following is an example of commanding a local point contained within a program:
10 IF (FANRUN.GE.1000) THEN GOTO 50
Example 2
The following is an example of a program using the value of a local point in a different program (where PROG1 is
the program name):
300 IF(“PROG1:FANPT”.EQ.ON)THEN ...

A6V10374898 2023-05-15 145 | 195


Chapter 3 - Command Syntax
LOOP (Loop control)

LOOP (Loop control)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
LOOP(type,pv,cv,sp,pg,ig,dg,st,bias,lo,hi,0)

type Designates the type of control action.


- Valid values are 0 and 128.
0 = direct acting.
128 = reverse acting.

pv Point name of the process variable which is being controlled or regulated.


- This parameter is usually an LAI point, but it can be an LAO point, which represents a temperature, flow rate, air velocity,
etc.
cv Point name of the loop output (control variable).
- This parameter is usually an LAO point that represents an actuator signal such as pressure, current, or voltage.
- This value can be entered as a local variable.
sp Setpoint for the loop against which the process variable is compared. The value of the setpoint should represent the same
engineering units as the process variable.
- This parameter can be entered as a point name or a decimal number.
- This value can be entered as a local variable.
pg Proportional gain determines the part of a PID control action that is directly proportional to the error between the setpoint
(sp) and the process variable (pv).
- This parameter can be entered as a point name, local variable, integer, or decimal.
Proportional gain is calculated using the following formula:
pg= Full range of controlled device × 1000
Throttling range to change the output device from full
open to full close.
ig Integral gain. The contribution of integral control action to the total control action of the loop. Integral action minimizes
offset (the difference between the process variable and the setpoint). Adding integral gain can increase the time required
to tune the loop.
When using integral gain, be sure to reduce the proportional gain so that the total gain of the loop is not high enough to
cause instability and cycling. Begin with a low integral gain and increase it slowly, if required. A recommended starting
point is 2% of the proportional gain.
- This parameter can be a point name, integer, decimal, or local variable.
- If using an integral gain, use the following calculation: ig = pg × .02.
- If not using an integral gain, set ig to 0.

dg Derivative gain. The time rate of response of the control system. Derivative gain is usually applied to fast responding
systems. Adding derivative gain can increase the time required to tune the loop.
- This parameter is entered as an integer, decimal, point name, or local variable.
- When derivative gain is not used, enter a zero.
st Sample time. How frequently (in seconds) the process variable (pv) is sampled.
- The minimum sampling time allowed is 1 second.
- This parameter is entered as an integer, decimal, point name, or local variable.

146 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
LOOP (Loop control)

bias Bias is the value (in engineering units) of the control output (cv), in a proportional only loop, when the measured variable
(pv) equals the setpoint (sp).
- This parameter entered as a decimal number, integer, point name, or logical point.
- The bias value should always be between the high and low value.
Bias is calculated by adding 50% of the output control span to the low limit. For example, you would do the following to
calculate the bias for a valve with a 3 to 8 psi spring range:
- Find one-half of the spring range. (5 psi spring range ÷ 2 = 2.5)
- Add that value to the low limit of the valve (3 psi).
- The bias for this device is 5.5 psi.
lo Low limit of the loop output. The low limit should be set to match the low end range of the controlled device.
- This parameter is entered as a decimal, integer, point name, or local variable

hi High limit of the loop output. The high limit should be set to match the high end range of the controlled device.
- This parameter is entered as a decimal, integer, point name, or local variable.
0 Not used. Enter zero.

Use
This command performs closed loop control by using any combination of proportional, integral, and derivative
control actions in either direct or reverse acting modes.
LOOP monitors an input point (process variable), compares it with a desired value (the setpoint), and adjusts an
output (control variable) to bring the input closer to the setpoint.
● The LOOP command is the software counterpart to a pneumatic receiver controller.
● Anti-windup is automatically prevented for the integral action once the high or low limit is reached.

Regardless of PPCL program execution rate property setting, the LOOP statement
will execute at user defined second intervals. The system will ensure the user
defined Sample time (st) is achieved.

Example
2000 C CONTROL LOOP STATISTICS
2002 C DIRECT CONTROL LOOP
2004 C INPUT = RM100 OUTPUT = HVALVE
2006 C SETPOINT = HSETPT
2008 C PROPORTIONAL GAIN = PGAIN-NO I OR D GAINS
2010 C SAMPLE TIME = 1 SECOND
2012 C BIAS = 5.5
2014 C LOW = 3.0
2016 C HIGH = 9.0
2018 LOOP(0,RM100,HVALVE,HSETPT,PGAIN,0,0,1,5.5,3.0, 9.0,0)
See also the ADAPTM [➙ 100] and ADAPTS [➙ 109] topics.

A6V10374898 2023-05-15 147 | 195


Chapter 3 - Command Syntax
MAX (Maximum value)

MAX (Maximum value)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
MAX(result,pt1,...,pt15)

result Point name where the largest value is stored.


- This parameter can be a virtual point name or a local variable
pt1 through pt15 Values which are compared.
- The values can be any combination of point names, decimals, integers, and local variables

Use
This command selects the largest value from 2 to 15 point names or numbers, (numbers must be in decimal
format), and stores that value in the result point.
Example
10 MAX(HOTZON, ZONE1, ZONE2, ZONE3, 9.0)
See also the MIN [➙ 148] topic.

MIN (Minimum value)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
MIN(result,pt1,...,pt15)

result Point name where the largest value is stored.


- This parameter can be a virtual point name or a local variable.
pt1 through pt15 Values which are compared.
- The values can be any combination of point names, decimals, integers, and local variables.

Use
This command selects the lowest value from 2 to 15 point names or numbers (numbers must be in decimal format),
and stores that value in the result point.
Example
10 MIN(COOLZN,ZONE1,ZONE2,ZONE3,9.0)
See also the MAX [➙ 148] topic.

148 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
NIGHT (Night mode)

NIGHT (Night mode)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
NIGHT(pt1,...,pt16)

pt1 through pt15 Name of a point to be set to NIGHT mode.


- This parameter must be a logical controller (LCTLR) point type.

Use
For PXC.A devices, this statement has been replaced with SET (Set point value) [➙ 167]
Changes a LCTLR point to NIGHT mode status.
A maximum of 16 points can be changed with one NIGHT command.
Example
100 IF (TIME.LT.7:00.OR.TIME.GT.18:00) THEN
NIGHT(LCTLR2) ELSE DAY(LCTLR2)

Notes
For some equipment controllers, NIGHT mode is also referred to as UNOCC (unoccupied) mode. If an equipment
controller is in UNOCC mode, PPCL recognizes this status as NIGHT.
See also the DAY [➙ 115] topic.

A6V10374898 2023-05-15 149 | 195


Chapter 3 - Command Syntax
NORMAL (Normal operating mode)

NORMAL (Normal operating mode)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Syntax
NORMAL(result,pt1,...,pt15)

pt1 through pt15 Name of a point to be removed from the alarm-by-command state.

Use
This statement is no longer supported in PXC.A devices. The PXC.A PPCL runtime will consider this statement
invalid, and no replacements have been provided.
Removes the specified points from the alarm-by-command condition and returns them to their normal operating
mode.
A maximum of 16 points can be changed with one NORMAL command.
Example
100 IF (RM90T.GT.80.0) THEN ALARM(ROOM90) ELSE NORMAL(ROOM90)

Notes
Points must reside in the same device as the program.
See also the ALARM [➙ 114], DISALM [➙ 123], ENALM [➙ 129], HLIMIT [➙ 140], and LLIMIT [➙ 144] topics.

150 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
OFF (Off status)

OFF (Off status)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
OFF(pt1,...,pt15)

pt1 through pt15 Point names that are commanded to OFF.

OFF(@prior,pt1,...,pt15)

@prior Defines a specific point priority.


pt1 through pt15 Point names of LDI, LDO, L2SL, L2SP, LOOAL, LOOAP, LFSSL, or LFSSP points.

Use
For PXC.A devices, this statement has been replaced with SET (Set point value) [➙ 167]
Changes the operational status of an ON/OFF/AUTO point to OFF.
● Acceptable point types are: LDI, LDO, L2SL, L2SP, LOOAL, LOOAP, LFSSL, and LFSSP.
● A maximum of 16 points can be changed with one OFF command.
● A maximum of 15 points can be defined with one OFF(@prior…) command.
Example
20 IF (OATEMP.GE.63.0) THEN OFF(@NONE,PUMP1,PUMP2)

Notes
FAST/SLOW/STOP points (LFSSL, LFSSP) use the OFF command for STOP.
See also the AUTO [➙ 115], FAST [➙ 132], ON [➙ 154], and SLOW [➙ 170] topics.

A6V10374898 2023-05-15 151 | 195


Chapter 3 - Command Syntax
OIP (Operator interface program)

OIP (Operator interface program)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Syntax
OIP(trigger, ''seq'')

trigger The trigger for the operator interface sequence.


- This parameter can be an LDO or LDI point name or a local variable.
seq This variable represents the sequence of keystrokes you would enter if you were using a terminal.
- The sequence must not exceed 80 characters (including slashes) in length.
- The sequence must be enclosed in double quotes ('' '').
- For each level in the sequence that you advance, you must enter a slash (/).
- If a pause is needed in a phone number, do the following:
- For APOGEE firmware, enter a comma.
- For pre-APOGEE firmware, enter a period.

Use
This statement is no longer supported in PXC.A devices. The PXC.A PPCL runtime will consider this statement
invalid, and no replacements have been provided.
Allows most operator functions to be executed from within a PPCL program. This command is generally used for
the following functions:
● Generating reports
● Changing point priorities
● Sending messages
● Triggering auto-dial
The OIP command uses a trigger point to determine the conditions for execution. When the trigger point is turned
on, the operator sequence is executed once. To execute the operator sequence again, the trigger point must be
turned OFF, and then turned ON again.
Example
100 C
102 C OIP COMMAND INFORMATION:
104 C OPERATOR SEQUENCE
106 C
108 C - POINT
110 C - DISPLAY
112 C - PRINTER
114 C - YES
116 C - VALUE
118 C - ANY
120 C - NAME
122 C - ALL NAMES
124 C
130 C TRIGGER POINT - RPT7AM

152 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
OIP (Operator interface program)

150 OIP(RPT7AM,"P/D/P/Y/V/A/N/*")
Example to Dial Out Using a Modem—APOGEE Firmware
100 C APOGEE OIP COMMAND INFORMATION:
102 C DIAL-OUT TO MODEM
110 OIP(TRIGGER,”S/H/P/I/C/P/<field panel #>/<partner id>”)

Notes
● OIP commands used to generate messages, displays, and reports should be staggered in time (that is, do not
use the same trigger point for all OIP commands). This allows one command to complete before another
begins.
● The OIP command will appear as FAILED if the operator sequence was entered incorrectly and the control
program attempts to execute it.
● On return from power failure, after an enable command has been executed, or during the first execution of the
control program after a database load, the OIP command will not execute until the trigger point toggles.
● After the OIP command has been executed, the trigger point must be reset (commanded back to its original
state) before the OIP command can be executed again.
● When using an OIP command with an LDO type subpoint, you must command the point ON/OFF with the
number 1 or 0. Using any text other than 1 or 0 will cause the statement to fail.
● If the trigger point name begins with a number, then the point name should be preceded by an @ sign. If a
variable in the keystroke sequence begins with a number, then the point name should not be preceded by an @
sign.
Correct
100 OIP(TRIG,"P/T/D/H///FAN/1FAN//60/")
Incorrect
100 OIP(TRIG,"P/T/D/H///FAN/@1FAN//60/")
● The OIP command must be executed with every pass of the program in order to see the trigger point change
value.
● The OIP command cannot be used to perform loop tuning.
● In an OIP statement, a slash / can be used to represent a carriage return. An example of a multi-point trend
display would look like:
OIP (TRIG, "P/T/D/P/// Name1/Name2/Name3//10/")
● To specify which trend instance should display, use the following syntax for the Multi-Point Trend Report:
OIP (TRIG, "P/T/D/P/// Name1//Name2//Name3//10/")

A6V10374898 2023-05-15 153 | 195


Chapter 3 - Command Syntax
ON (On status)

ON (On status)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
ON(pt1,...,pt15)

pt1 through pt15 Point names that are commanded to ON.

ON(@prior,pt1,...,pt15)

@prior Defines a specific point priority.


pt1 through pt15 Point names of LDO, L2SL, L2SP, LOOAL, or LOOAP points.

Use
For PXC.A devices, this statement has been replaced with SET (Set point value) [➙ 167]
Changes the operational status of an ON/OFF/AUTO point to ON.
● Acceptable point types are: LDO, L2SL, L2SP, LOOAL, or LOOAP.
● A maximum of 16 points can be changed with one ON command.
● A maximum of 15 points can be defined with one ON(@prior…) command.
Example
100 IF (OATEMP.LT.60.0)THEN ON(@NONE, PUMP1,PUMP2)

Notes
FAST/SLOW/STOP points (LFSSL, LFSSP) use the OFF command for STOP.
See also the AUTO [➙ 115], FAST [➙ 132], OFF [➙ 151], and SLOW [➙ 170] topics.

154 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
ONPWRT (On after power return)

ONPWRT (On after power return)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Syntax
ONPWRT(line#)

line# Line number at which execution begins in the control program after returning from power failure.
- Line numbers must be entered as integers ranging from 1 to 32767.
- If the line number is invalid, this command is ignored.

Use
This statement is no longer supported in PXC.A devices. The PXC.A PPCL runtime will consider this statement
invalid, and no replacements have been provided.
This command is similar to a GOTO command and allows you to select the first program line that is executed when
power has returned. The ONPWRT command is only executed once and is then ignored as long as power stays
ON.
Example
10 ONPWRT(1800)

Notes
● The ONPWRT command should be the first command in a PPCL program since program execution returns to
the first line of a PPCL program after a power failure.
● If the database for an automation station is lost due to a power failure, the ONPWRT command is not executed
when power is restored. See also the AUTO, FAST, ON, and SLOW topics.

A6V10374898 2023-05-15 155 | 195


Chapter 3 - Command Syntax
PDL (Peak demand limiting)

PDL (Peak demand limiting)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
PDL(area,totkw,target,g1s,g1e,sh1,...,g4s,g4e,sh4)

area Meter area number.


- Enter this number as an integer.

totkw Total amount of power consumed by the loads that are controlled by the PDL command.
- The same virtual LAO point must be used for both the PDL totkw parameter and the kwtot parameter in the owning
PDLDPG command. The value of this parameter is calculated by the PDL command.
A power-consuming load is controlled by a PDL command if the following criteria are met:
- The power-consuming load is defined in a PDLDAT command that is associated with a PDL command.
- The load is currently in NONE or PDL priority.
- The PDL command is traced and is enabled.
- The PDLDPG command is enabled.
- The PDLDAT command is enabled.
target Power consumption limit that is maintained by the PDL command.
- The same virtual LAO point must be used for both the PDL target parameter and the target parameter in the
corresponding PDLDPG command. The value of this parameter is calculated by the PDLDPG command.

g1s Start line for the group 1 load definition in the corresponding PDLDAT commands. This is the first group to shed when
demand exceeds the setpoint.
g1e End line for the group 1 load definition.

sh1 Shedding sequence for group 1.


- Valid values are 0 and 1.
0 = Fixed shedding
1 = Round robin shedding
g4s Start line for the group 4 load definition in the corresponding PDLDAT commands. This is the last group to shed when
demand exceeds the setpoint.

G4e End line for the group 4 load definition.


sh4 Shedding sequence for group 4.
- Valid values are 0 and 1.
0 = Fixed shedding
1 = Round robin shedding

Use
Maintains a defined level of kilowatt use (or target) for a group of loads.

NOTE:
For a detailed explanation of Peak Demand Limiting (PDL), see Control Option
Comparisons.

156 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
PDL (Peak demand limiting)

A single PDL command is responsible for the direct control of a group of PDLDAT commands in a load-handling
automation station. The PDL command control includes:
● Maintaining a target kilowatt (kW) value by shedding and restoring loads. The target value is passed to the PDL
command through an LAO point value from the PDLDPG command.
● Monitoring the total available kilowatts under its control. The PDL command determines which of the loads
defined in the associated PDLDAT command is available for peak demand limiting control. The total kilowatts
available to the PDL command are placed in an LAO point.
● Maintaining the timing as defined in the PDLDAT command for minon, minoff, and maxoff.
● Defining how each load under PDL control fits into one of four priority groups. This is accomplished by referring
to the line numbers of the PDLDAT commands.
● Defining and controlling the sequence of shedding and restoring for each priority group.
– There are two types of shedding and restoring: fixed and round robin.
– Shedding begins at 90% of the setpoint.
Example
100 PDL(1,TOTKW1,TGT1,100,199,0,200,299,1,
300,399,0,400,499,0)

Notes
● PDL must control 10-20% of the building demand to be effective.
● When points are controlled by the PDL command, they are placed into PDL priority. Group 1 is shed first, while
Group 4 is shed last.
● With APOGEE firmware, one meter can be defined in each program.
● With pre-APOGEE firmware, only one meter can be defined in an automation station.
● The PDL statement fails if more than four shedding groups are defined.
● Do one of the following if all four shedding groups are not used:
– With Firmware Revision 2.6/2.6.1 and later, no entry is required for unused groups.
– With Firmware Revision 2.5.2 and earlier, enter the integer 0 for the starting line, ending line, and shedding
type for all the unused groups.
See also the PDLDAT [➙ 158], PDLDPG [➙ 159], PDLMTR [➙ 160], and PDLSET [➙ 162] topics.

A6V10374898 2023-05-15 157 | 195


Chapter 3 - Command Syntax
PDLDAT (PDL, define load attributes)

PDLDAT (PDL, define load attributes)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
PDLDAT(ptname,minon,minoff,maxoff,kwval)

ptname Point name of the load.

minon Minimum time (in minutes) that the load must remain ON after PDL has restored it.
- This parameter must be less than 546 and can be defined as a decimal, integer, point name, or a local variable.
minoff Minimum time (in minutes) that the load must remain OFF before PDL can restore it.
- This parameter must be less than 546 and can be defined as a decimal, integer, point name, or a local variable.
maxoff Maximum time (in minutes) that PDL can keep the load off after shedding it.
- This parameter can be a decimal, integer, point name, or a local variable.
- The maximum allowable value of maxoff is (minoff + 546).
kwval Kilowatt value for the load.
- This parameter can be a decimal, integer, point name, or a local variable.

Use
Defines the minimum on-time, minimum off-time, maximum off-time, and kilowatt value for a specific load.
A group of PDLDAT commands in a load handling automation station are controlled by a single PDL command that
defines load parameters and maintains a certain level of kilowatt use (or target) for a group of loads.
Example
100 C
102 C PDLDAT COMMAND INFORMATION:
104 C
106 C - CONTROLLED POINT - FAN17
108 C - MINIMUM ON TIME - 10 MINUTES
110 C - MINIMUM OFF TIME - 5 MINUTES
112 C - MAXIMUM OFF TIME - 180 MINUTES
114 C - KILOWATT RATING - 10KW
116 C
118 PDLDAT(FAN17,10,5,180,10)

Notes
● In a network system, a load defined by a PDLDAT statement must reside in the same automation station as the
PDL statement.
● A PDLDAT statement is referenced by only one PDL statement. Using multiple references produces
unpredictable results.
● The PDLDAT statement should be in the same automation station as the load.
See also the PDL [➙ 156], PDLDPG [➙ 159], PDLMTR [➙ 160], and PDLSET [➙ 162] topics.

158 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
PDLDPG (PDL, digital point group)

PDLDPG (PDL, digital point group)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
PDLDPG(area,kwtot1,target1,...,kwtot7,target7)

area Meter area designation.


- In order for the program to operate correctly, the same numeric value must be used for the meter area parameter in the
PDLDPG, PDLMTR, and PDLSET statements.
kwtot1through Total amount of power consumed by the loads that are controlled by the PDL command.
kwtot7 - The same virtual LAO point must be used for both the PDL totkw parameter and the kwtot parameter in the owning
PDLDPG command. The value of this parameter is calculated by the PDL command.
A power-consuming load is controlled by a PDL command if the following criteria are met:
- The power-consuming load is defined in a PDLDAT command that is associated with a PDL command.
- The load is currently in NONE or PDL priority.
- The PDL command is traced and is enabled.
- The PDLDPG command is enabled.
- The PDLDAT command is enabled
target1through Power consumption target value. One target parameter must be specified for the corresponding PDL command in the
target7 load-handling automation stations.
- The same virtual LAO point must be used for both the PDL target parameter and the target parameter in the
corresponding PDLDPG command. The value of this parameter is calculated by the PDLDPG command.
One kwtot parameter must be specified for each PDL statement that is a number of this meter area. The sum of the value
of all kwtot parameters is used by the PDLDPG command to calculate the power consumption target value for each PDL
command.
- Each of these kwtot parameters must be the same virtual LAO point that is specified as the kwtot parameter for the
corresponding PDL and PDLDPG statements. The value of the parameter is assigned by the PDL statement in which it is
defined.

Use
Keeps track of how many kilowatts worth of load are available in each load-handling automation station and how
many kilowatts are to be shed or restored at any time in each automation station.
Sets the target value for each PDL command associated with a meter area.
The PDLDPG statement proportionally distributes the target value to each PDL statement according to the values
of kwtot1 through kwtot7.
Example
100 PDLDPG(1,TOTKW1,TGT1,TOTKW2,TGT2)

Notes
● In a network system, a load defined by a PDLDAT statement must reside in the same automation station as the
PDL statement.
● A PDLDAT statement is referenced by only one PDL statement. Using multiple references produces
unpredictable results.
● The PDLDAT statement should be in the same automation station as the load.
See also the PDL [➙ 156], PDLDAT [➙ 158], PDLMTR [➙ 160], and PDLSET [➙ 162] topics.

A6V10374898 2023-05-15 159 | 195


Chapter 3 - Command Syntax
PDLMTR (PDL, meter monitor)

PDLMTR (PDL, meter monitor)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
PDLMTR(area,hist,calc,window,plot,warning,mt1, def1,...,mt5,def5)

area Meter area.


- In order for the program to operate correctly, the same numeric value must be used for the meter area parameter in the
PDLDPG, PDLMTR, and PDLSET statements.
- This parameter can be an integer (1 to 32,767), a point name, or a local variable.
Hist Historical forecast weighting factor (in percent) for the sliding window predictions.
- This parameter can be a decimal or integer.
- The weighting factor should be less than 50% to anticipate demand.
- The recommended value is 30%.
calc Interval (in minutes) for how often demand predictions are calculated.
- This parameter is usually a decimal or integer, but can be a point name or a local variable.
- The minimum time allowed is one minute.
window Predictions on the width of the sliding window interval (in minutes).
- This parameter is usually a decimal or integer, but can be a point name or a local variable.
- Up to 30 samples can be stored per window.
Maximum value for the Time versus Demand plot section of the PDL Activity Report.
plot - This parameter can be a decimal, integer, point name, or a local variable.
- This value should be greater than the highest setpoint used in PDLSET.
warning Determines if warning messages are issued as predicted demand nears or exceeds the setpoint.
- Valid values are 0 and 1.
0 = Warning messages disabled
1 = Warning messages enabled

mt1 through mt5 Logical point names for demand consumption meters.
- This parameter can be an LPACI or analog point.
- When an LPACI points is used, the engineering units are kWH.
- When an analog point is used, the engineering units are kW.
def1 through def5 The default values are used instead of the meter values (mt1 through mt5) when communication is lost or the meters
cannot be read.
- This parameter can be a decimal, integer, point name, or local variable.
- For historical (latest, best) reading, enter -1 (default value), or enter a constant or a fixed default value.
- Default values are expressed in kilowatts (demand) for both analog and pulse inputs.

160 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
PDLMTR (PDL, meter monitor)

Use
The PDLMTR command is responsible for the following actions:
● Defining meters by point name.
● Monitoring meters.
● Making demand predictions that are used by the PDLDPG command.
● Updating report information pertaining to demand and consumption.
● Deciding when warning messages should be issued.
● Initializing a meter area.
● Defining default meter values.
Example
200 C
202 C PDLMTR COMMAND INFORMATION:
204 C
206 C - HISTORICAL WEIGHTING FACTOR - 30%
208 C - CALCULATION INTERVAL - 1 MINUTE
210 C - PREDICTION WINDOW - 15 MINUTES
212 C - THE TIME VERSUS DEMAND SECTION OF
214 C THE ACTIVITY REPORT PLOT HAS A
216 C FULL SCALE OF 500 KILOWATTS.
218 C - WARNING MESSAGES ARE ENABLED TO
220 C BE SENT TO ALARM DEVICES.
222 C - THE DEFAULT VALUES OF THE TWO
224 C METER POINTS (METER1 AND
226 C METER2) ARE 100 KILOWATTS AND
228 C 50 KILOWATTS RESPECTIVELY.
230 C
250 PDLMTR(1,30,1,15,500,1,METER1,100, METER2,50)

Notes
● Only one PDLMTR command can be defined per meter area.
● For APOGEE automation stations, one PDLMTR command can be defined per program.
● With pre-APOGEE firmware, one meter area can be defined in an automation station.
● If a LPACI point is used in a PDLMTR statement, then PDL should be restarted for that meter area after the
LPACI is reset.
See also the PDL [➙ 156], PDLDAT [➙ 158], PDLDPG [➙ 159], and PDLSET [➙ 162] topics.

A6V10374898 2023-05-15 161 | 195


Chapter 3 - Command Syntax
PDLSET (PDL, setpoints)

PDLSET (PDL, setpoints)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
PDLSET(area,exceed,set1,time1,...,set7,time7)

area Meter area.


- In order for the program to operate correctly, the same numeric value must be used for the meter area parameter in the
PDLDPG, PDLMTR, and PDLSET statements.
- This parameter is an integer.
exceed DO point which is turned ON if the actual floating window peak exceeded the setpoint at any time during the preceding
interval. This point is reset to OFF at the end of each setpoint interval.
set1 through set7 Demand setpoint (in kilowatts) that is not to be exceeded.
- This parameter can be a decimal, integer, point name, or a local variable.
time1 through The time at which the corresponding setpoint ends.
time7 - This parameter is usually entered as a clock time in military format (7:30 p.m. = 19:30). It can also be entered as a
decimal, integer, or a local variable.
- Times must be in ascending order.

Use
The PDLSET command designates the peak demand limiting (PDL) levels and ensures that the PDL levels for a
meter area are not exceeded during the time those setpoints are in effect.
Demand predictions made by the PDLMTR command are compared with the appropriate setpoints defined by the
PDLSET command. The PDLSET command then determines the number of kilowatts (if any) that must be shed or
restored for the meter area.
Example
100 C
101 C PDLSET COMMAND INFORMATION:
102 C
103 C - THIS COMMAND CONTROLS METER AREA 1.
104 C - THE VIRTUAL LDO POINT WHICH WILL
105 C TOGGLE ON AND OFF AT THE END OF
106 C THE SET POINT INTERVALS WHEN THE
107 C SET POINT WAS EXCEEDED IS
108 C CALLED PEAKEX.
109 C - PDLST1 SET POINT ENDS AT 11:00 A.M.
110 C - PDLST2 SET POINT ENDS AT 4:30 P.M.
111 C
120 PDLSET(1,PEAKEX,PDLST1,11:00,PDLST2,16:30)

Notes
The PDLSET command requires at least two setpoint/time definitions for each day in order to generate reports.
See also the PDL [➙ 156], PDLDAT [➙ 158], PDLDPG [➙ 159], and PDLMTR [➙ 160] topics.

162 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
RELEAS (Release)

RELEAS (Release)
Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax for PXC.A controllers


RELEAS(cmdPriority)

cmdPriority A command priority specifier. cmdPriority may be specified as @1 through @16, indicating BACnet priorities 1 (highest)
through 16 (lowest).
Appending a '+' to the priority specifier will release the specified priority slot and lower. For example, @9+ will release
priority slots 9 through 16.
If cmdPriority is not specified when writing a commandable object, the program's PPCL Program Priority value shall be
used.

RELEAS(targObjRefs)

targObjRefs A specifier for the target object(s) of the set operation. Multiple objects may be specified. The same priority slot will be
written in each target object. A targObjRef may be passed as an object reference (for example, BAC_7_AO_11,
KwMeter).

Use
The updated RELEAS() statement writes the value null to one or more specified command priority array slots of a
specified object instance. RELEAS() has been modified to support BACnet command prioritization and to support
releasing multiple priority slots with a single statement.

Notes
● Database migration tools should automate the transformation of Apogee proprietary priorities to BACnet
priorities.
● In general, the program should limit itself to commanding at its specified priority as defined by the PPCL
Program Priority property.
● If the PXC.A automation station is unable to resolve one or more object references, whether the reference is
specified in valueSpec or one of the objrefs, the PPCL line will be marked unresolved.

Syntax for Legacy controllers


RELEAS(pt1,...,pt16)

pt1 through pt16 Point name to be released to NONE priority.


- This parameter can be a any logical point that has a priority array.
- This command only works for points in EMER or PDL priority. To release points in OPER or SMOKE priority, the
RELEAS(@prior…) command must be used.

RELEAS(@prior, pt1,...,pt15)

@prior Defines a specific point priority that the point is being released from.
pt1 through pt15 Point name to be released to NONE priority.

Use
Changes the operational status of a point to NONE priority.

A6V10374898 2023-05-15 163 | 195


Chapter 3 - Command Syntax
RELEAS (Release)

● A maximum of 16 points can be changed with one RELEAS command.


● A maximum of 15 points can be defined with one RELEAS(@prior…) command.
An LAO or LDO point that is used in a RELEAS statement can generate multiple entries in the Trend Data Report if
a command statement such as SET, =, ON, or OFF is used on the same point at the same time.
Example 1
110 IF(TEMP.NE.ALARM.AND.PT2.NE.@NONE)THEN RELEAS(@EMER, PT2)
In this example, PT2 will only be released if its priority is not equal to NONE and TEMP is not in alarm.
Example 2
120 RELEAS(@SMOKE, PT1, PT2, PT3)
In this example, all three points will be released to NONE priority if they currently have a priority of SMOKE, EMER,
or PDL. If any point is in OPER priority, it will not be released.

Notes
● With APOGEE and pre-APOGEE firmware, always use a priority at least as high as the one that the point will
be in to ensure proper release. If the point has been commanded from the keyboard, it will require an @OPER
entry to release the priority of the point to NONE.
● With BACnet firmware, the RELEAS(@prior, pt1,…,pt15) command releases the BACnet slot which is mapped
to the stated APOGEE priority, but it may not release all the way to NONE priority. The BACnet Command
Priority levels must be emptied to allow lower priority levels to control the point.
The standard BACnet Priority Array rules control the @prior release process as follows:
● If a value exists in a higher priority slot than the slot mapped to @prior, the value is not released.
● If the slot mapped to @prior is the highest slot, the value is released. The new value is determined by the
presence, in order from higher to lower priority levels, of values in the slots below.
● If no values exist in the lower priority slots, the relinquished default value is used.

164 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
RETURN (Return/end subroutine)

RETURN (Return/end subroutine)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
RETURN

Use
Marks the end of a subroutine.
RETURN must be the last command of any GOSUB subroutine. When a RETURN command is encountered, the
program returns to the line following the GOSUB command.
Example
100 GOSUB 310
110 ...
120 ...
130 ...
290 ...GO TO 350
300 C THIS SUBROUTINE PERFORMS...
310 ...
320 ...
330 ...
340 RETURN
350 CONTINUE WITH REST OF PROGRAM

Notes
● In a network system, a load defined by a PDLDAT statement must reside in the same automation station as the
PDL statement.
● A PDLDAT statement is referenced by only one PDL statement. Using multiple references produces
unpredictable results.
● The PDLDAT statement should be in the same automation station as the load.
See also the GOSUB [➙ 134] and GOTO [➙ 139] topics.

A6V10374898 2023-05-15 165 | 195


Chapter 3 - Command Syntax
SAMPLE (Sample a statement)

SAMPLE (Sample a statement)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
SAMPLE(sec) line

sec Interval in seconds between evaluations of state.


- This value must be entered as an integer ranging from 1 to 32,767.

line Any PPCL statement that does not include its own timing function. This includes:
WAIT, PDL, TOD, TIMAVG, LOOP, SSTO, or another SAMPLE command.

Use
Defines how often a command is evaluated. The SAMPLE command can be helpful in situations, such as
preventing short cycling in ON/OFF decisions or reducing COVs from noisy flow transmitters.
Example
200 SAMPLE(600) ON(HALFAN)

Notes
The SAMPLE command executes immediately on a return from power failure, after an ENABLE command, or
during the first execution of PPCL following a database load.
Valid commands can include assignment, calculations, and program control (GOTO, GOSUB).

166 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
SET (Set point value)

SET (Set point value)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax for PXC.A controllers


SET(cmdPriority)

cmdPriority An optional command priority specifier. cmdPriority may be specified as @1 through @16, indicating priorities 1 (highest)
through 16 (lowest).
If cmdPriority is not specified when writing a commandable object, the program's PPCL Program Priority value shall be
used.

SET(srcValSpec)

srcValSpec A specifier for the value to write to the set of object properties. srcValSpec may be passed in as:
- A literal numeric value (for example, 1.0, -50)
- A reserved word specifying binary or multistate objects/bundled points
- An object reference (for example, BAC_7_AO_11, KwMeter)

SET(targObjRefs)

targObjRefs A specifier for the target object(s) of the set operation. Multiple objects may be specified. The same priority slot will be
written in each target object. A targObjRef may be passed as an object reference (for example, BAC_7_AO_11,
KwMeter).

Use
The update SET() statement writes the present-value property of a specified object instance. For commandable
properties, SET() has been modified to support BACnet command prioritization.

Notes
● Database migration tools should automate the transformation of Apogee proprietary priorities to BACnet
priorities.
● In general, the program should limit itself to commanding at its specified priority as defined by the PPCL
Program Priority property.
● If the PXC.A automation station is unable to resolve one or more object references, whether the reference is
specified in valueSpec or one of the objrefs, the PPCL line will be marked unresolved.

Syntax for Legacy controllers


SET(value,pt1,...,pt15)

value Value to which points are commanded.


- This value can be a decimal, a logical point, or a local variable. Integers are not allowed.

pt1 through pt15 Point names of logical points.

SET(@prior, value, pt1,...,pt14)

@prior Defines a specific point priority.

A6V10374898 2023-05-15 167 | 195


Chapter 3 - Command Syntax
SET (Set point value)

value Value to which points are commanded. This value can be a decimal, a logical point, or a local variable. Integers are
allowed in APOGEE firmware.
pt1 through pt14 Point names of LAO or LDO, L2SL, L2SP, LOOAL, LOOAP, LFSSL, LFSSP, and LPACI point types.

NOTE:
The SET(@prior) command is not available in Unitary firmware.

Use
Changes output points to a new value.
● Acceptable point types are: LAO or LDO, L2SL, L2SP, LOOAL, LOOAP, LFSSL, LFSSP, and LPACI.
● A maximum of 15 points can be changed with one SET command.
● A maximum of 14 points can be changed with one SET(@ prior…) command.
Example 1
450 SET(75.0,RMSET1,RMSET2,RMSET3)
Example 2
550 SET(@EMER,75.0,RMSET1,RMSET2,RMSET3)

Notes
Do not use resident points in either the SET or the TABLE command. With both the SET and TABLE commands,
the following should be used for resident points:
Virtual point = Resident point

168 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
SETVAL (Write property values)

SETVAL (Write property values)


Unitary Pre-APOGEE APOGEE BACnet PXC.A

Syntax
SETVAL(srcValSpec)

srcValSpec A specifier for the value to write to the set of object properties. srcValSpec may
be passed in as:
- A literal numeric value (for example, 1.0, -50)
- A reserved word specifying an enumerated value
- An object reference (for example, BAC_7_AO_11, KwMeter)

SETVAL(targPropSpec)

targPropSpec A specifier for the property to be written. targPropSpec may be passed in as:
- A numeric BACnetPropertyIdentifier from the standard range or a proprietary
range
- An abbreviated property name.

SETVAL(targObjRef1, targObjRef2, ...targObjRef14)

targObjRefs A specifier for the target object(s) of the write operation. Multiple objects may
be specified. The same property will be written in each target object. An
targObjectRef may be passed in using the format for an object reference (for
example, BAC_7_AO_11, KwMeter).

Use
Writes the value of a specified property in one or more object instances.
SetVal is a new statement that allows PPCL access to individual object properties and supports either a numeric
property number or a textual property short name. Note that only properties with numeric data types or arrays of
numeric data types can be read or written in PPCL programs. The PPCL engine will handle conversions between
numeric types (Real, Unsigned, Integer).
Example
To write the suppress event notification value to objects SupplyTemp and RoomTemp in device Room101:
10 SetVal(0, @SupEvtNotf, [Room101]SupplyTemp, [Room101]RoomTemp)
or
10 SetVal(0, 4972, [Room101]SupplyTemp, [Room101]RoomTemp)

Notes
Only properties of numeric data types and binary data types can be written using SetVal.
See Appendix B−Property Short Names, Numbers, and Descriptions [➙ 190].

A6V10374898 2023-05-15 169 | 195


Chapter 3 - Command Syntax
SLOW (Slow status)

SLOW (Slow status)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
SLOW(pt1,...,pt16)

pt1 through pt16 Point names of LFSSL or LFSSP points that are commanded to SLOW.

SLOW(@prior, pt1,...,pt15)

@prior Defines a specific point priority.


pt1 through pt15 Point names of LFSSL or LFSSP point types.

Use
For PXC.A devices, this statement has been replaced with SET (Set point value) [➙ 167]
Changes the operational status of a FAST/SLOW/STOP point to SLOW.
● Acceptable point types are: LFSSL or LFSSP.
● A maximum of 16 points can be changed with one SLOW command.
● A maximum of 15 points can be defined with one SLOW(@prior…) command.
Example
20 IF (RMTEMP.LT.75.0)THEN SLOW(@NONE, FAN1,FAN2)
See also the AUTO [➙ 115], FAST [➙ 132], OFF [➙ 151], and ON [➙ 154] topics.

SSTO (Start/stop time optimization)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
SSTO(zone,mode,cst,csp,est,lst,ost,esp,lsp,osp,ast,asp)

NOTE:
Valid mode values are described in the table following the parameter descriptions.

zone SSTO zone number.


- Valid values are 1 to 5.
mode Mode number.
- Valid entries are any combination of 1, 2, 4, 8, or 16 as defined in the following table.
- Mode numbers can be added together to create customized schedules for the TOD program. See the TODMOD
command for more information.

170 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
SSTO (Start/stop time optimization)

cst Calculated start time.


- This parameter is a virtual LAO point name.
- If SSTO is disabled (season = 0 in the SSTOCO command), then cst is assigned to the latest start time.
csp Calculated stop time.
- This parameter is a virtual LAO point name.
- If SSTO is disabled (season = 0 in the SSTOCO command), then csp is assigned the latest stop time.
est Earliest start time.
- This parameter can be a military time (7:30 p.m. = 19:30), a decimal time (7:30 p.m. = 19.50), a logical point name, or a
local variable.
lst Latest start time.
- This parameter can be a military time (7:30 p.m. = 19:30), a decimal time (7:30 p.m. = 19.50), a logical point name, or a
local variable.
ost Occupancy start time.
- This parameter can be a military time (7:30 p.m. = 19:30), a decimal time (7:30 p.m. = 19.50), a logical point name, or a
local variable.
esp Earliest stop time.
- This parameter can be a military time (7:30 p.m. = 19:30), a decimal time (7:30 p.m. = 19.50), a logical point name, or a
local variable.
lsp Latest stop time.
- This parameter can be a military time (7:30 p.m. = 19:30), a decimal time (7:30 p.m. = 19.50), a logical point name, or a
local variable.
osp Occupancy stop time.
- This parameter can be a military time (7:30 p.m. = 19:30), a decimal time (7:30 p.m. = 19.50), a logical point name, or a
local variable.
ast Total adjustment to the calculated start time. This value is changed from day-to-day.
- A decimal value or virtual LAO point type can be defined to store the adjustment value.

asp Total adjustment to the calculated stop time. This value is changed from day to day.
- A decimal value or virtual LAO point type can be defined to store the adjustment value.

Valid SSTO Mode Values.


Mode Schedule

1 Normal schedule

2 Extended schedule

4 Shortened schedule

8 Weekend schedule

16* Holiday schedule

* Mode number 16 (Holiday) should only be used with the HOLIDA command.

Use
The SSTO command calculates the optimal start and stop times for each zone based on information derived from
the SSTOCO command (outside air temperature, zone temperature, desired zone temperature, etc.) as well as
parameters for earliest, latest, and occupancy start times provided in the SSTO command.
This command has the ability to tune itself by incrementing or decrementing the start time after calculating an
adjust time (ast) when errors between actual temperatures and desired temperatures occur.

A6V10374898 2023-05-15 171 | 195


Chapter 3 - Command Syntax
SSTO (Start/stop time optimization)

Example
60 SSTO(1,1,ONTIM,OFTIM,6:30,7:45,8:00,15:30,
16:45,17:00,0.0,0.0)

Notes
● The SSTO command only calculates the optimal start and stop times. TOD and TODSET commands are
needed to command the point.
● When ast or asp is defined as zero, the current adjustment value is displayed each time the command is
displayed. If a virtual LAO point name is entered, the operator can specify (command) an initial value for ast or
asp.
See also the SSTOCO [➙ 173], TOD [➙ 179], and TODSET [➙ 182] topics.

172 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
SSTOCO (SSTO coefficients)

SSTOCO (SSTO coefficients)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
STTOCO(zone,season,intemp,outemp,ctemp,ccoef1,ccoef2, ccoef3,ccoef4,htemp,hcoef1,hcoef2,hcoef3,hcoef4)

NOTE:
For variables used in the command, you can use numbers, point names, or local
variables.

zone SSTO zone number.


- Valid values are 1 to 5.
season Current season. Point name whose value represents the coefficients to be used.
- Heat = 2
- Cool = 1
- Disable SSTO = 0
intemp Point name or average of indoor zone temperature sensor.
outemp Point name or average of outdoor air temperature sensor.

ctempt Desired zone temperature for cooling season.


- This parameter can be a floating point (decimal) number, an integer, a point name, or a local variable.
ccoef1 Cooling coefficient. The time, in hours, required to lower the zone temperature one degree while ignoring external load
factors.
- This value must be entered in fractions of an hour.
ccoef2 Cooling retention coefficient. The time, in hours, required to raise the zone temperature one degree with the cooling
equipment off, outside air dampers open, and the outside temperature 10 degrees higher than the desired zone
temperature for the cooling season.
- This value must be entered in fractions of an hour.

ccoef3 Cooling transfer coefficient. The time, in hours, required to lower the zone temperature one degree with outside air
dampers closed and the outside temperature 10 degrees higher than the desired zone temperature for the cooling season.
- This value must be entered in fractions of an hour.
ccoef4 Cooling auto-tune coefficient. The time, in hours, added to or subtracted from the adjusted time (ast or asp) in the SSTO
command as part of the self-tuning feature.
- This value must be entered in fractions of an hour.
htemp Desired zone temperature for heating season.
- This parameter can be a floating point (decimal) number, an integer, a point name, or a local variable.
hcoef1 Heating coefficient. The time, in hours, required to raise the zone temperature one degree while ignoring external load
factors.
- This value must be entered in fractions of an hour.
hcoef2 Heating retention coefficient. The time, in hours, required to lower the zone temperature one degree with the heating
equipment off, outside air dampers open, and the outside temperature 25 degrees lower than the desired zone
temperature for the heating season.
- This value must be entered in fractions of an hour.

A6V10374898 2023-05-15 173 | 195


Chapter 3 - Command Syntax
SSTOCO (SSTO coefficients)

hcoef3 Heating transfer coefficient. The time, in hours, required to raise the zone temperature one degree with outside air
dampers closed and the outside temperature 25 degrees lower than the desired zone temperature for the heating season.
- This value must be entered in fractions of an hour.
hcoef4 Heating auto-tune coefficient. The time, in hours, added to or subtracted from the adjusted time (ast or asp) in the SSTO
command as part of the self-tuning feature.
- This value must be entered in fractions of an hour.

Use
This command defines the thermal characteristics of a zone based on the season, indoor temperature, outdoor
temperature, and a variety of heating and/or cooling coefficients that are necessary to calculate optimal start and
stop times.
Example
100 SSTOCO(1,1,ROOM10,OATEMP,75.0, 0.01,0.3,
0.05,0.083,72.0,0.1,0.1,0.2,0.083)
See also the SSTO [➙ 170], TOD [➙ 179], and TODMOD [➙ 180] topics.

174 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
STATE (State text command)

STATE (State text command)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ●

Syntax for PXC.A controllers


STATE(cmdPriority)

cmdPriority A command priority specifier. cmdPriority may be specified as @1 through


@16, indicating BACnet priorities 1 (highest) through 16 (lowest).
If cmdPriority is not specified when writing a commandable object, the
program's PPCL Program Priority value shall be used.

STATE(srcValSpec)

srcValSpec A specifier for the value to write to the set of object properties. srcValSpec may
be passed in as:
- One of the strings in the object's state-text array
- An object reference (for example, BAC_7_AO_11, KwMeter). The referenced
object's present-value property will provide the source value.

STATE(targObjRef1, targObjRef2, ...targObjRef14)

targObjRefs A specifier for the target object(s) of the release operation. Multiple objects may
be specified. The same priority slot will be written in each target object. A
targObjRef may be passed as an object reference (for example,
BAC_7_AO_11, KwMeter).

Use
STATE() has been modified to support BACnet command prioritization and to support values passed as object
references as well as state text strings.

Notes
● State text arrays may be localized, meaning that PPCL programs may need to be language-specific if
srcValSpec is passed as a text string.
● Passing in srcValSpec as an object reference allows users to define reusable programs with local objects
representing specific values. This eliminates concerns about localization and customized state texts. For
example,

10 LOCAL (Stop, Slow, Fast)


20 Stop = 1
30 Slow = 2
40 Fast = 3
The strings Stop, Slow, and Fast could then be used as source values.
● srcValSpec is only resolved when the program starts executing. If the text array is modified or the values
assigned to local objects representing specific values are changed, the program will not recognize the change
until the automation station is restarted.
● Database migration tools should automate the transformation of Apogee proprietary priorities to BACnet
priorities.

A6V10374898 2023-05-15 175 | 195


Chapter 3 - Command Syntax
STATE (State text command)

● In general, the program should limit itself to commanding at its specified priority as defined by the PPCL
Program Priority property.
● If the PXC.A automation station is unable to resolve one or more object references, whether the reference is
specified in srcValSpec or one of the targObjRefs, the PPCL line will be marked unresolved.

Syntax for Legacy controllers


STATE(statetext,pt1...pt15)

pt1 through pt15 Points that are commanded to a particular state.

STATE(@pri,statetext,pt1...pt14)

@pri Defines a specific point priority.


statetext State text that can be found in the associated state text table.
pt1 through pt14 Points that are commanded to a particular state.

Use
For PXC.A devices, this statement has been replaced with SET (Set point value) [➙ 167].
Commands points using a state text value.
● A maximum of 15 points can be changed with one STATE command.
● A maximum of 14 points can be changed with one STATE(@pri,statetext,…) command.
Example
500 STATE(NIGHT,TEC1,TEC2,TEC3,TEC4)

176 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
TABLE (Table of coordinates)

TABLE (Table of coordinates)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
TABLE(input,output,x1,y1,...,x7,y7)

input Point name of the input (x) variable.


- This parameter can be a local variable or virtual LAI point type.
output Point name of the output (y) variable.
- This parameter can be a local variable or virtual LAO point type.
x1,y1 through Pairs of coordinates that define the x-y relationship. y1 is the value of the output when the input equals x1; y2 is the value
x7,y7 of the output when the input is x2, etc.
- The coordinates can be integers or decimals.

Use
This command allows you to define a general function of two variables by specifying pairs of coordinates (x,y).
The TABLE command makes a straight line interpolation for the output (y) when the input is between a pair of x
values.
The x points must be entered in ascending order (that is x3 must be larger than x2, etc.).
For inputs lower than x1, the output will always equal y1.
For inputs larger than the last x used, the output will equal the last y value entered.
Example
500 C
502 C TABLE COMMAND INFORMATION:
504 C
506 C OATEMP (X) HWSP (Y)
508 C ---------- ----------
510 C 0 DEG F 180 DEG F
512 C 60 DEG F 100 DEG F
The hot water setpoint will remain at 180F when the outside temperature is below 0F. The hot water setpoint will
remain at 100F when the outside temperature is above 60F.

Notes
TABLE statements can be cascaded by overlapping x-y pairs using virtual points.
Do not use resident points in either the SET or the TABLE command. With both the SET and TABLE commands,
the following should be used for resident points:
Virtual point = Resident point

A6V10374898 2023-05-15 177 | 195


Chapter 3 - Command Syntax
TIMAVG (Average over time)

TIMAVG (Average over time)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
TIMAVG(result,st,samples,input)

result A point name used to store the result of the average value.
- This parameter can be a point name or a local variable.
st Sample time. This is the time, in seconds, between each sample.
- This parameter can be an integer, a point name, or a local variable.
samples Number of samples to be used to calculate the average.
- This must be an integer between 1 and 10.
input Point name whose average value is to be calculated.
- This parameter can be an LAI or LAO point or a local variable.

Use
This command is used to find an average value over time. You decide how often the values should be taken
(sample time) and the number of values to be taken.
The average is always over the most recent sample count and all previous values are discarded.
Example
In the following statement, RMAVG would change every 600 seconds (assuming RMTEMP is changing frequently).
The average value (RMAVG) will also be updated every sample time.
10 C SIX SAMPLES WILL BE TAKEN TO
20 C CALCULATE THE RMAVG.
30 C THE INTERVAL BETWEEN EACH SAMPLE
40 C WILL BE 10 MINUTES. RMTEMP WILL
50 C BE AVERAGED EVERY 60 MINUTES.
60 TIMAVG(RMAVG,600,6,RMTEMP)

Notes
On a return from power failure, after an ENABLE command, or during the first execution of PPCL following a
database load, the TIMAVG command begins executing with one sample. The value of the result will equal the
current value of input.

178 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
TOD (Time of day, digital points)

TOD (Time of day, digital points)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
TOD(mode,recomd,time1,time2,pt1,...,pt12)

mode Mode number.


- Valid entries are any combination of 1, 2, 4, 8, or 16 as defined in the following table.
- Mode numbers can be added together to create customized schedules for the TOD program. See the TODMOD
command for more information.
recomd Determines if the points defined will be commanded after a return from a power failure (fail-safe position). Recomd (re-
command) is sometimes necessary for automation station warmstarts.
- Valid values are 0 and 1.
0 = Does not re-command pt1 through pt12 on return from power failure.
1 = Re-commands pt1 through pt12 on return from power failure.
time1 Time at which an ON command is executed.
- This parameter can be a military time (7:30 p.m. = 19:30), a decimal time (7:30 p.m. = 19.50), a logical point name, or a
local variable.
time2 Time at which an OFF command is executed.
- This parameter can be a military time (7:30 p.m. = 19:30), a decimal time (7:30 p.m. = 19.50), a logical point name, or a
local variable.

pt1 through pt12 Point names of digital output points that are commanded ON or OFF.

Valid TOD Mode Values.


Mode Schedule

1 Normal schedule

2 Extended schedule

4 Shortened schedule

8 Weekend schedule

16* Holiday schedule

* Mode number 16 (Holiday) should only be used with the HOLIDA command.

Use
This command changes digital output point ON and OFF based on the day of the week and the time of day. If the
mode number in the TOD command matches the mode number in the TODMOD command, then TOD commands
the particular output points ON and OFF at the specified times.
Example
10 TOD(1,1,17:00,07:00,OLITE1,OLITE2)
The command time can also be a relative time point that is assigned a value of time. When you calculate a value of
time to be used in a TOD command and assign it to the relative time point, make sure that the calculated time is
greater later than or equal to the current time. The TOD command will not execute properly if the relative time point
is commanded to a time that precedes or is equal to the current time.

A6V10374898 2023-05-15 179 | 195


Chapter 3 - Command Syntax
TODMOD (TOD modes)

TODMOD (TOD modes)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
TODMOD(momode,tumode,wemode,thmode,frmode,samode, sumode)

NOTE:
Valid mode values are described in the table following the parameter descriptions.

momode Mode number for Monday.


- Valid values are 1, 2, 4, or 8.
tumode Mode number for Tuesday.
- Valid values are 1, 2, 4, or 8.
wemode Mode number for Wednesday.
- Valid values are 1, 2, 4, or 8.
thmode Mode number for Thursday.
- Valid values are 1, 2, 4, or 8.

frmode Mode number for Friday.


- Valid values are 1, 2, 4, or 8.
samodet Mode number for Saturday.
- Valid values are 1, 2, 4, or 8.
sumode Mode number for Sunday.
- Valid values are 1, 2, 4, or 8.

Valid TODMOD Mode Values.


Mode Schedule

1 Normal schedule

2 Extended schedule

4 Shortened schedule

8 Weekend schedule

16* Holiday schedule

* Mode number 16 (Holiday) should only be used with the HOLIDA command.

Use
This command defines specific modes (normal, weekend, etc.) for each day of the week. Days that have the same
schedule are assigned the same mode.
The mode assigned to a specific day of the week is used in conjunction with the TOD and TODSET commands to
command points on that day.

180 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
TODMOD (TOD modes)

Example
110 TODMOD(1,1,1,1,2,4,8)
In this example, Monday through Thursday are assigned to a normal schedule, Friday is assigned to an extended
schedule, Saturday is assigned to the shortened schedule, and Sunday is assigned to the weekend schedule.

Notes
The HOLIDA and TODMOD commands must precede any TOD or TODSET commands in order for the program to
operate correctly.
A HOLIDA or TODMOD command in a automation station will only affect TOD and TODSET commands in that
automation station.
When a holiday date occurs in a HOLIDA command, the system sets the TODMOD mode number for that day to
16.
See also the HOLIDA [➙ 141], SSTO [➙ 170], TOD [➙ 179], and TODSET [➙ 182] topics.

A6V10374898 2023-05-15 181 | 195


Chapter 3 - Command Syntax
TODSET (Time of day, analog points)

TODSET (Time of day, analog points)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ●

Syntax
TODSET(mode,recomd,time1,val1,time2,val2,pt1,..., pt10)

NOTE:
Valid mode values are described in the table following the parameter descriptions.

mode Mode number.


- Valid values are 1, 2, 4, 8, or 16.
- Mode numbers can be added together to create customized schedules for the TOD program.
- Mode number 16 should only be used with the HOLIDA command.

recomd Determines if the points defined will be commanded after a return from a power failure (fail-safe position). Recomd (re-
command) is sometimes necessary for automation station warmstarts.
- Valid values are 0 and 1.
0 = Does not re-command pt1 through pt10 on return from power failure.
1 = Re-commands pt1 through pt10 on return from power failure.
time1 Time at which the output points (pt1 through pt10) are commanded to val1.
- This parameter can be a military time (7:30 p.m. = 19:30), a decimal time (7:30 p.m. = 19.50), a logical point name, or a
local variable.
val1 Analog value which the output points (pt1 through pt10) assume at time1.
- This parameter can be a military time (7:30 p.m. = 19:30), a decimal time (7:30 p.m. = 19.50), a logical point name, or a
local variable.
time2 Time at which the output points (pt1 through pt10) are commanded to val2.
- This parameter can be a military time (7:30 p.m. = 19:30), a decimal time (7:30 p.m. = 19.50), a logical point name, or a
local variable.
val2 Analog value which the output points (pt1 through pt10) assume at time2.
- This parameter can be a military time (7:30 p.m. = 19:30), a decimal time (7:30 p.m. = 19.50), a logical point name, or a
local variable.
pt1 through pt10 Names of analog output points that are commanded to a value.

Valid TODSET Mode Values.


Mode Schedule

1 Normal schedule

2 Extended schedule

4 Shortened schedule

8 Weekend schedule

16* Holiday schedule

* Mode number 16 (Holiday) should only be used with the HOLIDA command.

182 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
TODSET (Time of day, analog points)

Use
This command is the counterpart of the TOD command for analog points. It commands analog output points based
on the day of the week and the time of day.
If the mode number in the TODSET command matches the mode number in the TODMOD command, then
TODSET will command the particular output points to val1 and val2 at the specified times.
Example
550 TODSET(1,1,9:00,72.0,17:00,55.0, SPTEMP)
See also the HOLIDA [➙ 141], TOD [➙ 179], and TODMOD [➙ 180] topics.

A6V10374898 2023-05-15 183 | 195


Chapter 3 - Command Syntax
WAIT (Wait time)

WAIT (Wait time)


Unitary Pre-APOGEE APOGEE BACnet PXC.A
● ● ● ● ●

Syntax
WAIT(time,pt1,pt2,mode)

NOTE:
Valid mode values are described in the table following the parameter descriptions.

time Time delay in seconds.


- This parameter can be entered an integer (1 to 32,767), a point name, or a local variable.
pt1 Point name of a digital trigger point.
- This parameter can be a LDI, LDO, L2SL, L2SP, LOOAL, or LOOAP point.
- Local variables can also be used.
pt2 Point name of digital point to be commanded.
- This parameter can be an LDI, LDO, L2SL, L2SP, LOOAL, or LOOAP point.
- Local variables can also be used.
mode Defines the value to which pt2 should be commanded based on the value of pt1.
- Valid values are 11, 10, 01, and 00.

Valid WAIT Modes.


Mode Trigger Point (pt1) Action After Wait (time) Seconds

11 Turns ON pt2 turns ON

10 Turns ON pt2 turns OFF

01 Turns OFF pt2 turns ON

00 Turns OFF pt2 turns OFF

Use
The WAIT command turns a point ON or OFF based on the trigger point switching ON or OFF. Selection of
trigger/result action is based on the mode you enter.
Example
70 C WHEN CNPUMP IS TURNED ON,
72 C THE FIELD PANEL WAITS 60 SECONDS
74 C BEFORE TURNING CHPUMP ON.
75 WAIT(60,CNPUMP,CHPUMP,11)
76 ON(CNPUMP)

184 | 195 2023-05-15 A6V10374898


Chapter 3 - Command Syntax
WAIT (Wait time)

Notes
● The position of the WAIT statement in a program affects its operation. The WAIT statement only works if it sees
a change of value (COV) through both states for the trigger point.
● On a return from power failure or when the WAIT command is enabled, the trigger point must be toggled before
the command executes regardless of the current state of either pt1 or pt2.
● The command to pt2 is only issued once during the normal operation of the program until triggered again.

A6V10374898 2023-05-15 185 | 195


1 Appendix A—PPCL Reserved Word List

1 Appendix A—PPCL Reserved Word List


Appendix A contains the PPCL Reserved Word List. The words, letters, and groups of letters placed on this list are
used by the PPCL compiler. If you use any of the entries on the word list in a way other than the way they are
designed (for example, defining a reserved word as a point name), your PPCL program will not operate properly.
The following predefined points permanently reside in the automation station’s point database. These names are
reserved for specific functions and should not be used as point names.
● $ARG1 through $ARG15
● $BATT
● $LOC1 through $LOC15
● $PDL

● .AND.
● .EQ.
● .GE.
● .GT.
● .LE.
● .LT.
● .NAND.
● .NE.
● .OR.
● .ROOT.
● .XOR.

● @EMER
● @NONE
● @OPER
● @PDL
● @SMOKE

● ACT
● ALMACK
● ALMCNT
● ALMCT2
● ALMPRI
● AND
● ARG1 through ARG15
● ATN
● AUTO

● C (comment)
● COM
● COS
● CRTIME

186 | 195 2023-05-15 A6V10374898


Appendix A—PPCL Reserved Word List 1

● DAY
● DAYMOND
● DAYOFM
● DBSWIT
● DC
● DCR
● DEACT
● DEAD
● DEFINE
● DISABL
● DISALM

● ELSE
● EMAUTO
● EMER
● EMFAST
● EMOFF
● EMON
● EMSET
● EMSLOW
● ENABLE
● ENALM
● EQ
● EQUAL
● EXP

● FAILED
● FAST

● GE
● GOSUB
● GOTO
● GT

● HAND
● HLIMIT
● HOLIDA

● IF
● INITTO

● LE
● LINK
● LLIMIT

A6V10374898 2023-05-15 187 | 195


1 Appendix A—PPCL Reserved Word List

● LOC1 through LOC15


● LOCAL
● LOG
● LOW
● LOOP
● LT

● MAX
● MIN
● MONTH

● NAND
● NE
● NGTMOD
● NIGHT
● NODE1 through NODE99
● NONE
● NOR

● OFF
● OK
● ON
● OPER
● OR

● PDL
● PDLDAT
● PDLDAT
● PDLMTR
● PDLSET
● PRFON

● RELEAS
● RETURN
● ROOT

● SAMPLE
● SECND1 through SECND7
● SECNDS
● SET
● SIN
● SLOW
● SMOKE
● SQRT

188 | 195 2023-05-15 A6V10374898


Appendix A—PPCL Reserved Word List 1

● SSTO
● SSTOCO
● STATE

● TABLE
● TAN
● THEN
● TIMAVG
● TIME
● TOD
● TODMOD
● TODSET
● TOTAL

● WAIT

● XOR

A6V10374898 2023-05-15 189 | 195


2 Appendix B−Property Short Names, Numbers, and Descriptions

2 Appendix B−Property Short Names, Numbers, and


Descriptions
GetVal and SetVal are new statements that allow PPCL access to individual object properties and supports either a
numeric property number or a textual property short name. Note that only properties with numeric data types or
arrays of numeric data types can be read or written in PPCL programs. The PPCL engine will handle conversions
between numeric types (Real, Unsigned, Integer).
A small number of engineering-only properties are not available for use in PPCL. In BMX reports, properties with
Data Exchange Method "never-notified" are not available.
The following table lists property short names available for use in PPCL SetVal() and GetVal() statements.
Properties not shown in this list, but compliant with constraints described above, may be accessed using property
number. All short names in this list must be preceded by @ (for example, @RefVal).

Property Number Short Name Description


6 RefVal Reference value

15 CosCnt Change-of-state count

17 NotifCl Notification class

22 Cov Change of value, COV

24 DsavSta DST status

25 HysToNrml Hysteresis to normal

33 EldActvTi Operating hours

36 EvtSta Event state

40 FbVal Feedback value

45 HiLm High limit

59 LoLm Low limit

65 PrValMax Present maximum value

66 TiOffMin Min.switch-off time

67 TiOnMin Min.switch-on time

69 PrValMin Present minimum value

72 NotifTyp Notification type

74 NumSta Number of states

81 OoServe Out of service

84 Pol Polarity

85 PrVal Present value

86 Prio Priority

87 PrioArr Priority array

90 PgmChg Program change

92 PgmSta Program state

98 ProtVn Protocol version

99 ReadOnly Read-only

103 Rlb Reliability

104 DefCmd Default command

190 | 195 2023-05-15 A6V10374898


Appendix B−Property Short Names, Numbers, and Descriptions 2

Property Number Short Name Description


106 Rsl Resolution

112 SysSta System state

113 TiMonDvn Monitoring time deviation

117 Un Units

120 VendrId Vendor identifier

133 Enable Enable logging

139 ProtRv Protocol revision

155 DbRv Database revision

173 LstRecNr Last notified record number

196 LstRstRn Last restart reason

353 EnEvtDet Enable event detection

356 TiMonDvnNm Monitoring time deviation to normal

4354 StupDef Startup default

4432 PrValTrunc Present value truncated

4433 PrValScale Present value scaled

4482 MntnSta Maintenance state

4483 EldTiStaPrv Elapsed active time per state prev.prd

4484 EldTiStaPr Elapsed active time per state pres.prd

4485 EldTiSta Elapsed active time per state

4486 EldTiRngPrv Elapsed active time per range prev.prd

4487 EldTiRngPr Elapsed active time per range pres.prd

4488 EldTiRng Elapsed active time per range

4489 NumRanges Number of ranges

4490 Oph Operating hours

4491 DvnHiValPrv Deviation high value previous period

4493 DvnHiValPr Deviation high value present period

4494 DvnLoValPr Deviation low value present period

4495 RefHiValDvn Reference high value for deviation

4496 RefLoValDvn Reference low value for deviation

4498 ValMaxPrv Maximum value previous period

4499 ValMinPrv Minimum value previous period

4500 AvrgValPr Average value present period

4501 ValMaxPr Maximum value present period

4502 ValMinPr Minimum value present period

4509 EldTiLmPr Elapsed active time limit pres.period

4510 EldTiLm Elapsed active time limit

4511 EldTiPrvPrd Elapsed active time previous period

4512 EldTiPrPrd Elapsed active time present period

A6V10374898 2023-05-15 191 | 195


2 Appendix B−Property Short Names, Numbers, and Descriptions

Property Number Short Name Description


4513 AggtnPrd Aggregation period

4514 EnAggtn Enable aggregation

4558 AlarmExtn Event configuration

4580 AggtnExtn Aggregation: Operation hours & others

4947 SysUnits System of units

4968 SigTyp Signal type

4972 SupEvtNotf Suppress event notification

4974 TiMonDvnFt Monitoring time deviation to fault

5000 SubsysExtn Subsystem

5040 Tz Time zone

5053 Rlb Reliability

5093 PrPrio Present priority

5094 UpdCnt Update count

5105 CorrFac Correction factor

5106 CorrOfs Correction offset

5107 TckVal Tracking value

5113 AvlFlash Available Flash-memory

5114 AvlRAM Available RAM memory

5127 TotlizdVal Totalized value

5129 ActTiScld Active time scaled

5130 InactTiScld Inactive time scaled

5133 TotListVal Totalized list value

5134 TiTotLVIRst Time of totalized list value reset

5135 TotliznRate Totalization rate

5136 TotPrvRtVal Totalized previous reset value

5137 PrvAcRstVal Previous active reset value

5138 PrvInRstVal Previous inactive reset value

5139 TotPrvRLVal Totalized previous reset list value

5165 MaxPPCLChs Max. PPCL line characters

5167 PPCLPgmPrio PPCL program priority

5194 SnrSharing Sensor sharing

5213 DevInhNotif Device Inhibit Alarm Notifications

5215 AggrType Aggregation Type

192 | 195 2023-05-15 A6V10374898


Appendix C—Program for MEC100K 3

3 Appendix C—Program for MEC100K


00002 C ------------------ PROGRAM FOR MEC100K ------------------
00010 C THIS PROGRAM USES THE MEC 100K THERMISTOR PLUG (549-646).
00012 C INSTALLING PLUG ON A MEC ANALOG INPUT POINT PROVIDES A
00014 C VOLTAGE INPUT WHICH THIS PROGRAM CONVERTS TO A VIRTUAL
00016 C TEMPERATURE ONCE EACH SECOND. PROGRAM USES PAL (125-1804)
00018 C RESISTANCE-TEMPERATURE TABLE FOR LINEARIZATION PARAMETERS.
00020 C
00022 C ----------------------- CAUTION! ------- -----------------
00024 C THIS PROGRAM MUST REMAIN ENABLED IN THE MEC MONITORING THE
00026 C 100K THERMISTOR AT ALL TIMES FOR UP TO DATE TEMPERATURE.
00028 C
00030 C THIS SOFTWARE IS OWNED AND MAINTAINED BY SIEMENS BUILDING
00032 C TECHNOLOGIES INC., BUILDING AUTOMATION UNIT ALL RIGHTS
00034 C RESERVED. MODIFICATIONS WITHOUT EXPRESS, WRITTEN CONSENT
00036 C FROM SIEMENS BUILDING TECHNOLOGIES, INC. MAY VOID WARRANTY.
00038 C
00040 C SEE INSTALLATION INSTRUCTION (586-679)
00042 C FOR CONFIGURATION AND SEQUENCE OF OPERATION.
00044 C SAVE PROGRAM AS "SYSTEM NAME OF FIELD PANEL.MEC100K.PPCL"
00046 C ADDING OTHER PPCL TO THIS PROGRAM IS NOT RECOMMENDED.
00048 C
00050 C VER DATE ENG/SPEC COMMENTS
00052 C 0 10/24/2003 TAD PPCL FIXES PROGRAM PUBLISHED
00054 C
01000 C ---------------- MAIN PROGRAM FOR MEC100K ----------------
01002 C CREATE A GOSUB STATEMENT FOR EACH 100K THERMISTOR POINT
01004 C $ARG1 IS MEC PHYSICAL VOLTAGE INPUT POINT WITH 100K PLUG
01006 C $ARG2 IS MEC VIRTUAL TEMPERATURE INPUT POINT RESULT
01008 C
01010 C GOSUB 2000 "SYSTEM NAME OF TEMPERATURE POINT.100K",
01012 C "SYSTEM NAME OF TEMPERATURE POINT"
01014 C EXAMPLE:
01016 C GOSUB 2000 "BAU.ENG.OATEMP.100K", "BAU.ENG.OATEMP"
01018 C
01020 SAMPLE(1) GOTO 1040
01030 GOTO 2200
01040 C --------------- ENTER GOSUB STATEMENTS HERE ---------------
01980 GOTO 2200
01982 C ------------------- END MAIN PROGRAM ----------------------
01984 C
01990 C ---------------- SUBROUTINE FOR MEC100K -------------------
01992 C CAUTION!: DO NOT ADJUST VALUES IN TABLE STATEMENTS
01994 C $ARG1 VOLTAGE FOR EACH ENTRY IN PAL 100K RES-TEMP TABLE
01996 C $ARG2 LINEARIZED EACH 5 DEGREE FROM -45 TO 255 FARENHEIGHT
01998 C
02000 IF($ARG1 .GE. 1.04172 .AND. $ARG1 .LT. 1.72757) THEN
TABLE($ARG1,$ARG2,1.04172,40.556,1.12967,37.778,1.23875,35.0,1.3417,32.222,1.46782,29
.445,1.58508,26.667,1.72757,23.889) ELSE GOTO 2020
02010 GOTO 2190
02020 IF($ARG1 .GE. 1.72757 .AND. $ARG1 .LT. 2.65442) THEN
TABLE($ARG1,$ARG2,1.72757,23.889,1.8584,21.111,2.01595,18.334,2.1581,15.556,2.32752,1
2.778,2.47716,10.0,2.65442,7.222) ELSE GOTO 2040
02030 GOTO 2190
02040 IF($ARG1 .GE. 2.65442 .AND. $ARG1 .LT. 3.60785) THEN

A6V10374898 2023-05-15 193 | 195


3 Appendix C—Program for MEC100K

TABLE($ARG1,$ARG2,2.65442,7.222,2.80645,4.445,2.98405,1.667,3.13403,-1.111,3.30652,-
3.889,3.44764,-6.667,3.60785,-9.444) ELSE GOTO 2060
02050 GOTO 2190
02060 IF($ARG1 .GE. 3.60785 .AND. $ARG1 .LT. 4.30938) THEN
TABLE($ARG1,$ARG2,3.60785,-9.444,3.73637,-12.223,3.87885,-15.0,3.991,-
17.778,4.11338,-20.556,4.20746,-23.334,4.30938,-26.111) ELSE GOTO 2080
02070 GOTO 2190
02080 IF($ARG1 .GE. 4.30938) THEN TABLE($ARG1,$ARG2,4.30938,-26.111,4.38506,-
28.889,4.46687,-31.667,4.52618,-34.444,4.58958,-37.222,4.63445,-40.0,4.68464,-42.778)
ELSE GOTO 2100
02090 GOTO 2190
02100 IF($ARG1 .GE. 0.6112 .AND. $ARG1 .LT. 1.04172) THEN
TABLE($ARG1,$ARG2,0.6112,57.222,0.66539,54.445,0.7305,51.667,0.7939,48.889,0.87265,46
.111,0.94866,43.333,1.04172,40.556) ELSE GOTO 2120
02110 GOTO 2190
02120 IF($ARG1 .GE. 0.36031 .AND. $ARG1 .LT. 0.6112) THEN
TABLE($ARG1,$ARG2,0.36031,73.889,0.39269,71.111,0.42917,68.334,0.46666,65.556,0.51237
,62.778,0.55631,60.0,0.6112,57.222) ELSE GOTO 2140
02130 GOTO 2190
02140 IF($ARG1 .GE. 0.2185 .AND. $ARG1 .LT. 0.36031) THEN
TABLE($ARG1,$ARG2,0.2185,90.556,0.23623,87.778,0.25706,85.0,0.2785,82.223,0.30543,79.
444,0.33031,76.667,0.36031,73.889) ELSE GOTO 2160
02150 GOTO 2190
02160 IF($ARG1 .GE. 0.13669 .AND. $ARG1 .LT. 0.2185) THEN
TABLE($ARG1,$ARG2,0.13669,107.223,0.1476,104.444,0.15817,101.667,0.17214,98.889,0.185
78,96.111,0.20214,93.333,0.2185,90.556) ELSE GOTO 2180
02170 GOTO 2190
02180 IF($ARG1 .LT. 0.13669) THEN
TABLE($ARG1,$ARG2,0.08726,123.889,0.09545,121.111,0.10124,118.333,0.10942,115.556,0.1
176,112.778,0.12578,110.0,0.13669,107.223)
02190 RETURN
02200 GOTO 1020
02210 C -------------------- END PROGRAM MEC100K -------------------

194 | 195 2023-05-15 A6V10374898


Issued by
Siemens Industry, Inc.
Smart Infrastructure
1000 Deerfield Pkwy
Buffalo Grove IL 60089
+1 847-215-1000

© Siemens 2023
Technical specifications and availability subject to change without notice.
A6V10374898

You might also like