Configuring CJ1W-DA08C 8-Channel 4-20mA Analog Output on CJ1 PLC

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

Configuring the CJ1W-DA08C 8-Channel 4-20 mA Analog Output on a CJ1 PLC

The CJ1W-DA08C is a Special I/O analog output unit that adds eight isolated 4-20 mA current loops to a CJ-series PLC rack. Unlike the Basic I/O modules (IN/OUT) that occupy fixed slots in the CIO 100 area, the DA08C is mapped through the CJ1 Special I/O area in CIO 2000 onward, and its location on the rack is set with the front-panel rotary switch. This reference covers wiring, switch setup, memory layout, scaling, CX-Programmer configuration, ladder code, and field verification for a typical rack that also includes a CJ1W-CPU13, CJ1W-PD025 supply, CJ1W-AD041-V1 analog input, two CJ1W-CT021 high-speed counters, and a CJ1W-OD212 digital output.

1. Module Identification and Catalog Reference

The CJ1W-DA08C is the 8-channel current-only variant of the CJ1 analog output family. The 'C' suffix in the catalog number designates current output (4-20 mA only); the parallel voltage/current model is the CJ1W-DA08V. The official datasheet is catalog number CSM1630 in Omron's industrial automation library, and the operation manual is document W345 (latest revision W345-E1-5 or newer, "CS/CJ-series Analog I/O Units Operation Manual"). The manual is available from Omron Europe product page and as a PDF at W345 Operation Manual (PDF). The datasheet is mirrored at CSM1630 datasheet (PDF) and the catalog part is listed on Mouser CJ1W-DA08C product page.

All register addresses, bit assignments, and timing values cited in this article must be confirmed against the revision of W345 shipped with your specific firmware. The CJ1W-DA08C is described in W345 chapter for "Special I/O Units – CJ1W-DA08C/DA08V/DA042V".

2. CJ1W-DA08C Specifications

Parameter Value
Catalog number CJ1W-DA08C
Output channels 8
Output range 4 to 20 mA (current only, no voltage mode)
Resolution 12 bits (4,096 steps per channel)
Digital input code 0x0000 = 4 mA, 0x0FFF = 20 mA (lower 12 bits of each output word)
Conversion time 20 µs per point (scaling supported; direct conversion function not available on the 'C' variant)
Accuracy (25 °C) ±0.5 % of F.S. (verify against W345 for your temperature range)
Maximum load Per W345 datasheet, current loop is sourced; confirm permissible burden Ω before wiring
Isolation Photocoupler isolation between output terminals and PLC signals
Terminal block Removable screw terminal, 8 channels + common
Power consumption Supplied from rack bus (5 V/24 V); consult W345 for exact mA draw
Module category Special I/O Unit (rotary-switch addressed, not slot-addressed)
Allocated words 10 words per unit in CIO 2000 + 10·n

Scaling is supported by the DA08C, meaning that the engineering-unit value written by the CPU program can be converted automatically to a raw 12-bit code by the module. Direct conversion (hardware trigger of an analog output step) is a feature of the CJ1W-DA042V only; on the DA08C, outputs are refreshed on each PLC cycle through the Special I/O refresh.

3. Special I/O Addressing on the CJ1

Unlike digital IN/OUT modules that take a fixed word per slot (CIO 0, CIO 1, CIO 100, ...), CJ1 Special I/O Units are addressed through a dedicated 1,000-word window starting at CIO 2000. Each Special I/O module occupies 10 words, and the slot of the module on the rack does not determine its address — the unit number set by the front-panel rotary switch does. With 100 unit numbers available (0-95 in practice for the CJ1W-DA08C, depending on CPU), the address range for Special I/O is:

Unit number n → CIO 2000 + (10 × n) through CIO 2009 + (10 × n)

Rotary switch (n) First CIO word Last CIO word
0 CIO 2000 CIO 2009
1 CIO 2010 CIO 2019
2 CIO 2020 CIO 2029
3 CIO 2030 CIO 2039
4 CIO 2040 CIO 2049
5 CIO 2050 CIO 2059
... ... ...
n CIO 2000 + 10·n CIO 2009 + 10·n

