1. Problem Overview
The Omron Remote post processor in RoboDK provides a path for offline-generated robot programs to be pushed to an Omron TM collaborative robot (such as the TM5-900) over the local network using FTP, with Modbus TCP handling the start, stop, and status handshake. When the post processor generates a script and attempts to transfer the file to the robot controller, the integration can fail with file-transfer errors, listen-node timeouts, or silent failures where the program is generated locally but never appears on the robot.
This reference documents the diagnostic procedure and the resolution path for the most common failure modes encountered when the Omron Remote post processor is paired with a TM5-900 running TMflow, with RoboDK 5.5.x as the generation host. The same approach applies to TM5, TM7, TM12, and TM14 cobots because the post processor uses the same TMflow FTP endpoint and the same Modbus register layout that TMflow exposes through its built-in Modbus TCP server.
2. System Architecture and Data Flow
The Omron Remote post processor is a Python-based code generator inside RoboDK. When the user selects it in the cell properties, the post processor does three things on every program run:
- Generates a TMflow script file (typically a
.csor.txtpayload) from the RoboDK station. - Wraps the script with a RoboDK driver Python file that performs the FTP upload, polls the Modbus handshake registers, and reports program state back to RoboDK.
- Attempts to connect to the TMflow FTP server on the controller and to the Modbus TCP server, then triggers program execution through a write to the start register.
The end-to-end data path is summarized below.
Both the FTP channel (control + data) and the Modbus TCP session ride over the same Ethernet link. A failure in either service breaks the upload, but the failure mode the operator sees depends on which leg has failed.
3. TM5-900 Hardware and Network Context
The TM5-900 is a 6-axis collaborative robot in the Omron TM series. The values in the table below are stated by Omron for the stock TM5-900 hardware and are used here to size the network and to identify the physical node that must be reachable from RoboDK.
| Parameter | TM5-900 value | Engineering use |
|---|---|---|
| Reach | 900 mm | Cell layout |
| Payload | 4 kg | EOAT mass budget |
| Repeatability | ±0.05 mm | Cycle tolerance check |
| Weight | 22.6 kg | Mounting |
| Power supply | 100–240 VAC, 50/60 Hz | Cabinet spec |
| Robot controller | Integrated in base (DC version requires external 48 VDC) | Footprint |
| Default IP (factory) | 192.168.1.2 | Initial RoboDK target |
| Ethernet ports | 2× GbE on integrated controller | Cell switch uplink |
| Supported fieldbuses | Modbus TCP, EtherNet/IP, PROFINET (option) | Modbus server selection |
| TMflow version compatibility | TMflow 2.x (consult release notes for the exact build) | Register layout dependency |
4. Prerequisites
Before running the diagnostic procedure, verify the following baseline items.
-
RoboDK install path on Windows. Confirm the install location, typically
C:\RoboDK\, and that the user account running RoboDK has write access to the post-processor folder. The default path isC:\RoboDK\Posts\. - RoboDK license. A trial, educational, or professional license must be active. The Omron Remote post processor does not require a paid post-processor entitlement on top of the RoboDK license, but the RoboDK driver that performs the FTP upload runs only when RoboDK itself is licensed and connected.
- RoboDK version. Use the latest 5.5.x or later build. Earlier builds of the Omron Remote post processor had known issues that were corrected in subsequent 5.5.x maintenance releases; a fix was published the day after the report reproduced in the field.
- TMflow project with a Listen node. The TMflow project on the robot must contain a Listen node configured to listen on the same Modbus register address that the post processor writes to. Without this node, TMflow will accept the FTP upload but never execute the program because no flow triggers.
- Modbus TCP server enabled in TMflow. Settings → Network → Modbus TCP → Enable.
-
FTP server reachable on the controller. TMflow exposes an FTP endpoint on TCP/21 of the controller IP. Use an FTP client (FileZilla, Windows Explorer
ftp://) to log in with the TMflow credentials before involving RoboDK. -
Layer-3 connectivity.
ping <controller_ip>must succeed from the RoboDK PC.
5. Common Error Scenarios
The errors that surface when the Omron Remote post processor fails fall into the categories below. Each maps to a specific layer in the integration stack.
| Symptom | Likely layer | Most probable cause |
|---|---|---|
| RoboDK generates the script but no file appears on the robot FTP | FTP / network | Firewall blocks TCP/21 or TCP/20; FTP credentials wrong; controller not in same subnet |
| FTP upload succeeds but the program does not start | Modbus handshake | Listen node missing, wrong register address, Modbus TCP disabled in TMflow |
| Program starts but stops immediately with a TMflow error pop-up | TMflow runtime | Generated script references variables or setpoints that the running project does not provide; safety stop active; project not in Auto mode |
| Post processor menu is missing or greyed out | RoboDK config | Post processor file corrupted, replaced with wrong source, or stored in a user path RoboDK does not index |
| Connection succeeds once, then fails for every subsequent program | Session state | Modbus session not closed cleanly; previous upload locked a file handle on the controller |
| Driver Python file references outdated function names | Post processor code | Custom or older post processor version; needs source update from vendor |
6. Diagnostic Procedure
Run the procedure in order. Each step validates one layer of the stack. Do not skip ahead; the post-processor behavior looks identical for several distinct root causes.
6.1 Validate Layer-3 connectivity
- Open a Windows command prompt on the RoboDK PC.
- Run
ping <TM5-900_IP> -n 10. - Confirm round-trip time below 5 ms on a wired link and 0% packet loss. Anything above indicates a duplex mismatch, bad cable, or a managed switch with an inactive port.
- Run
arp -aand verify the controller MAC address resolves. The TM controller's MAC prefix is stamped on its label.
6.2 Validate FTP independently
- Open FileZilla or
ftpfrom the Windows command line. - Connect to
ftp://<TM5-900_IP>using the TMflow user account and password. The default TMflow FTP account is the user set under Settings → User Management. - Change directory to
/programs/or the location the Listen node expects. - Upload a small test file (
test.txt) and confirm it appears in the TMflow Project Explorer after refresh.
ftplib with passive mode enabled, so a network device that strips PASV replies will break the integration even though ping still works.
6.3 Validate Modbus TCP independently
- Use a Modbus TCP test client (modbuspoll, qModMaster, or a Python
pymodbusscript). - Connect to
<TM5-900_IP>:502. - Read holding register 0. TMflow exposes a set of registers whose default base varies with TMflow version. The Omron Remote post processor expects to write a function code 05 (Write Single Coil) or function code 06 (Write Single Register) to the start address and to read function code 03 (Read Holding Registers) from the status address.
- If the read fails with connection refused or timeout, confirm that Settings → Network → Modbus TCP Server is enabled in TMflow.
6.4 Validate the Listen node
- In TMflow, open the project that should be triggered.
- Confirm a Listen node exists at the top of the flow.
- Confirm the Listen node is configured for the Modbus register address used by the post processor. The default in the Omron Remote post processor is register 0 (coil 0) for the start trigger, register 1 (coil 1) for the stop trigger, and register 100 (holding) for status feedback. Verify against the comments at the top of the post processor Python file.
- Right-click the Listen node → Test. The trigger should fire if you write to the configured register from the Modbus test client.
6.5 Validate the RoboDK post processor selection
- In RoboDK, open the station.
- Select the robot → right-click → Select Post Processor.
- Confirm that "Omron Remote" or "Omron-Tecman Remote" is selected, not the vanilla "Omron" or "TM" post processor. The Remote variant is the only one that issues the FTP upload and Modbus handshake; the standard post processor only emits TMflow-compatible script text.
6.6 Validate the generated driver
- Right-click the program → Generate Robot Program (F6).
- Open the folder RoboDK writes to. Two artifacts are produced: the TMflow script (
.csor.txt) and a Python driver file. - Open the Python driver and confirm the controller IP, FTP user, FTP password, Modbus port, and register addresses match the TMflow configuration on the cell.
7. Root Cause Analysis
The most common root cause in the field is a version mismatch between the post processor file shipped with the RoboDK install and the post processor source the integrator customized. When the Omron Remote post processor was first distributed, the generated Python driver used a function call sequence that worked against older TMflow builds but raised exceptions against later ones. A bug fix landed in the next daily build of RoboDK after the report was filed, and the fixed source was provided directly to the integrator to drop into C:\RoboDK\Posts\.
The second most common root cause is Listen node misconfiguration. The FTP upload succeeds, but TMflow has no trigger to consume the new file, so the operator sees a successful upload followed by silence.
The third most common root cause is credential drift. TMflow credentials are user-managed and can be changed without notifying the upstream RoboDK station. The Python driver keeps the old password baked in until the post processor is regenerated.
8. Resolution Procedure
Apply the resolution steps below in order. They are additive; you do not need to restart between them.
8.1 Update RoboDK to the latest 5.5.x maintenance release
- Open RoboDK → Help → Check for Updates.
- If a newer build is available, install it.
- Restart RoboDK.
The vendor publishes daily builds. Confirm the post-processor fix is included by checking the release notes for an entry that mentions "Omron Remote" or "TM" before regenerating.
8.2 Refresh the Omron Remote post processor file
- Close RoboDK.
- Replace the post processor file in
C:\RoboDK\Posts\Omron_Remote.py(the filename varies by version) with the source the vendor provides. - Restart RoboDK.
- Re-select the Omron Remote post processor on the robot in the station tree.
8.3 Verify the controller IP and credentials in the station
- Right-click the robot → Properties → Connection.
- Confirm the IP matches the TM5-900 controller.
- Confirm the FTP username and password match the TMflow account. These are stored in the station file (
.rdk) in plain text. Restrict read access to the station file accordingly.
8.4 Rebuild and re-test
- Right-click the program → Generate Robot Program.
- Confirm the driver Python file is regenerated against the new post processor.
- Run the driver manually (
python driver.py) and watch the console output for FTP transfer lines and Modbus handshake lines.
9. Verification
After applying the resolution, validate the integration end-to-end.
| Check | Pass criterion | How to verify |
|---|---|---|
| FTP upload | Generated script appears under /programs/ on the controller within 2 s of program run |
Refresh TMflow Project Explorer |
| Modbus write | Write Single Coil to start register succeeds, response time < 50 ms | Capture with Wireshark filter tcp.port == 502
|
| Listen node fires | TMflow flow advances past the Listen node | Watch the flow status indicator in TMflow |
| Robot executes | TCP moves through the planned waypoints | Vision of the robot, current draw on the drive module |
| Status feedback | RoboDK receives program-complete or program-error indicator within the driver timeout | RoboDK console log |
10. Advanced Troubleshooting Matrix
The matrix below consolidates diagnostic steps for field escalations. Apply it when the standard procedure does not resolve the fault.
| Observed fault | Diagnostic command | Expected good result | Remediation |
|---|---|---|---|
| FTP transfer times out | telnet <IP> 21 |
220 banner returned | Open TCP/21 in firewall; confirm FTP server enabled in TMflow |
| FTP login fails | Manual FTP login with the same credentials | 230 Login successful | Reset TMflow user password; re-enter into RoboDK station |
| Modbus connection refused | telnet <IP> 502 |
Connection opens | Enable Modbus TCP server in TMflow; check VLAN ACL |
| Modbus reads return illegal data address | Read register 0 from external client | 0 or current value | Match register address to Listen node configuration |
| Generated script references unknown variable | Inspect generated .cs
|
All variables defined in TMflow Set nodes | Add Set nodes; or remove references from the RoboDK station |
| Robot in Manual mode | TMflow toolbar | Mode indicator shows Auto | Switch to Auto; the Omron Remote post processor will not force the mode change |
| Safety stop latched | TMflow status panel | No stop indicator | Acknowledge stop in TMflow; check estop loop wiring |
| Driver references deprecated Python API | Run driver from a console | Stack trace points to robolink method |
Update RoboDK install to a build that exposes the API the driver uses |
| Intermittent failures only | Wireshark capture of TCP/21 and TCP/502 | No retransmits above baseline | Replace unmanaged switch; check duplex; replace patch cable |
| Program runs once, fails after restart | Check controller FTP root for leftover locks | No .lck or zero-byte files |
Enable TMflow housekeeping; confirm driver closes the FTP session |
11. Network and Security Hardening
Cells that go from lab to production need additional consideration. The Omron Remote post processor uses plaintext FTP and plaintext Modbus TCP, both of which expose credentials and command traffic on the wire.
- Segment the robot onto a private VLAN with the RoboDK PC and no other hosts.
- Disable inter-VLAN routing for TCP/21 and TCP/502 unless a remote operations dashboard explicitly needs it.
- Set TMflow user accounts to non-default passwords. The default TMflow user account is a known value; if it is left default, any host on the same VLAN can push programs.
- If the cell must cross an IT-managed network, terminate FTP at a jump host or wrap the traffic in an IPsec tunnel rather than enabling plain FTP across the WAN.
- Audit the
.rdkstation file location. The FTP password is stored in the station file in plain text; restrict NTFS permissions on the folder that contains it.
12. Compatibility and Version Notes
The Omron Remote post processor has evolved across RoboDK 5.x releases. The table below lists known behavior by release.
| RoboDK build | Behavior | Field action |
|---|---|---|
| 5.5.3 (initial report) | Driver raises an exception against newer TMflow builds | Apply the vendor-supplied post processor source update |
| 5.5.x post-fix daily build | FTP upload and Modbus handshake complete cleanly | No action beyond updating |
| 5.5.x with custom user edits | Edits are overwritten by an update | Maintain a local fork of the post processor source; document any divergence |
| 5.6.x and later | Driver updated against current robolink API |
Re-verify the integration after upgrade |
Always regenerate the driver Python file after any of the following: RoboDK upgrade, post processor replacement, TMflow upgrade, or TMflow Listen node reconfiguration. The driver captures the configuration at generation time; it does not re-read the TMflow settings at runtime.
13. Commissioning Checklist
- TMflow project contains a Listen node at the trigger register the post processor writes to.
- Modbus TCP server is enabled in TMflow.
- FTP server is reachable from RoboDK with the TMflow user account.
-
pingsucceeds with < 5 ms round-trip and 0% loss. - RoboDK post processor is the Remote variant, not the vanilla TM post processor.
- RoboDK version is the latest 5.5.x or later.
- Post processor source matches the vendor's latest (not a user-modified copy).
- Robot is in Auto mode and not in a latched safety stop.
- Drive robot generated script once and verify motion completes.
- Confirm RoboDK console reads program-complete status within the driver timeout.
14. Frequently Asked Questions
Why does RoboDK generate the program file but nothing appears on the TM5-900?
The file is generated locally on the RoboDK PC; the upload to the controller is a separate step performed by the Python driver. If the upload fails silently, validate FTP reachability with an independent client (FileZilla) using the same credentials before suspecting RoboDK. The usual culprits are a firewall blocking TCP/21 or TCP/20, an FTP password mismatch, or the controller being on a different subnet.
Which post processor do I select for an Omron TM5-900 in RoboDK?
Select the "Omron Remote" or "Omron-Tecman Remote" post processor. The standard "Omron" or "TM" post processor only emits TMflow script text; it does not perform the FTP upload or Modbus handshake, which is why programs generated with it never reach the robot when launched from RoboDK.
Does the Omron Remote post processor need a RoboDK driver running after the program starts?
Yes. The driver Python file generated alongside the TMflow script performs the FTP upload, writes the start register, and reads the status register. RoboDK must remain open and licensed for the duration of the robot program. Closing RoboDK mid-run will stop the handshake, although the robot will continue executing the TMflow project until it completes or faults.
What is the default Modbus register address used by the Omron Remote post processor?
The default is register 0 (coil 0) for start, register 1 (coil 1) for stop, and register 100 (holding) for status. The Listen node in TMflow must be configured to monitor the same address. If the project uses a different register, edit the post processor properties or the driver Python file before generating.
My integration worked yesterday and fails today. What changed?
The most common cause is a TMflow user account password change. Open the station in RoboDK, right-click the robot, open Properties → Connection, and update the FTP password to match the current TMflow account. Confirm the Listen node is still present in the TMflow project — projects can be replaced wholesale during a backup restore, which removes any custom Listen nodes.