Configuring Omron C60H RS232 ASCII Mode: Resolving FAL 9E

James Nishida17 min read
OmronSerial CommunicationTroubleshooting
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

1. Problem Overview

Engineers commissioning an Omron SYSMAC C60H for RS232C ASCII data output routinely hit a System FAL 9E error the moment they write the value 0200H to DM0920 in an attempt to enable ASCII mode. The CPU continues to scan, but the FAL flag is latched, the FAL indicator is lit, and any subsequent transmission attempt using the POUT instruction is suppressed. The error is not a programming bug; it is a deliberate protection mechanism that flags a divergence between the runtime PC Setup copy in DM1900-DM1929 and the non-volatile parameter backup that the C60H firmware validates on every cycle.

This reference describes the memory architecture behind that validation, the exact condition that triggers FAL 9E, and the one-time parameter transfer procedure that resolves it without firmware updates, hardware replacement, or return-to-factory. The procedure is the same factory-supported mechanism Omron documents for committing PC Setup changes on the C-series platform, and it is required any time a value in DM0900-DM0929 is changed outside the programming software.

2. C60H Serial Communication Architecture

The C60H is a 60-point C-series CPU equipped with a single built-in RS232C port on the front face. The port is multiplexed between three operational personalities selected by the PC Setup:

  • Peripheral Bus – used by the Omron hand-held programmer and by CX-Programmer over a CQM1-CIF02-type cable. This is the default after a memory clear.
  • Host Link (C-mode) – proprietary master/slave protocol using frame-wrapped ASCII commands (RR, RD, WR, WD, etc.). The PLC is a slave; the PC is the master. POUT in Host Link mode is used by the PLC to push unsolicited responses to the master.
  • ASCII (RS-232C, no protocol) – raw 7- or 8-bit characters on the TXD line with no framing, no checksums, and no slave address. The PLC can transmit ASCII strings directly to a terminal or any DTE.

The host link/ASCII selection, baud rate, data length, parity, stop bits, transmission delay, and CTS control are all encoded into a small block of words in the PC Setup area. Once the port is locked into Host Link, the same POUT instruction that works in Host Link mode will produce no bytes on the line if the port is in ASCII mode, and vice versa. The error symptom is therefore a function of the mode mismatch as well as the FAL 9E latch.

3. PC Setup Memory Map: DM0900-DM0929

The C60H stores its RS232C configuration in the PC Setup block DM0900-DM0929. The same word range is used by C20H, C28H, C40H, and C60H CPUs and is the only block in the user DM area whose values are interpreted by the firmware as port configuration rather than application data. Programming software reads from and writes to this block to display or change the port setup dialog.

The relevant words for the built-in RS232C port on the C60H include:

Word Function Typical Range
DM0900 Port 1 frame format (start/data/stop/parity) 00H-FH
DM0901 Port 1 baud rate selector 00H-0AH
DM0902 Port 1 transmission delay 0-9999 (×10 ms)
DM0903 Port 1 CTS control 0000H-0001H
DM0920 Port mode / Host Link versus ASCII 0000H (Host Link) / 0200H (ASCII)

Writing 0200H to DM0920 is the documented way to switch the port from Host Link to raw ASCII. The high byte selects the operational mode, and the low byte is reserved. CX-Programmer's Port Setup dialog performs the same write under the hood, but it also commits the change to the backup area as part of the transfer. Manually editing DM0920 from the ladder, online edit, or programming console commits only the working copy.

4. Runtime Copy and Backup: DM1900-DM1929

The runtime configuration that the C60H firmware actually consumes each scan is the mirror block DM1900-DM1929. On a clean power-up the firmware loads the contents of the non-volatile parameter backup into both DM0900-DM0929 and DM1900-DM1929 so that the two blocks are identical. From that point on, all PC Setup reads (used internally by the serial driver) come from DM1900-DM1929, while DM0900-DM0929 is the staging area that programming software and user ladder code can write to.

When the values in DM0900-DM0929 are written through CX-Programmer's transfer function, the programming tool performs three actions in sequence:

  1. Updates the working copy at DM0900-DM0929.
  2. Mirrors the working copy into the runtime block at DM1900-DM1929.
  3. Commits the block to the internal flash parameter backup area.