For a typical rack where CJ1W-AD041-V1 is set to unit 0, the two CJ1W-CT021 to units 1 and 2, and the new CJ1W-DA08C to unit 3, the DA08C's allocation lands at CIO 2030-2039. Other Special I/O modules in the rack must use unique unit numbers; duplicates will throw an I/O setting error at power-up.

Always re-create the I/O table in CX-Programmer after installing a new Special I/O module so the CPU registers the module, its slot, and the rotary switch value. The CPU will not allocate CIO memory for a module that is not registered in the I/O table.

4. Hardware Installation and Rotary Switch Setup

  1. Power down the rack. Although the CJ1W-DA08C supports hot-swap on some configurations, field practice is to de-energize when changing rotary switches to avoid address collisions mid-scan.
  2. Set the front-panel unit number rotary switch to a value that does not conflict with other Special I/O modules already installed. The example rack uses unit number 3 for the DA08C; confirm via the I/O table in CX-Programmer.
  3. DIP switches on the front of the DA08C select whether each output channel operates in normal or "hold last value" mode on CPU error. The exact switch layout is documented in W345; the default is normal (output goes to 4 mA / 0 on error).
  4. Wire each 4-20 mA loop to a screw terminal. The DA08C sources current; the receiving instrument must present a passive current input (most modern indicators, valves, and VFDs do).
  5. Apply power and verify that the unit's RUN LED is steady green and the ERC (error) LED is off before attempting online communication.

5. CJ1W-DA08C Memory Map

For a unit number n (rotary switch), the 10 words allocated to the DA08C are laid out as follows. Always confirm bit and channel numbering against the revision of W345 you have on hand.

Offset Word address Direction Function
n + 0 CIO 2000 + 10·n CPU → module Output value, channel 1 (12-bit code in bits 0-11)
n + 1 CIO 2001 + 10·n CPU → module Output value, channel 2
n + 2 CIO 2002 + 10·n CPU → module Output value, channel 3
n + 3 CIO 2003 + 10·n CPU → module Output value, channel 4
n + 4 CIO 2004 + 10·n CPU → module Output value, channel 5
n + 5 CIO 2005 + 10·n CPU → module Output value, channel 6
n + 6 CIO 2006 + 10·n CPU → module Output value, channel 7
n + 7 CIO 2007 + 10·n CPU → module Output value, channel 8
n + 8 CIO 2008 + 10·n CPU → module Output enable / start / hold settings
n + 9 CIO 2009 + 10·n Reserved / unused

Each of the eight channel words holds a 12-bit code right-justified in the lower 12 bits. Bits 12-15 should be written as 0. The full-scale correspondence is:

  • 0x0000 (decimal 0) → 4 mA
  • 0x0800 (decimal 2048) → 12 mA (mid-scale)
  • 0x0FFF (decimal 4095) → 20 mA

The control word at n + 8 typically contains the output start bit, the hold-on-stop selection, and any range or scaling flags. For the CJ1W-DA08C, the range bits are fixed (current-only) and do not need to be set; consult W345 for the exact bit numbering used by your firmware revision.

6. Output Enable and Hold-on-Stop Behavior

Once the program writes output values into the eight channel words, the analog signal is held at the previous value until the output start bit is asserted. Most ladder programs latch this bit at first scan so that channels come up predictably. The behavior on CPU stop, error, or link failure is selectable:

Mode Behavior on CPU stop / fatal error Typical use
Reset output to 0 (4 mA) All eight loops clamp to 4 mA Valves that must fail closed; safe-by-default loops
Hold last value Output freezes at the last valid code Indicators, recorders, soft-control loops where bumps are undesirable

The mode is selected either through the front-panel DIP switch (for older configurations) or through a bit in the n+8 word, depending on firmware. When the mode is configured by DIP switch, the CPU cannot override it from software; when it is configured in the n+8 word, the program must set the appropriate bit during initialization.

7. Scaling Engineering Units to 4-20 mA

