-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathrtde_read_digital_io.py
More file actions
75 lines (59 loc) · 2.21 KB
/
Copy pathrtde_read_digital_io.py
File metadata and controls
75 lines (59 loc) · 2.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
"""
RTDE - Read Digital I/O States
================================
Connect via RTDE and read the current state of all digital inputs
and digital outputs from the robot controller.
Uses the ActualDigitalInputBits and ActualDigitalOutputBits fields:
- Bits 0-7 : Standard digital I/O
- Bits 8-15 : Configurable digital I/O
- Bits 16-17: Tool digital I/O
Press Ctrl+C to stop continuous monitoring.
"""
import sys, os, time
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", ".."))
from underautomation.universal_robots.ur import UR
from underautomation.universal_robots.connect_parameters import ConnectParameters
from underautomation.universal_robots.rtde.rtde_output_data import RtdeOutputData
from examples import setup_license, get_robot_ip
print("=" * 60)
print(" UR SDK - RTDE: Read Digital I/O States")
print("=" * 60)
print("Press Ctrl+C to stop.\n")
setup_license()
robot_ip = get_robot_ip()
robot = UR()
params = ConnectParameters(robot_ip)
params.rtde.enable = True
params.rtde.frequency = 5 # 5 Hz is plenty for I/O monitoring
params.rtde.output_setup.add(RtdeOutputData.ActualDigitalInputBits, 0)
params.rtde.output_setup.add(RtdeOutputData.ActualDigitalOutputBits, 0)
params.rtde.output_setup.add(RtdeOutputData.ActualTcpPose, 0)
print(f"\nConnecting to {robot_ip} (RTDE @ 5 Hz)...")
robot.connect(params)
print("Connected! Monitoring I/O...\n")
last_inputs = None
last_outputs = None
last_tcp_pose = None
@robot.rtde.output_data_received
def on_data(sender, event):
global last_inputs, last_outputs
vals = robot.rtde.output_data_values
din = vals.actual_digital_input_bits # integer bitmask
dout = vals.actual_digital_output_bits # integer bitmask
tcp_pose = vals.actual_tcp_pose
last_inputs = din
last_outputs = dout
last_tcp_pose = tcp_pose
print(" Digital INPUTS (bits 0-17):", format(din or 0, "018b")[::-1][:18])
print(" Digital OUTPUTS (bits 0-17):", format(dout or 0, "018b")[::-1][:18])
print(" (read left-to-right = DI0..DI17 / DO0..DO17)")
print(" TCP POSE:", tcp_pose)
print()
try:
while True:
time.sleep(0.1)
except KeyboardInterrupt:
print("\nStopped by user.")
finally:
robot.disconnect()
print("Disconnected.")