The third step is the part that ladder code, online edits, and a CX-Programmer Online Edit do not perform. The C-series firmware was designed under the assumption that the only legitimate path for changing PC Setup is the offline transfer, so it does not provide a public instruction for step 3. Instead, it provides a runtime consistency check: on every scan, the firmware compares DM1900-DM1929 against the backup. A mismatch is treated as a parameter integrity failure and raised as FAL 9E.

5. FAL 9E: Parameter Area Mismatch Explained

FAL is the user-defined alarm instruction family in the C-series, but it is also reused by the firmware for a small set of system-level conditions. The error code 9E (158 decimal) is reserved for the case in which the runtime PC Setup block DM1900-DM1929 does not match the non-volatile backup. The flag is latched in AR100 and surfaces in the error log the next time the PLC is interrogated by a programming tool.

Error Code Meaning Trigger
FAL 9E 9E hex / 158 dec Parameter area does not match the backup area DM1900-DM1929 differs from the in-flash parameter backup
FAL 9B 9B hex Cycle time over (WDT) Scan exceeds the maximum cycle time
FAL 9C 9C hex I/O bus error Expansion rack error
FAL A1 A1 hex Too many I/O points Registered I/O exceeds CPU maximum

Once FAL 9E is raised, two symptoms are visible. First, the FAL LED on the CPU front face is lit. Second, the serial driver, when it next tries to read its configuration from DM1900-DM1929, will see a value that is no longer consistent with the backup, and depending on the firmware revision, the port may revert to a safe default (Peripheral Bus) and refuse to transmit. The POUT instruction in the user program will run, but no bytes leave the port.

6. Root Cause Analysis

The fault condition has a single root cause: the runtime PC Setup block was modified without a corresponding commit to the non-volatile parameter backup. The C60H firmware is the only system component capable of writing that backup, and it does not provide a ladder-accessible instruction for that write. The user's program:

LD   253.13        ; Always ON
AND  255.02        ; 1-second clock pulse
@POUT DM0020 #0001 #0001

executes correctly. 253.13 is the always-ON flag and 255.02 is the 1-second clock in the C-series SR area. @POUT is the differentiated (one-shot) Host Link output instruction, which sends one word from DM0020 per cycle edge. The POUT rung is not at fault. The fault is upstream: when the user set DM0920 = 0200H to enable ASCII mode, the C60H had no path to commit that change to the backup, so the firmware flagged the divergence on the very next scan.

Critical: Any change to DM0900-DM0929 outside the CX-Programmer transfer utility will produce the same FAL 9E symptom. This includes online edits, ladder moves using MOV/BSET into the PC Setup range, and writes performed by a host application using Host Link WD commands targeting the PC Setup area.

7. The Parameter Transfer Procedure

Omron's documented workaround is a one-time ladder routine that performs steps 1 and 2 of the CX-Programmer transfer. The routine is executed once with the desired values already resident in DM0900-DM0929, after which the values are mirrored into DM1900-DM1929. On the next power cycle the firmware reloads from the non-volatile backup, finds the mirrored values, and stops raising FAL 9E.

START Set DM0900-DM0929to desired values Run XFER: DM0900 -> DM1900Block of 30 words Cycle power on the C60HVerify FAL 9E is cleared DONE

The transfer is non-destructive; it does not affect any other DM word and it can be re-executed safely if a future change to the PC Setup is required. After successful transfer, the routine can be removed from the user program. The mirror at DM1900-DM1929 persists across power cycles, so the values are committed to the non-volatile backup automatically on the next power-down.