The most common field mistake on the CJ1W-DA08C is treating the output word as a percentage (0-100) instead of a raw 12-bit code (0-4095). The conversion chain is:

mA = 4 + (D/A_value / 4095) × 16

D/A_value = ((mA - 4) / 16) × 4095

To convert engineering units (EU) to a 12-bit code with a unipolar mapping (4 mA at EU_min and 20 mA at EU_max):

D/A_value = INT((EU - EU_min) / (EU_max - EU_min) × 4095)

For a reverse-acting mapping (4 mA at EU_max, 20 mA at EU_min, common on cooling valves):

D/A_value = 4095 - INT((EU - EU_min) / (EU_max - EU_min) × 4095)

Worked example for a 0-100 °C temperature transmitter driving 4-20 mA into a damper positioner:

  • EU_min = 0, EU_max = 100
  • At 25 °C: D/A = INT(25 / 100 × 4095) = INT(1023.75) = 1023 → 7.998 mA
  • At 75 °C: D/A = INT(75 / 100 × 4095) = INT(3071.25) = 3071 → 15.997 mA
  • At 100 °C: D/A = INT(100 / 100 × 4095) = 4095 → 20.000 mA

Sub-millampere rounding error on a 4-20 mA loop is typically below the resolution of the receiving instrument and is acceptable. If higher accuracy is required, perform floating-point scaling with FLT(452) and FIX(450) instructions rather than integer scaling.

8. CX-Programmer Project Setup

  1. Open the existing project that drives the CJ1W-PD025 / CJ1W-CPU13 / CJ1W-AD041-V1 / CJ1W-CT021 / CJ1W-OD212 rack.
  2. Go online and read the current I/O table: PLC → I/O Table → Compare with Program. This shows the slot positions of every installed module.
  3. Insert the CJ1W-DA08C into the slot where it is physically mounted. Right-click the slot, select Add Unit → Special I/O Unit → CJ1W-DA08C. Enter the unit number that matches the rotary switch (3 in this example).
  4. CX-Programmer will reserve CIO 2030-2039 for the new unit. Confirm that no other module is configured for unit 3.
  5. Transfer the I/O table to the CPU and cycle power. The CJ1 will now recognize the DA08C; the ERR/ALM LED on the CPU will clear once the I/O table matches physical reality.
If the CPU displays an I/O setting error after adding the DA08C, the rotary switch on the module and the unit number in CX-Programmer are mismatched, or two modules share the same unit number. Verify with the I/O table verification dialog.

9. Ladder Program Examples for CX-Programmer

The following snippets assume the DA08C is unit 3, so output channel words live at CIO 2030 (channel 1) through CIO 2037 (channel 8) and the control word at CIO 2038. Engineering-unit inputs are read from D100-D107 and intermediate raw codes are written to D200-D207 before being copied to the CIO area each scan.

9.1 Initialization (first-scan, scaled parameters)

 | First Scan Flag (P_On)  |
 | --- |
 | SSET  #10  D0         |  ; Reserve 10 words for scaling parameters
 | MOV   #0     D0       |  ; Source lower (D0  = 0)
 | MOV   #1000  D1       |  ; Source upper (D1  = 1000 = 100.0 °C × 10)
 | MOV   #0     D2       |  ; Destination lower (D2 = 0)
 | MOV   #4095  D3       |  ; Destination upper (D3 = 4095)
 | MOV   #10    D4       |  ; Channel 1 scaling offset (here, no offset)
 | MOV   #40    D5       |  ; Channel 1 hold value (4 mA code = 0)
 | SET   CIO2038.00      |  ; Output start bit (per W345)

9.2 Scaled Output Using SCL2(486)

SCL2(486) is the binary linear scaling instruction. It reads a source word, looks up four consecutive parameter words, and writes the scaled result. The parameter block starts at D0 (4 words: lower source, upper source, lower destination, upper destination).

 ; Channel 1: D100 (0-1000 EU) → D200 (0-4095 raw)
 ; SCL2 S P1 D
   SCL2  D100  D0  D200
 ; Channel 2: D101 → D201
   SCL2  D101  D0  D201
 ; Channel 3: D102 → D202
   SCL2  D102  D0  D202
 ; Channel 4: D103 → D203
   SCL2  D103  D0  D203
 ; Channel 5: D104 → D204
   SCL2  D104  D0  D204
 ; Channel 6: D105 → D205
   SCL2  D105  D0  D205
 ; Channel 7: D106 → D206
   SCL2  D106  D0  D206
 ; Channel 8: D107 → D207
   SCL2  D107  D0  D207

