CS1G Work Bits and Timer TT Flag: AB to Omron Migration

James Nishida16 min read
CJ/CP SeriesOmronTutorial / How-to
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

Overview

Engineers migrating ladder logic from Allen-Bradley (AB) SLC 500 and PLC-5 platforms to the Omron CS1G face two recurring hurdles: finding an equivalent to the AB B3 internal binary bit file, and replicating the AB I:T4/TT "timer timing" flag on an instruction that, by default, only exposes a DN "done" flag. This reference documents the correct memory areas for the CS1G CPU, the difference between TIM (BCD) and TIMX (binary) instructions, how to derive a TT-style timing bit from the standard instruction set, and when a custom function block timer becomes viable. Verification steps are provided for Omron CS1G/CS1H Overview hardware equipped with CX-Programmer 6.0.

All procedure steps assume a CS1G-CPU4x CPU with firmware that supports the required instruction set. CPUs older than unit version 3.0 do not support user-defined function blocks; see the version-specific section below before choosing the FB-based timer approach.

CS1G Hardware and Memory Architecture

The CS1G is a single-rack modular PLC in the CS-series family. The platform shares its instruction set and I/O bus with the higher-density CS1H and with the later CJ1/CJ2 families, which means memory areas described here also apply to most CJ1M and CJ2M replacements that have superseded the CS1G in current Omron catalogs (see the From CS1G/H to CJ2 Replacement Guide).

Table 1 — CS1G memory area overview used for work bits and timer operands
Area Range (words) Bit access Retentive on power loss Typical use
CIO 0 to 6143 CIO n.00 .. CIO n.15 (or n.0 .. n.15) No I/O, internal use, optical / network racks, unused slots
W (Work) W0 to W511 W0.00 .. W511.15 No Scratch bits, internal relays
H (Hold) H0 to H511 H0.00 .. H511.15 Yes Retentive internal relays
D (Data) D0 to D32767 Word, double-word, long-word Yes Numeric data, timers, counters preset/current
E (Extended) E0_0 to E32767_15 (depends on CPU) Only on CPU units that expose the EM bank Yes Large data tables on CS1G-H and CS1H only
A A0 to A959 A0.00 .. A959.15 Partly (read-only for status) System flags, condition flags, alarm history

The CS1G CPU42 (one of the devices most commonly in service today) implements the full W, H, and D areas, with reserved CIO ranges reserved for optional I/O racks. The CS1G does not expose any EM bank; only CS1G-H and CS1H variants ship with E-area memory. When CX-Programmer 6.0 promotes the E0 area in the symbol table for an EM-configured project, confirm the target CPU is a CPU6x or higher before relying on those addresses.

Mapping Allen-Bradley B3 to Omron Work Bits

In RSLogix 500, the B3 binary file is a 16-bit word file whose individual bits are used as internal coils that never drive physical outputs. There is no hardware behind B3; it is purely a scratch space for rung logic. In Omron CS1G, the closest equivalents are:

Table 2 — AB B3 to CS1G area selection
AB concept RSLogix 500 example CS1G equivalent Notes
B3 file (16-bit binary) B3:0/0 .. B3:255/15 W0.00 .. W511.15 for non-retentive;
H0.00 .. H511.15 for retentive
Symbolic addressing preferred; enable "Automatic Allocation" under the PLC menu.
Integer file (N7) N7:0 D0 .. D32767 All D-words are retentive by default.
Output file (O0) for unused slot O:0/0 CIO words beyond the last populated slot Do not collide with rack or optical slave addresses.

Recommended work-bit allocation strategy

For new CS1G projects under CX-Programmer 6.0, use the PLC menu Automatic Allocation option and let the tool bind symbol names to a continuous block of W-memory. A reasonable baseline is:

  1. Open the project properties dialog and confirm the target CPU is set to CS1G-CPU42 (or CS1G-CPU43/44, if installed).
  2. From the PLC menu, select Automatic Allocation.
  3. Specify a starting W-word of, for example, W100 and a length of 200 words (W100.00 through W211.15).
  4. Bind every internal coil variable to the automatically generated address.
  5. Reserve W0 through W99 for explicit hand-assignment (system-style flags) and W500 through W511 for utilities (one-shot, edge-detect, fault latches).