8. Step-by-Step Resolution

  1. Connect the C60H to CX-Programmer in PROGRAM mode using the standard C-series programming cable (C200H-CN222 or CQM1-CIF02 with DB9 adapter).
  2. Open the DM area view and set DM0900-DM0929 to the desired port configuration. For ASCII mode, set DM0920 = 0200H. For typical 9600-8-N-1, set DM0900 = 0003H and DM0901 = 0005H. Confirm all other words in the block are intentional.
  3. Write the one-time transfer rung (see Section 9) into the user program. The rung must be unconditional and have the differentiated suffix to fire exactly once.
  4. Place the PLC in MONITOR or RUN mode long enough for the differentiated instruction to execute. A single scan is sufficient.
  5. Verify the mirror by inspecting DM1900-DM1929 in the DM area view. Every word should match the corresponding word in DM0900-DM0929.
  6. Cycle power on the C60H. The non-volatile backup is updated on power-down; on power-up the firmware reloads from the backup and clears the FAL 9E condition.
  7. Delete the one-time transfer rung from the user program and reconnect the RS232C cable. ASCII characters sent from the PLC will now appear on the PC terminal.

9. Ladder Logic Example: XFER-Based Transfer

The cleanest implementation uses the C-series block transfer instruction XFER(70). The block length is 30 (decimal) to span the entire PC Setup range DM0900-DM0929 and the corresponding mirror range DM1900-DM1929.

; One-time PC Setup transfer
LD   253.13        ; Always ON
AND  255.02        ; 1-second clock pulse (one-shot trigger)
XFER(70)
#0030              ; Block length: 30 words
DM0900             ; Source: PC Setup working copy
DM1900             ; Destination: PC Setup runtime copy

For programmers who prefer a word-by-word copy that makes the structure visible in the ladder view, an equivalent implementation using MOV(21) is:

LD   253.13
AND  255.02
@MOV(21) DM0900 DM1900
@MOV(21) DM0901 DM1901
@MOV(21) DM0902 DM1902
@MOV(21) DM0903 DM1903
@MOV(21) DM0904 DM1904
@MOV(21) DM0905 DM1905
@MOV(21) DM0906 DM1906
@MOV(21) DM0907 DM1907
@MOV(21) DM0908 DM1908
@MOV(21) DM0909 DM1909
@MOV(21) DM0910 DM1910
@MOV(21) DM0911 DM1911
@MOV(21) DM0912 DM1912
@MOV(21) DM0913 DM1913
@MOV(21) DM0914 DM1914
@MOV(21) DM0915 DM1915
@MOV(21) DM0916 DM1916
@MOV(21) DM0917 DM1917
@MOV(21) DM0918 DM1918
@MOV(21) DM0919 DM1919
@MOV(21) DM0920 DM1920
@MOV(21) DM0921 DM1921
@MOV(21) DM0922 DM1922
@MOV(21) DM0923 DM1923
@MOV(21) DM0924 DM1924
@MOV(21) DM0925 DM1925
@MOV(21) DM0926 DM1926
@MOV(21) DM0927 DM1927
@MOV(21) DM0928 DM1928
@MOV(21) DM0929 DM1929

Both implementations produce the same result. The @ prefix (differentiated execution) is critical: it ensures the transfer happens once on the rising edge of the trigger and never repeats. If a non-differentiated MOV is used, the transfer will repeat on every scan and will overwrite any subsequent legitimate change to either block.

Note on function-block defaults: In the CX-Programmer ladder editor, some XFER operands default to blank placeholders. Any blank operand must be filled in with the actual constant (0030 for the count, DM0900 for the source, DM1900 for the destination). A zero count (0000) transfers nothing and leaves the mirror unchanged, which will not clear FAL 9E.

10. DM0920 Bit Settings for ASCII Mode

The DM0920 word encodes both the port mode and several auxiliary flags in a single 16-bit value. The high byte carries the mode selector; the low byte is reserved and should be left as 00H.

DM0920 Value Bit 9 (ASCII) Bit 8 (Host Link) Effective Mode
0000H 0 0 Peripheral Bus (default)
0100H 0 1 Host Link (C-mode), PLC is slave
0200H 1 0 ASCII (RS-232C, no protocol)
0300H 1 1 Reserved / undefined

Setting DM0920 = 0200H enables bit 9, which the firmware interprets as "treat the TXD line as raw ASCII; do not wrap in Host Link framing; do not respond to Host Link commands." The PLC retains the ability to receive bytes from the PC, but it will not interpret them as Host Link commands. To return to Host Link, set DM0920 = 0100H and re-run the transfer procedure.

