GFK2222P
GFK2222P
GFK2222P
Intelligent Platforms
PACSystems*
CPU Reference Manual, GFK-2222P
July 2010
GFL-002
Warning
Warning notices are used in this publication to emphasize that hazardous voltages,
currents, temperatures, or other conditions that could cause personal injury exist in this
equipment or may be associated with its use.
In situations where inattention could cause either personal injury or damage to equipment,
a Warning notice is used.
Caution
Caution notices are used where equipment might be damaged if care is not taken.
This document is based on information available at the time of its publication. While efforts
have been made to be accurate, the information contained herein does not purport to cover all
details or variations in hardware or software, nor to provide for every possible contingency in
connection with installation, operation, or maintenance. Features may be described herein
which are not present in all hardware and software systems. GE Intelligent Platforms assumes
no obligation of notice to holders of this document with respect to changes subsequently made.
* indicates a trademark of GE Intelligent Platforms, Inc. and/or its affiliates. All other
trademarks are the property of their respective owners.
GlobalCare
Additional information http://www.ge-ip.com/
1H
Technical Support
If you have technical problems that cannot be resolved with the information in this guide, please
contact us by telephone or email, or on the web at www.ge-ip.com/support
3H
Americas
Online Technical Support http://support.ge-ip.com
4H
Phone 1-800-433-2682
International Americas Direct Dial 1-780-420-2010 (if toll free 800 option is unavailable)
Technical Support Email [email protected]
5H6
Phone +800-1-433-2682
EMEA Direct Dial +352-26-722-780 (if toll free 800 option is unavailable or if
dialing from a mobile telephone)
Technical Support Email [email protected]
10H
Asia Pacific
Online Technical Support http://support.ge-ip.com
14H
Phone +86-400-820-8208
+86-21-3217-4826 (India, Indonesia, and Pakistan)
Technical Support Email [email protected] (China)
15H6
[email protected] (Japan)
17H8
[email protected] (China)
23H
Introduction....................................................................................................................1-1
New Features.................................................................................................................... 1-2
PACSystems Control System Overview ........................................................................... 1-2
Programming and Configuration .............................................................................. 1-2
Process Systems ..................................................................................................... 1-2
PACSystems CPU Models....................................................................................... 1-3
RX3i Overview ......................................................................................................... 1-4
RX7i Overview ......................................................................................................... 1-5
Migrating Series 90 Applications to PACSystems ............................................................ 1-6
PACSystems Documentation ........................................................................................... 1-7
GFK-2222P v
Contents
Program Organization...................................................................................................5-1
Structure of a PACSystems Application Program ............................................................ 5-1
Blocks....................................................................................................................... 5-1
Functions and Function Blocks ................................................................................ 5-1
How Blocks Are Called............................................................................................. 5-2
Nested Calls............................................................................................................. 5-2
Types of Blocks........................................................................................................ 5-3
Local Data .............................................................................................................. 5-13
Parameter Passing Mechanisms ........................................................................... 5-14
Languages ............................................................................................................. 5-16
Controlling Program Execution ....................................................................................... 5-18
GFK-2222P Contents ix
Contents
GFK-2222P Contents xi
Contents
Communications .........................................................................................................12-1
Ethernet Communications .............................................................................................. 12-2
Embedded Ethernet Interface ................................................................................ 12-2
Ethernet Interface Modules .................................................................................... 12-2
Serial Communications................................................................................................... 12-3
Serial Port Communications Capabilities............................................................... 12-3
Configurable Stop Mode Protocols ........................................................................ 12-4
Serial Port Pin Assignments................................................................................... 12-4
Serial Port Baud Rates........................................................................................... 12-7
Series 90-70 Communications and Intelligent Option Modules...................................... 12-8
Communications Coprocessor Module (CMM) ...................................................... 12-8
Programmable Coprocessor Module (PCM).......................................................... 12-9
DLAN/DLAN+ (Drives Local Area Network) Interface.......................................... 12-10
Diagnostics ..................................................................................................................14-1
Fault Handling Overview................................................................................................. 14-2
System Response to Faults ................................................................................... 14-2
Fault Tables ........................................................................................................... 14-2
Fault Actions and Fault Action Configuration......................................................... 14-3
Using the Fault Tables.................................................................................................... 14-4
Controller Fault Table............................................................................................. 14-4
I/O Fault Table ....................................................................................................... 14-6
System Handling of Faults.............................................................................................. 14-8
System Fault References....................................................................................... 14-8
Using Fault Contacts............................................................................................ 14-11
Using Point Faults ................................................................................................ 14-13
Using Alarm Contacts .......................................................................................... 14-13
Controller Fault Descriptions and Corrective Actions ................................................... 14-14
Loss of or Missing Rack (Group 1) ...................................................................... 14-15
Loss of or Missing Option Module (Group 4) ...................................................... 14-16
Addition of, or Extra Rack (Group 5).................................................................... 14-16
Reset of, Addition of, or Extra Option Module (Group 8) ..................................... 14-17
System Configuration Mismatch (Group 11)........................................................ 14-18
System Bus Error (Group 12)............................................................................... 14-24
CPU Hardware Failure (Group 13) ...................................................................... 14-24
Module Hardware Failure (Group 14) .................................................................. 14-25
Option Module Software Failure (Group 16) ........................................................ 14-25
Program or Block Checksum Failure (Group 17)................................................. 14-27
Battery Status (Group 18) .................................................................................... 14-28
Constant Sweep Time Exceeded (Group 19) ...................................................... 14-28
System Fault Table Full (Group 20)..................................................................... 14-29
I/O Fault Table Full (Group 21) ........................................................................... 14-29
User Application Fault (Group 22) ...................................................................... 14-29
CPU Over Temperature (Group 24)..................................................................... 14-31
Power Supply Fault (Group 25) ........................................................................... 14-32
No User Program on Power-Up (Group 129)....................................................... 14-32
Corrupted User Program on Power-Up (Group 130) ........................................... 14-33
Window Completion Failure (Group 131)............................................................. 14-34
Password Access Failure (Group 132) ................................................................ 14-34
Null System Configuration for Run Mode (Group 134) ....................................... 14-34
GFK-2222P Contents xv
Contents
1
This manual contains general information about PACSystems CPU operation and
program content. It also provides detailed descriptions of specific programming
requirements.
Chapter 1 provides a general introduction to the PACSystems family of products,
including new features, product overviews, and a list of related documentation.
CPU hardware features and specifications are provided in chapter 2.
Installation procedures are described in the PACSystems RX7i Installation Manual,
GFK-2223 and the PACSystems RX3i Installation Manual, GFK-2314.
CPU Configuration is described in chapter 3. Configuration using the programming
software determines characteristics of module operation and establishes the program
references used by each module in the system. For details on configuration of the
embedded RX7i Ethernet interface as well as the rack-based RX7i and RX3i Ethernet
Interface modules, refer to TCP/IP Ethernet Communications for PACSystems,
GFK-2224.
CPU Operation is described in chapter 4.
Programming Features are described in chapters 5 through 9 and Appendix A.
■ Elements of an Application Program: chapter 5
■ Program Data: chapter 6
■ Ladder Diagram (LD) instruction set reference: chapter 7
■ Function Block Diagram (FBD) instruction set reference: chapter 8
■ The Service Request Function: chapter 9
■ The PID Function: chapter 10
■ Structured Text (ST): chapter 11
Ethernet and Serial Communications are described in chapter 12.
Serial I/O, SNP, and RTU Protocols are described in chapter 13.
Diagnostics, including Fault Handling and Diagnostic Logic Blocks are described in
chapter 14.
Instruction Timing is provided in appendix A.
User Memory Allocation is described in Appendix B.
GFK-2222P 1-1
1
New Features
Note: A given feature may not be implemented on all PACSystems CPUs. To
determine whether a feature is available on a given CPU model and firmware
version, please refer to the Important Product Information (IPI) document
provided with the CPU.
This revision of the PACSystems CPU Reference Manual includes the following new
features, introduced in firmware versions 6.01 and 6.02:
Support for OEM protection in flash-based systems that do not use a battery. For
details, see “OEM Protection” in chapter 4.
The block name is now provided in User Application faults.
Support for RX3i CPU315, 1GHz CPU with 20MB user memory.
Process Systems
PACSystems CPUs with firmware version 5.0 and later support Proficy Process Systems
(PPS). PPS is a complete, tightly integrated, seamless process control system using
PACSystems, Proficy HMI/SCADA, and Proficy Production Management Software to
provide control, optimization, and performance management to manage and monitor
batch or continuous manufacturing. It delivers the tools required to design, implement,
document, and maintain an automated process. For information about purchasing PPS
software, refer to the Support website.
RX3i Overview
The RX3i control system hardware consists of an RX3i universal backplane and up to
seven Series 90-30 expansion or remote racks. The CPU can be in any slot in the
universal backplane except the last slot, which is reserved for the serial bus transmitter,
IC695LRE001.
The RX3i supports user defined Function Blocks (LD logic only) and Structured Text
programming.
The RX3i universal backplane uses a dual bus that provides both:
■ High-speed PCI for fast throughput of new advanced I/O.
■ Serial backplane for easy migration of existing Series 90-30 I/O
The RX3i universal backplane and Series 90-30 expansion/remote racks support the
Series 90-30 Genius Bus Controller and Motion Control modules, and most Series
90-30/RX3i discrete and analog I/O with catalog prefixes IC693 and IC694. RX3i modules
with catalog prefixes IC695, including the Ethernet and other communications modules
can only be installed in the universal backplane. See the PACSystems RX3i System
Manual, GFK-2314 for a list of supported modules.
RX3i supports hot standby (HSB) CPU redundancy, which allows a critical application or
process to continue operating if a failure occurs in any single component. A CPU
redundancy system consists of an active unit that actively controls the process and a
backup unit that is synchronized with the active unit and can take over the process if it
becomes necessary. Each unit must have a redundancy CPU, (IC695CRU320). The
redundancy communication path is provided by IC695RMX128 Redundancy Memory
Xchange (RMX) modules set up as redundancy links. For details on the operation of
PACSystems redundancy systems, refer to the PACSystems Hot Standby CPU
Redundancy User’s Guide, GFK-2308.
RX3i communications features include:
■ Open communications support includes Ethernet, and serial protocols. The Ethernet
Interface (resides in a backplane slot) has dual RJ-45 ports connected through an
auto-sensing switch. This eliminates the need for rack-to-rack switches or hubs. The
Ethernet Interface supports upload, download and online monitoring, and provides 32
SRTP channels and allows a maximum of 48 simultaneous SRTP server
connections. For details on Ethernet Interface capabilities, refer to TCP/IP Ethernet
Communications for PACSystems, GFK-2224.
■ The RX3i supports PROFIBUS communications via the PROFIBUS Master module.
For details, refer to the PACSystems RX3i PROFIBUS Modules User’s Manual,
GFK-2301.
■ Two serial ports, one RS-232 and one RS-485.
RX7i Overview
The RX7i control system hardware consists of an RX7i rack and up to seven
Series 90-70 expansion racks. The CPU resides in slot 1 of the main rack. RX7i racks
use a VME64 backplane that provides up to four times the bandwidth of existing VME
based systems, including the current Series 90-70 systems for faster I/O throughput. The
VME64 base supports all standard VME modules including Series 90-70 I/O and VMIC
modules.
Expansion racks support Series 90-70 discrete and analog I/O, the Genius Bus
Controller, and the High Speed Counter. The CPU provides an embedded auto-sensing
10/100 Mbps half/full duplex Ethernet interface.
RX7i supports hot standby (HSB) CPU redundancy, which allows a critical application or
process to continue operating if a failure occurs in any single component. A CPU
redundancy system consists of an active unit that actively controls the process and a
backup unit that is synchronized with the active unit and can take over the process if it
becomes necessary. Each unit must have a redundancy CPU, (IC698CRE020, CRE030
or CRE040). The redundancy communication path is provided by IC698RMX016
Redundancy Memory Xchange (RMX) modules set up as redundancy links. For details
on the operation of PACSystems redundancy systems, refer to the PACSystems Hot
Standby CPU Redundancy User’s Guide, GFK-2308.
Note: Extended operation with dissimilar CPU types is not allowed. During normal
operation, the primary and secondary units in an HSB redundancy system must
have the same CPU model type.
The primary and secondary units of an HSB redundancy system can have
dissimilar model types for a limited time, for the purpose of system upgrade only.
Fail wait times for the higher performance CPU in a dissimilar redundant pair
may need to be increased to allow synchronization.
RX7i communications features include:
■ Open communications support includes Ethernet, Genius, and serial protocols.
■ A built-in 10/100mb Ethernet interface that has dual RJ-45 ports connected through
an auto-sensing switch for upload, download and online monitoring. This eliminates
the need for rack-to-rack switches or hubs. The CPU Ethernet Interface provides
basic remote control system monitoring from a web browser and allows a combined
total of up to 16 web server and FTP connections. For details on Ethernet Interface
capabilities, refer to TCP/IP Ethernet Communications for PACSystems, GFK-2224.
■ Two serial ports, one RS-232 and one RS-485.
■ An RS-232 isolated Ethernet station manager serial port.
PACSystems Documentation
PACSystems Manuals
PACSystems CPU Reference Manual, GFK-2222
TCP/IP Ethernet Communications for PACSystems, GFK-2224
Station Manager for PACSystems, GFK-2225
PACSystems C Toolkit User’s Guide, GFK-2259
PACSystems Memory Xchange Modules User’s Manual, GFK-2300
PACSystems Hot Standby CPU Redundancy User’s Manual, GFK-2308
Proficy Machine Edition Logic Developer Getting Started, GFK-1918
Proficy Process Systems Getting Started Guide, GFK-2487
RX3i Manuals
PACSystems RX3i Hardware and Installation Manual, GFK-2314
DSM324i Motion Controller for PACSystems RX3i and Series 90-30, GFK-2347
PACSystems RX3i PROFIBUS Modules User’s Manual, GFK-2301
PACSystems RX3i MAXON Software User’s Manual, GFK-2409
PACSystems RX3i Ethernet NIU User’s Manual, GFK-2439
PACMotion Multi-Axis Motion Controller User’s Manual, GFK-2448
RX7i Manuals
PACSystems RX7i Hardware and Installation Manual, GFK-2223
PACSystems RX7i User's Guide to Integration of VME Modules, GFK-2235
Genius Bus Controller User’s Manual, GFK-2017
Series 90 Manuals
Series 90 Programmable Coprocessor Module and Support Software, GFK-0255
Series 90 PLC Serial Communications Driver User's Manual, GFK-0582
C Programmer's Toolkit for Series 90 PLCs User's Manual, GFK-0646
Installation Requirements for Conformance to Standards, GFK-1179
TCP/IP Ethernet Communications for the Series 90 PLC Station Manager
Manual, GFK-1186
Series 90-70 Programmable Controller Installation Manual, GFK-0262
Series 90-70 CPU Instruction Set Reference Manual, GFK-0265
Series 90-30 Genius Bus Controller, GFK-1034
Series 90-30 System Manual, GFK-1411
Ethernet NIU User’s Manual, GFK-2296
Genius I/O System User’s Manual, GEK-90486-1
Genius I/O Analog and Discrete Blocks User’s Manual, GEK-90486-2
In addition to these manuals, datasheets and product update documents describe
individual modules and product revisions. The most recent PACSystems documentation
is available on the Support website.
If you purchased this product through an Authorized Channel Partner, please contact
them directly.
2
This chapter provides details on the hardware features of the PACSystems CPUs and
their specifications.
GFK-2222P 2-1
2
For details on the operation of the Auxiliary Battery Module, refer to the
datasheet, GFK-2124.
Note: The IC698ACC701 RX7i Replacement Battery is not compatible
with the CPE030, CRE030, CPE040 and CRE040 CPU modules.
Program storage Up to 64 Mbytes of battery-backed RAM
64 Mbytes of non-volatile flash user memory
Power requirements CPE030/CRE030:+5 VDC: 3.2 Amps nominal
+12 VDC: 0.003 Amps nominal
-12 VDC: 0.003 Amps nominal
CPE040/CRE040: +5 VDC: 6.8 Amps nominal
+12 VDC: 0.003 Amps nominal
-12 VDC: 0.003 Amps nominal
Operating temperature CPE030/CRE030: 0 to 50°C (32°F to 122°F
0 to 60°C (32°F to 140°F) with fan tray
CPE040/CRE040: 0 to 60°C (32°F to 140°F), fan tray required
Floating point Yes
Boolean execution speed, typical: CPE030/CRE030: 0.069ms per 1000 Boolean instructions
CPE040/CRE040: 0.024ms per 1000 Boolean instructions
Time of Day Clock accuracy Maximum drift of ±2 seconds per day.
Can be synchronized to an Ethernet time master within ±2ms of the SNTP
time stamp.
Elapsed Time Clock (internal ±0.01% maximum
timing) accuracy
Embedded communications RS-232, RS-485, Ethernet interface
Serial Protocols supported Modbus RTU Slave, SNP, Serial I/O
To determine availability for a given firmware version, please refer to the
Important Product Information document provided with the CPU.
Ethernet Ports Embedded auto-sensing 10/100 Mbps half/full duplex Ethernet interface
[Optional] Station Manager cable IC200CBL001
for Ethernet Interface
VME Compatibility System designed to support the VME64 standard ANSI/VITA 1
Program blocks Up to 512 program blocks. Maximum size for a block is 128KB.
Memory %I and %Q: 32Kbits for discrete
(For a detailed listing of memory %AI and %AQ: configurable up to 32Kwords
areas, refer to chapter 7.) %W: configurable up to the maximum available user RAM
Managed memory (Symbolic and I/O variables combined): configurable up
to 10 Mbytes
Error checking and correction CRE030 and CRE040 only
Caution
The two ports on the Ethernet Interface must not be connected,
directly or indirectly to the same device. The hub or switch
connections in an Ethernet network must form a tree; otherwise
duplication of packets may result.
STAT Off
EOK Slow Blink* Waiting for IP Address
LAN On/Traffic/Off
STAT Slow Blink*
(* EOK and STAT blink in unison)
EOK On Operational
LAN On/Traffic/Off
STAT On/Off
EOK Slow Blink** Software Load
LAN Slow Blink**
STAT Slow Blink**
(** All LEDs blink in unison)
Normal Restart
When the Ethernet Restart pushbutton is pressed for less than 5 seconds, the Ethernet
interface will restart into normal operation.
Serial Ports
RUN I/O
STOP ENABLE
chapter 12.
Indicators COM 2
LED State
On Blinking Off CPU Operating State
SYSTEM FAULT On CPU is in Stop/Faulted mode because a fatal fault has occurred.
COM1 Blinking Signal activity on port.
COM2 Blinking
*After initialization sequence is complete.
Specifications – CPU310
For environmental specifications, see Appendix A of the PACSystems RX3i System
Manual, GFK-2314.
Battery: Memory retention For estimated battery life under various conditions, see “Battery Life
6H
Estimates,” below.
Program storage Up to 10 Mbytes of battery-backed RAM
10Mbyte of non-volatile flash user memory
Power requirements +3.3 VDC: 1.25 Amps nominal
+5 VDC: 1.0 Amps nominal
Operating Temperature 0 to 60°C (32°F to 140°F)
Floating point Yes
Boolean execution speed, typical 0.195ms per 1000 Boolean instructions
Time of Day Clock accuracy Maximum drift of ±2 seconds per day.
Can be synchronized to an Ethernet time master within ±2ms of the
SNTP time stamp.
Elapsed Time Clock (internal timing) accuracy ±0.01% maximum
Embedded communications RS-232, RS-485
Serial Protocols supported Modbus RTU Slave, SNP, Serial I/O
Backplane Dual backplane bus support: RX3i PCI and high speed serial bus
PCI compatibility System designed to be electrically compliant with PCI 2.2 standard
Program blocks Up to 512 program blocks. Maximum size for a block is 128KB.
Flash memory endurance rating 100,000 write/erase cycles minimum
Memory %I and %Q: 32Kbits for discrete
(For a detailed listing of memory areas, refer to %AI and %AQ: configurable up to 32Kwords
chapter 7.) %W: configurable up to the maximum available user RAM
Managed memory (Symbolic and I/O variables combined):
configurable up to 10 Mbytes
Serial Ports
COM1 ACTIVE
The CPU has two independent, on-board serial ports,
COM2 ACTIVE
accessed by connectors on the front of the module. Ports 1
and 2 provide serial interfaces to external devices. Either
port can be used for firmware upgrades. For serial port pin
assignments and details on serial communications, refer to COM 2
chapter 12.
BATT
Indicators
The eight CPU LEDs indicate the operating status of various CPU functions.
LED State
On Blinking Off CPU Operating State
SYSTEM FAULT On CPU is in Stop/Faulted mode because a fatal fault has occurred.
COM1 Blinking Signal activity on port.
COM2 Blinking
*After initialization sequence is complete.
CRU320 Specifications
Note: For environmental specifications and compliance to standards (for example, FCC
or European Union Directives), refer to the PACSystems RX3i System
Manual, GFK-2314.
Battery: Memory retention Estimated 30 days using an IC693ACC302 Auxiliary Battery Module at 20ºC.
For details on the operation of the Auxiliary Battery Module, refer to the datasheet,
GFK-2124.
Note: The IC698ACC701 Lithium Battery Pack is not compatible with
the CRU320 and must not be used.
Program storage Up to 64 Mbytes of battery-backed RAM
64 Mbytes of non-volatile flash user memory
Power requirements +3.3 VDC: 1.0 Amps nominal
+5 VDC: 1.2 Amps nominal
Operating Temperature 0 to 60°C (32°F to 140°F)
Floating point Yes
Boolean execution speed, typical 0.047 ms per 1000 Boolean instructions
Time of Day Clock accuracy Maximum drift of 2 seconds per day
Elapsed Time Clock (internal timing) 0.01% maximum
accuracy
Embedded communications RS-232, RS-485
Serial Protocols supported Modbus RTU Slave, SNP Slave, Serial I/O
Backplane Dual backplane bus support: RX3i PCI and high speed serial bus
PCI compatibility System designed to be electrically compliant with PCI 2.2 standard
Program blocks Up to 512 program blocks. Maximum size for a block is 128KB.
Memory %I and %Q: 32Kbits for discrete
%AI and %AQ: configurable up to 32Kwords
%W: configurable up to the maximum available user RAM
Symbolic: configurable up to 64 Mbytes
Flash memory endurance rating 100,000 write/erase cycles minimum
Memory error checking and Single bit correcting and multiple bit checking.
correction (ECC)
Switchover Time* Maximum 1 logic scan, minimum 3.133 msec.
Typical Base Sweep Time 3.66 msec: 1K Discrete I/O, 125 Analog I/O and 1K Registers
(Reference Data Transfer List 3.87 msec: 2K Discrete I/O, 250 Analog I/O and 2K Registers
Impact)**
4.30 msec: 4K Discrete I/O, 500 Analog I/O and 4K Registers
5.16 msec: 8K Discrete I/O, 1K Analog I/O and 8K Registers
Maximum amount of data in Up to 2 Mbytes
redundancy transfer list
Number of redundant redundancy Up to two IC695RMX128 synchronization links are supported.
links supported
* Switchover time is defined as the time from failure detection until backup CPU is
active in a redundancy system.
** Symbolic variable and Reference data can be exchanged between redundancy
controllers. Up to 2 Mbytes of data is available for transfer.
3
The PACSystems CPU and I/O system is configured using Machine Edition Logic
Developer-PLC programming software.
The CPU verifies the physical module and rack configuration at power-up and periodically
during operation. The physical configuration must be the same as the programmed
configuration. Differences are reported to the CPU alarm processor for configured fault
response. Refer to the Machine Edition Logic Developer-PLC Getting Started Manual,
GFK-1918 and the online help for a description of configuration functions.
Note: A CPE020, CPE030 or CPE040 can be converted to the corresponding
redundancy CPU (CRE020, CRE030 or CRE040) by installing different firmware
and moving a jumper. Detailed instructions are included in the firmware upgrade
kit for the redundancy CPU.
4. Store the configuration to the PLC so these settings can take effect. For details, see
“Storing (Downloading) a Configuration” on page 3-17.1H
Note: The embedded Ethernet Interface (RX7i only) is displayed in a subslot of the CPU
slot. For details on configuring the embedded Ethernet Interface, refer to
chapter page 3-18.
2H
GFK-2222P 3-1
3
Configuration Parameters
Settings Parameters
These parameters specify basic operating characteristics of the CPU. For details on how
these parameters affect CPU operation, refer to chapter 5.
Settings Parameters
Passwords Specifies whether passwords are Enabled or Disabled. Default: Enabled.
Note: When passwords are disabled, they cannot be re-enabled without clearing PLC
memory.
Stop-Mode I/O Specifies whether the I/O is scanned while the PLC is in Stop mode. Default: Disabled.
Scanning (Always Disabled for Redundancy CPU.)
Note: This parameter corresponds to the I/O ScanStop parameter on a Series 90-70
PLC.
Watchdog Timer (ms) (Milliseconds in 10 ms increments.) Requires a value that is greater than the program
sweep time.
The watchdog timer is designed to detect "failure to complete sweep" conditions. The CPU
restarts the watchdog timer at the beginning of each sweep. The watchdog timer
accumulates time during the sweep. The software watchdog timer is useful in detecting
abnormal operation of the application program, which could prevent the PLC sweep from
completing within the watchdog time period.
Valid range: 10 through 2550, in increments of 10.
Default: 200.
Note: For details on setting the watchdog timer in a CPU redundancy system, refer to the
PACSystems Hot Standby CPU Redundancy User’s Guide, GFK-2308.
Logic/Configuration Specifies the location/source of the logic and configuration data that is to be used (or
Power-up Source loaded/copied into RAM) after each power up.
Choices: Always RAM, Always Flash, Conditional Flash.
Default: Always RAM.
Data Power-up Source Specifies the location/source of the reference data that is to be used (or loaded/copied into
RAM) after each power up.
Choices: Always RAM, Always Flash, Conditional Flash.
Default: Always RAM.
Run/Stop Switch Enables or disables the Run/Stop Mode Switch.
Choices:
Enabled: Enables you to use the physical switch on the PLC to switch the PLC into Stop
mode or from Stop mode into Run mode and clear non-fatal faults.
Disabled: Disables the physical Run/Stop switch on the PLC.
Default: Enabled.
Note: If both serial ports are configured for any protocol other than RTU Slave or SNP
Slave, the Run/Stop switch should not be disabled without first must making sure
that there is a way to stop the CPU, or take control of the CPU through another
device such as the Ethernet module. If the CPU can be set to Stop mode, it will
switch the protocol from Serial I/O to the Stop Mode protocol (default is RTU
Slave). For details on Stop mode settings, refer to “Port 1 and Port 2 Parameters”
on page 3-10.
3H
Settings Parameters
Memory Protection Enables or disables the Memory Protect feature associated with the Run/Stop Mode Switch.
Switch Choices:
Enabled: Memory Protect is enabled, which prevents writing to program memory and
configuration and forcing or overriding discrete data.
Disabled: Memory Protect is disabled.
Default: Disabled.
Power-up Mode Selects the CPU mode to be in effect immediately after power-up.
Choices: Last, Stop, Run.
Default: Last (the mode it was in when it last powered down).
Note: If the battery is missing or has failed and if Logic/Configuration Power-up Source is
set to Always RAM, the CPU powers up in Stop mode regardless of the setting of
the Power-up Mode parameter.
Modbus Address Specifies the type of memory mapping to be used for data transfer between Modbus TCP/IP
Space Mapping Type clients and the PACSystems controller.
Choices:
Disabled: The “Disabled” setting is intended for use in systems containing older Ethernet
firmware that does not support Modbus TCP.
Standard Modbus Addressing: Causes the Ethernet firmware to use the standard map,
which is displayed on the Modbus TCP Address Map tab.
Default: Disabled
For details on the PACSystems implementation of Modbus/TCP server, refer to TCP/IP
Communications for PACSystems, GFK-2224.
Scan Parameters
These parameters determine the characteristics of CPU sweep execution.
Scan Parameters
Sweep Mode The sweep mode determines the priority of tasks the CPU performs during the
sweep and defines how much time is allotted to each task. The parameters that
can be modified vary depending on the selection for sweep mode.
The Controller Communications Window, Backplane Communications Window,
and Background Window phases of the PLC sweep can be run in various modes,
based on the PLC sweep mode.
Choices:
■ Normal mode: The PLC sweep executes as quickly as possible. The overall
PLC sweep time depends on the logic program and the requests being
processed in the windows and is equal to the time required to execute the
logic in the program plus the respective window timer values. The window
terminates when it has no more tasks to complete. This is the default value.
■ Constant Window mode: Each window operates in a Run-to-Completion mode.
The PLC alternates among three windows for a time equal to the value set for
the window timer parameter. The overall PLC sweep time is equal to the time
required to execute the logic program plus the value of the window timer. This
time may vary due to sweep-to-sweep differences in the execution of the
program logic.
■ Constant Sweep mode: The overall PLC sweep time is fixed. Some or all of
the windows at the end of the sweep might not be executed. The windows
terminate when the overall PLC sweep time has reached the value specified
for the Sweep Timer parameter.
Logic Checksum Words The number of user logic words to use as input to the checksum algorithm each
sweep.
Valid range: 0 through 32760, in increments of 8.
Default: 16.
Controller Communication (Available only when Sweep Mode is set to Normal.) Execution settings for the
Window Mode Controller Communications Window.
Choices:
■ Complete: The window runs to completion. There is no time limit.
■ Limited: Time sliced. The maximum execution time for the Controller
Communications Window per scan is specified in the Controller
Communications Window Timer parameter.
Default: Limited.
Note: This parameter corresponds to the Programmer Window Mode parameter
on a Series 90-70 PLC.
Controller Communications (Available only when Sweep Mode is set to Normal. Read-only if the Controller
Window Timer (ms) Communications Window Mode is set to Complete.) The maximum execution time
for the Controller Communications Window per scan. This value cannot be greater
than the value for the watchdog timer.
The valid range and default value depend on the Controller Communications
Window Mode:
■ Complete: There is no time limit.
■ Limited: Valid range: 0 through 255 ms. Default: 10.
Note: This parameter corresponds to the Programmer Window Timer parameter
on a Series 90-70 PLC.
Scan Parameters
Backplane Communication (Available only when Sweep Mode is set to Normal.) Execution settings for the
Window Mode Backplane Communications Window.
Choices:
Complete: The window runs to completion. There is no time limit.
Limited: Time sliced. The maximum execution time for the Backplane
Communications Window per scan is specified in the Backplane Communications
Window Timer parameter.
Default: Complete.
Backplane Communications (Available only when Sweep Mode is set to Normal. Read-only if the Backplane
Window Timer (ms) Communications Window Mode is set to Complete.) The maximum execution time
for the Backplane Communications Window per scan. This value can be greater
than the value for the watchdog timer.
The valid range and the default depend on the Backplane Communications
Window Mode:
■ Complete: There is no time limit. The Backplane Communications Window
Timer parameter is read-only.
■ Limited: Valid range: 0 through 255 ms. Default: 255. (10ms for Redundancy
CPUs.)
Background Window (Available only when Sweep Mode is set to Normal.) The maximum execution time
Timer (ms) for the Background Communications Window per scan. This value cannot be
greater than the value for the watchdog timer.
Valid range: 0 through 255
Default: 0 (5ms for Redundancy CPUs)
Sweep Timer (ms) (Available only when Sweep Mode is set to Constant Sweep.) The maximum
overall PLC scan time. This value cannot be greater than the value for the
watchdog timer.
Some or all of the windows at the end of the sweep might not be executed. The
windows terminate when the overall PLC sweep time has reached the value
specified for the Sweep Timer parameter.
Valid range: 5 through 2550, in increments of 5. If the value typed is not a multiple
of 5ms, it is rounded to the next highest valid value.
Default: 100.
Window Timer (ms) (Available only when Sweep Mode is set to Constant Window.) The maximum
combined execution time per scan for the Controller Communications Window,
Backplane Communications Window, and Background Communications Window.
This value cannot be greater than the value for the watchdog timer.
Valid range: 3 through 255, in increments of 1.
Default: 10.
Number of Last Scans (Available only for CPUs with firmware version 1.5 and greater.) The number of
scans to execute after the PACSystems CPU receives an indication that a
transition from Run to Stop mode should occur. (Used for Stop and Stop Fault, but
not Stop Halt.)
Choices: 0, 1, 2, 3, 4, 5.
Default:
0 when creating a new PACSystems target.
0 when converting a Series 90-70 target to a PACSystems target.
1 when converting a Series 90-30 target to a PACSystems target.
Memory Parameters
The PACSystems user memory contains the application program, hardware configuration
(HWC), registers (%R), bulk memory (%W), analog inputs (%AI), analog outputs (%AQ),
and managed memory.
Managed memory consists of allocations for symbolic variables and I/O variables. The
symbolic variables feature allows you to create variables without having to manually
locate them in memory. An I/O variable is a symbolic variable that is mapped to a
module’s inputs and outputs in the hardware configuration. For details on using symbolic
variables and I/O variables, refer to chapter 7.
The amount of memory allocated to the application program and hardware configuration is
automatically determined by the actual program (including logic C data, and %L and %P),
hardware configuration (including EGD and AUP), and symbolic variables created in the
programming software. The rest of the user memory can be configured to suit the
application. For example, an application may have a relatively large program that uses
only a small amount of register and analog memory. Similarly, there might be a small logic
program but a larger amount of memory needed for registers and analog inputs and
outputs.
Appendix B provides a summary of items that count against user memory.
Total User Memory Required (Bytes) Read only. See page 3-6 for calculation.
5H
Point Fault References The Point Fault References parameter must be enabled if you want to use
fault contacts in your logic. Assigning point fault references causes the
CPU to reserve additional memory.
When you download both the HWC and the logic to the PLC, the
download routine checks if there are fault contacts in the logic and if there
are, it checks if the HWC to download has the Point Fault References
parameter set to Enabled. If the parameter is Disabled, an error is
displayed in the Feedback Zone.
When you download only logic to the PLC, the download routine checks if
there are fault contacts in the logic and if there are, it checks if the HWC
on the PLC has the Point Fault References parameter set to Enabled. If
the parameter is Disabled, an error is displayed in the Feedback Zone.
Fault Parameters
You can configure each fault action to be either diagnostic or fatal.
A diagnostic fault does not stop the PLC from executing logic. It sets a diagnostic
variable and is logged in a fault table.
A fatal fault transitions the PLC to the Stop Faulted mode. It also sets a diagnostic
variable and is logged in a fault table.
Fault Parameters
Loss of or Missing Rack (Fault group 1.) When BRM failure or loss of power loses a rack or when a
configured rack is missing, system variable #LOS_RCK (%SA12) turns ON. (To
turn it OFF, fix the hardware problem and cycle power on the rack.)
Default: Diagnostic.
Loss of or Missing I/O Controller (Fault group 2.) When a Bus Controller stops communicating with the PLC or
when a configured Bus Controller is missing, system variable #LOS_IOC
(%SA13) turns ON. (To turn it OFF, replace the module and cycle power on the
rack containing the module.)
Default: Diagnostic.
Loss of or Missing I/O Module (Fault group 3.) When an I/O module stops communicating with the PLC CPU or a
configured module is missing, system variable #LOS_IOM (%SA14) turns ON. (To
turn it OFF, replace the module and cycle power on the rack containing the
module.)
Default: Diagnostic.
Loss of or Missing Option (Fault group 4.) When an option module stops communicating with the PLC CPU
Module or a configured option module is missing, system variable #LOS_SIO (%SA15)
turns ON. (To turn it OFF, replace the module and cycle power on the rack
containing the module.)
Default: Diagnostic.
System Bus Error (Fault group 12.) When a bus error occurs on the backplane, system variable
#SBUS_ER (%SA32) turns ON. (To turn it OFF, cycle power on the main rack.)
Default: Fatal.
I/O Controller or I/O Bus Fault (Fault group 9.) When a Bus Controller reports a bus fault, a global memory fault,
or an IOC hardware fault, system variable #IOC_FLT (%SA22) turns ON. (To turn
it OFF, cycle power on the rack containing the module when the configuration
matches the hardware after a download.)
Default: Diagnostic.
System Configuration Mismatch (Fault group 11.) When a configuration mismatch is detected during system
power-up or during a download of the configuration, system variable #CFG_MM
(%SA9) turns ON. (To turn it OFF, power up the PLC when no mismatches are
present or download a configuration that matches the hardware.)
This parameter determines the fault action when the CPU is not running. If a
system configuration mismatch occurs when the CPU is in Run mode, the fault
action will be Diagnostic. This prevents the running CPU from going to
STOP/FAULT mode. To override this behavior, see “Configuring the CPU to Stop
Upon Loss of a Critical Module” on page 3-9.
6H
Default: Fatal.
Recoverable Local Memory Error Redundancy CPUs only. (Fault group 38) Determines whether a single-bit ECC
error causes the CPU to stop or allows it to continue running.
Choices: Diagnostic, Fatal.
Default: Diagnostic.
Note: When a multiple-bit ECC error occurs, a Fatal Local Memory Error fault
(error code 169) is logged in the CPU Hardware Fault Group (group number 13).
Fault Parameters
CPU Over Temperature (Fault group 24, error code 1.) When the operating temperature of the CPU
exceeds the normal operating temperature, system variable #OVR_TMP (%SA8)
turns ON. (To turn it OFF, clear the controller fault table or reset the PLC.)
Default: Diagnostic.
Controller Fault Table Size (Read-only.) The maximum number of entries in the Controller Fault Table.
Value set to 64.
I/O Fault Table Size (Read-only.) The maximum number of entries in the I/O Fault Table.
Value set to 64.
Transfer List
These parameters apply only to redundancy CPUs. For details on configuring CPU for
redundancy, refer to the PACSystems Hot Standby CPU Redundancy User’s Guide,
GFK-2308.
If the Ethernet module is available, you can control the CPU by connecting the Machine
Edition programming software to the Ethernet port.
Port Parameters
Station (RTU Slave only) ID for the RTU Slave.
Address Valid range: 1 through 247.
Default: 1.
Note: You should avoid using station address 1 for any other Modbus slave in a PACSystems
control system because the default station address for the CPU is 1. The CPU uses the
default address in two situations:
1. If you power up without a configuration, the default station address of 1 is used.
2. When the Port Mode parameter is set to Message Mode, and Modbus becomes the protocol in
stop mode, the station address defaults to 1.
In either of these situations, if you have a slave configured with a station address of 1,
confusion may result when the CPU responds to requests intended for that slave.
Note: The least significant bit of the first byte must be 0. For example, in a station address of
090019010001, 9 is the first byte.
Data Rate (All Port Modes except Available.) Data rate (bits per second) for the port.
Choices: 1200 Baud, 2400 Baud, 4800 Baud, 9600 Baud, 19.2k Baud, 38.4k Baud, 57.6k Baud, 115.2k
Baud.
Default: 19.2k Baud.
Data Bits (Available only when Port Mode is set to Message mode or Serial I/O.) The number of bits in a word for
serial communication. SNP uses 8-bit words.
Choices: 7, 8.
Default: 8.
Flow Control (RTU slave, Message Mode, or Serial I/O.) Type of flow control to be used on the port.
Choices:
For Serial I/O Port Mode: None, Hardware, Software (XON/XOFF).
For all other Port Modes: None, Hardware.
Default: None.
Note: The Hardware flow-control is RTS/CTS crossed.
Parity (All Port Modes except Available.) The parity used in serial communication. Can be changed if required
for communication over modems or with a different SNP master device.
Choices: None, Odd, Even.
Default: Odd.
Stop bits (Available only when Port Mode is set to Message Mode, SNP Slave or Serial I/O.) The number of stop
bits for serial communication. SNP uses 1 stop bit.
Choices: 1, 2.
Default: 1.
Physical (All port modes except Available.) The type of physical interface that this protocol is communicating
Interface over.
Choices:
■ 2-wire: There is only a single path for receive and transmit communications. The receiver is
disabled while transmitting.
■ 4-wire: There is a separate path for receive and transmit communications and the transmit line is
driven only while transmitting.
■ 4-wire Transmitter on: There is a separate path for receive and transmit communications and the
transmit line is driven continuously. Note that this choice is not appropriate for SNP multi-drop
communications, since only one device on the multi-drop line can be transmitting at a given time.
Default: 4-wire Transmitter On.
Port Parameters
Turn Around (Available only when Port Mode is set to SNP Slave.) The Turn Around Delay Time is the minimum
Delay Time time interval required between the reception of a message and the next transmission. In 2-wire mode,
(ms) this interval is required for switching the direction of data transmission on the communication line.
Valid range: 0 through 2550 ms, in increments of 10.
Default: 0.
Timeout (s) (Available only when Port Mode is set to SNP Slave.) The maximum time that the slave will wait to
receive a message from the master. If a message is not received within this timeout interval, the slave
will assume that communications have been disrupted, and then it will wait for a new attach message
from the master.
Valid range: 0 through 60 seconds.
Default: 10.
SNP ID (Available only when Port Mode is set to SNP Slave.) The port ID to be used for SNP communications.
In SNP multi-drop communications, this ID is used to identify the intended receiver of a message. This
parameter can be left blank if communication is point to point. To change the SNP ID, click the values
field and enter the new ID. The SNP ID is up to seven characters long and can contain the
alphanumeric characters (A through Z, 0 through 9) or the underline (_).
Specify Stop (All port modes except Available.) Determines whether you accept the default stop mode or set it
Mode yourself.
Choices:
No: The default stop mode is used.
Yes: The stop mode parameters appear and you can select the stop mode. If you set the stop mode to
the same protocol as the run mode, then the other stop mode parameters are read-only and are set to
the same values as for the run mode.
Default: No.
Stop Mode (Available only when Specify stop mode is set to Yes.) The stop mode protocol to execute on the serial
port. If you set the stop mode to the same protocol as for the run mode, then the other stop mode
parameters are read-only and are set to the same values as for the run mode.
Choices and defaults are determined by the Port Mode setting.
■ SNP Slave: Reserved for the exclusive use of the SNP slave.
■ RTU Slave: Reserved for the exclusive use of the Modbus RTU Slave protocol.
If the Stop mode protocol is different from the Port mode protocol, you can set parameters for the Stop
mode protocol.
If you do not select a Stop mode protocol, the default protocol with default parameter settings is used.
Port (Run) Mode Stop Mode
Available Available
Port Parameters
Turn Around (Available only when Stop Mode is set to SNP Slave.) The Turn Around Delay Time is the minimum
Delay Time time interval required between the reception of a message and the next transmission. In 2-wire mode,
(ms) this interval is required for switching the direction of data transmission on the communication line.
Valid range: 0 through 2550 ms, in increments of 10.
Default:
■ When the Stop Mode is different from the Port Mode: 0 ms.
■ When the Stop Mode is the same as the Port Mode: the value is read-only and is set to the same
value as the Turn Around Delay Time for the Port Mode.
Timeout (s) (Available only when Stop Mode is set to SNP Slave.) The maximum time that the slave will wait to
receive a message from the master. If a message is not received within this timeout interval, the slave
will assume that communications have been disrupted, and then it will wait for a new attach message
from the master.
Valid range: 0 through 60 seconds.
Default:
■ When the Stop Mode is different from the Port Mode: 10 seconds.
■ When the Stop Mode is the same as the Port Mode: the value is read-only and is set to the same
value as the Timeout for the Port Mode.
SNP ID (Available only when Stop Mode is set to SNP Slave.) The port ID to be used for SNP communications.
In SNP multi-drop communications, this ID is used to identify the intended receiver of a message. This
parameter can be left blank if communication is point to point. To change the SNP ID, click the values
field and enter the new ID. The SNP ID is up to seven characters long and can contain the
alphanumeric characters (A through Z, 0 through 9) or the underline (_).
Default:
■ When the Stop Mode is different from the Port Mode: the default is blank.
■ When the Stop Mode is the same as the Port Mode: the value is read-only and is set to the same
value as the SNP ID for the Port Mode.
Station (Available only when Stop Mode is set to RTU slave.) ID for the RTU Slave.
Address Valid range: 1 through 247.
Default:
■ When the Stop Mode is different from the Port Mode: 1.
■ When the Stop Mode is the same as the Port Mode: the value is read-only and is set to the same
value as the Station Address for the Port Mode.
Description (Editable only when the Scan Type is set to Fixed Scan.) Brief description of the scan set (32
characters maximum).
After the programmer is connected, the actual IP address for the Ethernet interface, which
is set in the hardware configuration, should be downloaded to the controller. The
temporary IP address remains in effect until the Ethernet interface is restarted, power-
cycled or until the hardware configuration is downloaded or cleared.
Cautions
The temporary IP address set by the Set IP utility is not retained through a
power cycle. To set a permanent IP Address, you must set the target's IP
Address property and download (store) HWC to the PACSystems.
The Set Temporary IP Address utility can assign a temporary IP address even if
the target Ethernet Interface has previously been configured to a non-default IP
address. (This includes overriding an IP address previously configured by the
programmer.)
Use this IP Address assignment mechanism with care.
Note: If you download to a PACSystems target that already has a project on it, the
existing project is overwritten.
Note: If I/O variables are configured, hardware configuration and logic cannot be stored
independently. They must be stored at the same time.
Ethernet interface configuration includes the following additional procedures. For details
on completing these steps, refer to the TCP/IP Ethernet Communications for PACSystems
User’s Manual, GFK-2224.
▪ Assigning a temporary IP address for initial network operation, such as connecting the
programmer to download the hardware configuration.
▪ (Optional, not required for most systems). Setting up the RS-232 port for Local Station
Manager operation. This is part of the basic Ethernet Interface configuration.
▪ (Optional, not required for most systems). Configuring advanced parameters. This
requires creating a separate ASCII parameter file that is stored to the PLC with the
hardware configuration. The Ethernet Interface has a set of default Advanced User
Parameter values that should only be changed in exceptional circumstances by
experienced users.
This chapter describes the operating modes of a PACSystems CPU and describes the
tasks the CPU carries out during these modes. The following topics are discussed:
■ CPU Sweep
■ Program Scheduling Modes
■ Window Modes
■ Run/Stop Operations
■ Flash Memory Operation
■ Clocks and Timers
■ System Security
■ I/O System
■ Power-Up and Power-Down Sequences
GFK-2222P 4-1
4
CPU Sweep
The application program in the CPU executes repeatedly until stopped by a command
from the programmer, from another device, from the Run/Stop switch on the CPU
module, or a fatal fault occurs. In addition to executing the application program, the CPU
obtains data from input devices, sends data to output devices, performs internal
housekeeping, performs communications tasks, and performs self-tests. This sequence
of operations is called the sweep.
The CPU sweep runs in one of three sweep modes:
Normal Sweep In this mode, each sweep can consume a variable amount of time. The Logic
Window is executed in its entirety each sweep. The Communications and
Background Windows can be set to execute in Limited or Run-to-Completion
mode.
Constant In this mode, each sweep begins at a user-specified Constant Sweep time after
Sweep the previous sweep began. The Logic Window is executed in its entirety each
sweep. If there is sufficient time at the end of the sweep, the CPU alternates
among the Communications and Background Windows, allowing them to
execute until it is time for the next sweep to begin.
Constant In this mode, each sweep can consume a variable amount of time. The Logic
Window Window is executed in its entirety each sweep. The CPU alternates among the
Communications and Background Windows, allowing them to execute for a time
equal to the user-specified Constant Window timer.
Note: The information presented above summarizes the different sweep modes. For
additional information, refer to “CPU Sweep Modes” on page 4-6. 0H
The CPU also operates in one of four Run/Stop Modes (for details, see “Run/Stop
Operations” on page 4-10): 1H
■ Run/Outputs Enabled
■ Run/Outputs Disabled
■ Stop/IO Scan
■ Stop/No IO
Housekeeping
Start-of-Sweep
input scan
Application Program
Task Execution
(Logicwindow)
Output Scan
Prog
window no
scheduled
?
yes
Controller
Communications
Window
Comm
no
window
scheduled
?
yes
Backplane
Communications
Window
Background no
task
scheduled
?
yes
Background task
Window
Note: The input scan is not performed if a program has an active Suspend I/O function on
the previous sweep.
Application Program Task The CPU solves the application program logic. It always starts with the first instruction in the
Execution (Logic Window) program. It ends when the last instruction is executed. Solving the logic creates a new set of
output data.
For details on controlling the execution of programs, refer to chapter 6.
Interrupt driven logic can execute during any phase of the sweep. For details, refer to chapter
6.
A list of execution times for instructions can be found in Appendix A.
Output Scan The CPU writes output data to bus controllers and output modules. The user program
checksum is computed.
During the output scan, the CPU sends output data to the Genius Bus Controllers and output
modules. If the producer period of an EGD page has expired, the CPU copies the data for
that page from the appropriate reference memory to the Ethernet interface. The output scan
is completed when all output data has been sent.
If the CPU is in Run mode and it is configured to perform a background checksum
calculation, the background checksum is performed at the end of the output scan. The
default setting for number of words to checksum each sweep is 16. If the words to checksum
each sweep is set to zero, this processing is skipped. The background checksum helps
ensure the integrity of the user logic while the CPU is in Run mode.
The output scan is not performed if a program has an active Suspend I/O function on the
current sweep.
Controller Communications Window Services the onboard Ethernet and serial ports. In addition, reconfiguration of expansion
racks and individual modules occurs during this portion of the sweep.
The CPU always executes this window. The following items are serviced in this window:
■ Reconfiguration of expansion racks and individual modules. During the Controller
Communications Window, highest priority is given to reconfiguration. Modules are
reconfigured as needed, up to the total time allocated to this window. Several sweeps
are required to complete reconfiguration of a module.
■ Communications activity involving the embedded Ethernet port and the two CPU's serial
ports
Time and execution of the Controller Communications Window can be configured using the
programming software. It can also be dynamically controlled from the user program using
Service Request function #3. The window time can be set to a value from 0 to 255
milliseconds (default is 10 milliseconds).
Note that if the Controller Communications Window is set to 0, there are two alternate ways
to open the window: perform a power-cycle without the battery, or go to Stop mode.
Phase Activity
Backplane Communications Communications with intelligent devices occur during this window. The rack-based Ethernet
Window Interface module communicates in the Backplane Communications window. During this part
of the sweep the CPU communicates with intelligent modules such as the Genius Bus
Controller and TCP/IP Ethernet modules.
In this window, the CPU completes any previously unfinished request before executing any
pending requests in the queue. When the time allocated for the window expires, processing
stops.
The Backplane Communications Window defaults to Complete (Run to Completion) mode.
This means that all currently pending requests on all intelligent option modules are
processed every sweep. This window can also run in Limited mode, in which the maximum
time allocated for the window per scan is specified.
The mode and time limit can be configured and stored to the CPU, or it can be dynamically
controlled from the user program using Service Request function #4. The Backplane
Communications Window time can be set to a value from 0 to 255ms (default is 255ms). This
allows communications functions to be skipped during certain time-critical sweeps.
Background Window CPU self-tests occur in this window.
A CPU self-test is performed in this window. Included in this self-test is a verification of the
checksum for the CPU operating system software.
The Background Window time defaults to 0 milliseconds. A different value can be configured
and stored to the CPU, or it can be changed online using the programming software.
Time and execution of the Background Window can also be dynamically controlled from the
user program using Service Request function #5. This allows background functions to be
skipped during certain time-critical sweeps.
OUTPUT
CC
OUTPUT
BPC
CC
BG
BPC OUTPUT
BG CC
BPC
Abbreviations:
HK = Housekeeping BG
CC = Controller Communications Window
BPC = Backplane Communications Window
BG = Background Window
mode may be enabled or disabled by the programming software or by the user program
using Service Request function #1. The Constant Sweep timer has no default value; a
timer value must be set prior to or at the same time Constant Sweep mode is enabled.
The Ethernet Global data page configured for either consumption or production can add
up to 1 millisecond to the sweep time. This sweep impact should be taken into account
when configuring the CPU constant sweep mode and setting the CPU watchdog timeout.
If the sweep exceeds the Constant Sweep time in a given sweep, the CPU places an
oversweep alarm in the CPU fault table and sets the OV_SWP (%SA0002) status
reference at the beginning of the next sweep. Additional sweep time due to an oversweep
condition in a given sweep does not affect the time given to the next sweep.
The following figure illustrates four successive sweeps in Constant Sweep mode with a
Constant Sweep time of 100 milliseconds. Note that the total sweep time is constant, but
an oversweep may occur due to the Logic Window taking longer than normal.
SWEEP n SWEEP n+1 SWEEP n+2 SWEEP n+3
t = 0 ms t = 100 ms t = 220 ms t = 320 ms
HK HK HK HK
INPUT INPUT INPUT INPUT
LOGIC LOGIC LOGIC LOGIC
OUTPUT
Constant OUTPUT
CC
Sweep CC
Time OUTPUT
BPC
CC BPC
BPC BG
BG
SYS
SYS BG
BG
Abbreviations:
20 ms oversweep
HK = Housekeeping OUTPUT
PRG = Programmer Window.
BPC = Backplane Communications Window.
CC = Controller Communications Window
BG = Background Window
OUTPUT
CC
OUTPUT
CC BPC
BPC OUTPUT
BG BG CC
CC CC
SYS Constant
Window
BG Time
Abbreviations: BPC
HK = Housekeeping
CC = Controller Communications Window
BPC = Backplane Communications Window
BG = Background Window
Window Modes
The previous section describes the phases of a typical CPU sweep. The Controller
Communications, Backplane Communications, and Background windows can be run in
various modes, based on the CPU sweep mode. (CPU sweep modes are described in
detail on page 4-6.) The following three window modes are available:
2H
Run-to- In Run-to-Completion mode, all requests made when the window has started
Completion are serviced. When all pending requests in the given window have completed,
the CPU transitions to the next phase of the sweep. (This does not apply to the
Background window because it does not process requests.)
Constant In Constant Window mode, the total amount of time that the Controller
Communications window, Backplane Communications window, and
Background window run is fixed. If the time expires while in the middle of
servicing a request, these windows are closed, and communications will be
resumed the next sweep. If no requests are pending in this window, the CPU
cycles through these windows the specified amount of time polling for further
requests. If any window is put in constant window mode, all are in constant
window mode.
Limited In Limited mode, the maximum time that the window runs is fixed. If time
expires while in the middle of servicing a request, the window is closed, and
communications will be resumed the next time that the given window is run. If
no requests are pending in this window, the CPU proceeds to the next phase of
the sweep.
Also, note that non-retentive outputs do not clear until the CPU is changed from
Stop to Run.
Run/Stop Operations
The PACSystems CPUs support four run/stop modes of operation. You can change
these modes in the following ways: the Run/Stop switch, configuration from the
programming software, LD function blocks, and system calls from C applications.
Switching to and from various modes can be restricted based on privilege levels, position
of the Run/Stop switch, passwords, etc.
Mode Operation
Run/Outputs The CPU runs user programs and continually scans inputs and updates physical
Enabled outputs, including Genius and Ethernet outputs. The Controller and Backplane
Communications Windows are run in Limited, Run-to-Completion, or Constant
mode.
Run/Outputs The CPU runs user programs and continually scans inputs, but updates to
Disabled physical outputs, including Genius and Field Control, are not performed.
Physical outputs are held in their configured default state in this mode. The
Controller and Backplane Communications Windows are run in Limited, Run-to-
Completion, or Constant mode.
Stop/IO Scan The CPU does not run user programs, but the inputs and outputs are scanned.
Enabled The Controller and Backplane Communications Windows are run in Run-to-
Completion mode. The Background Window is limited to 10 ms.
Stop/IO Scan The CPU does not run user programs, and the inputs and outputs are not
Disabled scanned. The Controller and Backplane Communications Windows are run in a
Run-to-Completion mode. The Background Window is limited to 10 ms.
Note: Stop mode I/O scanning is always disabled for redundancy CPUs.
Note: You cannot add to the size of %P and %L reference tables in Run Mode unless
the %P and %L references are the first of their type in the block being stored or
the block being stored is a totally new block.
Start-of-Sweep
Housekeeping
Executes in
Input Scan Stop-I/O Scan Enabled
mode only
Executes in
Output Scan Stop-I/O Scan Enabled
mode only
Controller Runs
Communications to
Window completion
Backplane Runs
Communications to
Window Completion
Limited
Background Task
(10ms)
Window
CPU Sweep in Stop- I/O Disabled and Stop- I/O Enabled Modes
The Run/Mode switch can be disabled in the programming software HWC. The switch’s
memory protection function can be disabled separately in HWC. The Run/Mode switch is
enabled by default. The memory protection functionality is disabled by default.
The Read Switch Position (Switch_Pos) function allows the logic to read the current
position of the Run/Stop switch, as well as the mode for which the switch is configured.
For details, refer to chapter 8.
Always Flash Memory not preserved Flash See “CPU Mode when Memory Not Preserved/
(i.e. no battery or memory corrupted) Power-up Source is Flash” on page 4-15.
4H
No Configuration in Flash Always Flash RAM See ”CPU Mode when Memory Preserved” on
page 4-15.
No Configuration in Flash Conditional Flash RAM
9H
Power-up Mode Run/Stop Switch Stop-Mode I/O Scanning Run/Stop Switch Power Down CPU Mode
Position Mode
Run Enabled Enabled Stop N/A Stop Enabled
Run Enabled Disabled Stop N/A Stop Disabled
Run Enabled N/A Run Disabled N/A Run Disabled
Run Enabled N/A Run Enabled N/A Run Enabled
Run Disabled N/A N/A N/A Run Enabled
Stop N/A Enabled N/A N/A Stop Enabled
Stop N/A Disabled N/A N/A Stop Disabled
Last Enabled Enabled Stop Stop Disabled Stop Disabled
Last Enabled Enabled Stop Stop Enabled Stop Enabled
Last Enabled Enabled Stop Run Disabled Stop Enabled
Last Enabled Enabled Stop Run Enabled Stop Enabled
Last Enabled Disabled Stop N/A Stop Disabled
Last Enabled N/A Run Disabled Stop Disabled Stop Disabled
Last Enabled Enabled Run Disabled Stop Enabled Stop Enabled
Last Enabled Disabled Run Disabled Stop Enabled Stop Disabled
Last Enabled N/A Run Disabled Run Disabled Run Disabled
Last Enabled N/A Run Disabled Run Enabled Run Disabled
Last Enabled N/A Run Enabled Stop Disabled Stop Disabled
Last Enabled Enabled Run Enabled Stop Enabled Stop Enabled
Last Enabled Disabled Run Enabled Stop Enabled Stop Disabled
Last Enabled N/A Run Enabled Run Disabled Run Disabled
Last Enabled N/A Run Enabled Run Enabled Run Enabled
Last Disabled N/A N/A Stop Disabled Stop Disabled
Last Disabled Enabled N/A Stop Enabled Stop Enabled
Last Disabled Disabled N/A Stop Enabled Stop Disabled
Last Disabled N/A N/A Run Disabled Run Disabled
Last Disabled N/A N/A Run Enabled Run Enabled
For information on timer functions and timed contacts provided by the CPU instruction
set, see “Timers and Counters” in chapter 8.
Time-of-Day Clock
A hardware time-of-day clock maintains the time of day (TOD) in the CPU. The time-of-
day clock maintains the following seven time functions:
■ Year (two digits)
■ Month
■ Day of month
■ Hour
■ Minute
■ Second
■ Day of week
The TOD clock is battery-backed and maintains its present state across a power failure.
The time-of-day clock handles month-to-month and year-to-year transitions and
automatically compensates for leap years through year 2036.
You can read and set the hardware TOD time and date through the application program
using Service Request function #7. For details, see chapter 10.
Synchronizing the High-resolution Time of Day Clock to an SNTP Network Time Server
In an SNTP system, a computer on the network (called an SNTP server) sends out a
periodic timing message to all SNTP-capable Ethernet Interfaces on the network, which
synchronize their internal clocks with this SNTP timing message. If SNTP is used to
perform network time synchronization, the timestamp information typically has ±10
millisecond accuracy between PLCs on the same network.
Synchronizing the CPU TOD clock to an SNTP server allows you to set a consistent time
across multiple systems. Once the CPU TOD clock is synchronized with the SNTP time,
all produced EGD exchanges will use the CPU’s TOD for the time stamp.
The CPU TOD clock is set with accuracy within ±2 ms of the SNTP time stamp.
TOD clock synchronization is enabled on an Ethernet module by the advanced user
parameter (AUP), ncpu_sync. The CPU must also use a COMMREQ in user logic to
select an Ethernet module as the time master. For additional information, refer to
“Timestamping of Ethernet Global Data Exchanges” in chapter 4 of TCP/IP
Communications for PACSystems, GFK-2224.
Watchdog Timer
System Security
The PACSystems CPU supports the following two types of system security:
■ Passwords/privilege levels
■ OEM protection
Privilege Levels
Level Password Access Description
4 Yes Write to configuration or logic. Configuration may only be written in Stop mode; logic
may be written in Stop or Run mode. Set or delete passwords for any level.
Note: This is the default privilege for a connection to the CPU if no passwords are
defined.
3 Yes Write to configuration or logic when the CPU is in Stop mode, including word-for-word
changes, addition/deletion of program logic, and the overriding of discrete I/O.
2 Yes Write to any data memory. This does not include overriding discrete I/O. The CPU
can be started or stopped. CPU and I/O fault tables can be cleared.
1 Yes Read any CPU data, except for passwords. This includes reading fault tables,
performing datagrams, verifying logic/configuration, loading program and
configuration, etc. from the CPU. None of this data may be changed. At this level,
transition to Run mode from the programmer is not allowed.
Disabling Passwords
The use of password protection is optional. If you want to prevent the use of password
protection, passwords can be disabled using the programming software.
Note: To enable passwords after they have been disabled, the CPU must be power-
cycled with the battery removed.
OEM Protection
OEM protection is similar to the passwords and privilege levels. However, OEM
protection provides a higher level of security. The OEM protection feature is
enabled/disabled using a 1 to 7 character password. When OEM protection is enabled,
all read and write access to the CPU program and configuration is prohibited.
Protection for an OEMs’ investment in software is provided in the form of a special
password known as the OEM key. When the OEM key has been given a non-blank value,
the CPU may be placed in a mode in which reads, writes, and verification of the logic
and/or configuration are prohibited. This allows a third-party OEM to create Control
Programs for the CPU and then set the OEM-locked mode, which prevents the end user
from reading or modifying the program.
OEM Protection in Systems that Load from Flash Memory
For users that want the CPU to load from flash upon powerup, a special provision is
made to activate OEM protection based on the OEM key stored in flash memory. With
firmware versions 6.01 and later, if the OEM key that was stored to flash is non-blank,
and the CPU is configured to load logic/configuration from flash, then upon powerup
OEM protection is activated automatically. This is true even when OEM protection is not
re-activated after the download. This enables users to employ OEM protection in
flash-based systems that do not use a battery.
Users should be careful to record the OEM key for future reference if they are storing a
non-blank OEM key to flash memory. If disabling OEM protection, be sure to clear the
OEM key that is stored in flash memory.
In firmware versions earlier than 6.01, the OEM protection was not preserved unless a
battery was attached.
OEM Protection and Firmware Upgrades
A firmware upgrade via the Winloader tool may be performed while a CPU is OEM
protected. However, with firmware versions 6.01 and later, if a non-blank OEM key is
stored to flash memory, and the CPU is configured to load logic/configuration from flash,
then OEM protection remains active after the completion of a firmware upgrade.
In firmware versions earlier than 6.01, when the CPU was configured to load
logic/configuration from flash and a non-blank OEM key was stored to flash memory, the
OEM protection did not remain active and reactivation was required after a
firmware upgrade.
I/O Configuration
Module Identification
In addition to the catalog number, the programming software stores a Module ID for each
configured module in the hardware configuration that it delivers to the CPU. The CPU
uses the Module ID to determine how to communicate with a given module.
When the hardware configuration is downloaded to the CPU (and during subsequent
power-ups), the CPU compares the Module IDs stored by the programmer with the IDs of
the modules physically present in the system. If the Module IDs do not match, a System
Configuration Mismatch fault will be generated.
Because I/O modules of similar type may share the same Module ID, it is possible to
download a configuration containing a module catalog number that does not match the
module that is physically present in the slot without generating a System Configuration
Mismatch.
Certain discrete modules with both reference memory inputs and reference memory
outputs will experience invalid I/O transfer if incorrect configuration is stored from a
similar mixed I/O module. No fault or error condition will be detected during configuration
store and the module will be operational, although not in the manner described by
configuration.
For example, a configuration swap between the IC693MDL754 output module and
IC693MDL660 input module will not be detected as a configuration mismatch, but I/O
data transfer between the module and the CPU reference memory will be invalid. If the
input module (MDL660) is sent the configuration of the output module (MDL754) with the
following parameters: Reference Address: %Q601
Module Status Reference: %I33
Hold Last State Enable
It will receive inputs at the module status reference %I33 and the status of the module will
be received at %Q601.
If the output module is sent the configuration of the input module with the following
parameters: Reference Address: %I601
Input Filter: Enable
Digital Filter Settings Reference: %I65
It will output values at the digital filter settings reference %I65 and the status of the
module will be received at %I601.
Outputs
Some output modules have a configurable output default mode that can be specified as
either Off or Hold Last State. If a module does not have a configurable output default
mode, its output default mode is Off. The selected action applies when the CPU
transitions from Run/Enabled to Run/Disabled or Stop mode, or experiences a fatal fault.
At power-up, Series 90-30 discrete output modules default to all outputs off. They will
retain this default condition until the first output scan from the PLC. Analog output
modules can be configured with a jumper located on the module’s removable terminal
block to either default to zero or retain their last state.
Inputs
Input modules that have a configurable input default mode can be configured to Hold Last
State or to set inputs to 0. If a module does not have a configurable input default mode,
its input default mode is Off. The selected action applies when the CPU transitions from
Run/Enabled to Run/Disabled or Stop mode, or experiences a fatal fault.
For details on the powerup and stop mode behavior of other modules, refer to the
documentation for that module.
Genius I/O
The Genius Bus Controller (GBC) controls a single Genius I/O bus. Any type of Genius
I/O device may be attached to the bus.
In the I/O fault table, the rack, slot, bus, module, and I/O point number are given for a
fault. Bus number one refers to the bus on the single-channel GBC.
Genius I/O discrete inputs and outputs are stored as bits in the CPU Bit Cache memory.
Genius I/O analog data is stored in the application RAM allocated for that purpose (%AI
and %AQ). Analog data is always stored one channel per one word (16 bit).
An analog grouped module consumes (in the input and output data memories) only the
amount of data space required for the actual inputs and outputs. For example, the Genius
I/O 115 VAC Grouped Analog Block, IC660CBA100, has four inputs and two outputs. It
consumes four words of Analog Input memory (%AI) and two words of Analog Output
memory.
A discrete grouped module, each point of which is configurable with the Hand-Held
Monitor (HHM) to be input, output, or output with feedback, consumes an amount in both
discrete input memory (%I) and discrete output memory (%Q) equal to its physical size.
Therefore, the eight-point Discrete Grouped Block (IC660CBD100) requires eight bits in
the %I memory and eight bits in the %Q memory, regardless of how each point on the
block is configured.
■ For I/O modules not interfaced through a bus controller, the CPU’s I/O Scanner
subsystem generates the diagnostic bits based on data provided by the module.
The diagnostic bits are derived from the diagnostic data sent from the I/O modules to
their I/O controllers (CPU or bus controller). Diagnostic bits indicate the current fault
status of the associated module. Bits are set when faults occur and are cleared when
faults are cleared.
Diagnostic data is not maintained for modules from other manufacturers. The application
program must use the BUS Read function blocks to access diagnostic information
provided by those boards.
no-fault contact (-[NF]-). The CPU collects this fault data if enabled to do so by the
programming software. The following table shows the state of the fault and no-fault
contacts.
Condition [FAULT] [NOFLT]
Fault Present ON OFF
Fault Absent OFF ON
The analog diagnostic data contains both diagnostics and process data with the process
data being the High Alarm and Low Alarm bits. The diagnostic data is referenced with the
-[F]- and -[NF]- contacts. The process bits are referenced with the high alarm (-[HA]- and
low alarm (-[LA]-) contacts. The memory allocation for analog diagnostic data is one byte
per word of analog input and analog output allocated by programming software. When an
analog fault contact is referenced in the application program, the CPU does an Inclusive
OR on all the bits in the diagnostic byte except the process bits. The alarm contact is
closed if any diagnostic bit is ON and OFF only if all bits are OFF.
Application of default input and diagnostic data for lost redundant blocks
When a GBC reports that a redundant block is lost, the CPU updates the input data
tables and input diagnostic tables with the default data during the very next input scan.
The output diagnostic data tables are updated during the very next output scan.
Power-Up Self-Test
On system power-up, many modules in the system perform a power-up diagnostic self-
test. The CPU module executes hardware checks and software validity checks. Intelligent
option modules perform setup and verification of on-board microprocessors, software
checksum verification, local hardware verification, and notification to the CPU of self-
check completion. Any failed tests are queued for reporting to the CPU during the system
configuration portion of the cycle.
If a low or failed battery indication is present, a fault is logged in the CPU fault table.
System Configuration
After completing its self-test, the CPU performs the system configuration. It first clears all
of the system diagnostic bits in the bit cache memory. This prevents faults that were
present before power-down, but are no longer present, from accidentally remaining as
faulted. Then it polls each module in the system for completion of the module’s self-test.
The CPU reads information from each module, comparing it with the stored (downloaded)
rack/slot configuration information. Any differences between actual configuration and the
stored configuration are logged in the fault tables.
Power-Down Sequence
System power-down occurs when the power supply detects that incoming AC power has
dropped for more than 15ms.
Blocks
A block is a named section of executable logic that can be downloaded to and run on the
target controller. The logic in a block can include functions, function blocks and calls to other
blocks.
GFK-2222P 5-1
5
The following table describes the types of instructions that make up the PACSystems
instruction set.
Instruction Type Instance Data Examples
Functions None BIT_SEQ, ADD, RANGE
Built-in function blocks WORD array. TMR, PID_IND, PID_ISA
Standard function blocks Structure variable. (See “Instance Data TP, TOF, TON
Structures” on page 5-8.)0H
Note: A user defined function block (UDFB) is a block of logic that can be called in your
program logic to create multiple instances of the block, allowing you to create a block
of logic once and reuse it as if it was a standard function block instruction. For
additional information, see pages 5-3 and 5-7.
1H 2H
Nested Calls
The CPU allows nested block calls as long as there is enough execution stack space to
support the call. If there is not enough stack space to support a given block call, an
“Application Stack Overflow” fault is logged. In these circumstances, the CPU cannot execute
the block. Instead, it sets all of the block’s Boolean outputs to FALSE, and resumes execution
at the point after the block call instruction.
Note: To halt the CPU when there is not enough stack space to execute a block, there are
two choices. The best method is to add logic to detect the occurrence of any User
Application Fault by testing the diagnostic bit %SA38, and then call SVC_REQ 13 to
halt the CPU. An alternative method is to add logic that tests for a negative OK value
coming out of the block and then call SVC_REQ 13 to halt the CPU.
A call depth of eight levels or more can be expected, except in rare cases where several of
the called blocks have very large numbers of parameters. The actual call depth achieved
depends on several factors, including the amount of data (non-Boolean) flow used in the
blocks, the particular functions called by the blocks, and the number and types of parameters
defined for the blocks. If blocks use less than the maximum amount of stack resources, more
than eight nested calls may be possible. The call level nesting counts the _MAIN block as
level 1.
Types of Blocks
PACSystems supports four types of blocks.
Programming
Block Type Local Data Size Limit Parameters
Languages
Block Has its own local data LD 128 KB 0 inputs
FBD 1 output
ST
Parameterized Block Inherits local data LD 128 KB 63 inputs
from caller FBD 64 outputs
ST
User Defined Function Has its own local data LD 128 KB 63 inputs
Block (UDFB) FBD 64 outputs
ST Unlimited internal member
variables
External Block Inherits local data C user memory size limit 63 inputs
from caller (10 MB) 64 outputs
All PACSystems block types automatically provide an OK output parameter. The name used
to reference the OK parameter within a block is Y0. Logic within the block can read and write
the Y0 parameter. When a block is called, its Y0 parameter is automatically initialized to
TRUE. This will result in a positive power flow out of the block call instruction when the block
completes execution, unless Y0 is set to FALSE within the logic of the block.
For all block types, the maximum number of input parameters is one less than the maximum
number of output parameters. This is because the EN input to the block call is not considered
to be an input parameter to the block. It is used in LD language to determine whether or not
to call the block, but is not passed into the block if the block is called.
Program Blocks
Any block can be a program block. The _MAIN block is automatically declared when you
create a block-structured program. When you declare any other block, you must assign it a
unique block name. A block is automatically configured with no input parameters and one
output parameter (OK).
When a block-structured program is executed, the _MAIN block is automatically executed.
Other blocks execute when called from the program logic in the _MAIN block, another block,
or itself. In the following example, if %M00001 is ON, the block named ProcessEGD will be
executed:
Parameterized Blocks
Any block except _MAIN can be a parameterized block. When you declare a parameterized
block, you must assign it a unique block name. A parameterized block can be configured with
up to 63 input and 64 output parameters.
A parameterized block executes when called from the program logic in the _MAIN block,
another block, or itself. In the following example, if %I00001 is set, the parameterized block
named LOAD_41 will be executed.
The following table lists the TYPEs, LENGTHs, and parameter-passing mechanisms allowed
for parameterized block parameters. (For definitions of the parameter passing types, see
“Parameter Passing Mechanisms” on page 5-14.) 3H
In general, formal parameters within a parameterized block may be used with any instruction
or with any block call, as long as their TYPE and LENGTH are compatible with what the
instruction, function, or block call requires. The following list contains the restrictions on
formal parameters relative to this general rule:
■ Formal parameters cannot be used on legacy transitional contacts or coils, or on FAULT,
NOFLT, HIALM, or LOALM contacts. However, formal parameters can be used on IEC
transitional contacts and coils.
■ Formal BOOL input parameters cannot be used on coils or as output arguments to a
function or to a block call.
■ Formal parameters cannot be used with the DO I/O function.
■ Formal parameters cannot be used with indirect referencing.
Defining a UDFB
To create a UDFB in the programming software, create an LD, FBD or ST block in the
Program Blocks folder. In the Properties for the block, select Function Block.
To define instance data for a UDFB, select Parameters in the block’s properties. Input and
output parameters are defined in the same way as for parameterized blocks. In the following
example, three internal member variables are defined: temp, speed, and modelno.
In the following LD example, the first rung creates two instances of the UDFB, Motors. The
instance variables associated with the instances are motors.motor1 and motors.motor2. The
second rung uses the two instances of the internal variable temp in logic.
UDFB Logic
An instance of a BOOL parameter or internal variable can be forced ON or OFF, or used with
transition-detecting instructions. The exception to this is that BOOL input parameters passed
by reference cannot be forced or used with the Series 90-70 legacy transition-detecting
instructions (POSCOIL, NEGCOIL, POSCON and NEGCON) because their values are not
stored in instance data.
All input parameters to a UDFB, and their corresponding instance data elements, can be read
by their UDFB’s logic.
Input parameters that are passed by reference or passed by value result to a UDFB can be
written to by their UDFB’s logic. Input parameters passed by value cannot be written to by
their UDFB logic. Note that the restriction on writing to input parameters passed by value
does not apply to other types of blocks.
All UDFB output parameters can be both read and written to by their logic.
External Blocks
External blocks are developed using external development tools as well as the C
Programmer’s Toolkit for PACSystems. Refer to the C Programmer’s Toolkit for PACSystems
User’s Manual, GFK-2259 for detailed information regarding external blocks.
Any block except _MAIN can be an external block. When you declare an external block, you
must assign it a unique block name. It can be configured with up to 63 input parameters and
64 output parameters.
An external block executes when called from the program logic in the _MAIN block or from
the logic in another block, parameterized block, or UDFB. External blocks themselves cannot
call any other block. In the following example, if %I00001 is set, the external block named
EXT_11 is executed.
Note: Unlike other block types, external blocks cannot call other blocks.
Initialization of C Variables
When an external block is stored to the CPU, a copy of the initial values for its global and
static variables is saved. However, if static variables are declared without an initial value, the
initial value is undefined and must be initialized by the C application. (Refer to “Global
Variable Initialization” and “Static Variable” in the C Programmer’s Toolkit for PACSystems,
GFK-2259). The saved initial values are used to re-initialize the block’s global and static
variables whenever the CPU transitions from Stop to Run.
Local Data
Each block or UDFB in a block-structured program has an associated local data block.
_MAIN’s data block memory is referenced by %P; all other data block memories are
referenced by %L.
The size of the data block is dependent on the highest reference in its block for %L and in all
blocks for %P.
data data
%P %L
_MAIN
Block
block 2
Data
%L
Block
3
Data
%L
Block
4
All blocks within the program can use data associated with the _MAIN block (%P). Blocks
and UDFBs can use their own %L data as well as the %P data that is available to all blocks.
The _MAIN block cannot use %L.
External blocks and parameterized blocks can use the Local Data (%L) of their calling block
as well as the %P data of the _MAIN block. If a parameterized block or external block is
called by MAIN, all %L references in the parameterized block or external block will actually be
references to corresponding %P references (for example, %L0005 = %P0005). In addition to
inheriting the Local Data of their calling blocks, parameterized blocks and external blocks
inherit the FST_EXE status of their calling blocks.
data
%P
Inherits as %L PSB 1
_MAIN or
EB 1
Block
data
%L
Inherits as %L PSB 2
or
BLOCK EB 2
1
When a parameter is passed by value (UDFB inputs only), the value of its argument is
copied into a local stack memory associated with the called block. All logic within the
called block that reads or writes to the parameter is reading or writing to this stack
memory. Thus no changes are ever made to the actual argument.
When a parameter is passed by value result (UDFB inputs only), the value of its
argument is copied into a local stack memory associated with the called block, and the
address of its argument is saved. All logic within the called block that reads or writes to
the parameter is reading or writing to this stack memory. When the called block
completes its execution, the value in the stack memory is copied back to the actual
argument’s address. Thus no changes are made to the actual argument while the called
block is executing, but when it completes execution, the actual argument is updated.
Languages
Multiplication function
The flow of logical power through each rung is controlled by a set of simple program
instructions that work like mechanical relays and output coils. Whether or not a relay passes
logical power flow along the rung depends on the content of a memory location with which
the relay has been associated in the program. For instance, a relay might pass positive
power flow if its associated memory location contains the value 1. The same relay passes
negative power flow if the memory location contains the value 0.
Usually an instruction that receives negative power flow does not execute and propagates the
negative power flow on to the next instruction in the rung. However, some instructions such
as timers and counters execute even when they receive negative power flow, and may even
pass positive power flow out. Once a rung completes execution, with either positive or
negative power flow, power flows down along the left rail to the next rung.
Within a rung, there are many complex functions that are part of the standard function library
and can be used for operations like moving data stored in memory, performing math
operations, and controlling communications between the CPU and other devices in the
system. Some program functions, such as the Jump function and Master Control Relay, can
be used to control the execution of the program itself. Together, this large group of Ladder
Diagram instructions and standard library functions makes up the instruction set of the CPU.
Instance of
UDFB, “Weight”
Structured Text
The Structured Text (ST) programming language is an IEC 1131-3 textual programming
language. A structured text program consists of a series of statements, which are constructed
from expressions and language keywords. A statement directs the PLC to perform a specified
action. Statements provide variable assignments, conditional evaluations, iteration, and the
ability to call other blocks. For details on ST statements, parameters, keywords, and
operators supported by PACSystems, refer to chapter 11, “Structured Text.”
Blocks, parameterized blocks, and UDFBs can be programmed in ST. The _MAIN program
block can also be programmed in ST.
A block programmed in ST can call blocks, parameterized blocks, and UDFBs.
Interrupt-Driven Blocks
Three types of interrupts can be used to start a block’s execution:
■ Timed Interrupts are generated by the CPU based on a user-specified time interval with
an initial delay (if specified) applied on Stop-to-Run transition of the CPU.
■ I/O Interrupts are generated by I/O modules to indicate discrete input state changes
(rising/falling edge), analog range limits (low/high alarms), and high speed signal
counting events.
■ Module Interrupts are generated by VME modules. A single interrupt is supported per
module.
Caution
Interrupt-driven block execution can interrupt the execution of non-
interrupt-driven logic. Unexpected results may occur if the interrupting
logic and interrupted logic access the same data. If necessary, Service
Request #17 or Service Request # 32 can be used to temporarily mask
I/O and Timed Interrupt-driven logic from executing when shared data
is being accessed.
Interrupt Handling
An I/O, Module, or Timed interrupt can be associated with any block except _MAIN, as long
as the block has no parameters other than an OK output. After an interrupt has been
associated with a block, that block executes each time the interrupt trigger occurs. A given
block can have multiple timed, I/O, and module interrupt triggers associated with it. It is
executed each time any one of its associated interrupts triggers. For details on how interrupt
blocks are prioritized, refer to “Interrupt Block Scheduling” on page 5-21.
5H
Note: We strongly recommend that interrupt-driven blocks not be called from the _MAIN
block or other non-interrupt driven blocks because the interrupt and non-interrupt
driven blocks could be reading and writing the same global memories at
indeterminate times relative to each other. In the example below INT1, INT2,
BLOCK5, and PB1 should not be called from _MAIN, BLOCK2, BLOCK3, or
BLOCK4.
INT Block 1
Block
5
Block
3
PB
1
Block
4
Timed Interrupts
A block can be configured to execute on a specified time interval with an initial delay (if
specified) applied on a Stop-to-Run transition of the CPU.
To configure a timed interrupt block, specify the following parameters in the scheduling
properties for the block:
Time Base The smallest unit of time that you can specify for Interval and Delay. The time base
can be 1.0 second, 0.10 second, or 0.01 second, or 0.001 second.
Interval Specifies how frequently the block executes in multiples of the time base.
Delay (Optional) Specifies an additional delay for the first execution of the block in multiples
of the time base.
I/O Interrupts
A block can be triggered by an interrupt input from certain hardware modules. For example,
on the 32-Circuit 24 VDC Input Module (IC697MDL650), the first input can be configured to
generate an interrupt on either the rising or falling edge of the input signal. If the interrupt is
enabled in the module configuration, that input can serve as a trigger to cause the execution
of a block.
To configure an I/O interrupt, specify a trigger in the scheduling properties for the block. The
trigger must be a global variable in %I, %AI or %AQ memory, or an I/O variable. (An I/O
variable is a form of symbolic variable that is mapped to a module I/O point in hardware
configuration.)
PACSystems modules that can trigger user interrupt logic always send the interrupt to the
CPU when configured to do so. If the CPU is in Stop mode when it receives the interrupt, it
does not run the user interrupt block. The CPU does not run the user interrupt block when it
transitions from Stop to Run mode.
Module Interrupts
A block can be triggered by an interrupt from a VME module if the VME Interrupt parameter is
enabled in the module’s hardware configuration. The PACSystems CPU supports one
interrupt per module.
To configure a module interrupt, specify the module by rack/slot/interrupt ID as the Trigger in
the scheduling properties for the block.
6
This chapter describes the types of data that can be used in an application program,
and explains how that data is stored in the PACSystems CPU’s memory.
■ Variables
■ Reference Memory
■ User Reference Size and Default
■ Genius Global Data
■ Transitions and Overrides
■ Retentiveness of Logic and Data
■ Data Scope
■ System Status References
■ How Program Functions Handle Numerical Data
■ User Defined Types (UDTs)
■ Word-for-Word Changes
■ Operands for Instructions
GFK-2222P 6-1
6
Variables
A variable is a named storage space for data values. It represents a memory location
in the target PACSystems CPU.
A variable can be mapped to a reference address (for example, %R00001). If you do
not map a variable to a specific reference address, it is considered a symbolic
variable. The programming software handles the mapping for symbolic variables in a
special portion of PACSystems user space memory.
The kinds of values a variable can store depends on its data type. For example,
variables with a UINT data type store unsigned whole numbers with no fractional part.
Data types are described in “How Program Functions Handle Numerical Data” on
9H
page 6-21.
10H
In the programming software, all variables in a project are displayed in the Variables
tab of the Navigator. You create, edit, and delete variables in the Variables tab. Some
variables are also created automatically by certain components (such as TIMER
variables when you add a Timer instruction to ladder logic). The data type and other
properties of a variable, such as reference address are configured in the Inspector.
For more information about system variables, which are created when you create a
target in the programming software, refer to page 6-16.
1H
Mapped Variables
Mapped (manually located) variables are assigned a specific reference address. For
details on the types of reference memory and their uses, refer to page 6-9. 12H
Symbolic Variables
Symbolic variables are variables for which you do not specify a reference address
(similar to a variable in a typical high-level language). Except as noted in this section,
you can use these in the same ways that you use mapped variables.
In the programming software, a symbolic variable is displayed with a blank address.
You can change a mapped variable to a symbolic variable by removing the reference
address from the variable’s properties. Similarly, you can change a symbolic variable
into a mapped variable by specifying a reference address for the variable in its
properties.
The memory required to support symbolic variables counts against user space. The
amount of space reserved for these variables is configured on the Memory tab in the
CPU hardware configuration.
I/O Variables
An I/O variable is a symbolic variable that is mapped to a terminal in the hardware
configuration. A terminal can be one of the following: Physical discrete or analog I/O
point on a PACSystems module or on a Genius device, a discrete or analog status
returned from a PACSystems module, or Global Data. The use of I/O variables allows
you to configure hardware modules without having to specify the reference addresses
to use when scanning their inputs and outputs. Instead, you can directly associate
variable names with a module’s inputs and outputs.
As with symbolic variables, memory required to support I/O variables counts against
user space. You can configure the space available for I/O variables in the Memory tab
of the PACSystems CPU.
For a given module or Genius bus, you must use either I/O variables or manually
located mapped variables: you cannot use both in combination. It is not necessary to
map all points on a module. Points that are disconnected or unused can be skipped.
When points are skipped, space is reserved in user memory for that point (that is, a
32-point discrete module will always use 32 bits of memory).
The hardware configuration (HWC) and logic become coupled in a PACSystems
target on your computer as soon as you do one of the following: Enable I/O variables
for a module or Genius bus (even if you don't create any I/O variables), use one or
more symbolic variables in the Ethernet Global Data (EGD) component, or upload a
coupled HWC and logic from a PACSystems PLC. The HWC and logic become
coupled in a PACSystems controller when coupled HWC and logic are downloaded
to it.
The I/O variable, IO_VAR_EXAMPLE, is mapped to a discrete (X) input point (I) on
the module located in rack 0, slot 5. The point is located in the module’s third group of
discrete input points and is point 2 in that group.
Arrays
An array is a complex data type composed of a series of variable elements with
identical data types. Any variable can become an array, except for another array, a
variable element, or a UDFB. In Machine Edition, you can create single-dimensional
arrays and two-dimensional arrays.
In the controller CPU, each element of an array is treated as a separate variable with
a separate, read-only reference address. The "root" node of the array variable also
has a reference address that is editable. When you set or change the reference
address of the "root" node of an array variable, the reference addresses of its
elements are filled in with a range of addresses starting at that reference address and
incremented for each element so as to create contiguous non-overlapping memory.
MyArray[nIndex].X[4],
where .X[4] is the fifth bit of the value stored in MyArray[nIndex]. The bit
reference itself, [4] in the example, must be a constant.
In LD, the following word-for-word changes are supported for array elements
with variable indexes:
Replacing an index variable with another index variable
Replacing an index variable with a constant
Replacing a constant with an index variable
In LD, Diagnostic Logic Blocks support the use of array elements with
variable indexes.
The following do not support array elements with variable indexes:
Indirect references
EGD variables
Reference ID variables (RIVs) and I/O variables when accessed in the
Hardware Configuration
Note: In logic, RIVs and I/O variables support variable indexes.
STRING variables
Ensuring that a Variable Index Does not Exceed the Upper Boundary of an Array
One-Dimensional Array
1. Once per scan, execute ARRAY_SIZE_DIM1 to count the number of elements in
the array.
Note: The array size of a variable can be changed in a run mode store but it will
not be changed while logic is executing.
ARRAY_SIZE_DIM1 places the count value in the variable associated with its
output Q.
2. Before executing an instruction that uses a variable index, compare the value of
the index variable with the number of elements in the array.
Tip: In LD, use a RANGE instruction.
Notes Checking before executing each instruction that uses an indexed variable is
recommended in case logic has modified the index value beyond the array
size or in case the array size has been reduced before the scan to less than
the value of an index variable that has not been reduced accordingly since.
Valid range of an index variable: 0 through (n–1), where n is the number of
array elements. Array indexes are zero-based.
Two-Dimensional Array
Execute both ARRAY_SIZE_DIM1 and ARRAY_SIZE_DIM2 to count the
number of elements in respectively the first and second dimensions of
the array.
Reference Memory
The CPU stores program data in bit memory and word memory. Both types of
memory are divided into different types with specific characteristics. By convention,
each type is normally used for a specific type of data, as explained below. However,
there is great flexibility in actual memory assignment.
Memory locations are indexed using alphanumeric identifiers called references. The
reference’s letter prefix identifies the memory area. The numerical value is the offset
within that memory area, for example %AQ0056.
Indirect References
An indirect reference allows you to treat the contents of a variable assigned to an LD
instruction operand as a pointer to other data, rather than as actual data. Indirect
references are used only with word memory areas (%R, %W, %AI, %AQ, %P, and
%L). An indirect reference in %W requires two %W locations as a DWORD indirect
index value. For example, @%W0001 would use the %W2:W1 as a DWORD index
into the %W memory range. The DWORD index is required because the %W size is
greater than 65K.
Examples:
%R2.X [0] addresses the first (least significant) bit of %R2
%R2.X [1] addresses the second bit of %R2. In the examples
In the examples [0] and [1] are the bit indexes. Valid bit indexes for the different
variable types are:
BYTE variable [0] through [7]
WORD, INT, or UINT variable [0] through [15]
DWORD or DINT variable [0] through [31]
%G Represents global data references. These references are used to access data shared among
several control systems.
Note: For details on retentiveness, refer to “Retentiveness of Logic and Data” on
page 6-14.
15H
The transition bit for a reference tells whether the most recent value (ON, OFF) written
to the reference is the same as the previous value of the reference. Therefore when a
reference is written and its new value is the same as its previous value, its transition
bit is turned OFF. When its new value is different from its previous value, its transition
bit is turned ON. The transition bit for a reference is affected every time the reference
is written to. The source of the write is immaterial; it can result from a coil execution,
an executed function’s output, the updating of reference memory after an input scan,
etc.
When override bits are set, the associated references cannot be changed from the
program or the input device; they can only be changed on command from the
programmer. Overrides do not protect transition bits. If an attempted write occurs to
an overridden memory location, the corresponding transition bit is cleared.
Data Scope
Each of the user references has “scope”; that is, it may be available throughout the
system, available to all programs, restricted to a single program, or restricted to local
use within a block.
User Reference Type Range Scope
%I, %Q, %M, %T, %S, %SA, %SB, Global From any program, block, or host
%SC, %G, %R, %W, %AI, %AQ, computer. Variables defined in these
convenience references, fault locating registers have system (global) scope by
references default. However, variables with local
scope can also be assigned in these
registers.
Symbolic variable Global From any program, block, or host
computer. Symbolic variables have
system (global) scope by default.
However, symbolic variables with local
scope can be created using the naming
conventions for local variables.
I/O variable Global From any program, block, or host
computer.
%P Program From any block, but not from other
programs (also available to a host
computer).
%L Local From within a block only (also available to
a host computer).
In an LD block:
■ %P should be used for program references that are shared with other blocks.
■ %L are local references that can be used to restrict the use of register data to that
block. These local references are not available to other parts of the program.
■ %I, %Q, %M, %T, %S, %SA, %SB, %SC, %G, %R, %W, %AI, and %AQ
references are available throughout the system.
%S References
Reference Name Definition
%S0001 #FST_SCN Current sweep is the first sweep in which the LD executed. Set the first time the user
program is executed after a Stop/Run transition and cleared upon completion of its
execution.
%S0002 #LST_SCN Set when the CPU transitions to run mode and cleared when the CPU is performing
its final sweep. The CPU clears this bit and then performs one more complete sweep
before transitioning to Stop or Stop Faulted mode. If the number of last scans is
configured to be 0, %S0002 will be cleared after the CPU is stopped and user logic
will not see this bit cleared.
%S0003 #T_10MS 0.01 second timed contact.
%S0004 #T_100MS 0.1 second timed contact.
%S0005 #T_SEC 1.0 second timed contact.
%S0006 #T_MIN 1.0 minute timed contact.
%S0007 #ALW_ON Always ON.
%S0008 #ALW_OFF Always OFF.
%S0009 #SY_FULL Set when the CPU fault table fills up (size configurable with a default of 16 entries).
Cleared when an entry is removed from the CPU fault table and when the CPU fault
table is cleared.
%S0010 #IO_FULL Set when the I/O fault table fills up (size configurable with a default of 32 entries).
Cleared when an entry is removed from the I/O fault table and when the I/O fault table
is cleared.
%S0011 #OVR_PRE Set when an override exists in %I, %Q, %M, or %G, or symbolic BOOL memory.
%S0012 #FRC_PRE Set when force exists on a Genius point.
%SA0012 #LOS_RCK Set when an expansion rack stops communicating with the CPU. To clear this bit, clear the
CPU fault table or power cycle the CPU.
%SA0013 #LOS_IOC Set when a Bus Controller stops communicating with the CPU.
To clear this bit, clear the I/O fault table or power cycle the CPU.
%SA0014 #LOS_IOM Set when an I/O module stops communicating with the CPU.
To clear this bit, clear the I/O fault table or power cycle the CPU.
%SA0015 #LOS_SIO Set when an option module stops communicating with the CPU.
To clear this bit, clear the CPU fault table or power cycle the CPU.
%SA0017 #ADD_RCK Set when an expansion rack is added to the system.
To clear this bit, clear the CPU fault table or power cycle the CPU.
%SA0018 #ADD_IOC Set when a Bus Controller is added to a rack.
To clear this bit, clear the I/O fault table or power cycle the CPU.
%SA0019 #ADD_IOM Set when an I/O module is added to a rack.
To clear this bit, clear the I/O fault table or power cycle the CPU.
%SA0020 #ADD_SIO Set when an intelligent option module is added to a rack.
To clear this bit, clear the I/O fault table or power cycle the CPU.
%SA0022 #IOC_FLT Set when a Bus Controller reports a bus fault, a global memory fault, or an IOC hardware
fault. To clear this bit, clear the I/O fault table or power cycle the CPU.
%SA0023 #IOM_FLT Set when an I/O module reports a circuit or module fault.
To clear this bit, clear the I/O fault table or power cycle the CPU.
%SA0027 #HRD_SIO Set when a hardware failure is detected in an option module.
To clear this bit, clear the I/O fault table or power cycle the CPU.
%SA0029 #SFT_IOC Set when there is a software failure in the I/O Controller.
To clear this bit, clear the I/O fault table or power cycle the CPU.
%SA0032 #SBUS_ER Set when a bus error occurs on the VME bus backplane
To clear this bit, clear the I/O fault table or power cycle the CPU.
%SA0081 – Set when a user-defined fault is logged in the CPU fault table.
%SA0112 To clear these bits, clear the CPU fault table or power cycle the CPU. For more
information, see discussion of Service Request 21 in chapter 10.
%SB0001 #WIND_ER Set when there is not enough time to start the Programmer Window in Constant Sweep
mode.
To clear this bit, clear the CPU fault table or power cycle the CPU.
%SB0009 #NO_PROG Set when the CPU powers up with memory preserved, but no user program is present.
Cleared when the CPU powers up with a program present or by clearing the CPU fault
table.
%SB0010 #BAD_RAM Set when the CPU detects corrupted RAM memory at power-up. Cleared when the CPU
detects that RAM memory is valid at power-up or by clearing the CPU fault table.
%SB0011 #BAD_PWD Set when a password access violation occurs. Cleared when
the CPU fault table is cleared or when the CPU is power cycled.
%SB0012 #NUL_CFG Set when an attempt is made to put the CPU in Run mode when there is no configuration
data present.
To clear this bit, clear the CPU fault table or power cycle the CPU.
%SB0013 #SFT_CPU Set when the CPU detects an error in the CPU operating system software.
To clear this bit, clear the CPU fault table or power cycle the CPU.
%SB0014 #STOR_ER Set when an error occurs during a programmer store operation.
To clear this bit, clear the CPU fault table or power cycle the CPU.
%SB0016 #MAX_IOC Set when more than 32 IOCs are configured for the system.
To clear this bit, clear the CPU fault table or power cycle the CPU.
%SB0017 #SBUS_FL Set when the CPU fails to gain access to the bus.
To clear this bit, clear the CPU fault table or power cycle the CPU.
%SC0009 #ANY_FLT Set when any fault occurs that causes an entry to be placed in the CPU or I/O fault table.
Cleared when both fault tables are cleared or when the CPU is power cycled.
%SC0010 #SY_FLT Set when any fault occurs that causes an entry to be placed in the CPU fault table.
Cleared when the CPU fault table is cleared or when the CPU is power cycled.
%SC0011 #IO_FLT Set when any fault occurs that causes an entry to be placed in the I/O fault table. Cleared
when the I/O fault table is cleared or when the CPU is power cycled.
%SC0012 #SY_PRES Set as long as there is at least one entry in the CPU fault table. Cleared when the CPU
fault table is cleared.
%SC0013 #IO_PRES Set as long as there is at least one entry in the I/O fault table. Cleared when the I/O fault
table is cleared.
%SC0014 #HRD_FLT Set when a hardware fault occurs. Cleared when both fault tables are cleared or when the
CPU is power cycled.
%SC0015 #SFT_FLT Set when a software fault occurs. Cleared when both fault tables are cleared or when the
CPU is power cycled.
Fault References
The fault references are discussed in chapter 15 of this manual but are presented
here for your convenience.
Non-Configurable Faults
Non-Configurable Faults
(Action) Description
#SBUS_FL (fatal) System bus failure. The CPU was not able to access the VME bus. BUSGRT-NMI
error.
#HRD_CPU (fatal) CPU hardware fault, such as failed memory device or failed serial port.
#HRD_SIO (diagnostic) Non-fatal hardware fault on any module in the system.
#SFT_SIO (diagnostic) Non-recoverable software error in a LAN interface module.
#PB_SUM (fatal) Program or block checksum failure during power-up or in Run mode.
#LOW_BAT (diagnostic) The low battery indication is not supported for the CPU battery.
The CPU may set this bit when an I/O module or special-purpose module has reported
a low battery. In this case, a fault will be reported in the I/O fault table.
To clear this bit, clear the CPU fault table or power cycle the CPU.
#OV_SWP (diagnostic) Constant sweep time exceeded.
#SY_FULL, IO_FULL CPU fault table full
(diagnostic) I/O fault table full
#IOM_FLT (diagnostic) Point or channel on an I/O module—a partial failure of the module.
#APL_FLT (diagnostic) Application fault.
#ADD_RCK (diagnostic) New rack added, extra, or previously faulted rack has returned.
#ADD_IOC (diagnostic) Extra I/O Bus Controller or reset of I/O Bus Controller.
#ADD_IOM (diagnostic) Previously faulted I/O module is no longer faulted or extra I/O module.
#ADD_SIO (diagnostic) New intelligent option module is added, extra, or reset.
#NO_PROG (information) No application program is present at power-up. Should only occur the first time the
CPU is powered up or if the battery-backed RAM containing the program fails.
#BAD_RAM (fatal) Corrupted program memory at power-up. Program could not be read and/or did not
pass checksum tests.
#WIND_ER (information) Window completion error. Servicing of Programmer or Logic Window was skipped.
Occurs in Constant Sweep mode.
#BAD_PWD (information) Change of privilege level request to a protection level was denied; bad password.
#NUL_CFG (fatal) No configuration present upon transition to Run mode. Running without a configuration
is similar to suspending the I/O scans.
#SFT_CPU (fatal) CPU software fault. A non-recoverable error has been detected in the CPU. May be
caused by Watchdog Timer expiring.
#MAX_IOC (fatal) The maximum number of bus controllers has been exceeded. The CPU supports 32
bus controllers.
#STOR_ER (fatal) Download of data to CPU from the programmer failed; some data in CPU may be
corrupted.
Data Types
Type Name Description Data Format
BOOL Boolean The smallest unit of memory. Has two states, 1 or 0. A
BOOL array may have length N.
BYTE Byte Has an 8-bit value. Has 256 values (0–255). A BYTE
array may have length N.
WORD Word Uses 16 consecutive bits of data memory. The valid Register
range of word values is 0000 hex to FFFF hex. (16 bit states)
16 1
DWORD Double Word Has the same characteristics as a single word data Register 2 Register 1
type, except that it uses 32 consecutive bits in data
memory instead of only 16 bits. 32 17 16 1
(32 bit states)
UINT Unsigned Uses 16-bit memory data locations. They have a valid Register
Integer range of 0 to +65535 (FFFF hex). (Binary value)
16 1
INT Signed Uses 16-bit memory data locations, and are Register 1 (Two’s
Integer represented in 2’s complement notation. The valid S Complement
range of an INT data type is –32768 to +32767. 16 1 value)
LREAL Double Uses 64 consecutive bits (four consecutive 16-bit Register 2 Register 1
Precision memory locations). The range of numbers that can be
Floating Point stored in this format is from ±2.2250738585072020E- 32 17 16 1
308 to ±1.7976931348623157E+308. For the IEEE Register 4 Register 3
format, refer to “Floating Point Numbers” on page 6-22. 20H
64 49 48 33
(IEEE format)
32 17 16 1
23-bit mantissa
8-bit exponent
Register use by a single floating point number is diagrammed below. For example, if
the floating point number occupies registers R5 and R6, R5 is the least significant
register and R6 is the most significant register.
Most Significant Register Least Significant Register
Bits 17-32 Bits 1-16
32 17 16 1
Most Significant Bit Least Significant Bit Most Significant Bit Least Significant Bit
52-bit mantissa
11-bit exponent
Binary representations of Infinity and NaN values have exponents that contain all 1s.
UDT Properties
Name: The UDT’s name. Maximum length: 32 characters.
Description: The user-defined description of the UDT.
Memory Type: The type of symbolic or I/O variable memory in which a variable of this
UDT resides.
Non-Discrete: (Default) Word-oriented memory organized in groups of 16
contiguous bits.
Discrete: Bit-oriented memory.
Notes: You cannot nest a UDT of one memory type in a UDT of a different
memory type.
Changing the memory type propagates to existing variables of this UDT only
after target validation.
Is Fixed Size: If set to True, you can increase the Size (Bytes) value to a maximum of
65,535 bytes to create a buffer at the end of the UDT. The buffer is included in the
memory allocated to every downloaded variable of that UDT data type. Use of a buffer
may allow run mode store of a UDT when the size of the UDT definition has changed.
For details, see page 6-26. 2H
If set to False (default), the Size (Bytes) value is read-only and does not include a
buffer at the end of the UDT.
Size (bytes): (Read-only when Is Fixed Size is set to False.) The total number of
bytes required to store a structure variable of the user-defined data type (UDT).
Bytes Remaining: (Read-only; displayed if Is Fixed Size is set to True.) The UDT's
buffer size; the number of bytes available before the actual size of the UDT reaches
the value of the Size (bytes) property.
UDT Limits
Maximum number of UDTs per target: 2048
Maximum UDT size: 65,535 bytes
Note: Bit spares created to line up the end of a section of BOOL variables or
arrays with the end of a byte will count toward the maximum size.
Maximum number of top-level UDT elements: 1024
Maximum array size of a top-level UDT element: 1024 array elements
UDTs do not support the following:
- Two-dimensional arrays
- Function block data types
- Enumerated data types
You cannot nest a UDT of one memory type in a UDT of a different memory type.
You cannot alias a variable to a UDT variable or UDT variable element.
A FAULT contact supports a BOOL element of a UDT I/O variable, but not a
BOOL element of a UDT parameter in a UDFB or parameterized block.
POSCON and NEGCON do not support BOOL elements of UDT parameters in
parameterized blocks or UDFBs.
Example
You want to set up six COMMREQ commands to send values to a series of six
identical intelligent modules that require individualized data of the same data types in
the same format, specified by the manual for the intelligent module. This data contains
header information and several words of data.
You could proceed as follows:
1. Add a UDT named COMMREQ6 and edit it to contain the data in the required
3H
an I/O variable.
4. Populate the variable. If the value of an element needs to be the same for all six
COMMREQ6 elements, you can set up an ST for loop that uses a variable index
6H 7H
Although you can populate the memory registers directly without a UDT and
MOVE_TO_FLAT, there are advantages when working with UDT variables:
UDT variables reside in symbolic or I/O variable memory, which protects them
from memory overlaps and offers more protection against overwriting, whereas
reference memory areas offer no such protection. It is best to use reference
memory just before issuing a COMM_REQ.
You can work with meaningful structure variable names and structure element
names.
You can set up loops with variable indexes to populate some of the values.
Word-for-Word Changes
Many changes to the program that do not modify the size of the program are
considered word-for-word changes. Examples include changing the type of contact or
coil, or changing a reference address used for an existing function block.
Symbolic Variables
Creating, deleting, or modifying a symbolic variable definition is not a word-for-word
change.
The following are word-for-word changes:
■ Switching between two symbolic variables
■ Switching between an symbolic variable and a mapped variable
■ Switching between a constant and a symbolic variable
This chapter describes the programming instructions that can be used to create ladder logic
programs for the PACSystems control system.
For an overview of the types of operands that can be used with instructions, refer to
“Operands for Instructions” in chapter 6.
The ladder logic implementation of the PACSystems instruction set includes the following
categories:
■ Advanced Math ......................................................................................7-2 1H
■ Coils .....................................................................................................7-253H
■ Contacts ...............................................................................................7-31 4H
■ Counters...............................................................................................7-71 7H
■ Timers ................................................................................................7-151
13H
GFK-2222P 7-1
7 Advanced Math Functions
Exponential/Logarithmic Functions
When an exponential or logarithmic function receives power flow, it performs the appropriate
operation on the REAL or LREAL input value(s) and places the result in output Q.
The inverse natural log
(EXP) function raises e to the
power specified by IN.
The power flow output is energized when the function is performed, unless overflow or one of
the following invalid conditions occurs:
■ IN < 0, for LOG or LN
■ IN1 < 0, for EXPT
■ IN is negative infinity, for EXP
■ IN, IN1, or IN2 is a NaN (Not a Number)
Square Root
Mnemonics:
SQRT_DINT
SQRT_INT
SQRT_REAL
SQRT_LREAL
When the Square Root function receives power flow, it finds the square root of IN and stores
the result in Q. The output Q must be the same data type as IN.
The power flow output is energized when the function is performed without overflow, unless
one of these invalid REAL operations occurs:
■ If IN < 0, Q is set to 0 and ENO is set FALSE.
■ If IN is a NaN (Not a Number), Q will also be an NaN value and ENO will be set false.
Example
The square root of the integer number located at %AI0001 is placed into %R00003 when
%I00001 is ON.
Trig Functions
Mnemonics:
SIN_REAL
SIN_LREAL
COS_REAL
COS_LREAL
TAN_REAL
TAN_LREAL
The SIN, COS, and TAN functions are used to find the trigonometric sine, cosine, and
tangent, respectively, of an input whose units are radians. When one of these functions
receives power flow, it computes the sine (or cosine or tangent) of IN and stores the result in
output Q.
The SIN, COS, and TAN functions accept a broad range of input values, where –263 < IN < 263, (263 is
approximately 9.22x1018). Input values outside this range will produce incorrect results.
The power flow output is energized unless the following invalid condition occurs:
■ IN or Q is a NaN (Not a Number)
Operands
Parameter Description Allowed Operands Optional
IN Number of radians. All except variables located in %S—%SC No
–263 < IN < 263
Q Trigonometric value of IN (REAL or LREAL) All except constants and variables located No
in %S—%SC
Example
The COS of the value in V_R00001 is placed in V_R00033.
The ATAN function accepts the broadest range of input values, where – ∞ ≤ IN ≤ + ∞. Given
a valid value for the IN parameter, the ATAN function produces a result Q such that:
π π
ATAN(IN) = − ≤Q≤
2 2
The power flow output is energized unless one of the following invalid conditions occurs:
■ IN is outside the valid range for ASIN, ACOS, or ATAN
■ IN is a NaN (Not a Number)
Warning
Overlapping input and output reference address ranges in multiword functions
is not recommended, as it can produce unexpected results.
Note that for all functions (Bit Test, Bit Set, Bit Clear, and Bit Position) that return a bit
position indicator as an output parameter (POS), bit position numbering starts at 1, not 0, as
shown in the diagram above.
Bit Position
Operands
Parameter Description Allowed Operands Optional
Length (??) The number of WORDs or Constants No
DWORDs in the bit string.
1 ≤ Length ≤ 256.
IN The data to operate on All. Constants may only be used No
when Length is 1.
Examples
When V_I00001 is set, the bit string starting at V_M00001 is searched until a bit equal to 1 is
found, or 6 words have been searched. Coil V_Q00001 is turned on. If a bit equal to 1 is
found, its location within the bit string is written to V_AQ0001 and V_Q00002 is turned on.
For example, if V_00001 is set, bit V_M00001 is 0, and bit V_M0002 is 1, the value written to
V_AQ0001 is 2.
Bit Sequencer
The Bit Sequencer (BIT_SEQ) function performs a bit sequence shift
through a series of contiguous bits.
The operation of BIT_SEQ depends on the value of the reset input (R),
and both the current value and previous value of the enabling power
flow input (EN):
Reserved
Reserved
OK (status input
EN (enable input
Notes:
■ Bits 0 through 13 are not used.
■ In the N operand, bits are entered as 1 through 16, not 0 through 15.
Example
In the following example, a #FST_SCN system variable is used to set CLEAR to ON for one
scan. This sets the step number in Word 1 of the Bit Sequencer’s control block to an initial
value of 3.
The Bit Sequencer operates on register memory %R00001. Its control block is stored in
registers %R0010, %R0011, and %R0012. When CLEAR is active, the sequencer is reset
and the current step is set to step number 3, as specified in N. The third bit of %R0001 is set
to one and the other seven bits are set to zero.
When NXT_CYC is active and CLEAR is not active, the bit for step number 3 is cleared and
the bit for step number 2 or 4 (depending on whether DIRECTION is energized) is set.
The Bit Set (BIT_SET_DWORD and BIT_SET_WORD) function sets a bit in a bit string to 1.
The Bit Clear (BIT_CLR_DWORD and BIT_CLR_WORD) function clears a bit in a string by
setting the bit to 0.
Each scan that power is received; the function sets or clears the specified bit. If a variable
rather than a constant is used to specify the bit number, the same function can set or clear
different bits on successive scans. Only one bit is set or cleared, and the transition
information for that bit is updated. The transition status of all the other bits in the bit string is
not affected.
The function passes power flow to the right, unless the value for BIT is outside the specified
range.
Operands
Parameter Description Allowed Operands Optional
Length The number of WORDs or DWORDs in Constants
(??) the bit string. 1 ≤ Length ≤ 256.
IN The first WORD or DWORD of the data to All except constants, flow, and variables
process located in %S
BIT The number of the bit to set or clear in IN. All except variables located in %S - %SC
1 ≤ BIT ≤ (16 * Length) for WORD.
1 ≤ BIT ≤ (32 * length) for DWORD
Examples
Example 1
Whenever input V_I0001 is set, bit 12 of the string beginning at
reference %R00040 (as specified by variable V_R0040) is set
to 1.
Example 2
Whenever V_I00001 is set, %M00043, the third bit of the string
beginning at %M00041, is set to 1. Note that neither the status
nor the transition value of any of the other bits in the same byte
as %M00043 (e.g., %M00041, %M00042, %M00044, etc.) is
affected by the BIT_SET function.
Bit Test
When the Bit Test function receives power flow, it tests a bit within a bit
string to determine whether that bit is currently 1 or 0. The result of the
test is placed in output Q.
Each scan that power is received, the Bit Test function sets its output Q to
the same state as the specified bit. If a register rather than a constant is
used to specify the bit number, the same function can test different bits on
successive sweeps. If the value of BIT is outside the range (1 ≤ BIT ≤ (16
* length) for a WORD and 1 ≤ BIT ≤ (32 * length) for a DWORD), then Q is
set OFF.
You can specify a string length of 1 to 256 WORDs or DWORDs.
Note: When using the Bit Test function, the bits are numbered 1 through 16 for a WORD,
not 0 through 15. They are numbered 1 through 32 for a DWORD.
Operands
Parameter Description Allowed Operands Optional
Length The number of WORDs or DWORDs in the data string to test. 1 ≤ Constant No
(??) Length ≤ 256.
IN The first WORD or DWORD in the data to test All No
BIT The number of the bit to test in IN. 1 ≤ BIT ≤ (16*Length). All except variables located in %S No
- %SC
Q The state of the specific bit tested; Q is energized if the bit tested Flow No
is a 1.
Example 1
When input V_I0001 is set, the bit at the location
contained in reference PICKBIT is tested. The bit is
part of string PRD_CDE. If it is 1, output Q passes
power flow to the ADD function, causing 1 to be
added to the current value of the ADD function input
IN1.
Example 2
When input V_I0001 is set, the bit at the location contained in
reference PICKBIT is tested. The bit is part of string PRD_CDE. If it is
1, output Q passes power flow and the coil V_Q0001 is turned on.
Each scan that power is received, the Logical function examines each bit in bit string IN1 and
the corresponding bit in bit string IN2, beginning with the least significant bit in each. You can
specify a string length of 1 to 256 WORDs or DWORDs. The IN1 and IN2 bit strings specified
may overlap.
Logical AND
If both bits examined by the Logical AND function are 1, AND places a 1 in the corresponding
location in output string Q. If either bit is 0 or both bits are 0, AND places a 0 in string Q in
that location.
AND passes power flow to the right whenever it receives power.
Tip: You can use the Logical AND function to build masks or screens, where only certain bits
are passed (the bits opposite a 1 in the mask), and all other bits are set to 0.
Logical OR
If either bit examined by the Logical OR function is 1, OR places a 1 in the corresponding
location in output string Q. If both bits are 0, Logical OR places a 0 in string Q in that location.
The function passes power flow to the right whenever it receives power.
Tips:
■ You can use the Logical OR function to combine strings or to control many outputs with
one simple logical structure. The Logical OR function is the equivalent of two relay
contacts in parallel multiplied by the number of bits in the string.
■ You can use the Logical OR function to drive indicator lamps directly from input states or
to superimpose blinking conditions on status lights.
Logical XOR
When the Exclusive OR (XOR) function receives power flow, it compares each bit in bit string
IN1 with the corresponding bit in string IN2. If the bits are different, a 1 is placed in the
corresponding position in the output bit string.
For each pair of bits examined, if only one bit is 1, then XOR places a 1 in the corresponding
location in bit string Q. XOR passes power flow to the right whenever it receives power.
Examples
Logical AND
When input v_I0001 is set, the 16-bit strings represented by variables WORD1 and WORD2
are examined. The logical AND places the results in output string RESULT.
Logical XOR
Whenever V_I0001 is set, the bit string represented by the variable WORD3 is cleared (set to
all zeros).
Logical NOT
When the Logical Not or Logical Invert (NOT) function receives power flow, it sets the state of
each bit in the output bit string Q to the opposite of the state of the corresponding bit in bit
string IN1.
All bits are altered on each scan that power is received, making output string Q the logical
complement of input string IN1. Logical NOT passes power flow to the right whenever it
receives power. You can specify a string length of 1 to 256 WORDs or DWORDs
Operands
Parameter Description Allowed Operands Optional
Length (??) The number of WORDs or Constant No
DWORDs in the bit string
to NOT. 1 ≤ Length ≤ 256.
IN1 The first WORD or All No
DWORD of the input string
to NOT.
Q The first WORD or All except constants and No
(Must be the same data type DWORD of the NOT's variables located in %S
as IN1) result. memory
Example
When input V_I0001 is set, the bit string represented by the variable A is negated. Logical
NOT stores the resulting inverse bit string in variable B. Variable A retains its original bit
string value.
Masked Compare
The Masked Compare (MASK_COMP_DWORD and
MASK_COMP_WORD) function compares the contents of
two bit strings. It provides the ability to mask selected bits.
Tip: Input string 1 might contain the states of outputs
such as solenoids or motor starters. Input string 2
might contain their input state feedback, such as limit
switches or contacts.
When the function receives power flow, it begins comparing
the bits in the first string with the corresponding bits in the
second string. Comparison continues until a miscompare is
found or until the end of the string is reached.
The BIT input stores the bit number where the next comparison should start. Ordinarily, this is
the same as the number where the last miscompare occurred. Because the bit number of the
last miscompare is stored in output BN, the same reference can be used for both BIT and
BN. The comparison actually begins 1 bit following BIT; therefore, the initial value of BIT
should be 1 less first bit to be compared (for example, zero (0) to begin comparison at
%I00001). Using the same reference for BIT and BN causes the compare to start at the next
bit position after a miscompare; or, if all bits compared successfully upon the next invocation
of the function, the compare starts at the beginning.
Tip: If you want to start the next comparison at some other location in the string, you can
enter different references for BIT and BN. If the value of BIT is a location that is
beyond the end of the string, BIT is reset to 0 before starting the next comparison.
The function passes power flow whenever it receives power. The other outputs of the function
depend on the state of the corresponding mask bit.
If all corresponding bits in strings IN1 and IN2 match, the function sets the miscompare
output MC to 0 and BN to the highest bit number in the input strings. The comparison then
stops. On the next invocation of a Masked Compare, it is reset to 0.
If a Miscompare is found, that is, if the two bits being compared are not the same, the
function checks the correspondingly numbered bit in string M (the mask).
If the mask bit is a 1, the comparison continues until it reaches another miscompare or the
end of the input strings.
If a miscompare is detected and the corresponding mask bit is a 0, the function does the
following:
1. Sets the corresponding mask bit in M to 1.
2. Sets the miscompare (MC) output to 1.
3. Updates the output bit string Q to match the new content of mask string M.
4. Sets the bit number output (BN) to the number of the miscompared bit.
5. Stops the comparison.
Example 1
When %I00001 is set, MASK_COMP_WORD compares the bits represented by the
reference VALUES against the bits represented by the reference EXPECT. Comparison
begins at BITNUM+1. If an unmasked miscompare is detected, the comparison stops. The
corresponding bit is set in the mask RESULT. BITNUM is updated to contain the bit number
of the miscompared bit. In addition, the output string NEWVALS is updated with the new
value of RESULT, and coil %Q00002 is turned on. Coil %Q00001 is turned on whenever
MASK_COMP_WORD receives power flow.
Example 2
On the first scan, the Masked Compare Word function executes. %M0001 through %M0016
is compared with %M0017 through %M0032. %M0033 through %M0048 contains the mask
value. The value in %R0001 determines the bit position in the two input strings where the
comparison starts.
Before the function is executed, the contents of the above references are:
The #FST_SCN contact forces one and only one execution; otherwise, the function would
repeat with possibly unexpected results.
Rotate Bits
Mnemonics:
ROL_DWORD
ROL_WORD
ROR_DWORD
ROR_WORD
When receiving power flow, the Rotate Bits Right (ROR_DWORD and ROR_WORD) and
Rotate Bits Left (ROL_DWORD and ROL_WORD) functions rotate all the bits in a string of
WORDs or DWORDs N positions respectively to the right or to the left. When rotation occurs,
the specified number of bits is rotated out of the input string respectively to the right or to the
left and back into the string on the other side.
The Rotate Bits function passes power flow to the right, unless the number of bits to rotate is
less than 0, or is greater than the total length of the string. The result is placed in output string
Q. If you want the input string to be rotated, the output parameter Q must use the same
memory location as the input parameter IN. The entire rotated string is written on each scan
that power is received.
A string length of 1 to 256 words or double words can be specified.
Operands
Parameter Description Allowed Operands Optional
Length (??) The number of WORDs or DWORDs in the string to Constant No
be rotated. 1 ≤ Length ≤ 256.
IN The string to rotate All. Constants are legal when Length is 1 No
N The number of positions to rotate. 0 ≤ N ≤ Length. All except variables in %S - %SC No
memories
Q The resulting rotated string All except constants and variables in %S No
memory
Example
Whenever input V_I0001 is set, the input bit string in
location %R0001 is rotated left 3 bits and the result is
placed in %R00002. The actual input bit string %R0001
is left unchanged. If the same reference had been used
for IN and Q, a rotation would have occurred in place.
MSB
%R0001
MSB
%R0002 (after %I00001 is set)
Shift Bits
Mnemonics:
SHIFTL_DWORD
SHIFTL_WORD
SHIFTR_DWORD
SHIFTR_WORD
Shift Left
When the Shift Left (SHIFTL_WORD) function receives power flow, it shifts all the bits in a
word or group of words to the left by a specified number of places, N. When the shift occurs,
the specified number of bits is shifted out of the output string to the left. As bits are shifted out
of the high end of the string (Most Significant Bit (MSB)), the same number of bits is shifted in
at the low end (Least Significant Bit (LSB)). The SHIFTL_DWORD function operates in a
similar manner on DWORDs instead of WORDs.
Shift Right
When the Shift Right (SHIFTR_WORD) function receives power flow, it shifts all the bits in a
word or group of words a specified number of places to the right (N). When the shift occurs,
the specified number of bits is shifted out of the output string to the right. As bits are shifted
out of the low end of the string (LSB), the same number of bits is shifted in at the high end
(MSB).
Output Q is the shifted copy of the input string. If you want the input string to be shifted, the
output parameter Q must use the same memory location as the input parameter IN. The
entire shifted string is written on each scan that power is received. Output B2 is the last bit
shifted out. For example, if four bits were shifted, B2 would be the fourth bit shifted out.
Operands
Parameter Description Allowed Operands Optional
Length (??) The number of WORDs or Constants. No
DWORDs in the string. 1 ≤ Length
≤ 256.
IN The string of WORDs or DWORDs All. Constants are legal only No
to shift when Length = 1.
Example
Whenever input V_I0001 is set, the bits in the input string that begins at WORD1 are copied
to the output bit string that starts at WORD2. WORD2 is left-shifted by 8 bits, as specified by
the input N. The resulting open bits at the beginning of the output string are set to the value of
V_I0002.
Coils
Coils are used to control the discrete (BOOL) references assigned to them. Conditional logic
must be used to control the flow of power to a coil. Coils cause action directly. They do not
pass power flow to the right. If additional logic in the program should be executed as a result
of the coil condition, you can use an internal reference for the coil or a continuation
coil/contact combination.
■ A continuation coil does not use an internal reference. It must be followed by a
continuation contact at the beginning of any rung following the continuation coil.
■ Coils are always located at the rightmost position of a line of logic.
Coil Checking
The level of coil checking is set to “Show as error” by default. If you want a coil conflict to
result in a warning instead of this error, or if you want no warning at all, edit the PLC option:
Multiple Coil Use Warning in the programming software.
The “Show as warning” option enables you to use any coil reference with multiple Coils, Set
Coils, and Reset Coils, but you will be warned at validation time every time you do so. With
both the “Show as warning” and the “no warning” options, a reference can be set ON by
either a Set Coil or a normal Coil and can be set OFF by a Reset Coil or by a normal Coil.
0H
Continuation Coil
A continuation coil instructs the PLC to continue the present rung's LD logic power
flow value (TRUE or FALSE) at the continuation contact on a following rung.
The flow state of the continuation coil is passed to the continuation contact.
Notes:
■ If the flow of logic does not execute a continuation coil before it executes a continuation
contact, the state of the continuation contact is no flow (FALSE).
■ The continuation coil and the continuation contact do not use parameters and do not
have associated variables.
■ You can have multiple rungs with continuation contacts after a single continuation coil.
■ You can have multiple rungs with continuation coils before one rung with a continuation
contact.
Negated Coil
Set Coil and Reset Coil with a retentive Set Coil and Reset Coil with a non-
variable assigned retentive variable assigned
The SET and RESET coils can be used to keep (“latch”) the state of a reference either ON
or OFF.
Warning
SET / RESET coils write an undefined result to the transition bit for the given
reference. This result differs from that written by Series 90-70 CPUs and could
change for future PACSystems CPU models.
Because they write an undefined result to transition bits, do not use SET or
RESET coils with references used on POSCON or NEGCON transition contacts.
When a SET coil receives power flow, it sets its discrete reference ON. When a SET coil
does not receive power flow, it does not change the value of its discrete reference. Therefore,
whether or not the coil itself continues to receive power flow, the reference stays ON until the
reference is reset by other logic, such as a RESET coil.
When a RESET coil receives power flow, it resets a discrete reference to OFF. When a
RESET coil does not receive power flow, it does not change the value of its discrete
reference. Therefore, its reference remains OFF until it is set ON by other logic, such as a
SET coil.
The last solved SET coil or RESET coil of a pair takes precedence.
The SET and RESET coils can be assigned a retentive variable or a non-retentive variable.
Valid memory areas: %I, %Q, %M, %T, %SA - %SC, and %G. Symbolic discrete variables
are permitted. Bit-in-word references on any word-oriented memory except %AI, including
symbolic non-discrete memory, are also permitted.
Transition Coils
The PACSystems provides four transition coils: PTCOIL, NTCOIL, POSCOIL, and NEGCOIL.
For examples showing the differences in the operation of the two types of transition coils, see
page 7-30.
14H
If: If:
■ the current value of the transition bit for the variable ■ the current value of the transition bit for the variable
is OFF, is ON,
■ the current value of the status bit for the variable is ■ the current value of the status bit for the variable is
OFF, and OFF, and
■ the current value of the power flow input to the coil ■ the current value of the power flow input is OFF,
is ON,
the Negative Transition Coil turns ON the status bit of its
the Positive Transition Coil turns ON the status bit of its associated variable. In all other cases, it turns OFF the
associated variable. In all other cases, it turns OFF the status bit of its associated variable. In all cases, the
status bit of its associated variable. In all cases, the transition bit of the variable is set to the value of the
transition bit of the variable is set to the value of the power flow input.
power flow input.
Note: When the Negative Transition Coil turns ON its
Note: When the Positive Transition Coil turns ON its reference’s status bit, it also turns OFF its
reference’s status bit, it also turns ON its transition bit. This negates two of the conditions
transition bit. This negates two of the conditions for the reference bit to be turned ON the next
for the reference bit to be turned ON the next time the Negative Transition coil executes.
time the Positive Transition coil executes. Therefore the reference bit is turned OFF the
Therefore the reference bit is turned OFF the next time the Negative Transition Coil executes
next time the Positive Transition Coil executes (as long as the reference bit has not in the
(as long as the reference bit has not in the meantime been written to by any other logic).
meantime been written to by any other logic).
Cautions
■ Do not override a POSCOIL or NEGCOIL transition coil by putting a force on its
reference bit. If a transition coil is overridden and the override is then removed, the
behavior of the transition coil on the next sweep in which it is executed depends
on many inputs and may be difficult to understand. It may cause unexpected
consequences in the ladder logic and in field devices attached to the CPU.
■ If you want to preserve a transition coil’s one-shot nature, do not write to its
reference bit using any other instruction, such as another coil or a GE function.
■ Do not use a transition contact with the same reference address used on a
transition coil. The interaction between the two instructions can be difficult to
understand.
When the input power flow is ON and the power flow When the input power flow is OFF and the power flow
the last time the coil was executed is OFF (i.e., the the last time the coil was executed is ON (i.e., the
instance data is OFF), the status bit of the BOOL instance data is ON), the status bit of the BOOL
variable associated with PTCOIL is turned ON. variable associated with NTCOIL is turned ON.
Under any other conditions, the status bit of the Under any other conditions, the status bit of the
BOOL variable is turned OFF. BOOL variable is turned OFF.
After the status bit of the BOOL variable is updated, After the status bit of the BOOL variable is updated,
the instance data associated with the PTCOIL is set the instance data associated with the PTCOIL is set
to the value of the input power flow. to the value of the input power flow.
POSCOIL
If a POSCOIL is used in place of the PTCOIL in the example below (keeping the rest of the
logic identical and same alternation of power flow into the POSCOIL), the behavior of the
logic will be different. The behavior of the POSCOIL is affected by the execution of the fourth
rung, which writes to Xsition and changes both its status and transition bits. In this example,
POSCOIL never turns Xsition ON. If the fourth rung is removed, POSCOIL will behave
exactly as the PTCOIL behaves, turning Xsition OFF on the first sweep, ON on the second
sweep, and so forth.
Flip the value of PflowIn. If it was ON turn it OFF. If it was OFF turn it ON.
Contacts
A contact is used to monitor the state of a reference address. Whether the contact passes
power flow depends on positive power flow into the contact, the state or status of the
reference address being monitored, and the contact type. A reference address is ON if its
state is 1; it is OFF if its state is 0.
Contact Display Mnemonic Contact Passes Power to Right...
Continuation Contact CONTCON if the preceding continuation coil is
set ON
Fault Contact FAULT if its associated BOOL or WORD
variable has a point fault
High Alarm Contact HIALR if the high alarm bit associated with
the analog (WORD) reference is ON
Low Alarm Contact LOALR if the low alarm bit associated with
the analog (WORD) reference is ON
No Fault Contact NOFLT if its associated BOOL or WORD
variable does not have a point fault
Normally Closed Contact NCCON if associated BOOL variable is OFF
Continuation Contact
■ A continuation contact continues the LD logic from the last previously-executed rung
in the block that contained a continuation coil.
The flow state of the continuation contact is the same as the preceding executed continuation
coil. A continuation contact has no associated variable.
Notes:
■ If the flow of logic does not execute a continuation coil before it executes a continuation
contact, the state of the continuation contact is no flow.
■ The state of the continuation contact is cleared (set to no flow) each time a block begins
execution.
■ The continuation coil and the continuation contact do not use parameters and do not
have associated variables.
■ You can have multiple rungs with continuation contacts after a single continuation coil.
■ You can have multiple rungs with continuation coils before one rung with a continuation
contact.
Fault Contact
A Fault contact (FAULT) detects faults in discrete or analog reference addresses, or locates
faults (rack, slot, bus, module).
■ To guarantee correct indication of module status, use the reference address (%I, %Q,
%AI, %AQ) with the FAULT/NOFLT contacts.
■ To locate a fault, use the rack, slot, bus, module fault locating system variable with a
FAULT/NOFLT contact.
Note: The fault indication of a given module is cleared when the associated fault is cleared
from the fault table.
■ For I/O point fault reporting, you must enable point fault references in Hardware
Configuration.
FAULT passes power flow if its associated variable or location has a point fault.
Operands
Parameter Description Allowed Operands Optional
BWVAR The variable associated with variables in %I, %Q, %AI, and %AQ memories, No
the FAULT contact and predefined fault-locating references
The high alarm contact (HIALR) is used to detect a high alarm associated with an analog
reference. Use of this contact and the low alarm contact must be enabled during CPU
configuration.
A high alarm contact passes power flow if the high alarm bit associated with the analog
reference is ON.
The low alarm contact (LOALR) detects a low alarm associated with an analog reference.
Use of this contact must be enabled during CPU configuration.
A low alarm contact passes power flow if the low alarm bit associated with the analog
reference is ON.
Operands
Parameter Description Allowed Operands Optional
WORDV The variable associated with the HIALR or LOALR variables in AI and AQ No
contact memories
No Fault Contact
Operands
Parameter Description Allowed Operands Optional
BWVAR The variable associated with variables in %I, %Q, %AI, and %AQ memories, No
the NOFLT contact and predefined fault-locating references
A normally closed contact (NCCON) acts as a switch that passes power flow if the BOOLV
operand is OFF (false, 0).
A normally open contact (NOCON) acts as a switch that passes power flow if the BOOLV
operand is ON (true, 1).
Operands
Parameter Description Allowed Operands Optional
BOOLV BOOLV may be a predefined system variable discrete variables in I, Q, M, T, S, No
or a user-defined variable. SA, SB, SC, and G memories;
NCCON: symbolic discrete variables; bit-
in-word references on variables
If BOOLV is ON, the normally closed
in any non-discrete memory
contact does not pass power flow.
(e.g., %L) or on symbolic non-
If BOOLV is OFF, the contact passes discrete variables.
power flow.
NOCON:
If BOOLV is ON, the normally open contact
passes power flow.
If BOOLV is OFF, the contact does not
pass power flow.
Transition Contacts
The power flow out of the POSCON and NEGCON transition contacts is determined by the
last write to the BOOL variable associated with the contact. The power flow out from the
PTCON and NTCON transition contacts is determined by the value that the associated BOOL
variable had the last time the contact was executed.
Warning
Do not use POSCON or NEGCON transition contacts for references used with
transition coils (also called one-shot coils) or SET and RESET coils.
■ It is important to note that once a POSCON or NEGCON contact begins passing power
flow, it continues to pass power flow until its associated variable is written to. When its
variable is written to, regardless of whether the value written to it is ON or OFF, the
POSCON or NEGCON contact stops passing power flow.
The source of the write is immaterial; it can be an output coil, a function block output, the
input scan, an input interrupt, a data change from the program, or external communications.
When the variable is written, the associated POSCON or NEGCON contact is immediately
affected. Until a write is made to the variable, the POSCON or NEGCON contact will not be
affected.
Depending on the logic flow, writes to the POSCON’s or NEGCON's associated variable:
■ May occur multiple times during a PLC scan, resulting in the POSCON or NEGCON
contact being ON for only a portion of the scan.
■ May occur several PLC scans apart, resulting in the POSCON or NEGCON contact being
ON for more than one scan.
■ May occur once per scan, for example if the POSCON or NEGCON's associated variable
is a %I input bit.
An override on a point prevents its status bit from being changed. However, it does not
prevent its transition bit from being changed. If a write is attempted to an overridden point, the
point’s transition bit is cleared. As a result, any associated POSCON or NEGCON contacts
will stop passing power flow.
Examples
Example 1
Coil E2 is turned ON when the value of the variable E1 transitions from OFF to ON. It stays
ON until E1 is written to again, causing the POSCON to stop passing power flow.
Coil E4 is turned ON when the value of the variable E3 transitions from ON to OFF. It stays
ON until E3 is written to again, causing the NEGCON to stop passing power flow.
Example 2
Bit %M00017 is set by a BIT_SET function and then cleared by a BIT_CLR function. The
positive transition contact X1 activates the BIT_SET, and the negative transition X2 activates
the BIT_CLR.
The positive transition associated with bit %M00017 will be on until %M00017 is reset by the
BIT_CLR function. This occurs because the bit is only written when contact X1 goes from
OFF to ON. Similarly, the negative transition associated with bit %M00017 will be ON until
%M00017 is set by the BIT_SET function.
Caution:
The instance data of a given PTCON or NTCON is changed only once per CPU
scan. Therefore, using a PTCON or NTCON in a block that can be called
multiple times per scan may have adverse effects on all calls after the first one
because the PTCON or NTCON cannot detect the transition on the second and
subsequent calls. This is particularly true when using a PTCON or NTCON in a
parameterized block or user-defined function block with a parameter or
member. In these cases, we recommend using R_TRIG or F_TRIG instead.
Also note that because the behavior of the PTCON and NTCON instructions is not dependent
on a transition bit, these instructions can be used with variables located in memories that do
not have associated transition bits.
POSCON
If a POSCON is used in place of the PTCON in the following example (keeping the rest of the
logic identical), the same alternation of the Xsition variable’s value occurs. The POSCON
instruction passes power flow on sweeps 2, 3, and 4; then again on sweeps 8, 9, and 10; and
so forth. The POSCON’s behavior is dependent on Xsition’s transition bit. Since Xsition’s
value is written once and then simply retained for three sweeps, its transition bit retains its
same value for three sweeps. Thus the POSCON will pass or not pass power flow for three
sweeps in a row. Note that if Xsition’s value is actually written on each sweep, the POSCON
and the PTCON behave identically.
On the 2nd sweep, turn Xsition ON for 3 sweeps; on the 5th sweep, turn it OFF for 3 sweeps, etc.
Control Functions
The control functions limit program execution and change the way the CPU executes the
application program.
Function Mnemonic Description
Do I/O DO_IO For one scan, immediately services a specified range of inputs or outputs. (All inputs
or outputs on a module are serviced if any reference locations on that module are
included in the DO I/O function. Partial I/O module updates are not performed.)
Optionally, a copy of the scanned I/O can be placed in internal memory, rather than at
the real input points.
Drum DRUM Provides predefined On/Off patterns to a set of 16 discrete outputs in the manner of a
mechanical drum sequencer.
Edge Detectors F_TRIG Detect the changing state of a Boolean signal.
R_TRIG
For Loop FOR_LOOP For loop. Repeats the logic between the FOR_LOOP instruction and END_FOR
EXIT_FOR instruction a specified number of times or until EXIT_FOR is encountered.
END_FOR
Mask I/O MASK_IO_INTR Mask or unmask an interrupt from an I/O module when using I/O variables. If not using
Interrupt I/O variables, use SVC_REQ 17, described in chapter 9.
Proportional PID_ISA Provides two PID (Proportional/Integral/Derivative) closed-loop control algorithms:
Integral PID_IND Standard ISA PID algorithm (PID_ISA)
Derivative
Independent term algorithm (PID_IND)
Control
Note: For details, refer to chapter 10.
Read Switch SWITCH_POS Reads position of the Run/Stop switch and the mode for which the switch is
Position configured.
Scan Set IO SCAN_SET_IO Scans the IO of a specified scan set.
Service Request SVC_REQ Requests a special PLC service.
Note: For details, refer to chapter 9.
Suspend IO SUS_IO Suspends for one sweep all normal I/O updates, except those specified by DO I/O
instructions.
Suspend or SUSP_IO_INTR Suspend or resume an I/O interrupt when using I/O variables. If not using I/O
Resume I/O variables, use SVC_REQ 32, described in Chapter 9.
Interrupt
Do I/O
When the DO I/O (DO_IO) function receives power flow, it updates inputs or
outputs for one scan while the program is running. You can also use DO_ IO to
update selected I/O during the program in addition to the normal I/O scan.
You can use DO_IO in conjunction with a Suspend IO (SUS_IO) function,
which stops the normal I/O scan. For details, see page 7-55.
15H
If input references are specified, DO_IO allows the most recent values of inputs
to be obtained for program logic. If output references are specified, DO I/O
updates outputs based on the most current values stored in I/O memory. I/O is
serviced in increments of entire I/O modules; the PLC adjusts the references, if necessary,
while DO_IO executes. DO_IO does not scan I/O modules that are not configured.
DO_IO continues to execute until all inputs in the selected range have reported or all outputs
have been serviced on the I/O modules. Program execution then returns to the function that
follows the DO_IO.
If the range of references includes an option module (HSC, APM, etc.), all the input data (%I
and %AI) or all the output data (%Q and %AQ) for that module are scanned. The ALT
parameter is ignored while scanning option modules.
DO_IO passes power to the right whenever it receives power unless:
■ Not all references of the type specified are present within the selected range.
■ The CPU is not able to properly handle the temporary list of I/O created by the function.
■ The range specified includes I/O modules that are associated with a “Loss of I/O” fault.
Warning
If DO_IO is used with timed or I/O interrupts, transition contacts associated
with scanned inputs may not operate as expected.
Note: The Do I/O function skips modules that do not support DO_IO scanning:
IC693BEM331 90-30 Genius Bus Controller
IC694BEM331 RX3i Genius Bus Controller
IC693BEM341 90-30 2.5 GHz FIP Bus Controller
IC693DNM200 90-30 DeviceNet Master
IC695PBM300 RX3i PROFIBUS Master
IC695PBS301 RX3i PROFIBUS Slave
IC687BEM731 90-70 Genius Bus Controller
IC697BEM731 90-70 Standard Width Genius Bus Controller
Operands
Parameter Description Allowed Operands Optional
ST The starting address of the set of input or output points or words to be I, Q, AI, AQ, I/O Variable No
serviced. ST and END must be in the same memory area.
If ST and END are placed in BOOL memory, ST must be byte-
aligned. That is, its reference address must start at (8n+1), for
example, %I01, %Q09, %Q49.
If ST and END are mapped to analog memory, they can have the
same reference address.
If ST is mapped to an I/O variable, the same I/O variable must
also be assigned to the END parameter, and the entire module is
scanned.
END The address of the end bit of input or output points or words to be I, Q, AI, AQ, I/O Variable No
serviced. Must be in the same memory area as ST.
If ST and END are placed in BOOL memory, END's reference
address must be 8n, for example, %I08, %Q16.
If ST and END are mapped to analog memory, they can have the
same reference address.
If ST is mapped to an I/O variable, the same I/O variable must
also be assigned to the END parameter, and the entire module is
scanned.
ALT For an input scan, ALT specifies the address to store scanned input I, Q, M, T, G, R, AI, AQ Yes
point/word values. For an output scan, ALT specifies the address to
get output point/word values from, to send to the I/O modules.
Note: ALT can be a WORD only if ST and END are in analog
memory.
Edge Detectors
(page 7-35), are used inside a function block, there is a problem when the same function
17H
block is called more than once per scan. The first call executes the transition correctly but
subsequent calls do not because they see the state as adjusted from the first call. The rising
and falling edge trigger instructions solve this problem. These instructions have their own
instance data that can be a member or an input of the function block so that the transition
state follows that of the function block instance and not the function block.
If an edge detector function block is used within a UDFB, its instance data must be a member
variable of the UDFB.
Operands
Parameter Description Allowed Operands Optional
???? Instance data for function block. This is a structure variable, described F_TRIG, R_TRIG No
below.
CLK Input to be monitored for a change in state. All Yes
Q Edge detection output. Must be flow in LD. In Yes
other languages all
types allowed except S,
SA, SB, SC and
constants.
F_TRIG Operation
When the CLK input goes from true to false, the
output Q is true for one function block instance CLK
execution. The output Q then remains false until a
new falling edge is detected.
When the Controller transitions from stop to run mode Q
and the CLK input is false and the instance memory
is non-retentive, the output Q is true after the function
block’s first execution. After the next execution, the
output is false. Function Block Execution
The F_TRIG output Q will be true for one function
block instance execution at a stop-to-run transition after the first download, whether or not
instance memory is retentive.
R_TRIG Operation
When the CLK input transitions from false to true,
the output Q is true for one function block execution.
CLK
The output Q then remains false until a new rising
edge is detected.
When the Controller transitions from stop to run Q
mode and the CLK input is true and the instance
memory is non-retentive, the output Q is set to true
after the function block’s first execution. After the
Function Block Execution
second execution, the output is false.
If the CLK input is initialized on, the R_TRIG output Q will be true for one function block
instance execution at a stop-to-run transition after the first download, whether or not instance
memory is retentive.
Example
In the following example, when Input1 transitions from false to true, the coil, Detected, is set
ON for one function block execution. The output Q remains false until a new rising edge is
detected.
Drum
The Drum function operates like a mechanical drum sequencer. The Drum
Sequencer steps through a set of potential output bit patterns and selects
one based on inputs to the function. The selected value is copied to a
group of 16 discrete output references.
When the DRUM function receives power flow, it copies the contents of a
selected reference to the Q reference.
Power flow to the R (Reset) input or to the S (Step) input selects the
reference to be copied.
The function passes power to the right only if it receives power from the
left and no error condition is detected.
The DTO (Dwell Timeout Output) bit is cleared the first time the drum is in
a new step. This is true:
Whether the drum is introduced to a new step by changing the Active Step or by using
the S (Step) Input.
Regardless of the DT (Dwell Time array) value associated with the step (even if it is 0).
During the first sweep the Active Step is initialized.
Operands
Parameter Description Allowed Optional
Operands
???? (Control Block) The beginning address of a five-word array that contains the R, P, L, W, No
Drum Sequencer's control block. The contents of the control block are Symbolic
described below.
?? (Length) Value between 1 and 128 that specifies the number of steps. Constant No
S Step input. Used to go one step forward in the sequence. When the function flow No
receives power flow and S makes an OFF to ON transition, the Drum
Sequencer moves one step. When R (Reset) is active, the function ignores S.
R Reset input. Used to select a specific step in the sequence. When the DRUM flow No
function and Reset both receive power flow, DRUM copies the Preset Step
value in the Control Block to the Active Step reference in the Control Block.
Then the function copies the value in the Preset Step reference to the Q
reference bits. When R is active, the function ignores S.
PTN (Pattern) The starting address of an array of words. The number of words is All except No
specified by the Length (??) operand. Each word represents one step of the constant and S,
Drum Sequencer. The value of each word represents the desired combination SA—SC
of outputs for a particular value of the Active Step word in the control block. numerical data.
The first element corresponds to an Active Step value of 1; the last element
corresponds to an Active Step value of Length. The programming software
does not create an array for you. You must ensure you have enough memory
for PTN.
Active Step The active step value specifies the element in the Pattern array to copy to the
Out output memory location. This is used as the array index into the Pattern, Dwell Time,
Fault Timeout, and First Follower arrays.
Preset Step A word input that is copied to the Active Step output when the Reset is On.
Step Control A word that is used to detect Off to On transitions on both the Step input and
the Enable input. The Step Control word is reserved for use by the function, and must not be
written to.
Timer Control Two words of data that hold values needed to run the timer. These values
are reserved for use by the function and must not be written to.
For Loop
A FOR loop repeats rung logic a specified number of times while varying the value of the
INDEX variable in the loop. A FOR loop begins with a FOR_LOOP instruction and ends with
an END_FOR instruction. The logic to be repeated must be placed between the FOR and
END_FOR instructions. The optional EXIT_FOR instruction enables you to exit the loop if a
condition is met before the FOR loop ends normally.
When FOR_LOOP receives power flow, it saves the START, END, and INC (Increment)
operands and uses them to evaluate the number of times the rungs between the FOR_LOOP
and its END_FOR instructions are executed. Changing the START and END operands while
the FOR loop is executing does not affect its operation.
When an END_FOR receives power flow, the FOR loop is terminated and power flow jumps
directly to the statement following the END_FOR instruction.
There can be nothing after the FOR_LOOP instruction in the rung and the FOR_LOOP
instruction must be the last instruction to be executed in the rung. An EXIT_FOR statement
can be placed only between a FOR instruction and an END_FOR instruction. The END_FOR
statement must be the only instruction in its rung.
A FOR_LOOP can assign decreasing values to its index variable by setting the increment to
a negative number. For example, if the START value is 21, the END value is 1, and the
increment value is –5, the statements of the FOR loop are executed five times, and the index
variable is decremented by 5 in each pass. The values of the index variable will be 21, 16,
11, 6, and 1.
When the START and END values are set equal, the statements of the FOR loop are
executed only once.
When START cannot be incremented or decremented to reach the END, the statements
within the FOR loop are not executed. For example, if the value of START is 10, the value of
END is 5, and the INCREMENT is 1, power flow jumps directly from the FOR statement to
the statement after the END_FOR statement.
Note: If the FOR_LOOP instruction has power flow when it is first tested, the rungs
between the FOR and its corresponding END_FOR statement are executed the
number of times initially specified by START, END, and INCREMENT. This repeated
execution occurs on a single sweep of the PLC and may cause the watchdog timer to
expire if the loop is long.
Nesting of FOR loops is allowed, but it is restricted to five FOR/END_FOR pairs. Each FOR
instruction must have a matching END_FOR statement following it.
Nesting with JUMPs and MCRs is allowed, provided that they are properly nested. MCRs and
ENDMCRs must be completely within or completely outside the scope of a
FOR_LOOP/END_FOR pair. JUMPs and LABEL instructions must also be completely within
or completely outside the scope of a FOR_LOOP/END_FOR pair. Jumping into or out of the
scope of a FOR/END_FOR is not allowed.
Operands
Only the FOR_LOOP function requires operands.
Paramete Description Allowed Operands Optional
r
INDEX The index variable. When the loop has All except constants, flow, and variables No
completed, this value is undefined. in %S - %SC
Note: Changing the value of the index
variable within the scope of the FOR loop is
not recommended.
START The index start value. All except variables in %S - %SC No
END The index end value. All except variables in %S - %SC No
INC The increment value. (Default: 1.) Constants Yes
Example 2
The value for %T00001 (START) is -100 and the value for %T00017 (END) is 100. The
INDEX (%R00001) increments by tens, starting at -100 until it reaches it end value of +100.
The EQ function of the loop tries to execute 21 times, with the INDEX (%R00001) being
equal to –100, –90, –80, –70, –60, –50, –40, –30, –20, –10, 0, 10, 20, 30, 40, 50, 60, 70, 80,
90, and 100. However, when the INDEX (%R00001) is 0, the EXIT statement is enabled and
power flow jumps directly to the statement after the END_FOR statement.
Operands
Parameter Description Allowed Types Allowed Operands Optional
MASK Selects unmask or mask operation. BOOL variable data flow, I, Q, M, T, No
Unmask=0; Mask=1 or Bit reference in G, S, SA, SB, SC, R,
non-discrete memory P, L, AI, AQ, W,
symbolic, I/O variable
IN1 The interrupt trigger to be masked or BOOL or WORD I, Q, M, T, G, R, P, L, No
unmasked. variable AI, AQ, W, I/O
The I/O board must be a supported input variable
module.
The reference address specified must
correspond to a valid interrupt trigger
reference.
The interrupt for the specified channel
must be enabled in the configuration.
Example
In the following example, the variable Mod_Int is mapped to an I/O point on a hardware
module and is configured as an I/O interrupt to a program block. When the BOOL variable
MaskOn_Off transitions from OFF to ON and A1 is set to ON, the interrupt Mod_Int is
masked (not executed) for one scan.
Operands
Parameter Description Allowed Operands Optional
POS Memory location at which to write current switch All except S, SA, SB, SC No
position value.
1 - Run I/O Enabled
2 - Run I/O Disabled
3 - Stop Mode
MODE Memory location to which switch configuration value is All except S, SA, SB, SC No
written.
0 - Switch configuration not supported
1 - Switch controls run/stop mode
2 - Switch not used, or is used by the user application
3 - Switch controls both memory protection and
run/stop mode
4 - Switch controls memory protection
Scan Set IO
The Scan_Set_IO function scans the I/O of a specified scan
set number. (Modules can be assigned to scan sets in
hardware configuration.) You can specify whether the Inputs
and/or Outputs of the associated scan set will be scanned.
Execution of this function block does not affect the normal
scanning process of the corresponding scan set. If the
corresponding scan set is configured for non-default Number
of Sweeps or Output Delay settings, they remain in effect
regardless of how many executions of the Scan Set IO
function occur in any given sweep.
The Scan Set IO function skips modules that do not support DO_IO scanning (page 7-40.)
18H
Example
By using the Scan Set IO function block in an interrupt block, you can create a custom I/O
scan. For example, two Scan Set IO function blocks can be used in an interrupt block to scan
the inputs of a scan set at the beginning of the block and the outputs of the same scan set at
the end of the block.
In the following example, when ScanInputs is ON, input data for all I/O modules assigned to
Scan Set 2 is updated. When ScanOutputs is ON, output data for all I/O modules assigned to
Scan Set 2 is updated.
Suspend I/O
The Suspend I/O (SUS_IO) function stops normal I/O scans from occurring for one CPU
sweep. During the next output scan, all outputs are held at their current states. During the
next input scan, the input references are not updated with data from inputs. However, during
the input scan portion of the sweep, the CPU verifies that Genius bus controllers have
completed their previous output updates.
Note: The PACSystems SUS_IO function suspends analog and discrete I/O, whether
integrated I/O or Genius I/O. It does not suspend Ethernet Global Data. For details,
refer to TCP/IP Ethernet Communications for PACSystems, GFK-2224.
When SUS_IO receives power flow, all I/O servicing stops except that provided by DO_IO
functions.
Warning
If SUS_IO were placed at the left rail of the ladder, without enabling logic to
regulate its execution, no regular I/O scan would ever be performed.
SUS_IO passes power flow to the right whenever it receives power.
The function executes successfully and passes power to the right unless:
The I/O module associated with the interrupt trigger specified in IN1 is not supported.
The reference address specified does not correspond to a valid interrupt trigger
reference.
The specified channel does not have its interrupt enabled in the configuration.
Operands
Parameter Description Allowed Types Allowed Operands Optional
SUSP Selects a suspend or resume BOOL variable or bit data flow, I, Q, M, T, G, S, SA, SB, No
operation. reference in a non-BOOL SC, R, P, L, discrete symbolic, I/O
1 (ON)=suspend variable variable
0 (OFF)=resume
IN1 The interrupt trigger to be BOOL or WORD variable I, Q, M, T, G, R, P, L, AI, AQ, W, I/O No
suspended or resumed. variable
Example
In the following example, the variable Mod_Int is mapped to an I/O point on a hardware
module and is configured as an I/O interrupt to a program block. When the BOOL variable
SuspOn_Off is set to ON and A1 is set to ON, interrupts from Mod_Int are suspended until
SuspOn_Off is reset.
Conversion Functions
The Conversion functions change a data item from one number format (data type) to another.
Many programming instructions, such as math functions, must be used with data of one type.
As a result, data conversion is often required before using those instructions.
Function Description
Convert Angles
DEG_TO_RAD Converts degrees to radians
RAD_TO_DEG Converts radians to degrees
Convert to BCD4 (4-digit Binary-Coded-Decimal)
UINT_TO_BCD4 Converts UINT (16-bit unsigned integer) to BCD4
INT_TO_BCD4 Converts INT (16-bit signed integer) to BCD4
Convert to BCD8 (8-digit Binary-Coded-Decimal)
DINT_TO_BCD8 Converts DINT (32-bit signed integer) to BCD8
Convert to INT (16-bit signed integer)
BCD4_TO_INT Converts BCD4 to INT
UINT_TO_INT Converts UINT to INT
DINT_TO_INT Converts DINT to INT
REAL_TO_INT Converts REAL to INT
Convert to UINT (16-bit unsigned integer)
BCD4_TO_UINT Converts BCD4 to UINT
INT_TO_UINT Converts INT to UINT
DINT_TO_UINT Converts DINT to UINT
REAL_TO_UINT Converts REAL to UINT
Convert to DINT (32-bit signed integer)
BCD8_TO_DINT Converts 8-digit Binary-Coded-Decimal (BCD8) to DINT
UINT_TO_DINT Converts UINT to DINT
INT_TO_DINT Converts INT to DINT
REAL_TO_DINT Converts REAL (32-bit signed real or floating-point values) to DINT
LREAL_TO_DINT Converts REAL (64-bit signed real or floating-point values) to DINT
Convert to REAL (32-bit signed real or floating-point values)
BCD4_TO_REAL Converts BCD4 to REAL
BCD8_TO_REAL Converts BCD8 to REAL
UINT_TO_REAL Converts UINT to REAL
INT_TO_REAL Converts INT to REAL
DINT_TO_REAL Converts DINT to REAL
LREAL_TO_REAL Converts LREAL to REAL
Convert to LREAL(64-bit signed real or floating-point values)
DINT_TO_LREAL Converts DINT to LREAL
REAL_TO_LREAL Converts REAL to LREAL
Truncate
TRUNC_DINT Rounds a REAL number down to a DINT (32-bit signed integer) number
TRUNC_INT Rounds a REAL number down to an INT (16-bit signed integer) number
Convert Angles
Mnemonics:
DEG_TO_RAD_REAL
DEG_TO_RAD_LREAL
RAD_TO_DEG_REAL
RAD_TO_DEG_LREAL
When the Degrees to Radians (DEG_TO_RAD) or the Radians to Degrees (RAD_TO_DEG)
function receives power flow, it performs the appropriate angle conversion on the REAL or
LREAL value in input IN and places the result in output Q.
DEG_TO_RAD and RAD_TO_DEG pass power flow to the right when they execute, unless
IN is NaN (Not a Number).
Operands
Parameter Description Allowed Operands Optional
IN The value to convert. All except S, SA, SB, and SC No
Q The converted value. All except S, SA, SB, and SC No
Example
A value of +1500 radians is converted to degrees. The result
is placed in %R00001 and %R00002.
Operands
Parameter Description Allowed Operands Optional
IN The UINT or INT value to convert to All except S, SA, SB, and SC No
BCD4.
Q The BCD4 equivalent value of the original All except S, SA, SB, and SC No
UINT or INT value in IN.
Note: The output data can be used directly as input for another program function.
The function passes power flow when power is received, unless the conversion would result
in a value that is outside the range 0 to 99,999,999.
Operands
Parameter Description Allowed Operands Optional
IN The DINT value to convert to BCD8 All except S, SA, SB, and SC No
Q The BCD8 equivalent value of the original DINT value in IN All except S, SA, SB, and SC No
Example
Whenever input %I00002 is set and no errors exist, the
double-precision signed integer (DINT) at input location
%AI0003 is converted to eight BCD digits and the result
is stored in memory locations %L00001 through
%L00002.
REAL
When REAL_TO_INT receives power flow, it rounds the input REAL data up or down to the
nearest single-precision signed integer (INT) value, which it outputs to Q. REAL_TO_INT
does not change the original REAL data.
Note: The output data can be used directly as input for another program function.
The function passes power flow when power is received, unless the data is out of range or
NaN (Not a Number).
Warning
Converting from REAL to INT may result in overflow. For example, REAL
7.4E15, which equals 7.4 * 1015, converts to INT OVERFLOW.
Tip: To truncate a REAL value and express the result as an INT, i.e., to remove the
fractional part of the REAL number and express the remaining integer value as an
INT, use TRUNC_INT.
Operands
Parameter Description Allowed Operands Optional
IN The value to convert to INT. All except S, SA, SB, and SC No
Q The INT equivalent value of the original value in IN. All except S, SA, SB, and SC No
Examples
BCD4 to INT
Whenever input %I0002 is set, the BCD-4 value in PARTS is converted to a signed integer
(INT) and passed to the ADD_INT function, where it is added to the INT value represented by
the reference RUNNING. The sum is output by ADD_INT to the reference TOTAL.
UINT to INT
Whenever input %M00344 is set, the UINT value in %R00234 is converted to a signed
integer (INT) and passed to the ADD function, where it is added to the INT value in
%R06488. The sum is output by the ADD function to the reference CARGO.
DINT to INT
Whenever input %M00031 is set, the DINT value in %R00055 is converted to a signed
integer (INT) and passed to the ADD function, where it is added to the INT at %R02345. The
sum is output by the ADD function to %R08004.
When this function receives power flow, it converts the input data into the equivalent single-
precision unsigned integer (UINT) value, which it outputs to Q.
The conversion to UINT does not change the original data. The output data can be used
directly as input for another program function, as in the example.
The function passes power flow when power is received, unless the resulting data is outside
the range 0 to +65,535.
Warning
Converting from REAL to UINT may result in overflow. For example, REAL
7.2E17, which equals 7.2 * 1017, converts to UINT OVERFLOW.
Operands
Parameter Description Allowed Operands Optional
IN The value to convert to UINT. All except S, SA, SB, and SC No
Q The UINT equivalent value of the original input value in IN. All except S, SA, SB, and SC No
Examples
BCD4 to UINT
Tip: One use of BCD4_TO_UINT is to convert BCD data from the I/O structure into
integer data and store it in memory. This can provide an interface to BCD
thumbwheels or external BCD electronics, such as high-speed counters and position
encoders.
In the following example, whenever input %I0002 is set, the BCD4 value in PARTS is
converted to an unsigned single-precision integer (UINT) and passed to the ADD_UINT
function, where it is added to the UINT value represented by the reference RUNNING. The
sum is output by ADD_UINT to the reference TOTAL.
INT to UINT
Whenever input %I0002 is set, the INT value in %L00050 is converted to an unsigned single-
precision integer (UINT) and passed to the ADD_UINT function, where it is added to the
UINT value in %R08833. The sum is output by ADD_UINT to the reference TOTAL.
DINT to UINT
Whenever input %I00002 is set and no errors exist, the double precision signed integer
(DINT) at input location %R00007 is converted to an unsigned integer (UINT) and passed to
the SUB function, where the constant value 145 is subtracted from it. The result of the
subtraction is stored in the output reference location %Q00033.
REAL to UINT
Whenever input %I00045 is set, the REAL value in %L00045 is converted to an unsigned
single-precision integer (UINT) and passed to the ADD_UINT function, where it is added to
the UINT value in %R00045. The sum is output by ADD_UINT to the reference TOTAL.
Warning
Converting from LREAL or REAL to DINT may result in overflow. For example,
REAL 5.7E20, which equals 5.7 * 1020, converts to DINT OVERFLOW.
Tip: To truncate a REAL value and express the result as a DINT, i.e., to remove the
fractional part of the REAL number and express the remaining integer value as a
DINT, use TRUNC_DINT.
Operands
Parameter Description Allowed Operands Optional
IN The value to convert to DINT. All except S, SA, SB, and SC No
Q The DINT equivalent value of the original input value in IN. All except S, SA, SB, and SC No
Examples
UINT to DINT
Whenever input %M01478 is set, the unsigned single-precision integer (UINT) value at input
location %R00654 is converted to a double-precision signed integer (DINT) and the result is
placed in location %L00049. The output %M00065 is set whenever the function executes
successfully.
BCD8 to DINT
Whenever input %I00025 is set, the BCD-8 value in %L00046 is converted to a signed
double-precision integer (DINT) and passed to the ADD_DINT function, where it is added to
the DINT value in %R00797. The sum is output by ADD_DINT to the reference TOTAL.
INT to DINT
Whenever input %I00002 is set, the signed single-
precision integer (INT) value at input location %I00017
is converted to a double-precision signed integer
(DINT) and the result is placed in location %L00001.
The output %Q01001 is set whenever the function
executes successfully.
REAL to DINT
Whenever input %I0002 is set, the REAL value
at input location %R0017 is converted to a
double precision signed integer (DINT) and the
result is placed in location %R0001. The output
%Q1001 is set whenever the function executes
successfully.
When this function receives power flow, it converts the input data into the equivalent 32-bit
floating-point (REAL) value, which it outputs to Q. The conversion to REAL does not change
the original input data.
The output data can be used directly as input for another program function.
The function passes power flow when power is received, unless the conversion would result
in a value that is out of range.
Warning
Converting from BCD8 to REAL may result in the loss of significant digits.
This is because a BCD8 value is stored in a DWORD, which uses 32 bits to store a value,
whereas a REAL (32-bit IEEE floating point number) uses 8 bits to store the exponent and
the sign and only 24 bits to store the mantissa.
Warning
Converting from DINT to REAL may result in the loss of significant digits for
numbers with more than 7 significant base-10 digits.
This is because a DINT value uses 32 bits to store a value, which is the equivalent of up to
10 significant base-10 digits, whereas a REAL (32-bit IEEE floating point number) uses 8 bits
to store the exponent and the sign and only 24 bits to store the mantissa, which is the
equivalent of 7 or 8 significant base-10 digits. When the REAL result is displayed as a base-
10 number, it may have up to 10 digits, but these are converted from the rounded 24-bit
mantissa, so that the last 2 or 3 digits may be inaccurate.
Operands
Parameter Description Allowed Operands Optional
IN The value to convert to REAL. All except S, SA, SB, and SC
Q The REAL equivalent value of the original input value in IN. All except S, SA, SB, and SC
Examples
UINT to REAL
The unsigned integer value in %L00001 is 825. The value placed in %L00016 is 825.000.
INT to REAL
The integer value of input IN is -678. The value placed in %R00010 is -678.000.
LREAL to REAL
The double-precision floating point value of the square root of 2 is rounded to the nearest
single-precision floating point value and placed in R00300.
Operands
Parameter Description Allowed Operands Optional
IN The REAL value to convert to LREAL. All except S, SA, SB, and No
SC
Q The LREAL equivalent value of the original REAL value. All except S, SA, SB, and No
SC
Example
The REAL value of the square root of 2 is converted to the LREAL data type and placed in
R00200. Because the actual precision of the data in Result_Real is seven decimal places,
the additional decimal places in the data in R00200 are not valid.
Truncate
When power is received, the Truncate functions TRUNC_DINT and TRUNC_INT round a
floating-point (REAL) value down respectively to the nearest signed double-precision signed
integer (DINT) or signed single-precision integer (INT) value. TRUNC_DINT and TRUNC_INT
output the converted value to Q. The original data is not changed.
Note: The output data can be used directly as input for another program function.
TRUNC_DINT and TRUNC_INT pass power flow when power is received, unless the
specified conversion would result in a value that is out of range or unless IN is NaN (Not a
Number).
Operands
Parameter Description Allowed Operands Optional
IN The REAL value whose copy is to be converted and truncated. All except S, SA, SB, and SC No
The original is left intact.
Q The truncated value of the original REAL value in IN. All except S, SA, SB, and SC No
Example
The displayed constant is truncated and the integer result 562 is placed in %T0001.
Counters
Function Mnemonic Description
Down Counter DNCTR Counts down from a preset value. The output is ON whenever the Current
Value is ≤ 0.
Up Counter UPCTR Counts up to a designated value. The output is ON whenever the Current
Value is ≥ the Preset Value.
Reset input
Enable input, previous execution
Q (counter/timer status output)
EN (enable input
Down Counter
The Down Counter (DNCTR) function counts down from a preset value. The
minimum Preset Value (PV) is zero; the maximum PV is +32,767 counts.
When the Current Value (CV) reaches the minimum value, -32,768, it stays
there until reset. When DNCTR is reset, CV is set to PV. When the power flow
input transitions from OFF to ON, CV is decremented by one. The output is
ON whenever CV ≤ 0.
The output state of DNCTR is retentive on power failure; no automatic
initialization occurs at power-up.
Warning
Do not use the down counter’s Address with other instructions. Overlapping
references cause erratic counter operation.
Note: For DNCTR to function properly, you must provide an initial reset to set the CV to the
value in PV. If DNCTR is not initially reset, CV will decrement from 0 and the output
of DNCTR will be set to ON immediately.
Operands
Parameter Description Allowed Operands Optional
Address The beginning address of a three-word WORD array: R, W, P, L, symbolic No
(????) Word 1: Current Value (CV)
Word 2: Preset Value (PV)%
Word 3: Control word
R When R receives power flow, it resets the counter's CV to PV. Power flow No
PV Preset Value to copy into word 2 of the counter's address when the All except S, SA, SB, SC No
counter is enabled or reset. 0 ≤PV ≤ 32,767. If PV is out of range,
word 2 cannot be reset.
CV The current value of the counter All except S, SA, SB, SC No
and constant
Up Counter
The Up Counter (UPCTR) function counts up to the Preset Value (PV). The
range is 0 to +32,767 counts. When the Current Value (CV) of the counter
reaches 32,767, it remains there until reset. When the UPCTR reset is ON,
CV resets to 0. Each time the power flow input transitions from OFF to ON,
CV increments by 1. CV can be incremented past the Preset Value (PV).
The output is ON whenever CV ≥ PV. The output (Q) stays ON until the R
input receives power flow to reset CV to zero.
The state of UPCTR is retentive on power failure; no automatic initialization occurs at
powerup.
Operands
Warning
Do not use the up counter’s Address with other instructions. Overlapping
references cause erratic counter operation.
Parameter Description Allowed Operands Optional
Address The beginning address of a three-word WORD array: R, W, P, L, symbolic No
(???? ) Word 1: Current Value (CV)
Word 2: Preset Value (PV)
Word 3: Control word
R When R is ON, it resets the counter's CV to 0. Power flow No
PV Preset Value to copy into word 2 of the counter's address when the counter is All except S, SA, SB, No
enabled or reset. 0 ≤ PV ≤ 32,767. If PV is out of range, it does not affect and SC
word 2.
CV The current value of the counter All except S, SA, SB, No
SC and constant
Example – Up Counter
Every time input %I0012 transitions from OFF to ON, the Up Counter counts up by 1; internal
coil %M0001 is energized whenever 100 parts have been counted. Whenever %M0001 is
ON, the accumulated count is reset to zero.
Array Size
Counts the number of elements in the array assigned to input IN and
writes the number to output Q.
In an array of structure variables, the number of structure variables
is written to Q; the elements in the structure variables are not
counted.
Tip: If the array assigned to input IN of ARRAY_SIZE is passed to a parameterized C
block for processing, also pass the value of output Q to the block. In the C block
logic, use the value of output Q to ensure all array elements are processed without
exceeding the end of the array. For a two-dimensional array, this method works only
if all elements are treated identically; for example, all are initialized to the same value.
Operands
Parameter Description Allowed Operands Optional
IN Array of any data type whose elements are counted. Data flow, I, Q, M, T, S, SA, No
If a non-array variable is assigned to IN, the value of SB, SC, G, discrete symbolic,
Q is 1. I/O variable
Q Number of elements in the array assigned to input DINT or DWORD variable. No
IN. Data flow, I, Q, M, T, G, R, P,
L, AI, AQ, W, symbolic,
I/O variable
Example
The two-dimensional array TestArray has its Array Dimension 1 property set to 4 and its
Array Dimension 2 property set to 3. ARRAY_SIZE calculates 4 * 3 and writes the value 12 to
the variable Elements.
Operands
Parameter Description Allowed Operands Optional
IN Array of any data type. Data flow, I, Q, M, T, No
S, SA, SB, SC, G,
discrete symbolic, I/O
variable
Q The value of the Array Dimension 1 property of the array assigned DINT or DWORD No
to input IN. The value is set to 0 if a non-array is assigned to IN. variable.
Note: Because the index of the first element of an array is zero, the Data flow, I, Q, M, T,
index of the last element is one less than the value assigned to Q. G, R, P, L, AI, AQ,
W, symbolic,
I/O variable
Operands
Parameter Description Allowed Operands Optional
IN Array of any data type. Data flow, I, Q, M, T, No
S, SA, SB, SC, G,
discrete symbolic, I/O
variable
Q The value of the Array Dimension 2 property of the array assigned DINT or DWORD No
to input IN. The value is set to 0 if a non-array is assigned to IN. variable.
Note: Because the index of the first element of an array is zero, the Data flow, I, Q, M, T,
index of the last element is one less than the value assigned to Q. G, R, P, L, AI, AQ,
W, symbolic,
I/O variable
In the following rungs, the FOR_LOOP executes when D1ON is set to On. The variable index
D1_Index increments by 1 from 0 through D1_size, the value calculated by
ARRAY_SIZE_DIM1 and SUB_DINT. In each loop, the value of D1_temp is assigned to the
element D1_Array[D1_Index] and D1_temp is increased by 1.
You can use a FOR_LOOP to iterate through an array’s second dimension in a method
similar to this example. You can also use nested FOR_LOOPs to ensure that operations on
elements using two variable indexes each do not exceed their array dimension. For additional
examples, refer to the online help.
Block Clear
When the Block Clear (BLKCLR_WORD) function receives power flow, it fills the
specified block of data with zeros, beginning at the reference specified by IN.
When the data to be cleared is from BOOL (discrete) memory (%I, %Q, %M, %G,
or %T), the transition information associated with the references is updated.
BLKCLR_WORD passes power to the right whenever it receives power.
Note: The input parameter IN is not included in coil checking.
Operands
Parameter Description Allowed Operands Optional
Length (??) The number of words to clear, starting at the IN Constant No
location. 1 ≤ Length ≤ 256 words.
IN The first WORD of the memory block to clear to 0. All except %S and data flow. No
Example
At power-up, 32 words of %Q memory (512 points) beginning at %Q0001 are filled with
zeros. The transition information associated with these references will also be updated.
Block Move
When the Block Move (BLKMOV) function receives power Mnemonics:
flow, it copies a block of seven constants into consecutive BLKMOV_DINT
locations beginning at the destination specified in output BLKMOV_DWORD
Q. BLKMOV passes power to the right whenever it BLKMOV_INT
receives power. BLKMOV_REAL
BLKMOV_UINT
BLKMOV_WORD
Operands
Note: For each mnemonic, use the corresponding data type for the Q operand. For example,
BLKMOV_DINT requires Q to be a DINT variable.
Parameter Description Allowed Operands Optional
IN1 to IN7 The seven constant values to move. Constants. Constant type must match function No
type.
Q The first memory location of the destination All except %S. No
for the moved values. IN1 is moved to Q. %SA, SB, SC are also prohibited on BLKMOV
REAL, BLK_MOV_INT, and BLK_MOV_UINT.
Example
When the enabling input represented by the name
#FST_SCN is ON, BLKMOV_INT copies the seven input
constants into memory locations %R0010 through
%R0016.
BUS_ Functions
Four program functions allow the PACSystems CPU to communicate with modules in the
system.
■ Bus Read (BUS_RD)
■ Bus Write (BUS_WRT)
■ Bus Read/Modify/Write (BUS_RMW)
■ Bus Test and Set (BUS_TS)
These functions use the same parameters to specify which module on the bus will exchange
data with the CPU.
Note: Additional information related to addressing modules is required to use the BUS_
functions. For open VME modules in an RX7i system, refer to the PACSystems RX7i
User’s Guide to Integration of VME Modules, GFK-2235. For other modules, refer to
the product documentation provided by the manufacturer.
BUS Read
The BUS_RD function reads data from the bus. This Mnemonics:
function should be executed before the data is needed in BUS_RD_DINT
the program. If the amount of data to be read is greater BUS_RD_DWORD
than 32767 BYTES, WORDS, or DWORDS, use multiple BUS_RD_WORD
instructions to read the data.
When BUS_RD receives power flow, it accesses the
module at the specified rack (R), slot (S), subslot (SS),
address region (RGN) and offset (OFF). BUS_RD copies
the specified number (Length) of data units (DWORDS,
WORDs or BYTEs) from the module to the CPU,
beginning at output reference (Q).
The function passes power to the right when its operation
is successful. The status of the operation is reported in the
status location (ST).
Note: For each BUS_RD function type, use the
corresponding data type for the Q operand. For
example, BUS_RD_BYTE requires Q to be a
BYTE variable.
Note: An interrupt block can preempt the execution of a
BUS_RD function. On the bus, only 256 bytes are
read coherently (i.e., read without being
preempted by an interrupt).
BUS Write
When the BUS_WRT function receives power flow Mnemonics:
through its enable input, it writes the data located at BUS_WRT_DINT
reference (IN) to the module at the specified rack (R), slot BUS_WRT_DWORD
(S), subslot (SS) and optional address region (RGN) and BUS_WRT_WORD
offset (OFF). BUSWRT writes the specified length (LEN)
of data units (DWORDS, WORDs or BYTEs).
The BUS_WRT function passes power to the right when
its operation is successful. The status of the operation is
reported in the status location (ST).
Note: For each BUS_WRT function type, use the
corresponding data type for the IN operand. For
example, BUS_WRT_BYTE requires IN to be a
BYTE variable.
Note: An interrupt block can preempt the execution of a
BUS_WRT function. On the bus, only 256 bytes
are written coherently (i.e., written without being
preempted by an interrupt).
Communication Request
The Communication Request (COMM_REQ) function communicates with an
intelligent module, such as a Genius Communications Module or High Speed
Counter.
oNotes:
■ The information presented in this section shows only the basic format of
the COMM_REQ function. Many types of COMM_REQs have been
defined. You will need additional information to program the COMM_REQ
for each type of device. Programming requirements for each module that
uses the COMM_REQ function are described in the specialty module's
user documentation.
■ If you are using serial communications, refer to chapter 13, “Serial I/O,
SNP and RTU Protocols.”
■ A COMM_REQ instruction inside an interrupt block being executed may
cause the block to be preempted when a new, incoming interrupt has the
same priority.
When COMM_REQ receives power flow, it sends the command block of data specified by the
IN operand to the communications TASK in the intelligent or specialty module, at the rack/slot
location specified by the SYSID operand. The command block contents are sent to the
receiving device and the program execution resumes immediately. (Because PACSystems
does not support WAIT mode COMM_REQs, the timeout value is ignored.)
The COMM_REQ passes power flow unless the following fault conditions exist. The Function
Faulted (FT) output may be set ON if:
■ Control block is invalid
■ Destination is invalid (target module is not present or is faulted)
■ Target module cannot receive mail because its queue is full
The Function Faulted output may have these states:
Enable Error? Function Faulted Output
active no OFF
active yes ON
not active no execution OFF
Command Block
The command block provides information to the intelligent module on the command to be
performed. The command block starts at the reference specified by the operand IN. This
address may be in any word-oriented area of memory (%R, %P, %L, %W, %AI, %AQ, or
symbolic non-discrete variables). The length of the command block depends on the amount
of data sent to the device.
The Command Block contains the data to be communicated to the other device, plus
information related to the execution of the COMM_REQ. Information required for the
command block can be placed in the designated memory area using a programming function
such as MOVE, BLKMOV, or DATA_INIT_COMM.
Notes:
■ The value entered determines the mode. For example, if you enter the %I bit mode is 70,
then the offset will be viewed as that bit. On the other hand, if the %I value is 16, then the
offset will be viewed as that byte.
■ The high byte at address + 2 should contain zero.
Example 2
The MOVE function can be used to enter the command block contents for the COMM_REQ
described in example 1.
Input IN of the COMM_REQ specifies %R00016 as the beginning reference for the command
block. Successive references contain the following:
%R00016 Data Block Length
%R00017 Wait/No Wait Flag
%R00018 Status Pointer Memory Type
%R00019 Status Pointer Offset
%R00020 Idle Timeout Value (Because this parameter is ignored in NO WAIT
mode, no value is input).
%R00021 Maximum Communication Time Value (Because this parameter is
ignored in NO WAIT mode, no value is input).
%R00022 to end of data Data Block
MOVE functions supply the following command block data for the COMM_REQ.
■ The first MOVE function places the length of the data being communicated in
%R00016.
■ The second MOVE function places the constant 0 in %R00017. This specifies NO
WAIT mode.
■ The third MOVE function places the constant 8 in %R00018. This specifies the
register table as the location for the status pointer.
■ The fourth MOVE function places the constant 512 in reference %R00019. Therefore,
the status pointer is located at %R00513.
The programming logic displayed in example 2 can be simplified by replacing the six MOVE
functions with one DATA_INIT_COMM function.
Data Initialization
Note: The mnemonics DATA_INIT_ASCII (page 7-94) and 19H
Mnemonics:
DATA_INIT_COMM (page 7-95) operate differently
20H
DATA_INIT_DWORD
from the other six functions. DATA_INIT_DWORD
DATA_INIT_INT
The Data Initialization (DATA_INIT) function copies a block of
constant data to a reference range. DATA_INIT_UINT
DATA_INIT_REAL
When the DATA_INIT instruction is first programmed, the DATA_INIT_LREAL
constants are initialized to zeroes. To specify the constant DATA_INIT_WORD
data to copy, double-click the DATA_INIT instruction in the LD
editor.
When DATA_INIT receives power flow, it copies the constant data to output Q. DATA_INIT's
constant data length (LEN) specifies how much constant data of the function type is copied to
consecutive reference addresses starting at output Q. DATA_INIT passes power to the right
whenever it receives power.
Notes:
■ The output parameter is not included in coil checking.
■ If you replace one DATA_INIT instruction (except DATA_INIT_ASCII or
DATA_INIT_COMM) with another (except DATA_INIT_ASCII or DATA_INIT_COMM),
Logic Developer - PLC attempts to keep the same data. For example, configuring a
DATA_INIT_INT with eight rows and then replacing the instruction with a
DATA_INIT_DINT would keep the data for the eight rows. Some precision may be lost
when replacing a DATA_INIT_ instruction, and a warning message will be displayed
when this case is detected.
Operands
Note: For each mnemonic, use the corresponding data type for the Q operand. For example,
DATA_INIT_DINT requires Q to be a DINT variable.
Parameter Description Allowed Operands Optional
Length The quantity (default 1) of constant data copied Constants No
to consecutive reference addresses starting at
output Q.
Q The beginning address of the area to which the All, except %S. SA, SB, and SC are not No
data is copied. allowed for REAL, LREAL, INT, and UINT
versions.
Example
On the first scan (as restricted by the #FST_SCN
system variable), 100 words of initial data are copied to
%R00005 through %R00104.
Operands
Parameter Description Allowed Operands Optional
Length The number (default 1) of bytes of constant text copied to Constants No
consecutive reference addresses starting at output Q. LEN
must be an even number.
Q The beginning address of the area where the data is copied. All except %S. No
Example
On the first scan (as restricted by the #FST_SCN system variable) the decimal equivalent of
100 bytes of ASCII text is copied to %R00050 through %R00149. %Q00002 receives power.
Operands
Parameter Description Allowed Operands Optional
Length The number of WORDs (default 7) of constant data copied to Constant No
consecutive reference addresses starting at output Q. Must
equal the size of the COMM_REQ function’s entire command
block, including the header (words 0-5).
Q The beginning address of the area where the data is copied. R, W, P, L, AI, AQ, No
and symbolic non-
discrete variables
Example
On the first scan (as restricted by the #FST_SCN
system variable), a command block consisting of 100
words of data, including the 6 header words, is copied
to %P00001 through %P00100. %Q00002 receives
power.
Operands
Parameter Description Allowed Operands Optional
Q The beginning address of the area where the data is copied. flow, R, W, P, L, AI, No
AQ, and symbolic
non-discrete
variables
Move
When the MOVE function receives power flow, it copies data as Mnemonics:
individual bits from one location in PLC memory to another. MOVE_BOOL
Because the data is copied in bit format, the new location does not MOVE_DINT
MOVE_DWORD
need to be the same data type as the original.
MOVE_INT
The MOVE function copies data from input operand IN to output MOVE_REAL
operand Q as bits. If data is moved from one location in BOOL MOVE_UINT
MOVE_WORD
(discrete) memory to another, for example, from %I memory to %T
memory, the transition information associated with the BOOL
memory elements is updated to indicate whether or not the MOVE
operation caused any BOOL memory elements to change state.
Data at the input operand does not change unless there is an
overlap in the source and destination.
Note: If an array of BOOL-type data specified in the Q operand does not include all the bits
in a byte, the transition bits associated with that byte (which are not in the array) are
cleared when the Move function receives power flow. The input IN can be either a
variable providing a reference for the data to be moved or a constant. If a constant is
specified, then the constant value is placed in the location specified by the output
reference. For example, if a constant value of 4 is specified for IN, then 4 is placed in
the memory location specified by Q. If the length is greater than 1 and a constant is
specified, then the constant is placed in the memory location specified by Q and the
locations following, up to the length specified. Do not allow overlapping of IN and Q
operands.
The result of the MOVE depends on the data type selected for the function, as shown below.
For example, if the constant value 9 is specified for IN and the length is 4, then 9 is placed in
the bit memory location specified by Q and the three locations following:
9 IN Q Output 9 IN Q Output
MSB LSB 9
9
1 2 3 4
9
(Length = 4 bits) 9
(Length = 4 words)
The MOVE function passes power to the right whenever it receives power.
MOVE Operands
Parameter Description Allowed Operands Optional
Length (??) The length of IN; the number of bits, words, Constant No
or double words to copy.
If IN is a constant and Q is BOOL, then 1 ≤
Length ≤ 16; otherwise, 1 ≤ Length ≤ 256.
1 ≤ Length ≤ 32,767
IN The location of the first data item to copy. All. %S, %SA, %SB, %SC allowed No
For MOVE_BOOL, any discrete reference only for WORD, DWORD, BOOL
may be used. It does not need to be byte- types.
aligned. However 16 bits beginning with the
reference address specified are displayed
online.
If IN is a constant, it is treated as an array of
bits. The value of the least significant bit is
copied into the memory location specified by
Q. If Length is greater than one, the bits are
copied in order from the least significant to
the most significant into successive memory
locations, up to the length specified.
Q The location of the first destination data item. No
For MOVE_BOOL, any discrete reference All except %S. Also no %SA, SB, SC
may be used. It does not need to be byte- except for WORD, DWORD, BOOL
aligned. However 16 bits beginning with the types.
reference address specified are displayed
online.
MOVE_BOOL Example
When %I00003 is set, the three bits
%M00001, %M00002, and %M00003
are moved to %M00100, %M00101, and
%M00102, respectively. Coil %Q00001
is turned on.
MOVE_WORD Example
V_M00001 and V_M00033 are both
WORD arrays of length 3, for a total of
48 bits in each array. Since PLCs do not
recognize arrays, Length has to be set at
3, for the total number of WORDs to be
moved. When enabling input V_Q0014 is
ON, MOVE_WORD moves 48 bits from
the memory location %M00001 to
memory location %M00033. Even though
the destination overlaps the source for 16
bits, the move is done correctly.
Move Data
The MOVE_DATA function copies the variable assigned to the Mnemonic:
input, IN to the variable assigned to the output, Q. If the constant 0 MOVE_DATA
is assigned to IN, the variable assigned to Q is initialized to its
default value.
MOVE_DATA Operands
Parameter Description Allowed Operands Optional
Length (??) The length of IN; the number of elements to Constant No
copy.
1 ≤ Length ≤ 32,767
IN The location of the data item to copy. Enumerated variable, structure No
If IN is 0, Q is set to its default value. variable, or array of these types; the
constant 0.
For details, refer to “Data Types and
Structures” in the PACMotion Multi-
Axis Motion Controller User’s Manual,
GFK-2448.
Q The location of the data copied from IN. Enumerated variable, structure No
Q must be the same data type as IN, unless variable, or array of these types.
IN is the constant 0.
MOVE_DATA_EX Operands
Parameter Description Allowed Operands Optional
Length The length of IN; the number of elements to copy. Constant No
(??) 1 ≤ Length ≤ 32,767
DC Data coherency. Data flow. Yes
If True memory being written to is locked, enabling coherent
copying of data from one Controller memory area to another.
If False (default), data is copied normally from one Controller
memory area to another without data coherency.
The input DC should be used only when using interrupt blocks
and is required only when the same memory is used in more
than one interrupt block, or in the main program and an
interrupt block.
If DC is True, an interrupt block cannot preempt the copy
operation.
If DC is False or not present, then interrupts can preempt the
copy.
Using DC can impact interrupt latency if the amount of data
copied is large.
IN The location of the data item to copy. Enumerated variable or No
If IN is 0 (LD only), length is assigned the constant 1 and the structure variable, or array of
variable or structure assigned to Q is set to its default value. these types; the constant 0.
Q Variable or array to which IN is copied. Enumerated variable or No
Q must be the same data type as IN, unless IN is the constant 0. structure variable, or array of
these types.
Example
Enum_Array and Enum_Array_Out
are arrays of enumerated variables,
with three elements each. To copy
all elements in Enum_Array, input
Length should be 3. When the
enabling input Q00014 is on,
MOVE_DATA_EX copies three
elements from memory location
Enum_Array to memory location
Enum_Array_Out.
Operation
Copying arrays and array elements
The constant value assigned to input LEN (Length) determines the number of UDT array
elements to be filled by copying data from reference memory to output Q.
Example: If constant value 6 is assigned to input LEN (Length), there should be a UDT array
of at least six elements assigned to output Q. During logic execution, n bytes of data are
copied from reference memory to the first six UDT array elements, where n is the length of
the UDT array element (in bytes) times six.
MOVE_FROM_FLAT Operands
Parameter Description Allowed Operands Optional
Length (??) Determines the number of UDT array elements to be filled by Constant No
copying data from reference memory to output Q.
1 ≤ Length ≤ 32,767
DC Data coherency. Data flow. Yes
If True, memory being written to is locked, enabling coherent
copying of data from one Controller memory area to another.
If False (default), data is copied normally from one Controller
memory area to another; that is without data coherency.
The input DC should be used only when using interrupt
blocks and is required only when the same memory is
used in more than one interrupt block, or in the main
program and an interrupt block.
If DC is True, an interrupt block cannot preempt the copy
operation.
If DC is False or not present, then interrupts can preempt
the copy.
Using DC can impact interrupt latency if the amount of
data copied is large.
IN Reference memory data being copied to UDT variable All except %S, symbolic, or No
elements in output Q as determined by the Length. I/O variable.
Q UDT variable or UDT array to which IN is copied. Discrete or non-discrete No
symbolic, discrete or non-
discrete I/O variable.
Example
A WORD variable mapped to %R1 is assigned to input IN and a value of 1 is assigned to
Length. A UDT variable or UDT array is assigned to output Q.
When MOVE_FROM_FLAT executes, n bytes of data are copied, starting at %R1 to a UDT
variable or UDT array, where n is the UDT array element length (in bytes). If a UDT array is
assigned to output Q, n bytes of data are copied to the first UDT array element.
Move to Flat
MOVE_TO_FLAT instruction copies data from symbolic or I/O
variable memory to reference memory. MOVE_TO_FLAT copies
across mismatched data types for an operation such as a Modbus
transfer.
MOVE_TO_FLAT provides optional data coherency by locking the
reference memory being written to during the copy operation. This
allows data to be copied coherently when accessed by multiple
logic threads (i.e. interrupt blocks). Note that copying large
amounts of data with coherency enabled can increase interrupt
latency.
Notes:
The Data Coherency (DC) input should be used only when using interrupt blocks and
is required only when the same memory is used in more than one interrupt block, or
in the main program and an interrupt block.
If DC is True, an interrupt block cannot preempt the copy operation.
If DC is False or not present, then interrupts can preempt the copy.
Using DC can impact interrupt latency if the amount of data copied is large.
MOVE_TO_FLAT Operands
Parameter Description Allowed Operands Optional
Length The length of IN; the number of elements to copy. Constant No
(??) 1 ≤ Length ≤ 32,767
DC Data coherency. Data flow. Yes
If True, the memory being written to is locked. This enables a
coherent copy of a UDT to reference memory.
If False (default), data is copied normally from one Controller
memory area to another; that is without data coherency.
DC should be used only when using interrupt blocks and
is required only when the same memory is used in more
than one interrupt block, or in the main program and an
interrupt block.
If DC is True, an interrupt block cannot preempt the copy
operation.
If DC is False or not present, interrupts can preempt the
copy.
Using DC can impact interrupt latency if the amount of
data copied is large.
IN UDT variable or UDT array. The data copied to the reference Discrete or non-discrete symbolic, No
memory mapped to the variable assigned to Q. discrete or non-discrete I/O variable.
If IN is 0, length is assigned the constant 1 and the variable or
structure assigned to Q is set to its default value.
Q Variable or array to which IN is copied. The amount of data All memory areas except %S, No
copied is determined by the constant value assigned to input discrete symbolic, discrete I/O
LEN (Length). variable.
▪ Indirect referencing is available
for all register references (%R,
%P, %L, %W, %AI, and %AQ).
▪ BYTE arrays must be packed;
that is, they must be in discrete
memory.
Example
A UDT variable or UDT array is assigned to input IN.
The constant value 8 is assigned to input LEN (Length).
A DWORD variable mapped to %R1 is assigned to output Q.
If the constant value 8 is assigned to LEN (length), there should be a UDT array of at least
eight elements assigned to IN. When MOVE_TO_FLAT executes, n bytes of data are copied
from the UDT variable or array to %R memory, starting at %R1 in the example, where n is the
length of a UDT array element (in bytes) times eight.
Shift Register
When the Shift Register (SHFR_BIT, SHFR_DWORD, or Mnemonics:
SHFR_WORD) function receives power and the R operand does SHFR_BIT
not, SHFR shifts one or more data BITs, data DWORDs, or data SHFR_DWORD
WORDs from a reference location into a specified area of memory. SHFR_WORD
A contiguous section of memory serves as a shift register. For
example, one word might be shifted into an area of memory with a
specified length of five words. As a result of this shift, another
word of data would be shifted out of the end of the memory area.
Warning
The use of overlapping input and output reference address ranges in multiword
functions is not recommended, as it may produce unexpected results.
The reset input (R) takes precedence over the function enable input. When the reset is
active, all references beginning at the shift register (ST) up to the length specified, are filled
with zeros.
If the function receives power flow and R is not active, each BIT, DWORD, or WORD of the
shift register is moved to the next highest reference. The elements shifted out of ST are
shifted into Q. The highest reference of IN is shifted into the vacated element starting at ST.
Note: The contents of the shift register are accessible throughout the program because
they are overlaid on absolute locations in logic addressable memory.
The function passes power to the right whenever it receives power flow and the R operand
does not.
Example
SHFR_WORD operates on register memory locations %R0001 through %R0100. When the
reset reference CLEAR is active, the Shift Register words are set to zero.
When the NXT_CYC reference is active and CLEAR is not, the two words at the starting
address V_Q00033 are shifted into the Shift Register at %R0001. The words shifted out of
the Shift Register from %R0100 are stored in output %M0005. Note that, for this example, the
length specified and the amount of data to be shifted (N) are not the same.
Size Of
Counts the number of bits used by the variable assigned Mnemonics:
to input IN and writes the number of bits to output Q. SIZE_OF
Operands
Parameter Description Allowed Operands Optional
IN The variable whose size in bits is calculated. Variable of any data type except No
BYTE arrays in non-discrete
memory and double-segment
structures.
Q The number of bits used by the variable DINT or DWORD variable. No
assigned to input IN. ST also supports INT and WORD
variables.
Example
The single-segment structure named Var assigned to input IN contains eight BOOL elements
(8 * 1 = 8 bits) and twelve WORD elements (12 * 16 = 192 bits). SIZE_OF outputs the value
8 + 192 = 200 to the variable R00001 assigned to output Q.
Swap
The SWAP function is used to swap two bytes within a Other mnemonic:
word (SWAP WORD) or two words within a double word SWAP_WORD
(SWAP DWORD). The SWAP can be performed over a
wide range of memory by specifying a length greater than
1. If that is done, the data in each word or double word
within the specified length is swapped.
When the SWAP function receives power flow, it swaps the data in reference IN and places
the swapped data into output reference Q. The function passes power to the right whenever it
receives power.
PACSystems CPUs use the Intel convention for storing word data in bytes. They store the
least significant byte of a word in address n and the most significant byte in address n+1.
Many VME modules follow the Motorola convention of storing the most significant byte in
address n and the least significant byte in address n+1.
The PACSystems CPU assigns byte address 1 to the same storage location regardless of the
byte convention used by the other device. However, because of the difference in byte
significance, word and multiword data, for example, 16 bit integers (INT, UINT), 32 bit
integers (DINT) or floating point (REAL) numbers, must be adjusted when being transferred
to or from Motorola-convention modules. In these cases, the two bytes in each word must be
swapped, either before or after the transfer. In addition, for multiword data items, the words
must be swapped end-for-end on a word basis. For example, a 64-bit real number transferred
to the PACSystems CPU from a Motorola-convention module must be byte-swapped and
word-reversed, either before or after reading, as shown below:
B1 B2 B3 B4 B5 B6 B7 B8
Character (ASCII) strings or BCD data require no adjustment since the Intel and Motorola
conventions for storage of character strings are identical.
Array Move
Mnemonics:
ARRAY_MOVE_BOOL
ARRAY_MOVE_BYTE
ARRAY_MOVE_DINT
ARRAY_MOVE_DWORD
ARRAY_MOVE_INT
ARRAY_MOVE_UINT
ARRAY_MOVE_WORD
When the Array Move function receives power flow, it copies a specified number of elements
from a source memory block to a destination memory block. Starting at the indexed location
(SR+SNX-1) of the input memory block, it copies N elements to the output memory block,
starting at the indexed location (DS+DNX-1) of the output memory block.
Note: For ARRAY_MOVE_BOOL, when 16-bit registers are selected for the operands of
the source memory block and/or destination memory block starting address, the least
significant bit of the specified 16-bit register is the first bit of the memory block. The
value displayed contains 16 bits, regardless of the length of the memory block.
The indices in an Array Move instruction are 1-based. In using an Array Move, no element
outside either the source or destination memory blocks (as specified by their starting address
and length) may be referenced.
The function passes power flow unless one of the following conditions occurs:
■ It receives no power flow.
■ (N + SNX - 1) is greater than Length.
■ (N + DNX - 1) is greater than Length.
Note: For each mnemonic, use the corresponding data type for the SR and DS operands. For
example, ARRAY_MOVE_BYTE requires SR and DS to be BYTE variables.
DS (must be the same data The starting address of All, except S and constants. No
type as SR) the destination memory %SA - %SC allowed only for
block. BYTE, WORD, DWORD
Note: For an Array types
Move with the data type
BOOL, any reference
may be used; it does not
need to be byte-aligned.
Sixteen bits, beginning
with the reference
address specified, are
displayed online.
Example 2
Using bit memory blocks, the input block starts at
SR=%M0009, the output block starts at %Q0022,
and the length of both blocks is 16 one-bit registers
(Length=16).
To copy the seven registers %M0011 - %M0017 to
%Q0026 - %Q0032, N is set to 7, SNX is set to 3 (to
designate the third register, %M0011, of the block
starting at %M0009), and DNX is set to 5 (to
designate the fifth register, %Q0026, of the block
starting at %Q0022).
Example 3
Sixteen (=N) bits that are not byte-aligned are moved from the two 16-bit registers that start
at %R00001 (SR) to the two 16-bit registers that
begin at %R00100 (DS). For the purposes of this
Boolean move, Length is set to 20, because the other
12 bits in either memory block are not considered.
By setting SNX to 3, N to 16, and DNX to 5, the third
(SNX) least significant bit of %R0001 through the
second least significant bit of %R0002 (for a total of
16 bits=N) are written into the fifth (DNX) least
significant bit of %R0100 through the fourth least
significant bit of %R0101 (for the same total of 16
bits).
Array Range
The ARRAY_RANGE function compares a single Mnemonics:
input value against two arrays of delimiters that ARRAY_RANGE_DINT
specify an upper and lower bound to determine if the ARRAY_RANGE_DWORD
input value falls within the range specified by the ARRAY_RANGE_INT
delimiters. The output is an array of bits that is set ARRAY_RANGE_UINT
ON (1) when the input value is greater than or equal ARRAY_RANGE_WORD
to the lower limit and less than or equal to the upper
limit. The output is set OFF (0) when the input is
outside this range or when the range is invalid, as
when the lower limit exceeds the upper limit.
The ARRAY_RANGE function compares a single input value against two arrays of delimiters
that specify an upper and lower bound to determine if the input value falls within the range
specified by the delimiters. The output is an array of bits that is set ON (1) when the input
value is greater than or equal to the lower limit and less than or equal to the upper limit. The
output is set OFF (0) when the input is outside this range or when the range is invalid, as
when the lower limit exceeds the upper limit.
When ARRAY_RANGE receives power, it compares the value in input parameter IN against
each range specified by the array element values of LL and UL. Output Q sets a bit ON (1)
for each corresponding array element where the value of IN is greater than or equal to the
value of LL and is less than or equal to the value of UL. Output Q sets a bit OFF (0) for each
corresponding array element where the value of IN is not within this range or when the range
is invalid, as when the value of LL exceeds the value of UL. If the operation is successful,
ARRAY_RANGE passes power flow to the right.
Example 2
The lower limit (LL) array contains %T00001 through %T00016, %T00017 through %T00032,
and %T00033 through %T00048. The lower limit values are 100, 65, and 1. The upper limit
(UL) values are 29, 165, and 2. The resulting Q values of 0, 1, and 0 will be placed in
%Q00001 through %Q00003. The bit value displayed will be 0 (OFF), representing the value
of %Q00001. The power output will be set ON (1).
FIFO Read
Mnemonics:
FIFO_RD_DINT
FIFO_RD_DWORD
FIFO_RD_INT
FIFO_RD_UINT
FIFO_RD_WORD
The First-In-First-Out (FIFO) Read (FIFO_RD) function moves data out of tables. Values are
always moved out of the bottom of the table. If the pointer reaches the last location and the
table becomes full, FIFO_RD must be used to remove the entry at the pointer location and
decrement the pointer by one. FIFO_RD is used in conjunction with the FIFO_WRT function,
which increments the pointer and writes entries into the table.
1. FIFO_RD copies the top location (entry 0) of the table to output parameter Q. Additional
program logic must then be used to place the data in the input reference.
2. The remaining items in the table are copied to a lower numbered position in the table.
3. FIFO_RD decrements the pointer by one.
4. Steps 1, 2, and 3 are repeated each time FIFO_RD is executed, until the table is empty
(PTR = 0).
The pointer does not wrap around when the table is full.
When FIFO_RD receives power flow, the data at the first location of the table is copied to
output Q. Next, each item in the table is moved down to the next lower location. This begins
with item 2 in the table, which is moved into position 1. Finally, the pointer is decremented. If
this causes the pointer location to become 0, the output EM is set ON, i.e., EM indicates
whether or not the table is empty.
FIFO_RD passes power to the right if the pointer is greater than zero and less than the value
specified for LEN.
Note: A FIFO table is a queue. A LIFO table is a stack.
FIFO Write
Mnemonics:
FIFO_WRT_DINT
FIFO_WRT_DWORD
FIFO_WRT_INT
FIFO_WRT_UINT
FIFO_WRT_WORD
The First-In-First-Out (FIFO) Write (FIFO_WRT) function moves data into tables. The function
increments the table pointer by one and adds an entry at the new pointer location in a FIFO
table. Values are always moved in at the bottom of the table. If the pointer reaches the last
location and the table becomes full, FIFO_WRT can add no further values. The FIFO_RD
function must then be used to remove the entry at the pointer location and decrement the
pointer by one.
1. FIFO_WRT increments the pointer by one.
2. FIFO_WRT copies data from input parameter IN to the position in the table indicated
by the pointer. (It writes over any value currently at that location.) Additional program
logic must then be used to place the data in the input reference.
3. Steps 1 and 2 are repeated each time FIFO_WRT is executed, until the table is full
(PTR=0).
The pointer does not wrap around when the table is full.
When FIFO_WRT receives power flow, the pointer is incremented by 1. Then, input data is
written into the table at the pointer location. If the pointer was already at the last location in
the table, no data is written and FIFO_WRT does not pass power to the right. The pointer
always indicates the last item entered into the table. If the table becomes full, it is not
possible to add more entries to it.
FIFO_WRT passes power to the right after a successful execution (PTR < LEN).
LIFO Read
Mnemonics:
LIFO_RD_DINT
LIFO_RD_DWORD
LIFO_RD_INT
LIFO_RD_UINT
LIFO_RD_WORD
The Last-In-First-Out (LIFO) Read (LIFO_RD) function moves data out of tables. Values are
always moved out of the top of the table. If the pointer reaches the last location and the table
becomes full, LIFO_RD must be used to remove the entry at the pointer location and
decrement the pointer by one. LIFO_RD is used in conjunction with the LIFO_WRT function,
which increments the pointer and writes entries into the table.
1. LIFO_RD copies data indicated by the pointer to output parameter Q. Additional
program logic must then be used to place the data in the input reference.
2. LIFO_RD decrements the pointer by one.
3. Steps 1 and 2 are repeated each time the instruction is executed, until the table is
empty (PTR = LEN).
The pointer does not wrap around when the table is full.
When LIFO_RD receives power flow, the data at the pointer location is copied to output Q,
then the pointer is decremented. If this causes the pointer location to become 0, the output
EM is set ON, i.e., EM indicates whether or not the table is empty. If the table is empty when
LIFO_RD receives power flow, no read occurs. The pointer always indicates the last item
entered into the table.
LIFO_RD passes power to the right if the pointer was in range for an element to be read.
Note: A LIFO table is a stack. A FIFO table is a queue.
LIFO Write
Mnemonics:
LIFO_WRT_DINT
LIFO_WRT_DWORD
LIFO_WRT_INT
LIFO_WRT_UINT
LIFO_WRT_WORD
The Last-In-First-Out (LIFO) Write (LIFO_WRT) function increments the table pointer by one
and then adds an entry at the new pointer location in a table. Values are always moved in at
the top of the table. If the pointer reaches the last location and the table becomes full,
LIFO_WRT cannot add further values. LIFO_RD must then be used to remove the entry at
the pointer location and decrement the pointer by one.
1. LIFO_WRT increments the table pointer by one.
2. LIFO_WRT copies data from input parameter IN to the position in the table indicated
by the pointer. (It writes over any value currently at that location.) Additional program
logic must then be used to place the data in the input reference.
3. Steps 1 and 2 are repeated each time LIFO_WRT is executed, until the table is full
(PTR=LEN).
The pointer does not wrap around when the table is full.
When LIFO_WRT receives power flow, the pointer increments by 1; then the new data is
written at the pointer location. If the pointer was already at the last location in the table, no
data is written and LIFO_WRT does not pass power to the right. The pointer always indicates
the last item entered into the table. If the table is full, it is not possible to add more entries to
it.
LIFO_WRT passes power to the right after a successful execution (PTR < LEN).
Note: A LIFO table is a stack. A FIFO table is a queue.
Search
When the Search function receives power, it searches the specified
memory block for a value that satisfies the search criteria. For
example, SEARCH_GE_DWORD searches for a DWORD that is
greater than or equal to the specified value (the IN operand).
Search can evaluate six different relationships for six data types, for
a total of thirty-six mnemonics.
Search Relationships:
SEARCH_EQ_... searches for a value of the specified data type equal to the IN
operand.
SEARCH_GE_... searches for a value of the specified data type greater than
or equal to IN.
SEARCH_GT_... searches for a value of the specified data type greater than IN.
SEARCH_LE_... searches for a value of the specified data type less than or equal to
IN.
SEARCH_LT_... searches for a value of the specified data type less than IN.
SEARCH_NE_... searches for a value of the specified data type that is not equal to
IN.
Data types:
BYTE, DINT, DWORD, INT, UINT, WORD
Searching begins at AR+INX, where AR is the starting address and INX is the index value
into the memory block. The search continues either until a register that satisfies the search
criteria is found or until the end of the memory block is reached.
■ If a register is found, the Found Indication (FD) is set ON and the Output Index (ONX) is
set to the relative position of this register within the block.
■ If no register is found before the end of the block is reached, the Found Indication (FD) is
set OFF and the Output Index (ONX) is set to zero.
The input index (INX) is zero-based, that is, 0 the means first reference, whereas the output
index (ONX) is one-based, that is, 1 means the first reference.
The valid values for INX are 0 to (Length - 1). The valid values for ONX are 1 to Length.
INX should be set to zero to begin searching at the memory block's first register. This value
increments by one at the time of execution. If the value of input INX is out-of-range,
(< 0 or > Length-1), INX is set to the default value of zero.
SEARCH passes power flow to the right when it performs without error. If INX is out of range,
SEARCH does not pass power flow to the right.
Sort
When it receives power flow, the SORT function sorts the Mnemonics:
elements of the memory block 'IN' in ascending order. The SORT_INT
output memory block Q contains integers that give the index SORT_UINT
that the sorted elements had in the original memory block or SORT_WORD
list. Q is exactly the same size as IN. It also has a
specification (LEN) of the number of elements to be sorted.
SORT operates on memory blocks of no more than 64 elements. When EN is ON, all of the
elements of IN are sorted into ascending order, based on their data type. The array Q is also
created, giving the original position that each sorted element held in the unsorted array. OK is
always set ON.
Notes: The SORT function is executed each scan it is enabled.
Do not use the SORT function in a timed or triggered input program block.
Operands
Note: For each mnemonic, use the corresponding data type for the IN and Q operands. For
example, SORT_INT requires IN and Q to be INT variables.
Parameter Description Allowed Operands Optional
Length (??) The number (1—64) of Constants No
elements that make up the
memory block to sort.
IN The memory block that All except data flow, S, No
contains the elements to constants. SA – SC valid
sort. After the sort, IN only for WORD type
contains the elements in the
sorted order.
Q (must be the same type as An array of indexes that All except S - SC and No
IN) gives the position of the constants
sorted elements in the
original memory block
Example
New part numbers (%I00017 - %I00032) are pushed onto a parts array PLIST every time
%Q00014 is ON. When the array is filled, it is sorted and the output %Q00025 is turned on.
The array PPOSN then contains the
original position that the now-sorted
elements held before the sort was done
on PLIST.
If PLIST was an array of five elements
and contained the values 25, 67, 12,
35, 14 before the sort, then after the
sort it would contain the values 12, 14,
25, 35, 67. PPOSN would contain the
values 3, 5, 1, 4, 2.
Table Read
The Table Read (TBL_RD) function sequentially reads Mnemonics:
values in a table. When the pointer reaches the end of the TBL_RD_DINT
table, it wraps around to the beginning of the table. (TBL_RD TBL_RD_DWORD
is like FIFO_RD with a wrap-around.) TBL_RD_INT
TBL_RD_UINT
TBL_RD_WORD
Operands
Note: For each mnemonic, use the corresponding data type for the TB and Q operands. For
example, TBL_RD_DINT requires TB and Q to be DINT variables.
Parameter Description Allowed Operands Optional
Length 1 ≤ Length ≤ 32,767 Constants No
TB (must be the same The elements in the table All except constants No
type as Q)
PTR Pointer. Index of the next element. All except data flow, S - SC, constants No
EM Energized when the last element of Power flow No
the table is read
Q (must be the same The element read from the table All except constants, S. SA, SB, SC allowed No
type as TB) only for WORD, DWORD
Example
WIDGETS is a table with 20 integer elements.
When the enabling input %M00346 is ON, the
pointer increments and the contents of the
next element of the table are copied into
ITEM_CT. %L00001 functions as the pointer
into the data table. %M01001 is used to
signal when all items of the data table have
been accessed.
Table Write
The Table Write (TBL_WRT) function sequentially updates Mnemonics:
values in a table that never becomes full. When the pointer TBL_WRT_DINT
(PTR) reaches the end of the table, it automatically returns to TBL_WRT_DWORD
the beginning of the table. TBL_WRT_INT
1. TBL_WRT increments the pointer by one. TBL_WRT_UINT
TBL_WRT_WORD
2. TBL_WRT copies data from input parameter IN to the
position in the table indicated by the pointer. (It writes over
any value currently at that location.) Additional program
logic must then be used to place the data in the input
reference.
3. Steps 1 and 2 are repeated each time the instruction is
executed, until the table is full (PTR=LEN).
When the table is full, the pointer wraps around to the beginning of the table.
Note: The TBL_WRT and TBL_RD functions can operate on the same or different tables.
By specifying a different reference for the pointer, these functions can access the
same data table at different locations or at different rates.
When TBL_WRT receives power flow, the pointer (PTR) increments by 1. If this new pointer
location is the last item in the table, the output FL is set to ON. The next time TBL_WRT
executes, PTR is automatically set back to 1. After incrementing PTR, TBL_WRT writes the
content of the input reference to the current pointer location, overwriting data already stored
there.
TBL_WRT always passes power to the right when it receives power.
Note: TBL_WRT is like FIFO_WRT with a wrap-around.
Operands
Note: For each mnemonic, use the corresponding data type for the TB and IN operands. For
example, TBL_WRT_DINT requires TB and IN to be DINT variables.
Parameter Description Allowed Operands Optional
Length 1 ≤ Length ≤ 32,767. Constants No
TB (must be the same The elements in the table All except S, constants, data flow. SA – SC No
data type as IN) allowed only for WORD, DWORD
PTR Pointer. Index of the next element. All except constants, data flow, %S - %SC No
IN (must be the same The element to write to the table All. %S - %SC allowed only for WORD, No
data type as TB) DWORD
FL Energized when IN is written to the Power flow No
last element of the table
Math Functions
Your program may need to include logic to convert data to a different type before using a
Math or Numerical function. The description of each function includes information about
appropriate data types. The “Conversion Functions” section on page 7-58 explains how to21H
Overflow
When an operation results in overflow, there is no power flow.
If an operation on signed operands (INT, DINT, REAL) results in overflow, the output
reference is set to its largest possible value for the data type. For signed numbers, the sign is
set to show the direction of the overflow. If signed or double precision integers are used, the
sign of the result for DIV and MUL functions depends on the signs of I1 and I2.
Maximum MAXINT16 Maximum signed 16-bit 7FFF hex 32,767
Values MAXUINT16 Maximum unsigned 16-bit FFFF hex 65,535
MAXINT32 Maximum signed 32-bit 7FFFFFFF hex 2,147,483,647
Minimum MININT16 Minimum signed 16-bit 8000 hex –32,768
Values MININT32 Minimum signed 32-bit 80000000 hex –2,147,483,648
If an operation on unsigned operands (UINT) results in overflow or underflow, the output
value wraps around. For example the ADD_UINT operation, 65535+16, yields a result of 15.
Absolute Value
Mnemonics:
ABS_DINT
ABS_INT
ABS_REAL
ABS_LREAL
When the function receives power flow, it places the absolute value of input IN into output Q.
The function outputs power flow, unless one of the following conditions occurs:
■ For INT type, IN is –32,768.
■ For DINT type, IN is –2,147,483,648.
■ For REAL or LREAL type, IN is NaN (Not a Number).
Operands
Parameter Description Allowed Operands Optional
IN (must be same type as Q) The value to process. All except S, SA, SB, SC No
Q (must be same type as IN) The absolute value of IN. All except S, SA, SB, SC and No
constant
Example
The absolute value of –2,976, which is 2,976, is placed in %R00010:
Add
Mnemonics:
ADD_DINT
ADD_INT
ADD_REAL
ADD_LREAL
ADD_UINT
When the ADD function receives power flow, it adds the two operands IN1 and IN2 of the
same data type and stores the sum in the output variable assigned to Q, also of the same
data type.
The power flow output is energized when ADD is performed, unless an invalid operation or
overflow occurs. (For more information, see “Overflow” on page 7-126.) 23H
To correct the above problem, the enable input to the ADD instruction should come from a
transition (“one-shot”) coil, as shown below. In the improved circuit, the %I0001 input switch
controls a transition coil, %M0001, whose contact turns on the enable input of the ADD
function for only one scan each time contact %I0001 closes. In order for the %M0001 contact
to close again, contact %I0001 has to open and close again.
Note: If IN1 and/or IN2 is NaN (Not a Number), ADD_REAL passes no power flow.
Divide
When the DIV function receives power flow, it divides the operand IN1 by the operand Mnemonics:
IN2 of the same data type as IN1 and stores the quotient in the output variable assigned DIV_DINT
to Q, also of the same data type as IN1 and IN2. DIV_INT
DIV_MIXED
The power flow output is energized when DIV is performed, unless an invalid operation DIV_REAL
or overflow occurs. (For more information, see “Overflow” on page 7-126.) 24H
DIV_LREAL
DIV_UINT
Notes:
■ DIV rounds down; it does not round to the closest integer. For example,
24 DIV 5 = 4.
■ DIV_MIXED uses mixed data types.
■ Be careful to avoid overflows.
The following REAL and LREAL operations are invalid for DIV:
■ Any number divided by 0. This operation yields a result of 65535.
■ ∞ divided by ∞
■ I1 and/or I2 is NaN (Not a Number)
Mnemonic Operation Displays as
DIV_UINT Q(16 bit) = IN1(16 bit) / IN2(16 bit) base 10 number, unsigned, up to 5 digits long
DIV_INT Q(16 bit) = IN1(16 bit) / IN2(16 bit) base 10 number with sign, up to 5 digits long
DIV_DINT Q(32 bit) = IN1(32 bit) / IN2(32 bit) base 10 number with sign, up to 10 digits long
DIV_MIXED Q(16 bit) = IN1(32 bit) / IN2(16 bit) base 10 number with sign, up to 5 digits long
DIV_REAL Q(32 bit) = IN1(32 bit) / IN2(32 bit) base 10 number, sign and decimals, up to 8
digits long (excluding the decimals)
DIV_LREAL Q(64 bit) = IN1(64 bit) / IN2(64 bit) base 10 number, sign and decimals, up to 17
digits long (excluding the decimals)
DIV_MIXED Operands
Parameter Description Allowed Operands Optional
IN1 The value to be divided; the value to the left of “DIV” in the All except S, SA, SB, SC No
equation IN1 DIV IN2=Q.
IN2 The value to divide IN1 with; the value to the right of “DIV” in All except S, SA, SB, SC No
the equation IN1 DIV IN2=Q.
Q The quotient of IN1/IN2. If an overflow occurs, the result is the All except S, SA, SB, SC and No
largest value with the proper sign and no power flow. constant
DIV_MIXED Example
DIV_DINT can be used in conjunction with a MUL_DINT function to scale a ±10 volt input to
±25,000 engineering units. See “Example – Scaling an Analog Input” on page 7-132. 25H
Modulus
Mnemonics:
MOD_DINT
MOD_INT
MOD_UINT
When the Modulo Division (MOD) function receives power flow, it divides input IN1 by input
IN2 and outputs the remainder of the division to Q.
All three operands must be of the same data type. The sign of the result is always the same
as the sign of input parameter IN1. Output Q is calculated using the formula:
Q = IN1-((IN1 DIV IN2) * IN2)
where DIV produces an integer number.
The power flow output is always ON when the function receives power flow, unless there is
an attempt to divide by zero. In that case, the power flow output is set to OFF.
Multiply
When the MUL function receives power flow, it multiplies the Mnemonics:
two operands IN1 and IN2 of the same data type and stores MUL_DINT
the result in the output variable assigned to Q, also of the MUL_INT
MUL_MIXED
same data type.
MUL_REAL
The power flow output is energized when the function is MUL_LREAL
performed, unless an invalid operation or overflow occurs. MUL_UINT
(For more information, see “Overflow” on page 7-126.) 26H
An alternate, but less accurate, way of programming this circuit using INT values involves
placing the DIV_DINT instruction first, followed by the MUL_DINT instruction. The value of
IN2 for the DIV instruction would be 32, and the value of IN2 for the MUL would be 25. This
maintains the scaling proportion of the above circuit and keeps the values within the working
range of the INT type instructions. However, the DIV instruction inherently discards any
remainder value, so when the DIV output is multiplied by the MUL instruction, the error
introduced by a discarded remainder is multiplied. The percent of error is non-linear over the
full range of input values and is greater at lower input values.
By contrast, in the example above, the results are more accurate because the DIV operation
is performed last, so the discarded remainder is not multiplied. If even greater precision is
required, substitute REAL type math instructions in this example so that the remainder is not
discarded.
Scale
When the SCALE function receives power flow, it scales Mnemonics:
the input operand IN and places the result in the output SCALE_DINT
variable assigned to output operand OUT. The power SCALE_INT
flow output is energized when SCALE is performed SCALE_DINT
without overflow.
SCALE_UINT
Operands
Parameter Description Allowed Optional
Operands
IHI (Inputs High) Maximum input value (module-related). The upper limit of the All except S, No
unscaled data. IHI is used with ILO, OHI and OLO to calculate the scaling factor SA, SB, SC
applied to the input value IN.
ILO (Inputs Low) Minimum input value (module-related). The lower limit of the All except S, No
unscaled data. Must be the same data type as IHI. SA, SB, SC
OHI (Outputs High) Maximum output value. The upper limit of the scaled data. Must be All except S, No
the same data type as IHI. When the IN input is at the IHI value, the OUT value is SA, SB, SC
the same as the OHI value.
OLO (Outputs Low) Minimum output value. The lower limit of the scaled data. Must be All except S, No
the same data type as IHI. When the IN input is at the ILO value, the OUT value is SA, SB, SC
the same as the OLO value.
IN (INput value) The value to be scaled. Must be the same data type as IHI All except S, No
SA, SB, SC
OUT (OUTput value) The scaled equivalent of the input value. Must be the same data All except S, No
type as IHI. SA, SB, SC
Example
In the example, the registers %R0120 through %R0123
are used to store the high and low scaling values. The
input value to be scaled is analog input %AI0017. The
scaled output data is used to control analog output
%AQ0017. The scaling is performed whenever %I0001 is
ON.
Subtract
Mnemonics:
SUB_DINT
SUB_INT
SUB_REAL
SUB_LREAL
SUB_UINT
When the SUB function receives power flow, it subtracts the operand IN2 from the operand
IN1 of the same data type as IN2 and stores the result in the output variable assigned to Q,
also of the same data type.
The power flow output is energized when SUB is performed, unless an invalid operation or
overflow occurs. (For more information, see “Overflow” on page 7-126.) 27H
If a SUB_UINT operation results in a negative number, Q wraps around, yielding a result that
is the highest possible value (65535) minus the absolute value of the difference -1.
The following REAL and LREAL operations are invalid for SUB:
■ (± ∞) – (± ∞)
■ I1 and/or I2 is NaN (Not a Number)
Argument Present
The ARG_PRES function determines whether an input
parameter value was present when the function block instance
of the parameter was invoked. This may be necessary if the
parameter is optional.
This function must be called from a function block instance or
a parameterized block.
The standard output parameter ENO is false only when EN is
false.
The function block ReadTemp contains the following logic, which uses an ARG_PRES
function to determine whether a value for TempVal is present. If TempVal does not have a
value, Temp_Pres is OFF and Idle is ON. If a value exists for TempVal, the ARG_PRES
function sets Temp_Pres ON. When Temp_Pres and Switch are both ON, Start is set ON.
Call
Notes:
■ A CALL function can be used in any program block, including the _MAIN block, or a
parameterized block. It cannot be used in an external block.
■ You cannot call a _MAIN block.
■ The called block must exist in the target before making the call.
■ There is no limit to the number of calls that can be made from or to a given block.
■ You can set up recursive subroutines by having a block call itself. When stack size is
configured to be the default (64K), the PLC guarantees a minimum of eight nested calls
before an “Application Stack Overflow” fault is logged.
■ Each block has a predefined parameter, Y0, which the CPU sets to 1 upon each
invocation of the block. Y0 can be controlled by logic within the block and provides the
output status of the block. When the Y0 parameter of a Program Block, parameterized
block, or external C block returns ON, the CALL passes power to the right; when it
returns OFF, the CALL does not pass power to the right.
Example 2
Parameterized blocks are useful for building libraries of user-
defined functions. For example, if you have an equation such
as:
E=(A+B+C+D)/4, a parameterized block named AVG_4 could
be called as shown in the example to the right.
In this example, the average of the values in R00001, R00002,
R00003, and R00004 would be placed in R00005.
The logic within the parameterized block would be defined as
shown below.
Comment
The Comment function is used to enter a text explanation in the program. When you insert a
Comment instruction into the LD logic, it displays ????. After you key in a comment, the first
few words are displayed.
Jump
Mnemonic Description Always associated with...
JUMPN Nested form of Jump instruction. a LABELN instruction
Operands
Parameter Description Optional
Label (????) Label name; the name assigned to the destination LABEL(N). No
MCRN
An MCRN instruction marks the beginning of a section of logic that will be executed with no
power flow. The end of an MCRN section must be marked with an ENDMCRN having the
same name as the MCRN. ENDMCRNs must follow their corresponding MCRNs in the logic.
All rungs between an active MCRN and its corresponding ENDMCRN are executed with
negative power flow from the power rail. The ENDMCRN function associated with the MCRN
causes normal program execution to resume, with positive power flow coming from the power
rail.
With a Master Control Relay, functions within the scope of the Master Control Relay are
executed without power flow, and coils are turned off.
Block calls within the scope of an active Master Control Relay will not execute. However, any
timers in the block will continue to accumulate time.
A rung may not contain anything after an MCRN.
Unlike JUMP instructions, MCRNs can only move forward. An ENDMCRN instruction must
appear after its corresponding MCRN instruction in a program.
The following controls are imposed by an MCRN:
■ Timers do not increment or decrement. TMR types are reset. For an ONDTR function, the
accumulator holds its value.
■ Normal outputs are off; negated outputs are on.
Note: When an MCRN is energized, the logic it controls is scanned and contact status is
displayed, but no outputs are energized. If you are not aware that an MCRN is
controlling the logic being observed, this might appear to be a faulty condition.
An MCRN and its associated ENDMCRN can be placed anywhere in a program, as long as
the MCRN / ENDMCRN range:
■ Is completely nested within another MCRN / ENDMCRN range, up to a maximum 255
levels of nesting, or is completely outside of the range of another MCRN / ENDMCRN
range.
■ Is completely nested within a FOR_LOOP / END_FOR range or is completely outside of
the range of a FOR_LOOP / END_FOR.
EndMCRN
The End Master Control Relay instruction marks the end of a section of logic begun with a
Master Control Relay instruction. When the MCRN associated with the ENDMCRN is active,
the ENDMCRN causes program execution to resume with normal power flow. When the
MCRN associated with the ENDMCRN is not active, the ENDMCRN has no effect.
ENDMCRN must be tied to the power rail; there can be no logic before it in the rung;
execution cannot be conditional.
ENDMCRN has a name that identifies it and associates it with the corresponding MCRN(s).
The ENDMCRN function has no outputs; there can be nothing after an ENDMCR instruction
in a rung.
Example of MCRN/ENDMCRN
The following example shows an MCRN
named “Sec_MCRN” nested inside the
MCRN named “First_MCRN.” Whenever
the V_I0002 contact allows power flow into
the MCRN function, program execution will
continue without power flow to the coils
until the associated ENDMCRN is reached.
If the V_I0001 and V_I0003 contacts are
ON, the V_Q0001 coil is turned OFF and
the SET coil V_Q0003 maintains its current
state.
Wires
Horizontal and vertical wires (H_WIRE and V_WIRE)
are used to connect elements of a line of LD logic
between functions. Their purpose is to complete the
flow of logic (“power”) from left to right in a line of
logic.
A horizontal wire transmits the BOOLEAN ON/OFF
state of the element on its immediate left to the
element on its immediate right.
A vertical wire may intersect with one or more
horizontal wires on each side. The state of the vertical
wire is the inclusive OR of the ON states of the
horizontal wires on its left side. The state of the
vertical wire is copied to all of the attached horizontal
wires on its right side.
Note: Wires can be used for data flow, but you cannot route data flow leftwards. Nor can two
separate data flow lines come into the left side of the same vertical wire.
Relational Functions
Relational functions compare two values of the same data type or determine whether a
number lies within a specified range. The original values are unaffected.
Function Mnemonic Description
Compare CMP_DINT Compares two numbers, IN1 and IN2, of the data type
CMP_INT specified by the mnemonic.
CMP_REAL ■ If IN1 < IN2, the LT output is turned ON.
CMP_LREAL
CMP_UINT ■ If IN1 = IN2, the EQ output is turned ON.
■ If IN1 > IN2, the GT output is turned ON.
Equal EQ_DATA Tests two numbers for equality
EQ_DINT
EQ_INT
EQ_REAL
EQ_LREAL
EQ_UINT
Greater or GE_DINT Tests whether one number is greater than or equal to another
Equal GE_INT
GE_REAL
GE_LREAL
GE_UINT
Greater Than GT_DINT Tests whether one number is greater than another
GT_INT
GT_REAL
GT_LREAL
GT_UINT
Less or Equal LE_DINT Tests whether one number is less than or equal to another
LE_INT
LE_REAL
LE_LREAL
LE_UINT
Less Than LT_DINT Tests whether one number is less than another
LT_INT
LT_REAL
LT_LREAL
LT_UINT
Not Equal NE_DINT Tests two numbers for non-equality
NE_INT
NE_REAL
NE_LREAL
NE_UINT
Range RANGE_DINT Tests whether one number is within the range defined by two
RANGE_DWORD other supplied numbers
RANGE_INT
RANGE_UINT
RANGE_WORD
Compare
Mnemonics:
CMP_DINT
CMP_INT
CMP_REAL
CMP_LREAL
CMP_UINT
When the Compare (CMP) function receives power flow, it compares the value IN1 to the
value IN2.
■ If IN1 < IN2, CMP energizes the LT (Less Than) output.
■ If IN1 = IN2, CMP energizes the EQ (Equal) output.
■ If IN1 > IN2, CMP energizes the GT (Greater Than) output.
IN1 and IN2 must be the same data type. CMP compares data of the following types: DINT,
INT, REAL, LREAL, and UINT.
Tip: To compare values of different data types, first use conversion functions to make the
types the same.
When it receives power flow, CMP always passes power flow to the right, unless IN1 and/or
IN2 is NaN (Not a Number).
Operands
Parameter Description Allowed Operands Optional
IN1 The first value to compare. All except S, SA, SB, SC No
IN2 The second value to compare. All except S, SA, SB, SC No
LT Output LT is energized when I1 < I2. Power flow No
EQ Output EQ is energized when I1 = I2. Power flow No
GT Output GT is energized when I1 > I2. Power flow No
Example
When %I00001 is ON, the integer variable SHIPS is
compared with the variable BOATS. Internal coils
%M0001, %M0002, and %M0003 are set to the results of
the compare.
Equal, Not Equal, Greater or Equal, Greater Than, Less or Equal, Less Than
Other data
types:
_INT
_REAL
_LREAL
_UINT
When the relational function receives power flow, it compares input IN1 to input IN2. These
operands must be the same data type. If inputs IN1 and IN2 are equal, the function passes
power to the right, unless IN1 and/or IN2 is NaN (Not a Number). The following relational
functions can be used to compare two numbers:
Function Definition Relational Statement
EQ Equal IN1=IN2
NE Not Equal IN1≠IN2
GE Greater Than or Equal IN1≥IN2
GT Greater Than IN1>IN2
LE Less Than or Equal IN1≤IN2
LT Less Than IN1<IN2
Note: If an overflow occurs with a _UINT operation, the result wraps around – see
“Overflow” on page 7-126.28H
If the _DINT or _INT operations are fed the largest possible value with any sign, they
cannot determine if it is an overflow value. The power flow output of the previous
operation would need to be checked. If an overflow occurred on a previous DINT, or
INT operation, the result was the largest possible value with the proper sign and no
power flow.
Tip: To compare values of different data types, first use conversion functions to make the
types the same. The relational functions require data to be one of the following types:
DINT, INT, REAL, LREAL, or UINT.
Operands
Parameter Description Allowed Operands Optional
IN1 The first value to be compared; the value on the left side of the All except S, SA, SB, SC No
relational statement.
IN2 The second value to be compared; the value on the right side of the All except S, SA, SB, SC No
relational statement. IN2 must be the same data type as IN1.
Q The power flow. If the relational statement is true, Q is energized, Power flow No
unless IN1 or IN2 is NaN.
EQ_DATA
Mnemonic:
EQ_DATA
The EQ_DATA function compares two input variables, IN1 and IN2 of the same data type. If
IN1 and IN2 are equal, output Q is energized. If they are not equal, Q is cleared.
Operands
Parameter Description Allowed Operands Optional
IN1 The first value to be compared; the value on the left side of the PACMotion ENUM No
relational statement. variable or structure
variable.
For details, refer to “Data
Types and Structures” in
the PACMotion Multi-Axis
Motion Controller User’s
Manual, GFK-2448.
IN2 The second value to be compared; the value on the right side of the PACMotion ENUM No
relational statement. IN2 must be the same data type as IN1. variable or structure
variable.
Q If IN1 or IN2 is true, Q is energized,. Power flow No
Range
Mnemonics:
RANGE_DINT
RANGE_DWORD
RANGE_INT
RANGE_UINT
RANGE_WORD
When the Range function is enabled, it compares the value of input IN against the range
delimited by operands L1 and L2. Either L1 or L2 can be the high or low limit. When L1 ≤ IN ≤
L2 or L2 ≤ IN ≤ L1, output parameter Q is set ON (1). Otherwise, Q is set OFF (0).
If the operation is successful, it passes power flow to the right.
Operands
Parameter Description Allowed Operands Optional
IN The value to compare against the range delimited by L1 and L2. Must be All except S, SA, SB, No
the same data type as L1 and L2. SC
L1 The start point of the range. May be the upper limit or the lower limit. All except S, SA, SB, No
Must be the same data type as IN and L2. SC
L2 The end point of the range. May be the lower or upper limit. Must be the All except S, SA, SB, No
same data type as IN and L1. SC
Q If L1 ≤ IN ≤ L2 or L2 ≤ IN ≤ L1, Q is energized; otherwise, Q is off. Power flow No
Example
When RANGE_INT receives power flow from the normally open contact %I0001, it
determines whether the value in %R00003 is within the range 0 to 100 inclusively. Output coil
%M00002 is ON only if 0 ≤ %AI0050 ≤ 100.
Timers
This section describes the PACSystems timed contacts and timer function blocks that are
implemented in the LD language.
Timed Contacts
The PACSystems has four timed contacts that can be used to provide regular pulses of
power flow to other program functions. Timed contacts cycle on and off, in square-wave form,
every 0.01 second, 0.1 second, 1.0 second, and 1 minute. Timed contacts can be read by an
external communications device to monitor the state of the CPU and the communications
link. Timed contacts are also often used to blink pilot lights and LEDs.
The timed contacts are referenced as T_10MS (0.01 second), T_100MS (0.1 second),
T_SEC (1.0 second), and T_MIN (1 minute). These contacts represent specific locations in
%S memory:
#T_10MS 0.01 second timed contact %S0003
#T_100MS 0.1 second timed contact %S0004
#T_SEC 1.0 second timed contact %S0005
#T_MIN 1.0 minute timed contact %S0006
These contacts provide a pulse having an equal on and off time duration. The following timing
diagram illustrates the on/off time duration of these contacts.
X
T XXXXX SEC
X/2 X/2
SEC SEC
Caution
Do not use timed contacts for applications requiring accurate measurement of
elapsed time. Timers, time-based subroutines, and PID blocks are preferred for
these types of applications.
The CPU updates the timed contact references based on a free-running timer
that has no relationship to the start of the CPU sweep. If the sweep time
remains in phase with the timed contact clock, the contact will always appear
to be in the same state. For example, if the CPU is in constant sweep mode
with a sweep time setting of 100ms, the T_10MS and T_100MS bits will never
toggle.
Note: For a summary of differences in the operation of timed contacts in PACSystems
CPUs compared to Series 90-70 and Series 90-30, see “LD Function Differences” in
appendix C.
Warning
Do not use two consecutive words (registers) as the starting addresses of two
timers. Logic Developer - PLC does not check or warn you if register blocks
overlap. Timers will not work if you place the current value of a second timer
on top of the preset value for the previous timer.
Warning
The first word (CV) can be read but should not be written to, or the function
may not work properly.
Reset input
Enable input, previous execution
Q (counter/timer status output)
EN (enable input
Warning
The third word (Control) can be read but should not be written to; otherwise,
the function will not work.
Note: Bits 0 through 13 are used for timer accuracy.
this block. Continue back up the call tree until the _MAIN block or a block of type Block is
found. This is the source block for the parameterized block.
Recursion
If you use recursion (that is, if you have a block call itself either directly or indirectly) and your
parameterized block contains an OFDT, ONDTR, or TMR, you must follow two additional
rules:
■ Program the source block so that it invokes the parameterized block before making any
recursive calls to itself.
■ Do not program the parameterized block to call itself directly.
Example
A UDFB is defined that uses a member variable for a timer function block. Two instances of
the function block are created: timer_A and timer_B. During each logic scan, both timer_A
and timer_B are executed. However, only the member variable in timer_A is updated and the
member variable in timer_B always remains at 0.
■ An OFDT expires (turns OFF power flow to the right) the first scan that it does not receive
power flow if the previous scan time was greater than PV.
■ When OFDT is used in a program block that is not called every scan, the timer
accumulates time between calls to the program block unless it is reset. This means that
OFDT functions like a timer operating in a program with a much slower scan than the
timer in the main program block. For program blocks that are inactive for a long time,
OFDT should be programmed to allow for this catch-up feature. For example, if a timer in
a program block is reset and the program block is not called (is inactive) for four minutes,
when the program block is called, four minutes of time will already have accumulated. If
the enable input is OFF, these four minutes are applied to the timer (that is, CV is set to 4
minutes).
Timing diagram
ENABLE
A B C D E F G H
Warning
Do not use the Address, Address+1, or Address+2 addresses with other
instructions. Overlapping references cause erratic timer operation.
Parameter Description Allowed Operands Optional
Address The beginning address of a three- R, W, P, L, symbolic No
(????) word WORD array:
Word 1: Current value (CV)
Word 2: Preset value (PV)
Word 3: Control word
PV The Preset Value, used when the All except S, SA, SB, SC Optional
timer is enabled or reset. 0 ≤ PV ≤
+32,767. If PV is out of range, it
has no effect on Word 2.
CV The current value of the timer. All except S, SA, SB, SC, constant Optional
The retentive On-Delay Stopwatch Timer (ONDTR) increments while it receives power flow
and holds its value when power flow stops. Time may be counted in the following increments:
■ Seconds
■ Tenths (0.1) of a second
■ Hundredths (0.01) of a second
■ Thousandths (0.001) of a second
The range is 0 to +32,767 time units. The state of this timer is retentive on power failure; no
automatic initialization occurs at power-up.
When ONDTR first receives power flow, it starts accumulating time (Current Value (CV)).
When the CV equals or exceeds Preset Value (PV), output Q is energized, regardless of the
state of the power flow input.
As long as the timer continues to receive power flow, it continues accumulating until CV
equals the maximum value (+32,767 time units). Once the maximum value is reached, it is
retained and Q remains energized regardless of the state of the enable input.
When power flow to the timer stops, CV stops incrementing and is retained. Output Q, if
energized, will remain energized. When ONDTR receives power flow again, CV again
increments, beginning at the retained value.
When reset (R) receives power flow and PV is not equal to zero, CV is set back to zero and
output Q is de-energized.
Note: If PV equals zero, the time is disabled and the reset is activated, and the output of
the time becomes high. Subsequent removal of the reset or activation of input will
have no effect on the timer output; the output of the time remains high.
ONDTR passes power flow to the right when CV is greater than or equal to PV. Since no
automatic initialization to the outgoing power flow state occurs at power-up, the power flow
state is retentive across power failure.
Notes:
■ The best way to use an ONDTR function is to invoke it with a particular reference
address exactly one time each scan. Do not invoke an ONDTR with the same reference
address more than once per scan (inappropriate accumulation of time would result).
When an ONDTR appears in a program block, it will only accumulate time once per scan.
Subsequent calls to that same program block within the same scan will have no effect on
its ONDTRs. Do not program an ONDTR function with the same reference address in two
different blocks. You should not program a JUMPN around a timer function. Also, if you
use recursion (that is, having a block call itself either directly or indirectly), program the
program block so that it invokes the timer before it makes any recursive calls to itself.
■ For information on using timers inside parameterized blocks, see page 7-153.3H
■ An ONDTR expires (passes power flow to the right) the first scan that is enabled and not
reset if the previous scan time was greater than PV.
■ When ONDTR is used in a program block that is not called every scan, it accumulates
time between calls to the program block unless it is reset. This means that ONDTR
functions like a timer operating in a program with a much slower scan than the timer in
the main program block. For program blocks that are inactive for a long time, ONDTR
should be programmed to allow for this catch-up feature. For example, if a timer in a
program block is reset and the program block is not called (is inactive) for four minutes,
when the program block is called, four minutes of time will already have accumulated. If
the enable input is ON and the reset input is OFF, these four minutes are applied to the
timer (that is, CV is set to 4 minutes).
Timing diagram
ENABLE
RESET
A B C D E F G H
Warning
Do not use the Address, Address+1, or Address+2 addresses with other
instructions. Overlapping references cause erratic timer operation.
Parameter Description Allowed Operands Optional
Address Beginning address of a three-word R, W, P, L, symbolic No
(????) WORD array:
Word 1: Current value (CV)
Word 2: Preset value (PV)
Word 3: Control word
R When R is ON, it resets the Current Power flow Optional
Value (Word 1) to zero.
PV The Preset Value, used when the All except S, SA, SB, SC Optional
timer is enabled or reset. 0 ≤ PV ≤
+32,767. If PV is out of range, it has
no effect on Word 2.
CV Current Value of the timer All except S, SA, SB, SC and Optional
constant
On Delay Timer
Mnemonics:
TMR_SEC
TMR_TENTHS
TMR_HUNDS
TMR_THOUS
The On-Delay Timer (TMR) increments while it receives power flow and resets to zero when
power flow stops. The timer passes power after the specified interval PV (Preset Value) has
elapsed, as long as power is received.
The range for PV is 0 to +32,767 time units. If PV is out of range, it has no effect on the
timer's word 2. The state of this timer is retentive on power failure; no automatic initialization
occurs at power-up.
Time may be counted in the following increments:
■ Seconds
■ Tenths (0.1) of a second
■ Hundredths (0.01) of a second
■ Thousandths (0.001) of a second
When TMR is invoked with its power flow input turned OFF, its Current Value (CV) is reset to
zero, and the timer does not pass power flow to the right. Each time the TMR is invoked with
its power flow input turned ON, CV is updated to reflect the elapsed time since the timer was
reset. When CV reaches PV, the timer function passes power flow to the right.
Notes:
■ The best way to use a TMR function is to invoke it with a particular reference address
exactly one time each scan. Do not invoke a TMR with the same reference address more
than once per scan (inappropriate accumulation of time would result). When a TMR
appears in a program block, it will only accumulate time once per scan. Subsequent calls
to that same program block within the same scan will have no effect on its TMRs. Do not
program an TMR function with the same reference address in two different blocks. You
should not program a JUMP around a timer function. Also, if you use recursion (that is,
having a block call itself either directly or indirectly), program the program block so that it
invokes the timer before it makes any recursive calls to itself.
■ For information on using timers inside parameterized blocks, see page 7-153. 34H
■ A TMR timer expires (passes power flow to the right) the first scan that it is enabled if the
previous scan time was greater than PV.
■ When TMR is used in a program block that is not called every scan, TMR accumulates
time between calls to the program block unless it is reset. This means that it functions like
a timer operating in a program with a much slower sweep than the timer in the main
program block. For program blocks that are inactive for a long time, TMR should be
programmed to allow for this catch-up feature. For example, if a timer in a program block
is reset and the program block is not called (is inactive) for 4 minutes, when the program
block is called, four minutes of time will already have accumulated. If the enable input is
ON, these four minutes are applied to the timer (i.e. CV is set to 4 minutes).
Timing Diagram
Warning
Do not use the Address, Address+1, or Address+2 addresses with other
instructions. Overlapping references cause erratic timer operation.
Parameter Description Allowed Operands Optional
???? The beginning address of a three-word WORD array: R, W, P, L, symbolic No
Word 1: Current value (CV)
Word 2: Preset value (PV)
Word 3: Control word
PV The Preset Value, used when the timer is enabled or All except S, SA, SB, SC Yes
reset. 0 ≤ PV ≤ +32,767. If PV is out of range, it has no
effect on Word 2.
CV The current value of the timer. All except S, SA, SB, SC Yes
and constant
Operands
TOF, TON and TP have the same input and output parameters, except for the instance
variable, which must be the same type as the instruction.
Note: Writing or forcing values to the instance data elements IN, PT, Q, ET, ENO or TI may
cause erratic operation of the timer function block.
Timing Diagram
IN
Q
PT PT
ET
t0 t1 t2 t3 t4 t5
t0 When input IN is set to ON, the output Q follows and remains ON. The elapsed time,
ET, does not increment.
t1 When IN goes OFF, the timer starts to measure time and ET increments. ET
continues to increment until its value equals the preset time, PT.
t2 When ET equals PT, Q is set to OFF and ET remains at the preset time, PT.
t3 When input IN is set to ON, the output Q follows and remains ON. ET is set to 0.
t4 When IN is set to OFF, ET, begins incrementing. When IN is OFF for a period shorter
than that specified by PT, Q remains ON.
t5 When IN is set to ON, ET is set to 0.
Example
In the following sample rung, a TOF function block is used to keep Light ON for 30,000 ms
(30 seconds) after Door_Open is set to OFF. As long as Door_Open is ON, Light remains
ON.
Timer On Delay
When the input IN transitions from OFF to ON, the timer starts timing until a specified
period of time (PT) has elapsed, then sets the output Q to ON.
Timing Diagram
IN
Q
PT PT
ET
t0 t1 t2 t3 t4
t0 When input IN is set to ON, the timer starts to measure time and the elapsed time
output ET starts to increment. The output Q remains OFF and ET continues to
increment until its value equals the preset time, PT.
t1 When ET equals PT, the output Q is goes ON, and ET remains at the preset time,
PT. Q remains ON until IN goes OFF.
t2 When IN is set to OFF, Q goes OFF and ET is set to 0.
t3 When IN is set to ON, ET starts to increment.
t4 If IN is ON for a shorter time than the delay specified in PT, the output Q remains
OFF. ET is set to 0 when IN is set to OFF.
Example
In the following sample rung, a TON function block is used to delay setting Start to ON for 1
minute (60,000 ms) after Preheat is set to ON.
Timer Pulse
When the input IN transitions from OFF to ON, the timer sets the output Q to ON for
the specified time interval, PT
Timing Diagram
IN
Q
PT PT
ET
t0 t1 t2 t3 t4 t5
t0 When input IN is set to ON, the timer starts to measure time and the elapsed time
output, ET, increments until its value equals that of the specified preset time, PT. Q is
set to 0 on until ET equals PT.
t1 When ET equals PT, Q is set to OFF. The value of ET is held until IN is set to OFF.
t2 When IN is set to OFF, ET is set to 0.
t3 When IN is set to ON, the timer starts to measure time and ET begins incrementing.
Q is set to ON.
t4 If the input is OFF for a period shorter than the input PT, the output Q remains on and
ET continues incrementing.
t5 When ET equals PT, Q is set to OFF and ET is set to 0.
Example
In the following sample rung, a TP function block is used to set Sprayers to ON for a
5-second (5000 ms) pulse.
8
Function Block Diagram (FBD) is an IEC 61131-3 graphical programming language
that represents the behavior of functions, function blocks and programs as a set of
interconnected graphical blocks.
The block types Block, Parameterized Block, and Function Block can be programmed
in FBD. The _MAIN program block can also be programmed in FBD. For details on
blocks, refer to chapter 6, “Program Organization.” For information on using the FBD
editor in the programming software, refer to the online help.
For an overview of the types of operands that can be used with instructions, refer to
“Operands for Instructions” in chapter 7.
Most functions and function blocks implemented in FBD are the same as their LD
counterparts. Instructions that are implemented differently are discussed in detail in
this chapter.
FBD has the following general differences compared to LD:
In FBD, except for timers and counters, functions and function blocks do not
have EN or ENO parameters.
In FBD, all functions and function blocks display a solve order, which is
calculated by the FBD editor.
The FBD implementation of the PACSystems instruction set includes the following
categories:
Advanced Math ...................................................................................... 8-2 0H
GFK-2222P 8-1
8
Exponential. Raises e to the value specified in IN (eIN). Calculates the inverse natural logarithm
of the IN operand.
For details, see “Advanced Math Functions” in chapter 7.
Inverse trig. Calculates the inverse cosine of the IN operand and expresses the result in radians.
For details, see “Advanced Math Functions” in chapter 7.
Inverse trig. Calculates the inverse sine of the IN operand and expresses the result in radians.
For details, see “Advanced Math Functions” in chapter 7.
Inverse trig. Calculates the inverse tangent of the IN operand and expresses the result in
radians.
For details, see “Advanced Math Functions” in chapter 7.
Square root. Calculates the square root of the operand IN and stores the result in Q.
For details, see “Advanced Math Functions” in chapter 7.
Function Description
Trig. Calculates the cosine of the operand IN, where IN is expressed in radians.
For details, see “Advanced Math Functions” in chapter 7.
EXPT Function
The Power of X (EXPT) function raises the value of input IN1 to the power specified
by the value IN2 and places the result in Q. The EXPT function operates on REAL or
LREAL input value(s) and place the result in output Q. The instruction is not carried
out if one of the following invalid conditions occurs:
■ IN1 < 0, for EXPT
■ IN1 or IN2 is a NaN (Not a Number)
Invalid operations (error cases) may yield results that are different from those in the
LD implementation of this function.
Warning
Overlapping input and output reference address ranges in
multiword functions is not recommended, as it can produce
unexpected results.
Function Description
Logical AND. Compares the bit strings IN1 and IN2 bit by bit. When the corresponding bits are
both 1, places a 1 in the corresponding location in output string Q; otherwise, places a 0 in the
corresponding location in Q.
If additional inputs (IN3 through IN8) are used, each additional bit string is compared to the
string in Q and the result is placed in Q.
For details, see page 8-6.
12H
Logical OR. Compares the bit strings IN1 and IN2 bit by bit. When a pair of corresponding bits
are both 0, places a 0 in the corresponding location in output string Q; otherwise, places a 1 in
the corresponding location in Q.
If additional inputs (IN3 through IN8) are used, each additional bit string is compared to the
string in Q and the result is placed in Q.
For details, see page 8-6.
13H
Logical XOR. Compares the bit strings IN1 and IN2 bit by bit. When a pair of corresponding
bits are different, places a 1 in the corresponding location in the output bit string Q; when a
pair of corresponding bits are the same, places a 0 in Q.
If additional inputs (IN3 through IN8) are used, each additional bit string is compared to the
string in Q and the result is placed in Q.
For details, see page 8-6.
14H
Logical NOT. Sets the state of each bit in output bit string Q to the opposite state of the
corresponding bit in bit string IN1.
For details, see page 8-8.
15H
Rotate Bits Left. Rotates all the bits in a string a specified number of places to the left.
For details, see “Bit Operation Functions” in chapter 7.
Function Description
Rotate Bits Right. Rotates all the bits in a string a specified number of places to the right.
For details, see “Bit Operation Functions” in chapter 7.
Shift Bits Left. Shifts all the bits in a word or string of words to the left by a specified number of
places.
For details, see “Bit Operation Functions” in chapter 7.
Shift Bits Right. Shifts all the bits in a word or string of words to the right by a specified number
of places.
For details, see “Bit Operation Functions” in chapter 7.
Logical AND
If both bits examined by the Logical AND function are 1, AND
places a 1 in the corresponding location in output string Q. If
either bit is 0 or both bits are 0, AND places a 0 in string Q in
that location.
Tip: You can use the Logical AND function to build masks
or screens, where only certain bits are passed (the bits
opposite a 1 in the mask), and all other bits are set to
0.
Minimum number of inputs = 2
Maximum number of inputs = 8
Logical OR
If either bit examined by the Logical OR function is 1, OR
places a 1 in the corresponding location in output string Q. If
both bits are 0, Logical OR places a 0 in string Q in that
location.
Minimum number Tips:
of inputs = 2 ■ You can use the Logical OR function to combine strings or
to control many outputs with one simple logical structure.
The Logical OR function is the equivalent of two relay
contacts in parallel multiplied by the number of bits in the
string.
■ You can use the Logical OR function to drive indicator
lamps directly from input states or to superimpose blinking
conditions on status lights.
Maximum number
of inputs = 8
Logical XOR
If the bits in the strings examined by XOR are different, a 1 is
placed in the corresponding position in the output bit string.
For each pair of bits examined, if only one bit is 1, XOR places
a 1 in the corresponding location in string Q.
Minimum number If both bits are 0, XOR places a 0 in the corresponding location
of inputs = 2 in string Q.
Tips:
If string IN2 and output string Q begin at the same
reference, a 1 placed in string IN1 will cause the
corresponding bit in string IN2 to alternate between 0 and
1, changing state with each scan as long as input is
received.
You can program longer cycles by pulsing the input to the
Maximum number function at twice the desired rate of flashing. The input
of inputs = 8 pulse should be one scan long (one-shot type coil or self
resetting timer).
You can use XOR to quickly compare two bit strings, or to
blink a group of bits at the rate of one ON state per two
scans.
XOR is useful for transparency masks.
Logical NOT
The Logical Not or Logical Invert (NOT) function sets the state of each bit in the
output bit string Q to the opposite of the state of the corresponding bit in bit string IN1.
All bits are altered on each scan that input is received, making output string Q the
logical complement of input string IN1.
Operands
Parameter Description Allowed Types Allowed Optional
Operands
Solve Order Calculated by the FBD editor. NA NA No
IN1 The input string to NOT. WORD All No
DWORD
Q The NOT's result. WORD All except No
DWORD constants and
(Must be the same variables located in
data type as IN1) %S memory
Comments
Text Block
The Text block is used to place an explanation in the program. When
you type in a comment, the first few words are displayed.
To increase the size of the text box and display more text, select the
box and drag one of the handles.
Comparison Functions
Comparison functions compare two values of the same data type or determine
whether a number lies within a specified range. The original values are unaffected.
Function Description
Compare. Compares two numbers, IN1 and IN2.
For details, see “Relational Functions” in chapter 7.
Greater Than or Equal. Tests whether one number is greater than or equal
to another.
For details, see page 8-12.
17H
Less Than or Equal. Tests whether one number is less than or equal to
another.
For details, see page 8-12.
19H
Function Description
Not Equal. Tests whether two numbers are not equal.
For details, see page 8-12.
21H
Range. Tests whether one number is within the range defined by two other
supplied numbers.
For details, see “Relational Functions” in chapter 7.
Equal, Not Equal, Greater or Equal, Greater Than, Less or Equal, Less Than
The relational functions compare input IN1 to input IN2. These operands must be the
same data type. If inputs IN1 and IN2 are equal, the function outputs the result to Q,
unless IN1 and/or IN2 is NaN (Not a Number). The following relational functions can
be used to compare two numbers:
Function Definition Relational Statement
EQ Equal IN1=IN2
NE Not Equal IN1≠IN2
GE Greater Than or IN1≥IN2
Equal
GT Greater Than IN1>IN2
LE Less Than or Equal IN1≤IN2
LT Less Than IN1<IN2
Tip: To compare values of different data types, first use conversion functions to
make the types the same.
Operands
Parameter Description Allowed Types Allowed Optional
Operands
Solve Calculated by the FBD editor. NA NA No
Order
IN1 The first value to be compared; the value on BOOL (for EQ and NE functions All except S, No
the left side of the relational statement. only), BYTE, DINT, DWORD, SA, SB, SC
INT, REAL, LREAL, UINT,
IN2 The second value to be compared; the No
WORD
value on the right side of the relational
statement. IN2 must be the same data type
as IN1.
Q If the relational statement is true, Q=1. BOOL I, Q, G, M, T, No
SA, SB, SC
Bit reference in a non-BOOL All except
variable. constants.
Control Functions
The control functions limit program execution and change the way the CPU executes
the application program.
Function Description
Do I/O Interrupt. For one scan, immediately services a specified range
of inputs or outputs. (All inputs or outputs on a module are serviced if
any reference locations on that module are included in the DO I/O
function. Partial I/O module updates are not performed.) Optionally, a
copy of the scanned I/O can be placed in internal memory, rather than
at the real input points.
For details, see “Control Functions” in chapter 7.
Function Description
Scan Set I/O. Scans the IO of a specified scan set.
For details, see “Control Functions” in chapter 7.
Suspend I/O. Suspends for one sweep all normal I/O updates, except
those specified by DO I/O instructions.
For details, see “Control Functions” in chapter 7.
Counters
Function Description
Down Counter. Counts down from a preset value. The output is ON
whenever the Current Value is ≤ 0.
The parameter that appears above the function block is a one-dimensional,
three-word array in %R, %W, %P, %L, or symbolic memory that the counter
uses to store its current value, preset value and control word.
For details, see “Counters” in chapter 7.
Function Description
Bus Read Modify Write. Uses a read/modify/write cycle to
update a data element in a module on the bus.
Other BUS_RMW functions:
BUS_RMW_DWORD
BUS_RMW_WORD
For details, see “Data Move Functions” in chapter 7.
Function Description
Communication Request. Allows the program to communicate
with an intelligent module, such as a Genius Bus Controller or
a High Speed Counter.
For details, see “Communication Request” in chapter 7.
Minimum Outputs = 2
Maximum Outputs = 8
Move Data. Copies data as individual bits, so the new location
does not have to be the same data type. Data can be moved
into a different data type without prior conversion.
For details, see page 8-18.
23H
Function Description
Move From Flat. Copies reference memory data to a UDT
variable or UDT array. Provides the option of locking the
symbolic or I/O variable memory area being written to during
the copy operation.
For details, see “Data Move Functions” in chapter 7.
Fan Out
Copies the input IN to multiple outputs.
Move Data
When the input operand, EN, is set to ON, the MOVE instruction
copies data as bits from one location in PLC memory to another.
Because the data is copied as bits, the new location does not
need to use the same type of memory area as the source. For
example, you can copy data from an analog memory area into a
discrete memory area, or vice versa.
MOV sets its output, ENO, whenever it receives data unless one of the following
occurs:
When the input, EN, is set to OFF, then the output, ENO, is set to OFF.
When the input, EN is set to ON, and the input, IN, contains an indirect reference,
and the memory of IN is out of range, then the output, ENO, is set to OFF.
The value to store at the destination Q is acquired from the IN parameter. If IN is a
variable, the value to store in Q is the value stored at the IN address. If IN is a
constant, the value to store in Q is that constant
The result of the MOVE depends on whether the data type for the Q operand is a bit
reference or a non-bit reference:
If Q is a non-bit reference, LEN (the length) indicates the number of memory
locations in which the IN value should be repeated, starting at the location
specified by Q.
If Q is a bit reference, IN is treated as an array of bits. LEN therefore indicates the
number of bits to acquire from the IN parameter to make up the stored value. If IN
is a constant, bits are counted from the least-significant bit. If IN is a variable, LEN
indicates the number of bits to acquire starting at the IN location. Regardless, only
LEN bits are stored starting at address Q.
For example, if IN was the constant value 29 and LEN is 4, the results of a MOV
operation are as follows:
Q is a WORD reference: The value 29 is repeatedly stored in locations Q, Q+1,
Q+2, and Q+3.
Q is a BOOL reference: The binary representation of 29 is 11101. Since LEN is 4,
only the four least-significant bits are used (1101). This value is stored at location
Q in the same order, so 1 is stored in Q, 1 is stored in Q+1, 0 is stored in Q+2,
and 1 is stored in Q+3.
If data is moved from one location in discrete memory to another, such as from %I
memory to %T memory, the transition information associated with the discrete
memory elements is updated to indicate whether or not the MOVE operation caused
any discrete memory elements to change state.
Note: If an array of BOOL-type data specified in the Q operand does not include all
the bits in a byte, the transition bits associated with that byte (which are not in
the array) are cleared when the Move instruction receives data.
Data at the IN operand does not change unless there is an overlap in the source and
destination—a situation that is to be avoided.
MOV Operands
Parameter Description Allowed Types Allowed Operands Optional
Solve Order Calculated by the FBD editor. NA NA No
EN Enable BOOL variable data flow, I, Q, M, T, G, S, No
SA, SB, SC, discrete
symbolic, I/O variable
Bit reference in a R, P, L, AI, AQ, W, non-
non-BOOL variable discrete symbolic, I/O
variable
IN The source of the data to copy into DINT, DWORD, INT, All. S, SA, SB, SC allowed No
the output Q. This can be either a REAL, LREAL, only for WORD, DWORD,
constant or a variable whose UINT, WORD, or bit BOOL types.
reference address is the location of reference in a non-
the first source data item to move. BOOL variable
If IN is not a constant, it must have
the same data type as the variable in
the Q parameter. The length of the
data unit depends on the data type of
the IN or Q variable.
If IN is a BOOL variable or a bit
reference, an %I, %Q, %M, or %T
reference address need not be byte-
aligned, but 16 bits beginning with
the reference address specified are
displayed online.
LEN The length of IN; the number of bits Constant Constant No
to move.
If IN is a constant and Q is BOOL:
1 ≤ LEN ≤ 16;
If IN is a constant and Q is not BOOL:
1 ≤ LEN ≤ 256.
All other cases: 1 ≤ LEN ≤ 32,767
LEN is also interpreted differently
depending on the data type of the Q
location. For details, see discussion
on page 8-18.
24H
ENO Indicates whether the operation was BOOL variable data flow, I, Q, M, T, G, Yes
successfully completed. discrete symbolic, I/O
If ENO = ON (1), the operation was variable
initiated. Results of the operation are Bit reference in a I, Q, M, T, G, R, P, L, AI,
indicated in the FT output. non-BOOL variable AQ, W, non-discrete
If ENO = OFF (0), the operation was symbolic, I/O variable
not performed. If EN was ON, the FT
output indicates an error condition. If
EN was OFF, FT is not changed.
Math Functions
Your program may need to include logic to convert data to a different type before
using a Math or Numerical function. The description of each function includes
information about appropriate data types. The “Conversion Functions” section on
page 8-34 explains how to convert data to a different type.
25H
Function Description
Addition. Adds two or up to eight numbers.
For details, see page 8-25.
26H
Function Description
Subtraction. Subtracts one or up to seven numbers from the input IN1
and places the result in an output location.
For details, see page 8-30.
31H
* To avoid overflows when multiplying or dividing 16-bit numbers, use the conversion functions
described on page 8-34 to convert the numbers to a 32-bit format.
32H
The output is calculated when the instruction is performed without overflow, unless an
invalid operation occurs.
Overflow
If an operation on integer operands results in overflow, the output value wraps around.
Examples:
If the ADD operation, 32767 + 1, is performed on signed integer operands, the
result is -32768
If the SUB operation, -32767 – 1, is performed on signed integer operands,
the result is 32767
If an ADD_UINT operation is performed on 65535 + 16, the result is 15.
Add
Adds the operands IN1 and IN2 … IN8 and stores the sum in Q.
IN1 … IN8 and Q must be of the same data type.
The result is output to Q when ADD is performed without
overflow, unless one of the following invalid conditions occurs:
■ (+ ∞)
■ IN1 and/or IN2 … IN8 is NaN (Not a Number).
If an ADD operation results in overflow, the result wraps around.
For example:
■ If an ADD_DINT, ADD_INT or ADD_REAL operation is
performed on 32767 + 1, Q will be set to -32768.
■ If an ADD_UINT operation is performed on 65535 + 16,
Q will be set to 15.
Divide
Divides the operand IN1 by the operand IN2 of the same data type as
IN1 and stores the quotient in the output variable assigned to Q, also
of the same data type as IN1 and IN2.
The result is output to Q when DIV is performed without overflow,
unless one of the following invalid conditions occurs:
■ 0 divided by 0 (Results in an application fault.)
■ IN1 and/or IN2 is NaN (Not a Number).
If an overflow occurs, the result wraps around.
Notes:
■ DIV rounds down; it does not round to the closest integer. For example,
24 DIV 5 = 4.
■ Be careful to avoid overflows.
Modulus
Divides input IN1 by input IN2 and outputs the remainder of the
division to Q.
All three operands must be of the same data type. The sign of the
result is always the same as the sign of input parameter IN1.
Output Q is calculated using the formula:
Q = IN1-((IN1 DIV IN2) * IN2)
where DIV produces an integer number.
The result is output to Q unless one of the following invalid
conditions occurs:
■ 0 divided by 0 (Results in an application fault.)
■ IN1 and/or IN2 is NaN (Not a Number)
Multiply
Multiplies two through eight operands (IN1 … IN8) of the same
data type and stores the result in the output variable assigned to
Q, also of the same data type.
The output is calculated when the function is performed without
overflow, unless an invalid operation occurs.
If an overflow occurs, the result wraps around.
Negate
Multiplies a number by –1 and places the result in the output
location, Q.
Operands
Parameter Description Allowed Types Allowed Operands Optional
Solve Order Calculated by the FBD editor. NA NA No
IN The value to be negated. INT, DINT, REAL All except S, SA, SB, No
SC
Q The result, -1(IN) INT, DINT, REAL All except S, SA, SB, No
variable SC and constant
Subtract
Subtracts the operands IN2 …IN8 from the
operand IN1 and stores the result in the
output variable assigned to Q.
The calculation is carried out when SUB is
performed without overflow, unless an invalid
operation occurs.
If a SUB operation results in overflow, the
result wraps around. For example:
■ If a SUB_DINT, SUB_INT or SUB_REAL
operation is performed on 32768 - 1, Q
will be set to -32767.
If a SUB_UINT operation results in a
negative number, Q wraps around. (For
example, a result of –1 sets Q to 65535.)
Timers
This section describes the PACSystems timing functions that are implemented in the
FBD language.
Timer On Delay. When the input IN transitions from OFF to ON, the
timer starts timing until a specified period of time has elapsed, then
sets the output Q to ON.
For details, see “Timers” in chapter 7.
Timer Pulse. When the input IN transitions from OFF to ON, the timer
sets the output Q to ON for a specified time interval.
For details, see “Timers” in chapter 7.
Function Description
Convert to DINT (32-bit signed integer)
BCD8_TO_DINT: Converts BCD8 to DINT.
UINT_TO_DINT: Converts UINT to DINT.
For details, see “Conversion Functions” in chapter 7.
Function Description
Truncate
Rounds a REAL (32-bit signed real or floating-point) number down to a DINT number
For details, see “Conversion Functions” in chapter 7.
Rounds a REAL (32-bit signed real or floating-point) number down to an INT number
For details, see “Conversion Functions” in chapter 7.
Operands
Parameter Description Allowed Allowed Operands Optional
Types
Solve Order Calculated by the FBD editor. NA NA No
IN The value to convert to INT. WORD All except S, SA, SB, and SC No
Q The INT equivalent value of the INT All except S, SA, SB, SC and No
original value in IN. constant
Operands
Parameter Description Allowed Types Allowed Operands Optional
Solve Order Calculated by the FBD editor. NA NA No
IN The value to convert to UINT. WORD All except S, SA, SB, and No
SC
Q The UINT equivalent value of the original UINT All except S, SA, SB, SC No
input value in IN. and constant
Operands
Parameter Description Allowed Types Allowed Operands Optional
Solve Order Calculated by the FBD editor. NA NA No
IN The value to convert to DINT. DWORD All except S, SA, SB, and No
SC
Q The DINT equivalent value of the original UINT All except S, SA, SB, SC No
input value in IN. and constant
The output data can be used directly as input for another program function. The
function passes data to Q unless the data is out of range.
Operands
Parameter Description Allowed Types Allowed Operands Option
al
Solve Calculated by the FBD editor. NA NA No
Order
IN The value to convert to WORD. INT or UINT, depending All except S, SA, SB, No
on function and SC
Q The WORD equivalent value of the original WORD All except S, SA, SB, No
value in IN. 0 ≤ Q ≤ 65,535. SC and constant
Operands
Parameter Description Allowed Types Allowed Operands Optional
Solve Calculated by the FBD editor. NA NA No
Order
IN The value to convert to DWORD. DINT All except S, SA, SB, No
and SC
Q The DWORD equivalent value of the original DWORD All except S, SA, SB, No
value in IN. 0 ≤ Q ≤ 4,294,967,295. SC and constant
9
Use a Service Request function to request one of the following control system services:
Service Request Description Page
SVC_REQ 1 Change/read constant sweep timer 9-0H5 0H
SVC_REQ 3 Change controller communications window mode and timer value 9-2H8 2H
SVC_REQ 4 Change backplane communications window mode and timer value 9-3H9 3H
SVC_REQ 5 Change background task window mode and timer value 9-41
H 0
4H
SVC_REQ 43 Disable data transfer copy in backup unit (Hot Standby Redundancy) *
GFK-2222P 9-1
9
*For information on Service Requests used in CPU HSB redundancy applications, refer to the
PACSystems Hot Standby CPU Redundancy User’s Guide, GFK-2308. For non-HSB applications,
refer to TCP/IP Ethernet Communications for PACSystems, GFK-2224.
Ladder Diagram
When SVC_REQ receives power flow, it requests the CPU to perform the
special service identified by the FNC operand.
Parameters for SVC_REQ are located in the parameter block, which begins
at the reference identified by the PRM operand. The number of 16-bit
references required depends on the type of special PLC service being
requested. The parameter block is used to store both the function's inputs
and outputs.
SVC_REQ passes power flow unless an incorrect function number, incorrect parameters,
or out-of-range references are specified. Specific SVC_REQ functions may have
additional causes for failure.
Because the service request continues to be invoked each time power flow is enabled to
the function, additional enable/disable logic preceding the request may be necessary,
depending upon the application. (For example, repeated calling of SVC_REQ 24 would
continually reset a module, probably not the intended behavior.) In many cases a
transition contact or coil will be sufficient. Alternatively, you could use more complex
logic, such as having the function contained within a block that is only called a single
time.
Operands
Note: Indirect referencing is available for all register references (%R, %P, %L, %W,
%AI, and %AQ).
Operand Data Type Memory Area Description
FNC INT variable or All except %S - %SC Function number; Service Request number. The
constant constant or reference that identifies the requested
service.
PRM WORD variable All except flow, %S - %SC The first WORD in the parameter block for the
and constant requested service. Successive 16-bit locations store
additional parameters.
Example
When the enabling input %I0001 is ON, SVC_REQ function number 7 is called, with the
parameter block starting at %R0001. If the operation succeeds, output coil %Q0001 is set
ON.
Operands
Note: Indirect referencing is available for all register references (%R, %P, %L, %W,
%AI, and %AQ).
Parameter Description Allowed Types Allowed Operands Optional
Solve Order Calculated by the FBD editor. NA NA No
EN Enable input. When set to ON, the SVC_REQ BOOL data flow, I, Q, M, T, G, S, SA, No
executes SB, SC, discrete symbolic, I/O
variable
Bit reference in I, Q, M, T, G, R, P, L, AI, AQ,
a non-BOOL W, non-discrete symbolic, I/O
variable variable
FNC Function number; Service Request number. INT, DINT, All except %S - %SC No
The constant or variable that identifies the UINT, WORD, You can use data flow only if
requested service. DWORD the parameter block requires
only one WORD
If you use a symbolic variable
or an I/O variable, ensure that
its Array Dimension 1 property
is set to a value large enough
to contain the entire
parameter block.
PRM The first word in the parameter block for the INT, DINT, All except flow, %S - %SC No
requested service. Successive 16-bit UINT, WORD, and constant
locations store additional parameters. DWORD
ENO Set to ON unless an incorrect function BOOL data flow, I, Q, M, T, G, non- Yes
number, incorrect parameters, or out-of-range discrete symbolic, I/O variable
references are specified. Specific SVC_REQ
Bit reference in I, Q, M, T, G, R, P, L, AI, AQ,
functions may have additional causes for
a non-BOOL W, non-discrete symbolic, I/O
failure.
variable. variable
To enable Constant Sweep mode and use the old timer value:
Enter SVC_REQ 1 with this parameter block:
Address 1
Address + 1 0
If the timer value does not already exist, entering 0 causes the function to set the OK
output to OFF.
To change the timer value without changing the selection for sweep mode state:
Enter SVC_REQ 1 with this parameter block:
Address 2
Address + 1 New timer value
To read the current timer state and value without changing either:
Enter SVC_REQ 1 with this parameter block:
Address 3
Address + 1 ignored
Output
SVC_REQ 1 returns the timer state and value in the same parameter block references:
Address 0 = Normal Sweep
1 = Constant Sweep
Address + 1 Current timer value
If the word address + 1 contains the hexadecimal value FFFF, no timer value has been
programmed.
Example
If contact OV_SWP is set, the Constant Sweep Timer is read, the timer is increased by
two milliseconds, and the new timer value is sent back to the CPU. The parameter block
is at location %R3050. The example logic uses discrete internal coil %M0001 as a
temporary location to hold the successful result of the first rung line. On any sweep in
which OV_SWP is not set, %M00001 is turned off.
Output
Address Window High Byte Low Byte
address Controller Communications Window Mode Value in ms
address+1 Backplane Communications Window Mode Value in ms
address+2 Background Window Mode Value in ms
Mode Values
Mode Name Value Description
Limited Mode 0 The execution time of the window is limited to its respective
default value or to a value defined using SVC_REQ 3 for the
controller communications window or SVC_REQ 4 for the
systems communications window. The window will terminate
when it has no more tasks to complete.
Constant Mode 1 Each window will operate in a Run to Completion mode, and the
CPU will alternate among the three windows for a time equal to
the sum of each window's respective time value. If one window
is placed in Constant mode, the remaining two windows are
automatically placed in Constant mode. If the CPU is operating
in Constant Window mode and a particular window's execution
time is not defined using the associated SVC_REQ function, the
default time for that window is used in the constant window time
calculation.
Run to Completion Mode 2 Regardless of the window time associated with a particular
window, whether default or defined using a service request
function, the window will run until all tasks within that window are
completed.
Example
When %Q00102 is set, the CPU places the current time values of the windows in the
parameter block starting at location %R0010.
Example
When enabling input %I00125 transitions on, the controller communications window is
enabled and assigned a value of 25 ms. When the contact transitions off, the window is
disabled. The parameter block is in global memory location %P00051.
Example
When enabling output %M0125 transitions on, the mode and timer value of the
Backplane Communications window is read. If the timer value is greater than or equal to
25 ms, the value is not changed. If it is less than 25 ms, the value is changed to 25 ms. In
either case, when the rung completes execution the window is enabled. The parameter
block for all three windows is at location %R5051. Since the mode and timer for the
Backplane Communications window is the second value in the parameter block returned
from the Read Window Values function (SVC_REQ 2), the location of the existing window
time for the Backplane Communications window is in the low byte of %R5052.
Example
When enabling contact #FST_SCN is set in the first scan, the MOVE function establishes
a value of 20ms for the Background task window, using a parameter block beginning at
%P00050. Later in the program, when input %I00500 transitions on, the state of the
Background task window toggles on and off. The parameter block for all three windows is
at location %P00051. The time for the Background task window is the third value in the
parameter block returned from the Read Window Values function (function #2); therefore,
the location of the existing window time for the Background window is %P00053.
Example
When enabling contact #FST_SCN is set, the parameter blocks for the checksum task
function are built. Later in the program, when input %I00137 transitions on, the number of
words being checksummed is read from the CPU operating system. This number is
increased by 16, with the results of the ADD_UINT function being placed in the “hold new
count for set” parameter. The second service request block requests the CPU to set the
new word count.
The example parameter blocks are located at address %L00150. They have the following
contents:
%L00150 0 = read current count
%L00151 hold current count
%L00152 1 = set current count
%L00153 hold new count for set
In any format:
■ Hours are stored in 24-hour format.
■ Day of the week is a numeric value ranging from 1 (Sunday) to 7 (Saturday).
Value Day of the Week
1 Sunday
2 Monday
3 Tuesday
4 Wednesday
5 Thursday
6 Friday
7 Saturday
POSIX
The POSIX format of the Time-of-Day clock uses two signed 32-bit integers (two DINTs)
to represent the number of seconds and nanoseconds since midnight January 1, 1970.
Reading the clock in POSIX format might make it easier for your application to calculate
time differences. This format can also be useful if your application communicates to other
devices using the POSIX time format. To read and/or change the date and time using
POSIX format, enter SVC_REQ 7 with this parameter block:
Parameter Block Format Address Example: December 1, 2000 at 12 noon
1 = change or 0 = read address 0
4 (POSIX format) address+1 4
Seconds (LSW) address+2 975,672,000
(MSW) address+3
Nanoseconds (LSW) address+4 0
(MSW) address+5
The PACSystems CPU’s maximum POSIX clock value is F48656FE (hexadecimal)
seconds and 999,999,999 (decimal) nanoseconds, which corresponds to December 31st,
2099 at 11:59 pm. This is the maximum POSIX value that SVC_REQ 7 will accept for
changing the clock. This is also the maximum POSIX value SVC_REQ 7 will return once
the Time-Of-Day clock passes this date.
If SVC_REQ 7 receives an invalid POSIX time to write to the clock, it does not change
the Time-Of-Day clock and disables its power-flow output.
Note: When reading the PACSystems CPU clock in POSIX format, the data returned is
not easily interpreted by a human viewer. If desired, it is up to the application
logic to convert the POSIX time into year, month, day of month, hour, and
seconds.
SVC_REQ 7
In this example, the time of day is set to 12:00 pm without changing the current year,
BCD format requires six contiguous memory locations for the parameter block.
Rung 1 sets up the new time of day in two-digit year BCD format. It writes the value 4608
(equivalent to 12 00 BCD) to NOON and the value 0 to MIN_SEC.
Rung 2 requests the current date and time using the parameter block located at
%P00300.
Rung 3 moves the new time value into the parameter block starting at R00300. It uses
AND and ADD operations to retrieve the current clock value from %P00303 and replace
the hours, minutes and seconds portion of the value with the values in NOON and
MIN_SEC.
Rung 4 uses the parameter block beginning at %R00300 to set the new time.
Warning
Be sure that resetting the watchdog timer does not adversely affect
the controlled process.
SVC_REQ 8 has no associated parameter block; however, you must still specify a
dummy parameter, which SVC_REQ 8 will not use.
Example
In the following LD example, power flow through enabling output %Q0127 or input
%I1476 or internal coil %M00010 causes the watchdog timer to be reset.
Output
The parameter block is an output parameter block only; it has a length of one word.
address time since start of scan
Example
The elapsed time from the start of the scan is read into location %R00200. If it is greater
than 100ms, internal coil %M0200 is turned on.
Note: Higher resolution (in nanoseconds) can be obtained by using SVC_REQ 51,
described on page 9-53.
34H
Output
The output parameter block has a length of four words. It returns eight ASCII characters:
the target name (from one to seven characters) followed by null characters (00h). The
last character is always a null character. If the target name has fewer than seven
characters, null characters are appended to the end.
Address Low Byte High Byte
Address character 1 character 2
Address+1 character 3 character 4
Address+2 character 5 character 6
Address+3 character 7 00
Example
When enabling input %I0301 goes ON, register location %R0099 is loaded with the value
10, which is the function code for the Read Target Name function. The program block
READ_ID is then called to retrieve the target name. The parameter block is located at
address %R0100.
Output
The output parameter block has a length of four words. It returns eight ASCII characters:
the PLC ID (from one to seven characters) followed by null characters (00h). The last
character is always a null character
If the PLC ID has fewer than seven characters, null characters are appended to the end.
Address Low Byte High Byte
address character 1 character 2
address+1 character 3 character 4
address+2 character 5 character 6
address+3 character 7 00
Example
When enabling input %I0303 is ON, register
location %R0099 is loaded with the value 11,
which is the function code for the Read PLC ID
function. The program block READ_ID is then
called to retrieve the ID. The parameter block
is located at address %R0100.
Output
The output parameter block has a length of one word.
address 1 = run/disabled
2 = run/enabled
Example
When contact V_I00102 is ON, the CPU run state is read into location %R4002. If the
state is Run/Disabled, the CALL function calls program block DISPLAY.
Example
When a “Loss of I/O Module” fault occurs, the #LOS_IOM contact turns ON and
SVC_REQ 13 executes.
In this example, if the Shut Down CPU function executes, the JUMPN to the end of the
program prevents the logic that follows the JUMPN from executing in the current sweep.
Example
When inputs %I0346 and %I0349 are on, the controller fault table is cleared. When inputs
%I0347 and %I0349 are on, the I/O fault table is cleared. When input %I0348 is on and
input %I0349 is on, both are cleared. Positive transition coils V_M00001 and V_M00002
are used to trigger these service requests to prevent the fault tables from being cleared
multiple times.
The parameter block for the controller fault table is located at %R0500; for the I/O fault
table the parameter block is located at %R0550.
Note: Both parameter blocks are set up elsewhere in the program.
Long/Short Value
The first byte (low byte) of word address +1 contains a number that indicates the length
of the fault-specific data in the fault entry. Possible values are as follows:
PLC extended and non extended fault tables 00 = 8 bytes (short) 01 = 24 bytes (long)
I/O extended and non extended fault tables 02 = 5 bytes (short) 03 = 21 bytes (long)
Note: PACSystems CPUs always return the Long values for both extended and non-
extended formats.
Example 1
When inputs %I0250 and %I0251 are both on, the first
Move function places a zero (read controller fault table) into
the parameter block for SVC_REQ 15. When input %I0250
is on and input %I0251 is off, the Move instruction instead
places a one (read I/O fault table) in the SVC_REQ
parameter block. The parameter block is located at location
%R0600.
Example 2
The CPU is shut down when any fault occurs on an I/O module
except when the fault occurs on modules in rack 0, slot 9 and in rack
1, slot 9. If faults occur on these two modules, the system remains
running. The parameter for "table type" is set up on the first scan. The
contact IO_PRES, when set, indicates that the I/O fault table contains
an entry. The CPU sets the normally open contact in the scan after
the fault logic places a fault in the table. If faults are placed in the
table in two consecutive scans, the normally open contact is set for
two consecutive scans.
The example uses a parameter block located at %R0600. After the
SVC_REQ function executes, the second, third, and fourth words of
the parameter block identify the I/O module that faulted:
High Byte Low Byte
%R0600 1
%R0601 reference long/short
address
memory type
%R0602 reference address offset
%R0603 slot number rack number
%R0604 block (bus I/O bus no.
address)
%R0605 point address
%R0606 fault data
In the program, the EQ_INT blocks compare the rack/slot address in
the table to hexadecimal constants. The internal coil %M0007 is
turned on when the rack/slot where the fault occurred meets the
criteria specified above. If %M0007 is on, its normally closed contact
is off, preventing the shutdown. Conversely, if %M0007 is off because
the fault occurred on a different module, the normally closed contact
is on and the shutdown occurs.
Output
address Seconds from power on (low order)
address+1 Seconds from power on (high order)
address+2 100 microsecond ticks
The first two words are the elapsed time in seconds. The last word is the number of 100
microsecond ticks in the current second.
The resolution of the PLC's elapsed time clock is 100 microseconds. The overall
accuracy of the elapsed time clock is ± 0.01%. The accuracy of an individual sample of
the elapsed time clock is approximately 105 microseconds.
Warning
The SVC_REQ instruction is not protected against operating system
and user interrupts. The timing and length of these interrupts are
unpredictable. The clock sample returned by SVC_REQ 16 can
sometimes be much more than 105 microseconds old by the time
execution is returned to the LD logic
Example
The following logic is used in a block that is called infrequently. The screen shot was
taken between calls to the block. The logic displayed calculates the number of seconds
that have elapsed since the last time the block was called. It performs the final operation
on rung 4 by subtracting the time obtained by SVC_REQ 16 the last time the block was
called (vetum) from the time currently obtained by SVC_REQ 16 (novum) and storing the
calculated value in the variable named diff.
On rung 2, SVC_REQ 16 returns three WORDs, stored in the 3-WORD array tempus.
The first two WORDs (16-bit values) are moved to a DINT (a 32-bit value). This move
amounts to a rough data type conversion that ignores the fact that the DINT type is
actually a signed value. Despite that, the subsequent calculations are correct until the
time since power-on reaches approximately 50 years. The DINT is converted to REAL to
yield the number of whole seconds elapsed since power-on, stored in variable sec. On
rung 3, the third word returned by SVC_REQ 16, tempus[2], is converted to REAL. This is
the number of 100 microsecond ticks. To obtain a fraction of a second, stored in the
variable fractio, the value is divided by 10,000. On rung 4, sec and fractio are added to
express the exact number of seconds elapsed since power-on, and this value is stored in
the variable novum. On rung 1, the previous value of novum was saved as vetum, the
exact number of seconds elapsed since power-on the last time the block was called. The
last instruction on the fourth rung subtracts vetum from novum to yield the number of
seconds that have elapsed since the last time the block was called.
Note: Higher resolution (in nanoseconds) can be obtained by using SVC_REQ 50,
described on page 9-51.
35H
Example 1
In this example, interrupts from input %I00033 are masked. The following values are
moved into the parameter block, which starts at %P00347, on the first scan:
address %P00347 1 Interrupts from input are masked.
address + 1 %P00348 70 Input type is %I.
address + 2 %P00349 33 Offset is 33.
Example 2
When %T00001 transitions on, alarm interrupts from input %AI0006 are masked. The
parameter block at %R00100 is set up on the first scan.
Output
address 0 = No forced values are set
1 = Forced values are set
Example
SVC_REQ reads the status of I/O forced values into location %R1003. If the returned
value in %R1003 is 1, there is a forced value, and EQ INT turns the %T0001 coil ON.
Example
When input %I00157 transitions to on, the RUN DISABLE mode is set. When the
SVC_REQ function successfully executes, coil %Q00157 is turned on. When %Q00157
is on and register %R00099 is greater than zero, the mode is changed to RUN ENABLE
mode. When the SVC_REQ successfully executes, coil %Q00157 is turned off.
Non-Extended Formats
For non-extended formats, SVC_REQ 20 requires 693 registers available.
For the non-extended formats, the returned data for each fault consists of 21 words (42
bytes). This request returns 16 controller fault table entries or 32 I/O fault table entries, or
the actual number of faults if it is fewer. If the fault table read is empty, no data is
returned.
The following table shows the return format of a controller fault table entry and an I/O
fault table entry.
Start of next fault output parameter address+42 Start of next fault output parameter
block block
* The Long/Short indicator in the low byte of Address + 21 specifies the amount of fault data
present in the fault entry:
Fault Table Long/Short Value Fault Data Returned
PLC 00 8 bytes of fault extra data present in the fault entry
01 24 bytes of fault extra data
I/O 02 5 bytes of fault extra data
03 21 bytes of fault extra data
Extended Formats
Each extended format request can read a maximum of 64 faults, or the size of the fault
table if it contains less than 64 faults.
For extended formats (Read Extended Controller Fault Table (80h), or Read Extended
I/O Fault Table (81h)), the PLC calculates the number of entries being read. You must
ensure that enough registers are available to receive the amount of fault entries
requested. If the amount of data requested exceeds the registers available, the CPU
returns a fault indicating that reference memory is out of range.
The total size of the fault table for the extended fault format is
Header Size + ((# fault entries) * (size of fault entry))
For Read Extended Controller Fault Table (80h) and Read Extended I/O Fault Table
(81h), the returned data for each fault entry consists of 23 words (46 bytes).
type
Unused Unused address+38 Reference address offset
Slot Rack address+39 Slot Rack
Task address+40 Bus address I/O bus number
(block)
Fault action Fault group address+41 point
Error code address+42 Fault action Fault group
address+43 Fault type Fault category
Fault extra data address+44 Fault extra data Fault description
address+45— Fault extra data
address+54
Minutes Seconds address+55— Minutes Seconds
address+58
Day of month Hour Day of month Hour
(time stamp in BCD
Year Month format) Year Month
Milliseconds Milliseconds
Not used address+59 Not used
SVC_REQ 20 Examples
Example 1: Non-Extended Format
When Read_PLC transitions on, a value of 0 is moved to the parameter block, which is
located at %R00500, and the controller fault table is read. When Read_IO transitions on,
a value of 1 is moved to the parameter block and the I/O fault table is read. When the
SVC_REQ function successfully executes, coil OK is turned on.
“Application Msg:” string. (If the error code is greater than 2047, the function is ignored
and its output is set to OFF.)
If the first byte of text is zero, then only “Application Msg:” will display in the fault
description. The next 1-23 bytes will be considered binary data for user data logging. This
data is displayed in the controller fault table.
Note: When a user-defined fault is displayed in the controller fault table, a value of
-32768 (8000 hex) is added to the error code. For example, the error code 5 will
be displayed as -32763.
Example
The value passed to IN1 is the fault error code. The value passed in, 16x0057,
represents an error code of 87 decimal and will appear as part of the fault message. The
values of the next inputs give the ASCII codes for the text of the error message. For IN2,
the input is 2D45. The low byte, 45, decodes to the letter E and the high byte, 2D,
decodes to -. Continuing in this manner, the string continues with S T O P O and N. The
final character, 00, is the null character that terminates the string. In summary, the
decoding yields the string message E_STOP ON.
Example
When input %I00055 transitions on, timed interrupts are masked.
Output
When a RUN MODE STORE is active, the program checksums may not be valid until the
store is complete. To determine when checksums are valid, three flags (one each for
Program Block Checksum, Master Program Checksum, and Master Configuration
Checksum) are provided at the beginning of the output parameter block.
Address Description
Address Program Checksum Valid (0 = not valid, 1 = valid)
Address + 1 Master Program Checksum Valid (0 = not valid, 1 = valid)
Address + 2 Master Configuration Checksum Valid (0 = not valid, 1 = valid)
Address + 3 Number of LD/SFC Blocks (including _MAIN)
Address + 4 Size of User Program in Bytes (DWORD data type)
Address + 6 Program Set Additive Checksum
Address + 7 Program CRC Checksum (DWORD data type)
Address + 9 Size of Configuration Data in Kbytes
Address + 10 Configuration Additive Checksum
Address + 11 Configuration CRC Checksum (DWORD data type)
Address + 13 high byte: always zero
low byte: Currently Executing Block’s Additive Checksum
Address + 14 Currently Executing Block’s CRC Checksum
Example – SVC_REQ 23
When the timer using registers
%P00013 through %P00015
expires, the checksum read is
performed. The checksum data
returns in registers %P00016
through %P00030. The master
program checksum in registers
%P00022 and %P00023 (the
program checksum is a DWORD
data type and occupies two
adjacent registers) is compared
with the last saved master
program checksum. If these are
different, coil %M00055 is
latched on. The current master
program checksum is then saved
in registers %P00031 and %P00032.
Note: It is important to invoke SVC_REQ #24 for a given module for only one sweep at
a time. Each time this function executes, the target module will be reset
regardless of whether it has finished starting up from a previous reset.
After sending a SVC_REQ #24 to a module, you must wait a minimum of 5
seconds before sending another SVC_REQ #24 to the same module. This
ensures that the module has time to recover and complete its startup.
Example
This example resets the
module in rack 0/slot 2. In
rung 1, when contact
%I00200 is closed, the
positive transition coil sets
%I00250 to ON for one
sweep. The MOVE_WORD
instruction in rung 2
receives power flow and
moves the value 2 into
%R00500. The SVC_REQ
function in rung 3 then
receives power flow and
resets the module indicated
by the rack/slot value in
%R00500.
Example
When the coil TEST transitions from OFF to ON, SVC_REQ 25 executes to disable the
inclusion of EXE blocks in the background checksum calculation. When coil TEST
transitions from ON to OFF, the SVC_REQ executes to again include EXE blocks in the
background checksum calculation.
Example of SVC_REQ 29
When input %I0251 is ON, the elapsed power-down time is placed into the parameter
block that starts at %R0050. The output coil (%Q0001) is turned on.
%I0251 %Q0001
SVC_
REQ
CONST
00029 FNC
%R0050 PARM
Example – SVC_REQ 32
Interrupts from the high speed counter module whose starting point reference address is
%I00065 will be suspended while the CPU solves the logic of the second rung. Without
the Suspend, an interrupt from the HSC could occur during execution of the third rung
and %T00006 could be set while %R000001 has a value other than 3,400. (%AI00001 is
the first non-discrete input reference for the High Speed Counter.)
Note: I/O interrupts, unless suspended or masked, can interrupt the execution of a
function block. The most often used application of this Service Request is to
prevent the effects of the interrupts for diagnostic or other purposes.
Example
In the following LD example, when the “Idle” contact passes power flow, the next Output
and Input Scan are skipped.
Output
address Seconds from power on (low order)
address+1 Seconds from power on (high order)
address+2 nanosecond ticks (low order)
address+3 nanosecond ticks (high order)
The first two words are the elapsed time in seconds. The second two words are the
number of nanoseconds elapsed in the current second.
The resolution of the PLC's elapsed time clock is 100 microseconds. The overall
accuracy of the elapsed time clock is ± 0.01%. The accuracy of an individual sample of
the elapsed time clock is approximately 105 microseconds.
Warning
The SVC_REQ instruction is not protected against operating system
and user interrupts. The timing and length of these interrupts are
unpredictable. The clock sample returned by SVC_REQ 50 can
sometimes be much more than 105 microseconds old by the time
execution is returned to the LD logic
Example – SVC_REQ 50
The following logic is used in a block that is called once in a while. The screen shot was
taken between calls to the block. The second rung of logic calculates the number of
seconds that have elapsed since the last time the block was called. The third rung
calculates the number of nanoseconds to be added to, or subtracted from, the number of
seconds. The first rung saves the previous value of novum[0] and novum[1] into vetum[0]
and vetum[1] before the second rung of logic places the current time values in novum[0]
and novum[1].
Output
The parameter block is an output parameter block only; it has a length of two words.
address time (nanoseconds) since start of scan – low order
address+1 time (nanoseconds) since start of scan – high order
Example
The elapsed time from the start of the scan is read into locations %R00200 and
%R00201 if it is greater than 10,020ns, internal coil %M0200 is turned on.
Operation
Discrete Memory
Discrete memory can be read as individual bits or as bytes. For more information,
see Memory Type Codes” on page 9-56. 38H
If a discrete memory destination is forced, the forced value remains intact in CPU
memory even though the count in word 10 (address + 10) indicates that all the data was
read and transferred.
If a memory location has an associated transition bit and SVC_REQ 56 causes a
transition on that value, the transition bit is set.
Parameter Block
address+0 Memory type. See “Memory Type Codes” on page 9-56. 39H
address+1 The zero-based offset N to read from nonvolatile storage. Contains the complete offset for any
memory area except %W, which also requires the use of address + 2 for offsets greater than 65,535.
address+2
▪ For %I, %Q, %M, %T, and %G memory in byte mode, N = (Ra - 1) / 8, where Ra = one-based
reference address. For example, to read from the one-based bit reference address %T33, enter
the byte offset 4: (33 - 1) / 8 = 4.
▪ For %W, %R, %AI, and %AQ memory, and for %I, %Q, %M, %T, and %G memory in bit mode, N
= Ra - 1. For example, to read from the one-based reference address %R200, enter the zero-
based reference offset 199; to read from %I73 in bit mode, enter offset 72. For memory in bit
mode, the offset must be set on a byte boundary, that is, a number exactly divisible by 8: 0, 8, 16,
24, and so on.
address+3 Length. The number of items to read from nonvolatile storage beginning at the reference address
calculated from the offset defined at [address + 1 and address + 2]. The length can be one of the
following:
Description Valid range
The number of words (16-bit registers) to read 1 through 32 words
from %W, %R, %AI, or %AQ nonvolatile storage
The number of bytes to read from %I, %Q, %M, 1 through 64 bytes
%T, or %G in byte mode nonvolatile storage
The number of bits to read from %I, %Q, %M, 1 through 512 bits in
%T, or %G in bit mode nonvolatile storage increments of 8 bits
The value must reside in the low byte of address + 3. The high byte must be set to zero.
address + 4 Destination memory. The CPU memory area to write the read data to. This does not need to be the
same memory area as specified at [address]. Writing to a different memory area enables you to
compare the values that were already in the CPU with the values read from nonvolatile storage.
address+5 The zero-based offset N in CPU memory to start writing the read data to. Address + 5, the least
significant word, contains the complete offset for any memory area except %W, which also requires
address+6
the use of address + 6 for offsets greater than 65,535.
▪ For %I, %Q, %M, %T, and %G memory in byte mode, N = (Ra - 1) / 8, where Ra = one-based
reference address. For example, to write to the one-based bit reference address %T33, enter the
byte offset 4: (33 - 1) / 8 = 4.
▪ For %W, %R, %AI, and %AQ memory, and for %I, %Q, %M, %T, and %G memory in bit mode, N
= Ra - 1. For example, to write to the one-based reference address %R200, enter the zero-based
reference offset 199; to write to %I73 in bit mode, enter offset 72.
address+7 ▪ When bit 0 is set to 1, storage disabled conditions are ignored. A read is allowed even if the logic
in RAM has changed since nonvolatile storage was read or written.
▪ Bits 1 through 15 must be set to zero; otherwise, the read fails.
address+8 Reserved. Must be set to zero; otherwise, the read fails.
address+9 Response status. The status read from nonvolatile storage. The low byte contains the major error
code; the high byte contains the minor error code.
For definitions, see “Response Status Codes” on page 9-57. 40H
SVC_REQ 56 Example
The following LD logic reads ten continuous bytes written to nonvolatile storage from
%G1—%G80 into %G193—%G273. The value applied to IN1, 56, selects byte mode.
The parameter block starts at %R00040. The response words are returned to %R00049
and %R00050.
SVC_REQ 57 scans the nonvolatile storage to find the most recent values stored for the
specified range. If it finds no values for the range or the most recent stored values are
different, the new values are written to nonvolatile storage.
You can write up to 32 words (64 bytes) inclusively per invocation of SVC_REQ 57. Each
invocation requires 4 words of command data (8 bytes). A 1-byte write requires 9 bytes
whereas a 64-byte write requires 72 bytes. You can generally make the most efficient use
of nonvolatile storage by transferring data in 64-byte increments. See, however,
“Fragmentation” on page 9-60. 42H
Erase Cycles
The flash component on the PACSystems CPU is rated for 100K erase cycles. Erase
cycles occur under the following conditions:
■ Write to flash is commanded from the programmer.
■ Clear flash operation.
■ Flash compaction after a power cycle when flash memory allotted for SVC_REQ 57
has become full.
Operation
Discrete memory
Discrete memory can be written to as individual bits or as bytes. For more information,
see Address.
Forced and transition information is not written to nonvolatile storage.
Retentiveness
Writing values to nonvolatile storage for non-retentive memory such as %T does not
make the memory retentive. For example, all values stored to %T memory are set to zero
on power-up or a stop to run transition. You can, however, read such values from storage
after power-up or stop to run transition by using SVC_REQ 56.
Error checking
When writing to nonvolatile storage, error checking is provided to ensure that logic and
the Hardware Configuration (HWC) in nonvolatile memory match the logic and HWC in
PACSystems RAM.
Fragmentation
Due to the nature of the media in PACSystems CPUs, writes may produce fragmentation,
which causes the loss of more space on a write than is actually required for the write. For
instance, if you write 64 bytes, but there are fewer than 64 bytes remaining in the current
memory sector, the data is written into a new sector. This occurs because data records
are not allowed to span sectors, which means that there may be unused bytes at the end
of full sectors. The response data to the write request (address+8, address+9) will show
that the amount of available memory is reduced by the amount of data lost in the old
sector plus the 64 bytes of data plus the 8 bytes of command data.
To retain specific data from nonvolatile storage, clear nonvolatile storage, and then
return the data to nonvolatile storage:
1. While the controller is still running, use SVC_REQ 56 to read the desired values
into PACSystems memory.
2. Upload the current values from controller memory as initial values to your project.
Equality
Because data in nonvolatile storage is not considered part of the project, writing to
nonvolatile storage does not impact equality between the CPU and Logic
Developer - PLC.
Redundancy
Redundancy systems can benefit from the use of logic driven user nonvolatile storage as
long as all of the references saved to nonvolatile storage are included in the transfer lists.
Each redundancy CPU maintains its own separate logic driven user nonvolatile storage
by means of SVC_REQ 57 during its logic scan. If the values of reference addresses to
be stored to user nonvolatile storage are synchronized, the logic driven user nonvolatile
storage data in each CPU is identical. If the values to be stored are not synchronized,
then each CPU’s user nonvolatile storage may be different.
Parameter Block
address+0 Memory type. See “Memory Type Codes” on page 9-56. 43H
address+1 The zero-based offset N to write to nonvolatile storage. Contains the complete offset
for any memory area except %W, which also requires the use of address + 2 for
address+2
offsets greater than 65,535.
▪ For %I, %Q, %M, %T, and %G memory in byte mode, N = (Ra - 1) / 8, where
Ra = one-based reference address. For example, to read from the one-based bit
reference address %T33, enter the byte offset 4: (33 - 1) / 8 = 4.
▪ For %W, %R, %AI, and %AQ memory, and for %I, %Q, %M, %T, and %G
memory in bit mode, N = Ra - 1. For example, to read from the one-based
reference address %R200, enter the zero-based reference offset 199; to read
from %I73 in bit mode, enter offset 72. For memory- in- bit mode, the offset must
be set on a byte boundary, that is, a number exactly divisible by 8: 0, 8, 16, 24,
and so on.
address+3 Length. The number of items to write to nonvolatile storage beginning at the reference
address calculated from the offset defined at [address + 1 and address + 2]. The
length can be one of the following:
Description Valid range
The number of words (16-bit registers) to read 1 through 32 words
from %W, %R, %AI, or %AQ nonvolatile storage
The number of bytes to read from %I, %Q, %M, 1 through 64 bytes
%T, or %G in byte mode nonvolatile storage
The number of bits to read from %I, %Q, %M, 1 through 512 bits in
%T, or %G in bit mode nonvolatile storage increments of 8 bits
The value must reside in the low byte of address + 3. The high byte must be set
to zero.
address + 4 When bit 0 is set to 1, storage disabled conditions, described on page 9-60, are
4H
ignored. A write is allowed even if the logic in RAM has changed since nonvolatile
storage was read or written.
Bits 1 through 15 must be set to zero; otherwise, the write fails.
address+5 Reserved. Value must be set to zero.
address+6 Response status. The low byte contains the major error code; the high byte contains
the minor error code.
address+7 Count of items written. Words, bytes or bits.
address+8 The number of bytes available in nonvolatile storage.
address+9
address+10 Reserved.
address+11
02 04 Storage closed. Either the storage has not been created or a previous
corruption error or unexpected read/write failure closed the storage.
01 05 Unexpected write failure. The command to the storage hardware failed
unexpectedly.
02 05 Corrupted storage. The write failed due to a bad checksum or corrupted
storage header information.
01 06 Write failed. Storage is full.
SVC_REQ 57 Example
The following LD logic writes ten continuous bytes to nonvolatile storage, ranging from
%G1 through %G80. The value applied to IN1, 56, determines byte mode.
The parameter block starts at %R00050. The response words are returned to
%R00056—%R00059.
10
This chapter describes the PID (Proportional plus Integral plus Derivative) built-in function
block, which is used for closed-loop process control. The PID function compares feedback
from a process variable (PV) with a desired process set point (SP) and updates a control
variable (CV) based on the error.
The PID function uses PID loop gains and other parameters stored in a 40-word reference
array of 16-bit integer words to solve the PID algorithm at the desired time interval.
GFK-2222P 10-1
10
SP The control loop or process Set Point. Set using Process INT, BOOL All except S, SA, No
Variable counts, the PID function adjusts the output array of length SB, and SC
Control Variable so that the Process Variable matches the 16 or more
Set Point (zero error).
PV Process Variable input from the process being controlled. INT, BOOL All except S, SA, No
Often a %AI input. array of length SB, and SC, and
16 or more constant
MAN When energized to 1 (through a contact), the PID function NA Flow No
block is in manual mode. If this input is 0, the PID function
block is in automatic mode.
UP If energized along with MAN, increases the Control NA Flow No
Variable by 1 CV count per solution of the PID function.
DN If energized along with MAN, decreases the Control NA Flow No
Variable by 1 CV count per solution of the PID function..
CV The Control Variable output to the process. Often a %AQ INT, BOOL All except %S and No
output. array of length constant
16 or more
cannot be shared.
Function block solve Calculated by the FBD editor. NA NA No
order – FBD version
SP The control loop or process Set Point. Set INT, BOOL array All except S, SA, SB, No
using Process Variable counts, the PID of length 16 or and SC
function adjusts the output Control Variable more
so that the Process Variable matches the
Set Point (zero error).
PV Process Variable input from the process INT, BOOL array All except S, SA, SB, SC No
being controlled. Often a %AI input. of length 16 or and constant
more
MAN When energized to 1 (through a contact), BOOL All No
the PID function block is in manual mode. If
this input is 0, the PID block is in automatic
mode.
UP If energized along with MAN, increases the BOOL All No
Control Variable by 1 CV count per solution
of the PID function block.
DN If energized along with MAN, decreases the BOOL All No
Control Variable by 1 CV count per solution
of the PID function block.
CV The Control Variable output to the process. INT, BOOL array All except %S and No
Often a %AQ output. of length 16 or constant
more
PID_ISA: The ISA derivative time in seconds, Td, is entered and displayed in
the same way as Kd. Total derivative contribution to PID Output is
Kc * Td * Δ Error / dt.
Bit 5: Enable derivative filtering. When this bit is set to 0, no filtering is applied
to the derivative term.
When set to 1, a first order filter is applied. This will limit the effects of higher
frequency process disturbances, such as measurement noise, on the
derivative term.
Setting Config Word: Set Config Word to 0 for default operation. Add 1
(16#0001) to set bit 0, add 2 (16#0002) to set bit 1, add 4 (16#0004) to set bit
2, add 8 (16#0008) to set bit 3, add 16 (16#0010) to set bit 4, and add 32
(16#0020) to set bit 5. For example, to set bits 0, 3 and 5 only, set Config
Word to 1 + 8 + 32 = 41 (16#0029). Some users will find the Config Word
value easier to interpret in hexadecimal (16#) format.
14 Manual Command CV Counts Tracks CV in
Auto or sets CV
(Address + 13) Set to the current CV output while the PID block is in Automatic mode. When
in Manual
the block is switched to Manual mode, this value is used to set the CV output
and the internal value of the integral term within the Upper and Lower Clamp
and Slew Time limits.
update the last PID solution time and avoid a large step change of the integral term.
Manual Operation
The PID function block is placed in Manual mode by providing power flow to both the Enable
and Manual input contacts. The output CV is set from the Manual Command parameter. If
either the UP or DN inputs have power flow, the Manual Command word is incremented (UP)
or decremented (DN) by one CV count every PID solution. For faster manual changes of the
output CV, it is also possible to add or subtract any CV count value directly to/from the
Manual Command word (word 14 of the reference array).
The PID function block uses the CV Upper Clamp and CV Lower Clamp parameters to limit
the CV output. If a positive Minimum Slew Time (word 12 of the reference array) is defined, it
is used to limit the rate of change of the CV output. If either CV Clamp or the rate of change
limit is exceeded, the value of the integral (reset) term is adjusted so that CV is at the limit.
The anti-reset-windup feature assures that when the error term tries to drive CV above (or
below) the clamps for a long period of time, the CV output will move off the clamp
immediately when the error term changes sufficiently.
This operation, with the Manual Command tracking CV in Automatic mode and setting CV in
Manual mode, provides a bump-less transfer between Automatic and Manual modes. The CV
Upper and Lower Clamps and the Minimum Slew Time always apply to the CV output in
Manual mode and the integral term is always updated. This assures that when a user rapidly
changes the Manual Command value in Manual mode, the CV output cannot change any
faster than the slew rate limit set by the Minimum Slew Time, and the CV cannot go above
the CV Upper Clamp limit or below the CV Lower Clamp limit.
where Kp is the proportional gain, Ki is the integral rate, Kd is the derivative time, and dt is the time
interval since the last solution.
The ISA (PID_ISA) algorithm has different coefficients for the terms:
PID Output = Kc * (Error + Error * dt/Ti + Td * Derivative) + CV Bias
where Kc is the controller gain, Ti is the Integral time and Td is the Derivative time. The
advantage of PID_ISA is that adjusting Kc changes the contribution for the integral and
derivative terms as well as the proportional term, which can simplify loop tuning.
If you have the PID_ISA Kc, Ti and Td values, use the following equations to convert them to
use as PID_IND parameters:
Kp = Kc, Ki = Kc/Ti, and Kd = Kc * Td
The following diagram shows how the PID_IND algorithm works:
CV
Proportional Term =
Bias
Error Term Kp * Error
SP Sign
+/-
Integral Term =
Dead Slew Upper / Lower Polarity
Band
Previous Integ. Term + + CV
Limit Clamp
Ki * Error * ΔTime
-/+
PV Deriv Action Derivative Term =
Δ Value
Δ Value
Δ Time Kd *
Δ Time
The ISA Algorithm (PID_ISA) is similar except that its Kc gain coefficient is applied after the
three terms are summed, so that the integral gain is Kc / Ti and the derivative gain is Kc * Td.
Bits 0, 1 and 2 in the Config Word set the Error sign, Output Polarity and Derivative Action,
respectively.
Error Term
Both PID algorithms calculate the Error term as
Error = (SP – PV),
which can be changed to Reverse Acting mode:
Error = (PV – SP)
by setting the Error Term mode (bit 0) in the Config Word (word 13 of the reference array)
to 1.
Reverse Acting mode is used if you want the CV output to move in the opposite direction
from PV input changes (CV down for PV up) instead of the normal CV up for PV up.
Bit 0 of Config Word Error Term Mode Error Term
(Word 13)
0 Normal SP – PV
1 Reverse Acting PV – SP
Derivative Term
The Derivative Term is Kd (word 7 of the reference array) multiplied by the time rate of
change of the Error term in the interval since the last PID solution.
Derivative = Kd * ΔError / dt = Kd * (Error – previous Error) / dt
where
dt = Current PLC time – PLC time at previous PID solution.
Two bits in the Config Word (word 13 of the reference array) affect the calculation of ΔError.
There are four cases to consider.
In Normal mode, the change in the error term is:
ΔError = (Error – previous Error) = (SP – PV) – (previous SP – previous PV)
= (previous PV – PV) – (previous SP – SP) = – ΔPV + ΔSP = ΔSP – ΔPV
where
ΔPV = (PV – previous PV), and ΔSP = (SP – previous SP).
However, in Reverse-Acting mode, the current error term is (PV – SP), and the sign of the
change in the error term is reversed:
ΔError = (Error – previous Error) = (PV – SP) – (previous PV – previous SP)
= (PV – previous PV) – (SP – previous SP) = ΔPV – ΔSP.
The change in the error term depends on changes in both SP and PV. If SP is constant,
ΔSP = 0,
and SP has no effect on the derivative term. When SP changes, however, it can cause large
transient swings in the derivative term and hence the output. Loop stability may be improved
by eliminating the effect of SP changes on the derivative term. To calculate the Derivative
based only on the change in PV, set bit 2 of the Config Word to 1. This modifies the
equations above by assuming SP is constant (ΔSP = 0).
For bit 2 set in normal mode (bit 0 = 0): ΔError = – ΔPV,
For bit 2 set in Reverse-Acting mode (bit 0 = 1): ΔError = ΔPV.
CV Bias Term
The CV Bias term (word 9 in the reference array) is an additive term separate from the PID
inputs. It may be useful if you are using only Proportional gain (Kp) and you want the CV to
be a non-zero value when the PV equals the SP and the Error is 0. In this case, set the CV
Bias to the desired CV when the PV is at the SP. CV Bias can also be used for feed forward
control where another PID loop or control algorithm is used to adjust the CV output of this
PID loop.
If a non-zero Integral rate is used, the CV Bias will normally be 0 as the integral term acts as
an automatic bias or “reset.” Just start up in Manual mode and use the Manual Command
word (word 14 of the reference array) to set the desired CV, and then switch to Automatic
mode. This will immediately calculate the required value for the integral term.
Process Characteristics” on page 10-16, the total time constant, Tp+Tc, for a first order
6H
system is the time required for PV to reach 63% of its final value when CV is stepped. The
PID function block will not be able to control a process unless its Sample Period is well under
half the total time constant. Larger Sample Periods will make it unstable.
The Sample Period should be no bigger than the total time constant divided by 10 (or down to
5 worst case). For example, if PV seems to reach about 2/3 of its final value in 2 seconds, the
Sample Period should be less than 0.2 seconds, or 0.4 seconds worst case. On the other
hand, the Sample Period should not be too small, such as less than the total time constant
divided by 1000, or the Ki * Error * dt term for the PID integral term will round down to 0. For
example, a very slow process that takes 10 hours or 36,000 seconds to reach the 63% level
should have a Sample Period of 40 seconds or longer.
Variations of the time interval between PID function solutions can have short-term effects on
the CV output. For example, if a step change to PV caused by measurement noise occurs
between solutions, the value of the derivative term will be inversely proportional to the time
interval. The performance of PID loops that are tuned for quick response may be improved
when the solution interval is held constant by configuring the PLC CPU for constant sweep
mode. Depending on the CPU model and the application, constant sweep times of 10
milliseconds, integer multiples of 10 milliseconds, or exact divisors of 10 milliseconds (1, 2 or
5 milliseconds) will be possible. The Sample Period can then be set for a suitable multiple of
10 milliseconds.
If many PID loops are used, allowing the application to solve all the loops on the same sweep
may lead to wide variations in CPU sweep time. If the loops have a common Sample Period
that is at least equal to the number of PID loops times the sweep time, a simple solution is to
sequence one or more 1 bits through an array of zero bits and to use these bits to enable
power flow to individual PID function blocks. The logic should assure that each PID function
block is enabled no more often than its Sample Period.
0.632K
t0 t0
Tp Tc
The following process model parameters can be determined from the PV unit reaction curve:
K Process open loop gain = final change in PV/change in CV at time t0
(Note no subscript on K)
Tp Process or pipeline time delay or dead time after t0 before the process output PV starts moving
Tc First order Process time constant, time required after Tp for PV to reach 63.2% of the final PV
Usually the quickest way to measure these parameters is by putting the PID function block in
Manual mode, making a small step change in the CV output by changing the Manual
Command (word 14 of the reference array), and then plotting the PV response over time. For
slow processes this can be done manually, but for faster processes a chart recorder or
computer graphic data-logging package will help. The CV step size should be large enough
to cause an observable change in PV, but not so large that it disrupts the process being
measured. A good step size may be from 2 to 10% of the difference between the CV Upper
and CV Lower Clamp values.
2. Put the PID function block in Manual mode and set the Manual Command (word 14 in the
reference array) to different values to check if CV can be moved to Upper and Lower
Clamp. Record the PV value at some CV point and load it into SP.
3. Set a small gain, such as 100 * Maximum CV/Maximum PV, into Kp and turn off Manual
mode. Step SP by 2% to 10% of the Maximum PV range and observe PV response.
Increase Kp if PV step response is too slow or reduce Kp if PV overshoots and oscillates
without reaching a steady value.
4. Once a Kp is found, start increasing Ki to get overshooting that dampens out to a steady
value in two to three cycles. This may require reducing Kp. Also try different SP step
sizes and CV operating points.
5. After suitable Kp and Ki gains are found, try adding Kd to get quicker responses to input
changes, providing it doesn't cause oscillations. Kd is often not needed and will not work
with noisy PV.
6. Check gains over different SP operating points and add Dead Band and Minimum Slew
Time if needed. Some Reverse Acting processes may need setting of Config Word Error
Term or Output Polarity bits.
Setting Loop Gains Using the Ziegler and Nichols Tuning Approach
This approach provides good response to system disturbances with gains producing an
amplitude ratio of 1/4. The amplitude ratio is the ratio of the second peak over the first peak in
the closed loop response.
1. Determine the three process model parameters, K, Tp and Tc for use in estimating initial
PID loop gains.
2. Calculate the Reaction rate:
R = K/Tc
3. For Proportional control only, calculate Kp as:
Kp = 1/(R * Tp) = Tc/(K * Tp)
For Proportional and Integral control, use:
Kp = 0.9/(R * Tp) = 0.9 * Tc/(K * Tp) Ki = 0.3 * Kp/Tp
For Proportional, Integral and Derivative control, use:
Kp = G/(R * Tp) where G is from 1.2 to 2.0
Ki = 0.5 * Kp/Tp
Kd = 0.5 * Kp * Tp
4. Check that the Sample Period is in the range
(Tp + Tc)/10 to (Tp + Tc)/1000
Example
The following PID example has a sample period of 100 ms, a Kp gain of 4.00 and a Ki gain of
1.500. The set point is stored in %R0001, the control variable is output in %AQ0002, and the
process variable is returned in %AI0003. CV Upper and CV Lower Clamps must be set, in
this case to 20000 and 4000, and an optional small Dead Band of +5 and -5 is included. The
40-word reference array starts in %R0100. Normally, user parameters are set in the
reference array, but %M0006 can be set to reinitialize the 14 words starting at %R0102 (word
3) from constants stored in logic (a useful technique).
The block can be switched to Manual mode with %M1 so that the Manual Command, %R113,
can be adjusted. Bits %M4 or %M5 can be used to increase or decrease %R113 and the PID
CV by 1 every 100 ms solution. For faster manual operation, bits %M2 and %M3 can be used
to add or subtract the value in %R2 to/from %R113 every CPU sweep. The %T1 output is on
when the PID is OK.
11
The Structured Text (ST) programming language is an IEC 61131-3 textual programming
language. It is convenient for those who have experience with high-level programming
languages, such as C. Structured text also allows greater flexibility in writing algorithms and
can be easily transferred between different types of controllers. Its compactness allows you
to view a complex algorithm on one screen.
This chapter describes how structured text is implemented in PACSystems. For information
on using the structured text editor in the programming software, refer to the online help.
The block types Block, Parameterized Block, and Function Block (UDFB) can be
programmed in ST. The _MAIN program block can also be programmed in ST. For details on
blocks, refer to chapter 6, “Program Organization.”
Language Overview
Statements
A structured text program consists of a series of statements, which are constructed from
expressions and language keywords. A statement directs the PLC to perform a specified
action. Statements provide variable assignments, conditional evaluations, iteration, and the
ability to call built-in functions. PACSystems supports the statements described in “Statement
Types” on page 11-4.
Expressions
Expressions calculate values from variables and constants. An expression can involve
operators, variables, and constants. An example of a simple expression is (x + 5).
Composite expressions can be created by nesting simpler expressions, for example, (a + b) *
(c + d) – 3.0 ** 4.
GFK-2222P 11-1
11
Operators
The table below lists the operators that you can use within an expression. They are
listed according to their evaluation precedence, which determines the sequence in
which they are executed within the expression. The operator with the highest
precedence is applied first, followed by the operator with the next highest
precedence. Operators of equal precedence are evaluated left to right. Operators
in the same group, for example + and -, have the same precedence.
Any address operators used in LD can be used on ST operands. Address
operators have precedence over the ST language operators. Address operators
include indirect addressing (for example, @Var1), array indexing (for example,
Var1[3]), bit within word addressing (for example, Var1.X[3]), and structure fields
(for example, Var1.field1).
Precedence Operator Operand Types Description
Group 1 (Highest) (…) Parenthesized
expression
Group 2 - INT, DINT, REAL, LREAL Negation
NOT BOOL, BYTE, WORD, DWORD Boolean complement
1
Group 3 **,^ INT, DINT, UINT, REAL, LREAL Exponentiation3, 5
Group 4 * INT, DINT, UINT, REAL, LREAL Multiplication3
/ INT, DINT, UINT, REAL, LREAL Division2, 3
MOD INT, DINT, UINT Modulus operation2
Group 5 + INT, DINT, UINT, REAL, LREAL Addition3
- INT, UINT, DINT, REAL, LREAL Subtraction3
Group 6 <, >, <=, INT, DINT, UINT, REAL, LREAL, BYTE, WORD, Comparison
>= DWORD
Group 7 = ANY4 Equality
4
<>, != ANY Inequality
Group 8 AND, & BOOL, BYTE, WORD, DWORD Boolean AND
Group 9 XOR BOOL, BYTE, WORD, DWORD Boolean exclusive OR
Group 10 OR BOOL, BYTE, WORD, DWORD Boolean OR
(Lowest)
1
The base must be type REALor LREAL. If the base is REAL, the power can be type INT, DINT, UINT, or REAL
and the result is type REAL. If the base is type LREAL, the power must be LREAL and the result will be LREAL.
2
The CPU flags a divide by 0 error as an application fault.
3
Use of math operators can cause overflow or underflow. Overflow results are truncated.
4
Operators that can take operands of type ANY can be used with any of the supported elementary data types.
The supported data types are: BOOL, INT, DINT, UINT, BYTE, WORD, DWORD, LREAL and REAL. STRING
and TIME data types are not supported.
5
If either operand is positive or negative infinity, the result is undefined.
Some comparison and math operators have corresponding built-in functions. For instance the
‘+’ operator is similar to the ADD_INT function. You can use either the language operator or
the built-in function. The built-in function has the advantage of returning an ENO status. For
information on built-in functions, see page 11-6.
Operand Types
Type casting is not supported. To convert a type, use one of the built-in conversion functions.
Use of built-in functions is described in “Function Call” on page 11-6.
For untyped operators (+, *, …), the types of the operands must match.
Statement Types
The Structured Text statements, which specify the actual program execution, consist of the
following types.
Statement Type Description Example
Assignment Sets an object to a specified value. A := 1; B := A; C := A + B;
CASE Provides for the conditional execution of a set of CASE A OF
statements. 1,2 : C := 3;
3: C := 4;
4..5: C := 5;
ELSE
C := 0;
END_CASE;
Function call Calls a function for execution. FbInst(IN1 := 1, OUT1 => A);
RETURN Causes the program to return from a subroutine. The RETURN;
return statement provides an early exit from a block.
EXIT Terminates iterations before the terminal condition EXIT;
becomes TRUE (1).
IF Specifies that one or more statements be executed IF (A < B) THEN
conditionally. C := 4;
ELSIF (A = B) THEN
C:= 5;
ELSE
C := 6
END_IF;
FOR Executes a statement sequence repeatedly based on the FOR I := 1 TO 100 BY 2 DO
value of a control symbol. IF (Var1 – I) = 40 THEN
Key := I;
EXIT;
END_IF;
END_FOR;
WHILE Indicates that a statement sequence be executed WHILE J <= 100 DO
repeatedly until a Boolean expression evaluates to FALSE J := J + 2;
(0).
END_WHILE;
REPEAT Indicates that a statement sequence be executed REPEAT
repeatedly until a Boolean expression evaluates to TRUE J := J + 2;
(1). UNTIL J >= 100
END_REPEAT;
ARG_PRESENT Determines whether a parameter value was present when ARG_PRES (IN :=In1, Q:>Out1,
the function block instance of the parameter was invoked. ENO:>Out2);
For example, a parameter can be optional (pass by value).
Empty Statement ;
Assignment Statement
The assignment statement replaces the value of a variable with the result of evaluating an
expression (of the same data type).
Notes:
■ Assignment statements can affect transition bits.
■ Assignment statements take override bits into account.
Format
Variable := Expression;
Where:
Variable is a simple variable, array element, etc.
Expression is a single value, expression, or complex expression.
Examples
Boolean assignment statements:
VarBool1 := 1;
VarBool2 := (val <= 75);
Array element assignment:
Array_1[13] := (RealA /RealB)* PI;
Function Call
The structured text function call executes a predefined algorithm that performs a
mathematical, bit string or other operation. The function call consists of the name of the
function or block followed by required input or output parameters.
The structured text logic can call blocks or the PACSystems built-in functions listed in the
table below. The call must be made in a single statement and cannot be part of a nested
expression.
Calls to some functions, such as communications request (COMM_REQ), require a
command block or parameter block. For these functions, an array is declared, initialized in
logic, and then passed as a parameter to the function.
Conversion Functions
Note: ENO is an optional BOOL output parameter. If ENO is used in a statement that uses
the formal convention, the state of outBool is set to 1 (call was successful) or 0 (call
failed).
Mnemonic Description Example
(Formal Convention)
WORD_TO_INT Converts the input data into the word_to_int(IN := inWord, Q => outInt, ENO => outBool);
equivalent single-precision signed
integer (INT) value, which it outputs
to Q.
WORD_TO_UINT Converts the input data into the word_to_uint(IN := inWord, Q => outUint,
equivalent single-precision unsigned ENO => outBool);
integer (UINT) value, which it outputs
to Q.
DWORD_TO_DINT Converts DWORD data into the dword_to_dint(IN := inDword, Q => outDint,
equivalent signed double-precision ENO => outBool);
integer (DINT) value and stores the
result in Q.
UINT_TO_ WORD Converts an unsigned single- uint_to_word(IN := inUint, Q => outWord,
precision integer (UINT) operand IN ENO => outBool);
to a 16-bit bit string (WORD) value
and stores the result in the variable
assigned to Q.
INT_TO_WORD Converts a 16-bit signed integer (INT) int_to_word(IN := inInt, Q => outWord, ENO => outBool);
operand IN to a 16-bit bit string
(WORD) value and stores the result
in the variable assigned to Q.
DINT_TO_DWORD Converts the input double-precision dint_to_dword(IN := inDint, Q => outDword
signed integer (DINT) data into the ENO => outBool);
equivalent DWORD (32-bit bit string)
value, which it outputs to Q.
Example
This code fragment shows the TAN function call.
TAN( AnyReal, Result );
Formal Convention
myTOF_Instance_Data(IN := inBool, PT := inDINT, ET => outDINT, Q => outBool, ENO =>
outBoolSuccess);
Informal Convention
myTOF_Instance_Data(inBool, inDINT, outDINT, outBool);
RETURN Statement
The return statement provides an early exit from a block. For example, in the following lines
of code the third line will never execute. The variable a will have the value 4.
a := 4;
RETURN;
a := 5;
IF Statement
The IF construct offers conditional execution of a statement list. The condition is determined
by result of a Boolean expression. The IF construct includes two optional parts, ELSE and
ELSIF, that provide conditional execution of alternate statement list(s). One ELSE and any
number of ELSIF sections are allowed per IF construct.
Format
IF BooleanExpression1 THEN
StatementList1;
[ELSIF BooleanExpression2 THEN (*Optional*)
StatementList2;]
[ELSE (*Optional*)
StatementList3;]
END_IF;
Where:
BooleanExpression Any expression that resolves to a Boolean value.
StatementList Any set of structured text statements.
Note: Either ELSIF or ELSEIF can be used for the else if clause in an IF statement.
Operation
The following sequence of evaluation occurs if both optional parts are present:
■ If BooleanExpression1 is TRUE (1), StatementList1 is executed. Program execution
continues with the statement following the END_IF keyword.
■ If BooleanExpression1 is FALSE (0) and BooleanExpression2 is TRUE (1), StatmentList2
is executed. Program execution continues with the statement following the END_IF
keyword.
■ If both Boolean expressions are FALSE (0), StatmentList3 is executed. Program
execution continues with the statement following the END_IF keyword.
If an optional part is not present, program execution continues with the statement following
the END_IF keyword.
Example
The following code fragment puts text into the variable Status, depending on the value of I/O
point input value.
IF Input01 < 10.0 THEN
Status := Low_Limit_Warning;
ELSIF Input02 > 90.0 THEN
Status := Upper_Limit_Warning;
ELSE
Status := Limits_OK;
END_IF;
CASE Statement
The CASE …. OF construct offers conditional execution of statement lists. It uses the value
of an ST integer expression to determine whether to execute a statement list. The statement
list to be executed can be selected from multiple statement lists, depending on the value of
the associated integer expression.
Conditions can be expressed as a single value, a list of values, or a range of values. The
single-value, list of values, or range forms can be used by themselves or in combination. The
optional ELSE keyword can be used to execute a statement list when the associated value
does not meet any of the specified conditions.
You can have a maximum of 1024 cases in a single CASE … OF construct. Additional cases
can be handled by adding the ELSE keyword to the construct and specifying a nested CASE
… OF construct or an IF … THEN construct after the ELSE.
The number of nested CASE … OF constructs and the number of levels are limited by the
memory in your computer.
The number of constants and constant ranges in a single conditional statement is limited by
the memory in your computer.
Format
CASE Integer_Expression OF
Int1: (*Single Value*)
StatementList_1;
Int2,Int3,Int4: (*List of Values*)
StatementList_2;
Int5..Int6: (*Range of Values*)
StatementList_3;
[ELSE (*Optional*)
StatementList_Else;]
END_CASE;
Where:
Integer_Expression An ST expression that resolves to an integer (INT, DINT or
UINT) value.
Int A constant integer value.
StatementList_1 … StatementList_n
Structured Text statements.
Operation
The Int values are compared to Integer_Expression. The statement list following the first Int
value that matches Integer_Expression is executed. If the optional ELSE keyword is used
and no Int value matches Integer_Expression, the statement list following ELSE is executed.
Otherwise, no statement list is executed.
Examples
The following code fragment assigns a value to the variable ColorVariable.
CASE ColorSelection OF
0: ColorVariable:= Red;
1: ColorVariable:= Yellow;
2,3,4: ColorVariable:= Green;
5..9: ColorVariable:= Blue;
ELSE ColorVariable:= Violet;
END_CASE;
The following code fragment uses a nested CASE…OF…END_CASE construct.
CASE ColorSelection OF
0: ColorVariable:= Red;
1: ColorVariable:= Yellow;
2,3,4: ColorVariable:= Green;
5..9: ColorVariable:= Blue;
ELSE
CASE ColorSelection OF
10: ColorVariable:= Violet;
ELSE ColorVariable:= Black;
END_CASE;
ColorError: 1;
END_CASE;
FOR Statement
The FOR loop repeatedly executes a statement list contained within the
FOR … DO … END_FOR construct. It is useful when the number of iterations can be
predicted in advance, for example to initialize an array. The number of iterations is
determined by the value of a control variable which is incremented (or decremented) from an
initial value to a final value by the FOR statement.
By default, each iteration of the FOR statement changes the value of the control variable by
1. The optional BY keyword can be used to specify an increment or decrement of the control
variable by specifying a (non-zero) positive or negative integer or an expression that resolves
to an integer.
FOR loops can be nested to a maximum of ten levels.
Format
FOR Control_Variable := Start_Value TO End_Value [BY Step_Value] DO
Statement list;
END_FOR;
Where:
Control_Variable The control variable. Can be an INT, DINT or UINT variable or
parameter.
Start_Value The starting value of the control variable. Must be an expression,
variable, or constant of the same data type as Int_Variable.
End_Value The ending value of the control variable. Must be an expression,
variable, or constant of the same data type as Int_Variable.
Step_Value (Optional) The increment or decrement value for each iteration of the
loop. Must be an expression, variable, or constant of the same data
type as Int_Variable. If Step_Value is not specified, the control
variable is incremented by 1.
Statement list Any list of Structured Text statements.
Operation
The values of Start_Value, End_Value and Step_Value are calculated at the beginning of the
FOR loop. On the first iteration, Control_Variable is set to Start_Value.
At the beginning of each iteration, the termination condition is tested. If it is satisfied,
execution of the loop is complete and the statements after the loop will proceed. If the
termination condition is not satisfied, the statements within the FOR…END_FOR construct
are executed. At the end of each iteration, the value of Control_Variable is incremented by
Step_Value (or 1 if Step_Value is not specified).
The termination condition of a FOR loop depends on the sign of the step value.
Step Value Termination Condition
>0 Control_Variable > End_Value
<0 Control Variable < End Value
0 None. A termination condition is never reached and the loop will repeat infinitely.
As with the other iterative statements (WHILE and REPEAT), loop execution can be
prematurely halted by an EXIT statement.
To avoid infinitely repeating or unpredictable loops, the following precautions are
recommended:
Do not allow the statement list logic within the FOR loop to modify the control
variable.
Do not use the control variable in logic outside the FOR loop.
Examples
The following code fragment initializes an array of 100 elements starting at %R1000 (given
that R1000 is at %R1000) by assigning a value of 10 to all array elements.
FOR R1000 := 1 TO 100 DO
@R1000 := 10;
END_FOR;
The following code fragment assigns the values of an I/O point to array elements over ten I/O
scans. The last entry is put in the array element with the smallest index.
FOR R1000 := 10 TO 1 BY -1 DO
@R1000 := Input01;
END_FOR;
WHILE Statement
The WHILE loop repeatedly executes (iterates) a statement list contained within the
WHILE…END_WHILE construct as long as a specified condition is TRUE (1). It checks the
condition first, then conditionally executes the statement list. This looping construct is useful
when the statement list does not necessarily need to be executed.
Format
WHILE <BooleanExpression> DO
<StatementList>;
END_WHILE;
Where:
BooleanExpression Any expression that resolves to a Boolean value.
StatementList Any set of Structured Text statements.
Operation
If BooleanExpression is FALSE (0), the loop is immediately exited; otherwise, if the
BooleanExpression is TRUE (1), the StatementList is executed and the loop repeated. The
statement list may never execute, since the Boolean expression is evaluated at the beginning
of the loop.
Note: It is possible to create an infinite loop that will cause the watchdog timer to expire.
Avoid infinite loops.
Example
The following code fragment increments J by a value of 2 as long as J is less than or equal to
100.
WHILE J <= 100 DO
J := J + 2;
END_WHILE;
REPEAT Statement
The REPEAT loop repeatedly executes (iterates) a statement list contained within the
REPEAT…END_REPEAT construct until an exit condition is satisfied. It executes the
statement list first, then checks for the exit condition. This looping construct is useful when
the statement list needs to be executed at least once.
Format
REPEAT
StatementList;
UNTIL BooleanExpression END_REPEAT;
Where:
BooleanExpression Any expression that resolves to a Boolean value.
StatementList Any set of Structured Text statements.
Operation
The StatementList is executed. If the BooleanExpression is FALSE (0), then the loop is
repeated; otherwise, if the BooleanExpression is TRUE (1), the loop is exited. The statement
list executes at least once, since the BooleanExpression is evaluated at the end of the loop.
Note: It is possible to create an infinite loop that will cause the watchdog timer to expire.
Avoid infinite loops.
Example
The following code fragment reads values from an array until a value greater than 5 is found
(or the upper bound of the array is reached). Since at least one array value must be read, the
REPEAT loop is used. All variables in this example are of type DINT, UINT, or INT.
Index :=1;
REPEAT
Value:= @Index;
Index:=Index+1;
UNTIL Value > 5 OR Index >= UpperBound END_REPEAT;
ARG_PRES Statement
The ARG_PRES function determines whether an input parameter value was present when
the function block instance of the parameter was invoked. This may be necessary if the
parameter is optional (pass by value).
This function must be called from a function block instance or a parameterized block.
Format
ARG_PRES (IN :=In1, Q:>Out1, ENO:>Out2);
Where:
In1 Must be an input parameter of the function block that contains the
ARG_PRES instruction. Cannot be an array element or structure element. An
alias to a parameter should resolve only to the parameter name.
Can be a BOOL, DINT, DWORD, INT, REAL, UINT, WORD variable,
variable array head name or variable array head name element [000]. Input
or output parameter value of a function block instance or a parameterized
block
Out2 A BOOL variable. True if the parameter is present, otherwise false.
Note: ENO is an optional BOOL output parameter. If ENO is used in a statement that uses
the formal convention, the state of Out2 is set to 1 (call was successful) or 0 (call
failed).
Example
The parameter TempVal is an input to the function block CheckTemp. In the following code
fragment, ARG_PRES is used to determine whether a value existed for the parameter
TempVal when an instance of CheckTemp was invoked. If TempVal had a value, the BOOL
output Temp_Pres is set to 1.
ARG_PRES (TempVal, Temp_Pres);
Exit Statement
The EXIT statement is used to terminate and exit from a loop (FOR, WHILE, REPEAT)
before it would otherwise terminate. Program execution resumes with the statement following
the loop terminator (END_FOR, END_WHILE, END_REPEAT). An EXIT statement is
typically used within an IF statement.
Format
EXIT;
Where:
ConditionForExiting An expression that determines whether to terminate early.
Example
The following code fragment shows the operation of the EXIT statement. When the variable
number equals 10, the WHILE loop is exited and execution continues with the statement
immediately following END_WHILE.
while (1) do
a := a + 1;
IF (a = 10) THEN
EXIT;
END_IF;
END_WHILE;
12
This chapter describes the Ethernet and Serial communications features of the
PACSystems CPU. The following information is included:
Ethernet Communications 12-2
0H
Series 90-70 Communications and Intelligent Option Modules (RX7i only) 12-8 6H
GFK-2222P 12-1
12
Ethernet Communications
For details on Ethernet communications for PACSystems, please refer to the following
manuals:
TCP/IP Ethernet Communications for PACSystems User’s Guide, GFK-2224
PACSystems TCP/IP Communications Station Manager Manual, GFK-2225
Caution
The two ports on the Ethernet Interface must not be connected,
directly or indirectly to the same device. The hub or switch
connections in an Ethernet network must form a tree, otherwise
duplication of packets may result.
Serial Communications
The CPU’s independent on-board serial ports are accessed by connectors on the front of
the module. Ports 1 and 2 provide serial interfaces to external devices. Port 1 is also
used for firmware upgrades. The RX7i CPUs provide a third serial port that is used as the
Ethernet station manager port. All serial ports are isolated.
Features Supported
Feature Port 1 Port 2 Port 3
(COM 1) (COM 2) (Station Mgr)
RX7i only
RTU Slave protocol Yes Yes No
SNP Slave Yes Yes No
Serial I/O – used with COMMREQs Yes Yes No
Firmware Upgrade CPU in No No
(Winloader utility) STOP/No IO mode
Message Mode –used only with C blocks Yes Yes No
(C Runtime Library Functions:
serial read, serial write, sscanf, sprintf)
Station Manager (RX7i only) No No Yes
RS-232 Yes No Yes
RS-485 No Yes No
Port 2
Port 2 is RS-485 compatible and optocoupler isolated. Port 2 has a 15-pin, female D-sub
connector. This port does not support the RS-485 to RS-232 adapter (IC690ACC901).
This is a DCE port.
13
This chapter describes the Serial I/O feature, which can be used to control the
read/write activities of CPU serial ports 1 and 2 directly from the application program.
This chapter also contains instructions for using COMM_REQs to configure the CPU
serial ports for SNP, RTU, or Serial I/O protocol.
■ Configuring Serial Ports Using the COMMREQ Function
RTU Slave/SNP Slave Operation with a Programmer Attached
COMM_REQ Command Block for Configuring SNP Protocol
COMM_REQ Data Block for Configuring RTU Protocol
COMM_REQ Data Block for Configuring Serial I/O
■ Serial I/O COMM_REQ Commands
Initialize Port
Set Up Input Buffer
Flush Input Buffer
Read Port Status
Write Port Control
Cancel Operation
Autodial
Write Bytes
Read Bytes
Read String
■ RTU Slave Protocol
■ SNP Slave Protocol
Details of the RTU and SNP protocol are described in the Serial Communications
User’s Manual (GFK-0582).
GFK-2222P 13-1
13
The COMM_REQ requires that all its command data be placed in the correct order (in
a command block) in the CPU memory before it is executed. The COMM_REQ should
be executed by a contact of a one-shot coil to prevent sending the data multiple times.
For details on the operands and command block format used by the COMM_REQ
function, refer to chapter 7, “Instruction Set Reference.”
The COMM_REQ uses the following TASKs to specify the port for which the operation
is intended:
task 19 for port 1
task 20 for port 2
Note: Because address offsets are stored in a 16-bit word field, the full range of %W
memory type cannot be used with COMM_REQs.
Timing
If a port configuration COMM_REQ is sent to a serial port that currently has an SNP
master (for example, the programmer) connected to it, the COMM_REQ function
returns an error code to the COMM_REQ status word.
Compatibility
The COMM_REQ function blocks supported by Serial I/O are not supported by other
currently existing protocols (such as SNP slave and RTU slave). Errors are returned if
they are attempted for a port configured for one of those protocols.
Overlapping COMM_REQs
Some Serial I/O COMM_REQs must complete execution before another COMM_REQ
can be processed. Others can be left pending while others are executed.
Operating Notes
Remote COMM_REQs that are cancelled due to this command executing will return a
COMM_REQ status word indicating request cancellation (minor code 12H).
CAUTION
If this COMM_REQ is sent when a Write Bytes (4401)
COMM_REQ is transmitting a string from a serial port,
transmission is halted. The position within the string where the
transmission is halted is indeterminate. In addition, the final
character received by the device to which the CPU is sending is
also indeterminate.
Port Status
The port status consists of a status word and the number of characters in the input
buffer that have not been retrieved by the application (characters which have been
received and are available).
Operating Note
For CPU port 2 (RS-485), the RTS signal is also controlled by the transmit driver.
Therefore, control of RTS is dependent on the current state of the transmit driver. If
the transmit driver is not enabled, asserting RTS with the Write Port Control
COMM_REQ will not cause RTS to be asserted on the serial line. The state of the
transmit driver is controlled by the protocol and is dependent on the current Duplex
Mode of the port. For 2-wire and 4-wire Duplex Mode, the transmit driver is only
enabled during transmitting. Therefore, RTS on the serial line will only be seen active
on port 2 (configured for 2-wire or 4-wire Duplex Mode) when data is being
transmitted. For point-to-point Duplex Mode, the transmit driver is always enabled.
Therefore, in point-to-point Duplex Mode, RTS on the serial line will always reflect
what is chosen with the Write Port Control COMM_REQ.
Operating Notes
Remote COMM_REQs that are cancelled due to this command executing will return a
COMM_REQ status word indicating request cancellation (minor code 12H).
Caution
If this COMM_REQ is sent in either Cancel All or Cancel Write
mode when a Write Bytes (4401) COMM_REQ is transmitting a
string from a serial port, transmission is halted. The position
within the string where the transmission is halted is
indeterminate. In addition, the final character received by the
device to which the CPU is sending is also indeterminate.
Example
Pager enunciation can be implemented by three commands, requiring three
COMM_REQ command blocks:
Autodial: Dials the modem.
04400 (1130h)
Write Bytes: Specifies an ASCII string, from 1 to 250 bytes in length, to send from the
04401 (1131h) serial port.
Autodial: It is the responsibility of the PLC application program to hang up the phone
04400 (1130h) connection. This is accomplished by reissuing the autodial command and
sending the hang up command string.
Operating Notes
Specifying zero as the Transmit time-out sets the time-out value to the amount of time
actually needed to transmit the data, plus 4 seconds.
Caution
If an Initialize Port (4300) COMMEQ is sent or a Cancel Operation
(4399) COMM_REQ is sent in either Cancel All or Cancel Write
mode while this COMM_REQ is transmitting a string from a serial
port, transmission is halted. The position within the string where
the transmission is halted is indeterminate. In addition, the final
character received by the device the CPU is sending to is also
indeterminate.
Message Format
The general formats for RTU message transfers are shown below:
Slave Response
Query Transaction
Broadcast Transaction
The master device begins a data transfer by sending a query or broadcast request
message. A slave completes that data transfer by sending a response message if the
master sent a query message addressed to it. No response message is sent when the
master sends a broadcast request.
Message Types
The RTU protocol has four message types: query, normal response, error response,
and broadcast.
Query
The master sends a message addressed to a single slave.
Normal Response
After the slave performs the function requested by the query, it sends back a normal
response for that function. This indicates that the request was successful.
Error Response
The slave receives the query, but cannot perform the requested function. The slave
sends back an error response that indicates the reason the request could not be
processed. (No error message will be sent for certain types of errors. For more
information see “Communication Errors.”)
Broadcast
The master sends a message addressed to all of the slaves by using address 0. All
slaves that receive the broadcast message perform the requested function. This
transaction is ended by a time-out within the master.
Message Fields
The message fields for a typical message are shown in the figure below, and are
explained in the following sections.
FRAME
Station Address Function Code Information Error Check
Station Address
The Station Address is the address of the slave station selected for this data transfer.
It is one byte in length and has a value from 0 to 247 inclusive. An address of 0
selects all slave stations, and indicates that this is a broadcast message. An address
from 1 to 247 selects a slave station with that station address.
Function Code
The Function Code identifies the command being issued to the station. It is one byte
in length and is defined for the values 0 to 255 as follows:
Function Code Description
0 Illegal Function
1 Read Output Table
2 Read Input Table
3 Read Registers
4 Read Analog Input
5 Force Single Output
6 Preset Single Register
7 Read Exception Status
8 Loopback Maintenance
9-14 Unsupported Function
15 Force Multiple Outputs
16 Preset Multiple Registers
17 Report Device Type
18–21 Unsupported Function
22 Mask Write 4x Register
23 Read/Write 4x Registers
24–66 Unsupported Function
67 Read Scratch Pad Memory
68-127 Unsupported Function
128-255 Reserved for Exception Responses
Information Fields
All message fields, other than the Station Address field, Function Code field, and Error
Check field are called, generically, “information” fields. Information fields contain
additional information required to specify or respond to a requested function. Different
types of messages have different types or numbers of information fields. (Details on
information fields for each message type and function code are found in “Message
Descriptions,” page 13-32) Some messages (Message 07 Query and Message 17
3H
Examples
As shown in the following figure, the information fields for message READ OUTPUT
TABLE (01) Query consist of the Starting Point No. field and Number of Points field.
The information fields for message READ OUTPUT TABLE (01) Response consist of
the Byte Count field and Data field.
Message (01)
Read Output Table
Information Fields
Hi Lo Hi Lo
Query
Information Fields
Normal Response
Some information fields include entries for the range of data to be accessed in the
RTU slave.
Note: Data addresses are 0-based. This means you will need to subtract 1 from the
actual address when specifying it in the RTU message. For message (01)
READ OUTPUT TABLE Query, used in the example above, you would
specify a starting data address in the Starting Point No. field. To specify
%Q0001 as the starting address, you would place the address %Q0000 in
this field. Also, the value placed in the Number of Points field determines how
many %Q bits are read, starting with address %Q0001. For example:
■ Starting Point No. field = %Q0007, so the starting address is %Q0008.
■ Number of Points field = 16 (0010h), so addresses %Q0008 through
%Q0023 will be read.
variable in length. To properly generate the CRC-16 code, the length of frame must be
determined. To calculate the length of a frame for each of the defined function codes,
see “Calculating the Length of Frame” on page 13-31. 5H
Message Length
Message length varies with the type of message and amount of data to be sent.
Information for determining message length for individual messages is found in
“Message Descriptions.”
Character Format
A message is sent as a series of characters. Each byte in a message is transmitted as
a character. The illustration below shows the character format. A character consists of
a start bit (0), eight data bits, an optional parity bit, and one stop bit (1). Between
characters the line is held in the 1 state.
MSB Data Bits LSB
10 9 8 7 6 5 4 3 2 1 0
Parity
Stop Start
(optional)
Message Termination
Each station monitors the time between characters. When a period of three character
times elapses without the reception of a character, the end of a message is assumed.
The reception of the next character is assumed to be the beginning of a new
message. The end of a frame occurs when the first of the following two events occurs:
■ The number of characters received for the frame is equal to the calculated length
of the frame.
■ A length of 4 character times elapses without the reception of a character.
Timeout Usage
Timeouts are used on the serial link for error detection, error recovery, and to prevent
the missing of the end of messages and message sequences. Note that although the
module allows up to three character transmission times between each character in a
message that it receives, there is no more than half a character time between each
character in a message that the module transmits. After sending a query message,
the master should wait an appropriate amount of time for slave turnaround before
assuming that the slave did not respond to the request. Slave turnaround time is
affected by the Controller Communications Window time and the CPU sweep time, as
described in “RTU Slave Turnaround Time” on page 13-24.
6H 7H
CRC Register
15 14 + 13 12 11 10 9 8 7 6 5 4 3 2 1 + 0 +
Data
+ = Exclusive Or
Input
To generate the CRC, the message data bits are fed to the shift register one at a time.
The CRC register contains a preset value. As each data bit is presented to the shift
register, the bits are shifted to the right. The LSB is XORed with the data bit and the
result is: XORed with the old contents of bit 1 (the result placed in bit 0), XORed with
the old contents of bit 14 (and the result placed in bit 13), and finally, it is shifted into
bit 15. This process is repeated until all data bits in a message have been processed.
Software implementation of the CRC-16 is explained in the next section.
1. The receiver processes incoming data through the same CRC algorithm as the transmitter. The
example for the receiver starts at the point after all the data bits but not the transmitted CRC have
been received correctly. Therefore, the receiver CRC should be equal to the transmitted CRC at this
point. When this occurs, the output of the CRC algorithm will be zero indicating that the transmission is
correct.
The transmitted message with CRC would then be:
Address Function CRC–16
01 07 41 E2
2. The MSB and LSB references are to the data bytes only, not the CRC bytes. The CRC MSB and LSB
order are the reverse of the data byte order.
Hi Lo Hi Lo
Query
Normal Response
Query:
An address of 0 is not allowed because this cannot be a broadcast request.
The function code is 01.
The starting point number is two bytes in length and may be any value less than
the highest output point number available in the attached CPU. The starting point
number is equal to one less than the number of the first output point returned in
the normal response to this request.
The number of points value is two bytes in length. It specifies the number of
output points returned in the normal response. The sum of the starting point value
and the number of points value must be less than or equal to the highest output
point number available in the attached CPU. The high order byte of the Starting
Point Number and Number of Points fields is sent as the first byte. The low order
byte is the second byte in each of these fields.
Response:
The byte count is a binary number from 1 to 256 (0 = 256). It is the number of
bytes in the normal response following the byte count and preceding the error
check.
The Data field of the normal response is packed output status data. Each byte
contains eight output point values. The least significant bit (LSB) of the first byte
contains the value of the output point whose number is equal to the starting point
number plus one. The values of the output points are ordered by number starting
with the LSB of the first byte of the Data field and ending with the most significant
bit (MSB) of the last byte of the Data field. If the number of points is not a multiple
of 8, the last data byte contains zeros in one to seven of its highest order bits.
Hi Lo Hi Lo
Query
Normal Response
Query:
An address of 0 is not allowed as this cannot be a broadcast request.
The function code is 02.
The starting point number is two bytes in length and may be any value less than
the highest input point number available in the attached CPU. The starting point
number is equal to one less than the number of the first input point returned in the
normal response to this request.
The number of points value is two bytes in length. It specifies the number of input
points returned in the normal response. The sum of the starting point value and
the number of points value must be less than or equal to the highest input point
number available in the attached CPU. The high order byte of the Starting Point
Number and Number Of Bytes fields is sent as the first byte. The low order byte is
the second byte in each of these fields.
Response:
The byte count is a binary number from 1 to 256 (0 = 256). It is the number of
bytes in the normal response following the byte count and preceding the error
check.
The Data field of the normal response is packed input status data. Each byte
contains eight input point values. The least significant bit (LSB) of the first byte
contains the value of the input point whose number is equal to the starting point
number plus one. The values of the input points are ordered by number starting
with the LSB of the first byte of the Data field and ending with the most significant
bit (MSB) of the last byte of the Data field. If the number of points is not a multiple
of 8, then the last data byte contains zeros in one to seven of its highest order
bits.
Hi Lo Hi Lo
Query
Hi Lo Hi Lo
Normal Response
Query:
An address of 0 is not allowed as this request cannot be a broadcast request.
The function code is equal to 3.
The starting register number is two bytes in length. The starting register number
may be any value less than the highest register number available in the attached
CPU. It is equal to one less than the number of the first register returned in the
normal response to this request.
The number of registers value is two bytes in length. It must contain a value from
1 to 125 inclusive. The sum of the starting register value and the number of
registers value must be less than or equal to the highest register number available
in the attached CPU. The high order byte of the Starting Register Number and
Number of Registers fields is sent as the first byte in each of these fields. The low
order byte is the second byte in each of these fields.
Response:
The byte count is a binary number from 2 to 250 inclusive. It is the number of
bytes in the normal response following the byte count and preceding the error
check. Note that the byte count is equal to two times the number of registers
returned in the response. A maximum of 250 bytes (125) registers is set so that
the entire response can fit into one 256 byte data block.
The registers are returned in the Data field in order of number with the lowest
number register in the first two bytes and the highest number register in the last
two bytes of the Data field. The number of the first register in the Data field is
equal to the Starting Register Number plus one. The high order byte is sent before
the low order byte of each register.
Hi Lo Hi Lo
Query
Hi Lo Hi Lo
Normal Response
Query:
An Address of 0 is not allowed as this request cannot be a broadcast request.
The function code is equal to 4.
The Starting Analog Input Number is two bytes in length. The Starting Analog
Input Number may be any value less than the highest analog input number
available in the attached CPU. It is equal to one less than the number of the first
analog input returned in the normal response to this request.
The Number Of Analog Inputs value is two bytes in length. It must contain a value
from 1 to 125 inclusive. The sum of the Starting Analog Input value and the
Number Of Analog Inputs value must be less than or equal to the highest analog
input number available in the at-attached CPU. The high order byte of the Starting
Analog Input Number and Number of Analog Inputs fields is sent as the first byte
in each of these fields. The low order byte is the second byte in each of these
fields.
Response:
The Byte Count is a binary number from 2 to 250 inclusive. It is the number of
bytes in the normal response following the byte count and preceding the error
check. Note that the Byte Count is equal to two times the number of analog inputs
returned in the response. A maximum of 250 bytes (125) analog inputs is set so
that the entire response can fit into one 256 byte data block.
The analog inputs are returned in the Data field in order of number with the lowest
number analog input in the first two bytes and the highest number analog input in
the last two bytes of the Data field. The number of the First Analog Input in the
Data field is equal to the Starting analog input number plus one. The high order
byte is sent before the low order byte of each analog input.
Hi Lo Hi Lo
Query
Hi Lo Hi Lo
Normal Response
Query:
An Address of 0 indicates a broadcast request. All slave stations process a
broadcast re-quest and no response is sent.
The function code is equal to 05.
The Point Number field is two bytes in length. It may be any value less than the
highest output point number available in the attached CPU. It is equal to one less
than the number of the output point to be forced on or off.
The first byte of the Data field is equal to either 0 or 255 (FFH). The output point
specified in the Point Number field is to be forced off if the first Data field byte is
equal to 0. It is to be forced on if the first Data field byte is equal to 255 (FFH).
The second byte of the Data field is always equal to zero.
Response:
The normal response to a force single output query is identical to the query.
Note: The force single output request is not an output override command. The
output specified in this request is ensured to be forced to the value specified
only at the beginning of one sweep of the user logic.
Hi Lo Hi Lo
Query
Hi Lo Hi Lo
Normal Response
Query:
An Address 0 indicates a broadcast request. All slave stations process a
broadcast request and no response is sent.
The function code is equal to 06.
The Register Number field is two bytes in length. It may be any value less than
the highest register available in the attached CPU. It is equal to one less than the
number of the register to be preset.
The Data field is two bytes in length and contains the value that the register
specified by the Register Number Field is to be preset to. The first byte in the Data
field contains the high order byte of the preset value. The second byte in the Data
field contains the low order byte.
Response:
The normal response to a preset single register query is identical to the query.
Query
Normal Response
Query:
This query is a short form of request for the purpose of reading the first eight output
points.
An Address of zero is not allowed as this cannot be a broadcast request.
The function code is equal to 07.
Response:
The Data field of the normal response is one byte in length and contains the
states of output points one through eight. The output states are packed in order of
number with output point one’s state in the least significant bit and output point
eight’s state in the most significant bit.
Query
Normal Response
Query:
The Function code is equal to 8.
The Diagnostic Code is two bytes in length. The high order byte of the Diagnostic
Code is the first byte sent in the Diagnostic Code field. The low order byte is the
second byte sent. The loopback/maintenance command is defined only for
Diagnostic Codes equal to 0, 1, or 4. All other Diagnostic Codes are reserved.
The Data field is two bytes in length. The contents of the two Data bytes are
defined by the value of the Diagnostic Code.
Response:
See descriptions for individual Diagnostic Codes.
Query
Normal Response
Query:
An Address of 0 indicates a broadcast request. All slave stations process a
broadcast request and no response is sent.
The value of the Function code is 15.
The Starting Point Number is two bytes in length and may be any value less than
the highest output point number available in the attached CPU. The Starting Point
Number is equal to one less than the number of the first output point forced by this
request.
The Number of Points value is two bytes in length. The sum of the Starting Point
Number and the Number of Points value must be less than or equal to the highest
output point number available in the attached CPU. The high order byte of the
Starting Point Number and Number of Bytes fields is sent as the first byte in each
of these fields. The low order byte is the second byte in each of these fields.
The Byte Count is a binary number from 1 to 256 (0 = 256). It is the number of
bytes in the Data field of the force multiple outputs request.
The Data field is packed data containing the values that the outputs specified by
the Starting Point Number and the Number of Points fields are to be forced to.
Each byte in the Data field contains the values that eight output points are to be
forced to. The least significant bit (LSB) of the first byte contains the value that the
output point whose number is equal to the starting point number plus one is to be
forced to. The values for the output points are ordered by number starting with the
LSB of the first byte of the Data field and ending with the most significant bit
(MSB) of the last byte of the Data field. If the number of points is not a multiple of
8, then the last data byte contains zeros in one to seven of its highest order bits.
Response:
The description of the fields in the response are covered in the query description.
Note: The force multiple outputs request is not an output override command. The
outputs specified in this request are ensured to be forced to the values
specified only at the beginning of one sweep of the user logic.
Query
Normal Response
Query:
An Address of 0 indicates a broadcast request. All slave stations process a
broadcast re-quest and no response is sent.
The value of the Function code is 16.
The Starting Register Number is two bytes in length. The Starting Register
Number may be any value less than the highest register number available in the
attached CPU. It is equal to one less than the number of the first register preset
by this request.
The Number of Registers value is two bytes in length. It must contain a value from
1 to 125 inclusive. The sum of the Starting Register Number and the Number of
Registers value must be less than or equal to the highest register number
available in the attached CPU. The high order byte of the Starting Register
Number and Number of Registers fields is sent as the first byte in each of these
fields. The low order byte is the second byte in each of these fields.
The Byte Count field is one byte in length. It is a binary number from 2 to 250
inclusive. It is equal to the number of bytes in the data field of the preset multiple
registers request. Note that the Byte Count is equal to twice the value of the
Number of Registers.
The registers are returned in the Data field in order of number with the lowest
number register in the first two bytes and the highest number register in the last
two bytes of the Data field. The number of the first register in the Data field is
equal to the starting register number plus one. The high order byte is sent before
the low order byte of each register.
Response:
The description of the fields in the response are covered in the query description.
Query
Normal Response
Query:
The Report Device Type query is sent by the master to a slave in order to learn what
type of programmable control or other computer it is.
An Address of zero is not allowed as this cannot be a broadcast request.
The Function code is 17.
Response:
The Byte Count field is one byte in length and is equal to 5.
The Device Type field is one byte in length and is equal to 43 (hexadecimal) for
PACSystems
The Slave Run Light field is one byte in length. The Slave Run Light byte is equal
to OFFH if the CPU is in RUN mode. It is equal to 0 if the CPU is not in RUN
mode.
The Data field contains three bytes. For PACSystems CPUs, the first byte is the
Minor Type, and the remaining bytes are zeroes. The following table lists minor
types.
Response Data
CPU Model
(Minor Type)
02 hex IC698CPE010
04 hex IC698CPE020
05 hex IC698CRE020
06 hex IC698CPE030
08 hex IC698CPE040
0A hex IC695CPU310
10 hex IC695CPU320
11 hex IC695CRU320
Query
The query specifies the 4x reference to be written, the data to be used as the AND
mask, and the data to be used as the OR mask.
The function's algorithm is:
Result = (Current Contents AND And_Mask) OR (Or_Mask AND And_Mask )
For example,
Hex Binary
Current Contents 12 0001 0010
And_Mask F2 1111 0010
Or_Mask 25 0010 0101
And_Mask 0D 0000 1101
Result 17 0001 0111
Note: If the Or_Mask value is zero, the result is simply the logical ANDing of the
current contents and And_Mask. If the And_Mask value is zero, the result is
equal to the Or_Mask value.
Note: The contents of the register can be read with the Read Holding Registers
function (function code 03). They could, however, be changed subsequently
as the controller scans its user logic program.
Example of a Mask Write to register 5 in slave device 17, using the above mask
values:
Field Name Example (Hex)
Slave Address 11
Function 16
Reference Address Hi 00
Reference Address Lo 04
And_Mask Hi 00
And_Mask Lo F2
Or_Mask Hi 00
Or_Mask Lo 25
Error Check (LRC or CRC) --
Response
The normal response is an echo of the query. The response is returned after the
register has been written.
Query
The query specifies the starting address and quantity of registers of the group to be
read. It also specifies the starting address, quantity of registers, and data for the group
to be written. The Byte Count field specifies the quantity of bytes to follow in the Write
Data field.
Here is an example of a query to read six registers starting at register 5, and to write
three registers starting at register 16, in slave device 17:
Field Name Example (Hex)
Slave address 11
Function 17
Read Reference Address Hi 00
Read Reference Address Lo 04
Quantity to Read Hi 00
Quantity to Read Lo 06
Write Reference Address Hi 00
Write Reference Address Lo 0F
Quantity to Write Hi 00
Quantity to Write Lo 03
Byte Count 06
Write Data 1 Hi 00
Write Data 1 Lo FF
Write Data 2 Hi 00
Write Data 2 Lo FF
Write Data 3 Hi 00
Write Data 3 Lo FF
Error Check (LRC or CRC) --
Response
The normal response contains the data from the group of registers that were read.
The Byte Count field specifies the quantity of bytes to follow in the Read Data field.
Here is an example of a response to the query:
Field Name Example (Hex)
Slave Address 11
Function 17
Byte Count 0C
Read Data 1 Hi 00
Read Data 1 Lo FE
Read Data 2 Hi 0A
Read Data 2 Lo CD
Read Data 3 Hi 00
Read Data 3 Lo 01
Read Data 4 Hi 00
Read Data 4 Lo 03
Read Data 5 Hi 00
Read Data 5 Lo 0D
Read Data 6 Hi 00
Read Data 6 Lo FF
Error Check (LRC or CRC) --
Query
Normal Response
Query:
An Address of 0 is not allowed as this cannot be a broadcast request.
The Function Code is equal to 67.
The Starting Byte Number is two bytes in length and may be any value less than
or equal to the highest scratch pad memory address available in the attached
CPU as indicated in the table below. The Starting Byte Number is equal to the
address of the first scratch pad memory byte returned in the normal response to
this request.
The Number of Bytes value is two bytes in length. It specifies the number of
scratch pad memory locations (bytes) returned in the normal response. The sum
of the Starting Byte Number and the Number of Bytes values must be less than
two plus the highest scratch pad memory address available in the attached CPU.
The high order byte of the Starting Byte Number and Number of Bytes fields is
sent as the first byte in each of these fields. The low order byte is the second byte
in each of the fields.
Response:
The Byte Count is a binary number from 1 to 256 (0 = 256). It is the number of
bytes in the Data field of the normal response.
The Data field contains the contents of the scratch pad memory requested by the
query. The scratch pad memory bytes are sent in order of address. The contents
of the scratch pad memory byte whose address is equal to the Starting Byte
Number is sent in the first byte of the Data field. The contents of the scratch pad
memory byte whose address is equal to one less than the sum of the starting byte
number and number of bytes values is sent in the last byte of the Data field.
Communication Errors
Serial link communication errors are divided into three groups:
Invalid Query Message
Serial Link Time Outs
Invalid Transaction
The address reflects the address provided on the original request. The exception
function code is equal to the sum of the function code of the query plus 128. The error
subcode is equal to 1, 2, 3, or 4. The value of the subcode indicates the reason the
query could not be processed.
6. The Analog Input Number field specifies an analog input number not available in
the at-attached CPU (returned for function code 3).
7. The Diagnostic Code is not equal to 0, 1, or 4 (returned for function code 8).
8. The starting Byte Number and Number of Bytes fields specify a scratch pad
memory address that is not available in the attached CPU (returned for function
code 67).
Invalid Transactions
If an error occurs during transmission that does not fall into the category of an invalid
query message or a serial link time-out, it is known as an invalid transaction. Types of
errors causing an invalid transaction include:
Bad CRC.
The data length specified by the Memory Address field is longer than the data
received.
Framing or overrun errors.
Parity errors.
If an error in this category occurs when a message is received by the slave serial port,
the slave does not return an error message; rather the slave ignores the incoming
message, treating the message as though it was not intended for it.
Example
1. Port 1 is running RTU Slave protocol at 9600 baud.
2. A programmer is attached to port 1. The programmer is using 9600 baud.
3. The CPU installs SNP Slave on port 1 and the programmer communicates
normally.
4. The programmer stores a new configuration to port 1. The new configuration sets
the port for SNP Slave at 4800 baud (it will not take effect until the port loses
communications with the programmer).
5. When the CPU loses communications with the programmer, the new configuration
takes effect.
Permanent Datagrams
Permanent datagrams survive after the SNP session that created them has been
terminated. This allows an SNP master device to periodically retrieve datagram data
from a number of different PLCs on a multi-drop link, without the master having to
establish and write the datagram each time it reconnects to the PLC.
The maximum number of permanent datagrams that can be established is 32. When
this limit is reached, additional requests to establish datagrams are denied. One or
more of the permanent datagrams will need to be cancelled before others can be
established. Since the permanent datagrams are not automatically deleted when the
SNP session is terminated, this limit prevents an inordinate amount of these
datagrams from being established.
Permanent datagrams do not survive a power-cycle.
14
This chapter explains the PACSystems fault handling system, provides definitions of
fault extra data, and suggests corrective actions for faults.
Faults occur in the control system when certain failures or conditions happen that
affect the operation and performance of the system. Some conditions, such as the
loss of an I/O module or rack, may impair the ability of the PLC to control a machine
or process. Other conditions, such as when a new module comes online and becomes
available for use, may be displayed to inform or alert the user.
Any detected fault is recorded in the controller fault table or the I/O fault table, as
applicable.
Information in this chapter is organized as follows:
■ Fault Handling Overview 14-2 0H
GFK-2222P 14-1
14
Fault Tables
The PACSystems CPU maintains two fault tables, the controller fault table for internal
CPU faults and the I/O fault table for faults generated by I/O devices (including I/O
controllers). For more information, see “Using the Fault Tables” on page 14-4. 6H
Diagnostic faults are recorded in the appropriate table, and any diagnostic variables
are set. Informational faults are only recorded in the appropriate table.
Fault Action Response by CPU
Fatal Log fault in fault table.
Set fault references.
Go to Stop/Fault mode.
Diagnostic Log fault in fault table.
Set fault references.
Informational Log fault in fault table.
The hardware configuration can be used to specify the fault action of some fault
groups. For these groups, the fault action can be configured as either fatal or
diagnostic. When a fatal or diagnostic fault within a configurable group occurs, the
CPU executes the configured fault action instead of the action specified within the
fault.
Note: The fault action displayed in the expanded fault details indicates the fault
action specified by the fault that was logged, but not necessarily the executed
fault action. To determine what action was executed for a particular fault in a
configurable fault group, you must refer to the hardware configuration
settings.
The controller fault table provides the following information for each fault:
Location Identifies the location of the fault by rack.slot.
Description Corresponds to a fault group, which is identified in the fault Details.
Date/Time The date and time the fault occurred based on the CPU clock.
Details To view detailed information, click the fault entry. See “Viewing Controller
Fault Details” for more information.
Task Number Not used for most faults. When used, provides additional information for
Technical Support representatives.
Fault Extra Data Provides additional information for diagnostics by Technical Support engineers.
Explanations of this information are provided as appropriate for specific faults
in “Controller Fault Descriptions and Corrective Actions” on page 14-14.8H
User-Defined Faults
User-defined faults can be logged in the controller fault table. When a user-defined
fault occurs, it is displayed in the appropriate fault table as “Application Msg
(error_code):” and may be followed by a descriptive message up to 24 characters.
The user can define all characters in the descriptive message. Although the message
must end with the null character, e.g., zero (0), the null character does not count as
one of the 24 characters. If the message contains more than 24 characters, only the
first 24 characters are displayed.
Certain user-defined faults can be used to set a system status reference (%SA0081–
%SA0112).
User-defined faults are created using Service Request 21, which is described in
chapter 9.
Note: When a user-defined fault is displayed in the Controller Fault table, a value of
-32768 (8000 hex) is added to the error code. For example, the error code 5
will be displayed as -32763.
The I/O fault table provides the following information for each fault:
Location Identifies the location of the fault by rack.slot location, and sometimes bus and
buss address.
CIRC No. When applicable, identifies the specific I/O point on the module.
Variable If the fault is on a point that is mapped to an I/O variable, and the variable is
Name set to publish (either internal or external), the I/O fault table displays the
variable name. Unpublished I/O variables will not be displayed in this field.
Ref. If the fault is on a point that is mapped to a reference address, this field
Address* identifies the I/O memory type and location (offset) that corresponds to the
point experiencing the fault. When a Genius device fault or local analog
module fault occurs, the reference address refers to the first point on the block
where the fault occurred.
Fault Specifies a general classification of the fault.
Category
Fault Type Consists of subcategories under certain fault categories. Set to zero
when not applicable to the category.
Date/Time The date and time the fault occurred based on the CPU clock.
Details To view detailed information, click the fault entry. See “Viewing I/O Fault
Details” for more information.
*Note: The Reference Address field displays 16-bits and %W memory has a 32-bit
range. Addresses in %W are displayed correctly for offsets in the 16-bit range
(≤65,535). For %W offsets greater than 16-bits, the I/O Fault Table displays a
blank reference address.
Fault Description Provides a specific fault code when the I/O fault category is a circuit fault
(discrete circuit fault, analog circuit fault, low-level analog fault) or module
fault. It is set to zero for other fault categories.
These fault names do not correspond to %SA, %SB, %SC, or to any other reference
type. They are mapped to a memory area that is not user-accessible. Only the name
is displayed.
The full support of point fault contacts depends on the capability of the I/O module.
Some Series 90-30 modules do not support point fault contacts. The point fault
contacts for these modules remain all off, unless a Loss of I/O Module occurs, in
which case the RX3i CPU turns on all point fault contacts associated with the lost
module.
1, Rack Lost
The PLC generates this error when the main rack can no longer communicate with an
expansion rack. The error is generated for each expansion rack that exists in the system.
Correction
(1) Power off the system. Verify that both the BTM and the BRM are seated properly
in their respective racks and that all cables are properly connected and seated.
(2) Replace the cables.
(3) Replace the BRM.
(4) Replace the BTM.
Correction
(1) Check rack number jumper behind power supply—first on missing rack and then
on all other racks—for duplicated rack numbers.
(2) Update the configuration file if a rack should not be present.
(3) Add the rack to the hardware configuration if a rack should be present and one is
not.
(4) Power off the system. Verify that both the BTM and the BRM are seated properly
in their respective racks and that all cables are properly connected and seated.
(5) Replace the cables.
(6) Replace the BRM.
(7) Replace the BTM.
(8) Check for Termination Plug on last BRM.
Correction
(1) Run the firmware update utility for the module.
(2) Reset the module with the push-button.
(3 Power-cycle the entire system.
(4 Power-cycle the rack containing the module.
Correction
(1) Power off the system. Replace the module located in that rack and slot.
(2) If the board is located in an expansion rack, verify BTM/BRM cable connections
are tight and the modules are seated properly; verify the addressing of the
expansion rack.
(3) Replace the BTM.
(4) Replace the BRM.
(5) Replace the rack.
1, Extra Rack
Correction
(1) Check rack jumper behind power supply for correct setting.
(2) Update the configuration file to include the expansion rack.
Note: No correction necessary if rack was just powered on.
Action: Nonconfigurable.
Correction
Refer to the LAN Interface manual, GFK-0868 or GFK-0869 (previously GFK-0533).
Note: If a system configuration mismatch occurs when the CPU is in Run mode, the
fault action will be Diagnostic regardless of the fault configuration. For
additional information, see “Fault Parameters” in chapter 3.
Correction
(1) Replace the Genius I/O block with one corresponding to the configured module.
(2) Update the configuration file.
Fault Extra Data for Genius I/O Block Model Number Mismatch
Byte Value
[0] FF (flag byte)
[1] Serial Bus address
[2] Installed module type (See “Installed/Configured Module Types” on page 14-18.)
15H
[3] Configured module type (See “Installed/Configured Module Types” on page 14-18.) 16H
Number
Description
Decimal Hexadecimal
72 48 Phase B 24Vdc 16-point Proximity Sink Block
73 49 Phase B 24-48Vdc 16-point Source Block
73 49 Phase B 24Vdc 16-point Proximity Source Block
74 4A Phase B 12-24Vdc 32-point Sink Block
75 4B Phase B 12-24Vdc 32-point Source Block
76 4C Phase B 12-24Vdc 32-point 5V Logic Block
77 4D Phase B 115Vac 16-point Quad State Input Block
78 4E Phase B 12-24Vdc 16-point Quad State Input Block
79 4F Phase B 115/230Vac 16-point Normally Open Relay Block
80 50 Phase B 115/230Vac 16-point Normally Closed Relay Block
81 51 Phase B 115Vac 16-point AC Input Block
82 52 Phase B 115Vac 8-point Low-Leakage Grouped Block
127 7F* Genius Network Adapter (GENA)
131 83 Phase B 115Vac 4-input, 2-output Analog Block
132 84 Phase B 24Vdc 4-input, 2-output Analog Block
133 85 Phase B 220Vac 4-input, 2-output Analog Block
134 86 Phase B 115Vac Thermocouple Input Block
135 87 Phase B 24Vdc Thermocouple Input Block
136 88 Phase B 115Vac RTD Input Block
137 89 Phase B 24/48Vdc RTD Input Block
138 8A Phase B 115Vac Strain Gauge/mV Analog Input Block
139 8B Phase B 24Vdc Strain Gauge/mV Analog Input Block
140 8C Phase B 115Vac 4-input, 2-output Current Source Analog Block
141 8D Phase B 24Vdc 4-input, 2-output Current Source Analog Block
Correction
(1) Remove the indicated Genius module and install the module indicated in the
configuration file.
(2) Update the Genius module descriptions in the configuration file to agree with what
is physically installed.
Correction
(1) Replace the Analog Expander module with one corresponding to configured
module.
(2) Update the configuration file.
Correction
Reconfigure the block.
Correction
(1) Update the module to a revision that supports the feature.
(2) Change the module configuration.
Correction
(1) Change the module’s MAC address.
(2) Change the other device’s MAC address.
Correction
Change MAC address on softswitch utility or in software.
Correction
(1) Correct configuration of modem type.
(2) Consult LAN Interface manual for configuration setup.
Correction
See Fault Extra Data.
Correction
Modify the incorrect reference to be within range, or increase the configured size of
the reference data.
Correction
Contact Technical Support.
Correction
(1) Remove or correct the interrupt trigger reference.
(2) Update the configuration file to enable this particular interrupt.
Correction
Check fault table for other module-specific faults for possible reasons why the module
did not accept the configuration. Check that the configuration for the module is correct
and valid.
Correction
Set the ECC jumper to the enabled position. (See the instructions provided with the
Redundancy CPU firmware upgrade kit).
Correction
Set the ECC jumper to the disabled position (jumper on one pin or removed entirely).
Correction
(1) Replace the module in the slot with the type indicated in the configuration file.
(2) Update the configuration file.
Correction
Ensure that all modules configured for interrupts have corresponding interrupt
declarations in the program logic.
Correction
(1) Replace the battery. Do not remove power from the main rack until replacement is
complete. Reset the time-of-day clock using your programming software.
(2) Replace the module.
All Others
Correction
Replace the module.
Correction
(1) Install/replace a 100 watt power supply.
(2) Connect an external VME power supply that supplies 12 volts.
1C2 - 1C6 hex (450 – 454 decimal), LAN Interface Hardware Failure
Refer to the LAN Interface manual, GFK-0868 or GFK-0869 (previously GFK-0533),
for a description of these errors.
Correction
Replace the affected module.
Action: Nonconfigurable.
Correction
(1) Upload the configuration file and verify that the software recognizes the board
type in the file. If there is an error, correct it, download the corrected configuration
file, and retry.
(2) Display the controller fault table on the programmer. Contact Technical Support,
giving them all the information contained in the fault entry.
Correction
Change the application program to send COMMREQs to the affected module at a
slower rate or monitor the completion status of each COMMREQ before sending the
next.
Correction
Remove one of the BTMs from the rack; there can only be one in a CPU rack.
Correction
(1) Reload software into the indicated module.
(2) Replace the module.
Correction
For information on interpreting the fault extra data, refer to the PACSystems TCP/IP
Communications Station Manager Manual, GFK-2225, Appendix B.
Action: Nonconfigurable.
Correction
(1) Clear CPU memory and retry the store.
(2) Examine C application for errors.
(3) Display the controller fault table on the programmer. Contact Technical Support,
giving them all the information contained in the fault entry.
Action: Nonconfigurable.
Correction
Replace the battery. Do not remove power from the rack until replacement is
complete.
Correction
Replace the battery. Do not remove power from the rack until replacement is
complete.
Action: Nonconfigurable.
0, Constant Sweep
Correction
If Constant Sweep (0):
(1) Increase constant sweep time.
(2) Remove logic from application program.
Note: Error code 1 is not used.
Action: Nonconfigurable.
Action: Nonconfigurable.
Action: Nonconfigurable.
Correction
(1) Determine what caused the expiration (logic execution, external event, etc.) and
correct.
(2) Use the system service function block to restart the watchdog timer.
Correction
Increase the program’s stack size or adjust application program to reduce nesting.
Correction
Correct the specific problem in the application.
Correction
Correct logic or adjust memory size in hardware configuration.
Correction
Correct logic.
Correction
Correct logic or adjust memory size in hardware configuration.
39 hex/57 decimal, DLB heartbeat not received, All DLBs stopped and deleted
The controller has not received a heartbeat signal from the programmer within the
time specified by the DLB Heartbeat setting in the Target properties.
Correction
Increase the DLB Heartbeat setting. For additional information, see “Executing DLBs”
on page 14-60.
19H
3B hex /59 decimal, PSB called by a block whose %L or %P memory is not large
enough to accommodate this reference.
Parameterized blocks do not have their own %L data, but instead inherit the %L data
of their calling blocks. If %L references are used within a parameterized block and the
block is called by _MAIN, %L references are inherited from the %P references
wherever encountered in the parameterized block (for example, %L0005 = %P0005).
For a discussion of the use of local data with parameterized blocks, refer to
“Parameterized Blocks and Local Data” in chapter 5.
Correction
Determine which block called the parameterized subroutine block and increase the
size of %L or %P memory allocated to the calling block. (To do this, change the Extra
Local Words setting in the block’s Properties.)
The maximum size of %L or %P is 8192 words per block. If your application needs
more space, consider changing some %P or %L references to %R, %W, %AI, or
%AQ. These changes require a recompilation of the program block and a Stop Mode
store to the CPU.
It is possible, by using Online Editing in the programming software to cause a
parameterized block to use %L higher than allowed because of the way it inherits
data. To correct this condition, delete the %L variables from the logic and then remove
the unused variables from the variable list. These changes require a recompilation of
the program block and a Stop Mode store to the CPU.
1, Overtemperature failure.
CPU’s normal operating temperature exceeded.
Correction
Turn off CPU to allow heat to disperse and install a fan kit to regulate temperature.
Correction
Replace power supply module.
Correction
Replace power supply with a higher capacity model or reconfigure system to reduce
load on power supply.
Correction
Turn off system to allow heat to disperse. Install a fan kit to regulate temperature.
Action: Nonconfigurable.
Correction
Download an application program before attempting to go to Run mode.
Action: Nonconfigurable.
Correction
(1) Cycle power without battery.
(2) Examine any C applications for errors.
(3) Replace the battery on the CPU.
(4) Replace the expansion memory board on the CPU.
(5) Replace the CPU.
Correction
Replace the battery on the CPU.
Correction
Increase the constant sweep timer value.
Correction
(1) Increase base cycle time.
(2) Reduce Communications Window time.
Action: Nonconfigurable.
Action: Nonconfigurable.
Correction
Perform the Run Mode Store again. This fault is diagnostic.
Correction
None required. This fault is informational.
Correction
Delete and restore the program. This error is fatal.
Correction
No corrective action is required unless this fault occurs with other specific faults. The
fault may contain useful information for Technical Support if other problems are
encountered.
Fault
Category Fault Type Description Fault Extra Data
Addition of IOC (9) NA Extra Module (01 hex) NA
Reset Request (02 hex)
Loss of IOC (10) NA NA Timeout
Unexpected State
Unexpected Mail Status
VME Bus Error
IOC Software Fault (11) NA NA NA
Forced Circuit (12) NA NA Block Configuration
Discrete/Analog
Indication*
Unforced Circuit (13) NA NA Block Configuration
Discrete/Analog
Indication*
Loss of I/O Module (14) NA NA NA
Addition of I/O Module (15) NA VME Module Reset Requested (30 hex) NA
Extra I/O Module (16) NA NA NA
Extra Block (17) NA NA NA
IOC Hardware Failure (18) NA NA NA
GBC stopped reporting faults GBC detected high error NA NA
because too many faults have count on Genius Bus and
occurred (19) dropped off the bus for at
least 1.5 seconds. (1)
GBC Software Exception (21) Datagram queue full (1) NA
R/W request queue full (2)
Low priority mail rejected (3)
Background message
received before CPU
completed initialization (4)
Genius software version too
old (5)
Excessive use of internal
GBC memory (6)
Block Switch (22) – redundant NA NA Block Configuration
Genius block switched bus Number of Input Circuits
Number of Output
Circuits
Rack/Slot address of
GBC from which block
was removed.
Block not active on redundant bus NA NA NA
(23)
Reset of IOC (27) NA NA NA
Action: Diagnostic.
Correction
(1) (Only valid for Isolated I/O blocks.) Initiate “Pulse Test” COMREQ #1. Pulse test
may be enabled or disabled at I/O block.
(2) Correct the power failure.
Correction
Fix the cause of the short circuit.
4, Sustained Overcurrent
The GBC generates this error when it detects a sustained current level greater than 2
amps in the user wiring.
Correction
Fix the cause of the over current.
Correction
Fix the cause of the condition.
Correction
(1) Ensure that the block is installed to provide adequate circulation.
(2) Decrease the ambient temperature surrounding the block.
(3) Install RC Snubbers on inductive loads.
Correction
(1) Check for shunts across Genius output (pushbuttons).
(2) Replace the Genius I/O block.
Correction
Replace the Genius I/O block.
Correction
(1) Determine and repair the cause of the fuse blowing; replace the fuse.
(2) Replace the block.
Correction
Correct the condition causing the low alarm.
Correction
Correct the condition causing the high alarm.
Correction
Correct the problem causing the condition.
Correction
Correct the problem causing the condition.
Correction
Correct the problem causing the condition.
Correction
Correct the problem causing the condition.
Correction
Correct the problem causing the condition.
Correction
Correct the problem causing the condition.
Correction
(1) Check wiring to the module.
(2) Replace the module.
Correction
Correct the problem causing the condition.
Correction
Correct the condition causing the low alarm.
Correction
Correct the condition causing the high alarm.
Correction
Correct the problem causing the condition.
Correction
Correct the problem causing the condition.
Correction
Correct the problem causing the condition.
Correction
Correct the problem causing the condition.
Correction
Correct the problem causing the condition.
Correction
Correct the problem causing the condition.
Correction
Correct the problem causing the condition.
GENA Fault
The GENA Fault has no fault descriptions associated with it. GENA Fault Byte 2 is the
first byte of the fault extra data.
80 hex/128 decimal
The Genius I/O operating software generates this error when it detects a failure in a
GENA block attached to the Genius I/O bus.
Correction
Replace the GENA block.
Action: Diagnostic.
Loss of Block
The GBC generates this error when it is unable to communicate to the Genius device.
Correction
(1) Verify power and wiring to the block.
(2) Replace the block.
Correction
(1) Verify power and serial bus wiring to the block.
(2) Replace the block.
Correction
Informational only. None required.
Bus Fault
The GBC operating software generates this error when it detects a failure with a
Genius I/O bus. (Generated when Error Rate in the GBC configuration is exceeded—
the default Error Rate is 10 errors in a 10 second period).
Correction
(1) Determine the reason for the bus failure and correct it.
(2) Replace the GBC.
The Error Rate can be set higher than the default value if needed, but the bus
should be examined electrically—use an oscilloscope for waveform check.
Correction
(1) Reduce time between GBC output scans by assigning them to scan set 1.
(2) Increase CPU software watchdog timer setting
(3) Replace the CPU.
(4) Display the controller fault table on the programmer. Contact Technical Support,
giving them all the information contained in the fault entry.
SBA Conflict
The GBC detected a conflict between its serial bus address and that of another device
on the bus.
Correction
Adjust one of the conflicting serial bus addresses.
Correction
Replace the Genius block’s electronics module.
Correction
Replace the Genius block’s electronics module.
Correction
Replace the Genius block’s electronics module.
Correction
Replace the affected module.
Correction
Replace the input module.
Correction
(1) Determine and repair the cause of the fuse blowing, and replace the fuse.
(2) Replace the module.
Addition of IOC
The CPU generates this error when an IOC that has been faulted returns to operation
or when an IOC is found in the system and the configuration file indicates that no IOC
is to be in that slot or when an IOC is hot inserted.
Correction
(1) No action is necessary if the faulted module is in a remote rack and is returning
due to a remote rack power cycle.
(2) Update the configuration file or remove the module.
Correction
Update the configuration file or remove the module.
Note: This fault is always displayed as Fatal in the I/O Fault Table, regardless of its
configured action.
The CPU generates this error when it cannot communicate with an I/O Controller and
an entry for the IOC exists in the configuration file.
This fault is also logged when an IOC is hot removed (No corrective action necessary
in this case).
Correction
(1) Verify that the module in the slot/bus address is the correct module.
(2) Review the configuration file and verify that it is correct.
(3) Replace the module.
(4) If fault is not resolved, display the controller fault table on the programmer.
Contact Technical Support, giving them all the information contained in the
fault entry.
Action: Fatal.
Correction
Adjust the system to reduce the request rate to the GBC.
Response Lost
The GBC is unable to respond to a received datagram or read/write request.
Correction
Adjust the system to reduce the request rate to the GBC.
Correction
(1) Replace the module.
(2) Correct the configuration file.
(3) Display the I/O fault table on the programmer. Contact Technical Support, giving
them all the information contained in the fault entry.
Action: Diagnostic.
Correction
(1) No action necessary if module was removed or replaced or if the remote rack was
power cycled.
(2) Update the configuration file or remove the module.
Correction
(1) Remove the module. (It may be in the wrong slot.)
(2) Update and restore the configuration file to include the extra module.
Correction
(1) Remove or reconfigure the block. (It may be at the wrong serial bus address.)
(2) Update and restore the configuration file to include the extra block.
Correction
(1) Verify that the baud rate set in the configuration file for the GBC agrees with the
baud rate programmed in every block on the bus.
(2) Change the configuration file and restore it, if necessary.
(3) Replace the GBC.
(4) Selectively remove each block from the bus until the offending block is isolated
then replace it.
Correction
Check for incorrect wiring, interference from other equipment, a loose connection, or a
failed device on the Genius bus.
Correction
Adjust the system to reduce the request rate to the GBC.
Correction
Adjust the system to reduce the request rate to the GBC.
Correction
(1) No action is required to keep the block operating.
(2) The bus that the block switched from may need to be repaired.
(a) Verify the bus wiring.
(b) Replace the I/O controller.
(c) Replace the Bus Switching Module (BSM).
Caution
Do not use a DLB as a permanent part of a production
application, because a DLB is stopped and deleted from memory
when Logic Developer loses its Programmer-mode connection
with the host controller This could happen if the programmer’s
communications cable is disconnected or if a second
programmer connects serially to the same RX3i and establishes
a Programmer-mode session.
DLB Operation
DLBs are created as components of a specific Target
and are separate from the application logic block
components associated with a target.
They are written in LD programming language and
support many of the same features, such as View
Lock, Edit Lock, etc. as other block types.
A target can have a maximum of 128 DLBs in a given
PME target. Each DLB can have associated
published variable table (PVT) and cam profile (used
with Motion applications) files. Each DLB can use up
to 128K bytes of memory.
A DLB can be copied and pasted like other blocks. Regardless of where a DLB is
pasted, normal conflict handling is applied.
An active DLB can be dragged to the Toolchest, to folders under the Active Blocks
node, or to folders under the Program Blocks node. Note that only active blocks can
be dragged. Downloading, executing, or modifying a DLB does not affect the equality
of the main logic program.
DLB Variables
A DLB can have its own variables, which are local to the DLB and not accessible by
any other block. All DLB local variables are symbolic, retentive, and published.
Local variables should be used within DLBs whenever possible. If the system is
already running and you create new global variables in the DLB, the programming
software will not download the DLB because the programmer’s memory map will no
longer match the RX3i controller’s memory map.
DLB logic can read and write the global variables of the application that resides in the
same target as it does. These variables may be mapped or symbolic.
To use functions that require the use of located variables, a DLB must use the global
located variables of the application that resides in the same target as the DLB. These
functions include:
a. COMM_REQ (location of the Status variable)
b. DO_IO
c. Some SVC_REQ functions
A DLB can create aliases to global located application variables or arrays of variables
that were specifically created and documented to serve as “scratchpad” memory for
DLBs that need to use located variables.
Executing DLBs
DLB Properties
The properties for an active DLB include Execution Mode, which has the following
possible values:
Sweep (Default) - The DLB executes at a fixed point in the normal Controller
sweep, until explicitly stopped.
Update Rate – Uses the Update Rate defined for the Target. The actual rate
varies from a minimum value equal to the Update Rate to a maximum value of
Update Rate + 1 sweep. If the sweep takes more time than the update rate,
the DLB is executed as soon as the user logic program execution completes
in the current sweep.
Scan Once - The DLB executes exactly one time when the user requests for
DLB execution to start. It then stops executing until it is manually instructed to
run again.
Target Properties
The Target properties include DLB Heartbeat, which specifies, in milliseconds, the
maximum time the controller waits for a heartbeat signal from the programmer. If a
heartbeat timeout occurs, the DLB will be stopped and removed from the controller.
This insures that DLB execution is stopped in the event of a communications failure
between the programmer and the controller.
With larger applications or a slower PC, some operations such as opening the
Controller File Explorer may cause the DLB Heartbeat to time out. If this happens, you
may need to increase the DLB Heartbeat interval.
The DLB Heartbeat must always be greater than the Update Rate setting for the
Target.
DLB Icon shows the DLB state in the Navigator: Downloaded to controller or
Executing .
A Proficy View application can monitor the execution of the DLB by using its Local
Symbolic Variables in Panels and Scripts.
The DLB block icon in the Navigator indicates its current state, as shown below:
DLB Example
In this example, a block of LD logic is downloaded to the controller and executed.
The basic steps for using a sample DLB in the controller are as follows:
1. Create an LD block named MonitorScan and place it in the Toolchest. For
information on working with the Toolchest, refer to the online help.
The logic in the DLB block measures Controller scan time. It calculates the
Minimum (minTime), Maximum (maxTime), and Average (avgTime) time between
DLB block executions. When the DLB is set to Sweep Mode, these values should
be close to the Controller Sweep time.
2. Drag and drop the DLB Block from the Toolchest to the Active Blocks node in the
Navigator.
4. Go online to the Controller, and select Programmer Mode. Put the Controller in
Run mode or Stop Enabled mode.
5. Select the DLB Online Operations > Start menu to download the DLB to the
controller and start its execution.
6. In the Initialize Symbolic Variables dialog box, select how new local symbolic
variables will be initialized and click OK.
7. Notice the change in the DLB Icon and the DLB status in the Status bar.
DLB Running
8. Open the DLB block and place the DLB variables in the Data Watch window to
observe their operation.
This appendix contains instruction and overhead timing collected for each PACSystems CPU
module. This timing information can be used to predict CPU sweep times. The information in
this appendix is organized as follows:
Boolean Execution Times A-1 0H
GFK-2222P A-1
A
Instruction Timing
The tables in this section list the execution and incremental times in microseconds for each
function supported by the PACSystems CPUs. These figures were obtained by testing the
following CPU versions:
Model Firmware Version
All instructions IC695CPU310/CPU315/CPU320 6.0
except as listed below IC695CRU320* 6.0 (with ECC enabled)
IC698CPE010/CPE020 6.0
IC698CRE020* 6.0 (with ECC enabled)
IC698CPE030/CPE040* 6.0
IC698CRE030/CRE040* 6.0 (with ECC enabled)
* Due to Error Checking and Correction (ECC) times are approximately 5% slower, on average.
Enabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Bit Operation
AND_WORD 3.40 1.45 0.84 0.46 3.42 1.58 1.49 0.69 1.71 0.81 1.29 0.58 0.43 0.20
AND_DWORD 3.50 1.46 0.84 0.46 3.64 1.58 1.58 0.70 1.67 0.81 1.31 0.58 0.44 0.20
OR_WORD 3.40 1.50 0.84 0.47 3.58 1.71 1.56 0.76 1.72 0.90 1.28 0.59 0.43 0.20
OR_DWORD 3.63 1.51 0.89 0.47 3.55 1.66 1.54 0.73 1.71 0.83 1.44 0.60 0.48 0.20
XOR_WORD 3.37 1.44 0.86 0.46 3.42 1.57 1.48 0.69 1.73 0.80 1.29 0.61 0.48 0.25
XOR_DWORD 3.46 1.45 0.83 0.46 3.55 1.58 1.54 0.70 1.66 0.81 1.32 0.58 0.44 0.25
NOT_WORD 2.97 1.29 0.64 0.42 2.73 1.38 1.17 0.59 1.39 0.72 1.02 0.40 0.34 0.13
NOT_DWORD 2.93 1.32 0.67 0.40 2.81 1.44 1.21 0.62 1.44 0.75 1.07 0.41 0.35 0.14
MCMP_WORD 5.58 2.29 1.51 0.61 5.69 2.43 2.44 1.04 2.64 1.14 2.51 1.08 0.85 0.36
MCMP_DWORD 5.61 2.20 1.50 0.63 5.69 2.32 2.50 1.00 2.63 1.11 2.48 1.03 0.82 0.34
SHL_WORD 4.52 2.39 1.15 0.56 4.46 2.62 1.89 1.11 2.31 1.25 1.92 1.00 0.64 0.34
SHL_DWORD 4.54 2.44 1.12 0.56 4.53 2.73 1.92 1.56 2.31 1.28 1.90 0.98 0.63 0.32
SHR_WORD 5.15 2.43 1.18 0.57 4.64 2.59 1.96 1.09 2.45 1.24 1.98 0.98 0.66 0.32
SHR_DWORD 4.69 2.45 1.14 0.57 4.51 2.65 1.91 1.12 2.11 1.29 1.90 1.01 0.63 0.34
Enabled (μs)
Enabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
ROL_WORD 2.99 1.50 0.68 0.46 2.95 1.61 1.27 0.69 1.43 0.82 1.17 0.61 0.39 0.20
ROL_DWORD 3.22 1.53 0.64 0.46 3.27 1.61 1.39 0.70 1.46 0.84 1.07 0.59 0.36 0.20
ROR_WORD 2.91 1.43 0.66 0.46 2.93 1.52 1.25 0.66 1.45 0.82 1.11 0.57 0.39 0.19
ROR_DWORD 2.87 1.44 0.71 0.46 2.92 1.58 0.68 0.68 1.41 0.81 1.20 0.57 0.40 0.19
BTST_WORD 3.22 1.27 0.71 0.35 3.23 1.45 0.58 0.5 1.49 0.75 1.16 0.63 0.39 0.21
BTST_DWORD 3.09 1.26 0.71 0.34 3.29 1.37 1.41 0.5 1.48 0.72 1.19 0.63 0.40 0.19
BSET_WORD 2.38 1.17 0.59 0.30 2.62 1.43 1.12 0.61 1.17 0.72 0.97 0.48 0.31 0.16
BSET_DWORD 2.36 1.14 0.58 0.30 2.59 1.40 1.13 0.60 1.16 0.71 0.97 0.48 0.32 0.16
BCLR_WORD 2.39 1.14 0.59 0.30 2.51 1.36 1.08 0.59 1.20 0.72 0.97 0.48 0.31 0.16
BCLR_DWORD 2.45 1.19 0.59 0.30 2.49 1.33 1.07 0.57 1.16 0.70 0.97 0.47 0.32 0.16
BPOS_WORD 4.03 1.33 0.80 0.23 3.63 1.24 1.66 0.64 1.84 0.76 1.51 0.56 0.50 0.19
BPOS_DWORD 4.83 1.31 0.96 0.22 3.29 1.18 1.97 0.62 2.18 0.75 1.78 0.48 0.59 0.18
Relational
CMP_INT 3.52 1.16 0.89 0.33 3.51 1.25 1.50 0.54 1.45 0.60 1.58 0.52 0.53 0.17
CMP_DINT 3.54 1.19 0.91 0.34 3.86 1.32 1.66 0.57 1.51 0.66 1.61 0.52 0.53 0.17
CMP_REAL 3.63 1.20 0.94 0.35 3.65 1.30 1.57 0.56 1.52 0.62 0.53 0.53 0.54 0.1
CMP_LREAL 3.92 1.13 1.08 0.34 4.08 1.25 1.75 0.53 1.64 0.59 1.84 0.52 0.61 0.18
CMP_UINT 3.50 1.17 0.93 0.33 4.15 1.35 1.78 0.58 1.48 0.63 1.62 0.53 0.54 0.17
EQ_DATA 10.63 7.98 2.37 1.29 10.13 2.02 2.91 1.05 2.81 0.94 2.82 1.08 1.27 0.66
EQ_DINT 2.32 0.96 0.65 0.24 2.45 1.15 1.06 0.50 1.08 0.60 1.05 0.41 0.35 0.13
EQ_INT 2.45 0.96 0.66 0.24 2.49 1.14 1.07 0.50 1.04 0.58 1.04 0.47 0.35 0.16
EQ_LREAL 2.88 1.07 0.78 0.26 3.00 1.27 1.28 0.54 1.25 0.64 1.27 0.47 0.43 0.17
EQ_REAL 2.38 0.96 0.66 0.26 2.61 1.12 1.12 0.49 1.03 0.60 1.15 0.43 0.37 0.14
EQ_UINT 2.37 0.96 0.65 0.25 2.33 1.11 1.00 0.48 1.01 0.59 1.04 0.40 0.35 0.13
NE_INT 2.29 0.98 0.64 0.24 2.34 1.13 1.01 0.49 0.97 0.60 1.03 0.42 0.34 0.14
NE_DINT 2.37 1.00 0.66 0.24 2.56 1.34 1.10 0.55 1.10 0.66 1.08 0.43 0.36 0.14
NE_UINT 2.39 0.96 0.66 0.24 2.43 1.18 1.04 0.51 1.00 0.62 1.08 043 0.36 0.14
NE_REAL 2.35 0.95 0.67 0.25 2.65 1.18 1.14 0.51 1.05 0.61 1.13 0.40 0.38 0.13
NE_LREAL 2.87 1.04 0.79 0.26 2.93 1.17 1.26 0.51 1.24 0.60 1.29 0.42 0.44 0.15
GT_INT 2.49 0.98 0.66 0.25 2.50 1.14 1.08 0.49 1.05 0.60 1.05 0.40 0.35 0.13
GT_DINT 2.34 1.01 0.65 0.24 2.42 1.15 1.04 0.50 1.04 0.59 1.05 0.40 0.35 0.13
GT_REAL 2.36 0.94 0.65 0.24 2.60 1.11 1.11 0.48 1.02 0.58 1.13 0.40 0.38 0.13
GT_LREAL 2.82 1.02 0.77 0.27 2.90 1.15 1.27 0.50 1.21 0.60 1.28 0.43 0.43 0.15
GT_UINT 2.37 0.95 0.66 0.24 2.39 1.10 1.02 0.48 0.99 0.59 1.06 0.40 0.35 0.13
GE_INT 2.44 0.93 0.68 0.24 2.48 1.13 1.07 0.50 1.04 0.59 1.08 0.40 0.36 0.13
GE_DINT 2.43 1.01 0.66 0.24 2.57 1.19 1.08 0.51 1.08 0.62 1.07 0.41 0.36 0.14
GE_REAL 2.35 0.94 0.66 0.26 2.59 1.10 1.11 0.48 1.02 0.58 1.13 0.43 0.38 0.14
GE_LREAL 2.85 1.04 0.77 0.26 2.92 1.17 0.51 0.6 1.25 0.62 1.24 0.41 0.43 0.14
GE_UINT 2.44 1.03 0.67 0.24. 2.42 1.19 1.04 0.51 1.01 0.63 1.06 0.41 0.35 0.13
LT_INT 2.53 1.02 0.64 0.24 2.54 1.22 1.09 0.50 1.06 0.61 1.05 0.42 0.35 0.14
LT_DINT 2.37 1.05 0.65 0.25 2.58 1.27 1.11 0.54 1.09 0.66 1.08 0.43 0.36 0.14
LT_REAL 2.37 0.97 0.64 0.25 2.66 1.18 1.14 0.51 1.04 0.72 1.13 0.39 0.38 0.13
LT_LREAL 2.81 1.01 0.77 0.26 2.90 1.15 1.24 0.50 1.22 0.59 1.29 0.43 0.43 0.14
LT_UINT 2.41 0.95 0.65 0.24 2.48 1.15 1.03 0.49 1.02 0.60 1.04 0.0 0.35 0.13
LE_INT 2.46 0.99 0.69 0.25 2.48 1.14 1.07 0.49 1.03 0.60 1.08 0.40 0.36 0.13
Enabled (μs)
Enabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
LE_DINT 2.33 1.03 0.65 0.25 2.46 1.15 1.05 0.50 1.04 0.59 1.05 0.40 0.35 0.13
LE_UINT 2.44 1.02 0.64 0.24 2.41 1.17 1.03 0.50 1.04 0.61 1.02 0.41 0.34 0.13
LE_REAL 2.34 1.00 0.65 0.25 2.68 1.14 1.16 0.49 1.02 0.60 1.10 0.40 0.37 0.13
LE_LREAL 2.78 0.98 0.77 0.26 2.89 1.15 1.24 0.49 12.1 0.58 1.26 0.39 0.43 0.14
Conversion
BCD-4 to INT 2.17 1.00 0.55 0.23 2.11 1.11 0.90 0.48 0.95 0.62 0.83 0.34 0.27 0.14
DINT to INT 1.90 0.98 0.55 0.21 2.18 1.15 0.94 0.48 0.81 0.56 0.85 0.33 0.28 0.14
UINT to INT 2.04 0.94 0.49 0.20 1.95 1.14 0.84 0.49 0.81 0.55 0.77 0.31 0.25 0.14
BCD-8 to DINT 2.58 0.97 0.62 0.21 3.00 1.10 1.29 0.47 1.02 0.58 0.94 0.32 0.30 0.14
INT to DINT 1.88 0.2 0.51 0.21 2.19 1.13 0.94 0.49 0.78 0.55 0.75 0.33 0.23 0.15
UINT to DINT 1.90 0.96 0.63 0.21 2.17 1.18 0.94 0.51 0.92 0.57 0.79 0.32 0.27 0.13
INT to UINT 1.93 0.93 0.62 0.21 1.88 1.12 0.81 0.48 0.76 0.56 0.80 0.35 0.27 0.14
DINT to UINT 1.92 1.06 0.50 0.21 2.15 1.11 0.93 0.48 0.83 0.58 0.72 0.33 0.24 0.14
BCD-4 to UINT 2.18 1.04 0.55 0.22 2.13 1.08 0.93 0.48 0.94 0.65 0.81 0.35 0.27 0.14
INT to BCD-4 2.19 0.93 0.61 0.22 2.24 1.12 0.94 0.48 0.92 0.56 0.95 0.35 0.27 0.15
UINT to BCD-4 2.17 0.94 0.67 0.22 2.26 1.17 0.97 0.50 0.93 0.56 1.07 0.36 0.33 0.15
DINT to BCD-8 2.35 1.03 0.62 0.21 3.15 1.08 1.35 0.47 1.00 0.60 0.91 0.34 0.31 0.14
REAL_TO_INT 2.43 1.00 0.66 0.21 2.75 1.20 1.18 0.52 1.02 0.58 0.99 0.34 0.33 0.14
REAL_TO_UINT 2.37 0.99 0.63 0.21 2.67 1.18 1.15 0.51 1.01 0.57 0.95 0.34 0.31 0.14
REAL_TO_LREAL 2.10 0.95 0.52 0.21 2.26 1.01 0.97 0.43 0.88 0.55 0.88 0.37 0.29 0.12
REAL_TO_DINT 2.42 0.99 0.64 0.21 3.06 1.14 1.32 0.49 1.05 0.57 0.98 0.34 0.31 0.14
INT_TO_REAL 2.00 0.98 0.49 0.22 2.17 1.12 0.93 0.48 0.77 0.56 0.73 0.36 0.24 0.15
UINT_TO_REAL 1.87 0.95 0.55 0.23 2.19 1.17 0.94 0.50 0.77 0.57 0.83 0.37 0.28 0.15
DINT_TO_REAL 1.95 1.02 0.56 0.21 2.43 1.14 1.04 0.49 0.84 0.60 0.75 0.34 0.27 0.14
DINT_TO_LREAL 2.06 1.02 0.50 0.20 2.24 1.01 0.96 0.44 0.85 0.73 0.85 0.42 0.28 0.13
REAL_TRUN_INT 1.77 0.73 0.45 0.19 2.22 1.37 0.87 0.49 0.83 0.59 0.56 0.13 0.26 0.11
REAL_TRUN_DINT 1.84 0.83 0.52 0.19 2.42 1.13 1.09 0.55 0.89 0.64 0.70 0.13 0.30 0.11
DEG_TO_RAD_REAL 1.90 1.01 0.55 0.21 2.39 1.11 1.03 0.48 0.83 0.57 0.87 0.35 0.29 0.12
DEG_TO_RAD_LREAL 2.33 0.94 0.64 0.23 2.34 1.05 1.01 0.44 0.92 0.52 0.98 0.34 033 0.11
RAD_TO_DEG_REAL 1.91 0.97 0.59 0.21 2.34 1.16 1.03 0.48 0.94 0.57 0.86 0.35 0.29 0.12
RAD_TO_DEG_LREAL 2.33 0.94 0.64 0.23 2.33 1.06 1.00 0.44 0.93 0.52 0.98 0.34 0.33 0.11
BCD-4 to REAL 2.30 1.03 0.56 0.20 2.42 1.09 1.04 0.48 0.99 0.64 0.89 0.34 0.28 0.14
BCD-8 to REAL 2.62 0.94 0.66 0.20 3.07 1.14 1.32 0.49 1.11 0.55 0.98 0.31 0.31 0.14
LREAL_TO_DINT 2.67 1.03 0.63 0.20 2.85 1.00 1.21 0.43 1.07 0.73 1.10 0.42 0.36 0.13
LREAL_TO_REAL 2.25 1.01 0.54 0.21 2.35 1.09 1.01 0.47 0.87 0.58 0.83 0.35 0.2 0.12
Data Move
BLKCLR 1.96 0.96 0.45 0.19 2.13 1.16 0.91 0.50 1.09 0.62 0.73 0.34 0.24 0.11
BITSEQ 1.14 4.14 0.90 0.89 3.90 3.93 1.63 1.64 1.76 1.74 1.50 1.59 0.50 0.53
MOVE_BIT 3.00 1.37 0.67 0.25 2.93 1.53 1.22 0.63 1.47 0.81 1.06 0.41 0.35 0.14
MOVE_DINT 2.21 1.32 0.47 0.43 2.23 1.44 0.92 0.58 1.07 0.75 0.78 0.26 0.3 0.13
MOVE_INT 2.21 1.33 0.48 0.44 2.27 1.47 0.94 0.60 1.06 0.75 0.79 0.42 0.26 0.14
MOVE_DWORD 2.15 1.24 0.48 0.42 2.31 1.51 0.96 0.62 1.10 0.77 0.81 0.41 0.26 0.14
MOVE_LREAL 2.63 1.27 0.57 0.41 2.74 1.43 1.15 0.61 1.56 0.77 0.95 0.42 0.31 0.14
MOVE_REAL 2.15 1.24 0.47 0.41 2.18 1.39 0.91 0.57 1.07 0.74 0.78 0.40 0.26 0.14
MOVE_UINT - - - - 2.3 1.2 1.0 0.5 - - - - - -
Enabled (μs)
Enabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
MOVE_WORD 2.15 1.25 0.48 0.41 2.25 1.45 0.93 0.59 1.04 0.76 0.80 0.43 0.27 0.14
MOVE_DATA 8.36 2.36 2.16 1.20 9.81 3.22 2.72 1.02 2.73 0.95 2.54 1.12 1.11 0.69
MOVE_DATA_EX 9.28 1.98 2.60 1.66 12.25 4.22 3.53 1.15 3.35 1.27 2.85 1.44 1.27 0.80
MOVE_TO_FLAT 9.28 1.98 2.60 1.66 12.25 4.22 3.53 1.15 3.35 1.27 2.85 1.44 1.27 0.80
MOVE_FROM_FLAT 9.28 1.98 2.60 1.66 12.25 4.22 3.53 1.15 3.35 1.27 2.85 1.44 1.27 0.80
BLKMOV_WORD 2.89 2.17 0.68 0.60 2.73 2.26 1.17 0.97 1.23 1.14 1.13 0.91 0.38 0.30
BLKMOV_DINT 3.04 2.22 0.71 0.55 3.02 2.36 1.30 1.01 1.35 1.10 1.19 0.90 0.40 0.30
BLKMOV_INT 2.78 2.13 0.69 0.60 2.71 2.26 1.16 0.97 1.21 1.13 1.11 0.88 0.37 0.30
BLKMOV_DWORD 3.03 2.17 0.71 0.54 2.97 2.31 1.28 0.99 1.33 1.08 1.19 0.87 0.40 0.29
BLKMOV_REAL 2.98 2.14 0.70 0.53 3.01 2.34 1.29 1.00 1.35 1.10 1.18 0.89 0.39 0.29
BLKMOV_UINT 2.79 2.09 0.67 0.60 2.71 2.21 1.17 0.96 1.23 1.15 1.12 0.87 0.37 0.29
DATA_INIT_ASCII 0.89 1.25 0.20 0.35 0.91 1.39 0.40 0.60 0.76 0.77 0.30 0.44 0.10 0.15
DATA_INIT_COMM 1.03 1.20 0.22 0.34 1.05 1.36 0.46 0.60 0.84 0.78 0.37 0.43 0.11 0.15
DATA_INIT_DLAN 1.33 1.32 0.33 0.35 1.33 1.49 0.58 0.64 0.94 0.83 0.39 0.45 0.14 0.15
DATA_INIT_DINT 0.89 1.21 0.21 0.33 0.92 1.37 0.40 0.59 0.78 0.79 0.30 0.45 0.10 0.15
DATA_INIT_DWORD 0.97 1.26 0.21 0.34 0.98 1.39 0.41 0.60 0.79 0.81 0.32 0.45 0.11 0.15
DATA_INIT_INT 0.94 1.27 0.20 0.33 0.95 1.41 0.42 0.61 0.81 0.81 0.31 0.46 0.10 0.15
DATA_INIT_REAL 0.91 1.22 0.21 0.35 0.90 1.36 0.40 0.59 0.77 0.78 0.30 0.44 0.18 0.22
DATA_INIT_LREAL 0.96 1.18 0.18 0.34 0.98 1.33 0.42 0.57 0.79 0.78 0.36 0.48 0.11 0.16
DATA_INIT_WORD 0.97 1.27 0.20 0.34 0.90 1.41 0.40 0.61 0.78 0.79 0.30 0.44 0.10 0.15
DATA_INIT_UINT 0.93 0.9 0.21 0.35 0.90 1.37 0.39 0.59 0.78 0.79 0.31 0.46 0.10 0.15
SWAP_WORD 2.67 1.24 0.58 0.41 2.83 1.41 1.18 0.57 1.34 0.74 0.96 0.42 0.32 0.13
SWAP_DWORD 2.75 1.29 0.59 0.41 2.59 1.43 1.08 0.58 1.29 0.73 0.93 0.42 0.31 0.14
SHFR_BIT 6.52 2.88 1.45 0.64 6.35 2.94 2.74 1.27 2.92 1.22 2.37 1.08 0.79 0.36
SHFR_WORD 7.13 4.94 1.94 1.40 7.08 4.90 3.04 2.11 3.25 2.16 3.27 2.46 1.09 0.82
SHFR_DWORD 7.16 4.91 2.00 1.42 7.62 5.03 3.27 2.1 3.39 2.24 3.29 2.43 1.10 0.81
Data Table
SORT_INT 36.56 1.25 9.89 0.42 36.57 1.40 15.66 0.60 15.94 0.75 16.50 0.44 5.50 0.15
SORT_UINT 36.49 1.24 9.86 0.42 36.48 1.40 15.66 0.60 15.90 0.75 16.50 0.44 5.49 0.15
SORT_WORD 36.46 1.26 9.87 0.42 36.51 1.39 15.61 0.60 15.90 0.76 16.46 0.44 5.49 0.15
TBLRD_INT 3.49 1.23 0.88 0.33 4.14 1.75 1.79 0.77 2.03 0.97 1.52 0.73 0.49 0.25
TBLRD_DINT 3.58 1.27 0.90 0.33 4.19 1.77 1.79 0.76 2.02 0.97 1.47 0.69 0.48 0.22
TBLWRT_INT 4.02 1.53 1.03 0.41 4.06 1.74 1.73 0.74 1.72 0.84 1.59 0.74 0.53 0.25
TBLWRT_DINT 3.94 1.52 1.03 0.42 4.00 1.70 1.72 0.72 1.70 0.84 1.60 0.72 0.53 0.23
FIFORD_INT 4.04 1.68 0.92 0.41 3.92 1.69 1.68 0.71 1.67 0.72 1.58 0.66 0.53 0.22
FIFORD_DINT 4.00 1.69 0.92 0.41 3.89 1.71 1.65 0.73 1.65 0.68 1.56 0.66 0.52 0.22
FIFOWRT_INT 3.06 1.21 0.83 0.30 3.17 1.46 1.35 0.64 1.41 0.75 1.23 0.49 0.42 0.18
FIFOWRT_DINT 3.05 1.19 0.84 0.30 3.10 1.43 1.33 0.62 1.39 0.72 1.25 0.51 0.42 0.17
LIFORD_INT 3.83 1.69 0.87 0.41 3.77 1.73 1.60 0.72 1.62 0.72 1.49 0.66 0.50 0.22
LIFORD_DINT 3.81 1.64 0.87 0.41 3.77 1.74 1.60 0.72 1.63 0.72 1.48 0.66 0.49 0.22
LIFOWRT_INT 3.06 1.18 0.83 0.30 3.18 1.49 1.35 0.63 1.43 0.72 1.25 0.51 0.42 0.17
LIFOWRT_DINT 3.05 1.19 0.83 0.32 3.08 1.42 1.33 0.61 1.41 0.72 1.33 0.68 0.42 0.18
LIFOWRT_DWORD 3.06 1.18 0.83 0.30 3.15 1.47 1.35 0.63 1.43 0.72 1.25 0.53 0.41 0.18
Array
ARRAY_MOVE_BIT 4.62 2.03 0.91 0.51 4.10 2.16 1.76 0.92 1.94 1.06 1.57 0.75 0.52 0.25
Enabled (μs)
Enabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
ARRAY_MOVE_BYTE 3.62 1.84 0.78 0.57 3.12 1.97 1.34 0.84 1.45 0.95 1.25 0.82 0.42 0.27
ARRAY_MOVE_WORD 3.67 1.92 0.80 0.57 3.19 2.10 1.37 0.91 1.45 1.05 1.26 0.81 0.42 0.27
ARRAY_MOVE_DINT 3.62 1.94 0.80 0.57 3.10 2.04 1.33 0.85 1.41 0.97 1.24 0.81 0.41 0.2
ARRAY_MOVE_DWORD 3.61 1.85 0.80 0.58 3.07 1.97 1.32 0.84 1.42 0.95 1.24 0.81 0.42 0.27
ARRAY_MOVE_INT 3.72 1.99 0.80 0.57 3.23 2.12 1.39 0.92 1.47 1.03 1.26 0.79 0.42 0.26
ARRAY_MOVE_UINT 3.61 1.87 0.79 0.58 3.10 1.96 1.33 0.84 1.53 1.07 1.37 1.14 0.42 0.28
SRCH_BYTE 4.35 1.86 1.04 0.46 4.07 1.86 1.74 0.79 2.11 0.91 1.74 0.87 0.58 0.29
SRCH_WORD 4.05 1.81 1.02 0.46 3.90 1.86 1.70 0.82 1.83 0.91 1.90 0.83 0.63 0.27
SRCH_DWORD 4.17 1.82 1.12 0.46 4.57 1.91 1.96 0.82 1.92 0.96 1.78 0.78 0.59 0.25
ARRAY_RANGE_WORD 4.16 1.77 1.00 0.42 4.14 1.89 1.80 0.81 1.90 0.96 1.70 0.69 0.57 0.23
ARRAY_RANGE_DWORD 4.43 1.78 1.21 0.42 4.61 1.88 1.99 0.80 2.06 0.97 1.70 0.65 0.57 0.22
ARRAY_RANGE_DINT 4.47 1.83 1.16 0.43 4.39 1.89 1.88 0.81 1.97 0.99 1.81 0.69 0.61 0.23
ARRAY_RANGE_INT 4.69 1.85 1.16 0.41 4.22 1.84 1.81 0.79 1.92 0.96 1.84 0.68 0.61 0.23
ARRAY_RANGE_UINT 4.17 1.84 1.11 0.41 4.44 1.82 1.76 0.78 1.91 0.96 1.68 0.66 0.56 0.22
Math
ADD_INT 2.08 1.19 0.70 0.30 2.11 1.31 0.91 0.58 0.87 0.66 1.00 0.49 0.33 0.16
ADD_DINT 2.22 1.17 0.63 0.31 2.56 1.34 1.12 0.58 0.97 0.67 0.90 0.46 0.30 0.15
ADD_REAL 2.12 1.13 0.61 0.32 2.75 1.32 1.19 0.56 0.96 0.66 0.92 0.50 0.30 0.17
ADD_LREAL 3.09 1.20 0.75 0.31 2.82 1.30 1.21 0.54 1.09 0.62 1.28 0.53 0.43 0.18
ADD_UINT 2.08 1.14 0.64 0.30 2.23 1.42 0.93 0.57 0.96 0.68 0.90 0.51 0.29 0.16
SUB_INT 2.08 1.15 0.66 0.30 2.13 1.35 0.91 0.55 0.87 0.65 0.87 0.49 0.29 0.16
SUB_DINT 2.17 1.13 0.64 0.30 2.50 1.35 1.09 0.56 0.94 0.65 0.90 0.49 0.30 0.16
SUB_REAL 2.17 1.18 0.62 0.31 2.46 1.29 1.13 0.63 1.08 0.85 1.08 0.69 0.30 0.17
SUB_LREAL 2.81 1.27 0.81 0.31 1.26 1.26 1.26 0.54 1.10 0.63 1.37 0.53 0.47 0.17
MUL_INT 2.21 1.13 0.64 0.30 2.25 1.42 0.93 0.57 0.90 0.65 0.89 0.49 0.30 0.16
MUL_DINT 2.20 1.20 0.63 0.31 2.53 1.34 1.10 0.59 0.95 0.69 1.05 0.49 0.35 0.17
MUL_MIXED 2.06 1.19 0.64 0.31 2.36 1.31 1.00 0.58 0.89 0.66 0.90 0.51 0.30 0.16
MUL_REAL 2.13 1.14 0.57 0.31 2.57 1.39 1.08 0.56 0.93 0.65 0.88 0.48 0.29 0.17
MUL_LREAL 3.03 1.44 0.75 0.33 2.87 1.21 1.24 0.52 1.19 0.61 1.28 0.54 044 0.18
MUL_UINT 2.42 1.18 0.65 0.30 2.14 1.35 0.92 0.55 0.90 0.65 0.87 0.49 0.29 0.16
DIV_INT 2.35 1.19 0.64 0.30 2.25 1.29 0.99 0.58 0.98 0.68 0.90 0.48 0.30 0.16
DIV_DINT 2.45 1.21 0.64 0.31 2.71 1.35 1.16 0.60 0.99 0.73 0.93 0.48 0.30 0.16
DIV_REAL 2.39 1.13 0.69 0.30 2.70 1.43 1.11 0.56 0.96 0.68 1.07 0.49 0.36 0.16
DIV_LREAL 2.93 1.20 0.79 0.31 2.86 1.20 1.23 0.52 1.14 0.61 1.33 0.53 0.45 0.18
DIV_MIXED 2.45 1.15 0.67 0.30 2.70 1.35 1.15 0.56 1.11 0.65 0.97 0.49 0.33 0.16
MOD_INT 2.36 1.23 0.69 0.31 2.23 1.38 0.95 0.57 0.93 0.66 0.91 0.48 0.30 0.16
MOD_DINT 2.30 1.18 0.64 0.31 2.65 1.35 1.12 0.56 1.09 0.79 1.09 0.69 0.30 0.17
MOD_UINT 2.23 1.19 0.71 0.31 2.19 1.29 1.01 0.63 0.99 0.74 0.99 0.50 0.33 0.17
ABS_INT 1.96 0.91 0.51 0.23 2.01 1.21 0.99 0.63 0.93 0.60 0.84 0.38 0.29 0.13
ABS_DINT 1.99 0.91 0.56 0.23 2.44 1.17 1.05 0.50 0.96 0.60 0.84 0.37 0.28 0.12
ABS_REAL 2.12 0.96 0.56 0.21 2.45 1.14 1.05 0.49 0.87 0.59 0.90 0.35 0.30 0.12
ABS_LREAL 2.54 1.01 0.62 0.22 2.58 1.07 1.11 0.46 0.97 0.53 0.98 0.35 0.33 0.11
SCALE_INT 3.07 1.54 0.85 0.44 3.54 1.84 1.57 0.83 1.82 0.91 1.23 0.54 0.48 0.24
SCALE_DINT 2.65 1.51 0.71 0.51 2.98 1.79 1.37 0.89 1.61 1.03 1.00 0.51 0.41 0.24
SCALE_UINT 2.70 1.50 0.71 0.49 2.89 1.78 1.27 0.81 1.39 0.98 0.98 0.5 0.40 0.25
Enabled (μs)
Enabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
SQRT_INT 2.36 0.93 0.63 0.21 2.39 1.13 1.05 0.50 1.08 0.57 0.99 0.35 0.32 0.12
SQRT_DINT 2.86 0.93 0.69 0.21 3.37 1.18 1.44 0.51 1.28 0.58 1.08 0.35 0.36 0.12
SQRT_REAL 2.15 0.92 0.55 0.23 2.54 1.23 1.09 0.54 0.91 0.61 0.85 0.37 0.29 0.13
SQRT_LREAL 2.60 1.02 0.65 0.22 2.36 1.09 1.00 0.46 0.92 0.53 0.99 0.32 0.34 0.12
Trigonometric
SIN_REAL 2.48 0.92 0.61 0.22 3.02 1.11 1.26 0.48 0.97 0.57 0.95 0.35 0.32 0.12
SIN_LREAL 2.97 1.02 0.74 0.22 3.05 1.10 1.31 0.48 1.13 0.55 1.16 0.35 0.39 0.11
COS_REAL 2.41 0.93 0.67 0.21 2.96 1.11 1.22 0.48 0.97 0.57 1.06 0.35 0.36 0.12
COS_LREAL 2.93 1.02 0.75 0.21 2.88 1.09 1.18 0.47 1.10 0.56 1.17 0.35 0.39 0.11
TAN_REAL 2.53 0.92 0.63 0.21 3.02 1.11 1.26 0.48 1.02 0.57 0.96 0.35 0.32 0.12
TAN_LREAL 3.03 1.02 0.83 0.22 2.89 1.09 1.23 0.476 1.14 0.56 1.32 0.36 0.44 0.11
ASIN_REAL 2.80 0.98 0.73 0.21 3.29 1.20 1.41 0.52 1.26 0.63 1.13 0.35 0.38 0.12
ASIN_LREAL 3.23 1.00 0.88 0.21 3.14 10.5 1.32 0.45 1.33 0.54 1.37 0.35 0.46 0.12
ACOS_REAL 2.80 0.98 0.73 0.21 3.29 1.20 1.41 0.52 1.26 0.63 1.13 0.35 0.38 0.12
ACOS_LREAL 3.27 0.99 0.88 0.21 3.10 1.04 1.32 0.45 1.28 0.53 1.36 0.54 0.47 0.12
ATAN_REAL 2.56 1.03 0.67 0.23 3.26 1.25 1.37 0.54 1.02 0.65 1.05 0.37 0.35 0.12
ATAN_LREAL 2.88 1.00 0.76 0.21 2.87 1.04 1.20 0.46 1.08 0.53 1.18 0.35 0.40 0.12
Logarithmic
LOG_REAL 2.46 0.99 0.65 0.21 2.90 1.16 1.25 0.50 1.03 0.59 1.04 0.35 0.35 0.12
LOG_LREAL 3.25 0.95 0.73 0.21 2.88 1.03 1.21 0.43 1.11 0.52 1.19 0.38 0.39 0.12
LN_REAL 2.46 0.97 0.65 0.22 2.84 1.13 1.22 0.50 1.01 0.58 1.06 0.37 0.35 0.12
LN_LREAL 3.14 1.01 0.75 0.22 2.83 1.07 1.22 0.46 1.16 0.53 1.19 0.34 0.40 0.11
EXPT_REAL 3.75 1.29 0.88 0.31 4.13 1.41 1.77 0.63 1.52 0.72 1.39 0.40 0.46 0.13
EXPT_LREAL 3.35 1.31 0.72 0.30 3.03 1.33 1.30 0.57 1.35 0.71 1.24 0.42 0.42 0.14
EXP_REAL 2.26 0.97 0.61 0.23 2.70 1.16 1.16 0.50 0.97 0.59 1.00 0.37 0.33 0.12
EXP_LREAL 2.85 1.1 0.76 0.23 2.71 1.04 1.16 0.45 1.08 0.54 1.25 0.34 0.42 0.12
PID
PIDISA 6.80 6.14 1.52 1.43 6.92 6.18 2.98 2.66 3.17 2.79 2.66 2.44 0.89 0.81
PIDIND 6.83 6.16 1.51 1.39 6.86 6.13 2.97 2.66 3.17 2.79 2.65 2.43 0.88 0.81
Range
RANGE_INT 3.57 2.09 0.85 0.47 3.27 1.89 1.40 0.81 1.35 0.91 1.40 0.87 0.53 0.35
RANGE_DINT 3.28 1.85 0.85 0.47 3.26 1.94 1.40 0.83 1.36 0.92 1.41 0.81 0.47 0.27
RANGE_DWORD 3.39 1.84 0.85 0.47 3.40 2.02 0.87 0.87 1.46 1.01 1.42 0.82 0.47 0.27
Timers
ONDTR 4.91 3.81 1.11 0.83 4.79 3.70 2.01 1.54 2.11 1.57 1.82 1.38 0.61 0.46
OFDT 4.70 4.22 1.03 0.87 4.57 4.08 1.92 1.71 1.97 1.76 1.71 1.45 0.57 0.49
TMR 4.69 4.21 1.04 0.88 4.52 4.04 1.92 1.71 2.05 1.79 1.71 1.45 0.58 0.49
TOF 7.8 4.7 1.8 1.2 9.6 4.9 4.1 2.1 NA NA 3.9 2.0 1.3 0.6
TON 7.4 4.5 1.8 1.1 9.5 4.8 4.0 2.0 NA NA 3.9 2.0 1.3 0.6
TP 7.5 4.5 1.8 1.2 9.8 4.8 4.2 2.1 NA NA 3.9 2.0 1.3 0.6
Counters
UPCTR 4.24 4.28 0.96 0.92 4.13 4.17 1.74 1.76 1.85 1.86 1.59 1.53 0.53 0.51
DNCTR 4.20 4.23 0.94 0.93 4.16 4.18 1.73 1.75 1.84 1.86 1.54 1.53 0.52 0.51
Control
JUMPN 0.29 0.13 0.02 0.01 0.21 0.26 0.06 0.06 0.12 0.09 0.12 0.08 0.04 0.03
Enabled (μs)
Enabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
FOR/NEXT 1.40 0.70 0.23 0.18 1.51 0.72 0.64 0.31 0.90 0.47 0.56 0.26 0.19 0.09
MCRN/ENDMCRN 0.64 0.65 0.06 007 0.68 0.68 0.28 0.29 0.28 0.28 0.10 0.10 0.03 0.03
Combined
SWITCH_POS 1.96 0.91 0.57 0.21 1.91 1.02 0.82 0.44 0.87 0.59 0.60 0.13 0.26 0.12
DOIO 58.32 1.32 38.72 0.30 32.78 1.45 17.60 0.63 6.50 0.76 14.94 0.23 9.374 0.15
DOIO with ALT 58.17 1.28 38.67 0.33 32.56 1.48 17.47 0.63 6.47 0.75 14.91 0.32 9.36 0.18
DRUM_SEQ 6.74 5.42 1.63 1.30 6.98 5.70 2.99 2.45 3.21 2.67 2.63 2.21 0.88 0.74
SCAN_SET_IO 155.02 1.87 111.81 0.50 55.21 1.92 32.65 0.83 33.69 0.86 30.40 0.76 22.84 0.25
SUSIO 1.93 0.38 0.49 0.11 2.14 0.45 0.92 0.20 1.12 0.35 0.68 0.06 0.30 0.05
COMMREQ 219.48 1.51 133.87 0.36 117.27 1.60 73.25 0.73 73.30 0.90 73.42 0.59 65.23 0.22
CALL/RETURN (LD) 7.50 0.42 1.73 0.10 7.27 0.51 3.11 0.23 3.58 0.42 2.79 0.06 0.99 0.05
CALL/RETURN 4.92 0.41 1.22 0.11 7.84 0.56 2.07 0.23 2.33 0.42 1.94 0.05 0.72 0.06
(Parameterized Block)
CALL/RETURN 7.23 0.44 1.83 0.09 7.24 0.55 3.05 0.25 3.29 0.45 2.91 0.06 1.04 0.04
(C Block)
Bus
BUS_RD_BYTE* 20.16 2.35 7.41 0.68 21.30 2.42 10.87 1.04 1.94 1.18 8.56 1.00 5.24 0.33
BUS_RD_DWORD* 20.80 2.43 7.55 0.70 21.96 2.51 11.16 1.09 2.13 1.25 8.14 1.00 5.17 0.33
BUS_RD_WORD* 20.67 2.46 7.48 0.71 21.44 2.54 10.98 1.10 2.11 1.29 8.14 1.01 5.17 0.33
BUS_WRT_BYTE* 20.94 2.59 6.19 0.70 23.76 2.72 11.62 1.17 3.10 1.26 9.46 0.96 5.76 0.32
BUS_WRT_DWORD* 21.09 2.49 6.24 0.69 23.52 2.56 11.53 1.10 3.11 1.30 9.48 0.95 5.77 0.32
BUS_WRT_WORD* 20.76 2.49 6.17 0.69 23.51 2.55 11.54 1.10 3.09 1.28 9.46 0.95 5.76 0.32
BUS_RMW_BYTE* 21.72 2.67 7.96 0.78 24.44 2.78 12.97 1.19 2.41 1.37 10.28 1.12 6.58 0.37
BUS_RMW_DWORD* 21.20 2.71 7.96 0.78 24.73 2.82 12.80 1.21 2.23 1.35 10.06 1.13 6.48 0.38
BUS_RMW_WORD* 21.01 2.69 7.95 0.79 24.00 2.77 12.54 1.19 2.41 1.38 10.25 1.12 6.54 0.38
BUS_TS_BYTE* 19.07 2.05 7.80 0.50 23.23 2.36 12.23 1.01 2.19 1.28 9.93 0.87 6.45 0.29
BUS_TS_WORD* 20.16 2.09 7.66 0.51 22.98 2.31 12.14 0.99 2.06 1.15 9.96 0.91 6.5 0.28
* Results will vary with how quickly the module responds to bus cycles. Because of this, incremental times do not appear in the
table on page A-13. 3H
SVC_REQ
#1 6.57 1.02 1.34 0.18 6.40 1.20 2.75 0.52 2.78 0.79 2.10 0.1 0.77 0.10
#2 6.35 1.01 1.57 0.21 6.45 1.04 2.76 0.45 2.74 0.67 2.67 0.35 0.89 0.12
#3 4.80 0.92 0.98 0.18 4.94 1.15 2.10 0.49 2.45 0.74 1.39 0.09 0.53 0.10
#4 4.83 0.98 0.99 0.19 4.93 1.12 2.09 0.47 2.49 0.74 1.42 0.08 0.54 0.10
#5 4.90 0.92 0.97 0.17 4.99 1.19 2.12 0.50 2.49 0.77 1.44 0.10 0.55 0.10
#6 4.58 0.97 0.99 0.19 4.62 1.12 1.96 0.47 1.97 0.74 1.46 0.13 0.55 0.11
#7 8.64 1.12 1.95 0.20 8.81 1.17 3.67 0.51 3.72 0.78 3.30 0.34 1.05 0.10
#8 6.82 1.01 3.14 0.20 7.08 1.07 3.82 0.46 4.00 0.66 3.92 0.34 2.53 0.12
#9 4.53 1.03 1.06 0.20 4.12 1.06 1.76 0.46 1.95 0.66 1.83 0.32 0.60 0.11
#10 7.09 1.04 1.72 0.20 6.81 1.10 3.02 0.45 3.04 0.67 2.71 0.35 0.91 0.12
#11 4.25 1.03 1.07 0.20 4.26 1.12 1.84 0.48 1.90 0.68 1.82 0.34 0.61 0.11
#12 2.37 1.03 0.60 0.20 2.25 1.01 0.97 0.44 1.12 0.66 1.02 0.33 0.34 0.11
#13 4.56 1.09 0.89 0.18 4.55 1.24 1.96 0.51 2.78 0.75 1.32 0.08 0.51 0.09
#14 436.25 1.11 124.34 0.19 424.95 1.16 188.07 0.48 203.10 0.76 197.46 0.09 71.70 0.10
#15 2.72 1.10 0.60 0.34 3.18 1.14 1.38 0.49 1.25 0.51 0.94 0.49 0.31 0.16
#16 4.39 1.01 1.04 0.21 4.57 1.20 1.94 0.52 2.06 0.70 1.71 0.35 0.57 0.12
Enabled (μs)
Enabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
#17 2.95 0.90 0.85 0.19 2.94 1.13 1.24 0.49 NA NA 1.27 0.32 035 0.04
#18 112.51 1.05 41.61 0.21 112.36 1.18 48.09 0.51 48.20 0.69 69.36 0.33 23.12 0.11
#19 4.30 1.05 0.88 0.20 4.61 1.19 1.97 0.51 2.71 0.66 1.51 0.33 0.50 0.11
#20 17.78 1.05 4.59 0.21 18.92 1.19 8.09 0.51 7.58 0.65 7.69 0.33 2.56 0.11
#21 35.02 1.00 9.48 0.21 36.19 1.23 18.15 0.52 17.77 0.66 13.29 0.32 7.15 0.18
#22 2.82 1.00 0.65 0.20 2.86 1.23 1.23 0.53 1.28 0.63 1.19 0.36 0.39 0.12
#23 118.94 1.03 32.49 0.21 119.63 1.19 51.22 0.52 54.68 0.65 54.33 0.33 18.01 0.11
#24 4.66 0.98 1.05 0.20 150.79 1.17 77.38 0.51 1.26 0.65 58.55 0.32 34.67 0.11
#25 3.00 0.98 0.74 0.20 3.03 1.21 1.30 0.52 1.25 0.66 1.30 0.35 0.43 0.121
#26 NA NA NA NA NA NA NA NA 3.20 2.85 NA NA NA NA
1.73 1.28 2.65 2.13 0.88 0.71
#27 NA NA NA NA NA NA NA NA 3.42 2.85 NA NA NA NA
1.75 1.29 2.90 2.16 0.97 0.72
#28 NA NA NA NA NA NA NA NA 3.19 2.86 NA NA NA NA
1.96 1.30 3.30 2.17 1.18 0.73
#32 12.88 1.31 5.03 0.20 54.47 1.21 48.97 0.50 NA NA 47.36 0.30 45.12 0.12
NA NA NA NA
#43 NA NA NA NA NA NA NA NA 3.53 2.91 NA NA NA NA
1.77 1.27 2.93 2.11 0.98 0.70
#50 4.48 1.05 1.00 0.21 4.48 1.18 1.90 0.51 1.92 0.63 1.76 0.33 0.59 0.11
#51 4.54 0.99 1.05 0.20 4.60 1.13 1.98 0.49 1.9 0.64 2.27 0.80 0.59 0.10
#56 84.16 0.97 22.73 0.21 82.65 1.23 42.66 0.52 44.03 0.78 29.75 0.32 10.26 0.11
#57 17558.30 0.97 13970.00 0.21 19331.60 1.21 19017.30 0.52 18848.20 0.78 13585 0.32 13540 0.11
* Due to Error Checking and Correction (ECC) times are approximately 5% slower, on average.
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
PACMotion
MC_AbortTrigger 102.89 12.13 50.35 3.01 NA
MC_CamFileRead 63.96 30.43 13.84 7.05
MC_CamFileWrite 58.94 22.3 12.02 4.7
MC_CamIn 166.39 18.51 102.8 4.86
MC_CamOut 99.73 9.83 47.49 2.8
MC_CamTableDeselect 112.31 10.1 60.09 3.56
MC_CamTableSelect 137.31 14.68 75.97 3.77
MC_DelayedStart 140.53 12.93 76.77 3.22
MC_DigitalCamSwitch 227.35 20.22 152.59 4.32
MC_DL_Activate 108.43 14.69 50.63 3.39
MC_DL_Configure 195.16 14.81 130 3.72
MC_DL_Delete 143.56 14.64 49.57 3.14
MC_DL_Get 116.75 14.79 61.29 3.16
MC_GearIn 158.75 14.47 91.03 4.34
MC_GearInPos 130.26 15.51 70.31 4.43
MC_GearOut 97.58 9.63 46.91 3.2
MC_Halt 148.22 17.17 82.5 4.11
MC_Home 133.48 15.03 71.45 3.77
MC_JogAxis 125 15.49 65.18 3.38
MC_LibraryStatus 105.73 15.62 48.78 3.33
MC_ModuleReset 145.02 14.18 83.73 3.15
MC_MoveAbsolute 166.69 14.76 99.53 3.95
MC_MoveAdditive 154.47 16.57 89.47 4.14
MC_MoveRelative 168.23 16.32 90.54 3.83
MC_MoveVelocity 144.83 17.16 65.66 3.98
MC_Phasing 165.54 16.55 95.11 4.6
MC_Power 125.93 107.61 24.49 20.06
MC_ReadActualPosition 36.9 3.46 18.61 0.73
MC_ReadActualVelocity 36.28 3.34 18.36 0.74
MC_ReadAnalogInput 50.00 3.54 22.38 1.17
MC_ReadAnalogOutput 46.43 6.49 22.16 1.67
MC_ReadAxisError 31.83 4.39 17.17 1.32
MC_ReadBoolParameter 34.62 5.03 14.85 1.57
MC_ReadBoolParameters 37.14 5.18 15 1.64
MC_ReadDigitalInput 34.56 6.17 14.63 1.67
MC_ReadDigitalOutput 44.44 4.23 17.07 1.58
MC_ReadDwordParameters 35.6 5.05 14.54 1.58
MC_ReadEventQueue 122.95 20.60 60.86 4.33
MC_ReadParameter 51.51 3.23 22.87 1.58
MC_ReadParameters 45.24 5.42 20.72 1.61
MC_ReadStatus 41.39 15.52 16.01 4.12
MC_ReadTorqueCommand 36.68 3.38 18.51 0.73
MC_Reset 100.43 14.1 48.37 2.99
MC_SetOverride 120.62 15.65 62.21 3.81
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Disabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
Enabled (μs)
MC_SetPosition 114.03 17.24 54 3.97 NA
MC_Stop 111.7 13.87 56.38 3.6
MC_Superimposed 126.6 14.34 63.24 3.75
MC_SyncStart 116.75 13.3 60.23 3.1
MC_TouchProbe 110.33 13.6 56.11 3.32
MC_WriteAnalogOutput 109.63 16.99 53.53 3.36
MC_WriteBoolParameter 92.39 16.48 48.29 3.21
MC_WriteBoolParameters 105.72 16.08 57.41 3.23
MC_WriteDigitalOutput 113.01 19.35 52.99 4.27
MC_WriteDwordParameters 123.11 15.48 73.23 3.25
MC_WriteParameter 116.12 19.16 55.3 4.03
MC_WriteParameters 142.5 24.28 94.77 4.84
Incremental Times
An Increment time is shown for functions that can have variable length inputs.
Incremental time is added to the base function time for each addition to the length of an input
parameter. This time applies only to functions that can have varying input lengths (Search, Array
Moves, etc.)
Units:
For table functions, increment is in units of length specified.
For bit operation functions, increment is microseconds per bit.
For data move functions, microseconds per unit.
CPU315
CPE030/ CPE040/
Instruction CPU310 CPU320/ CPE010 CPE020 CRE020
CRE030 CRE040
CRU320*
Bit Operation
AND_WORD 0.12 0.02826 0.11572 0.04957 0.05006 0.04553 0.01517
AND_DWORD 0.16 0.3088 0.15567 0.5996 0.6002 0.5095 0.1766
OR_WORD 0.12 0.03 0.11857 0.05078 0.05039 0.04842 0.01543
OR_DWORD 0.16 0.03444 0.15729 0.06743 0.067 0.05626 0.01859
XOR_WORD 0.12 0.02818 0.1156 0.04983 0.05022 0.04613 0.01532
XOR_DWORD 0.16 0.03424 0.15568 0.06691 0.06669 0.05623 0.0187
NOT_WORD 0.08 0.02011 0.07498 0.03249 0.03248 0.03343 0.01117
NOT_DWORD 0.12 0.02839 0.11946 0.0513 0.05011 0.04666 0.01556
MCMP_WORD 0.26 0.05934 0.26347 0.11279 0.11288 0.0969 0.03228
MCMP_DWORD 0.29 0.06407 0.28671 0.12257 0.1226 0.10587 0.03523
SHL_WORD 0.17 0.0468 0.17382 0.07444 0.0745 0.07786 0.02594
SHL_DWORD 0.18 0.04381 0.18306 0.07839 0.07842 0.07287 0.02428
SHR_WORD 0.18 0.04883 0.18397 0.07872 0.0785 0.08088 0.02686
SHR_DWORD 0.19 0.0455 0.18868 0.08229 0.08062 0.07612 0.02537
BTST_WORD 0 0.00011 0.00014 -6E-05 -3E-05 0.00026 0.0001
BTST_DWORD 0 0.00046 0.00098 3.3E-05 0.00042 0.00071 0.00024
ROL_WORD 0.19 0.05071 0.1944 0.08303 0.08316 0.08447 0.02821
ROL_DWORD 0.17 0.03929 0.16617 0.07114 0.0714 0.06493 0.02161
ROR_WORD 0.16 0.0428 0.15893 0.06819 0.06809 0.0715 0.02382
ROR_DWORD 0.17 0.03992 0.16617 0.0737 0.07399 0.06634 0.0221
BPOS_WORD 0.76 0.17369 0.76048 0.32549 0.32584 0.28894 0.09634
BPOS_DWORD 1.69 0.38279 1.68499 0.72159 0.7231 0.6378 0.21258
Relational
EQ_DATA 0.0001 0.00019 0.00029 0.00004 0.00021 0.00051 2.6E-05
Conversion
REAL_TO_UINT 0 0.00421 0 0 0 0 0
REAL_TO_DINT 0 0.00936 0 0 0 0 0
Data Move
MOVE_BIT 0.02 0.00412 0.01958 0.00821 0.00813 0.00919 0.00307
MOVE_DINT 0.04 0 0.04398 0.01884 0.01943 0.0157 0.00533
MOVE_INT 0.02 0 0.02002 0.00833 0.00863 0.00694 0.00231
MOVE_DWORD 0.04 0.04613 0.04447 0.01904 0.0193 0.01584 0.00528
CPU315
CPE030/ CPE040/
Instruction CPU310 CPU320/ CPE010 CPE020 CRE020
CRE030 CRE040
CRU320*
MOVE_LREAL 0.09 0.01952 0.08989 0.03854 0.03878 0.03242 0.01083
MOVE_UINT - - 0.02 0.01 0.02 0.03 0.01
MOVE_WORD 0.02 0.00968 0.02046 0.00876 0.00839 0.00704 0.00234
MOVE_REAL 0.04 0.0372 0.04464 0.01914 0.01946 0.01572 0.00523
MOVE_DATA 0.0002 0.00022 0.00021 0.00015 0.00015 -0.0002 7.2E-05
MOVE_DATA_EX 0.0002 0.00028 0.0011 6.9E-05 6.9E-05 3.2E-05 2.1E-05
DATA_INIT_ASCII 0.01 0.00217 0.01057 0.00459 0.00844 0.00686 0.00101
DATA_INIT_COMM 0.02 0.00408 0.01982 0.00851 0.01724 0.01381 0.00229
DATA_INIT_DLAN 0 0 0 0 0 0 0
DATA_INIT_DINT 0.04 0.00811 0.04034 0.01713 0.00878 0.00754 0.00464
DATA_INIT_DWORD 0.04 0.00817 0.04032 0.01728 0.0084 0.00649 0.00461
DATA_INIT_INT 0.02 0.00447 0.01952 0.00837 0.01714 0.01392 0.00253
DATA_INIT_REAL 0.04 0.00796 0.03997 0.01711 0 0 0.00453
DATA_INIT_LREAL 0.08 0.01584 0.08051 0.03457 0.03434 0.02621 0.00902
DATA_INIT_WORD 0.02 0.00439 0.02071 0.00888 0.01718 0.01343 0.0025
DATA_INIT_UINT 0.02 0.00391 0.01971 0.00844 0.00849 0.00732 0.00226
SWAP_WORD 0.19 0.00498 0.18858 0.08076 0.08082 0.07672 0.02551
SWAP_DWORD 0.16 0.00942 0.15904 0.06834 0.06833 0.0613 0.0204
BLKCLR 0.02 0.00568 0.02528 0.01094 0.01097 0.0101 0.00334
SHFR_BIT 0.04 0.01174 0.04324 0.01827 0.01867 0.02013 0.00666
SHFR_WORD 0.18 0.04529 0.16054 0.06598 0.06848 0.07023 0.0251
SHFR_DWORD 0.20 0.04751 0.19577 0.08384 0.08263 0.08009 0.02663
Data Table
SORT_INT 0.74 0.22253 0.74431 0.31843 0.31607 0.37118 0.12369
SORT_UINT 0.74 0.22237 0.74589 0.31942 0.317 0.3717 0.12383
SORT_WORD 0.74 0.22243 0.74476 0.31838 0.31632 0.37082 0.12369
TBLRD_INT 0 -1E-05 0.00096 -0.0001 -9E-05 -0.0005 -0.0002
TBLRD_DINT 0 0.00012 -0.0002 -0.0001 0.00016 -0.0001 -9E-05
TBLWRT_INT 0 -0.0002 0.00048 0.00018 0.00023 1.1E-05 -4E-05
TBLWRT_DINT 0 -0.0002 -0.0009 -0.0004 -0.0003 -0.0002 -6E-05
FIFORD_INT 0.02 0.00432 0.1939 0.00816 0.00866 0.00698 0.00234
FIFORD_DINT 0.04 0.00927 0.04449 0.01866 0.0188 0.01529 0.00511
FIFOWRT_INT -0.1333333 0.00011 0.00058 0.00047 0.00046 -3E-05 -1E-05
FIFOWRT_DINT -1.1777778 -0.001 -0.0007 -0.0003 -0.0004 0 -1E-05
LIFORD_INT 0.01111111 0.00021 0.00022 0.00031 0.00042 -7E-05 1.1E-05
LIFORD_DINT 0.64444444 0.00021 0.00087 0.00037 0.00044 0.00027 8.9E-05
LIFOWRT_INT -0.8666667 0.0001 0.00037 0.00041 0.00042 0.00011 6.7E-05
LIFOWRT_DINT -0.8777778 4.4E-05 -0.0006 -0.0003 -0.0003 0.00019 0
LIFOWRT_DWORD 0.11111111 -0.0002 0.00101 0.00029 0.00028 -0.0002 -7E-05
Array
ARRAY_MOVE_BIT 0.02 0.00558 0.01967 0.00841 0.00863 0.00914 0.00304
ARRAY_MOVE_BYTE 0.01 0.0024 0.00957 0.00387 0.00379 0.00358 0.00119
ARRAY_MOVE_INT 0.02 0.00424 0.02002 0.00857 0.00857 0.0067 0.00223
ARRAY_MOVE_DINT 0.05 0.00961 0.04762 0.02019 0.02021 0.0164 0.00547
ARRAY_MOVE_WORD 0.02 0.0041 0.02063 0.00883 0.00878 0.00643 0.00211
CPU315
CPE030/ CPE040/
Instruction CPU310 CPU320/ CPE010 CPE020 CRE020
CRE030 CRE040
CRU320*
ARRAY_MOVE_DWORD 0.04 0.00974 0.04489 0.01922 0.01913 0.01529 0.00511
ARRAY_MOVE_UINT 0.02 0.00413 0.02014 0.00863 0.00922 0.00687 0.00231
SRCH_BYTE 0.07 0.01796 0.07277 0.03143 0.03112 0.03001 0.0101
SRCH_WORD 0.07 0.01828 0.07492 0.03186 0.03177 0.02826 0.0094
SRCH_DWORD 0.07 0.01507 0.06664 0.02854 0.02841 0.02641 0.00882
ARRAY_RANGE_DINT 0.54 0.13903 0.5422 0.232 0.23221 0.23434 0.07808
ARRAY_RANGE_INT 0.52 0.13471 0.51968 0.22242 0.22204 0.22419 0.07467
ARRAY_RANGE_UINT 0.52 0.13647 0.51902 0.22204 0.22200 0.22429 0.07492
ARRAY_RANGE_WORD 0.52 0.13578 0.52001 0.22294 0.22249 0.2255 0.07511
ARRAY_RANGE_DWORD 0.56 0.14221 0.55802 0.23898 0.23903 0.23764 0.07917
PACMotion
MC_ReadBoolParameters 12.08 7.62
MC_ReadDwordParameters 16.89 12.34
MC_ReadParameters 30.51 19.42
MC_WriteBoolParameters 1.24 0.48
MC_WriteDwordParameters 1.07 1.4
MC_WriteParameters 19.93 1.34
* Due to Error Checking and Correction (ECC), CRU320 times are approximately
5% slower, on average, than those for the CPU320.
The following diagram shows the differences between the full sweep phases and the base
sweep phases.
↓ ↓
Poll for Missing I/O Modules **
↓
↓
↓
Controller Communications Window
↓
↓
↓
Backplane Communications Window
<END OF SWEEP>
<END OF SWEEP>
* If I/O is suspended, the input and output scans are skipped.
** Polling for missing I/O modules only occurs if a “Loss of ...” fault has been logged for an I/O module.
*** If no Ethernet Global Data (EGD) exchanges are configured, the consumption and production scans are skipped.
For the base sweep, if there is no configuration, the input and output scan phases of the
sweep are NULL (i.e., check for configuration and then end). The presence of a configuration
with no I/O modules or intelligent I/O modules (GBC) has the same effect. The logic
execution time is not zero in the base sweep. The time to execute the empty _MAIN program
is included so that you only need to add the estimated execution times of the functions
actually programmed. The base sweep also assumes no missing I/O modules. The lack of
programmer attachment means that the Controller Communications Window is never
opened. The lack of intelligent option modules means that the Backplane Communications
Window is never opened.
I/O Scan Sweep Impact = Local Scan Impact + Genius I/O Scan
Number of analog input base and output modules (same segment)—exp. rack ______
Sweep impact per analog input base and output module (same seg.)—exp. rack x ______ = ______
Number of analog input base and output modules (new segment)—exp. rack ______
Sweep impact per analog input base and output module (new seg.)—exp. rack x ______ = ______
Note: If point faults are enabled, substitute the corresponding times for point faults enabled,
as shown in the following table.
An approximate per point or per channel average is shown in the following tables. These
averages are based on 1024 points (512 in and 512 out) for discrete and 128 channels (96 in
and 32 out) for analog. The 96 analog input channels consist of two base modules and five
expanders. Actual values will vary from the approximate average, depending on the system
I/O configuration.
The Ethernet Global Data (EGD) sweep impact has two parts, Consumption Scan and
Production Scan:
This sweep impact should be taken into account when configuring the CPU constant sweep
mode and setting the CPU watchdog timeout.
Where the Consumption and Production Scans consist of two parts, exchange overhead and
byte transfer time:
Exchange Overhead
Exchange overhead includes the setup time for each exchange that will be transferred during
the sweep. When computing the sweep impact, include overhead time for each exchange.
Note: The exchange overhead times in the table below were measured for a test-case
scenario of 1400 bytes over 100 variables.
EGD Exchange Overhead Time
Embedded Rack-based
Ethernet Interface Ethernet Module
CPU310 Consume / READ NA 233.6 µsec
Produce / WRITE NA 480.6 µsec
CPU315/CPU320 Consume / READ NA 100.0 µsec
Produce / WRITE NA 195.1 µsec
CPE010 Consume / READ 184.3 µsec 238.2 µsec
Produce / WRITE 342.0 µsec 452.0 µsec
CPE020 Consume / READ 87.7 µsec 117.8 µsec
Produce / WRITE 187.9 µsec 257.5 µsec
CPE030 Consume / READ 85.1 µsec 114.1 µsec
Produce / WRITE 191.8 µsec 253.5 µsec
CPE040 Consume / READ 35.08 µsec 47.12 µsec
Produce / WRITE 75.16 µsec 103.0 µsec
GBC See “Sweep Impact Time of Genius I/O and GBCs,” page A-23.
7H 8H
MAIN RACK
Sweep Calculations
Predicted Sweep = Base Sweep + I/O Scan Impact
User Memory Size is the number of bytes of memory available to the user for PLC
applications.
Model User Memory Size Bytes
IC695CPU310, IC698CPE010, 10MB 10,485,760
IC698CPE020, IC698CRE020
IC695CPU315 20MB 20,971,520
IC695CPU320, IC695CRU320 64MB 67,108,834
IC698CPE030, IC698CRE030 64MB 67,108,834
IC698CPE040, IC698CRE040
For a list of items that count against user memory, refer to page B-2.
0H
GFK-2222P B-1
B
@ 9-10
Backplane communications window mode
and timer, 9-9
@ Controller communications window, 9-8
indirect references, 6-9
Checksum
change or read number of words, 9-11
A Clear fault tables, 9-26
Clocks, 4-16
Addition of I/O module, 14-53 elapsed time clock, 2-3, 2-13, 2-15, 4-16
Addition of IOC, 14-51 reading with SVCREQ #16 or #50, 4-16
Addition of or extra rack, 14-16 time-of-day clock, 2-3, 2-6, 2-13, 2-15, 4-16
Address operators, 11-2 reading and setting, 4-16, 9-13
Alarm contacts, 14-13 synchronizing to SNTP server, 4-17
Analog expander modules CMM, 12-8
fault locating references, 14-12 Communication requests (COMM_REQ),
Analog I/O diagnostic information, 4-25 7-88
Analog input register references (%AI), 6-9 serial I/O, 13-9
Analog output register references (%AQ), SNP, 13-52
6-9 using to configure serial ports, 13-2
Application fault, 14-29 Communications Coprocessor, 12-8
Arrays, 6-6 Communications failure during store, 14-
accessing elements with variable index, 6-6 36
Auto-Located symbolic variables, 6-2 Configuration
parameters, CPU, 3-2
storing (downloading), 3-17
B system, 4-27
Constant sweep time exceeded, 14-28
Base sweep time, A-16 Constant sweep timer
Battery change or read, 9-5
status faults, 14-28 Convenience references. See System
Battery life status references
CPE010/CPE020/CRE020, 2-4 Conversion functions
CPE030/CRE030, 2-7
BCD4, INT, DINT, or REAL to UINT, 11-7
CPE040/CRE040, 2-7
BCD4, UINT, DINT, or REAL to INT, 11-7
CPU310, 2-13
BCD8, UINT, or INT to DINT, 11-7
CPU320, 2-15
Corrupted user program on power-up, 14-
Battery status fault, 14-28
33
Baud rates, serial port, 12-7
Coummunication requests
Bit in Word references, 6-10 Serial IO
Bit references, 6-11 calling from CPU sweep, 13-7
Block switch, 14-56 CPU hardware failure, 14-24
Blocks CPU memory validation, 4-26
external, 5-11 CPU performance data
parameterized, 5-4
base sweep time, A-16
program, 5-3
Boolean execution times, A-1
types of, 5-3
calculating predicted sweep times, A-31
UDFBs, 5-7
I/O interrupt performance and sweep
Boolean execution times, A-1 impact, A-29
RX3i, 2-13, 2-15 I/O module sweep impact times
RX7i, 2-3, 2-6 worksheet, A-22
Bulk memory, 6-9 I/O scan and I/O fault sweep impact, A-19
instruction timing, A-2
C programmer sweep impact time, A-18
sweep impact, Ethernet global data, A-25
Cables, 12-7 sweep impact, Genius I/O and GBCs, A-23
Changing window modes sweep impact, I/O modules, A-19
GFK-2222P Index-1
Index
O
PLC system fault table full, 14-29
Point faults, 14-13
OEM protection, 4-20 Port Status, read, 13-12
Off Delay Timer, 7-156 Power-down sequence, 4-28
On Delay Stopwatch Timer, 7-158 Power-up self-test, 4-26
On Delay Timer, 7-161 Power-up sequence, 4-26
CPU memory validation, 4-26
One-shot coil, 7-28 I/O system initialization, 4-27
Online editing, 5-4, 14-31 logic/configuration source, 4-14
Operands for instructions, 6-29 option module dual port interface tests, 4-27
Operation, Protection, and Module Status, option module self-test completion, 4-27
2-1 power-up self-test, 4-26
Operators, Structured Text, 11-2 system configuration, 4-27
Option module Preemptive block scheduling, 5-22
dual port interface tests, 4-27 Privilege levels, 4-19
self-test completion, 4-27 Program block
Option module software failure, 14-25 how blocks are called, 5-2
Output references (%Q), 6-11 program blocks and local data, 5-13
Output scan, 4-4 Program block checksum failure, 14-27
Overflow Program execution
floating point numbers, 6-23 controlling, 5-18
math functions, 7-126, 8-24 Program name, 5-1
math functions, 8-24 Program register references (%P), 6-9
Overhead sweep impact times, A-16 Program scan, 4-4
base sweep time, A-16 Program structure
calculating predicted sweep times, A-31 how blocks are called, 5-2
Genius I/O and GBCs, A-23 program blocks and local data, 5-13
I/O interrupt performance and sweep Programmable Coprocessor Module, 12-9
impact, A-29 Programmer sweep impact times, A-18
I/O module sweep impact times
worksheet, A-22
Protection level request, 4-19
I/O modules, A-19 Protocol errors, 13-7
I/O scan and I/O fault sweep impact, A-19 Protocols supported, 12-3
intelligent option modules, A-28 Stop mode, 3-12
programmer sweep impact time, A-18
Overrides, 6-13 R
P Read Bytes, 13-19
Read controller ID, 9-23
Parameter passing mechanisms, 5-14 Read controller run state, 9-24
Parameterized block, 5-4 Read elapsed power down time, 9-47
and local data, 5-4 Read elapsed time clock, 9-30, 9-51
reference out of range, 5-4 Read fault tables, 9-36
referencing formal parameters, 5-4 Read from flash. See Service Request
Part numbers (SVC_REQ) functions, (#56)
station manager cable, 2-6 Read IO forced status, 9-34
Password access failure, 14-34 Read last-logged fault table entry, 9-27
Passwords, 4-19
S
Structure variables, 5-8
Structured Text
expressions, 11-1
Scan parameters, 3-4 language, 5-18, 11-1
Scan sets operators, 11-2
operation, 4-22 statement types, 11-4
parameters, 3-14 syntax, 11-3
Scope Structured Text statement types
data, 6-15 argument present, 11-18
Security, system, 4-19 assignment, 11-5
privilege levels, 4-19 CASE, 11-12
Self-test EXIT, 11-19
I/O system initialization, 4-27 FOR, 11-14
option module dual port interface tests, 4-27 function call, 11-6
option module self-test completion, 4-27 IF, 11-11
power-up self-test, 4-26 REPEAT, 11-17
Serial I/O RETURN, 11-10
Cancel Operation function, 13-15 WHILE, 11-16
Y
Y0 parameter, 5-4
Z
Ziegler and Nichols tuning, 10-17