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.
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.
4. Hardware Installation and Rotary Switch Setup
- 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.
- 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.
- 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).
- 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).
- 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
- Open the existing project that drives the CJ1W-PD025 / CJ1W-CPU13 / CJ1W-AD041-V1 / CJ1W-CT021 / CJ1W-OD212 rack.
- 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.
- 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).
- CX-Programmer will reserve CIO 2030-2039 for the new unit. Confirm that no other module is configured for unit 3.
- 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.
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
- Power up. Confirm the DA08C's RUN LED is steady and the CPU's I/O setting error LED is off.
- In CX-Programmer, force CIO 2030 = 0. Measure channel 1 with a calibrated mA meter — expect 4.00 mA ±0.02 mA.
- Force CIO 2030 = 4095 (0x0FFF). Expect 20.00 mA ±0.02 mA. Repeat for all eight channels.
- Force CIO 2030 = 2048. Expect 12.00 mA ±0.02 mA. This is the linearity midpoint check.
- Verify HMI display: enter EU value 500 on the HMI, observe Raw = 2047 and meter reads 11.998 mA.
- 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.
- 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:
- W345 — CS/CJ-series Analog I/O Units Operation Manual (primary reference for the CJ1W-DA08C)
- CJ1W-AD/DA/MAD Datasheet (CSM1630) (catalog specifications)
- Omron Europe CJ1W-DA08C product page
- Mouser CJ1W-DA08C catalog entry
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.