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:
- Updates the working copy at
DM0900-DM0929. - Mirrors the working copy into the runtime block at
DM1900-DM1929. - 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.
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.
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
- Connect the C60H to CX-Programmer in PROGRAM mode using the standard C-series programming cable (C200H-CN222 or CQM1-CIF02 with DB9 adapter).
- Open the DM area view and set
DM0900-DM0929to the desired port configuration. For ASCII mode, setDM0920 = 0200H. For typical 9600-8-N-1, setDM0900 = 0003HandDM0901 = 0005H. Confirm all other words in the block are intentional. - 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.
- Place the PLC in MONITOR or RUN mode long enough for the differentiated instruction to execute. A single scan is sufficient.
- Verify the mirror by inspecting
DM1900-DM1929in the DM area view. Every word should match the corresponding word inDM0900-DM0929. - 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.
- 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.
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
- Open the PC terminal application and connect at 9600-8-N-1.
- Force the POUT or TXD instruction to execute by setting the trigger input in the ladder monitor.
- Observe the received characters on the terminal. Each PLC transmission should produce one or more readable ASCII characters at the configured baud rate.
- 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.
- 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-DM0929after 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-DM0929at 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.13is 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.