11. Host Link vs ASCII Mode Comparison

Aspect Host Link (0100H) ASCII (0200H)
Framing STX + node + command + text + BCC + ETX None, raw characters
Master/Slave PC is master, PLC is slave None, peer-to-peer
PC polling required Yes, POUT only on command No, PLC can transmit any time
Output instruction POUT(20) in Host Link mode TXD(48) in ASCII mode (CP1-series) or direct port write
Checksum Required (BCC) None
Typical use SCADA polling, register read/write Printers, barcode scanners, simple terminals

12. POUT Instruction Mechanics

POUT(20) is the C-series Host Link output instruction. Its operands are:

  • S – first source word in the DM, IR, or HR area
  • C – control word, encoded with the destination node number and response/no-response flag
  • N – number of words to send (1 to 256)

For a single-word ASCII output to node 1, the control word is 0001H and the count is 0001H. The user's rung:

LD   253.13
AND  255.02
@POUT DM0020 #0001 #0001

sends the word at DM0020 as a Host Link response to node 1, repeating every second on the rising edge of 255.02. In Host Link mode this is correct behavior. In ASCII mode the POUT instruction is suppressed because the port no longer recognizes the Host Link frame format. Switching to ASCII mode therefore also requires a change of output strategy: replace POUT with TXD(48) if the C60H firmware revision supports it, or use a CP1-series replacement CPU if the application requires native ASCII output from the ladder.

13. Physical Layer: Cable and Connector

The C60H front-panel RS232C port uses a miniature DIN or DB9 form factor depending on the manufacturing date. The signal set is a minimal RS232C subset: TXD, RXD, RTS, CTS, and SG (signal ground). For a direct connection to a PC COM port (DB9 male), a null-modem-style crossover is required.

C60H Pin (typical) Signal DB9 PC Pin Direction
2 TXD 2 PLC -> PC (RXD on PC)
3 RXD 3 PC -> PLC (TXD on PC)
5 SG 5 Ground
7 RTS 8 PLC -> PC (CTS on PC)
8 CTS 7 PC -> PLC (RTS on PC)

The programming cable used during development (C200H-CN222) is a straight-through RS232C cable. It works for the ASCII application only if the C60H port is configured to ignore the hardware handshaking lines. If CTS control is enabled in the PC Setup (DM0903 = 0001H), the cable must also cross RTS/CTS. The safest approach is to verify the cable pinout against the C60H hardware manual before commissioning.

14. PC Terminal Configuration

The PC terminal application (HyperTerminal, PuTTY, RealTerm, Tera Term, or a custom script using PySerial) must match the C60H PC Setup exactly. Typical ASCII-mode settings:

Parameter Value
Baud rate 9600 (matches DM0901 = 0005H)
Data bits 8
Parity None
Stop bits 1
Flow control None, or RTS/CTS if DM0903 enables it
Line terminator CR/LF (received from PLC if configured)

The serial port number (COM1, COM2, /dev/ttyS0) must match the physical connection. USB-to-serial adapters based on the FTDI FT232 or Prolific PL2303 chipsets are recommended for modern PCs that lack a native COM port.

15. Verification Procedure

  1. Open the PC terminal application and connect at 9600-8-N-1.
  2. Force the POUT or TXD instruction to execute by setting the trigger input in the ladder monitor.
  3. Observe the received characters on the terminal. Each PLC transmission should produce one or more readable ASCII characters at the configured baud rate.
  4. If no characters appear, switch the terminal to a hex display mode. The POUT instruction in Host Link mode will produce a recognizable STX-ETX frame; the TXD instruction in ASCII mode will produce the raw bytes from the source word.
  5. Confirm that FAL 9E is no longer raised. The FAL LED on the CPU front face should be off, and the error log in CX-Programmer should show no new FAL 9E entries.

16. Troubleshooting Matrix

