Overview
The Omron CP1L and CP1H small PLC families expose a USB 1.1 slave peripheral port (Type-B receptacle) on the front face of the CPU. The port is intended for direct connection to the CX-One / CX-Programmer host running on Windows XP, Windows 7, Windows 10, or Windows 11. When CX-Programmer is hosted inside a VMware Workstation virtual machine, the first USB attach / online session to the CP1L/H typically succeeds, but any subsequent reconnect attempt times out with the standard "Could not connect to PLC / Communications timeout" dialog. The failure is observed specifically with the CP1L/CP1H range and is not reproduced against the CJ2M/CJ2H CPU units or against the NS / NSJ HMI series on the same VM host. Physical unplug-replug of the USB cable recovers the session, and re-enumeration of the device is the practical workaround.
This reference documents the root cause, the verification matrix, and four engineering-grade workarounds: native host installation of CX-One, USB arbitration tuning inside VMware, replacement of the CP1L/H USB link with a serial option board, and BIOS/UEFI plus Windows USB-stack troubleshooting from the host side.
Problem Definition
Observed failure signature on a Windows 7 x64 host running VMware Workstation (XP SP3 guest):
- First Online > Connect to PLC against a CP1L-L14DR-D or CP1H-XA40DR-A succeeds; program upload, download, monitor, and compare all operate normally.
- Disconnect from CX-Programmer, then Connect to PLC again — the session times out and returns the communications error dialog without ever reaching the PLC.
- The same USB cable and port, the same VM, and the same CX-One revision connect, upload, and download reliably against a CJ2H-CPU33.
- The same NS8 / NSJ HMI panel accepts repeated USB downloads inside the VM without failure.
- Physical removal and reinsertion of the USB Type-B cable on the CP1L/H front port restores the link on the next attempt without restarting CX-Programmer or rebooting the guest.
- On VMware Workstation 6.x and 7.x, the failure was previously accompanied by a hard VM crash on reconnect; current VMware releases prevent the crash but still require the physical reconnect step.
Affected Components and Firmware
| Item | Identification | USB behavior |
|---|---|---|
| CP1L CPU units | CP1L-L14DR-D, CP1L-L20DR-D, CP1L-M30DR-D, CP1L-M40DR-D, full CP1L-* range | USB 1.1 slave, peripheral Type-B; affected by reconnect failure in VM |
| CP1H CPU units | CP1H-XA40DR-A, CP1H-Y20DT-D, CP1H-X40DR-D, CP1H-XA40DT-D | USB 1.1 slave, peripheral Type-B; affected by reconnect failure in VM |
| CJ2 CPU units | CJ2H-CPU33, CJ2M-CPU11/12/13/14/15, CJ2H-CPU64/65/66/67/68 | USB 2.0 slave; reconnects cleanly inside VM |
| NS / NSJ HMI | NS8-V2, NS10-V2, NS12-V2, NSJ controllers | USB slave for CX-Designer download; reconnects cleanly inside VM |
| CX-One releases | CX-One v4.0 through v4.40 (CX-Programmer v9.0 to v9.74) | Supports CP1L/H USB peripheral driver; reinstall under host OS resolves VM symptom |
| VMware Workstation | v7.x through v15.x on Windows 7 x64 host | USB arbitration service present in all affected builds |
Root Cause Analysis
The CP1L/H peripheral USB port implements a vendor-specific interface on top of USB 1.1 full-speed. The endpoint descriptors enumerate as a vendor class with one bulk-IN and one bulk-OUT endpoint plus one interrupt-IN endpoint for FINS-over-USB status. The CJ2 family uses a USB 2.0 high-speed stack with a different endpoint descriptor layout and a CDC-like composite interface that VMware's USB arbitration service handles more cleanly.
VMware's USB arbitration (the vmware-usbarbitrator service on the host, exposed to the guest via the uhci/ehci virtual controller) maintains a persistent claim on the device handle between connect/disconnect cycles in CX-Programmer. When CX-Programmer releases the handle, the arbitrator does not issue a USB_DEVICE_RESET primitive to the CP1L/H because the device still reports DEVICE_REMOTE_WAKEUP and an active configuration. On the next open from CX-Programmer, the guest stack re-attaches to a stale interface state, the bulk-OUT pipe reports a STALL, and CX-Programmer's FINS/UDP-over-USB handshake times out.
The CJ2 USB implementation uses an interface that requires a configuration deassertion on close, which the arbitrator honors and which forces a clean re-enumeration on next connect. The CP1L/H firmware does not perform the configuration deassertion, hence the asymmetry.
Host-mode operation (CX-Programmer running directly on Windows 7 x64) avoids the arbitrator entirely; Windows' native USB stack performs the reset cycle that CP1L/H firmware expects, which is why the same CX-One revision works flawlessly off the VM.
Diagnostic Procedure
- Connect the CP1L/H to the host's USB port, attach it to the VM, and confirm CX-Programmer reaches the Online state with a clean monitor view.
- From the menu bar choose Online > Disconnect. Do not power-cycle the PLC.
- From the menu bar choose Online > Connect to PLC. Capture the timeout dialog text and the exact error code returned in the CX-Server Output window.
- Run
devmgmt.mscon the guest and confirm the CP1L/H still appears under Universal Serial Bus controllers with no yellow bang. A persistent listing without traffic confirms the arbitrator-level stale handle. - Run
vmware.logtail from the host VM folder (%USERPROFILE%\Documents\Virtual Machines\<vm>\vmware.log) and grep for the CP1L/H VID/PID. CP1L/H enumerates as Omron vendor ID0590h. Entries with "Device not responsive" or repeated reset attempts confirm the arbitration symptom. - Repeat steps 1–3 against a CJ2H-CPU33 on the same VM. A clean reconnect on the CJ2 confirms the differential diagnosis (CP1L/H specific).
- Run the Microsoft USB diagnostics by opening
msdt.exe -id USBDiagnosticon the host to validate the underlying USB stack. Cross-reference with the general Windows USB troubleshooting procedure documented in the Dell Knowledge Base article on common USB issues.
Solution 1 — Migrate CX-One to the Native Host
Install CX-One directly on the Windows 7 x64 (or Windows 10 x64) host. CX-Programmer has supported Windows 7 x64 natively since CX-One v4.0 with the 64-bit USB driver package available through MyOmron. The host-resident install side-steps the VMware USB arbitrator entirely.
- Download the latest CX-One release and the matching SYSMAC PLC USB Driver from the MyOmron support portal.
- Right-click the installer and choose Run as administrator. Allow the USB driver to be installed during the CX-One setup.
- After setup completes, plug the CP1L/H into a physical USB port. Windows enumerates the device and creates a virtual COM port (typically
COM5throughCOM12). - Confirm the driver assignment under Device Manager > Ports (COM & LPT) > OMRON SYSMAC PLC USB.
- In CX-Programmer, set the PLC's Network Type to USB and the COM Port to the assigned number. Connect, then disconnect and reconnect repeatedly — the link survives every cycle without a physical unplug.
- If the Windows firewall blocks the FINS port, open inbound UDP 9600 or temporarily disable the firewall for the first commissioning session, then re-enable with the exception rule in place.
Solution 2 — Accept Physical Reconnect as a Workflow
When CX-One must remain virtualized, adopt the physical-disconnect discipline. This is the documented workaround carried forward from VMware's earlier fix that prevented the VM crash but preserved the stale-handle condition.
- After Online > Disconnect in CX-Programmer, pull the USB Type-B cable from the CP1L/H front port.
- Wait 3 seconds for the CP1L/H USB peripheral controller to detect VBUS drop and reset its endpoint state.
- Reinsert the USB cable. The guest's VMware USB arbitrator issues a fresh enumeration and CX-Programmer can Connect to PLC immediately.
- To reduce wear on the front-panel USB receptacle on the CP1L/H, mount a short USB Type-A female to Type-B male pigtail (1 m, shielded) and cycle the connection at the host end rather than at the PLC end.
Solution 3 — Replace the USB Link with a Serial Option
The CP1L/H supports the CP1W-CIF01 RS-232C option board and the CP1W-CIF11 RS-422A/485 option board. Serial communication is unaffected by the VMware USB arbitration problem because the COM port is a host-side abstraction backed by either a native COM port or a USB-to-serial converter.
- Power down the CP1L/H and install the CP1W-CIF01 option board in option slot 1.
- Wire the option board to a host COM port via a standard null-modem cable (or via an FTDI FT232R-based USB-to-serial converter if no native COM port is available).
- In CX-Programmer set Network Type to SYSMAC WAY (Toolbus) or SYSMAC WAY (Host Link), set the COM port and the host link station number (default 0).
- For USB-to-serial converters, install the FTDI VCP driver on the host first, then assign a stable COM number from Device Manager > Advanced Settings to prevent the COM number from drifting between reboots.
| Option board | Order code | Protocol | Max cable length |
|---|---|---|---|
| RS-232C option board | CP1W-CIF01 | Host Link / Toolbus / NT Link | 15 m |
| RS-422A/485 option board | CP1W-CIF11 | Host Link / NT Link 1:N | 500 m (RS-485) |
| Ethernet option board | CP1W-CIF41 | FINS/TCP, UDP | 100 m (Cat5e+) |
Solution 4 — Tune VMware USB Arbitration
For engineers who must keep the VM and cannot accept Solution 2's manual cycling, the USB arbitrator can be relaxed at the cost of reduced USB hot-plug safety.
- Shut down the VM and close VMware Workstation.
- Open
%PROGRAMFILES%\VMware\VMware Workstation\vmware-usbarbitrator.exe.configin a text editor. - Locate the
<add name="resetOnRelease" value="true" />entry under<appSettings>. If absent, add it. SettingresetOnReleasetotrueforces the arbitrator to issue a port reset when CX-Programmer releases the device handle. - Save the file and restart the VMware USB Arbitration Service from
services.msc. - Boot the VM and retest the CP1L/H reconnect cycle.
Comparison: CP1L/H vs CJ2 USB Behavior
| Characteristic | CP1L / CP1H | CJ2H / CJ2M |
|---|---|---|
| USB version | 1.1 full-speed | 2.0 high-speed |
| Connector | Type-B peripheral | Type-B peripheral |
| VID/PID | 0590h / device-specific | 0590h / device-specific |
| Endpoint deassertion on close | None | Configuration deasserted |
| First connect inside VM | OK | OK |
| Reconnect inside VM without unplug | Timeout | OK |
| Workaround | Physical cable cycle, host install, serial option, or arbitrator reset | None required |
BIOS / UEFI and Windows USB Stack Verification
When the host's USB subsystem itself is unstable, both the VM and the native install fail. Run the following checks before assuming the CP1L/H or the VM is at fault:
- Enter BIOS/UEFI setup (typically
F2,DEL, orF10at POST). Confirm USB Legacy Support and xHCI Hand-off are enabled. On some platforms the EHCI hand-off must remain enabled to support full-speed USB 1.1 devices such as the CP1L/H. - Update the BIOS/UEFI firmware and the chipset USB driver from the laptop or workstation manufacturer's site.
- On Windows, open Device Manager, expand Universal Serial Bus controllers, and uninstall every USB Root Hub and USB Host Controller. Reboot; Windows reinstalls the stack with fresh descriptors.
- Confirm the USB Selective Suspend setting is disabled: Power Options > Change plan settings > Change advanced power settings > USB settings > USB selective suspend setting > Disabled.
- Test the CP1L/H on every available host USB port. Avoid unpowered hubs on the CP1L/H path; the PLC's USB peripheral port draws up to 500 mA and some hubs cannot sustain it.
For deeper Windows-side diagnosis, follow the triage steps described in the Microsoft Q&A thread on USB ports not working and the Dell Knowledge Base article on common USB issues, which cover driver signature enforcement, USB power management, and root-hub enumeration resets that apply to any Windows host running VMware.
Verification Checklist
- CX-Programmer reaches Online state against the CP1L/H on first connect.
- Disconnect and reconnect 10 times in a row; no timeout and no VM crash.
- CX-Server Output window shows clean FINS traffic with no STALL or RESET entries.
- Device Manager lists the CP1L/H under USB controllers with no warning icon after each reconnect.
- If the host-mode install was used, the same workflow succeeds against a CJ2H on Ethernet and against an NS8 on USB simultaneously.
- CX-Designer screen downloads complete without hanging when the HMI is attached to a different physical USB port.
FAQ
Why does the CP1L/H USB link reconnect on a native Windows host but time out inside a VMware VM?
The CP1L/H USB peripheral firmware does not deassert its configuration descriptor when CX-Programmer closes the handle. VMware's USB arbitration service retains the stale device state and re-attaches to it on the next open, which causes a bulk-OUT STALL and a FINS handshake timeout. Native Windows performs a port reset on close that the CP1L/H firmware requires, so the link recovers cleanly.
Which Omron PLC families are unaffected by this VMware USB symptom?
CJ2H (CPU33/64/65/66/67/68), CJ2M (CPU11/12/13/14/15), NS8 / NS10 / NS12 V2, and NSJ controllers all reconnect reliably inside the same VM. The CP1L and CP1H are the only small-PLC families that exhibit the stale-handle behavior.
Can I keep CX-One in a VMware VM and avoid the physical cable cycle?
Yes. Add <add name="resetOnRelease" value="true" /> to the VMware USB arbitrator config file and restart the VMware USB Arbitration Service. The arbitrator will issue a port reset when CX-Programmer releases the CP1L/H, which forces a clean re-enumeration on the next connect.
What is the most reliable replacement for the CP1L/H USB link?
Install the CP1W-CIF01 RS-232C option board and connect through a native COM port or an FTDI FT232R USB-to-serial converter with a stable COM number. The serial option is immune to the VMware arbitration issue and provides a 15 m cable reach, which is more than the USB 1.1 peripheral specification comfortably supports on a bench.
Which CX-One release is recommended for Windows 7 x64 host installation?
CX-One v4.40 (CX-Programmer v9.74) or later with the 64-bit SYSMAC PLC USB driver pulled from MyOmron is the current stable baseline. Earlier CX-One v4.0 through v4.31 also work on Windows 7 x64 but require the matching 64-bit USB driver add-on.