Posts by paranoidandroid

    Hey RF Nerds,

    I've been in chats w/ Motoman about trying to get better synchronous data transfer to/from the DX200 robot controller and my PLC (Siemens S7-1500 in this case). They have two manuals available, one for AB / Ethernet/IP and one for Siemens / PROFINET (I'll attach both below).

    My program structure:

    - MASTER.JBI, called by the PLC at program init. Runs DATAXFER.JBI once at job init to synchronize data w/ the PLC (bits/bytes happen synchronously, have to turn these into ints/doubles/reals for the robot with some math)

    - Job calls are issued by a switch-case in MASTER.JBI given a program number and a permissive bit from the PLC

    - Data is re-sync'ed with DATAXFER.JBI each time something changes (counters, positions, offsets, etc).

    The issue:

    - DATAXFER.JBI takes ~1 second to run, which adds up over time when running many different job calls. Would like to find a way to synchronously update variables on the DX200 controller side the same way that bits/bytes are updated on the CP1616 card.

    Allegedly there's a way to do this with explicit message communication, but Yaskawa's documentation isn't great for Siemens support (more geared towards AB).

    Anyone have any experience setting this up, or had success in getting messages to write to variables directly on the DX200 controller? Any advice would be greatly appreciated.



    Great. Got off the phone w/ Motoman as well, and they reiterated the same.


    Re: Fabian's warning, use this code at your own risk. I'm not responsible if you clobber your controllers, so please do be sure you know what you're doing before you start pushing files around.

    Some preliminary info:

    - You'll need both the xlrd and the pandas libraries for this code to work. I've been doing development in the Anaconda IDE, but whatever interface you choose to use should work. Tutorials on how to install those libraries are available on the internet.

    - So far, this runs on the DX200 controllers I've worked on. No idea if it will work with others, but would be great to hear some feedback.

    - I'm happy to work w/ collaborators (just reach out to me on GitHub). I have main restricted to pull requests only.

    - Right now, I only have code working for VARNAME.DAT, with things in work for IONAME.DAT and EXIONAME.DAT. If you have suggestions, ping me here or on GitHub.

    GitHub - alfacharliekilo/Yaskawa-Motoman: Code repository for Yaskawa Motoman projects
    Code repository for Yaskawa Motoman projects. Contribute to alfacharliekilo/Yaskawa-Motoman development by creating an account on GitHub.

    Happy parsing...

    Thanks, seems like I had some duplicate P-VAR names hiding, regex to the rescue!

    To the mods: is there any issue sharing in-house developed (i.e. NOT Yaskawa IP) utilities for *.DAT file parsing? I've got a GitHub repo I'd like to share that parses VARNAME.DAT (soon to follow w/ others) based on the Motoman CDS sheets. Provided there's no issue here, I'll provide a GitHub link.

    Hey Yaskawa RF,

    I've been tinkering with a DX200 controller for a bit now, and am starting to build some tools to make the process of building IO and VARNAME.DAT files a little simpler. Been manually manipulating these files in NP++, and have found a couple of the following:

    1. The files MUST be terminated with both a carriage return followed by line feed (\r \n) for the Motoman compiler to work correctly.

    2. Make sure you're mapping correctly. I've mainly been doing this with the CDS sheet that Yaskawa provides during onsite commissioning (excel spreadsheet).

    Anyway, has anyone run into a "ERROR 0722: It is already registered for Variable name" before? I've been trying to troubleshoot why VARNAME.DAT won't read back into the controller, keeps tripping this error code when trying to load into the robot. It might be a parameter setting (mapping variable registers to variable names, I need to look up which one this is, will edit w/ that info.)

    Following up. I understand what your feedback is now Robodoc. Just got finished working with Motoman technical support.

    For clarity, this is from their troubleshooting:


    Some customers report that the IP address is lost at power cycle or some other conditions. When looking at the card in TIA Portal or other Siemens software the IP address will show as


    Our suggestion to save the IP Address as follows:

    1.       Start the YRC1000 or DX200 in “Maintenance Mode”

    2.       Once fully booted set the IP address again from the Siemens software.

    3.       This will put the CP1616 board into a mode which it can save the setting properly.

    4.       No settings within the robot controller itself need to be set or changed.

    5.       Cycle power to the robot controller.

    One additional countermeasure - if you have the TIA-project for the CP1616 you can execute the “factory reset” first and load the TIA-project again.

    Happy programming...


    Following up on this thread.

    Seeing a similar issue, but not during normal operation. This only happens when I disconnect the programming pendant (using the disconnect option with long-pressing the simple menu button).

    Any thoughts on what might be happening here?

    Hey Motoman RF,

    Is anyone dealt with the issue of the CP1616 dropping the static IP address if the controller is shut off? I can go and re-assign with PRONETA or TIA Portal after the fact and re-establish connection but this would prove problematic if we lose power at the plant and have to re-assign IPs to EVERY robot controller after.

    Suggestions? Haven't been able to find anything in the PROFINET documentation from Motoman just yet.



    Hey RF,

    Anyone run into issues with the DX200's functional safety board when it comes to the FSBOUT signals? I have alarms 4772 (for outputs 1 and 2), 4768 (for output 2), and 4923 (for output 1) faulting on startup.

    I've tried clearing alarms (4772 persists), resetting in maintenance mode, and loading a previous backup. None of these seem to clear the issue. Is it possible the CN220 card is hosed?

    Any recommendations from folks that have dealt with this before would be appreciated. I'll follow up as I get details from Motoman.


    After doing some more manual reading, turns out modifying S2C430 solves my problem.

    Setting the parameter to 2 makes it work in my case. Woo. ;)

    Following up on this, tracking a similar issue on a DX200 controller, MH50-II robot.

    Running a palletizing operation with a pounce point above the pallet, locations are calculated based on counter integers provided by the PLC.

    When working with KUKA, I used to manage this problem by just using a MOVL move instead of a MOVJ (KUKA disregards the "status" and "turn" i.e. robot orientation for MOVL moves). It doesn't appear that it works the same way with Motoman. On this edge case, the robot tries to reorient because the location at C0 has a T orientation <180 degrees. The placement point has a T orientation > 180 degrees.

    Providing a snippet of code below. Am I able to accomplish this with the code I have, or so I need to use a SFTON / SFTOF command? For reference, the D[ ] variables are positions provided by the PLC, I[ ] variables are counters provided by the PLC. D[30] - D[32] are placeholder variables so I can move things into my position buffer P[30]. I know the orientations for X, Y, and Z are correct as I'm able to get 99% of my pallet stacked with this code. Just a weird edge case I'm trying to account for.

    Helpful, thank you.

    As a rule of thumb, what do you use to get jobs (or other parameters) between a controller and simulation/offline? The onsite Yaskawa application tech suggested just using USB on the pendant. 90s much? ;(

    I'm coming from the KUKA world (I never thought I'd say I missed Workvisual, but here I am...), and I'm used to being able to push/pull over ethernet without an issue.

    Seems like I'm having a similar problem (MotoSim EG-VRC 2018). I tried to save via Job Pad and push to a live controller via Ethernet. MotoSim crashed and now I can't move jobs between my live and simulated controller. Great software! :S

    What's the best way to recover? I have a CMOS.bin I can pull from the live DX200 controller (there's no CMOS.bin I can see from the MotoSim backups), but I need the user frames, tool interference, etc from the simulation.

    Hello RF Yaskawans...

    Robot: MH-50

    Controller: DX200

    FieldBus: Siemens Profinet

    Safety Fieldbus: DX200 FSU interface (no safe ethernet)

    Traditionally trained KUKA robot integrator/programmer, making the hop over and getting some experience integrating PLCs with Yaskawa's DX200 robot controller and a Siemens S7-1500 PLC. Planning on using the FSU board on the DX200 for safety monitoring (e-stops, doors), along with some axis monitoring due to the tight space we've got the robot installed. Pretty standard fare for a robot integration project.

    So, the question is related to job selection with Yaskawa robots. I've familiarized myself with the INFORM language (similar to KRL, since they both operate w/ a VxWorks RTOS), but I'm not quite certain how the PLC interface is expected to work with these robots, and have yet to find good documentation that talks about the process.

    For example, with KUKA, this is mainly accomplished with the CELL.SRC file along with a submit interpreter (cyclic background program) that acts as a listener for the PLC. Once jobs get dispatched from the PLC, they get passed into the CELL.src file and triggers a SWITCH-CASE, ultimately controlling the job selection. I'm looking at around 50 to 100 jobs for this particular application, so I need to get a firm understanding on how INFORM / Yaskawa robots manage these signals. I'm more asking how the Yaskawa manages the cyclic scanning of incoming bits from the PLC, less so HOW those bits are mapped.

    After configuring the PLC / mapping your I/Os (setup two DINTs for my 64 PLC-to-Robot input/output booleans, along with a handful of other ints for robot tools, bases, and program numbers), my limited understanding is:

    1. Change the robot over to "Remote" mode

    2. Start the "scanning" program and scan for program numbers. Accept a program number once dispatched by the PLC

    3. Select the correct program based on a SWITCH-CASE, execute subroutine (is it a JUMP case with Yaskawa?)

    4. Execute, and report program status (zones clear, gripper states, etc) via ProfiNET.

    Found this RF link, would love some more information in parallel to this. Potentially from Yaskawa's page, not sure what this would be under.

    Switch case instruction

    Thanks in advance,


    KSS: 8.5.8

    Robot: Various

    Referring to this old thread that massula started about 5 years back, curious if there's been any follow up? (Source: KRC4 system messages manual)

    Working on passing messages over TCP with the KRmsgNET TP. The following is a snippet from KRmsgNETSettings.xml, along with a comment for what the XML allows as far as customization. As you can tell, there's no option for message "severity" or importance. Best I see is %MessageType, which is not very granular.

    Alternatively, there's the MBX_REC command. Documentation on this is... limited. Any pointers on what this function does, beyond the function definition EXTFCTP INT MBX_REC(INT MBX_ID :IN,STOPMESS MESS :OUT) from $OPERATE.DAT and $OPERATE_2.DAT? (source: KRC4 list of functions and subprograms)

    Wasn't able to find this specific XML, but I see what you're recommending.

    I did try playing around with C:\KRC\SmartHMI\Config\Authorization.xml, which gives the same user mode levels from 5 to 30. However, this didn't quite do as expected. Modified both "#ExpertProgrammer" and "#Administrator" values between 20 and 30, all it really seemed to do was make these options disappear from the user menu...

    However, I found another interesting workaround.

    From C:\KRC\UTIL\RuntimeTests, there is a DLL and config file that will allow a logging function to pop up on the SmartHMI.

    Copy/paste these files into both C:\KRC\SmartHMI and C:\KRC\SmartHM\Config, and you'll force the HMI to display a logging function on the bottom of the HMI. Will require a reboot w/ file reload, which you can force if you "Restore" a previous KUKA project. Just make sure you back up / image before doing so.

    From there, you'll be able to get into the desktop and use Start > Administrative Tools > Computer Management to reset the password.