9.3 Copying Raw Codes to the Special I/O Area

SCL2 writes to D200-D207 (DM area). Copy them to the CIO area each scan so the Special I/O refresh transmits them to the DA08C:

  ; Transfer scaling results to channel words
    MOV   D200  CIO2030    ; Channel 1
    MOV   D201  CIO2031    ; Channel 2
    MOV   D202  CIO2032    ; Channel 3
    MOV   D203  CIO2033    ; Channel 4
    MOV   D204  CIO2034    ; Channel 5
    MOV   D205  CIO2035    ; Channel 6
    MOV   D206  CIO2036    ; Channel 7
    MOV   D207  CIO2037    ; Channel 8

9.4 Reverse-Acting Channel (Cooling Valve)

For a valve that must close as temperature rises (20 mA = fully closed, 4 mA = fully open), subtract the scaled value from 4095:

    SCL2  D100  D0    D200      ; Forward scale (0-1000 EU → 0-4095)
    CML   D200          ; Take one's complement
    INC   D200          ; Two's complement (= 4095 - value)
    MOV   D200  CIO2030 ; Write inverted to channel 1

9.5 Output Enable Latch

Most programs keep the start bit latched once set. The example below clears the start bit if a fatal condition occurs (A500.15 is the CJ1 fatal-fail flag):

  | P_On        |--- RSET  CIO2038.00          ; Output start
  | A500.15     |--- RSET  CIO2038.00          ; Fatal fail clears outputs
  | Always      |--- SET   CIO2038.00          ; Latch start bit

10. HMI Address Mapping

The existing HMI is already monitoring the CJ1W-AD041-V1 analog inputs. The HMI typically polls DM or CIO addresses; to expose the DA08C outputs and the EU inputs, add the following tags to the HMI database:

HMI tag name PLC address Data type Purpose
DA08C_CH1_Raw CIO 2030 UINT (0-4095) Raw 12-bit code sent to channel 1
DA08C_CH2_Raw CIO 2031 UINT Channel 2 raw code
DA08C_CH3_Raw CIO 2032 UINT Channel 3 raw code
DA08C_CH4_Raw CIO 2033 UINT Channel 4 raw code
DA08C_CH5_Raw CIO 2034 UINT Channel 5 raw code
DA08C_CH6_Raw CIO 2035 UINT Channel 6 raw code
DA08C_CH7_Raw CIO 2036 UINT Channel 7 raw code
DA08C_CH8_Raw CIO 2037 UINT Channel 8 raw code
DA08C_Ctrl CIO 2038 UINT (bit field) Output enable / hold bits
DA08C_CH1_EU D100 INT (0-1000) Engineering-unit value written by HMI
... D101-D107 INT EU values for channels 2-8

The HMI can also display the calculated loop current using mA = 4 + (Raw / 4095) × 16 on its internal numeric tag, removing the burden of mental conversion from operators.

11. Commissioning and Verification

  1. Power up. Confirm the DA08C's RUN LED is steady and the CPU's I/O setting error LED is off.
  2. In CX-Programmer, force CIO 2030 = 0. Measure channel 1 with a calibrated mA meter — expect 4.00 mA ±0.02 mA.
  3. Force CIO 2030 = 4095 (0x0FFF). Expect 20.00 mA ±0.02 mA. Repeat for all eight channels.
  4. Force CIO 2030 = 2048. Expect 12.00 mA ±0.02 mA. This is the linearity midpoint check.
  5. Verify HMI display: enter EU value 500 on the HMI, observe Raw = 2047 and meter reads 11.998 mA.
  6. Toggle the start bit in CIO 2038.00 off and confirm outputs clamp to 4 mA (reset mode) or hold (hold mode), depending on DIP switch position.
  7. Cycle power and confirm outputs return to a defined state without bouncing into uncontrolled intermediate codes.

