Modicon 984 ProWorx Timer Behavior and MB+ Peer Cop Addressing Reference
This technical reference documents two recurring issues encountered when maintaining legacy Modicon 984 systems programmed with ProWorx 32: the unusual behavior of the lower timer output (accumulator < preset) and the addressing/Peer Cop data exchange model used when a 984-265 (or compatible) is networked to a Quantum secondary through Modbus Plus (MB+). The content is targeted at automation engineers migrating, troubleshooting, or reverse-engineering 984 ladder logic that must be carried over to a Unity Pro / EcoStruxure Control Expert or Modicon M340/M580 platform.
1. System Context and Hardware
The reference architecture described here is built around the following Schneider Electric (legacy Modicon) components:
- Primary PLC: Modicon 984-265 (984-E265) with a built-in Modbus Plus port and (in some installations) an optional Ethernet module for TCP/IP programming.
- Secondary PLC: Modicon Quantum CPU (or another 984 family member) acting as a peer on the same MB+ network. It carries the same CPU type as the primary in the canonical case but lacks the Ethernet option.
- Programming Software: ProWorx 32 version 2.1, Service Pack 2, running on Windows 7 (XP compatibility mode does not change runtime behavior).
- Connection Options: MB+ SA85 PC adapter card for global network access, or a direct Modbus (RS-232) cable to each processor's Modbus port for point-to-point program upload.
2. Modicon I/O Addressing Model
Regardless of whether a node is designated "Main" or "Secondary," all 984 family PLCs use the same four-reference address space. ProWorx 32 Traffic Cop reflects this structure for every drop on the MB+ network.
| Reference Type | Prefix | Function | Typical Source |
|---|---|---|---|
| Discrete Inputs | 1XXXX | Read-only input bits from the field | AC inputs, pushbuttons, sensors |
| Discrete Outputs / Coils | 0XXXX | Output bits and internal coils (internal coils begin at the address immediately following the highest traffic-copped discrete output) | Contactor coils, lamps, internal flags |
| Register Inputs | 3XXXX | 16-bit input words | Analog inputs, status words |
| Register Outputs (Holding Registers) | 4XXXX | 16-bit output words | Analog outputs, setpoints, HMI data |
The address ranges above are the standard Modicon 984/Quantum convention and map directly to Modbus function codes 01/02 (coils/inputs), 03/04 (holding/input registers), and 05/06/15/16 (coil/register writes). Peer Cop exchanges are configured using the same reference types.
3. MB+ Network and Peer Cop Data Exchange
3.1 No Master / Slave Relationship
A common misconception when seeing two 984-family processors tied together over Modbus Plus is that one is a "slave I/O drop" of the other. The Peer Cop service in the 984 family is a peer-to-peer, broadcast-based data exchange where each node publishes a defined set of registers/coils and subscribes to a defined set from every other peer. There is no implicit master; each PLC runs its own complete program.
3.2 Configuration Extensions
Open Configuration Extensions inside ProWorx 32 to inspect or edit the Peer Cop tables. The relevant parameters are:
- Global Data (Healthy, In-Sync, Source bits): 16-word health/status frame broadcast by every node.
- Specific Data: User-defined register ranges published and subscribed per node, identified by the drop number (1–32 on MB+).
ProWorx 32 allows each specific link to be edited in a table that shows the source node, target node, source register range, and target register range. Because the exchange is automatic, no MSTR/MSTRX block is required in the ladder logic, which is a major difference from later Unity Pro Peer Cop and M580 CIP-Open messaging.
3.3 Verifying the Topology
If the original electrical prints are missing, use ProWorx 32's Traffic Cop view for the secondary drop to read the I/O map directly. The Traffic Cop listing is the authoritative source of slot-to-address mapping. Question marks in the Traffic Cop normally indicate that ProWorx cannot identify the module type (e.g., an unsupported or third-party I/O card); this is a metadata problem, not a wiring problem.
4. ProWorx 32 Timer Behavior
4.1 The Lower Output Quirk (Accumulator < Preset)
The most frequently reported "ghost rung" symptom in 984 ladder logic comes from the lower timer output (the contact that is true while accumulator < preset):
Even when all preceding logic to the timer's enable input is false, the accumulator < preset output remains true. Power appears to materialize mid-rung in the column where that contact sits.
This is intentional Modicon behavior: the lower output is evaluated independently of the enable input. The implication is that any logic to the right of this contact will see a true condition during the time the timer's accumulator is below its preset, regardless of upstream logic state. The correct way to express "timer not done AND input is true" in a 984 is one of the following patterns:
- Duplicate the input conditions on the output side of the timer block so that the rung can only go true when both the timer is not done and the input is currently true.
- Use an explicit enable coil or contact to gate the timer's done / not-done branches in a separate rung.
- Substitute an IEC 61131-3 timer (TP, TON, TOF) when migrating the program to a Unity Pro or M340/M580 target.
4.2 Enable / Reset Truth Table
| Top Input (Enable) | Bottom Input (Reset) | Timer Behavior |
|---|---|---|
| ON | ON | Timer accumulates |
| ON | OFF | Timer reset, not running |
| OFF | ON | Accumulator value held, not incrementing |
| OFF | OFF | Timer reset, not running |
The enable input is level-sensitive; the timer does not use a one-shot to capture a rising edge. A momentary enable will start the timer; if the enable drops before the preset is reached, the timer resets (or holds, depending on the bottom input).
5. Timer Accuracy and Resolution
According to Schneider Electric's published FAQ on 984 timer accuracy (FA191553), the timer's accuracy is bounded by the larger of two values:
- One increment of the timer's time base, or
- The PLC's current scan time.
Therefore a T.01 (0.01 s base) timer has an accuracy of ± 0.01 seconds, but a T1.0 (1.0 s base) timer with a 200 ms scan is accurate to ± 1.0 second because the scan interval is the larger of the two error sources. Engineers should size the time base with scan time in mind: a 0.1 s preset on a 250 ms scan will resolve to 0.0 s, 0.25 s, or 0.5 s depending on phase. Refer to the Schneider Electric FAQ on Modicon 984 timer accuracy for the canonical statement.
6. Scan Order and Column-Based Solve
Modicon 984 PLCs solve ladder logic column by column, not network by network. Within a network, the left-most column is solved first, then the next column, and so on, top to bottom within a column. This has several consequences that bite engineers who learned on Rockwell or Siemens platforms:
- Coil evaluation column: The "true solve column" for a coil is not always the right-most column of the network. If a coil is physically drawn in column 7 of an 11-column network, the coil is updated when column 7 is solved, which may be before subsequent columns have updated other contacts in the same network.
- Same-rung feedback: A coil and a contact referencing the same address within the same network will see the coil's previous-scan value, not the just-written value. To force intra-scan feedback, place the dependent contact in a downstream network or in a later segment.
- EMTH / extended math: EMTH instructions update their result register only at the end of the network solve. Reading the result in the same network returns the previous value. Comparisons against the EMTH result must occur in a downstream network.
- One-shots: 984 one-shots (transitional contacts) close for one scan on a 0→1 or 1→0 transition. They are sensitive to the scan-order column in which they appear. Two one-shots that appear in different columns of the same network and reference the same input can fire in the same scan.
7. Multi-Segment Programs and I/O Update Points
If the 984 program is divided into multiple segments (Program Sections), the scan order and I/O update points are not always obvious:
- Some installations configure I/O updates only at the end of a full program scan; others configure updates after specific segments. Use Configuration Extensions → I/O Scan to verify which model is active.
- Segments can be configured for sequential scan or for repeated scan within one program cycle. Confirm the setting when porting logic, because a segment that fires multiple times per scan will see corresponding multiple updates to its outputs.
8. Uploading and Connecting to a 984 CPU
8.1 Direct Modbus Connection
The most reliable path to read a 984 program when the MB+ adapter is missing or the network is unhealthy is a direct RS-232 Modbus connection to the processor's Modbus port. Steps:
- Identify the processor's Modbus port (DB-9 or RJ-45 depending on module variant) and the address dip switches (or rotary switches) on the CPU front panel.
- Set ProWorx 32 to the same Modbus address; the default is 1.
- Use the PLC → Upload Program menu; the .pwx file can be archived for offline review.
8.2 MB+ Connection
With an SA85 (or compatible) MB+ PC adapter, ProWorx 32 can browse every node on the network. The MB+ addressing model is the drop number (1–32), not the Modbus address. The "Primary" and "Secondary" naming used by maintenance teams is a project artifact; the MB+ network sees both as drop 1 and drop 2 (or any two unused drop numbers).
9. Troubleshooting Matrix
| Symptom | Likely Root Cause | Diagnostic Step | Resolution |
|---|---|---|---|
| Rung appears "live" mid-network with all inputs off | Lower timer output (accumulator < preset) energizing downstream logic | Place the timer in a rung by itself; observe power flow | Duplicate enable conditions on the output side or split the logic |
| Output does not update when expected | Coil read in same network before its column is solved | Move coil to a downstream network and retest | Restructure into multiple networks or use a marker coil in a separate network |
| EMTH result reads as zero | EMTH instruction not yet executed in the current scan | Read the result in a downstream network | Restructure; use multiple networks with the comparison after the EMTH |
| One-shot fires twice in one scan | Two one-shot contacts in different columns of the same network | Use status bits or move one one-shot to a different network | Use a single one-shot in a dedicated network |
| Peer Cop data not updating in the peer | Specific link table misconfigured or drop number mismatch | Open Configuration Extensions on both nodes; compare | Correct source/target ranges; verify both nodes have the same MB+ drop number assignment |
| Question mark in Traffic Cop | ProWorx cannot identify the I/O module type | Read the module's catalog number from the field; update ProWorx device database | Install the latest ProWorx 32 device description (.mdf) file |
| Timer reads odd increments (e.g., 0.0, 0.25, 0.5 s on a 0.1 s preset) | Scan time is larger than the timer's resolution | Measure scan time using a free-running 0.01 s timer | Use a coarser preset or migrate to a faster scan platform |
| Segment not executing as expected | Segment scan configuration (sequential vs. repeated) | Check Configuration Extensions for segment scan settings | Adjust the segment scan configuration; verify I/O update points |
10. Migration Notes to Unity Pro / M340 / M580
When porting 984 logic to a modern Schneider Electric target, the following mappings are typical:
- Replace native 984 timers with IEC TON, TOF, or TP function blocks. The IEC TON's Q output replaces the upper timer output; ET < PT must be used in place of the lower output's behavior, gated by the enable input.
- Replace Peer Cop with explicit READ_VAR/WRITE_VAR calls in Unity Pro or with the M580 CIP-Open messaging, depending on the target platform.
- Translate column-based scan order assumptions into explicit network ordering and the use of intermediate variables to avoid same-rung feedback issues.
- Replace EMTH with the standard arithmetic operators and observe that Unity Pro evaluates each network left-to-right, top-to-bottom, in a single pass per network.
11. Quick Reference Card
- 1XXXX = Discrete Inputs
- 0XXXX = Discrete Outputs and Internal Coils (coils begin after the highest traffic-copped output)
- 3XXXX = Register Inputs
- 4XXXX = Register Outputs (Holding Registers)
- Peer Cop = Automatic, no MSTR required; configured in Configuration Extensions
- Lower timer output = TRUE whenever accumulator < preset, regardless of enable
- Timer accuracy = ± max(increment, scan time)
- Scan order = Column by column, then network by network
Why does my 984 rung appear to be energized in the middle even though all the inputs to the left are off?
You are almost certainly looking at the lower timer output (accumulator < preset), which evaluates independently of the timer's enable input in 984 ladder logic. Duplicate the input conditions on the output side of the timer, or split the logic into a separate network, to enforce the correct enable condition.
What is the accuracy of a 984 timer such as a T.01 (0.01 s base)?
Accuracy is the larger of one increment of the time base or the current scan time. A T.01 timer is therefore accurate to ± 0.01 seconds, but the same timer in a slower scan may be effectively coarser. See the Schneider Electric FAQ on 984 timer accuracy.
How is data exchanged between two 984/Quantum PLCs over Modbus Plus?
Through the Peer Cop service, which is configured in ProWorx 32 under Configuration Extensions. Each node publishes and subscribes to specific register and coil ranges identified by the MB+ drop number. Peer Cop runs automatically and does not require MSTR instructions in the ladder logic.
Can I upload a 984 program without the original ProWorx project file?
Yes. Connect to the processor's Modbus port (or via an SA85 MB+ adapter) and use PLC → Upload Program in ProWorx 32. The resulting .pwx file is the authoritative copy of the running program. Always archive the upload before making changes.
What does a question mark in the ProWorx 32 Traffic Cop mean?
It indicates that ProWorx cannot identify the I/O module in that slot, usually because the device description (.mdf) is not installed or the module is a third-party type. It is a metadata/engineering-tool issue, not necessarily a wiring or program issue. Identify the module's catalog number in the field and add the appropriate device description.