Holding bits (H) and work bits (W) are functionally identical; the only behavioral difference is that H is retained across power-down. Treat H as you would an AB B3 bit that has been programmed with "retentive assignment" in RSLogix 500.

Using unused CIO addresses for work bits

If I/O cards occupy slots 0, 1, and 2 only, every word from CIO 3 upward is unused as a physical I/O image and can be reused as internal scratch. For a CS1G with three populated slots:

  • First unused word: CIO 3 .. CIO n, where n = last_word_of_last_slot + 1.
  • Beyond CIO 50, addresses are typically reserved for high-density I/O units and for the optional rack (200-word area for an Expansion Rack).
  • For network slaves on Controller Link or EtherNet/IP, addresses in the range CIO 1500 + are allocated by the routing table; verify routing on the I/O Table tab.

Using CIO work bits is correct and is supported in CX-Programmer 6.0. The risk is collision: always confirm the I/O Table window shows no entry between the slot boundary and the word you intend to borrow.

Omron Timer Instructions: TIM, TIMX, TIMH, TIMHX

The CS1G timer family offers four BCD-based (TIM, CNT, TIMH, TTIM) and four binary (TIMX, CNTX, TIMHX, TTIMX) instructions. The difference is data representation:

Table 3 — Timer instruction selection
Instruction Number format Counting direction Tick PV operand Available on CS1G-CPU42?
TIM BCD (4-digit) Down 0.1 s #0000 to #9999 (use the # prefix in CX-Programmer) Yes
TIMH BCD Down 0.01 s #0000 to #9999 Yes
TTIM BCD Accumulative 0.1 s #0000 to #9999 Yes
TIMX Binary Down 0.1 s &0 to &65535 (use the & prefix) Yes (CPU unit version ≥ 2.0)
TIMHX Binary Down 0.01 s &0 to &65535 Yes
TTIMX Binary Accumulative 0.1 s &0 to &65535 Yes

The TIM family is supported on every CS1G unit version. The TIMX family was added later and is supported on CS1G-CPU42 with unit version 2.0 or higher. To check the unit version in CX-Programmer 6.0, open the PLC properties dialog and read the Unit Version line; it is reported in the online connection dialog as well.

Why Omron timers do not expose a TT bit

In AB, a T4:1 timer block has three flags exposed in the data table:

  • TT — "Timer Timing" bit. Energized while the enable input is true and PV has not reached 0.
  • DN — "Done" bit. Energized when PV reaches 0.
  • EN — "Enable" bit. Energized while the timer instruction is enabled.

On the CS1G, the instruction does not allocate three flags. Instead, the timer number is the Done bit. The ladder mnemonic TIM 0001 #0100 creates a timer with PV preset 100 (10.0 s in TIM; 100 × 0.1 s) and the boolean coil T0001:

  • T0001 becomes "1" when PV reaches 0 (analogous to DN).
  • T0001 returns to "0" when the input condition changes from ON to OFF and the timer is reset.

There is no built-in TT-bit exposed by the instruction; the timer is implemented as a single-word current value (PV decremented each scan) and a single Done flag equal to the timer address.

Building a TT-Style Timing Bit from Stock Instructions

Because the CS1G timer lacks a native TT flag, derive one in ladder logic with two contacts and one coil:


|  --[ Enable contact ]--+--[ NOT T0001 ]--( T0010:1_TT )--|
|                        |                                    |

In words: energize an internal relay (call it TT_Flag_001 on W200.00) whenever the timer's enable input is true and the timer's Done bit (T0001) is false. This pattern repeats the exact AB semantics:

  • When Enable is OFF: TT_Flag clears, timer resets.
  • When Enable is ON and PV has not reached 0: TT_Flag is ON.
  • When Enable is ON and PV equals 0 (Done): TT_Flag is OFF (gated by the NOT T0001).

Ladder snippet for a 5-second on-delay with TT output