12. Troubleshooting Matrix

Symptom Likely cause Diagnostic Fix
CPU shows I/O setting error after installing DA08C Rotary switch disagrees with I/O table, or duplicate unit number Compare physical switch to CX-Programmer I/O table Set switch to match table or update table to match switch; ensure unique unit numbers
Output stuck at 4 mA regardless of program value Output start bit (CIO 2038.00) not set, or module in reset mode Monitor CIO 2038 in CX-Programmer online Latch the start bit at first scan; verify DIP switch for hold/reset
Output stuck at 20 mA Channel word overflowed beyond 0x0FFF; bit 15 written as 1 Check raw value and ensure upper 4 bits = 0 Mask the channel word with 0x0FFF before writing
Output reads ~6-7 mA when EU is 0 Scaling parameter block wrong (lower EU ≠ 0 or destination lower ≠ 0) Watch D0-D3 in online monitor Confirm D0 = 0, D3 = 4095; re-initialize on first scan
Output reads inverted vs. expected Reverse-acting channel not inverted in code, or wrong scaling parameter Trace D200 → CIO 2030 in online mode Apply two's-complement (CML + INC) for cooling-style outputs
Channel value is correct in CIO but field device shows wrong current Wiring swapped; burden resistor too high; field device in voltage mode Measure current at the DA08C terminal with meter Correct wiring; verify field device is set to current (4-20 mA) input, not 0-10 V
Outputs jitter or noise PLC scan slower than expected; update rate < 20 µs/point Check cycle time in CX-Programmer Reduce program size or move scaling to SCL2 rather than floating point
HMI shows wrong raw value HMI polling DM area instead of CIO; address mismatch Use CX-Programmer cross-reference Update HMI tag to point at CIO 2030-2037 directly

References to Official Documentation

The following Omron documents are the authoritative sources for the values, addresses, and procedures in this article:

Frequently Asked Questions

What is the difference between CJ1W-DA08C and CJ1W-DA08V?

The CJ1W-DA08C is current-only with a fixed 4-20 mA output range (no range code required). The CJ1W-DA08V supports both voltage (±10 V, 0-10 V, 0-5 V, 1-5 V) and current (4-20 mA) outputs, requiring range codes in the n+8 control word per channel.

How many words does the CJ1W-DA08C occupy in the CJ1 memory map?

Each CJ1W-DA08C occupies 10 words starting at CIO 2000 + (10 × unit number). Words n through n+7 hold the eight channel output codes; word n+8 holds output enable / hold settings; word n+9 is reserved.

What raw code produces 12 mA on a CJ1W-DA08C channel?

The relationship is mA = 4 + (Raw / 4095) × 16. At 12 mA the code is decimal 2048 (0x0800), which is exactly the 12-bit mid-scale value.

Can the CJ1W-DA08C be addressed by slot like a digital IN/OUT module?

No. The DA08C is a Special I/O Unit. Its address depends on the unit number set by the front-panel rotary switch (0-95), not on its physical slot. The slot still determines the I/O table entry, but the data words land in CIO 2000 onward.

Do I need to set range codes for the CJ1W-DA08C?

No. The DA08C is hard-wired to 4-20 mA output; range selection bits are reserved/ignored. If you need voltage outputs, use the CJ1W-DA08V instead.

What happens to the analog outputs when the CJ1 CPU is stopped?

Behavior depends on the hold/reset mode selected via the module's DIP switch (or a configuration bit in n+8). In reset mode, all outputs clamp to 4 mA; in hold mode, outputs freeze at the last valid code.

Is the CJ1W-DA08C compatible with CJ1M-CPU13?

Yes. The DA08C mounts on any CJ-series CPU that supports Special I/O Units, including CJ1G-CPU13 and CJ1M-CPU13. Confirm the CPU's maximum Special I/O unit count if you are saturating the rack with many Special I/O modules.

Back to blog