Yaskawa Communication SDK for Python
🤖 Effortlessly Communicate with Yaskawa Motoman Robots
The Yaskawa SDK for Python enables seamless integration with Yaskawa Motoman robots for automation, data exchange, and remote control through the High-Speed Ethernet Server (HSES) protocol.
Whether you're building a custom application, integrating with a MES/SCADA system, or performing advanced diagnostics, this SDK provides the tools you need.
🔗 More Information: https://underautomation.com/yaskawa
🔗 Also available in 🟦 .NET and 🟨 LabVIEW
⭐ Star this repo if it's useful to you!
👁️ Watch for updates
🚀 TL;DR
- 📡 High-Speed Ethernet Server - real-time UDP communication
- 🤖 Move robot in Cartesian or joint space
- 📊 Read robot status - mode, servo, alarms, hold state
- 🔔 Alarm management - read active alarms, reset
- ⚡ I/O control - read/write general, external, network I/O
- 💾 Variable access - registers, bytes, integers, reals, strings, positions
- 🧠 Job control - select, start, monitor executing jobs
- 📂 File management - list, upload, download, delete files
- ✍️ Pendant display - send messages to the teach pendant
- ⏱️ Management time - operating time, servo time, playback time
- 🔧 System information - software version, configuration, parameters
No custom robot options or additional hardware required. The SDK uses the standard HSES protocol available on Yaskawa controllers.
🛠 Installation & Getting Started
Prerequisites
- Python 3.7 or higher
- A Yaskawa Motoman robot (DX200, YRC1000, YRC1000 Micro)
Step 1 - Create a Virtual Environment
We recommend using a virtual environment to keep your project dependencies isolated.
# Create a project folder
mkdir my-yaskawa-project
cd my-yaskawa-project
# Create a virtual environment
python -m venv venv
# Activate it
# On Windows:
venv\Scripts\activate
# On macOS/Linux:
source venv/bin/activate
You should see (venv) in your terminal prompt, indicating the virtual environment is active.
Step 2 - Install the SDK
The SDK is published on PyPI. Install it with a single command:
pip install UnderAutomation.Yaskawa
That's it! All dependencies (including pythonnet) are installed automatically.
On Linux, you should also install .NET Core and set environment variable PYTHONNET_RUNTIME to coreclr:
sudo apt-get install -y dotnet-runtime-8.0
PYTHONNET_RUNTIME=coreclr
Alternative: install from source
git clone https://github.com/underautomation/Yaskawa.py.git cd Yaskawa.py pip install -e .
Step 3 - Connect to Your Robot
Create a Python file (e.g. main.py) and write:
from underautomation.yaskawa.yaskawa_robot import YaskawaRobot
from underautomation.yaskawa.connect_parameters import ConnectParameters
from underautomation.yaskawa.high_speed_e_server.alarm_reset_type import AlarmResetType
# Create a robot instance
robot = YaskawaRobot()
# Connect (replace with your robot's IP address)
params = ConnectParameters("192.168.0.1")
params.ping_before_connect = True
# Connect to the robot
# If you get a license exception, ask a trial license here: https://underautomation.com/license
# and call YaskawaRobot.register_license(...) before connecting
robot.connect(params)
if robot.high_speed_e_server.connected:
print("Connected!")
# Get robot status
status = robot.high_speed_e_server.get_status_information()
print(f" Servo ON : {status.servo_on}")
print(f" Running : {status.running}")
print(f" Mode : {'Teach' if status.teach else 'Play'}")
print(f" Alarming : {status.alarming}")
# Get current Cartesian position
pos = robot.high_speed_e_server.get_robot_cartesian_position()
print(f"\nCartesian Position:")
print(f" X={pos.x:.3f} Y={pos.y:.3f} Z={pos.z:.3f}")
print(f" Rx={pos.rx:.3f} Ry={pos.ry:.3f} Rz={pos.rz:.3f}")
# Get current joint position
joint = robot.high_speed_e_server.get_robot_joint_position()
print(f"\nJoint Position: {joint.axes}")
# Read registers
reg = robot.high_speed_e_server.read_register(0, count=5)
for i, val in enumerate(reg.value, start=0):
print(f" Register[{i}] = {val}")
# Write registers
robot.high_speed_e_server.write_register(0, [100, 200])
# Reset alarms
robot.high_speed_e_server.alarm_reset(AlarmResetType.Reset)
# Don't forget to disconnect
robot.disconnect()
Run it:
python main.py
🔑 Licensing
The SDK works out of the box for 30 days (trial period) - no registration needed.
After the trial, you can:
- Buy a license at underautomation.com/order
- Get a new trial period immediately by email at underautomation.com/license
To register a license in code:
from underautomation.yaskawa.yaskawa_robot import YaskawaRobot
license_info = YaskawaRobot.register_license("your-licensee", "your-license-key")
print(license_info)
📂 Examples
The repository includes a complete set of ready-to-run examples in the examples/ folder, organized by category.
How the Examples Work
| File | Role |
|---|---|
examples/launcher.py |
Interactive menu - browse and run any example from a single launcher |
examples/__init__.py |
Shared helpers - sets up the Python path, manages robot connection settings, and handles license registration |
examples/robot_config.json |
Saved settings (git-ignored) - remembers your robot IP and license key so you don't have to re-enter them every time |
Run any example directly:
The first time you run an example, it will ask for your robot IP. This is saved in
robot_config.jsonso you only enter it once.
# Run any example directly
python examples/high_speed_e_server/hses_get_status.py
Or browse examples with the launcher:
Use the launcher to easily browse and run any example without needing to open each file.
# Launch the interactive menu
python examples/launcher.py
📡 High Speed Ethernet Server Examples
| Example | Description |
|---|---|
hses_get_status.py |
Read robot status: mode, servo, alarms, hold state |
hses_get_cartesian_position.py |
Read current TCP position (X, Y, Z, Rx, Ry, Rz) |
hses_get_joint_position.py |
Read current joint position (pulse values) |
hses_read_alarms.py |
Read active alarms with code, type, and message |
hses_alarm_reset.py |
Reset alarms (standard or error reset) |
hses_get_executing_job.py |
Get currently executing job name, line, and speed |
hses_select_start_job.py |
Select a job by name and start it |
hses_read_write_registers.py |
Read and write numeric registers |
hses_read_write_integers.py |
Read and write integer variables |
hses_read_write_reals.py |
Read and write real (float) variables |
hses_read_write_bytes.py |
Read and write byte variables |
hses_read_write_strings.py |
Read and write string variables (16 & 32 bytes) |
hses_read_write_io.py |
Read and write I/O signals (general, external, network) |
hses_read_write_position_variables.py |
Read and write position variables (P variables) |
hses_move_cartesian.py |
Move robot to a Cartesian position |
hses_move_joints.py |
Move robot by specifying joint pulse values |
hses_servo_command.py |
Send servo ON/OFF commands |
hses_display_message.py |
Display a message on the teach pendant |
hses_get_system_info.py |
Read system information (software version, name) |
hses_position_error_torque.py |
Read position error and torque for each axis |
hses_file_operations.py |
List, download, upload, and delete files |
🔑 License Examples
| Example | Description |
|---|---|
license_info_example.py |
Display license state and details, handle registration |
🔧 Robot Configuration
Some features require specific controller settings.
✅ Enable Remote Control
- Go to
IN/OUT > PSEUDO INPUT SIGNAL - Set
#82015 CMD REMOTE SELviaINTERLOCK + SELECT
✅ Key Position for Commands
- Use physical pendant key in remote position
- Optional Ladder setup: copy
#80011to#40042
✅ Job Select
- Go to
SETUP > FUNCTION ENABLE - Set
JOB SELECT WHEN REMOTE AND PLAYtoPERMIT
✅ File Overwrite Permissions
- Go to
PARAMETER > RS - Set
RS029 = 1,RS214 = 1
🔍 Compatibility
| Supported | |
|---|---|
| Robot Controllers | DX200, YRC1000, YRC1000 Micro |
| OS | Windows, Linux, macOS |
| Python | 3.7+ |
| Dependency | pythonnet 3.0.5 (installed automatically) |
📢 Contributing
We welcome your feedback and contributions!
- Report issues via GitHub Issues
- Submit pull requests with enhancements
- Suggest features and improvements
📜 License
⚠️ This SDK requires a commercial license.
- 🆓 30-day free trial included out of the box
- 🔄 Get a new trial immediately at underautomation.com/license
- 🛒 Buy a license at underautomation.com/yaskawa
- 📄 EULA: underautomation.com/yaskawa/eula
📬 Need Help?
- 📖 Documentation: underautomation.com/yaskawa/documentation
- 🐍 Python Get Started Guide: underautomation.com/yaskawa/documentation/get-started-python
- 📦 PyPI Package: pypi.org/project/UnderAutomation.Yaskawa
- 📩 Contact Us: underautomation.com/contact
Release files for UnderAutomation.Yaskawa 2.2.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| underautomation_yaskawa-2.2.0.1.tar.gz | 71.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| underautomation_yaskawa-2.2.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 177.4 kB
Release files / underautomation_yaskawa-2.2.0.1.tar.gz
| Download URL | underautomation_yaskawa-2.2.0.1.tar.gz |
|---|---|
| Size | 71.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
595e2e6282af8868be75a3f4d3b51d8579b923d465eda41b0335467721c06231
|
|
BLAKE2b-256 checksum How to use checksums |
33715079238ee047799800ab3a812777059f45a2360732412a8969707c848824
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.25
|
Release files / underautomation_yaskawa-2.2.0.1-py3-none-any.whl
| Download URL | underautomation_yaskawa-2.2.0.1-py3-none-any.whl |
|---|---|
| Size | 106.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
47e6591331ce94b2314a126d426f5d29f5c0d2fbb416541960e68d9a842f89f8
|
|
BLAKE2b-256 checksum How to use checksums |
67a10fc6f69bc900c0114a97b72f60726050f3ff793b6002bca6f7a13a0ab71a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.25
|