RX 7 Imanual
RX 7 Imanual
RX 7 Imanual
New In Stock!
GE Fanuc
http://www.pdfsupply.com/automation/ge-fanuc/rx7i-
pacsystem/IC698ETM001
Rx7I Pacsystem
1-919-535-3180
RX7i Standalone Ethernet Module 10/100 IC698E IC698ET
IC698ETM
www.pdfsupply.com
Email: [email protected]
Contents
Introduction....................................................................................................................................1-1
New Features ................................................................................................................... 1-2
PACSystems Control System Overview ....................................................................... 1-3
RX3i Overview................................................................................................................... 1-4
RX7i Overview................................................................................................................... 1-4
Migration to PACSystems ................................................................................................. 1-5
PACSystems Documentation......................................................................................... 1-6
GFK-2222B iii
Contents
CPU Operation...............................................................................................................................5-1
CPU Sweep ...................................................................................................................... 5-2
Parts of the CPU Sweep ................................................................................................... 5-3
CPU Sweep Modes ........................................................................................................... 5-6
Program Scheduling Modes........................................................................................... 5-9
Window Modes ................................................................................................................ 5-9
Data Coherency in Communications Windows ........................................................... 5-9
Run/Stop Operations .................................................................................................... 5-10
CPU Stop Modes ............................................................................................................ 5-10
Stop-to-Run Mode Transition .......................................................................................... 5-11
Run/Stop Mode Switch Operation................................................................................... 5-12
Flash Memory Operation .............................................................................................. 5-13
Logic/Configuration Source and CPU Operating Mode at Power-up ...................... 5-14
Clocks and Timers ........................................................................................................ 5-16
Elapsed Time Clock ........................................................................................................ 5-16
Time-of-Day Clock .......................................................................................................... 5-16
Watchdog Timer .............................................................................................................. 5-17
System Security ............................................................................................................ 5-18
Passwords and Privilege Levels ..................................................................................... 5-18
OEM Protection ............................................................................................................... 5-19
PACSystems I/O System .............................................................................................. 5-20
Default Conditions for I/O Modules ................................................................................. 5-20
Multiple I/O Scan Sets..................................................................................................... 5-20
Genius I/O ....................................................................................................................... 5-21
Genius Global Data Communications ............................................................................. 5-22
I/O System Diagnostic Data Collection ........................................................................... 5-22
Power-Up and Power-Down Sequences ..................................................................... 5-24
Power-Up Sequence ....................................................................................................... 5-24
Power-Down Sequence .................................................................................................. 5-26
Retention of Data Memory Across Power Failure........................................................... 5-26
Languages....................................................................................................................... 6-15
Controlling Program Execution ................................................................................... 6-17
Interrupt-Driven Blocks ................................................................................................ 6-18
Interrupt Handling............................................................................................................ 6-18
Timed Interrupts .............................................................................................................. 6-19
I/O Interrupts ................................................................................................................... 6-20
Module Interrupts ............................................................................................................ 6-20
Interrupt Block Scheduling .............................................................................................. 6-20
Program Data.................................................................................................................................7-1
Variables .......................................................................................................................... 7-2
Mapped Variables ............................................................................................................. 7-2
Symbolic Variables............................................................................................................ 7-2
Reference Memory .......................................................................................................... 7-4
Word (Register) References ............................................................................................. 7-4
Bit (Discrete) References .................................................................................................. 7-6
User Reference Size and Default ................................................................................... 7-7
%G User References and CPU Memory Locations .......................................................... 7-7
Genius Global Data ......................................................................................................... 7-8
Transitions and Overrides.............................................................................................. 7-8
Retentiveness of Logic and Data .................................................................................. 7-9
Data Scope..................................................................................................................... 7-10
System Status References ........................................................................................... 7-11
%S References ............................................................................................................... 7-11
%SA, %SB, and %SC References.................................................................................. 7-12
Fault References ............................................................................................................. 7-14
How Program Functions Handle Numerical Data ...................................................... 7-16
Data Types ...................................................................................................................... 7-16
Real Numbers ................................................................................................................. 7-17
Word-for-Word Changes .............................................................................................. 7-18
Symbolic Variables.......................................................................................................... 7-18
GFK-2222B Contents v
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
GFK-2222B Contents ix
Contents
GFK-2222B Contents xi
Contents
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.
Ethernet Configuration for the embedded RX7i Ethernet interface is described in
chapter 4. (For details on PACSystems Ethernet communications and configuration of
the RX7i and RX3i Ethernet Interface modules, refer to TCP/IP Ethernet
Communications for PACSystems, GFK-2224.)
CPU Operation is described in chapter 5.
Programming Features are described in chapters 6 through 10 and Appendix A.
■ Elements of an Application Program: chapter 6
■ Program Data: chapter 7
■ Instruction Set Reference: chapter 8
■ The Service Request Function: chapter 9
■ The PID Function: chapter 10
■ Structured Text: chapter 11
Ethernet and Serial Communications are described in chapter 12.
Serial I/O, SNP, and RTU Protocols are described in chapter 13.
Fault Handling is described in chapter 14.
Instruction Timing is provided in appendix A.
User Memory Allocation is described in Appendix B.
Converting Applications from Series 90 to PACSystems is discussed in appendix
C, which also summarizes operational differences among the control systems.
GFK-2222B 1-1
1
New Features
Note: This manual describes the following new features. 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.
■ SRTP channels and Enhanced EGD performance. (Chapter 2 and TCP/IP
Ethernet Communications for PACSystems, GFK-2224)
■ CPU hot standby redundancy - RX7i only. (Chapter 2 and PACSystems CPU
Redundancy Manual, GFK-2308)
■ Support for Memory Xchange modules - RX7i only. (Chapter 2 and PACSystems
RX7i Memory Xchange Modules User’s Manual, GFK-2300)
■ Configurable number of last scans to be completed after the CPU has received an
indication that a transition from Run to Stop or Stop Faulted mode should occur.
(Chapters 3 and 5.)
■ Ability to disable Run/Stop switch and Memory Protection feature. (Chapters 3
and 5.)
■ Ability to configure Stop mode protocol for serial ports 1 and 2. (Chapters 3 and
12.)
■ Zero-based array indexing for parameterized block parameters. Maximum number
of parameters increased from 7 inputs/8 outputs to 63 inputs/64 outputs.
(Chapter 6.)
■ Preemptive block scheduling. (Chapter 6.)
■ Function blocks (user-defined function blocks) (Chapter 6.)
■ Programming in Structured Text language. (Chapters 6 and 11.)
■ New function blocks: DRUM, SCALE, and SWITCH_POS. (Chapter 8.)
■ Timer function blocks with thousandths resolution. (Chapter 8.)
■ New service requests: 29 (Read Power Down Time) and 45 (Skip Next I/O Scan).
(Chapter 9.)
■ SNP communications on serial ports 1 and 2. (Chapter 11)
■ Serial I/O communications on serial ports 1 and 2. (Chapters 11 and 12)
■ Bit in word referencing that allows you to specify individual bits in a WORD
reference in retentive memory as inputs and outputs of Boolean expressions,
function blocks, and calls that accept bit parameters.
■ In-system upgradeable firmware.
RX3i Overview
The RX3i control system hardware consists of an RX3i rack and up to seven
Series 90-30 expansion racks. The CPU must be in the main rack (rack 0), but can be
in any slot 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 rack uses a dual backplane 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
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.
■ 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 must reside in the 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
should it become necessary. Each unit must have a redundancy CPU, IC698CRE020.
The redundancy communication path is provided by IC698RMX016 Redundancy
Memory Xchange (RMX) modules set up as redundancy links. For details on the
operation of an RX7i redundancy system, refer to the PACSystems Hot Standby CPU
Redundancy User’s Guide, GFK-2308.
Migration to PACSystems
The PACSystems control system provides cost-effective expansion of existing
systems. Support of existing Series 90 modules and expansion racks protects your
hardware investment. You can upgrade on your timetable without disturbing panel
wiring.
■ The RX3i supports most Series 90-30 modules and expansion racks. For a list of
supported I/O, Communications, Motion, and Intelligent modules, see the
PACSystems RX3i Installation Manual, GFK-2299.
■ The RX7i supports most existing Series 90-70 modules, expansion racks, and
Genius networks. For a list of supported I/O, Communications, and Intelligent
modules, see the PACSystems RX7i Installation Manual, GFK-2223.
■ Allows conversion of Series 90-70 and Series 90-30 programs to preserve
existing development effort.
■ Conversion of VersaPro and Logicmaster applications to Machine Edition allows
smooth transition to PACSystems.
This chapter provides details on the hardware features of the PACSystems CPUs and
their specifications.
GFK-2222B 2-1
2
Indicators
RUN
ENA
■ Module OK (EOK)
RESET
■ LAN online (LAN)
BATTERY
■ Status (STAT) ACCESS
100 LINK
10/100 ENET 1B
100 LINK
ETHERNET
RESTART
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)
Serial Ports
The CPU has three independent, on-board serial ports, accessed by connectors on
the front of the module. Ports 1 and 2 provide serial interfaces to external devices.
Port 1 or port 2 can be used for firmware upgrades. The third on-board serial port is
used as the Ethernet station manager port. All serial ports are isolated. For serial port
pinouts and details on serial communications, refer to chapter 12.
Ethernet Ports
There are two RJ-45 Ethernet ports on the embedded Ethernet Interface. Either or
both of these ports may be attached to other Ethernet devices. Each port
automatically senses the data rate (10Mbps or 100Mbps), duplex (half duplex or full
duplex), and cabling arrangement (straight through or crossover) of the attached link.)
For Ethernet port pinouts, refer to chapter 12. For details on Ethernet
communications, 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.
Specifications
For environmental specifications, see “RX7i General Specifications” in Appendix A of
the RX7i Installation Manual, GFK-2223.
IC698CPE010, IC698CPE020, and IC698CRE020
Battery: Memory retention 5 years at 20°C (68°F)
40 days nominal without applied power
Program storage Up to 10 Mbytes of battery-backed RAM
10 Mbytes of non-volatile flash user memory
Current required from 5V bus CPE010: 3.2 Amps nominal
CPE020, CRE020: 4.5 Amps nominal
Operating Temperature CPE010: 0 to 50°C (32°F to 122°F
0 to 60°C (32°F to 140°F) with fan tray
CPE020, CRE020: 0 to 60°C (32°F to 140°F), fan tray required
Floating point Yes
Boolean execution speed, typical
CPE010 0.195ms per 1000 Boolean contacts/coils
CPE020 0.14ms per 1000 Boolean contacts/coils
Time of Day Clock accuracy Maximum drift of 9 seconds per day
Elapsed Time Clock (internal timing) 0.01% maximum
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
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 areas, %AI and %AQ: configurable up to 32Kwords
refer to chapter 7.) %W: configurable up to the maximum available user RAM
Symbolic: configurable up to 10 Mbytes
Error Checking and Correction CRE020 only.
Serial Ports
The CPU has two independent, on-board serial ports,
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 pinouts and details on serial
communications, refer to chapter 12.
Indicators
The eight CPU LEDs indicate the operating status of
various CPU functions. LED operation is described in
the following table.
CPU LED Operation
LED State
CPU Operating State
On Blinking Off
CPU OK On CPU has passed its powerup diagnostics and is functioning properly.
CPU OK Off CPU problem. RUN and OUTPUTS ENABLED LEDs may be blinking in
an error code pattern, which can be used by technical support for
troubleshooting. This condition and any error codes should be reported to
your technical support representative.
CPU OK, OUTPUTS ENABLED, CPU is in boot mode and is waiting for a firmware update through a serial
RUN Blinking in unison port.
RUN On CPU is in Run mode
RUN Off CPU is in Stop mode.
OUTPUTS ENABLED Output scan is enabled.
On
OUTPUTS ENABLED Output scan is disabled.
Off
I/O FORCE Override is active on a bit reference.
On
BATTERY Battery is low.
Blinking
BATTERY Battery is dead or not attached.
On
SYSTEM FAULT CPU is in Stop/Faulted mode because a fatal fault has occurred.
On
COM1 Blinking Signal activity on port.
COM2 Blinking
*After initialization sequence is complete.
Specifications
For environmental specifications, see GE Fanuc Product Agency Approvals,
Standards, General Specifications, GFK-0867G or later.
IC695CPU310
Battery: Memory retention 5 years at 20°C (68°F)
40 days nominal without applied power.
Program storage Up to 10 Mbytes of battery-backed RAM
10Mbyte of non-volatile flash user memory
Current required from 5V bus 3.2 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 contacts/coils
Time of Day Clock accuracy Maximum drift of 2 seconds per day
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 90-30-style
serial
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
(For a detailed listing of memory areas, refer to %AI and %AQ: configurable up to 32Kwords
%W: configurable up to the maximum available user RAM
chapter 7.)
Symbolic: configurable up to 10 Mbytes
The PACSystems CPU and I/O system is configured Machine Edition Logic Developer-
PLC programming software.
The CPU verifies the actual module and rack configuration at power-up and periodically
during operation. The actual configuration must be the same as the programmed
configuration. Deviations are reported to the CPU alarm processor function 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: An IC698CPE020 can be easily converted to a CRE020 by installing different
firmware and moving a jumper. Detailed instructions are included in the firmware
upgrade kit for CRE020.
GFK-2222B 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) (ms 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 1000, 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.
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).
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 symbolic variables.
The symbolic variables feature allows you to create variables without having to manually
locate them in memory (i.e. like a variable in a typical high-level language). For details on
using symbolic 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.
Note: The number of bits is multiplied by 4 to keep track of forces and other
characteristics of bit variables.
+ [if Point Faults are enabled] (total words of %AI memory + total words of %AQ
memory) * (1 byte / word)
+ [if Point Faults are enabled] (total bits of %I memory + total bits of %Q memory)
/ 8 bits/byte)
Note: The total reference points is considered system memory and is not counted
against user memory.
Fault Parameters
You can configure each fault type to be either diagnostic or fatal.
A diagnostic fault does not stop the PLC from executing. 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 0x01.) 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 0x02.) 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 0x03.) 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 0x04.) When an option module stops communicating with the PLC
Module CPU 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 0x0C.) 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 0x09.) 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 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.) 0x0B
Default: Fatal.
Recoverable Local Memory Error Redundancy CPUs only. (Fault group 0x26) 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 0x18, error code 0x0001.) 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 PLC fault table or reset the PLC.)
Default: Diagnostic.
PLC Fault Table Size (Read-only.) The maximum number of entries in the PLC 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 such as IC698CRE020. For details on
configuring CPU for redundancy, refer to the PACSystems Hot Standby CPU Redundancy
User’s Guide, GFK-2308.
Available Available
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 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. The
Serial I/O protocol is only active when the CPU is in run mode. If the CPU can be set to Stop
mode, it will switch the protocol from Serial I/O to the Stop Mode (default is RTU Slave). If an
SNP Master, such as the programming software in Serial mode, begins communicating on a
port, the RTU protocol automatically switches to SNP Slave. As long as the CPU can be
stopped, the port’s protocol can be auto-switched to one that enables serial programmer
connection.
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:
■ SNP Slave: Reserved for the exclusive use of the SNP slave. This is the only valid choice if the
Port Mode is set to SNP Slave.
■ RTU Slave: Reserved for the exclusive use of the Modbus RTU Slave protocol.
Default:
■ When the Port Mode is set to SNP Slave: SNP Slave (only valid choice).
■ When the Port Mode is set to RTU Slave, Message Mode, or Serial I/O: RTU Slave.
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.
Port Parameters
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).
Caution
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.
Before you can use the embedded Ethernet Interface with the PACSystems RX7i, you
must configure the Ethernet Interface using the programming software. For the Ethernet
Interface specifically, the software allows you to:
■ Define the Status address of the Ethernet Interface.
■ Assign the IP address for the Ethernet Interface, and optionally the subnet mask, the
gateway address, and the name server address.
■ Configure the Station Manager port (optional).
Note: Only RX7i CPUs provide an embedded Ethernet interface. For information on
configuring the rack-based RX7i and RX3i Ethernet Interface modules, refer to
TCP/IP Ethernet Communications for PACSystems, GFK-2224.
GFK-2222B 4-1
4
Configuration Parameters
Ethernet Parameters (Settings Tab)
Configuration Mode This is fixed as TCP/IP.
Adapter Name This field is set to the rack and slot location of the Ethernet Interface and cannot be
changed. For the embedded Ethernet Interface, the rack and slot location is the same as
its CPU (0.1.0 for rack 0, slot 1, subslot 0).
Use BOOTP for IP This selection specifies whether the Ethernet must obtain its working IP address over the
Address network via BOOTP. When set to False (= do not use BOOTP), the IP Address value
must be configured (see IP Address parameter, below). When set to True, the IP Address
parameter is forced to 0.0.0.0 and becomes non-editable.
IP Address, Subnet Mask, These values should be assigned by the network administrator in charge of your network.
and Gateway IP Address It is important that these parameters are correct, otherwise the Ethernet Interface may be
unable to communicate on the network and/or network operation may be corrupted. It is
especially important that each node on the network is assigned a unique IP address.
However, if you have no network administrator and are using a simple isolated network
with no gateways, you can use the following range of values for the assignment of local
IP addresses:
10.0.0.1 First PLC
10.0.0.2 Second PLC
10.0.0.3 Third PLC
.
.
.
10.0.0.255 PLC Programmer TCP or host
Also, in this case, set the subnet mask, and gateway IP address to 0.0.0.0.
Note: If the isolated network is connected to another network, the IP addresses
10.0.0.1 through 10.0.0.255 must not be used and the subnet mask, and gateway IP
address must be assigned by the network administrator. The IP addresses must be
assigned so that they are compatible with the connected network. For more information
on addressing, refer to “Network Administration Support” in TCP/IP Ethernet
Communications for PACSystems, GFK-2224.
See also “Determining If an IP Address Has Already Been Used” on page 4-6.
Name Server IP Address The IP address of the Domain Name Server (DNS), which provides a mapping of
workstation names to IP addresses and MAC numbers for TCP/IP networking. (The DNS
feature is not currently supported. We recommend leaving this configuration parameter at
its default value, 0.0.0.0)
Max Web Server The maximum number of web server connections. This value corresponds to the number
Connections of TCP connections allocated for use by the web server, rather than the number of web
clients. Valid range is 0 through 16. Default is 2.
Max FTP Server The maximum number of FTP server connections. This value corresponds to the number
Connections of TCP connections allocated for use by the FTP server, rather than the number of FTP
clients. Each FTP client uses two TCP connections when an FTP connection is
established. Valid range is 0 through 16. Default is 2.
Network Time Sync The method used to synchronize the real-time clocks over the network. Currently the
choices are None/DISABLED (for no network time synchronization) and SNTP/ENABLED
(for synchronization to remote SNTP servers on the network).
Status Address The reference memory location that receives LAN Interface Status (LIS) bits (16 bits) and
the Channel Status bits (64 bits). The Channel Status bits are always located immediately
following the LAN Interface Status bits. The Status address can be assigned to %I, %Q,
%R, %W, %AI or %AQ memory. The default value is the next available %I address.
Note: Do not use the 80 bits assigned to the LIS bits and Channel Status bits for other
purposes, or your data will be overwritten.
Length The sum of the LIS bits and the Channel Status bits. Automatically set to 80 bits (for %I
and %Q Status address locations) or 5 words (for %R, %W %AI, and %AQ Status
address locations).
Redundant IP (Available only when the target's CPU is a redundancy CPU and at least one
Redundancy Memory Xchange module, IC698RMX016, is set as a redundancy link.)
Enabling this feature allows the Ethernet Interface to share a redundant IP address with
the corresponding Ethernet Interface in the redundant Hardware Configuration in a dual
HWC target.
Default: Disable
Redundant IP Address (Available only when the Redundant IP parameter is set to Enable.) The IP address
assigned to two redundant Ethernet Interface modules that reside in the redundant main
racks (one in the primary PLC and the other in the secondary PLC). Although the
Redundant IP Address is shared by both Ethernet Interface modules, only the active
Ethernet Interface can respond to the address.
The Redundant IP Address should be assigned by the person responsible for your
network. TCP/IP network administrators are familiar with these sorts of parameters and
can assign values that work with your existing network. If the IP address is improperly set,
your device may not be able to communicate on the network and could disrupt network
communications.
Valid range: x.x.x.x, where x ranges from 1 through 255.
Default: 0.0.0.0.
Note: Each redundant Ethernet Interface has its own unique IP address, which is used
to communicate exclusively with it. The redundant IP address must not be the
same as the unique IP address of either Ethernet Interface.
Note: For details on redundant CPU systems, refer to the PACSystems CPU
Redundancy User’s Guide, GFK-2308.
I/O Scan Set The scan set to be assigned to the Ethernet daughterboard. Scan sets are defined in the
CPU’s Scan Sets tab. The valid range is 1 through 32. Default is 1.
Caution
The IEEE 802.3 standard strongly discourages the manual
configuration of duplex mode for a port (as would be possible using
Advanced User Parameters.) Before manually configuring duplex
mode for a port using AUP, be sure that you know the
characteristics of the link partner and are aware of the
consequences of your selection. In the words of the IEEE standard:
"Connecting incompatible DTE/MAU combinations such as full
duplex mode DTE to a half duplex MAU, or a full-duplex station (DTE
or MAU) to a repeater or other half duplex network, can lead to
severe network performance degradation, increased collisions, ate
collisions, CRC errors, and undetected data corruption."
Note: If speed and duplex mode of a port are forced using AUP, the switch will no longer
perform automatic cable detection. This means that if you have the switch port
connected to a switch or hub port you must use a crossover network cable. If you
have the switch port connected to the uplink port on a switch or hub or if you have
the switch port connected to another Ethernet device, you must use a normal
network cable.
If a problem is detected during power-up, the Ethernet Interface may not transition directly
to the operational state. If the Interface does not transition to operational, refer to
“Troubleshooting,” in Support” in TCP/IP Ethernet Communications for PACSystems,
GFK-2224.
A ping command can be executed from a UNIX host or PC running TCP/IP (since most
TCP/IP communications software provides a ping command) or from another Ethernet
Interface. When using a PC or UNIX host, you can refer to the documentation for the ping
command, but in general all that is required is the IP address of the remote host as a
parameter to the ping command. For example, at the command prompt type:
ping 10.0.0.1
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
■ Clocks and Timers
■ System Security
■ I/O System
■ Power-Up and Power-Down Sequences
GFK-2222B 5-1
5
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 Sweep In this mode, each sweep begins at a user-specified Constant Sweep time after 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 is
Window 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 5-6.
The CPU also operates in one of four Run/Stop Modes (for details, see “Run/Stop
Operations” on page 5-10):
■ 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 batteryless power-cycle or go to Stop mode.
Phase Activity
Backplane Communications Communications with intelligent devices occur during this window. The rack-based Ethernet
Window Interface 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.
In Normal Sweep mode, each sweep can consume a variable amount of time. The
Logic window is executed in its entirety each sweep. The Communications windows
can be set to execute in a Limited or Run-to-Completion mode. Normal Sweep is the
most common sweep mode used for control system applications.
The following figure illustrates three successive CPU sweeps in Normal Sweep mode.
Note that the total sweep times may vary due to sweep-to-sweep variations in the
Logic window, Communications windows, and Background window.
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
In Constant Sweep mode, each sweep begins at a specified Constant Sweep time
after 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 Controller Communications, Backplane Communications, and Background
Windows, allowing them to execute until it is time for the next sweep to begin. Some
or all of the Communications and Background Windows may not be executed. The
Communications and Background Windows terminate when the overall CPU sweep
time has reached the value specified as the Constant Sweep time.
One reason for using Constant Sweep mode is to ensure that I/O are updated at
constant intervals.
The value of the Constant Sweep timer can be configured to be any value from 5 to
2550 milliseconds. The Constant Sweep timer value may also be set and Constant
Sweep 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
In Constant Window mode, each sweep can consume a variable amount of time. The
Logic Window is executed in its entirety each sweep. The CPU alternates among the
three windows, allowing them execute for a time equal to the value set for the
Constant Window timer. The overall CPU sweep time is equal to the time required to
execute the Housekeeping, Input Scan, Logic Window, and Output Scan phases of
the sweep plus the value of the Constant Window timer. This time may vary due to
sweep-to-sweep variances in the execution time of the Logic Window.
An application that requires a certain amount of time between the Output Scan and
the Input Scan, permitting inputs to settle after receiving output data from the
program, would be ideal for Constant Window mode.
The value of the Constant Window timer can be configured to be any value from 3 to
255 milliseconds. The Constant Window timer value may also be set by the
programming software or by the user program using Service Request functions #3,
#4, and #5.
The following figure illustrates three successive sweeps in Constant Window mode.
Note that the total sweep times may vary due to sweep-to-sweep variations in the
Logic Window, but the time given to the Communications and Background Windows is
constant. Some of the Communications or Background Windows may be skipped,
suspended, or run multiple times based on the Constant Window time.
SWEEP n SWEEP n+1 SWEEP n+2
HK HK HK
INPUT INPUT INPUT
LOGIC LOGIC LOGIC
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 5-6.) The following three window modes are available:
Run-to- In Run-to-Completion mode, all requests made when the window has started are
Completion 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 outputs,
Enabled 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 physical
Disabled 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 either Limited, Run-to-Completion, or Constant
mode.
Stop/IO Scan The CPU does not run user programs, but the inputs and outputs are scanned. The
Enabled 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 scanned. The
Disabled 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 Power-up Source is Flash” on page 5-15.
corrupted)
Always Flash No configuration in RAM, memory Flash See” Memory Preserved” on
preserved page 5-15.
Always Flash Always Flash Flash
Always Flash Conditional Flash Flash
Always Flash Always RAM Flash
Conditional Flash Memory not preserved Flash See “CPU Mode when Memory Not Preserved/
(i.e. no battery or memory Power-up Source is Flash” on page 5-15..
corrupted)
Conditional Flash No configuration in RAM, memory Uses default Stop Disabled
preserved logic/configuration
Conditional Flash Always Flash RAM See ”CPU Mode when Memory Preserved” on
Conditional Flash Conditional Flash RAM page 5-15.
No Configuration in Always Flash RAM See ”CPU Mode when Memory Preserved” on
Flash page 5-15.
No Configuration in Conditional Flash RAM
Flash
No Configuration in Always RAM RAM
Flash
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 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 time-of-day clock is battery-backed and maintains its present state across a
power failure. You can read and set the time and date using the programming
software. You can also read and set the time and date through the application
program using Service Request function #7.
The time-of-day clock handles month-to-month and year-to-year transitions and
automatically compensates for leap years through year 2036.
Watchdog Timer
Software Watchdog Timer
A software watchdog timer in the CPU is designed to detect “failure to complete
sweep” conditions. The timer value for the software watchdog timer is set by using the
programming software. The allowable range for this timer is 10 to 2550 milliseconds;
the default value is 200 milliseconds. The software watchdog timer always starts from
zero at the beginning of each sweep.
The software watchdog timer is useful in detecting abnormal operation of the
application program that prevents the CPU sweep from completing within the user-
specified time. Examples of such abnormal application program conditions are as
follows:
■ Excessive recursive calling of a block
■ Excessive looping (large loop count or large amounts of execution time for each
iteration)
■ Infinite execution loop
When selecting a software watchdog value, always set the value higher than the
longest expected sweep time to prevent accidental expiration. For Constant Sweep
mode, allowance for oversweep conditions should be considered when selecting the
software watchdog timer value.
The watchdog timer continues during interrupt execution. Queuing of interrupts within
a single sweep may cause watchdog timer expiration.
If the software watchdog timeout value is exceeded, the OK LED blinks, and the CPU
goes to Stop/Halt mode. Certain functions, however, are still possible. A fault is placed
in the CPU fault table, and outputs go to their default state. The CPU will only
communicate with the programmer attached through the embedded Ethernet
interface; no other communications or operations are possible. To recover, power
must be cycled on the rack containing the CPU.
To extend the current sweep beyond the software watchdog timer value, the
application program may restart the software watchdog timer using Service Request
function #8. However, the software watchdog timer value may only be changed from
the configuration software.
Note that Service Request Function #8 does not reset the output scan timer
implemented on the Genius Bus Controller.
System Security
The PACSystems CPU supports the following two types of system security:
■ Passwords/privilege levels
■ OEM protection
Privilege Levels
Priv 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 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-NULL
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.
Note: OEM protection prevents firmware upgrades to the flash memory. To upgrade
the firmware, you must first disable OEM protection, then enable it again after
the upgrade.
Genius I/O
The GBC used in the RX7i 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 I/O 115 VAC 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.
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 RX7i 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 battery indication is present, a low battery fault is logged into 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.
A bus transmitter module is interrogated about what expansion racks are present in
the system. Based on the bus transmitter module’s response, the CPU adds those
racks and their associated slots into the list of slots to be configured.
Finally, the I/O Scanner performs its initialization. The I/O Scanner initializes all the
I/O controllers in the system by establishing the I/O connections to each I/O bus on
the I/O controller and obtaining all I/O configuration data from that I/O controller. This
configuration data is compared with the stored I/O configuration and any differences
reported in the I/O fault table. The I/O Scanner then sends each I/O controller a list of
the I/O modules to be configured on the I/O bus. After the I/O controllers have been
initialized, the I/O Scanner replaces the factory default settings in all I/O modules with
any application-specified settings.
Power-Down Sequence
System power-down occurs when the power supply detects that incoming AC power
has dropped for more than 15ms.
Application programs are created using the programming software and transferred to the
CPU. Programs are stored in the CPU’s non-volatile memory.
During the CPU Sweep (described in chapter 5), the CPU reads input data from the
modules in the system and stores the data in its configured input memory locations. The
CPU then executes the entire application program once, using this fresh input data.
Executing the application program creates new output data that is placed in the configured
output memory locations.
After the application program completes its execution, the CPU writes the output data to
modules in the system.
A block-structured program always includes a _MAIN block. Program execution begins
with the _MAIN block. Counting the _MAIN block, the program can contain up to 512
blocks.
GFK-2222B 6-1
6
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.
The call depth is guaranteed to be at least eight. 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.
Block Type Local Data Programming Size Limit Parameters
Languages
Program Block Has its own local data LD 128 KB 0 inputs
ST 1 output
Parameterized Inherits local data from LD 128 KB 63 inputs
Block caller ST 64 outputs
Function Block Has its own local data LD 128 KB 63 inputs
64 outputs
Unlimited internal member
variables
External Block Inherits local data from C user memory size limit (10 63 inputs
caller 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 program block is automatically declared
when you create a block-structured program. When you declare any other program block,
you must assign it a unique block name. A program 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 program 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 program 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 6-17.)
Type Length Default Parameter Passing Mechanism
BOOL 1 to 256 INPUTS: by value
OUTPUTS: by value result; except Y0, which is by initial-value result
BYTE 1 to 1024 INPUTS: by reference
OUTPUTS: by reference
INT, UINT, and WORD 1 to 512 INPUTS: by reference
OUTPUTS: by reference
DINT, REAL, and DWORD 1 to 256 INPUTS: by reference
OUTPUTS: by reference
function block* 1 INPUTS: by reference
OUTPUTS: not allowed
* A maximum of 16 input parameters can be of TYPE function block.
The PACSystems default parameter passing mechanisms correspond to the way that
PSB parameters were passed on 90-70 controllers. The parameter passing mechanisms
of formal parameters cannot be changed from their default values.
Function Blocks
Function blocks are user-defined logic blocks that have parameters and instance data.
Users can define their own function blocks instead of being limited to the standard
function blocks provided in the PACSystems instruction set. In many cases, the use of this
feature results in a reduction in total program size.
Once a function block is defined, multiple instances of it can be created. Each instance
has its own unique copy of the function block’s instance data, which consists of the
function block’s internal member variables and all of its input and output parameters
except those that are passed by reference. When a function block is called on a given
instance, the function block logic operates on that instance’s copy of the instance data.
The values of the instance data persist from one execution of the function block to the
next.
A function block cannot be triggered by an interrupt.
Function block logic is created using LD. Function block logic can make calls to all the
other types of PACSystems blocks (program blocks, parameterized blocks, external
blocks and other function blocks). Only blocks written in LD (program blocks,
parameterized blocks, and other function blocks) can make calls to function blocks.
Unless otherwise stated, the PACSystems implementation of user defined function blocks
meets the IEC 61131-3 requirements for function blocks.
In the following example, the first rung creates two instances of the function block, 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.
BOOL 1 to 256 INPUTS: by reference, value, or value result. Not Applicable if passed by
(Default: value) reference, since not stored in
instance data.
BYTE 1 to INPUTS: by reference, value, or value result. Retentive for value or value
1024 (Default: value) result.
INT, UINT, and WORD 1 to 512 INPUTS: by reference, value, or value result. Retentive for value or value
(Default: value) result.
DINT, REAL, and 1 to 256 INPUTS: by reference, value, or value result. Retentive for value or value
DWORD (Default: value) result.
An internal member variable that is a nested instance has initial values as specified by its
function block TYPE definition.
Initial values are not stored during a RUN mode store. They will not take effect until a
STOP mode store is performed.
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 program block, parameterized block, or function block. 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.
LENGTH 1, and indicates the successful execution of the block. It can be read and written
to by the external block’s logic.
The following table gives the TYPEs, LENGTHs, and parameter passing mechanisms
allowed for external block parameters.
OUTPUTS: by reference
OUTPUTS: by reference
The PACSystems default parameter passing mechanisms correspond to the way that
external block parameters were passed on 90-70 controllers. At this time, the parameter
passing mechanisms of formal parameters cannot be changed from their default values.
You must define a name for each formal input and output parameter. Parameter names
are limited to between 1 and 3 characters so that they will show up on the Call instruction
for the external block.
Arguments, or “actual parameters”, are passed into an external block when an external
block call is executed.
Arguments may be any valid reference address including an indirect reference, may be
flow, or may be a constant if the corresponding parameter’s LENGTH is 1.
Local Data
Each Program block or function block 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).
Program blocks and function blocks 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
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 GE Fanuc
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 GE Fanuc library functions
makes up the instruction set of the CPU.
Note: Series 90-70 PLCs use column-major execution: they execute a rung of LD logic
by going from top to bottom, left to right, through each column in the rung.
PACSystems and Series 90-30 CPUs use row-major execution: they execute an
LD rung by tracing paths from left to right and top to bottom. For examples, refer
to “Row- versus Column-major LD Logic Execution” in appendix C.
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 functions and function blocks. For details on
ST statements, parameters, keywords, and operators supported by PACSystems, refer to
chapter 12, “Structured Text.”
Program blocks and parameterized blocks can be programmed in ST. The _MAIN
program block can also be programmed in ST.
A block programmed in ST can call program blocks and parameterized blocks. A block
programmed in ST cannot call function blocks. This means that you cannot create an ST
function block, or call an LD function block or LD parameterized block that requires a
function block input. You cannot create an ST parameterized block that has a function
block as an input parameter.
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 6-23.
Note: GE Fanuc strongly recommends 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 PSB1 should not be called from _MAIN, BLOCK2, BLOCK3, or
BLOCK4.
INT Block 1
Block
5
Block
3
PSB
1
Block
4
Timed Interrupts
A block can be configured to be executed 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.
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, which must be a global variable in %I or
%AI memory, in the scheduling properties for the block.
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.
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
■ Word-for-Word Changes
GFK-2222B 7-1
7
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
page 7-16.
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 7-11.
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 7-4.
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.
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.
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]
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 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.
%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 which 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.
%S0013 #PRG_CHK Set when background program check is active.
%S0014 #PLC_BAT The contact is updated when a change in the battery status occurs.
Note: The #FST_EXE name is no longer associated with a %S address, it must be
referenced by the name “#FST_EXE” only. This bit is set when transitioning from
Stop to Run and indicates that the current sweep is the first time this block
has been called.
Fault References
The fault references are discussed in chapter 12 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) Low battery signal from CPU or another module in the system.
#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 range Register
of word values is 0000 hex to FFFF hex. (16 bit states)
16 1
DWORD Double Has the same characteristics as a single word data type, Register 2 Register 1
Word 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 represented in Register 1 (Two’s Complement
Integer 2’s complement notation. The valid range of an INT data S value)
type is –32768 to +32767. 16 1
s=sign bit (0=positive,
1=negative)
DINT Double Stored in 32-bit data memory locations (two consecutive Register 2 Register 1
Precision 16-bit memory locations). Always signed values (bit 32 is s
Integer the sign bit). The valid range of a DINT data type is 32 17 16 1
(Binary value)
-2147483648 to +2147483647
s=sign bit (0=positive,
1=negative)
REAL Floating Uses 32 consecutive bits (two consecutive 16-bit memory Register 2 Register 1
Point locations). The range of numbers that can be stored in this
format is from ± 1.401298E-45 to ±3.402823E+38. For the 32 17 16 1
(IEEE format)
IEEE format, refer to “Real Numbers.”
BCD-4 Four-Digit Uses 16-bit data memory locations. Each binary coded Register 1
BCD decimal (BCD) digit uses four bits and can represent 4 3 2 1 (4 BCD digits)
numbers between 0 and 9. This BCD coding of the 16 bits 13 9 5 1
has a legal value range of 0 to 9999.
BCD-8 Eight-Digit Uses two consecutive 16-bit data memory locations (32 Register 2 Register 1
BCD consecutive bits). Each BCD digit uses 4 bits per digit to 8 7 6 5 4 3 8 1
represent numbers from 0 to 9. The complete valid range 32 29 25 21 17 16 13 9 5 1
of the 8-digit BCD data type is 0 to 99999999. (8 BCD digits)
Real Numbers
The REAL data type, which can store 32-bit fractional numbers, is actually floating
point data. Floating point numbers are stored in single precision IEEE-standard
format. This format uses two adjacent 16-bit words.
REAL variables are typically used to store data from analog I/O devices, calculated
values, and constants.
The precision of REAL variables is limited to 6 or 7 significant digits, with a range of
-45 38
approximately ±1.401298x10 through ±3.402823x10 .
Note: The programming software allows 32-bit arguments (DWORD, DINT, REAL)
to be placed in discrete memories such as %I, %M, and %R in the
PACSystems target. This is not allowed on Series 90-70 targets. (Note that
any bit reference address that is passed to a non-bit parameter must be byte-
aligned. This is the same as the Series 90-70 CPU.)
32 17 16 1
23-bit mantissa
8-bit exponent
Register use by a single floating point number is diagrammed below. In this diagram,
if the floating point number occupies registers R5 and R6, for example, then 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
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.
An overview of the types of operands that can be used with instructions is provided on
page 8-2.
The PACSystems ladder logic instruction set includes the following types of instructions:
■ Advanced Math ......................................................................................8-3
■ Bit Operations ........................................................................................8-8
■ Coils .....................................................................................................8-30
■ Contacts ...............................................................................................8-38
■ Control Functions .................................................................................8-47
■ Conversion Functions ..........................................................................8-60
■ Data Move Functions ...........................................................................8-74
■ Data Table Functions ...........................................................................8-99
■ Math Functions...................................................................................8-119
■ Program Flow Functions ....................................................................8-131
■ Relational Functions...........................................................................8-142
■ Timers and Counters..........................................................................8-146
GFK-2222B 8-1
8
Exponential/Logarithmic Functions
The power flow output is energized when the function is performed without overflow,
unless one of these invalid REAL operations 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
Other mnemonics:
SQRT_INT
SQRT_REAL
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:
■ IN < 0
■ IN is a NaN (Not a Number)
Example
The square root of the integer number located at %AI0001 is placed into %R00003
whenever %I00001 is ON.
Trig Functions
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 ≈ 9.22x1018).
The power flow output is energized unless one of these invalid conditions occurs:
Operands
Paramete Description Allowed Operands Optional
r
63 63 63
IN Number of radians. -2 < IN < +2 . (2 All except variables located in %S—%SC No
18
≅9.22x10 .) (REAL)
Q Trigonometric value of IN (REAL) All except constants and variables located in No
%S—%SC
Example
The COS of the value in V_R00001 is placed in V_R00033.
When an Inverse Sine (ASIN), Inverse Cosine (ACOS), or Inverse Tangent (ATAN)
function receives power flow, it respectively computes the inverse sine, inverse cosine or
inverse tangent of IN and stores the result in radians in output Q. Both IN and Q are REAL
values.
The ASIN and ACOS functions accept a narrow range of input values, where –1 ≤ IN ≤ 1.
Given a valid value for the IN parameter, the ASIN_REAL function produces a result Q
such that:
π π
ASIN(IN) = − ≤Q≤
2 2
The ACOS_REAL function produces a result Q such that:
ACOS(IN) = −0 ≤ Q ≤ π
The ATAN function accepts the broadest range of input values, where – ∞ ≤ IN ≤ + ∞.
Given a valid value for the IN parameter, the ATAN_REAL 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):
Word 3 (the control word) stores the state of the Boolean inputs and outputs of its
associated function in the following format:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Reserved
Reserved
OK (status input
EN (enable input
Notes:
Warning
Do not write to the Control Block memory with other instructions.
Overlapping references results in erratic operation of BIT_SEQ.
Example
The Bit Sequencer operates on register memory %R00001. Its static data 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 DIR 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
Paramete Description Allowed Operands Optional
r
Length The number of WORDs or Constant No
(??) DWORDs in the data string to test.
1 ≤ Length ≤ 256.
IN The first WORD or DWORD in the All No
data to test
BIT The number of the bit to test in IN. All except variables located in %S - No
1 ≤ BIT ≤ (16*Length). %SC
Q The state of the specific bit tested; Flow No
Q is energized if the bit tested is a
1.
Examples
Example 1
Whenever 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
Whenever 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.
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 power is received.
■ You can program longer cycles by pulsing the power flow to the function at twice the
desired rate of flashing. The power flow 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.
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
Whenever 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 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
Other
mnemonics:
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 zero or less, or is equal to the total length of the string or greater. 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
Paramete Description Allowed Operands Optional
r
Length The number of WORDs or Constant No
(??) DWORDs in the string to
be rotated. 1 ≤ Length ≤
256.
IN The string to rotate All. Constants are legal when Length is No
1
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
Other mnemonics:
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 rather than 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 All. Constants are legal only No
DWORDs 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.
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 currently differs from that written by
Series 90-70 CPUs and could change for future PACSystems CPU
models.
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: %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 8-37.
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 very 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
■ 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
Operands
Parameter Description Allowed Operands Optional
BWVAR The variable associated with the FAULT contact variables in %I, %Q, %AI, and %AQ No
memories, 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 variables in AI and AQ No
LOALR 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 discrete variables in I, Q, M, T, S, No
variable 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 from 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-shots) or SET and RESET
coils.
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.
POSCON
If a POSCON is used in place of the PTCON in the example on page 8-46 (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.
For Loop FOR_LOOP For loop. Repeats the logic between the FOR_LOOP instruction
EXIT_FOR and END_FOR instruction a specified number of times or until
END_FOR EXIT_FOR is encountered.
Proportional Integral Derivative PID_ISA Provides two PID (Proportional/Integral/Derivative) closed-loop
Control PID_IND control algorithms:
Standard ISA PID algorithm (PID_ISA)
Independent term algorithm (PID_IND)
Note: For details, refer to chapter 10.
Read Switch Position SWITCH_POS Reads position of the Run/Stop switch and the mode for which the
switch is configured.
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.
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.
Note: You can use DO_IO in conjunction with a Suspend IO (SUS_IO) function, which
stops the normal I/O scan.
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.
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 No
serviced. ST and END must be in the same memory area.
Note: 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.
END The address of the end bit of input or output points or words to be I, Q, AI, AQ No
serviced. Must be in the same memory area as ST.
Note: If ST and END are placed in BOOL memory, END's reference
address must be 8n, for example, %I08, %Q16.
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.
Notes:
■ ALT can be a WORD only if ST and END are in analog memory.
■ You can use the ALT operand to enter the slot of a single module
in the main rack. When that is done, the DO_IO function executes
in 80 microseconds instead of the 236 microseconds required
when the block is programmed without the ALT parameter. No
error checking is performed to prevent overlapping reference
addresses or module type mismatches.
Examples
Do I/O for Inputs
When DO_IO receives power flow, the PLC scans references %I0001-64 and %Q0001 is
turned on. A copy of the scanned inputs is placed in internal memory from %M0001-64.
Because a reference is specified for ALT, the real inputs are not updated. This allows the
current values of inputs to be compared with their values at the beginning of the scan.
This form of DO_IO allows input points to be scanned one or more times during the
program execution portion of the CPU scan.
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 ???? (Control Block) input is the beginning reference for the Drum
Sequencer function's parameter block, which includes information used
by the function.
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.
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 rung logic to be repeated must be placed between the
FOR and END_FOR instructions. The optional EXIT_FOR instruction enables you to exit
from 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 instruction in the rung and the FOR 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, and there can be nothing
after the EXIT_FOR statement in the rung, as well. It also must be the last instruction
executed in the rung. 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 to reach the END or START cannot be
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 power flow input for 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/END_FOR pair. JUMPs and LABEL instructions must also be completely within or
completely outside the scope of a FOR/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
Examples
Example 1
The value for %M00001 (START) is 1 and the value for %M00017 (END) is 10. The
INDEX (%R00001) increments by the value of the INC operand (which is assumed to be 1
when omitted) starting at 1 until it reaches the ending value 10. The ADD function of the
loop is executed 10 times, adding the current value of I1 (%R00001), which will vary from
1 to 10, to the value of I2 (%R00002).
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 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
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: SUS_IO function suspends all I/O, both analog and discrete, whether integrated
I/O, Genius I/O, or Ethernet Global Data. For details, refer 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.
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 Mnemonic Description
Convert Angles DEG_TO_RAD Converts degrees to radians
RAD_TO_DEG Converts radians to degrees
Convert to BCD4
UINT to BCD4 UINT_TO_BCD4 Converts UINT (16-bit unsigned integer) to 4-digit Binary-Coded-Decimal
(BCD4)
INT to BCD4 INT_TO_BCD4 Converts INT (16-bit signed integer) to 4-digit Binary-Coded-Decimal
(BCD4)
Convert DINT to BCD8 DINT_TO_BCD8 Converts DINT (32-bit signed integer) to 8-digit Binary-Coded-Decimal
(BCD8)
Convert to INT
BCD4 to INT BCD4_TO_INT Converts 4-digit Binary-Coded-Decimal (BCD4) to INT (16-bit signed
integer)
UINT to INT UINT_TO_INT Converts UINT to INT (16-bit signed integer)
DINT to INT DINT_TO_INT Converts DINT to INT (16-bit signed integer)
REAL to INT REAL_TO_INT Converts REAL to INT (16-bit signed integer)
Convert to UINT
BCD4 to UINT BCD4_TO_UINT Converts BCD4 to UINT (16-bit unsigned integer)
INT to UINT INT_TO_UINT Converts INT to UINT (16-bit unsigned integer)
DINT to UINT DINT_TO_UINT Converts DINT to UINT (16-bit unsigned integer)
REAL to UINT REAL_TO_UINT Converts REAL to UINT (16-bit unsigned integer)
Convert to DINT
BCD8 to DINT BCD8_TO_DINT Converts 8-digit Binary-Coded-Decimal (BCD8) to DINT (32-bit signed
integer)
UINT to DINT UINT_TO_DINT Converts UINT to DINT (32-bit signed integer)
INT to DINT INT_TO_DINT Converts INT to DINT (32-bit signed integer)
REAL to DINT REAL_TO_DINT Converts REAL (32-bit signed real or floating-point values) to DINT (32-bit
signed integer)
Convert to REAL
BCD4 to REAL BCD4_TO_REAL Converts BCD4 to REAL (32-bit signed real or floating-point values)
BCD8 to REAL BCD8_TO_REAL Converts BCD8 to REAL (32-bit signed real or floating-point values).
UINT to REAL UINT_TO_REAL Converts UINT to REAL (32-bit signed real or floating-point values)
INT to REAL INT_TO_REAL Converts INT to REAL (32-bit signed real or floating-point values).
DINT to REAL DINT_TO_REAL Converts DINT to REAL (32-bit signed real or floating-point).
WORD to REAL WORD_TO_REAL Converts WORD (16-bit bit string) to REAL (32-bit signed real or floating-
point values)
Convert REAL to REAL_TO_WORD Converts REAL to WORD (16-bit bit string).
WORD
Truncate TRUNC_DINT Rounds a REAL (32-bit signed real or floating-point) number down to a
DINT (32-bit signed integer) number
TRUNC_INT Rounds a REAL (32-bit signed real or floating-point) number down to an
INT (16-bit signed integer) number
Convert Angles
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
+1500 is converted to degrees. The result is placed in %R00001 and %R00002.
Operands
Paramete Description Allowed Operands Optional
r
IN The UINT or INT value to convert to BCD4. All except S, SA, SB, and SC No
Q The BCD4 equivalent value of the original All except S, SA, SB, and SC No
UINT or INT value in IN.
When DINT_TO_BCD8 receives power flow, it converts the input signed double-precision
integer (DINT) data into the equivalent 8-digit Binary-Coded-Decimal (BCD) values, which
it outputs to Q. DINT_TO_BCD8 does not change the original DINT 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 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.
REAL
When REAL_TO_DINT receives power flow, it rounds the input REAL data up or down to
the nearest double-precision signed integer (DINT) value, which it outputs to Q.
REAL_TO_DINT does not change the original REAL 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 an out-
of-range DINT value.
Warning
Converting from 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
Q The DINT equivalent value of the original input value in IN. All except S, SA, SB, and SC
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
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 UINT value of input IN is 825. The result value placed in %L00016 is 825.000.
INT to REAL
The integer value of input IN is 678. The result value placed in %T0016 is 678.000.
When REAL_TO_WORD receives power flow, it rounds a positive input REAL data up or
down to the nearest unsigned single-precision integer value, which it outputs to the
WORD variable in Q. Any value larger than 65,535 is output as 65,535. If the input REAL
data is negative, REAL_TO_WORD outputs the value 0 to the WORD variable in Q.
REAL_TO_WORD does not change the original REAL data.
The function passes power flow when power is received, unless the specified conversion
would result in a value that is outside the range 0 to FFFFh.
Warning
Converting from REAL to WORD may result in overflow. For
example, REAL 6.8E18, which equals 6.8 * 1018, converts to WORD
OVERFLOW.
Operands
Parameter Description Allowed Operands Optional
IN The REAL value to convert to WORD. All except S, SA, SB, and No
SC
Q The WORD equivalent value of the original REAL value in IN. 0 ≤ Q All except S, SA, SB, and No
≤ 65,535. SC
Example
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.
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 Other mnemonics:
flow, it copies a block of seven constants into consecutive BLKMOV_DWORD
locations beginning at the destination specified in output BLKMOV_INT
Q. BLKMOV passes power to the right whenever it BLKMOV_REAL
receives power. 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.
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 non-GE Fanuc
VME 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 in the system will
exchange data with the CPU.
BUS Read
The BUS_RD function reads data from the VME bus. This Other mnemonics:
function should be executed before the data is needed in BUS_RD_DWORD
the program. If the amount of data to be read is greater BUS_RD_WORD
than 32767 BYTES, WORDS, or DWORDS, use multiple
instructions to read the data.
When BUS_RD receives power flow, it accesses the VME
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 VME 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 Other mnemonics:
through its enable input, it writes the data located at BUS_WRT_DWORD
reference (IN) to the VME module at the specified rack BUS_WRT_WORD
(R), slot (S), subslot (SS) and optional address region
(RGN) and 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 VME bus, only 256
bytes are written coherently (i.e., written without
being preempted by an interrupt).
Communication Request
■ 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 12, “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.
The command block has the following structure:
Address Data Block The number of data words starting with the data at
Length (in words) address+6 to the end of the command block, inclusive. The
data block length ranges from 1 to 128 words. Each
COMM_REQ command has its own data block length.
When entering the data block length, you must ensure that
the command block fits within the register limits
Address + 1 Wait/No Wait Flag Must be set to 0 (No Wait)
Address + 2 Status Pointer Specifies the memory type for the location where the status
Memory Type word returned by the device will be written when the
COMM_REQ completes. See “Status Pointer Memory
Type” on page 8-87.
Address + 3 Status Pointer The word at address + 3 contains the offset for the status
Offset word within the selected memory type.
Note: The status pointer offset is a zero-based value. For
example, %R00001is at offset zero in the register table.
Address + 4 Idle Timeout This parameter is ignored in No Wait mode.
Value
Address + 5 Maximum This parameter is ignored in No Wait mode.
Communication
Time
Address + 6 Data Block The data block contains the command's parameters. The
to Address + 133 data block begins with a command number in address + 6,
which identifies the type of communications function to be
performed. Refer to the specific device manual for specific
COMM_REQ command formats.
■ 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
Other mnemonics:
DATA_INIT_DWORD
DATA_INIT_INT
DATA_INIT_UINT
DATA_INIT_REAL
DATA_INIT_WORD
Note: The mnemonics DATA_INIT_ASCII (page 8-91) and DATA_INIT_COMM (page
8-92) operate differently from the other six functions.
The Data Initialization (DATA_INIT) function copies a block of constant data to a reference
range.
When the DATA_INIT instruction is first programmed, the constants are initialized to
zeroes. To specify the constant 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:
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.
Example
On the first scan (as restricted by the #FST_SCN system variable), 100 words of initial
data is copied to %R00005 through %R00104.
The Data Initialize ASCII (DATA_INIT_ASCII) function copies a block of constant ASCII
text to a reference range.
When DATA_INIT_ASCII is first programmed, the constants are initialized to zeroes. To
specify the constant data to copy, double-click the DATA_INIT_ASCII instruction in the LD
editor.
When DATA_INIT_ASCII receives power flow, it copies the constant data to output Q.
DATA_INIT_ASCII’s constant data length (LEN) specifies how many bytes of constant text
are copied to consecutive reference addresses starting at output Q. LEN must be an even
number. DATA_INIT_ASCII passes power to the right whenever it receives power.
Note: The output parameter is not included in coil checking.
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 Data
Other
mnemonics:
MOVE_DINT
MOVE_DWORD
MOVE_INT
MOVE_REAL
MOVE_UINT
MOVE_WORD
When the MOVE function receives power flow, it copies data as individual bits from one
location in PLC memory to another. Because the data is copied in bit format, the new
location does not need to be the same data type as the original.
When the MOVE function receives power flow, it copies data from input operand IN to
output operand Q as bits. If data is moved from one location in BOOL (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 bits)
The MOVE function passes power to the right whenever it receives power.
Example 1
Whenever %I00003 is set, the three bits %M00001, %M00002, and %M00003 are moved
to %M00100, %M00101, and %M00102, respectively. Coil %Q00001 is turned on.
Example 2
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.
Shift Register
Other
mnemonics:
SHFR_DWORD
SHFR_WORD
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 last element in the shift
register is shifted into Q. The highest reference of the shift register element 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.
Operands
Parameter Description Allowed Operands Optional
Length (??) The number of data items in the shift register. No
1 ≤ Length ≤ 256.
R Reset. When R is ON, the shift register located Power flow No
at ST is filled with zeroes.
N The number of data items to shift into the shift Constants No
register.
IN The value to shift into the first data item of the All. No
shift register. No data flow for bit.
SHFR_BIT: For %I, %Q, %M and %T memory,
any BOOL reference may be used; it does not
need to be byte-aligned. However, 1 bit,
beginning with the reference address
specified, is displayed online.
ST The first data item of the shift register. All except data flow, constants, S. No
Note: For %I, %Q, %M and %T memory, any
BOOL reference may be used; it does not
need to be byte-aligned. However, 16 bits,
beginning with the reference address
specified, are displayed online.
Q The data shifted out of the shift register. The All except S. No data flow for bit. No
same number of data items will be shifted out
as were shifted in.
SHFR_BIT: For %I, %Q, %M and %T memory,
any BOOL reference may be used; it does not
need to be byte-aligned. However, 1 bit,
beginning with the reference address
specified, is displayed online.
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 word from output status
table location %Q0033 is shifted into the Shift Register at %R0001. The word shifted out
of the Shift Register from %R0100 is stored in output %M0005. Note that, for this
example, the length specified for LEN and the
amount of data to be shifted (N) are not the same.
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
Other mnemonics:
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 Other mnemonics:
input value against two arrays of delimiters that ARRAY_RANGE_DWORD
specify an upper and lower bound to determine if the ARRAY_RANGE_INT
input value falls within the range specified by the ARRAY_RANGE_UINT
delimiters. The output is an array of bits that is set ARRAY_RANGE_WORD
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.
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.
■ For each mnemonic, use the corresponding data type for the LL, UL, and Q operands.
For example, ARRAY_RANGE_DINT requires LL, UL, and Q to be DINT variables.
■ Q is not aligned. It is displayed in bit format. It displays either a 1 (ON) or a 0 (OFF)
for the first array element. For BOOL references, it represents the reference
displayed. For other references, it represents the low order bit of the reference
displayed.
Parameter Description Allowed Operands Operands Optional
Length (??) The number of elements in each array. Constant No
LL The lower limit of the range All except constants and %S - %SC No
for INT, DINT.
UL The upper limit of the range All except constants and %S - %SC No
for INT, DINT.
IN The value to compare against each range All except constants and %S - %SC No
specified by LL and UL for INT, DINT.
Q Energized when the value in IN is within the No
range specified by LL and UL, inclusive. All except S
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
Other
mnemonics:
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
Other mnemonics:
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
Other mnemonics:
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
Other mnemonics:
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 Other
mnemonics:
elements of the memory block 'IN' in ascending order. The
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.
Note: 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.
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 Other
mnemonics:
values in a table. When the pointer reaches the end of the
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.
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
Other mnemonics:
TBL_WRT_DWORD
TBL_WRT_INT
TBL_WRT_UINT
TBL_WRT_WORD
The Table Write (TBL_WRT) function sequentially updates values in a table that never
becomes full. When the pointer (PTR) reaches the end of the table, it automatically
returns to the beginning of the table.
1. TBL_WRT increments the pointer by one.
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.
Example
WIDGETS is a table with 20 integer elements. When the enabling input %I00012 is ON,
the pointer increments and the contents of %P00077 are written into the table at the
pointer location. %L00001 functions as the pointer into the data 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 section “Conversion Functions” on page 8-60 explains how to
convert data to a different type.
Function Mnemonic Description
Absolute ABS_DINT Finds the absolute value of a double- precision integer (DINT), signed single-precision
Value ABS_INT integer (INT), or REAL (floating-point) value. The mnemonic specifies the value's data
ABS_REAL type.
Add ADD_DINT Addition. Adds two numbers.
ADD_INT
ADD_REAL
ADD_UINT
Divide* DIV_DINT Division. Divides one number by another and outputs the quotient.
DIV_INT Note: Take care to avoid overflow conditions when performing divisions.
DIV_MIXED
DIV_REAL
DIV_UINT
Modulus MOD_DINT Modulo Division. Divides one number by another and outputs the remainder.
MOD_INT
MOD_UINT
Multiply* MUL_DINT Multiplication. Multiplies two numbers.
MUL_INT Note: Take care to avoid overflow conditions when performing multiplications.
MUL_MIXED
MUL_REAL
MUL_UINT
Scale SCALE Scales an input parameter and places the result in an output location.
Subtract SUB_DINT Subtraction. Subtracts one number from another.
SUB_INT
SUB_REAL
SUB_UINT
* To avoid overflows when multiplying or dividing 16-bit numbers, use the conversion
functions described on page 8-60 to convert the numbers to a 32-bit format.
When an operation results in overflow, there is no power flow. If an operation on INT or
DINT operands 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.
If a math operation on UINT operands results in overflow, the result is set to the minimum
value (0). If an operation on UINT operands results in underflow, the result is set to the
maximum value.
If the operation does not result in overflow, the Power Flow output is set ON unless one of
these invalid REAL operations occurs:
■ For ADD, (+ ∞); for SUB, (± ∞)-(± ∞)
■ For MUL, 0 x ∞
■ For DIV, 0 divided by 0.
■ For DIV, ∞ divided by ∞
■ I1 and/or I2 is NaN (Not a Number).
In these cases, Power Flow is set OFF.
Absolute Value
Other
mnemonics:
ABS_INT
ABS_REAL
When the function receives power flow, it places the absolute value of input IN in output
Q.
The function outputs power flow, unless one of the following conditions occurs:
■ For INT type, IN is MININT.
■ For DINT type, IN is MINDINT.
■ For REAL 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
Placing the absolute value of –2,976, which is 2,976, in %R00010:
Add
Other
mnemonics:
ADD_INT
ADD_REAL
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 without overflow, unless an
invalid operation occurs. If an ADD_DINT, ADD_INT or ADD_REAL operation results in
overflow, Q is set to the largest possible value with the proper sign and no power flow. If
an ADD_UINT operation results in overflow, Q is set to the minimum value.
Mnemonic Operation Displays as
ADD_INT Q(16 bit) = IN1(16 bit) + IN2(16 bit) base 10 number with sign, up to 5 digits long
ADD_DINT Q(32 bit) = IN1(32 bit) + IN2(32 bit) base 10 number with sign, up to 10 digits long
ADD_REAL Q(32 bit) = IN1(32 bit) + IN2(32 bit) base 10 number, sign and decimals, up to 8
digits long (excluding the decimals)
ADD_UINT Q(16 bit) = IN1(16 bit) + IN2(16 bit) base 10 number, unsigned, up to 5 digits long
Examples of ADD
The first example is a failed attempt to create a counter circuit that would count the
number of times switch %I0001 closes. The running total is stored in register %R0002.
The intent of this design is that when %I0001 closes, the ADD instruction should add one
to the value in %R0002 and place the new value right back into %R0002. The problem
with this design is that the ADD instruction executes once every PLC scan while %I0001
is closed. So, for example, if %I0001 stays closed for five scans, the output increments
five times, even though %I0001 only closed once during that period.
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 (“one-shot”) 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 Other
mnemonics:
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. DIV_INT
DIV_MIXED
The power flow output is energized when DIV is performed without overflow, unless
DIV_REAL
an invalid operation occurs. If an overflow occurs, the result is the largest possible
DIV_UINT
value with the proper sign and no power flow.
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.
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_MIXED Operands
Parameter Description Allowed Operands Optional
IN1 The value to be divided; the value to the left of “DIV” All except S, SA, SB, SC No
in the equation IN1 DIV IN2=Q.
IN2 The value to divide IN1 with; the value to the right of All except S, SA, SB, SC No
“DIV” in the equation IN1 DIV IN2=Q.
Q The quotient of IN1/IN2. If an overflow occurs, the All except S, SA, SB, SC and constant No
result is the largest value with the proper sign and no
power flow.
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 8-126.
Modulus
Other
mnemonics:
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 Other
mnemonics:
two operands IN1 and IN2 of the same data type and stores
the result in the output variable assigned to Q, also of the MUL_INT
same data type. MUL_MIXED
MUL_REAL
The power flow output is energized when the function is
MUL_UINT
performed without overflow, unless an invalid operation
occurs. If an overflow occurs, the result is the largest
possible value with the proper sign and no power flow. (For
MUL_UINT, overflow will result in 0.)
Note: MUL_MIXED uses mixed data types. Be careful to avoid overflows.
Mnemonic Operation Displays as
MUL_INT Q(16 bit) = IN1(16 bit) * IN2(16 bit) base 10 number with sign, up to 5 digits long
MUL_DINT Q(32 bit) = IN1(32 bit) * IN2(32 bit) base 10 number with sign, up to 10 digits long
MUL_REAL Q(32 bit) = IN1(32 bit) * IN2(32 bit) base 10 number, sign and decimals, up to 8
digits long (excluding the decimals)
MUL_UINT Q(16 bit) = IN1(16 bit) * IN2(16 bit) base 10 number, unsigned, up to 5 digits long
MUL_MIXED Q(32 bit) = IN1(16 bit) * IN2(16 bit) base 10 number with sign, up to 10 digits long
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 Other
mnemonics:
scales the input operand IN and places the result in
the output variable assigned to output operand OUT. SCALE_INT
The power flow output is energized when SCALE is SCALE_DINT
performed 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 SA, SB, SC
factor 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 All except S, No
be the same data type as IHI. When the IN input is at the IHI value, the OUT SA, SB, SC
value is the same as the OHI value.
OLO (Outputs Low) Minimum output value. The lower limit of the scaled data. Must All except S, No
be the same data type as IHI. When the IN input is at the ILO value, the OUT SA, SB, SC
value is 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 All except S, No
data 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
Other
mnemonics:
SUB_INT
SUB_REAL
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 without overflow, unless an
invalid operation occurs. For SUB_INT, SUB_DINT, and SUB_REAL, if an overflow
occurs, the result is the largest possible value with the proper sign and no power flow.
If a SUB_UINT operation results in a negative number, Q wraps around. (For example, a
result of –1 sets Q to 65535.)
Mnemonic Operation Displays as
SUB_INT Q(16 bit) = IN1(16 bit) – IN2(16 base 10 number with sign, up to 5 digits long
bit)
SUB_DINT Q(32 bit) = IN1(32 bit) – IN2(32 base 10 number with sign, up to 10 digits long
bit)
SUB_REAL Q(32 bit) = IN1(32 bit) – IN2(32 base 10 number, sign and decimals, up to 8 digits long (excluding the
bit) decimals)
SUB_UINT Q(16 bit) = IN1(16 bit) – IN2(16 base 10 number, unsigned, up to 5 digits long
bit)
Call
■ 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 a given block 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.
■ 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.
Note: 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.
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
subroutine 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.
In Logic Developer – PLC software, you can set the Comment mode option to Brief or
Full.
Notes:
Jump
Operands
Parameter Description Optional
Label (????) Label name; the name assigned to the destination LABEL(N). No
Operational Notes
A JUMPN and its associated LABELN can be placed anywhere in a program, as long as
the JUMPN / LABELN range:
■ does not overlap the range of a MCRN / ENDMCRN pair.
■ does not overlap the range of a FOR_LOOP / END_FOR pair.
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_UINT
■ If IN1 = IN2, the EQ output is turned ON.
■ If IN1 > IN2, the GT output is turned ON.
Equal EQ_DINT Tests two numbers for equality
EQ_INT
EQ_REAL
EQ_UINT
Greater or GE_DINT Tests whether one number is greater than or equal to another
Equal GE_INT
GE_REAL
GE_UINT
Greater Than GT_DINT Tests whether one number is greater than another
GT_INT
GT_REAL
GT_UINT
Less or Equal LE_DINT Tests whether one number is less than or equal to another
LE_INT
LE_REAL
LE_UINT
Less Than LT_DINT Tests whether one number is less than another
LT_INT
LT_REAL
LT_UINT
Not Equal NE_DINT Tests two numbers for non-equality
NE_INT
NE_REAL
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
Other
mnemonics:
CMP_INT
CMP_REAL
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, 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, and Less
Than
Other data
types:
_INT
_REAL
_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 IN1≥IN2
Equal
GT Greater Than IN1>IN2
LE Less Than or Equal IN1≤IN2
LT Less Than IN1<IN2
Note: The %S0020 bit is set ON when one of these relational functions executes
successfully. It is cleared when either input is NaN (Not a Number). This happens
because NaN has a reserved representation in the REAL number format, which
makes it detectable by any function. No such functionality exists for the _DINT,
_INT, or _UINT versions of these functions. If an overflow occurred on a previous
DINT, INT, or UINT operation, the result was the largest possible value with the
proper sign and no power flow. If the _DINT, _INT, or _UINT 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.
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, 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.
Range
Other
mnemonics:
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.
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.
Warning
Do not use two consecutive words (registers) as the starting
addresses of two timers or counters. 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.
Notes:
Notes:
■ The strongly recommended choice is a %L location, which is inherited from the
parameterized block’s source block. Each source block has its own private %L
memory space.
■ If you use a parameterized block formal parameter (word array passed-by-reference),
the actual parameter that corresponds to this formal parameter must be a %L, %R,
%P, %W, or symbolic reference. If the actual parameter is a %R, %P, %W, or
symbolic reference, a unique reference address must be used by each source block.
Recursion
If you use recursion (that is, if you have a block call itself either directly or indirectly) and
your parameterized block contains a timer, then you must abide by 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.
The Off-Delay Timer (OFDT) increments while power flow is off, and the timer's Current
Value (CV) resets to zero when power flow is on. OFDT passes power until the specified
interval PV (Preset Value) has elapsed. Since no automatic initialization to the outgoing
power flow state occurs at power-up, the Q state is retentive across power failure.
Time may be counted in the following increments:
■ Seconds
■ Tenths (0.1) of a second
■ Hundredths (0.01) of a second
■ Thousandth (0.001) of a second
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.
When OFDT first receives power flow, CV is set to zero and the timer passes power to the
right, even if PV=0.
Note: OFDT does not pass power flow if the preset value is zero or negative.
The output remains on as long as OFDT receives power flow. If OFDT stops receiving
power flow from the left, it continues to pass power to the right and OFDT starts
accumulating time in CV.
Each time OFDT is invoked with the power flow logic set to OFF, CV is updated to reflect
the elapsed time since the timer was turned off. OFDT continues passing power flow to
the right until CV=PV. When CV=PV, OFDT stops passing power flow to the right and
OFDT stops accumulating time. CV remains equal to PV and never exceeds PV. If PV=0,
the timer stops passing power flow to the right as soon as it stops receiving power flow.
When the function receives power flow again, CV resets to zero.
Notes:
■ The best way to use an OFDT function is to invoke it with a particular reference
address exactly one time each scan. Do not invoke an OFDT with the same reference
address more than once per scan (inappropriate accumulation of time would result).
When an OFDT appears in a program block, it accumulates time once per scan.
Subsequent calls to that program block within the same scan will have no effect on its
OFDTs.
■ Do not program an OFDT 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 8-149.
■ 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. This time is applied to the timer when enabled, unless the timer is first
reset.
Timing diagram
ENABLE
A B C D E F G H
Operands
Warning
Do not use the Address, Address+1, or Address+2 addresses with
other instructions. Overlapping references cause erratic timer
operation.
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 this timer is encountered in the LD logic, its CV is updated. 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 and the timer is enabled, the output of the timer activates.
Subsequent removal of enable or activation of reset will have no effect on the
timer output; it will remain enabled.
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 8-149.
■ 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. This time is applied to the timer when enabled, unless the timer is first
reset.
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.
On Delay Timer
Other
mnemonics:
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.
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
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 8-149.
■ 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. This time is applied to the timer when enabled, unless the timer is first
reset.
Timing Diagram
Warning
Do not use the Address, Address+1, or Address+2 addresses with
other instructions. Overlapping references cause erratic timer
operation.
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 (Q) 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.
Operands
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
R When R receives power flow, it Power flow No
resets the counter's CV to PV.
PV Preset Value to copy into word 2 of All except S, SA, SB, SC No
the counter's address when the
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 and No
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.
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.
9
This chapter explains how to use the Service Request (SVC_REQ) function. Use a
SVC_REQ to request one of the following special control system services:
Service Request Description Page
SVC_REQ 1 Change/Read Constant Sweep Timer 9-3
SVC_REQ 2 Read Window Modes and Times Values 9-5
SVC_REQ 3 Change Controller Communications Window Mode and Timer Value 9-6
SVC_REQ 4 Change Backplane Communications Window Mode and Timer Value 9-7
SVC_REQ 5 Change Background Task Window Mode and Timer Value 9-9
SVC_REQ 6 Change/Read Number of Words to Checksum 9-10
SVC_REQ 7 Read or Change the Time-of-Day Clock 9-12
SVC_REQ 8 Reset Watchdog Timer 9-20
SVC_REQ 9 Read Sweep Time from Beginning of Sweep - milliseconds 9-21
SVC_REQ 10 Read Target Name 9-22
SVC_REQ 11 Read PLC ID 9-23
SVC_REQ 12 Read PLC Run State 9-24
SVC_REQ 13 Shut Down (Stop) PLC 9-25
SVC_REQ 14 Clear Fault Tables 9-26
SVC_REQ 15 Read Last-Logged Fault Table Entry 9-27
SVC_REQ 16 Read Elapsed Time Clock - microseconds 9-30
SVC_REQ 17 Mask/Unmask I/O Interrupt 9-31
SVC_REQ 18 Read I/O Override Status 9-33
SVC_REQ 19 Set Run Enable/Disable 9-34
SVC_REQ 20 Read Fault Tables 9-35
SVC_REQ 21 User-Defined Fault Logging 9-39
SVC_REQ 22 Mask/Unmask Timed Interrupts 9-41
SVC_REQ 23 Read Master Checksum 9-42
SVC_REQ 24 Reset Smart Module 9-44
SVC_REQ 25 Disable/Enable EXE Block and Standalone C Program Checksums 9-45
SVC_REQ 26 Role Switch (Redundancy) *
SVC_REQ 27 Write to Reverse Transfer Area (Redundancy) *
SVC_REQ 28 Read from Reverse Transfer Area (Redundancy) *
SVC_REQ 29 Read Elapsed Power Down Time 9-46
SVC_REQ 32 Suspend/Resume I/O Interrupt 9-47
SVC_REQ 43 Disable Data Transfer Copy in Backup Unit (Redundancy) *
SVC_REQ 45 Skip Next I/O Scan 9-49
SVC_REQ 50 Read Elapsed Time Clock - nanoseconds 9-49
SVC_REQ 51 Read Sweep Time from Beginning of Sweep - nanoseconds 9-51
*For information on Service Requests used in CPU redundancy, refer to the PACSystems
Hot Standby CPU Redundancy User’s Guide, GFK-2308
GFK-2222B 9-1
9
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. Various specific SVC_REQ functions have
additional causes for failure.
Operands
Note: Indirect referencing is available for all register references (%R,
%P, %L, %W, %AI, and %AQ).
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.
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. Because the MOVE and ADD functions require three horizontal
contact positions, 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
Note: A window is disabled when the time value is zero.
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 enabling output %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 default 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
Words 3 to the end of the parameter block contain output data returned by a read
function, or new data being supplied by a change function. In both cases, format of these
data words is the same. When reading the date and time, words (address + 2) to the end
of the parameter block are ignored on input.
The format and length of the parameter block depends on the data format and number of
digits required for the year:
Data Format and N-digit Year Length of parameter block
(number of words)
BCD, 2-digit year 6
BCD, 4-digit year 6
POSIX format 6
Unpacked BCD 2 9
Unpacked BCD 4 10
Numeric (2 and 4 digit years) 9
Packed ASCII, 2-digit year 12
Packed ASCII, 4-digit year 13
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 Example
Format Address 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 7FFFFFFF (hexadecimal)
seconds and 999,999,999 (decimal) nanoseconds, which corresponds to January 19th,
2038 at 3:14 am. 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.
Example 1 – SVC_REQ 7
When output %Q00476 is on, a parameter block for the time-of-day clock is built to first
request the current date and time, and then set the clock to 12 noon using the BCD
format. The parameter block is located at global data location %P00300. Array NOON has
been set up elsewhere in the program to contain the values 12, 0, and 0. (Array NOON
must also contain the data at %R0300.) The BCD format requires six contiguous memory
locations for the parameter block.
Example 2 – SVC_REQ 7
When called for by previous logic, a parameter block for the time-of-day clock is built. It
requests the current date and time, then sets the clock to 12 noon using BCD format. The
parameter block is located at global data location %R0300. Array NOON has been set up
elsewhere in the program to contain the values 12, 0, and 0. (Array NOON must also
contain the data at %R0300.) BCD format requires six contiguous memory locations for
the parameter block.
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
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-51.
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 OFF, 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 parameter block is an output parameter block only; it 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 successfully, the JUMP 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 PLC 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.
The parameter block for the PLC 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.
Output
The format of the output parameter block depends on whether SVC_REQ 15 reads the
PLC fault table or the I/O fault table, or the extended PLC fault table or the extended I/O
fault table.
PLC Fault Table Output Format I/O Fault Table Output Format
Address
High Byte Low Byte High Byte Low Byte
0 address 1
unused long/short address+1 memory type long/short
unused unused address+2 offset
slot rack address+3 slot rack
task address+4 block bus
fault action fault group address+5 point
address+6 fault action fault category
error code
address+7 fault type fault category
fault specific data address+8 to fault specific data fault description
address+18
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. These possible values are:
PLC fault table 00 = 8 bytes (short)
Extended PLC fault table 01 = 24 bytes (long)
I/O fault table 01 = 5 bytes (short)
Extended I/O fault table 02 = 21 bytes (long)
Example 1
When inputs %I0250 and %I0251 are both on, the first Move function places a zero (read
PLC 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 fourth, fifth, and sixth words of the
parameter block contain the address of the I/O module that faulted:
High Byte Low Byte
%R0600 1
%R0601 long/short
%R0602 reference address
%R0603 slot number rack number
%R0604 block (bus address) I/O bus no.
%R0605 point address
%R0606 fault data
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.
Example
When internal coil %M00223 is on, SVC_REQ with a parameter block located at %R0127
reads the system's elapsed time clock and sets internal coil %M00234. When coil
%M00223 is off, the SVC_REQ with a parameter block at %R0131 reads the elapsed time
clock again.
The subtraction function finds the difference between the first and second readings, which
have been stored in the SVC_REQ parameter blocks %R00127 and %R00131. The
subtraction ignores the hundred microsecond ticks and that the DINT type is signed value.
The calculation is correct until the time since power-on reaches approximately 50 years.
The difference between the two readings is placed in memory location %R00250.
Note: Higher resolution (in nanoseconds) can be obtained by using SVC_REQ 50,
described on page 9-49.
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 SVCREQ 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, each fault table entry is 21 words long (42 bytes). There is
a maximum of 16 PLC fault table entries and 32 I/O fault table entries. If the fault table
read is empty, no data is returned.
The following table shows the return format of a PLC fault table entry and an I/O fault
table entry.
Extended Formats
For extended formats (Read Extended PLC Fault Table (80h), or Read Extended I/O Fault
Table (81h)), the PLC calculates the number of entries being read and returns an error if
there are not enough registers.
The total size of the fault table for the extended fault format is
Header Size + ((# fault entries) * (size of fault entry))
Examples
Example 1: Non-Extended Format
When input %M00033 transitions on, the PLC fault table is read. When %M00034
transitions on, the I/O fault table is read. The parameter block is located at %R00500.
When the SVC_REQ function successfully executes, coil %M00035 is turned on.
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 PLC fault table.
Note: When a user-defined fault is displayed in the PLC 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.
Example
In the following example, when inputs %I00346 and %I00349 are on, the module indicated
by the Rack/Slot value in %R00500 is reset.
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 SVCREQ 29
In the example, 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 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.
Example – SVC_REQ 50
When internal contact %M00223 is on, SVC_REQ with a parameter block located at
%R00301 reads the system's elapsed time clock and sets internal coil %M00224.
When contacts %M00224 and %M00225 are on, the SVC_REQ with a parameter block
located at %R00401 reads the system’s elapsed time clock again.
The subtraction function finds the difference between the first and second readings, which
have been stored in the SVC_REQ parameter blocks %R00401 and %R00301. The
subtraction ignores the fact that the DINT type is actually a signed value. The calculation
is correct until the time since power-on reaches approximately 50 years. The example
also ignores the nanoseconds field.
The difference between the two readings is placed in memory location %R00440.
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.
This chapter describes the PID (Proportional plus Integral plus Derivative) function, 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.
■ Format of the PID Function
■ Operation of the PID Function
■ Parameter Block for the PID Function
■ PID Algorithm Selection
■ Determining the Process Characteristics
■ Setting Parameters Including Tuning Loop Gains
■ Example
GFK-2222A 10-1
10
Manual Operation
The PID 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
%Ref+13. If either the UP or DN inputs have power flow, the Manual Command word is
incremented or decremented 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.
The PID block uses the CV Upper and CV Lower Clamp parameters to limit the CV
output. If a positive Minimum Slew Time is defined, it is used to limit the rate of change of
the CV output. If either the CV amplitude or rate limit is exceeded, the value stored in the
integrator is adjusted so that CV is at the limit. This anti-reset windup feature means that
even if the error tried to drive CV above (or below) the clamps for a long period of time,
the CV output will move off the clamp as soon as the error term changes sign.
This operation, with the Manual Command tracking CV in Automatic mode and setting CV
in Manual mode, provides a bumpless transfer between Automatic and Manual modes.
The CV Upper and Lower Clamps and the Minimum Slew Time still apply to the CV output
in Manual mode and the internal value stored in the integrator is updated. This means that
if you were to step the Manual Command in Manual mode, the CV output would not
change any faster that the Minimum Slew Time (Inverse) rate limit and would not go
above or below the CV Upper or CV Lower Clamp limits.
* The PID block reads 13 user parameters and uses the rest of the 40-word Reference Array for
internal PID storage. Normally you would not change any of these values. If you call the PID
block in Automatic mode after a long delay, you might want to use SVC_REQ #16 or SVC_REQ
#51 to load the current CPU elapsed time clock into Address+23 to update the last PID solution
time to avoid a step change on the integrator. If you have set the Override low bit of the Control
Word (Address+14) to 1, the next four bits of the Control Word must be set to control the PID
block input contacts, and the Internal SP and PV must be set because you have taken control
of the PID block away from the LD logic.
PV Deriv Action
VALUE DERIVATIVE
TIME TERM - Kd
The ISA Algorithm (PIDISA) is similar except the Kp gain is factored out of Ki and Kd so
that the integral gain is Kp * Ki and derivative gain is Kp * Kd. The Error sign, DerivAction
and Polarity are set by bits in the Config Word user parameter.
required for PV to reach 63% of its final value when CV is stepped. The PID 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 integrator will round
down to 0. For example, a very slow process that takes 10 hours or 36000 seconds to
reach the 63% level should have a Sample Period of 40 seconds or longer.
Unless the process is very fast, it is not usually necessary to use a Sample Period of 0 to
solve the PID algorithm every PID sweep. If many PID loops are used with a Sample
Period greater than the sweep time, there may be wide variations in CPU sweep time if
many loops end up solving the algorithm at the same time. The simple solution is to
sequence a one or more 1 bits through an array of bits set to 0 that is being used to
enable power flow to individual PID blocks.
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 block in
Manual mode and making a small step in CV output, by changing the Manual Command
%Ref+13, and 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 size
may be from 2 to 10% of the difference between the CV Upper and CV Lower Clamp
values.
Setting Loop Gains Using the Ziegler and Nichols Tuning Approach
Once the three process model parameters, K, Tp and Tc, are determined, they can be
used to estimate initial PID loop gains. The following 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. Calculate the Reaction rate:
R = K/Tc
2. 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
3. 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 100ms, a Kp gain of 4.00 and a Ki gain
of 1.500. The set point is stored in %R0001, the control variable 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 (%Ref+2) 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 and integrator by 1 every 100ms 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 and Parameterized Block 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 ** 4.
GFK-2222B 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 Negation
NOT BOOL, BYTE, WORD, DWORD Boolean complement
1 3, 5
Group 3 **,^ INT, DINT, UINT, REAL Exponentiation
3
Group 4 * INT, DINT, UINT, REAL Multiplication
2, 3
/ INT, DINT, UINT, REAL Division
2
MOD INT, DINT, UINT Modulus operation
3
Group 5 + INT, DINT, UINT, REAL Addition
3
- INT, UINT, DINT, REAL Subtraction
Group 6 <, >, <=, >= INT, DINT, UINT, REAL, BYTE, WORD, DWORD Comparison
4
Group 7 = ANY 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 (Lowest) OR BOOL, BYTE, WORD, DWORD Boolean OR
1
The result of an expression using the ** operator shall be type REAL. The base shall be type REAL.
The power can be type INT, DINT, UINT, or REAL.
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 only data types supported are: BOOL, INT, DINT, UINT, BYTE, WORD, DWORD, and REAL.
STRING and TIME data types are not supported.
5
If either operand is positive or negative infinity, the result is undefined.
Operand Types
Type casting is not supported. To convert a type, the logic needs to 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;
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 becomes EXIT;
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;
WHILE Indicates that a statement sequence be executed repeatedly WHILE J <= 100 DO
until a Boolean expression evaluates to FALSE (0). J := J + 2;
END_WHILE;
REPEAT Indicates that a statement sequence be executed repeatedly REPEAT
until a Boolean expression evaluates to TRUE (1). J := J + 2;
UNTIL J => 100
END_REPEAT;
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. For details on PACSystems built-in functions, refer to “Instruction Set
Reference,” chapter 8
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.
Example
This code fragment shows the TAN function call.
Result := TAN( AnyReal, Result );
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;
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.0 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.
Index :=1
REPEAT
Value:= @Index;
Index:=Index+1;
UNTIL Value > 5.0 OR Index >= UpperBound END_REPEAT;
Exit Statement
The EXIT statement is used to terminate and exit from a loop (WHILE, REPEAT) before it
would otherwise terminate. Program execution resumes with the statement following the
loop terminator (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
Ethernet Port Pin Assignments 12-2
Serial Communications 12-3
Serial Port Communications Capabilities 12-3
Serial Port Pin Assignments 12-4
Serial Port Baud Rates 12-7
Series 90-70 Communications and Intelligent Option Modules (RX7i only) 12-8
Communications Coprocessor Module (CMM) 12-8
Programmable Coprocessor Module (PCM) 12-9
DLAN/DLAN+ (Drives Local Area Network) Interface 12-10
GFK-2222B 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 Yes Yes No
Firmware Upgrade CPU in STOP/No IO mode No No
(Winloader utility)
Message Mode 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 COMM_REQ 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-2222B 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 8, “”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 of the 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).
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RTS U U U U U U U U U U U U U U U
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.
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 Turn-around Time
Slave Response
Query Transaction
Broadcast Transaction
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-33) Some messages (Message 07 Query and Message 17 Query) do not have
information fields.
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
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-25.
CRC Register
15 14 + 13 12 11 10 9 8 7 6 5 4 3 2 1 + 0 +
Data
+ = Exclusive Or
Input
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 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 output status data. Each byte contains 8
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 8
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 input 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 the
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 minor types are shown in the following
table.
Response Data
Device Type Description
(Minor Type)
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 may be indicated, such as when a new module comes online and becomes
available for use. Some conditions, such as a low battery signal, may be displayed to
inform or alert the user.
Any detected fault is recorded in the PLC fault table or the I/O fault table, as applicable.
Information in this chapter is organized as follows:
■ Overview 14-2
■ Using the Fault Tables 14-4
■ System Handling of Faults 14-8
■ PLC Fault Descriptions and Corrective Actions 14-14
■ I/O Fault Descriptions and Corrective Actions 14-36
GFK-2222B 14-1
14
Overview
The PACSystems CPU detects three classes of faults:
Fault Class Examples
Internal Failures (Hardware) Non-responding modules
Low battery condition
Memory checksum errors
External I/O Failures (Hardware) Loss of rack or module
Addition of rack or module
Loss of Genius I/O block
Operational Failures Communication failures
Configuration failures
Password access failures
Fault Tables
The PACSystems CPU maintains two fault tables, the PLC 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.
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 PLC 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 PLC Fault
Details” for more information.
User-Defined Faults
User-defined faults can be logged in the PLC 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. All characters in the
descriptive message can be defined by the user. 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 PLC 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.
Reference Identifies the I/O memory type and location (offset) that corresponds to the
Address 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.
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.
Action: Nonconfigurable.
Error Code 1
Name 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.
Error Code 8
Name LAN Interface Restart Complete, Running Utility
Description The LAN Interface module has restarted and is running a utility program.
Correction Refer to the LAN Interface manual, GFK-0868 or GFK-0869 (previously GFK-0533).
Error Code 7
Name Extra Option Module
Correction (1) Update the configuration file to include the module.
(2) Remove the module from the system.
Error Code 14
Name Option module Hot inserted
Description The PLC logs this fault when it detects hot insertion of an option module such as the
LAN interface module.
Correction No correction necessary
Note: When configuration is cleared or stored, a reset fault is generated for every intelligent option
module physically present in the system.
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.)
[3] Configured module type (See “Installed/Configured Module Types” on page 14-18.)
Number
Description
Decimal Hexadecimal
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
Error Code 4
Name I/O Type Mismatch
Description The PLC generates this fault when the physical and configured I/O types of Genius
grouped blocks are different.
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.
Error Code 8
Name Analog Expander Mismatch
Description The CPU generates this error when the configured and physical Analog Expander
modules have different model numbers.
Correction (1) Replace the Analog Expander module with one corresponding to configured
module.
(2) Update the configuration file.
Error Code 9
Name Genius I/O Block Size Mismatch
Description The CPU generates this error when block configuration size does not match the
configured size.
Correction Reconfigure the block.
■ the identification data read from a module indicates that the module is a GE Fanuc
module but the module type is not a supported GE Fanuc type
Action: Nonconfigurable.
Error Code 1
Name Unsupported Board Type
Description The CPU generates this fault when the identification data read from a board
indicates that the board is a GE Fanuc board but the type of board is not one of the
GE Fanuc board types.
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 PLC fault table on the programmer. Contact GE Fanuc Field
Service, giving them all the information contained in the fault entry.
Error Code 2, 3
Name COMMREQ Frequency Too High
Description COMM_REQs are being sent to a module faster than it can process them.
Correction Change the application program to send COMM_REQs to the affected module at a
slower rate or monitor the completion status of each COMMREQ before sending the
next.
Error Code 4
Name More Than One BTM in a Rack
Description There is more than one BTM present in the rack.
Correction Remove one of the BTMs from the rack; there can only be one in a CPU rack.
Error Code >4
Name Option Module Software Failure
Description Software failure detected on an option module.
Correction (1) Reload software into the indicated module.
(2) Replace the module.
Error Code >4
Name LAN System Software Fault
Description The Ethernet interface software has detected an unusual condition and recorded an
event in its exception log. The Fault Extra Data contains the corresponding event in
the Ethernet exception log, which may also be viewed by the Ethernet Interface’s
Station Manager function. The first two digits of Fault Extra Data contain the two-
digit Event type; the remaining data correspond to the four-digit values for Entry 2
through Entry 6. Some exceptions may also contain optional multi-byte SCode and
other data.
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.
Error Code All
Name Program or Block Checksum Failure
Description The CPU generates this error when a program or block is corrupted.
Correction (1) Clear CPU memory and retry the store.
(2) Examine C application for errors.
(3) Display the PLC fault table on the programmer. Contact GE Fanuc Field
Service, giving them all the information contained in the fault entry.
Action: Nonconfigurable.
Error Code 0
Name Failed Battery Signal
Description The CPU module (or other module having a battery) battery is dead.
Correction Replace the battery. Do not remove power from the rack until replacement is
complete.
Error Code 1
Name Low Battery Signal
Description A battery on the CPU or other module has a low signal.
Correction Replace the battery. Do not remove power from the rack until replacement is
complete.
Action: Nonconfigurable.
Error Code 0 Constant Sweep
1 not used
Correction If Constant Sweep:
(1) Increase constant sweep time.
(2) Remove logic from application program.
Action: Nonconfigurable.
Error Code 0
Correction Clear the PLC fault table.
Action: Nonconfigurable.
Error Code 0
Correction Clear the I/O fault table.
Action: Nonconfigurable.
Error Code 1
Name Indirect Address Out of Range
Description The CPU generates this error when one of the parameters to a function block is an
indirect reference (that is, the parameter is an address within that memory type
which contains the parameter value) and the contents of the indirect reference are
out of range for the memory type. For example, consider a system with 500 %R
registers defined. This fault would be generated if the parameter address were
%R00100, and the contents of %R00100 were greater than 500 or zero.
Correction (1) Correct the indirect reference.
(2) Increase the number of registers available, if possible.
Error Code 2
Name Software Watchdog Timer Expired
Description The CPU generates this error when the watchdog timer expires. The CPU stops
executing the user program and enters Stop/Halt mode. The only recovery is to
cycle power to the CPU with battery disconnected. Examples causing timer
expiration Looping, via jump, very long program, etc.
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.
Error Code 4
Name Bad Genius Bus Request
Description This fault occurs when the GBC receives a Read or Write Device datagram from
another device on the Genius Bus that cannot be successfully completed.
Correction
Error Code 5
Name COMMREQ WAIT Mode Not Supported
Description The module receiving the COMMREQ does not support WAIT mode COMM_REQs.
Correction Use NOWAIT mode COMM_REQs.
Error Code 6
Name COMMREQ Bad Task ID
Description The task selected by the COMMREQ does not exist on the option module.
Correction Correct the task ID.
Error Code 7
Name Application Stack Overflow
Description Block call depth has exceeded the CPU capability.
Correction Increase the program’s stack size or adjust application program to reduce nesting.
Error Code 8—D hex (8 —13 decimal)
Name LAN Interface Application Faults
Description Refer to the LAN Interface manual, GFK-0868 or GFK-0869 (previously GFK-0533),
for a description of these errors.
Error Code 0E hex/ 15 decimal
Name External Block Run Time Error
Description A run-time error occurred during execution of an external block.
Correction Based on the fault information, correct the specific problem in the external block.
Error Code 0Fhex/15 decimal
Name SORT Interrupt Error
Description A SORT function executed in a timed or I/O interrupt at the same time a SORT
function was executing in another block.
Correction Do not use the SORT function in both Interrupt and Non-Interrupt blocks.
Error Code 11 hex/17 decimal
Name C Run Time Error
Description A run-time error occurred during execution of a C block or C program.
Correction Correct the specific problem in the C block or C program.
Error Code 1C hex/28 decimal
Name Program Exceeded Wind Down
Description A program failed to complete execution within the wind-down period (currently 2.5
seconds) after the CPU was commanded to stop.
Correction A program has gone into an infinite loop or is taking too long to execute. Correct the
coding error or modify the program.
Error Code 1D hex/29 decimal
Name Program Not Readied
Description A program scheduled to be readied has not completed its previous execution. The
base cycle time is too small (Periodic programs), or the interrupt rate is too high
(I/O-Triggered or Timed programs).
Correction (1) Increase the base cycle time or decrease the interrupt rate.
(2) Increase the execution interval time to allow the program to finish execution.
Action: Nonconfigurable.
Correction Download an application program before attempting to go to Run mode.
Action: Nonconfigurable.
Error Code 1
Name Corrupted User RAM on Power-Up
Description The CPU generates this error when it detects corrupted user RAM on power-up.
Correction (0) 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.
Action: Nonconfigurable.
Error Code 0
Name Window Completion Failure
Description The CPU generates this error when it is operating in Constant Sweep mode
and the constant sweep time was exceeded before the programmer window
had a chance to begin executing.
Correction Increase the constant sweep timer value.
Error Code 1
Name Logic Window Skipped
Description The logic window was skipped due to lack of time to execute.
Correction (1) Increase base cycle time.
(2) Reduce Communications Window time.
Action: Nonconfigurable.
Error Code 0
Correction Retry the request with the correct password.
Action: Nonconfigurable.
Error Code 5A hex/90 decimal
Name User Shut Down Requested
Description The CPU generates this informational alarm when SVCREQ #13 (User Shut Down)
executes in the application program.
Correction None required. Information-only alarm.
Error Code 94 hex/148
Name Units Contain Mismatched Firmware, Update Recommended
Description This fault is logged each time the redundancy state changes and the redundant
CPUs contain incompatible firmware.
Correction Ensure that redundant CPUs have compatible firmware.
Error Code DA hex/218 decimal
Name Critical Overtemperature Failure
Description CPU’s critical operating temperature (63ºC) exceeded.
Correction Turn off CPU to allow heat to disperse and install a fan kit to regulate temperature.
Error Code All Others
Name CPU Internal System Error
Description An internal system error has occurred that should not occur in a production system.
Correction Display the PLC fault table on the programmer. Contact GE Fanuc Field Service,
giving them all the information contained in the fault entry.
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)
Action: Diagnostic.
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.
Error Code 80 hex
Description 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.
Name Loss of Block
Description 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.
Name Loss of Block - A/D Communications Fault
Description The GBC generates this error when it detects a failure of A/D communications
on a Genius device.
Correction (1) Verify power and serial bus wiring to the block.
(2) Replace the block.
The Loss of Block fault provides four bytes of fault extra data. The second byte contains
the block configuration and is encoded as shown in the following table. The third byte
specifies the number of input circuits possibly used, and the fourth byte specifies the
number of output circuits possibly used.
Action: Diagnostic.
Name Addition of Block
Description The Genius operating software generates this error when it detects that a
Genius block that stopped communicating with the controller starts
communicating again.
Correction Informational only. None required.
The Addition of Block fault provides four bytes of fault extra data. The second byte
contains the block configuration and is encoded as shown in the following table. The third
byte specifies the number of input circuits possibly used, and the fourth byte specifies the
number of output circuits possibly used.
Note: This fault is always displayed as Fatal in the I/O Fault Table, regardless of its
configured action.
Name Loss of or Missing IOC
Description 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) Display the PLC fault table on the programmer. Contact GE Fanuc Field
Service, giving them all the information contained in the fault entry.
Fault extra data for Loss of or Missing IOC provides additional information for
troubleshooting by Technical Support.
Action: Fatal.
Name Datagram Queue Full, Read/Write Queue Full
Description Too many datagrams or read/write requests have been sent to the GBC.
Correction Adjust the system to reduce the request rate to the GBC.
Name Response Lost
Description 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.
Action: Diagnostic.
Name Addition of I/O Module
Description The CPU generates this error when an I/O module that had been faulted
returns to operation or is hot inserted.
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.
Error Code 30 hex
Name VME Reset on Request
Description Reset of VME module was requested.
Correction No action necessary.
Action: Diagnostic.
Name Extra I/O Module
Description The CPU generates this error when it detects an I/O module in a slot that the
configuration file indicates should be empty.
Correction (1) Remove the module. (It may be in the wrong slot.)
(2) Update and restore the configuration file to include the extra module.
Action: Diagnostic.
Name Extra Block
Description The GBC generates this error when it detects a Genius device on the bus at a
serial bus address which the configuration file says should not have a block.
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.
Action: Diagnostic.
Description The Genius operating software generates this error when it detects a hardware
failure in the bus communication hardware or a baud rate mismatch.
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.
Action: Diagnostic.
Name Block Switch
Description The GBC generates this error when a Genius block on redundant Genius
buses switches from one bus to another.
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).
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:
Instruction Timing A-2
Boolean Execution Times A-7
Overhead Sweep Impact Times A-8
Note: All performance data for all CPUs was not available at the time this manual was
printed. Additional information will be added to a future edition.
GFK-2222B A-1
A
Instruction Timing
The tables in this section list the execution time in microseconds and the memory size in
bytes for each function supported by the PACSystems CPUs.
Two execution times are shown for each function:
Execution Time Description
Enabled Time required to execute the function or function block when power flows
into and out of the function. Typically, best-case times are when the data
used by the block is contained in user RAM (word-oriented memory).
Disabled Time required to execute the function when it is not enabled.
Note: Timers are updated each time they are encountered in the logic by the amount of
time consumed by the last sweep.
Notes: 1. For table functions, increment is in units of length specified. For bit operation functions,
microseconds/bit. For data move functions, microseconds/the number of bits or words.
3. COMMREQ time has been measured between CPU and EX8 with NOWAIT option.
The following diagram shows the full sweep phases and the base sweep phases
contrasted so that the optional parts of the sweep are illustrated.
↓ ↓
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) pages 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, page overhead and
byte transfer time:
Page Overhead
Page overhead includes the setup time for each page that will be transferred during the
sweep. When computing the sweep impact, include overhead time for each page.
Note: The page overhead times in the table below are for the worst case scenario of
1400 bytes over 100 variables.
The table below shows the fixed sweep impact times in microseconds for intelligent option
modules.
GBC See “Sweep Impact Time of Genius See “Sweep Impact Time of Genius
I/O and GBCs ,” page A-15. I/O and GBCs ,” page A-15.
Any one of these events extends the interrupt latency (the time from when the interrupt
card signals the interrupt to the CPU to when the CPU services the interrupt) beyond the
typical value. However, the latency of an interrupt occurring during the processing of a
preceding I/O interrupt is unbounded. I/O interrupts are processed sequentially so that the
interrupt latency of a single I/O interrupt is affected by the duration of the execution time of
all preceding interrupt blocks. (Worst case is that every I/O interrupt in the system occurs
at the same time so that one of them has to wait for all others to complete before it starts.)
The maximum response time shown below does not include the two unbounded events.
The following form is a worksheet for the sweep impact times of programmer sweep
impact, intelligent option modules, and I/O Interrupts. For time data, refer to the following
tables:
Programmer Sweep Impact Times, page A-10
Sweep Impact Time of Local I/O Modules and Racks, page A-12
Sweep Impact Time of Genius I/O and GBCs, page A-15
Sweep Impact Time of Local I/O Modules and Racks, page A-12
Sample forms for calculating predicted sweep times are provided after the examples.
System Configuration
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.
User Memory Size Bytes
10MB 10,485,760
GFK-2222B B-1
B
PACSystems controllers incorporate the functional features of the Series 90 PLC family
with the Ethernet Global Data (EGD) capabilities of the Series 90-30 PLC family and
improved Ethernet communications. PACSystems provides many enhancements
compared to the Series 90 PLCs, although some Series 90 functionality is not supported
in the current version.
This chapter provides the following information:
■ PACSystems - Series 90 Comparison .................................................. C-2
■ Converting an Application from Series 90-70 to PACSystems ........... C-21
■ Converting an Application from Series 90-30 to PACSystems ........... C-27
For CPU specifications, refer to chapter 2. For function timing information, refer to
Appendix A.
GFK-2222B C-1
C
CPU Operation
Category Series 90-70 Series 90-30 PACSystems
CPUs allowed in Not supported. Not supported. Supported by RX3i (requires two slots). Not
any rack 0 slot. supported by RX7i.
Logic Execution Column major Row major Row major (See “Logic Execution,” below.)
(See “Logic
Execution,”
below.)
Fault clearing Clear individual Clear individual faults. Clear PLC fault table or I/O faults table.
faults.
Reset of IO Module Generated on Not generated on store or Generated on store or clear of HWC.
fault store or clear of clear of HWC.
HWC.
%S0020 status bit Not supported. Set ON when a relational Not supported.
function using REAL data
executes successfully.
Cleared when either input
is NaN (Not a Number).
Access Privileges Levels 0 Levels 1 through 4 Levels 1 through 4
through 4.
Stack overflow Transitions to Transitions to Stop/Fault If there is not enough stack space left to support
Stop/Halt mode mode when it detects a a given block call, an “Application Stack
when it detects stack overflow. Overflow” fault is logged. In these
a stack circumstances, the CPU cannot execute the
overflow. block. Instead, it sets the block’s Boolean
outputs to FALSE, and resumes execution at the
point after the block call instruction.
Program name Not used Not used Read-only LD program name, LDPROG1, used
by legacy drivers in Plant Edition software.
Logic
Row- vs. Column-major LD Execution
Series 90-70 PLCs use column major execution: they execute a rung of LD logic by going
from top to bottom, left to right, through each column in the rung. Series 90-30, VersaMax,
and PACSystems use row major execution: they execute an LD rung by tracing paths
from left to right and top to bottom. Differences in execution order result from branching,
or the divergence and/or convergence of power flow within a rung, which is not allowed in
Series 90-30. Therefore, the following examples do not apply to Series 90-30.
Note: The conversion of a Series 90-70 target to a PACSystems target does not rewrite
the logic from column major execution to row major execution. Rungs that may
execute differently because of the column/row major difference are reported in the
target conversion report, but it is not guaranteed that every execution difference
will be detected and reported.
Example 1
In this example, the order in which the contact and coil that reference the variable C are
executed differs between column-major and row-major execution. In row-major, the coil
(1) sets the value of C before the contact (2) is evaluated. In column-major, the C contact
(2) is evaluated before the coil (1) is executed.
Example 2
In this example, the problem is less obvious. If the variable C is used as an input and/or
output inside LDBK or any block that LDBK calls, the difference in row-major versus
column-major execution within the called blocks may affect the execution of coil C.
In row-major execution, the C coil (1) is executed before the Call (2) is executed. In
column-major execution, the Call (2) is executed before the C coil (1) is executed.
Example 3
In the following example, using column-major execution (Series 90-70), the SUB_INT
always executes before the ADD_INT. Using row-major execution (PACSystems), the
ADD_INT executes before the SUB_INT.
Example 4
In this example, even though the order of execution is different, the outcome is the same
for both types of execution.
Row Major Execution (PACSystems)
The external input I00017 (1) is evaluated 1
2
first. If I00017 is set to 1, the Masked 3
Compare function (2) is executed, passing
power to Q00017 (3). If there is a
miscompare, the output MC (4) is set to 1. 4 6
I00018 (5) is then evaluated. The state of
Q00018 (6) is set to the OR of the MC
output and I00018.
User Programs
Category Series 90-70 Series 90-30 PACSystems
C Standalone Programs Supported Not supported Not supported
LD Program Supported Supported Supported
Structured Text Not supported. Not supported. For availability on a given CPU
version, refer to the IPI document
provided with that CPU.
Program Scheduling Five modes are Only the Ordered mode Only the Ordered mode is supported.
supported. is supported.
Interrupt programs Supported Not supported Not supported
Function Blocks Supported Not supported. For availability on a given CPU
version, refer to the IPI document
provided with that CPU.
Sequential Function Supported Supported Not supported
Chart programming
Synchronous Scan Sets Supported Not supported Not supported
FIP, Microcycle mode Supported Not supported Not supported
and periodic programs
Multiple programs per Supported (up to 16) Not supported Not supported
folder
C Debugger Supported Not supported Not supported
State Logic Supported Supported Not supported
Stack Size
Category Series 90-70 Series 90-30 PACSystems
Stack Size Valid range: 1 through Not configurable. Valid range: 8 through 320 KB, in
64 KB increments of 8 KB
Default: 20 KB (LD Default: 64 KB
Program)
C Blocks
Category Series 90-70 Series 90-30 PACSystems
C toolkit used to GFK-0646 GFK-0646 GFK-2259
develop
Bits 16-bit blocks 16-bit blocks 32-bit blocks
Compiled block .exe or .sta .exe .gefelf
extension
Maximum size 64,000 bytes 81,920 bytes Limited only by available user memory.
Note: By default for any C block, if its size is greater
than 256 KB, a validation error takes place. This may
be prevented by right-clicking the C block, choosing
Properties and, in the Inspector, setting the Check
Size Limits property to False. This, however,
introduces the risk of memory fragmentation.
Importing Cannot import Cannot import Cannot import blocks developed for Series 90-70 or
blocks developed for blocks developed Series 90-30. They must be recompiled with a .gefelf
PACSystems or for PACSystems or extension.
Series 90-30 Series 90-70
Name property Up to 7 characters Up to 7 characters Up to 31 characters long
long long
Check Size Not supported. Not supported. Supported.
Limits
Third-party VME Supported. Not supported. Replaced with Module interrupts
interrupts
Module interrupts Not supported Not supported. Selected from the list of Triggers when you schedule
the block. First, configure the module in the
Hardware Configuration; then set a module's
interrupt ID in the Interrupts tab of the Parameter
editor.
Number of 0 through 7 Not supported. Input: 0 through 63.
defined input/output pairs. Output: 1 through 64.
parameters Must have as many Does not need to have as many inputs as outputs.
inputs as outputs.
Optional Not supported. You Not supported. Machine Edition enables you to leave the value of
parameters must supply a value any parameter blank. It is your responsibility to
optional in the for every defined ensure the C block uses an acceptable default value
CALL to the C parameter. and no run time error occurs.
block
BYTE data type Supported Not supported. Refer to the Important Product Information document
for a specific CPU firmware version.
NWORD data Supported. Not supported. Not required. Can use WORD instead.
type
Data flow Not supported. Not supported. Supported
Indirect Not supported. Not supported. Supported
references
Bit references in Not supported Not supported. Supported. Must be byte-aligned.
non-discrete
memory
Blocks
When you select a block type, it must be of type ‘Block’, ‘Parameterized Block’, or
‘Function Block’. When you create a block, you must first let CME know whether you want
to create it using LD language or ST language, but the language is independent of the
block type. That is, you can create a Block in either LD or ST language.
Non-Parameterized Blocks
Category Series 90-70 Series 90-30 PACSystems
Maximum size 32 KB 16 KB 128 KB
Name property Up to 7 characters long Up to 7 characters long Up to 31 characters long
Extra Local Words Not configurable Not supported. Configurable.
allocated for %P or %L
memory per program
block
Third-party VME Supported. Not supported. Replaced with Module
interrupts interrupts
Module interrupts Not supported. Not supported. Selected from a list when
scheduling the block. First you
need to configure the module
and the interrupt in the
Hardware Configuration.
Bit references in non- Not supported Not supported. Supported
discrete memory
Function Blocks
PACSystems allows the use of Function Blocks, which are user-defined logic blocks that
have parameters and instance data. Not supported in Series 90 PLCs.
PACSystems Functions
PACSystems Functions
The following functions were introduced with PACSystems and may not be supported in
all Series 90 and VersaMax PLC product families.
BUS instructions
■ BUS_RD_BYTE. Replaces the Series 90-70 VME_RD_BYTE function.
■ BUS_RD_DWORD
■ BUS_RD_WORD. Replaces the Series 90-70 VME_RD_WORD function.
Note: The BUS_RD_ instructions also replace the Series 90-70 VME_CFG_READ
function.
■ BUS_RMW_BYTE. Replaces the Series 90-70 VME_RMW_BYTE function.
■ BUS_RMW_DWORD
■ BUS_RMW_WORD. Replaces the Series 90-70 VME_RMW_WORD function.
■ BUS_TS_BYTE. Replaces the Series 90-70 VME_TS_BYTE function.
■ BUS_TS_WORD. Replaces the Series 90-70 VME_TS_WORD function.
■ BUS_WRT_BYTE. Replaces the Series 90-70 VME_WRT_BYTE function.
■ BUS_WRT_DWORD
■ BUS_WRT_WORD. Replaces the Series 90-70 VME_WRT_WORD function.
Note: The BUS_WRT_ instructions also replace the Series 90-70 VME_CFG_WRITE
function.
New Transitional Coils and Contacts
■ NTCOIL
■ NTCON
■ PTCOIL
■ PTCON
The status of the new transitional contacts PTCON and NTCON is determined by the
value that the associated BOOL variable had the last time the contact was executed. The
status of the existing POSCON and NEGCON transitional contacts is determined by the
last write to the BOOL variable associated with the contact.
Service Requests
The PACSystems SVC_REQ function supports the following services:
■ #50: Read Elapsed Time Clock (Two DWORDs)
■ #51: Read Sweep Time from Beginning of Sweep (DWORD)
Function Differences
Most function differences between PACSystems and other PLC families, such as Series
90 and VersaMax, are due to the PACSystems CPUs’ support of the following new
features:
■ Symbolic variables
■ Bit addressing in non-discrete memory
■ BOOL arrays of sufficient length can replace operands of other data types.
The following table lists other differences between Series 90-70 and PACSystems RX7i
with regards to individual built-in functions.
Category Series 90-70 Series 90-30 PACSystems
ARRAY_MOVE_ (all The SR parameter does Same as Series 90-70. The SR parameter supports data
mnemonics) not support data flow. flow.
ARRAY_RANGE_ (all The LL, UL, IN, and Q Function not supported. The LL, UL, IN, and Q parameters
mnemonics) parameters do not support data flow.
support data flow. When an invalid (reference out of
range) operand occurs and length
is equal to one the result is set to
false
BIT_SEQ The N (STEP) Same as Series 90-70. The N parameter supports data
parameter does not flow.
support data flow.
Bit Operation Functions Overlapping input and Same as Series 90-70. When using overlapping inputs
output reference and outputs, the PACSystems
address ranges in multi- performs the operation on the
word functions may data when the function is invoked,
produce unexpected not the data output from earlier
results. executions.
COMM_REQ Supports WAIT mode Same as 90-70. Does not support WAIT mode
COMM_REQs. COMM_REQs.
Online Editing
Category Series 90- Series 90- PACSystems
70 30
Online Editing and Online Not Not Allow editing and testing of logic changes that are
Test modes supported supported permitted for a Run Mode Store.
Variables
Category Series 90-70/90-30 PACSystems
Multi-bit 8-bit and 16-bit variables 8-bit, 16-bit, and 32-bit variables
variables Mappable to %I, %Q, %M, %T, and %G. Mappable to %I, %Q, %M, %T, and %G.
mapped to
discrete memory WORD variables can sometimes be mapped to WORD variables can sometimes be mapped to
%S, depending on the instructions. %S, while DWORD variables can sometimes be
mapped to %SA, %SB, and %SC, depending on
the instructions.
Bit addressing in Not supported You can address individual bits in BYTE,
non-discrete WORD, INT, UINT, DINT, and DWORD
memory variables in non-discrete memory (%R, %AI,
%AQ, %L, %P, and %W).
BOOL arrays Not supported Supported
used to replace
other data types
Index of indirect 16 bits 32 bits when referring to %W memory.
references 16 bits when referring to other memory areas.
Symbolic Not supported Supported. A symbolic variable is a variable in
variables logic that does not have an assigned reference
address. Machine Edition handles all the
mapping in a special portion of PACSystems
user memory outside %R, %AI, %AQ, %P, %L,
%W, %I, %Q, %M, %T, %S, and %G memory.
Publishing Not supported Supported
variables
System Variables
Category Series 90-70 Series 90-30 PACSystems
CPU Overtemperature Not supported Not supported Supported
Status (#OVR_TMP)
Fault Locating System Eight characters long Not supported. 10 characters long
Variables Can locate 10 slots, Can locate 32 slots, from #0 through
from #0 through #9 #31
Can locate 32 modules, Can locate 256 modules, from #0
from #0 through #31 through #255
Communications
Category Series 90-70 Series 90-30 PACSystems
Communicating with Modem, serial port, and Same as Series 90-70. Ethernet supported on all versions.
Machine Edition Ethernet. Serial port supported on later versions.
refer to the Important Product
Information document for a specific
CPU firmware version.
Ethernet adapters Ethernet Interface CPUs 364 and 374 IC698CPE010, IC698CPE020, and
Module IC697CMM742, have an embedded IC698CRE020 have an embedded
in any rack. Ethernet interface. Ethernet daughterboard.
Ethernet Interface Ethernet module IC698ETM001 in
Module IC693CMM321, RX7i main rack only. Maximum
in any rack. number: 3.
Ethernet module IC695ETM001 in
RX3i main rack only. Maximum
number: 4.
Configuring Ethernet Involves temporarily Same as Series 90-70. Can use the Set Temporary IP
connecting your Address utility for a temporary
computer to the PLC by connection, during which the
serial cable. permanent IP address can be set.
Later versions support serial
connection. Refer to the Important
Product Information document for a
specific CPU firmware version.
Web-based data Not supported. Not supported. Up to 16 web server and FTP
monitoring connections (combined)
Network routing Supported through Not supported. Not supported.
CMM742 Ethernet
Interface configuration.
Serial ports Can be used to Same as Series 90-70. Ports 1 and 2 provide serial interfaces
communicate with to external devices. Port 1 is also used
Machine Edition. for firmware upgrades. The third on-
Provide SNP, Disabled, board serial port is used as the
and Custom modes. Ethernet station manager port. .
Refer to the Serial Provide RTU Slave, Message, and
Communications User’s SNP Slave, Serial I/O, and Available
Manual, GFK-0582. modes.
Serial port default SNP SNP Modbus RTU.
protocol
Serial port Scanf and Printf. Same as Series 90-70. ANSI-style read/write.
communications from C
applications
EGD
Category Series 90-70 Series 90-30 PACSystems
EGD variables Limit of 1,200 No limit
EGD upload Does not support Same as Series 90-70. Supported
upload of EGD
Configuration from the
PLC to the Programmer
Broadcast IP Not supported Not Supported Broadcast option provides support for
the production and consumption of
EGD pages using the broadcast
address of the local subnetwork.
Name Resolution Supported. Supported. Same Not Supported. Adapter name in an
restrictions as Series EGD page configuration defaults to
90-70. the rack.slot location.
Consumed Period Configurable. Configurable for Has a constant, read-only value of 200
CPU364. ms.
CPU374 same as
PACSystems.;
Selective consumption Not supported. Not supported. Supported. Ranges in a consumed
EGD page can be set to Ignore.
%W N/A N/A Supported in EGD page configuration
Flash
Category Series 90-70 Series 90-30 PACSystems
Clearing Flash Not supported Same as Series 90-70. Supported. Clear affects all items
(HWC, logic, and initial/forced values).
Reading/Verifying logic Can read and verify Same as Series 90-70. Cannot read and verify logic and HWC
logic and HWC separately.
separately.
If EGD is present Cannot read, write, or Can read, write, verify, Can read, write, verify, or clear Flash
verify Flash memory or clear Flash memory. memory.
(Same as
PACSystems.)
Restoring from Flash N/A N/A OEMs can configure PACSystems to
automatically restore user
programs/data from Flash to battery-
backed RAM. After such a restoration
takes place, the PLC boots from RAM
and not Flash, as long as the RAM’s
contents are valid (as determined
during the power-on tests).
Writing to Flash Does not write the Takes a snapshot of the transitions
transitions that are currently set and writes them
to Flash
Verifying Flash Does not verify Verifies the transitions. If a transitional
transitions changed value from 0 to 1 and back to
0, the value would be equal, but the
transition could be unequal.
Memory
Differences in the Memory Areas Supported
Memory Area Series 90-70 Series 90-30 PACSystems
%GA through %GE Supported Uses %G (same as Uses %G instead.
PACSystems). Target conversion from Series 90-70
PLC to PACSystems automatically
converts %GA - %GE memory
mappings to %G mappings. For
details, see “Changes Made During
the Conversion,” page C-24.
Bulk Memory Area Accessed by means of N/A Accessed by mapping variables to
SVC_REQ 36 %W memory
%W In LD programs, the N/A Supported. Represents the Bulk
BMA is accessed by the Memory Area.
SVCREQ 36 function. In
C programs, the BMA is
accessed through the
PLCC_buil_mem()
function.
Symbolic Not supported Same as Series 90-70. Supported. One memory area is used
for discrete symbolic variables and
another for non-discrete symbolic
variables.
Redundancy
Category Series 90-70 Series 90-30/RX3i PACSystems Rx7i
CPU redundancy Supported Not supported. Supported in redundancy CPUs
Genius redundancy Supported Supported.
CPU over Genius supported in
redundancy CPUs.
IP Address redundancy Supported Supported in redundancy CPUs.
Genius
Category Series 90-70 Series 90-3/RX3i PACSystems RX7i
Handling of GBC loss of Sets input data for devices N/A Sets input data for devices
device fault associated with a failed associated with a failed
GBC to Hold Last State, GBC to the state specified
regardless of how the Input by the Input Default
Default parameter is parameter for each device.
configured for each device.
Handling of data for lost Immediately applies the N/A Updates input data and
redundant Genius blocks default input data to the input diagnostic tables with
input reference tables and the default data during the
updates the associated input scan immediately
diagnostic tables. following the loss of device
fault. Updates output
diagnostic data tables
during the output scan
immediately after the loss
of device fault.
Setting of Force Present Limited to Genius blocks. NA No longer limited to Genius
status bit, FRC_PRE %S12. blocks. If any input module
reports that it has a force
present, this bit is set.
Caution
GE Fanuc PLC target conversions are irreversible. When logic
blocks are deleted during a conversion, they cannot be restored.
That is, there is no undo to a conversion. It is recommended that
you make a backup of your project before converting a target in it.
VME_ Instructions
The PACSystems Rx7i provides Bus_Read and Bus_Write functions similar to the Series
90-70 VME_Read and VME_Write functions. When converting a Series 90-70 application,
some modifications to hardware configuration and logic are required to use the new
instructions. These changes must be made manually after converting the application.
Before converting your application, review the descriptions of VME addressing and
information needed to complete the conversion.
Note: For details on selecting, configuring, and programming non-GE Fanuc VME
modules in a PACSystems control system, refer to PACSystems RX7i User's
Guide to Integration of VME Modules, GFK-2235.
PCM Applications
The VME address assignments for VME modules in an RX7i system differ from the
assignments in a 90-70 system. If an application program running on the IC697PCM711
accesses the VME bus (that is, it uses Set_vme_ctl, Vme_read, Vme_test_and_set, or
Vme_write), the VME addresses used by that program will need to be updated to be in
agreement with the PACSystems RX7i VME addressing assignments. To determine the
correct VME addresses to use on the RX7i, please refer to the following sections in the
PACSystems RX7i User’s Guide to Integration of VME Modules, GFK-2235:
“VME Addresses for GE Fanuc Modules in the Main Rack”
“VME Addresses for GE Fanuc Modules in Expansion Racks”
Also please note that the S9070_xxxx macros, listed below, that are provided by the PCM
C toolkit in the file Vme.h cannot be used to calculate VME addresses in an RX7i system.
S9070_RACKSLOT_VALID(r,s) (r>=0&&r<=7&&s>=2&&s<=9)
S9070_VME_HI_ADDR(r,s) ((r)?(0xF0-(0x10*(r))+2*((s)-2)):(2*((s)-2)))
S9070_VME_SHORT_ADDR(s) (0x800*s)
Warning
There may be execution differences when converting an application
from a Series 90-70 target to a PACSystems target. It is the
application developer's responsibility to validate and test the
application execution prior to deployment into a production
environment.
Warning
There may be execution differences when converting an application
from a Series 90-30 target to a PACSystems target. It is the
application developer's responsibility to validate and test the
application execution prior to deployment into a production
environment.
Logic
■ C blocks are retained and flagged in the report. You may need to edit them. You will
also need to recompile them with the PACSystems C Toolkit and update them in the
PACSystems target.
■ All C programs are deleted.
■ IL (Instruction List) and SFC (Sequential Function Chart) programs are not translated.
IL and SFC programming are not supported.
■ LD blocks are converted and scanned for instructions that require updating.
The following instructions are flagged as not supported:
- SVC_REQ #41 (PEEK), SVC_REQ #42 (Daughterboard Info). These are not
translated. Other means of debugging the operation of the system and of
determining daughterboard revision information are provided.
- SVC_REQ 46 Fast Backplane Status Access
- SCV_REQ #48 & #49 (auto-restart parameters). These are not translated, since
the auto-restart feature is not implemented. The program is translated
successfully without them, but you are notified that they have been omitted.
- END. Not supported.
The following instructions are flagged for manual translation:
- SVC_REQ 6, Change/Read Number of Words to Checksum
- SVC_REQ 15, Read Last-Logged Fault Table Entry
- SVC_REQ 23, Read Master Checksum
- SVC_REQ 26/30, Interrogate I/O. Note that the Series 90-30 Interrogate I/O
functionality is supported in PACSystems by fault locating references.
C
@ Cables
@ RS-485
indirect references, 7-4 shielding, 12-7
serial
A length, 12-7
Calculating predicted sweep times, A-22
Absolute Value, 8-121 Call, 8-132
Add, 8-122 Circuit faults, 14-39
Address operators, 11-2 Clocks, 5-16
Advanced math functions, 8-3 elapsed time clock, 5-16
Advanced user parameters, 4-4 time-of-day clock, 5-16
Alarm contacts, 14-13 reading and setting with SVCREQ #7,
Analog expander modules 5-16
fault locating references, 14-12 reading with SVCREQ #16 or #50, 5-
Analog I/O diagnostic information, 5-23 16
Analog input register references (%AI), 7-4 CMM, 12-8
Analog output register references (%AQ), Coil Checking, 8-30
7-4 Coils, 8-30
Applications Column-major logic execution, 6-15, C-2
converting, C-21 Comment, 8-136
Array Move, 8-101 Communication Request (COMM_REQ)
Assignment Serial I/O
Structured Text, 11-5 4300, 13-11
Autodial, 13-17 4301, 13-12
Auto-Located symbolic variables, 7-2 4302, 13-13
4303, 13-13
B 4304, 13-15
4399, 13-16
Base sweep time, A-9 4400, 13-17
Baud Rates 4401, 13-19
serial ports, 12-7 4402, 13-20
Bit in Word references, 7-5 4403, 13-22
Bit Operation Functions, 8-8 Communication Request (COMM_REQ),
data lengths, 8-9 8-85
Bit Position, 8-10 using to configure serial ports, 13-2
Bit references, 7-6 Communications Coprocessor, 12-8
Bit Sequencer, 8-11 Compare, 8-143
Bit Set, Clear, 8-14 Comparison
Bit Test, 8-16 PACSystems vs. Series 90, C-2
Block Clear, 8-75 Configuration
Block Move, 8-76 storing (downloading), 3-16
external, 6-11 Configuration parameters
Function, 6-6 CPU, 3-2
parameterized, 6-4 embedded Ethernet Interface, 4-2
program, 6-3 Configuration, system, 5-25
types of, 6-2 Contacts, 8-38
Boolean execution times, A-7 Continuation Contact, 8-39
RX3i, 2-9 Control Functions, 8-47
RX7i, 2-6 Control programming software, 5-20
BUS_ functions, 8-78 Convenience references. See System
status references
Conversion, 8-62
Conversion functions, 8-60
GFK-2222B Index-1
Index
VME addressing
PACSystems vs. Series 90-70, C-22
VME_ functions, 8-78, C-22, C-25
W
Watchdog timer, 5-17
using SVCREQ function #8 to restart the
timer, 5-17
WHILE, 11-9
Window modes, 5-9
Constant Window mode, 5-9
Limited mode, 5-9
Run-to-Completion, 5-9
Wires, 8-141
Word references, 7-4
by bit, 7-5
indirect, 7-4
Word-for-word changes
attempting to correct parameterized block
reference, 6-4
defined, 7-18
privilege level, 5-18
symbolic variables, 7-18
Write Bytes, 13-19
Y
Y0 parameter, 6-3, 6-4
Z
Ziegler and Nichols tuning, 10-14