|        Enable             T0001                W100.00        
|----[ / ]------------------[ ]--+---------------( )---<TT output>
|                               |
|        Enable                 |
|----[ ]--+--[ NOT T0001 ]--( W100.00: TT_latch )--|
          |                                       |
          +--<TIM 0001 #0050>--------+            
                                  ( T0001: Done )

Reading rung 1: TT_latch = Enable AND NOT Done, which is precisely the AB T4:1/TT expression. The symbol name W100.00 is not a CS1G-only artifact — it is a work bit. Most programmers bind it to a symbolic tag such as TT_T001 for readability.

Function-Block Timer for CS1G-CPU42 and Newer

If the project uses a CS1G-CPU42 with unit version 3.0 or higher, user-defined function blocks are supported. A function-block timer can encapsulate the Enable / Done / Timing / Elapsed / Remaining interface in a single named block, bringing the CS1G closer to AB's data-table exposure.

Function-block header (CX-Programmer 6.0)

Table 4 — TT-style timer FB I/O
Variable name Direction Data type Initial value Description
Enable Input BOOL FALSE Timer run input
Preset Input INT 0 Preset value in tenths of a second
TT Output BOOL FALSE Timer Timing flag (Enable AND NOT DN)
DN Output BOOL FALSE Done flag
Elapsed Output INT 0 Elapsed time in tenths of a second
Remaining Output INT 0 Preset minus elapsed

