A failure of this application – for whatever reason – may leave an operating process without appropriate
protection and could result in possible damage to property or injury to persons. To protect against this, you
should review the need for additional backup equipment or provide alternate means of protection (such as alarm
devices, output limiting, fail-safe valves, relief valves, emergency shutoffs, emergency switches, etc.).
CAUTION
When implementing control using this product, observe best industry practices as suggested by applicable and
appropriate environmental, health, and safety organizations. While this product can be used as a safety component in
a system, it
NOT intended or designed to be the ONLY safety mechanism in that system.
ControlWave Product Line 1
Manuals You Should Read Before You Read This One 1
What is Covered in this Manual? 1
What Related Documentation is Available? 2
ACCOL III Function Block Library ........................................................................................ 5
What are Alarms? 9
Where can I get detailed information about these function blocks? 11
Configuring an Analog Alarm 12
Using the ALARM_ANALOG function block 13
Configuring a Logical Alarm 17
Using the ALARM_LOGICAL_ON function block 17
Configuring a Change of State Alarm 19
Granting a License for a Controller to Run a Standard Application 23
Removing an Application License from a Controller: 24
Viewing a History of Dongle Issue / Remove Operations: 25
What Are Archive Files? 29
Archive configuration involves four basic steps: 30
What can be done with the data from the Archive File(s)? 31
Step 1. Define Archive Files(s) in the Flash Configuration Utility 31
Step 2. In Your ControlWave Designer Project, Identify the variables you want to archive in the
Archive List 36
Step 3. Create an Output List for Accessing the Most Recent Archive Record (OPTIONAL) 37
Step 4. Configure the ARCHIVE Function Block 38
Step 1. Set parameters in the Flash Configuration Utility 43
Step 2. In ControlWave Designer, identify Variables for which you want to maintain Audit Logging46
Step 3. Configure an AUDIT Function Block 47
BSAP Addressing and Networks ....................................................................................... 49
What is BSAP? 49
Adding A ControlWave to an OpenBSI BSAP Network in the RTU Wizard 51
Setting the BSAP Local Address and EBSAP Group 52
What is Client/Server Communication? 53
BSAP - Underlying Technical Details (For ADVANCED USERS) 53
BSAP Master Port ............................................................................................................ 55
Configuring A BSAP Master Port 56
BSAP Slave Port ............................................................................................................... 61
Configuring a BSAP Slave Port 61
Communication Ports ..................................................................................................... 67
Contents iii
ControlWave Designer Programmer’s Handbook
D301426X012
January 2022
How do I configure the Ports on the ControlWave? 81
What are the factory default settings for communication ports? 81
How can the port configuration be changed? 92
Dialing - An Overview 92
Serial Port Sharing between the BSAP Slave and Custom Slave Protocols: 92
Before you begin: 101
Calling up ControlWave Data in DataView 102
Debugging – An Overview ............................................................................................. 105
Starting Debug Mode 105
Using the Watch Window 105
Using the Cross-Reference Window 107
On-line Editing with Patch POU 108
Using the Force/Overwrite Options 109
Setting a Breakpoint 110
Exiting Debug Mode 112
Two Methods Available for Downloading 113
Downloading from within ControlWave Designer 114
Downloading Your ControlWave Project from Within ControlWave Designer 117
Downloading using the OpenBSI ControlWave Downloader 119
Starting the ControlWave Downloader 121
Using the ControlWave Downloader 122
Creating Download Scripts for Batch Downloading of ControlWave Controllers 123
Expanded BSAP – The Concept 128
General Requirements for Expanded BSAP (EBSAP): 129
Creating an EBSAP Master 130
OpenBSI Workstation is EBSAP Master 130
ControlWave-series Controller is the EBSAP Master 131
Configuring the Control and Status Arrays 132
Defining the Virtual Nodes 141
Defining the EBSAP Slave Nodes 142
Example 1 – OpenBSI Workstation is EBSAP Master to 1000 ControlWave controllers 143
Example 2 – ControlWave Controller is EBSAP Master to 300 ControlWave EBSAP Slaves 146
Flash Configuration Utility – An Overview ...................................................................... 149
Viewing a List of Files in the Flash File Area: 156
Uploading a File from the ControlWave to Your OpenBSI Workstation: 156
Copying a File from the OpenBSI Workstation to Your ControlWave: 157
Deleting a File from the ControlWave User Flash Files Area: 157
Refreshing the List of Files: 158
Function Blocks – Creating ............................................................................................ 159
Function Block Parameter Name Prefixes ....................................................................... 165
Historical Data .............................................................................................................. 167
iv Contents
ControlWave Designer Programmer’s Handbook
D301426X012
January 2022
What is Historical Data Used For? 167
What types of Historical Data can be saved in the ControlWave Controller? 167
How is Audit Trail and Archive Data Retrieved from the ControlWave Controller? 168
What is the I/O Simulator? 283
Starting the I/O Simulator 283
Analog Boards 287
Digital Boards 288
Counter Boards 288
Viewing the Board Configuration Status 289
Configuring a Pin 289
Viewing Simulated Alarms 290
Shutting Down the I/O Simulator 290
Troubleshooting Tip 290
IP Addressing and Networks .......................................................................................... 293
What is the Format of IP Addresses? 293
Adding a ControlWave to an IP Network with the RTU Wizard 298
Setting up IP Ports in the Flash Configuration Utility 299
Recommended Ranges for IP Addresses 299
IP Parameters ................................................................................................................ 301
IP Ports - Ethernet ......................................................................................................... 307
IP Ports – PPP ................................................................................................................ 309
IP Routes ....................................................................................................................... 311
Some Background - What is Memory? 319
What is Downloading? 319
Types of Memory in the ControlWave Process Automation Controller (CW PAC) 320
Contents v
ControlWave Designer Programmer’s Handbook
D301426X012
January 2022
What happens in the event of a power failure or the power switch is turned off? 323
What happens in the event of a watchdog condition? 323
What happens on restart after a power failure or watchdog? 324
Variations when using ControlWave MICRO/EFM 327
Variations when using ControlWave GFC/GFC-CL, XFC, Corrector, Express or ExpressPAC 328
Variations when using ControlWave_10/ _30/ _35 (CW_10, CW_30, CW_35) 329
Memory Allocation Issues 330
Determining POU Size at Compilation Time 330
Resolving “Not Enough Memory” Messages 330
Configuring Your ControlWave Controller as a Modbus Master Device 335
Configuring Your ControlWave Controller as a Modbus Slave or Enron Modbus Slave Device 339
Before You Begin 399
Starting the Variable Extension Wizard 399
Using the Variable Extension Wizard 400
Marking a Variable for Report by Exception (RBE) Collection 403
Configuring a Variable as an Alarm 404
Creating / Editing a List 406
Setting initial values for Manual or Alarm Inhibit/Enable Flags 408
Assigning Units Text (Analog Variables ONLY) 409
Assigning ON/OFF Text (BOOL Variables ONLY) 410
Creating Descriptive Text for the Variable 411
Saving the Initialization Files and Exiting the Wizard 412
Format of Initialization Files 412
Troubleshooting Tips 417
Variables and Data Types .............................................................................................. 419
Global Variables Vs. Local Variables 419
Variable Addressing 420
System Variables 421
Data Types 421
Notes about STRING variables ......................................................................................................... 422
Bringing an Older ControlWave Project into a Newer Version of ControlWave Designer 463
Warning - I/O Configurator and Multiple Copies of ControlWave Designer 464
Index .......................................................................................................................... 465
Contents vii
Introduction
ControlWave Product Line
Unless otherwise noted, the information in this manual applies to any controller in the
ControlWave product line, including:
ControlWave Process Automation Controller
ControlWave Low Power (LP) Controller
ControlWave Redundant Controller
ControlWave MICRO Controller
ControlWave Electronic Flow Meter (EFM)
ControlWave Gas Flow Computer (GFC)
ControlWave Gas Flow Computer Plus (GFC Plus)
ControlWave Designer Programmer’s Handbook
D301426X012
January 2022
ControlWave Explosion-Proof Gas Flow Computer (XFC)
ControlWave Express / Express Process Automation Controller
ControlWave Corrector
Manuals You Should Read Before You Read This One
Before you read this document, we strongly recommend you read, and try out, the
example presented in the Getting Started with ControlWave Designer Manual (part
number D301416X012). It is designed to explain various concepts to first-time
ControlWave users.
In addition, please review the quick setup guide for your particular controller (see next
page for the proper document) which contains notes about how to initially set up your
ControlWave Controller, and how to configure certain parameters for first-time use.
The ControlWave Designer Programmer’s Handbook (which you are reading right now)
builds on the information contained in these other documents, so it is essential that you
are familiar with the material included in them.
What is Covered in this Manual?
The ControlWave Designer Programmer’s Handbook is intended to provide you the
information you need to get the most out of your ControlWave Designer software. It
includes:
Introduction 1
ControlWave Designer Programmer’s Handbook
For information on this…
Please consult this…
ControlWave Designer
Getting Started with ControlWave Designer
IEC 61131 terminology and languages
Online help in ControlWave Designer,
Flash Configuration
Chapter 5 of the OpenBSI Utilities Manual
Web Pages
Web_BSI Manual (part number
Converting ACCOL II source files (*.ACC)
ACCOL Translator User’s Guide (part number
ControlWave Process Automation
ControlWave Quick Setup Guide (part number
ControlWave Low Power (LP) Controller
ControlWave LP Quick Setup Guide (part
ControlWave I/O Expansion Rack
ControlWave I/O Expansion Rack Quick Setup
ControlWave Redundant Controller
ControlWave Redundancy Setup Guide (part
ControlWave Gas Flow Computer (GFC)
ControlWave Gas Flow Computer (GFC)
D301426X012
January 2022
Examples of how to configure various sub-systems of ControlWave software, which
are commonly required in process control applications, such as: alarming, and
historical data collection.
Instructions for how to create your own function blocks, and how to create a library of
them, so they can be re-used in other projects.
Notes about how to use OpenBSI, and BSAP, or IP, to include your ControlWave in a
network.
Explanations about how ControlWave memory works, and how I/O points can be
configured.
Discussions of communication options, as well as how to download your ControlWave
ControlWave Electronic Flow Meter (EFM) ControlWave Electronic Flow Meter (EFM)
accessible through the question mark [?]
menu item.
(part number D301414X012) contains full
details on flash configuration.
D301418X012).
D301417X012)
D301415X012)
number D301422X012)
Guide (part number D301423X012)
number D301424X012).
number D301425X012)
Instruction Manual (part number
D301383X012)
2 Introduction
Instruction Manual (part number
(D301387X1012)
ControlWave Designer Programmer’s Handbook
For information on this…
Please consult this…
ControlWave Explosion-Proof Gas Flow
ControlWave Explosion-Proof Gas Flow
ControlWave Express
ControlWave Express RTU Instruction Manual
ControlWave Express PAC
ControlWave Express PAC Instruction Manual
ControlWave Corrector
ControlWave Corrector Instruction Manual
ControlWave Gas Flow Computer Plus
ControlWave Gas Flow Computer Plus
ControlWave Ethernet I/O
ControlWave Ethernet I/O Instruction Manual
D301426X012
January 2022
Computer (XFC)
ControlWave Industrial Ethernet Real
Time Switches
Computer (XFC) Instruction Manual (part
number D301396X012)
(part number D301386X012)
(part number D301384X012)
(part number D301382X012)
Instruction Manual (part number
D301389X012)
(part number D301395X012)
ControlWave Industrial Ethernet Real-time
Switches Instruction Manual (part number
D301390X012)
Note:
Because the existing ControlWave install-base includes customers with older hardware
and software, for support purposes this manual includes references to older un-supported
operating systems and devices.
Introduction 3
ControlWave Designer Programmer’s Handbook
D301426X012
January 2022
4 Introduction
ControlWave Designer Programmer’s Handbook
Function block or
Minimum Firmware
Description
AGA3
2.00.00
Computes natural gas volume flow rate through an orifice plate in
Computes mass and volume flow rate for fluids (gases or liquids) in
AGA3I
1.00.00
Computes natural gas volume flow rate according to the Factors
AGA3SELECT
5.50.00
Combines the functions of the AGA3I and AGA3TERM function
AGA3TERM
2.00.00
Computes natural gas volume flow rate through an orifice plate in
AGA5
2.00.00
Performs AGA-5 calculations for conversion of computed gas
AGA7
2.00.00
Performs AGA-7 calculations for base volume rate.
AGA8_DET2017
6.00.00
Computes Base compressibility, Flowing compressibility and
AGA8DETAIL
2.00.00
Computes Base compressibility, Flowing compressibility and
AGA8_GRS2017
6.00.00
Computations for natural gas mixtures according to the Gross
ACCOL III Function Block Library
The ACCOL III Function Block Library is a set of functions and function blocks created by
Emerson and included with ControlWave Designer. ACCOL III function blocks are designed
to provide ControlWave Designer with the capabilities of ACCOL II modules used in our
previous ACCOL II language. This library also includes several newer functions which were
not available in ACCOL II.
Note
Other function block libraries are available for liquids calculations, and NIST23 calculations.
Contact Emerson Remote Automation Solutions division for more information.
For instructions on how to use any of these function blocks, please consult the online help
in ControlWave Designer.
D301426X012
January 2022
Function
AGA3DENS 4.10.00
Revision Required
thousands of cubic feet per hour (MSCFH) according to American
Gas Association (AGA) Report #3 1985 Edition.
lbs/hour and cubic ft per hour, for orifice plates, with flange taps
ONLY, according to the method explained in the American Gas
Association (AGA) Report #3 of August, 1992, 3rd Edition (Part 1
and Part 4).
Method in AGA Report #3.
blocks into a single function block.
thousands of cubic feet per hour (MSCFH) according to AGA
Report #3 1985 Edition. Allows factor substitution and display.
volume to energy equivalents.
Supercompressibility for natural gas mixtures, according to the
Detail Characterization Method in the 2017 AGA Report 8 Part 1.
AGA8GROS 1.00.00 Computations for natural gas mixtures according to the Gross
ACCOL III Function Block Library 5
Supercompressibility for natural gas mixtures, according to the
Detail Characterization Method in AGA Report 8.
Characterization method in AGA Report 8.
Characterization method in the 2017 AGA Report 8 Part 1.
ControlWave Designer Programmer’s Handbook
Function block or
Minimum Firmware
Description
AGA8_PART2
6.00.00
Performs calculations specified by 2017 AGA Report 8 Part 2,
AGA10
4.50.00
Computations for natural gas mixtures according to AGA Report
ALARM
4.70.00
Used to batch process alarms defined in the Variable Extension
ALARM_ANALOG
1.00.00
Monitors a process variable and sends a notification message to a
ALARM_LOGICAL_ON
1.00.00
Monitors a Boolean process variable and sends a notification
ALARM_LOGICAL_OFF
1.00.00
Monitors a Boolean process variable and sends a notification
ANOUT
1.00.00
Converts and scales signals for hardware analog output.
ARCHIVE
1.00.00
Provides historical storage of signal values.
ARRAY_ANA_GET
4.50.00
Function. Returns the REAL value of the specified array element.
ARRAY_ANA_SET
4.50.00
Function. Writes a REAL value to the specified array element.
ARRAY_LOG_GET
4.50.00
Function. Returns the BOOL value of the specified array element.
ARRAY_LOG_SET
4.50.00
Function. Writes a BOOL value to the specified array element.
AUDIT_SELECTED
5.40.00
Allows you to log events for value changes of individual variables or
AUTOADJUST
2.00.00
Performs adjusted volume and self check calculations for an
BTI
4.70.00
Allows CW_10, CW_30, and CW_35 controllers with the BBTI
CALC_DENSITY
June 22, 2009 library or
Calculates the mass density of a gas using the real gas relative
CLIENT
2.00.00
Communicates with other ControlWave controllers that have
COMMAND
1.00.00
Pulse Delayed Output.
COMPARATOR
1.00.00
Analog signal comparison.
CRC
2.00.00
Calculates CRC of data stored in an array.
CUSTOM
1.00.00
Custom Communications Interface.
DACCUMULATOR
1.00.00
Performs Double Precision Arithmetic.
DEMUX
1.00.00
Copies a signal value into a list of signals.
D301426X012
January 2022
Function
ALARM_STATE 1.00.00 Monitors a Boolean process variable and sends a notification
Revision Required
Thermodynamic Properties of Natural Gas and Related Gases,
GERG–2008 Equation of State.
Number 10.
Wizard.
remote computer when the variable’s value exceeds user defined
limits.
message to a remote computer when the variable is TRUE.
message to a remote computer when the variable is FALSE.
message to a remote computer when the variable changes state.
AUDIT 1.00.00 Provides historical storage of alarms and events.
log customized events. The customized events can include
standard value change information, alternate values, or NOTE
events. You can use the AUDIT_SELECTED FB independently of the
AUDIT FB.
Invensys Auto-adjust Turbine Meter.
AVERAGER 1.00.00 Computes the time-average and integral.
board to collect data from the Bristol TeletransTM Model 3508
Transmitter.
newer.
DB_LOAD 4.00.00 Loads variable information (LISTS) from a text file.
density (specific gravity)
implemented the Server Function Block.
DIAL_CTRL 4.00.00 Establishes a dial-up connection on a given port, or interface to a
6 ACCOL III Function Block Library
ControlWave Designer Programmer’s Handbook
Function block or
Minimum Firmware
Description
modem.
DIFFERENTIATOR
1.00.00
Differentiates an analog signal.
DISPLAY
4.20.00
Provides support for the keypad display.
ENCODE
1.00.00
Set/Read System Time, Julian /Wall Time Conversions.
EVP
4.50.00
Calculates the equilibrium vapor pressure for a liquid.
FIELDBUS
5.10.00
Interfaces with Foundation Fieldbus devices via a bridge server.
FILE_CLOSE
2.20.00
Function – End access to a flash file.
FILE_DELETE
2.20.00
Function – Remove a file from flash.
FILE_OPEN
2.20.00
Function – Start access to an existing flash file or create a new one.
FILE_READ_STR
2.20.00
Function – Read a line from a file and load into a string.
FILE_WRITE
2.20.00
Function – Send a buffer of binary data to a flash file.
FILE_WRITE_STR
2.20.00
Function – Send a formatted string to a flash file.
FPV
2.00.00
Computes Super Compressibility Factor (FPV) of a gas per AGA
GENERIC_SERIAL
2.00.00
Generic Serial communications serves as a means to buffer user
GPA8173
4.50.00
Converts the mass of natural gas liquids to equivalent liquid
GSV
4.50.00
Converts the gross standard volume for a liquid.
HART
5.00.00
Interface to HART field devices via serial port or I/O board.
HILOLIMITER
1.00.00
Compares a signal against a high and low limit.
HILOSELECT
1.00.00
Finds highest and lowest REAL values in a signal list.
HSCOUNT
1.00.00
High Speed Counter.
HWSTI
4.80.00
Honeywell Smart Transmitter Interface
IEC62591
5.50.00
Allows a ControlWave Micro controller with an IEC62591 Interface
INTEGRATOR
1.00.00
Computes an integral approximation.
ISO5167
2.00.00
Calculates flow rate for Orifice plates, Nozzles, Venturi tubes, and
LEAD_LAG
1.00.00
Adds a controlled delay effect.
LICENSE
4.90
Determines application licenses for the RTU.
LIQUID_DENSITY
4.50.00
Calculates the density of liquid at flowing conditions.
LISTxxx
1.00.00
Define/Expand a list.
MUX
1.00.00
Extracts the value of a signal from a list of signals
PDO
1.00.00
Pulse Duration Output.
PID3TERM
1.00.00
3 Mode PID Control.
PORTATTRIB
4.40.00
Allows the user to set the port characteristics online (except for the
PORT_CONTROL
4.20.00
Communications port manual control.
D301426X012
January 2022
Function
FILE_DIR 2.20.00 Function Block – Get a listing of files. Retrieve file attributes.
FILE_READ 2.20.00 Function – Read binary data from file.
FUNCTION 1.00.00 Table lookup and interpolation with arrays.
Revision Required
Report NX-19.
defined data through a serial port.
volumes at base conditions.
LIST_ELE_NAME 3.00.00 Returns the variable name for a given list element.
ACCOL III Function Block Library 7
module to communicate to IEC62591 wireless devices.
Venturi-nozzle Primary Devices per ISO 5167-1980 (E), 1980
edition
MODE).
ControlWave Designer Programmer’s Handbook
Function block or
Minimum Firmware
Description
R_INT
1.00.00
Function to Truncate to Integer.
RBE
4.40.00
Supports Report by Exception
REDUN_SWITCH
2.00.00
Function to perform programmed fail-over to Redundant Standby.
REG_ARRAY
1.00.00
Register Arrays – For HMI Access.
SCHEDULER
3.00.00
Equalizes the elapsed running time of a number of external
SEQUENCER
1.00.00
Provides sequential output control.
SERVER
2.00.00
Communicates with other ControlWave controllers that have
STEPPER
1.00.00
Sequence up to 255 Boolean Outputs.
STORAGE
04.40
Stores and retrieve historical data.
TCHECK
4.70.00
Provides status checking and data processing for a 3508 Teletrans
USERS_ACTIVE
5.20
Returns information on all currently signed-in users.
USERS_DEFINED
5.20
Allows encrypted access to the security configuration of the
V_ATTRIB_GET
04.50
This function returns the value of the specified attribute of a
V_ATTRIB_SET
04.50
This function sets the value of the specified attribute of a variable.
VAR_ATTRIB_GET
2.10.00
Retrieves the value of an attribute for a variable.
VAR_ATTRIB_SET
2.10.00
Sets the value of an attribute for a variable.
VAR_CI_PROC
2.10.00
Performs the CI (Control Inhibit) processing for the given variable.
VAR_FETCH
3.00.00
This function block fetches complete information about a variable
VAR_SEARCH
3.00.00
This function searches the PDD for variables, both with a given
VIRT_PORT
2.20.00
This function block creates a virtual port by defining a connection
VLIMIT
1.00.00
Limit an input’s rate of change.
VMUX
3.00.00
Extracts the value of a signal from a list of signals and ramps the
WATCHDOG
5.60
Activates a watchdog output based on user-defined criteria.
XMTR
4.70.00
Provides read/write access to the memory of a TeleTrans
D301426X012
January 2022
Function
R_RND 1.00.00 Function to Round to nearest Integer.
RBE_DISABLE 5.60.00 Disables selected RBE variables to prevent RBE reporting from
TOT_TRND 1.00.00 Computes totals from input and slope of input.
Revision Required
them.
devices.
implemented the Client Function Block.
Transmitter.
ControlWave.
variable.
given its name.
index, and by name.
to a terminal server.
output to match the input.
Transmitter, or other compatible device.
8 ACCOL III Function Block Library
Alarm Configuration
What are Alarms?
Alarms are messages generated by the controller
when one or more process variables changes, and
that change violates some pre-defined limit or state.
There are three types of alarms:
Analog Alarms– These alarms are generated when
an analog variable (type REAL, INT, etc.) exceeds a
pre-defined
message is generated when the variable returns to
within the pre-defined limit.
established around the alarm limits so that variables
can fluctuate slightly near the alarm limit without
constantly going into and out of an alarm state, and
thereby flooding the system with repetitive alarms.
Analog alarms are configured using the
ALARM_ANALOG function block.
alarm limit. A return-to-normal
Deadbands can be
ControlWave Designer Programmer’s Handbook
D301426X012
January 2022
Logical Alarms – These alarms are generated when a
variable of type BOOL enters its 'in-alarm' state. A
return-to-normal message is generated when the
variable returns to its opposite (non-alarm) state The
user chooses which state is the 'in alarm' state by the
choice of alarm function block. If its 'in-alarm' state
occurs when the BOOL variable becomes TRUE, then
the ALARM_LOGICAL_ON function block should be
used. if the variable's 'in-alarm' state occurs when the
BOOL variable becomes FALSE, then the
ALARM_LOGICAL_OFF function block should be used.
Note: The ALARM_LOGICAL_ON and
ALARM_LOGICAL_OFF function blocks are identical
except that the ALARM_LOGICAL_ON function block
generates an alarm when the associated process
variable (iaAlarmVar) is TRUE, whereas the
ALARM_LOGICAL_OFF function block generates an
alarm when the associated process variable
(iaAlarmVar) is FALSE.
Alarm Configuration 9
ControlWave Designer Programmer’s Handbook
Alarm Variable
This is the actual process variable which is to be monitored by the alarm
Alarm Priority
The alarm priority is basically a number which indicates the importance
Priority
Value
Meaning
Operator
1
Operator guide alarms are used to indicate everyday
Non-Critical
2
Non-critical alarms are used to indicate problems,
Critical
3
Critical alarms are used to indicate dangerous
Descriptive
Text
Up to 64 characters of descriptive text may be stored along with any
Disable
Alarm processing for a particular process variable can be turned OFF.
Status
Every alarm function block maintains error and status information.
D301426X012
January 2022
Change-of-State Alarms – These alarms are
generated whenever a variable of type BOOL
changes state. In this case, there is no such thing as
a return-to-normal condition. Change-of-State
alarms are configured using the ALARM_STATE
function block.
All three types of alarms have various inputs and
outputs associated with them. These inputs and
outputs are configured within the alarm function
block. The following information is common to all
three types of alarms:
function block. Analog (REAL, INT, etc.) can only be monitored via the
ALARM_ANALOG function block. Boolean variables can be monitored
by either the ALARM_LOGICAL_ON, ALARM_LOGICAL_OFF, or
ALARM_STATE function block(s).
of the alarm. There are four priorities supported in the system:
Event 0 Event alarms are used to indicate normal, everyday
occurrences.
Guide
occurrences which are slightly more important than
events.
which, while not serious enough to cause damage to
a plant or process, require corrective action.
problems that require immediate attention and/or
corrective action.
The choice of which alarm priorities are to be assigned to a particular
alarm variable is entirely at the discretion of the user.
alarm message. This text may be changed dynamically by control logic.
This prevents any alarm messages for that process variable from being
generated. This might be used in the case of system maintenance or
troubleshooting.
Improper configuration is indicated by negative status values, and will
prevent execution of the alarm function block. Positive values indicate
the variable is in an alarm state. A value of ‘0’ indicates there are no
10 Alarm Configuration
ControlWave Designer Programmer’s Handbook
configuration errors, and the variable is NOT in an alarm state. For a full
Alarm
Sequence #
An alarm sequence number is assigned to each alarm message to
Global
Sequence #
A global sequence number is assigned to each audit record, archive
D301426X012
January 2022
description of status values, see the on-line help files.
uniquely identify it within the Alarm System. Alarm sequence numbers
range from 0 to 65,535 and are shared among all alarm function blocks
in the alarm system to maintain proper ordering of messages.
record, or alarm message to uniquely identify it within the ControlWave
controller. Global sequence numbers range from 0 to 65,535 and are
shared by all of these sub-systems to maintain proper ordering of
messages.
The remaining inputs/outputs configured within the Alarm function block vary depending
upon the type of alarm function block being used.
Note
Some parameters in the alarm function block may not be required, depending upon your
specific application. In addition, if you do NOT intend to change the value of a particular
input value, and its parameter only supports a single data type (i.e., its parameter name
does NOT have an “ia” or “iany” prefix), you can enter it as a constant, instead of assigning
a variable name.
Alternatively, the OpenBSI Alarm Router can be used to view alarms, and offers an
interface to custom alarm applications. See the Open BSI Utilities Manual (part number
D301414X012) for information on Alarm Router.
Where can I get detailed information about these function
blocks?
On-line help is provided within ControlWave Designer for every ACCOL3 function block. To
access this, you can right click on the ACCOL3 library icon, and choose
Library…” from the pop-up menu.
Important
This section describes the standard method for alarm configuration. Beginning with
OpenBSI Version 5.4, an alternate way to create alarms is to use the Variable Extension
Wizard and the ALARM function block for batch processing. The Variable Extension Wizard
configures the alarms in the controller, but they do NOT appear within your project. For
information on this method, see the Variable Extension Wizard section, later in this
manual.
“Help on ACCOL 3
Alarm Configuration 11
ControlWave Designer Programmer’s Handbook
D301426X012
January 2022
Configuring an Analog Alarm
For this example, let’s say we have a tank full of water which must be maintained at a
certain temperature range. A temperature transmitter is mounted on the tank to measure
the current temperature of the water, and it has been decided that the water temperature
should be kept between 40.0
that range indicates an alarm condition.
The figure, below, shows a plot of the value of the variable measuring Celsius temperature
in the tank, as it fluctuates over time. Four alarm limits and two deadbands have been
defined. Starting from the left of the graph, the value of the variable increases until it
reaches 70.0
0
C, the high alarm limit (see Item 1). At this point a high alarm message is
generated, and the variable is considered to be in a ‘high alarm’ state.
The value of the variable continues to increase. When it passes the high-high alarm limit of
0
90.0
C a ‘high-high’ alarm message is generated (see Item 2). At this point, the variable is
considered to be in a high-high alarm state.
0
C and 70.00 Celsius. Any temperature reading outside of
The value of the variable then starts to decrease. Although the value passes below 90.0
it is still considered to be in a ‘high-high’ alarm state because there is a 10.0
0
high
0
C,
deadband in effect (deadbands are shown as shaded areas on the graph.) When the
variable value falls lower than 80.0
deadband of 10.0
0
C) the variable is no longer in a ‘high-high’ alarm state (See Item 3). It is
0
C point (90.00 C high alarm limit minus the high
still however in a ‘high’ alarm state.
12 Alarm Configuration
ControlWave Designer Programmer’s Handbook
D301426X012
January 2022
As the value of the variable decreases below 70.00 C, it remains in a ‘high’ alarm state until
its value falls below 60.0
0
C (70.00 C alarm limit, minus a 10.00 C high deadband). (See Item
4). At this point, the variable is in its normal range, and a ‘return-to-normal’ alarm message
is sent.
Then, however, the value of the variable continues to drop. When it reaches 40.0
0
C, a ‘Low
Alarm’ message is generated (See Item 5).
The variable remains in a ‘Low Alarm’ state until the variable value drops to 20.0
0
C. (See
Item 6). This causes a ‘Low Low Alarm’ message to be generated.
The variable remains in a ‘Low-Low Alarm’ state until the variable rises above 30.0
0
(20.0
C low-low alarm limit plus low deadband of 10.00 C). (See Item 7). The variable is still
0
C,
in a ‘Low Alarm’ state, however.
Once the variable rises above 50.0
0
C (40.00 C low alarm limit + low deadband of 10.00 C), it
has left the low-alarm state, and a ‘return to normal’ alarm message is sent (See Item 8).
As long as the variable remains in the normal range (between 40.0 and 70.0
0
C), no more
alarm messages will be generated.
Using the ALARM_ANALOG function block
Where you insert your ALARM_ANALOG function block depends upon the overall
construction of your project:
The ALARM_ANALOG function block can only detect an alarm condition when it is executed.
Therefore, when constructing your project, you should think about how and when you
want to execute the function block.
You might choose to place the ALARM_ANALOG function block in the same POU which
holds primary control logic for the process variable. This is always required if the
variable being monitored is not global. Typically, the ALARM_ANALOG function block
would be placed at the end of the POU. If you require timestamps to reflect the exact
moment the alarm condition occurred, you could place the ALARM_ANALOG function
block immediately following the logic which manipulates the process variable.
Alternatively, you could place the ALARM_ANALOG function block in a separate POU,
which could even be executed at a different task interval. This approach may be
convenient if you want to organize your project such that all alarm function blocks are
in the same place.
Step 1. Following the considerations discussed above, insert an ALARM_ANALOG function
block into your program. A separate ALARM_ANALOG function block is required
for every analog variable you want to configure as an alarm.
Alarm Configuration 13
ControlWave Designer Programmer’s Handbook
D301426X012
January 2022
Step 2. Based on our example of monitoring water temperature in a tank, assign
meaningful variable names, and where applicable, initial values to each of the
parameters of the ALARM_ANALOG function block.
The actual process variable being monitored for alarm conditions must be assigned
to the iaAlarmVar parameter. In this case we will call it WATER_TEMP since that is
the process I/O variable from the temperature transmitter.
Now we need to assign alarm limits and deadbands based on our previous discussion of
the proper range for the water temperature.
Important
You must use the same variable type for alarm limits and alarm deadbands as you use for
your alarm variable. For example, if the alarm variable is defined as type REAL, then every
alarm limit and alarm deadband for that ALARM_ANALOG function block must also be
defined as type REAL. Type mismatches of any kind will prevent the ALARM_ANALOG
function block from working and will generate errors on the odiStatus parameter.
We want to generate an alarm when the temperature goes out of the range 40.00 Celsius
to 70.0
0
Celsius, so 40.0 will be our low alarm limit (iaLoLimit parameter) and 70.0 will be
our high alarm limit (iaHiLimit parameter). We can also assign Low-Low and High-High
alarm limits to generate additional alarm messages if the variable goes much higher or
much lower than the Low and High limits. These are on the iaHiHiLimit and iaLoLoLimit
parameters, respectively. NOTE: You do not need to use all four limits. Only one alarm limit
is required to configure an analog alarm.
Setting Deadbands (iaHiDeadBand, iaLoDeadBand)
We strongly recommend that you define deadbands around your alarm limits. Two
deadbands are supported, iaHiDeadBand is applied to the high and high-high alarm limits,
and iaLoDeadBand is applied to the low and low-low alarm limits. Deadbands are ranges
above a low limit, or below a high limit, in which a return-to-normal message will NOT be
sent, even though a process variable has returned inside the range defined by the alarm
limits. This is to prevent the system from being flooded with alarm messages if a process
variable is fluctuating around the alarm limit. Without a deadband defined, every time the
process variable enters or leaves the normal range, a return-to-normal or alarm message
would be generated, thereby flooding the system with repetitive alarms, even though the
process variable has changed very little. For this example, we have chosen a deadband of
Alarm priorities indicate the severity of the alarm condition triggered by passing one of the
pre-defined alarm limits. For this example, passing either the low or high alarm limits is
considered NON-CRITICAL, and passing either the low-low or high-high alarm limits is
considered CRITICAL. The alarm priority has no effect on the operation of the alarm
system, and is defined strictly at the user’s discretion. Priorities are displayed as part of the
alarm message.
Units Text, Descriptive Text (istrUnitsText, istrDescText)
These parameters are strictly for the convenience of the user. They specify engineering
units for the alarm variable, and descriptive text for the alarm condition.
The table, below, summarizes the values for the various parameters used in this example:
Name
ibDisable WATER_TEMP_ALARM_DISABLE BOOL FALSE For disabling/ enabling
Type
INT, DINT,
USINT, UINT, or
UDINT
alarm processing.
variable measuring
temperature in the
tank.
Alarm Configuration 15
USINT, INT,
ControlWave Designer Programmer’s Handbook
Parameter
Suggested Variable Name
Variable
Value
Notes
UINT, DINT, or
iaHiLimit
WATER_H_LIMIT
REAL, SINT,
70.0
High alarm limit
iaLoLimit
WATER_L_LIMIT
REAL, SINT,
40.0
Low alarm limit
iaLoLoLimit
WATER_LL_LIMIT
REAL, SINT,
20.0
Low low alarm limit
iaHiDeadBand
WATER_HDB
REAL, SINT,
10.0
High alarm deadband
iaLoDeadBand
WATER_LDB
REAL, SINT,
10.0
Low alarm deadband
iiPriority
CRITICAL_PRIORITY
INT 3 High-High Priority
iiHiPriority
NON_CRITICAL_PRIORITY
INT 2 High Priority
iiLoPriority
NON_CRITICAL_PRIORITY
INT 2 Low Priority
iiLoLoPriority
CRITICAL_PRIORITY
INT 3 Low-Low Priority
istrUnitsText
TEMP_UNITS
STRING
'DEG_C'
Engineering units (up
istrDescText
WATER_TEMP_DESC_TEXT
STRING
'WATER
Descriptive text (up to
odiStatus
WATER_TEMP_ALARM_STATUS
DINT
None
Status of the execution
ouiAlarmSeq
WATER_TEMP_ALARM_SEQ_NUM
UINT
None
Alarm sequence
ouiGlobalSeq
WATER_TEMP_GLOBAL_SEQ_NUM
UINT
None
Global sequence
D301426X012
January 2022
Name
Type
UDINT
USINT, INT,
UNIT, DINT or
UDINT
USINT, INT,
UINT, DINT or
UDINT
USINT, INT,
UINT, DINT or
UDINT
USINT, INT,
UINT, DINT or
UDINT
USINT, INT,
UINT, DINT or
UDINT
16 Alarm Configuration
to 6 characters)
TEMPERAT
URE'
64 characters)
of this function block.
number.
number.
ControlWave Designer Programmer’s Handbook
D301426X012
January 2022
The configured alarm block appears, below:
Configuring a Logical Alarm
For this example, let’s say we have an electrical switch which turns ON in the event of a
compressor power failure. When the switch turns ON, we want to generate an alarm.
When the power is restored, the switch turns OFF and a return-to-normal message will be
generated.
Because the alarm condition occurs when the switch turns ON, we must use an
ALARM_LOGICAL_ON function block. (If we wanted to generate an alarm when the switch
turned OFF, we would have used an ALARM_LOGICAL_OFF function block.)
Using the ALARM_LOGICAL_ON function block
Where you insert your ALARM_LOGICAL_ON function block depends upon the overall
construction of your project:
The ALARM_LOGICAL_ON function block can only detect an alarm condition when it is
executed. Therefore, when constructing your project, you should think about how and
when you want to execute the function block.
You might choose to place the ALARM_LOGICAL_ON function block in the same POU
which holds primary control logic for the process variable. This is always required if the
variable being monitored is not global. Typically, the ALARM_LOGICAL_ON function
block would be placed at the end of the POU. If you require timestamps to reflect the
Alarm Configuration 17
ControlWave Designer Programmer’s Handbook
Parameter
Suggested Variable Name
Variable
Value
Notes
ibDisable
POWERFAIL_ALARM_DISABLE
BOOL
FALSE
For disabling/ enabling
iaAlarmVar
COMPRESSOR_POWER_FAILURE
BOOL
None
The ON/OFF status of
iiPriority
CRITICAL_PRIORITY
INT 3 Priority of this alarm
istrOnText
POWER_FAIL_ONTEXT
STRING
'FAILED'
ON message text (up
istrOffText
POWER_FAIL_OFFTEXT
STRING
'NORMAL'
OFF message text (up
istrDescText
POWERFAIL_DESC_TEXT
STRING
'WATER
Descriptive text (up to
D301426X012
January 2022
exact moment the alarm condition occurred, you could place the
ALARM_LOGICAL_ON function block immediately following the logic which
manipulates the process variable.
Alternatively, you could place the ALARM_LOGICAL_ON function block in a separate
POU, which could even be executed at a different task interval. This approach may be
convenient if you want to organize your project such that all alarm function blocks are
in the same place.
Step 1. Following the considerations discussed above,
insert an ALARM_LOGICAL_ON function block
into your program. A separate
ALARM_LOGICAL_ON (or ALARM_LOGICAL_OFF)
function block is required for every variable you
want to configure as a logical alarm.
Step 2. Based on our example of detecting a change of
state of a pump, assign meaningful variable
names, and where applicable, initial values to
each of the parameters of the
ALARM_LOGICAL_ON function block.
The actual process variable being monitored for alarm conditions must be assigned to the
iaAlarmVar parameter. In this case we will call it COMPRESSOR_POWER_FAILURE since
that is the process I/O variable from the switch.
Name
The table, below, summarizes the values for the various parameters used in this example.
Type
alarm processing.
the switch used to
indicate power failure
of the compressor.
NOTE: Alarms are only
generated when
iaAlarmVar is ON.
condition.
to 6 characters)
to 6 characters)
TEMPERAT
URE'
64 characters)
18 Alarm Configuration
ControlWave Designer Programmer’s Handbook
Parameter
Suggested Variable Name
Variable
Value
Notes
odiStatus
POWERFAIL_ALARM_STATUS
DINT
None
Status of the execution
ouiAlarmSeq
POWERFAIL_ALARM_SEQ_NUM
UINT
None
Alarm sequence
ouiGlobalSeq
POWERFAIL_GLOBAL_SEQ_NUM
UINT
None
Global sequence
D301426X012
January 2022
Name
Type
of this function block.
number
number
The configured alarm block appears, below:
Configuring a Change of State Alarm
For this example, let’s say we have a pump which is critical to the operation of a water
plant. Whenever it starts or stops, we want to generate an alarm message. NOTE: In
change-of-state alarms, there is NO return-to-normal state; every change from ON-to-OFF
or OFF-to-ON generates an alarm message.
Using the ALARM_STATE function block
Where you insert your ALARM_STATE function block depends upon the overall
construction of your project:
The ALARM_STATE function block can only detect an alarm condition when it is
executed. Therefore, when constructing your project, you should think about how and
when you want to execute the function block.
You might choose to place the ALARM_STATE function block in the same POU which
holds primary control logic for the process variable. This is always required if the
variable being monitored is not global. Typically, the ALARM_STATE function block
would be placed at the end of the POU. If you require timestamps to reflect the exact
moment the alarm condition occurred, you could place the ALARM_STATE function
block immediately following the logic which manipulates the process variable.
Alternatively, you could place the ALARM_STATE function block in a separate POU,
which could even be executed at a different task interval. This approach may be
Alarm Configuration 19
ControlWave Designer Programmer’s Handbook
Parameter
Suggested Variable Name
Variable
Value
Notes
ibDisable
DISABLE_WATERPMP_STATALRM
BOOL
FALSE
For disabling/ enabling
iaAlarmVar
WATER_PUMP_STATUS
BOOL
None
The ON/OFF status of
iiPriority
CRITICAL_PRIORITY
INT 3 Priority of this alarm
istrOnText
WATER_PUMP_ONTEXT
STRING
'ACTIVE'
ON message text (up
istrOffText
WATER_PUMP_OFFTEXT
STRING
'IDLE'
OFF message text (up
istrDescText
WATER_PUMP_DESC_TEXT
STRING
'WATER
Descriptive text (up to
odiStatus
WATER_PUMP_ALARM_STATUS
DINT
None
Status of the execution
ouiAlarmSeq
WATER_PUMP_ALARM_SEQ_NUM
UINT
None
Alarm sequence
ouiGlobalSeq
WATER_PUMP_GLOBAL_SEQ_NUM
UINT
None
Global sequence
D301426X012
January 2022
convenient if you want to organize your project such that all alarm function blocks are
in the same place.
Step 1. Following the considerations
discussed above, insert an
ALARM_STATE function block into
your program. A separate
ALARM_STATE function block is required
for every variable you want to configure
as a change-of-state alarm.
Step 2. Based on our example of detecting a change of state of a water pump, assign
meaningful variable names, and where applicable, initial values to each of the
parameters of the ALARM_STATE function block.
The actual process variable being monitored for alarm conditions must be assigned to the
iaAlarmVar parameter. In this case we will call it WATER_PUMP_STATUS.
Name
The table, below, summarizes the values for the various parameters used in this example:
Type
alarm processing.
the water pump.
condition.
to 6 characters)
to 6 characters)
PUMP
STATE
CHANGE'
64 characters)
of this function block.
number
20 Alarm Configuration
number
ControlWave Designer Programmer’s Handbook
D301426X012
January 2022
The configured alarm block appears, below:
Alarm Configuration 21
ControlWave Designer Programmer’s Handbook
D301426X012
January 2022
22 Alarm Configuration
Loading...
+ 446 hidden pages
You need points to download manuals.
1 point = 1 manual.
You can buy points or you can get point for every manual you upload.