Symptom Likely Cause Remedy
FAL 9E immediately after writing DM0920 Transfer procedure not run Run the XFER or MOV ladder, cycle power
FAL 9E returns after power cycle Mirror block diverged again from a re-edit Inspect DM0900-DM0929 for unintended changes, re-run transfer
No characters on PC terminal Port still in Host Link mode, POUT not firing Verify DM1920 = 0200H, check 253.13 and 255.02 in monitor
Garbled characters on PC terminal Baud rate or parity mismatch Compare PC terminal settings against DM0900/DM0901
Characters appear once, then stop Non-differentiated POUT/MOV, transfer loop Add @ prefix to the instruction
POUT executes but no bytes leave port CTS line held high, or cable does not cross RTS/CTS Disable CTS control in DM0903 or rewire the cable
FAL 9B instead of 9E Watchdog timeout, unrelated Increase cycle time or shorten the ladder

17. Common Pitfalls and Edge Cases

  • Re-editing the PC Setup after transfer. Any write to DM0900-DM0929 after the transfer will re-introduce the FAL 9E condition. If a future change is required, write the new values, re-run the transfer, and cycle power.
  • Using MOV to write the PC Setup area. A ladder instruction writing into DM0900-DM0929 at scan time will produce the same FAL 9E error if the mirror is not also updated. Always treat the PC Setup area as a one-time commissioning target, not a runtime data store.
  • Confusing the SR relays. 253.13 is the always-ON flag, not the first-scan flag (253.15). The first-scan flag is preferred for a one-time transfer to guarantee a single execution even if the trigger condition is still true at power-up.
  • Programming in RUN mode. Online edits to the transfer rung are not recommended. Switch to MONITOR or PROGRAM mode, write the rung, verify the mirror, then return to RUN.
  • Non-volatile backup timing. The C60H writes the parameter backup to internal flash on power-down. A power interruption shorter than 2 seconds may not commit the new values. Always allow a clean power-down of at least 5 seconds before disconnecting.

18. Migration Notes: From C60H to CP1 Series

Modern CP1L, CP1H, and CP1E CPUs handle the same configuration in a different memory region. The PC Setup on CP1-series lives in the A-range (typically A500-A800 plus a setup area for the option board) and is committed through the PLC Settings dialog in CX-Programmer with a single click. The XFER-based transfer trick used on the C60H is not required on CP1-series and should not be attempted there.

For ASCII output on CP1-series, the TXD(48) instruction is the standard mechanism. It accepts a source word, a control word, and a count, and it sends raw ASCII bytes from the source buffer to the configured serial port. The port must be set to RS-232C mode in the PLC Settings. Migration from C60H ladder to CP1 ladder is therefore a port-by-port and instruction-by-instruction exercise, not a direct memory remap.


Frequently Asked Questions

What does FAL 9E mean on an Omron C60H?

FAL 9E (158 decimal) indicates that the runtime PC Setup block DM1900-DM1929 has diverged from the non-volatile parameter backup. The firmware raises the error on every scan until the mirror block is re-aligned with the backup and the PLC is power-cycled.

How do I enable ASCII mode on the C60H RS232C port without triggering FAL 9E?

Write 0200H to DM0920 to select ASCII mode, then run a one-time XFER(70) block transfer of 30 words from DM0900 to DM1900, then power-cycle the PLC. The transfer commits the new mode to the runtime copy; the power cycle commits it to the non-volatile backup.

Can I use POUT to send ASCII characters from the C60H?

POUT(20) is a Host Link instruction and is only valid when the port is in Host Link mode (DM0920 = 0100H). In ASCII mode (DM0920 = 0200H) the POUT instruction is suppressed. Use TXD(48) on a CP1-series replacement or accept the Host Link framing on the C60H.

Do I need to keep the transfer rung in the user program?

No. The transfer is required exactly once. After the mirror is aligned and the PLC has been power-cycled, the rung can be deleted. Any future change to the PC Setup will require re-running the transfer and another power cycle.

What is the correct cable for ASCII communication between the C60H and a PC?

Use a null-modem RS232C cable that crosses TXD/RXD, RTS/CTS, and shares signal ground. The C200H-CN222 programming cable works only if the C60H is configured to ignore the hardware handshaking lines (DM0903 = 0000H). Verify the pinout against the C60H hardware manual before commissioning.

Back to blog