Function-block body (ladder inside the FB)

  1. Inside the FB, place TIMX 0001 &0 (or TIM 0001 #0 for BCD).
  2. Set the timer's PV to the Preset input via a BSET or MOV instruction: MOV(021) Preset D100, where D100 is the timer PV word.
  3. Implement TT as TT := Enable AND NOT TIMER_DONE. In ladder this is one N.C. contact on the timer-done flag in series with the Enable input.
  4. Implement Elapsed as Preset - Remaining_PV_Counter, where the counter value is read from the timer's PV word (D100 in step 2).

Drop the FB into any rung where an AB TON or TOF would have been used. The visible interface matches the AB timer data table, so the rest of the program remains readable to engineers trained on RSLogix 500.

On CS1G units older than unit version 3.0, function blocks are not compiled. Download attempts return a build error of the form "INST_NOT_SUPP" or "FB Header Invalid." In that case, use the dual-contact TT pattern from the previous section.

CS1G-CPU42 Specific Configuration

The CS1G-CPU42 is among the most-deployed CS1G units. Confirm the following before programming the timer section:

Table 5 — CS1G-CPU42 minimum specifications
Parameter CS1G-CPU42 spec Programming implication
Program capacity 10 K steps Sufficient for a TT-paired ladder project; watch step count for FBs.
DM area capacity 32 K words (D0 to D32767) Plenty of room for timer PV words.
I/O capacity Up to 960 I/O points with expansion CIO work-bit free space begins after the last populated slot.
Function block support Required unit version ≥ 3.0 Verify version before using FB timer; otherwise use ladder TT.
Cycle time 0.04 ms typical per K-steps (ladder only) 0.1-second TIM has 10-cycle jitter before visible drift.
Instruction set Full CS1 instruction set including TIMX (unit version ≥ 2.0) Binary timers safe to deploy.

If the project targets a CPU42-H or later (CPU43, CPU44, CPU45), the W, H, and D areas all expand and the EM bank becomes available. The replacement path from CS1G to CJ2 retains the same memory map, allowing cut-and-paste of symbol tables across hardware migrations (per the From CS1G/H to CJ2 Replacement Guide).

CX-Programmer 6.0 Configuration

CX-Programmer 6.0 is the current-generation IDE for the CS1G. Use the configuration sequence below to align the IDE with the binary timer and FB work required.

  1. Set the device type: In the Change PLC dialog, select CS1G, then CPU model CPU42. The device-type selection changes the online Transfer Setup dialog options.
  2. Confirm online connection type: Serial (RS-232C to peripheral port) or USB-serial converter. Configure baud to 9 600 or 115 200 (default in CX-Programmer 6.0 for new projects).
  3. Allocate symbol table area: From PLC > Automatic Allocation, ensure the entire W area is selected for automatic assignment. Re-run after major edits to keep contiguous allocation.
  4. Enable Binary Mode for timers (optional): From PLC > Binary Operation, ensure the project is set to binary. This is what makes TIMX use the & prefix correctly without errors at compile.
  5. Insert function blocks: If unit version ≥ 3.0, from Insert > Function Block > New FB. The header editor accepts BOOL, INT, DINT, and REAL data types directly.
  6. Compile and download: Use PLC > Transfer > To PLC. On first download, the IDE prompts to overwrite the symbol table; respond Yes if the source of symbols is the local PC.
  7. Online monitoring: Switch to Monitor Mode; the TT bit assigned to W100.00 will animate when Enable is high and PV has not yet reached 0.

For online connection via Ethernet (CJ1W-ETN21 or CS1W-ETN01), see the CS1G, CS1H Overview/Manual for IP routing and FINS node setup. The Omron CS1G does not have a built-in Ethernet port; an Ethernet unit is required.

Verification

After the rung is online, run the four verification checks before sign-off:

  1. Static work-bit verification — Force W100.00 ON and OFF in Force Set / Reset dialog. Confirm that no real output (CIO 100.00+, CIO 200.00+) changes state. If an output toggles, the allocation has collided with hardware I/O; re-run Automatic Allocation and select a fresh W range.
  2. TT rising edge — Energize the Enable input and place the cursor on W100.00; the address should turn ON within one scan of Enable becoming true. Decrement watch Elapsed value to confirm the timer is counting.
  3. TT falling edge — Allow the timer to expire. Watch T0001 turn ON and W100.00 turn OFF in the same scan (within ±2 scans is acceptable; if visible delay grows beyond two scans, check for retentive reset on TIMER_DONE contact).
  4. Reset behavior — Drop the Enable input. Both T0001 and W100.00 should clear. The TIM family automatically resets its current value to preset when Enable goes low.
  5. Power-cycle retentive test — If the timer uses H-area work bits instead of W, cycle PLC power and confirm the TT pattern continues to evaluate correctly without leaving a stale ON in W100.00.
CX-Programmer 6.0 will not validate ladder at compile time for "Enable AND NOT Done" patterns. The semantic check relies on the engineer reading the rung. Use the comment field to annotate // TT flag for T0001 so future maintainers recognize the intent.

Troubleshooting Matrix

Table 6 — Common CS1G TT / Work-bit migration defects
Symptom Likely root cause Fix
Output slot toggles when only internal bit should change W bit alias crossed into CIO range actually backed by I/O Shift W allocation start to W100 or higher; verify with PLC > I/O Table.
TT bit never clears even when Done is ON Implementer used W100.00 := Enable OR Done instead of Enable AND NOT Done Replace OR with AND-NOT in the rung; recompile.
FB timer fails to download CPU unit version < 3.0 Replace FB with the dual-contact TT ladder pattern.
TIM reports operand error at compile Preset written without the # BCD prefix Use #0050 not 50 for BCD TIM.
TIMX reports operand error Preset written without the & binary prefix Use &100; verify project is set to Binary Mode under PLC > Binary Operation.
Work bit retains value across power cycle unexpectedly H-area used by default rather than W Switch the symbol binding from H0.00 to W0.00 if non-retention is desired.
Online edit causes dual-write to CIO area Two engineers edited the same slot word Re-run Automatic Allocation; reset local edit buffer.
Symbolic name shows raw address only Symbol table not synchronized after project transfer Tools > Transfer > Symbol Table to PLC

Migrating Existing AB TIM Logic

When porting a full AB routine, the side-by-side mapping below lets you translate rung logic directly without rewriting the structure.

Table 7 — AB timer file construct to CS1G construct
RSLogix 500 source CX-Programmer 6.0 destination Notes
T4:1 timer file Single timer with allocated number (e.g., T0001) + work bit W100.00 for TT Match timer number sequence 1:1 where possible.
T4:1/EN Enable input contact, same as the rung condition EN in AB == Enable input condition in Omron.
T4:1/TT W100.00 work bit (TT_latch) Apply "Enable AND NOT Done" derivation.
T4:1/DN T0001 timer address (Done flag) Direct substitution; same boolean polarity.
T4:1.ACC PV register (D-word, address depends on timer) For TIMX the PV lives in D, not T.
T4:1.PRE Constant operand on the TIM/TIMX instruction Use # for BCD, & for binary.

The transition is mechanical once the two patterns above are in place. Many engineers create a small migration spreadsheet: column A is the AB tag, column B is the W-bit TT-latch destination, column C is the boolean Done flag. Once populated, an offline transfer-and-rename pass in CX-Programmer completes the bulk of the work.

Working with the CJ Replacement Path

For shop floors standardizing on the CJ2, the same memory map applies (see From CS1G/H to CJ2 Replacement Guide). The replacement guide covers migration of:

  • CIO area boundaries (CJ2 has more reserved words for built-in I/O and serial port on the CPU itself).
  • DM area boundaries (CJ2 retains D0 .. D32767 and adds E0_0 .. E_ as needed).
  • Cycle time impact (CJ2 is faster, so a 100 ms TIM may complete in fewer scans on the new CPU — verify any application logic that depended on minimum cycle counts).
  • Function block portability: CS1G FBs port directly to CJ1 and CJ2 because the instruction set is shared.

When commissioning a CS1G project on a CJ2 spare, transfer the project to CX-Programmer 9.x or later, change the target device to CJ2M-CPU3x, recompile, and download. The TT pattern in ladder is preserved unchanged across the migration, and FB-based timers continue to work without code edits.

Field-Proven Tips

  1. Always reserve W500 through W511 for fault latches and one-shot utilities so the rest of the W range can be safely re-allocated by Automatic Allocation after major edits.
  2. Use a separate function-block instance per "logical" timer — never reuse a single FB instance to time two unrelated processes. AB engineers often instantiate one T4 file per process; the same practice makes ladder reviews faster.
  3. When documenting TT-flag rungs, include the comment // AB-equivalent: I:Tn/TT next to the contact so future maintainers can map the Omron back to an AB reference. This is especially valuable on shop floors where both AB and Omron controllers coexist.
  4. If the panel uses CS1G plus a non-Omron HMIs (e.g., Pro-face), see the third-party Host Link driver CS/CJ Series HOST Link Driver for FINS protocol details.
  5. Keep a printed copy of the W-area allocation on the inside of the cabinet door. Updates from Automatic Allocation in CX-Programmer 6.0 silently shift addresses; the printed map is the only ground truth the maintenance technician has at the panel.

FAQ

What is the closest Omron CS1G equivalent of an Allen-Bradley B3 bit?

Use a work bit (W0.00 .. W511.15) for non-retentive equivalents or a hold bit (H0.00 .. H511.15) for retentive behavior. Unused CIO addresses past the last populated I/O slot also work, but reserved ranges for Expansion Racks and network slaves must be avoided. Enable Automatic Allocation under the PLC menu for symbolic binding.

How do I build an Allen-Bradley I:T4/TT timing flag on a CS1G timer?

Derive it in ladder: energize a work bit (e.g., W100.00) only when the timer's Enable input is ON and the timer's Done flag (the timer address itself) is OFF. The expression is W100.00 := Enable AND NOT Txxxx. This is functionally identical to the AB TT bit.

Does the CS1G-CPU42 support function-block timers?

Yes, but only with unit version 3.0 or higher. Verify the unit version in CX-Programmer 6.0 (PLC properties dialog). If the firmware is older, use the dual-contact TT ladder pattern instead — function blocks will not compile or download on unit versions below 3.0.

Should I use TIM (BCD) or TIMX (binary) on a CS1G?

Use TIMX when the preset value may need to exceed 9 999 (BCD max) or when you want direct arithmetic with INT tags; the preset syntax is &NNNN. Use TIM (BCD) only for legacy programs already populated with #NNNN constants or for older unit versions that lack TIMX support.

Why does my Omron timer address itself serve as the Done flag?

The CS1G TIM family encodes the Done flag in the timer number itself. T0001 is "ON" when its current value reaches 0 and resets to OFF when the Enable input goes low. To reconstruct AB's separate TT bit, use the ladder derivation Enable AND NOT Done as documented above.

Back to blog