Overview
The Omron SYSMAC Mini SP16 is a compact 16-point PLC from the SP-series brick controller family (SP10/SP16/SP20). Programming the SP16 from a modern PC requires a custom serial cable because the CPU's peripheral port uses a non-standard 7-pin mini-DIN (PS/2-style) connector with logic-level signalling rather than true RS-232C levels. The peripheral port is shared with the handheld programming console; there is no dedicated RS-232C port on the CPU module itself.
This reference documents the field-proven cable wiring originally reverse-engineered by Jay Anthony and clarified by Wim Huiskamp, the full SP10/SP16/SP20 peripheral port pinout, the two valid PC-side cable options, the minimum 3-wire build used by technicians, supported programming environments (MiniLSS, SSS, Syswin, CX-Programmer), and the resolution for the well-known "Runtime error 200 at 3753:91" failure when installing MiniLSS on a fast machine.
The authoritative source for hardware-level electrical and logical specifications is the SP10/SP16/SP20 Operation Manual (W197-E1-2B). Use the manual as the canonical reference for jumper settings, I/O assignments, and instruction set details not reproduced in full here.
SP16 Hardware Identification
The SP16 is the 16-I/O version of the SYSMAC Mini brick family. Before building the cable, confirm the CPU you have on the bench:
| Model | I/O Count | Peripheral Port | Programming Tools |
|---|---|---|---|
| SP10 | 10 points | 7-pin mini-DIN (PS/2 form factor) | MiniLSS, SSS, Syswin, CX-Programmer (LSS subset) |
| SP16 | 16 points | 7-pin mini-DIN (PS/2 form factor) | MiniLSS, SSS, Syswin, CX-Programmer (LSS subset) |
| SP20 | 20 points | 7-pin mini-DIN (PS/2 form factor) | MiniLSS, SSS, Syswin, CX-Programmer (LSS subset) |
Serial Port Electrical Characteristics
The SP16 peripheral port is NOT a true RS-232C port. It uses TTL-level signals (0 to 5 VDC) with an internal 7404-series hex inverter between the CPU and the connector, plus a current-limiting resistor and filter capacitor on the receive line. The two data signals (SD and RD) are inverted relative to RS-232C convention:
| PLC Port Direction | Internal Net Name | Logic Level | RS-232C Equivalent |
|---|---|---|---|
| PLC receives (from PC) | "to CPU" | TTL high = mark (idle) | Negative voltage (-3 to -15 V) = mark on a true RS-232 port |
| PLC transmits (to PC) | "from CPU" | TTL high = mark (idle) | Negative voltage (-3 to -15 V) = mark on a true RS-232 port |
The 7404 inside the CPU handles level translation and inversion in both directions, so the cable only needs to cross the SD/RD lines and provide a common ground. Do not attempt to drive the peripheral port with a real RS-232 line driver (e.g., MAX232) - the voltage swing will damage the CPU input. Conversely, do not connect the SP16 port to another SP16 without a level inverter in between.
Peripheral Port Pin Assignment (7-pin mini-DIN)
| Pin | Signal | Direction (PLC viewpoint) | Notes |
|---|---|---|---|
| 1 | SD (Send Data) | Output (from CPU to PC) | Inverted TTL, idle = 5 V |
| 2 | RD (Receive Data) | Input (from PC to CPU) | Inverted TTL, idle = 5 V |
| 3 | Common / SG | Reference | Signal ground; tie to PC DB9 pin 5 |
| 4 | +5 V (Vcc) | Output (CPU power) | Used by programming console for power; not required for PC cable |
| 5 | RTS / Handshake | Output (from CPU) | Optional; not required for one-way programming session |
| 6 | CTS / Handshake | Input (to CPU) | Optional; not required for one-way programming session |
| 7 | Frame Ground / Shield | Reference | Optional chassis bond |
Note: pin numbering above is the convention used by the field wiring diagram in the original reverse-engineered schematic. Some Omron service notes number the connector differently (1=Shield, 2=SD, 3=RD, 4=+5V, 5=SG, 6=RTS, 7=CTS). Always probe with a multimeter and an oscilloscope before soldering: SD and RD will show 5 V idle, SG will show 0 V referenced to PLC 24 V common, and +5 V will power a small LED indicator.
DB9 PC Serial Port Reference
| DB9 Pin | Signal | Direction (PC viewpoint) | Standard RS-232 Voltage (Mark/Space) |
|---|---|---|---|
| 1 | DCD | Input | Mark = -3 to -15 V |
| 2 | RD (Receive Data) | Input | Mark = -3 to -15 V |
| 3 | TD (Transmit Data) | Output | Mark = -3 to -15 V |
| 4 | DTR | Output | Mark = -3 to -15 V |
| 5 | SG (Signal Ground) | Reference | 0 V |
| 6 | DSR | Input | Mark = -3 to -15 V |
| 7 | RTS | Output | Mark = -3 to -15 V |
| 8 | CTS | Input | Mark = -3 to -15 V |
| 9 | RI | Input | Mark = -3 to -15 V |
Cable Option A: Converter Cable + Null Modem
The first valid configuration uses a short converter pigtail that adapts the SP16 mini-DIN to a female DB9 wired as a "DTE" device (i.e., it looks like a PC to the next cable in the chain). A standard null-modem cable is then used between this pigtail and the PC's DB9.
The internal cross-over of the null-modem cable provides the 7404-based inversion at the PC end, and the converter pigtail simply re-routes SD/RD/SG to the matching mini-DIN pins. The 7404 hex inverter stays inside the SP16 CPU; it is NOT replicated in the pigtail. The pigtail is fully passive.
Cable Option B: Direct SP16-to-PC Cable
The second valid configuration is a single integrated cable that connects the SP16 peripheral port directly to a PC DB9 male. This is the preferred field build because it removes the extra null-modem adapter and reduces failure points.
The direct cable is mechanically simple: a male 7-pin mini-DIN (salvaged PS/2 cable works) on the PLC end and a female DB9 on the PC end, with five conductors. The 7404 inside the SP16 provides the inverting buffer so the PC sees proper RS-232 polarity on its DCD/RD inputs.
Minimum 3-Wire Build (Sid's Field Build)
For sites where the SP16's RTS/CTS handshaking is not used (typical for upload/download operations with MiniLSS), a 3-wire variant is fully functional. This is the build documented by Sid Newman and the variant most often reproduced on the bench:
| SP16 mini-DIN Pin | Wire | PC DB9 Pin |
|---|---|---|
| 1 (SD) | TX wire | 2 (RD) |
| 2 (RD) | RX wire | 3 (TD) |
| 3 (SG) | Ground | 5 (SG) |
PC Side Handshake Jumpering
Many older PC serial ports refuse to assert DTR/RTS by default, which trips a "PLC not connected" error in MiniLSS. If the SP16 is wired to the PC's DTR/DSR/DCD lines (pins 4, 6, 1), the following DB9 jumpers force the port to believe a device is present and active:
- Jumper DB9 pin 1 (DCD) to DB9 pin 4 (DTR)
- Jumper DB9 pin 6 (DSR) to DB9 pin 4 (DTR)
- Jumper DB9 pin 7 (RTS) to DB9 pin 8 (CTS)
This is a 1-4-6 plus 7-8 loop. Modern USB-to-serial converters typically assert DTR/RTS automatically; on these adapters the jumpers are usually unnecessary. On a true 16550-era DB9 from a 486 laptop, the loopback may be required.
USB-to-Serial Adapter Caveats
Modern laptops no longer ship with a DB9 serial port. A USB-to-RS232 adapter (FTDI FT232, Prolific PL2303, or CH340 based) is required. Critical caveats for the SP16:
- Set the COM port number to COM1..COM4. Some legacy programming tools (MiniLSS, SSS) only scan the first four COM ports. Use the adapter's advanced properties dialog to force the port number.
- Disable FIFO buffers in the adapter's advanced properties. The SP16 uses 9600 bps (default) or 19200 bps; FIFO-buffered adapters can introduce latency that breaks the SP16's polling protocol.
- Avoid PL2303 clones. Counterfeit Prolific chips on eBay adapters drop characters at 9600 bps. Genuine FTDI or official Prolific adapters are recommended for programming older Omron brick controllers.
- Match voltage levels. The USB adapter presents true RS-232 levels ( +/-5 to +/-10 V ) on its DB9; this is correct for the SP16 cable, which passes the levels to the 7404 inverter on the CPU.
Programming Software Options
| Tool | SP16 Support | Modern Windows | Notes |
|---|---|---|---|
| MiniLSS (V3 / V4) | Full LSS subset | Win95/98/ME only; XP with compatibility shim | Native LSS editor; the original Omron tool for the SP-series |
| SSS (Sysmac Support Software) | Full LSS subset | Windows 3.1/95/98 | Older Omron tool; superseded by CX-Programmer |
| Syswin | SP-series supported | Win95/98/NT 4.0 | Ladder and SFC editor; free download from Omron legacy archive |
| CX-Programmer (LSS mode) | SP-series via device type "SP-series (LSS)" | Windows XP / 7 / 10 (32-bit; partial 64-bit) | Modern path; use PLC type C-series (LSS) or SP-series driver |
CX-Programmer can communicate with the SP16 if the correct PLC Device Type is selected. The relevant Omron part is the "SYSMAC Way LSS" driver. CX-Programmer v9.x and later expose the SP family under "Device Type: SP-series". If the device type is not visible, install the legacy LSS plugin that ships with CX-Programmer v6.1 or earlier. Reference the SP10/SP16/SP20 Operation Manual (W197-E1-2B) for the instruction subset supported by the LSS driver.
MiniLSS Installation and the Runtime Error 200 Fix
MiniLSS is a 16-bit DOS/Windows 3.1 application. On faster PCs the installer and runtime will fail with the well-known:
Runtime error 200 at 3753:91
Root cause: the original MiniLSS installer calls a Borland Pascal RTL delay-loop routine whose iteration count is computed from the CPU clock. On machines faster than ~200 MHz the integer overflows and the delay routine divides by zero, producing Runtime error 200. There are two field-proven fixes:
Fix 1: CPU Speed Throttling (Not Recommended)
Some legacy forums suggest slowing the CPU using BIOS settings, ThrottleWatch, or the older AMD K6/K7 clock dividers. This works on a 1.3 GHz Athlon (as reported in the source thread) but is fragile - the OS scheduler can change clock multipliers dynamically. Use only as a last resort.
Fix 2: Patch the Binary (Recommended)
- Download a "Turbo Pascal CRT patch" utility, e.g., TPCRTPATCH by Kennedy Software, or use a hex editor to locate the offending DIV instruction at offset 3753h.
- Replace the instruction bytes with NOPs (0x90) or patch the divisor to a non-zero constant.
- Run the patched MiniLSS.EXE from a Windows 95/98 DOS box or under Windows XP compatibility mode.
Alternatively, run MiniLSS in DOSBox with a fixed cycles setting (e.g., cycles=10000) which emulates a slow 486 and prevents the overflow. Set cycles lower than auto; 5000-15000 cycles is the workable range for a P133 emulation.
MiniLSS Installation Procedure (from Floppy)
- Copy the contents of the MiniLSS distribution disk to a working directory on the target PC, e.g.,
C:\OMRON\MINILSS. - From a DOS prompt, change to that directory and run
INSTALL.EXE. - Press F2 to install from drive A: to C: (or modify the source path to match your working directory).
- When the installer prompts for a working directory, accept the default
C:\OMRON\MINILSS. - Reboot into Windows 95/98 (or boot pure DOS on a 486-class machine for best compatibility).
- Launch MiniLSS; configure the COM port (COM1..COM4), baud rate (9600), and PLC type (SP-series).
Communication Parameters
| Parameter | Value | Notes |
|---|---|---|
| Baud rate | 9600 (default), 19200 (SP16B only) | Set by SP-series DIP switch or by ladder program |
| Data bits | 7 | LSS protocol uses 7-bit ASCII |
| Parity | Even | Required by LSS host link |
| Stop bits | 2 | Required by LSS host link |
| Flow control | None (3-wire) or XON/XOFF | MiniLSS default is XON/XOFF |
| Protocol | Omron LSS Host Link (1:N, unit 00) | Half-duplex, polled |
| PLC unit number | 00 | Default; can be changed in CX-Programmer / Syswin |
Verification Procedure
- Power the SP16 from a 100-240 VAC or 24 VDC supply per the W197 manual. Confirm the POWER LED is steady green and the RUN LED is green or flashing.
- Place the CPU in PROGRAM mode: set the mode switch to PROG (or stop the scan from the programming tool).
- Connect the cable, then connect to the PC's serial (or USB-serial) port.
- Launch MiniLSS or CX-Programmer. Set COM port, 9600, 7-E-2.
- Issue a "Read PLC" or "Upload Program" command. A successful session returns the program checksum and the PLC type string (e.g., "SP16") within 2-3 seconds.
- Verify with an oscilloscope or a serial line analyzer: a 5 V idle on the SP16 SD line (pin 1) and transitions to 0 V during transmission.
- Toggle a discrete output (e.g., 100.00) from the programming tool and confirm the corresponding SP16 output LED changes state.
Troubleshooting Matrix
| Symptom | Likely Cause | Fix |
|---|---|---|
| "Communications error" immediately on connect | Wrong COM port selected, or USB adapter not enumerated | Verify COM port in Device Manager; set to COM1..COM4 |
| Garbled characters, frequent timeouts | FIFO buffers enabled on USB-serial | Disable FIFO in advanced port properties |
| Runtime error 200 at 3753:91 on MiniLSS start | CPU too fast for Borland Pascal RTL | Patch binary or use DOSBox with cycles=10000 |
| PLC does not respond, all LEDs off | No power or PLC in run with watchdog fault | Check 24 VDC or 100-240 VAC supply; clear fault and cycle power |
| RX LED on USB adapter flickers but TX stays dark | Cable RX/TX swapped, or SD pin miswired | Recheck mini-DIN pin 1 to DB9 pin 2 connection |
| Connection works on 486 laptop, fails on 1.3 GHz Athlon | CPU speed issue or USB-serial latency | Use patched MiniLSS or slower COM port emulator |
| CX-Programmer does not list SP-series device | LSS plugin not installed | Install CX-Programmer v6.1 or run Add/Remove on v9.x |
| Programs upload but cannot be edited | PLC memory protected, or wrong PLC type selected | Switch CPU to PROGRAM mode; verify PLC type matches CPU |
| SP20 used with same cable: works | Expected - SP10/SP16/SP20 share the peripheral port | No action needed; the cable is compatible across the family |
Safety Notes
Field-Build Tips and Connector Sources
- Salvage a male mini-DIN connector from an obsolete PS/2 keyboard or mouse extension cable. The pin numbering is identical, and the PS/2 form factor is the same as the SP-series peripheral port.
- Crimp the SP16-end pins carefully. Omron used machined pins in the original cable; modern Molex 70058-series or similar 0.635 mm pins are direct replacements.
- Use shielded cable (e.g., Alpha 5471 or Belden 9533) if the cable run exceeds 1.5 m. The programming tool uses slow baud rates and is not particularly noise-sensitive, but ESD transients on the shop floor can corrupt long unprotected runs.
- Do not rely on a USB-serial adapter's DB9 shield for chassis ground. Run a separate drain wire from the SP16 end of the cable shield to earth ground at the panel.
Frequently Asked Questions
Can the SP16 be programmed directly with CX-Programmer?
Yes, but only with the LSS device driver. In CX-Programmer v6.1 or later, select Device Type "SP-series (LSS)" or "C-series (LSS)" with the correct CPU model. Newer CX-Programmer versions (v9.5+) require the legacy LSS plugin to be installed manually. The SP10/SP16/SP20 manual lists the exact instruction subset supported.
What is the simplest cable to build for occasional programming?
Three wires: SP16 mini-DIN pin 1 (SD) to DB9 pin 2 (RD), pin 2 (RD) to DB9 pin 3 (TD), and pin 3 (SG) to DB9 pin 5 (SG). Add the 1-4-6 / 7-8 DB9 loopback jumpers for older PC serial ports. Use 9600 baud, 7-E-2, XON/XOFF flow control in MiniLSS.
Why does MiniLSS fail with Runtime error 200 on modern PCs?
The original MiniLSS binary uses a Borland Pascal delay loop that divides by a CPU-clock-derived value. On CPUs faster than about 200 MHz, the divisor overflows. Either patch the EXE with a Turbo Pascal CRT patcher or run MiniLSS inside DOSBox with cycles=5000-15000.
Does the same cable work for the SP10, SP16, and SP20?
Yes. All three CPUs share an identical 7-pin mini-DIN peripheral port with TTL-level signalling. A cable built for any one of them works on the other two without modification.
Can I use a USB-to-serial adapter with the SP16?
Yes, but choose a genuine FTDI or Prolific chip adapter, force the COM port to COM1..COM4, and disable FIFO buffers in the adapter's advanced properties. Counterfeit Prolific chips on cheap adapters drop characters and will not communicate reliably at 9600 baud.
Where can I find the official SP16 operation manual?
The SP10/SP16/SP20 Operation Manual (W197-E1-2B) is hosted on Omron's eData portal and contains full electrical specifications, I/O wiring, and instruction set details for all three brick controllers.