It looks like the analog I/Os aren’t included in the realtime datastream?
I can’t install ur-rtde, so I would be happy to find an analog read example of any other (working) kind
It looks like the analog I/Os aren’t included in the realtime datastream?
I can’t install ur-rtde, so I would be happy to find an analog read example of any other (working) kind
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(1)
s.connect((HOST, 30003)) #30003
packet_1 = s.recv(4)
packet_2 = s.recv(8)
packet_3 = s.recv(48)
packet_4 = s.recv(48)
packet_5 = s.recv(48)
packet_6 = s.recv(48)
packet_7 = s.recv(48)
packet_81 = s.recv(8)
q1 = str(packet_81)
q1 = struct.unpack('!d', packet_81)[0]
packet_82 = s.recv(8)
q2 = str(packet_82)
q2 = struct.unpack('!d', packet_82)[0]
packet_83 = s.recv(8)
q3 = str(packet_83)
q3 = struct.unpack('!d', packet_83)[0]
packet_84 = s.recv(8)
q4 = str(packet_84)
q4 = struct.unpack('!d', packet_84)[0]
packet_85 = s.recv(8)
q5 = str(packet_85)
q5 = struct.unpack('!d', packet_85)[0]
packet_86 = s.recv(8)
q6 = str(packet_86)
q6 = struct.unpack('!d', packet_86)[0]
packet_9 = s.recv(48)
packet_10 = s.recv(48)
packet_11 = s.recv(48)
packet_12 = s.recv(48)
packet_13 = s.recv(48)
packet_14 = s.recv(48)
packet_15 = s.recv(48)
packet_16 = s.recv(48)
packet_170 = s.recv(8)
dI = str(packet_170)
dI = struct.unpack('!d', packet_170)[0]
print("DIGITAL INPUT")
dIint = int(dI)
print(bin(dIint))
print("")
packet_18 = s.recv(48)
packet_19 = s.recv(8)
packet_20 = s.recv(8)
packet_211 = s.recv(8)
robmod = str(packet_211)
robmod = struct.unpack('!d', packet_211)[0]
print("ROBOT MODE BITS")
robmodint = int(robmod)
print(bin(robmodint))
print("")
packet_22 = s.recv(48)
packet_23 = s.recv(8)
packet_24 = s.recv(48)
packet_25 = s.recv(24)
packet_26 = s.recv(48)
packet_27 = s.recv(8)
packet_28 = s.recv(8)
packet_29 = s.recv(8)
packet_30 = s.recv(8)
packet_31 = s.recv(8)
packet_32 = s.recv(8)
packet_33 = s.recv(8)
packet_34 = s.recv(48)
packet_350 = s.recv(8)
dO = str(packet_350)
dO = struct.unpack('!d', packet_350)[0]
print("DIGITAL OUTPUT")
dOint = int(dO)
print(bin(dOint))
packet_36 = s.recv(8)
packet_37 = s.recv(24)
packet_38 = s.recv(24)
x = q1*180/3.1415926536
y = q2*180/3.1415926536
z = q3*180/3.1415926536
rx = q4*180/3.1415926536
ry = q5*180/3.1415926536
rz = q6*180/3.1415926536
print("POSE: " + str(q1) + ", " + str(q2) + ", " + str(q3) + ", " + str(q4) + ", " + str(q5) + ", " + str(q6))
print("")
This works well but where are the Analog I/Os located?
This code uses port 30003 which is the old Matlab interface.
Analog IOs (masterboard or tool) are available in primary interface, you need to decode the masterboard data state message.
In your Excel file :
Thanks for your answer,
import socket
import struct
import sys
HOST = '169.254.63.28'
PORT = 30001
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.connect((HOST, PORT))
while 1:
data = s.recv(4096)
length_overall_package = (struct.unpack('!i', data[0:4]))[0]
robot_message_type = (struct.unpack('!B', data[4:5]))[0]
print("length_overall_package: " + str(length_overall_package))
print("robot_message_type: " + str(robot_message_type))
It is receiving message type 16 but how to decode analog state in ROBOT_STATE_
PACKAGE_TYPE_TOOL_DATA = 2
data = s.recv(4096)
i = 0
package_length = (struct.unpack('!i', data[0:4]))[0]
robot_msg_type = (struct.unpack('!B', data[4:5]))[0]
if robot_msg_type == 16:
while i + 5 < package_length:
length_sub_package = (struct.unpack('!i', data[5 + i:9 + i]))[0]
package_type = (struct.unpack('!B', data[9:10]))[0]
event.wait(0.2)
print("Package type")
print(package_type)
if package_type == 0:
sub_package = data[5:i + length_sub_package]
timestamp = struct.unpack('!Q', sub_package[5:13])[0]
robot_connected = struct.unpack('!?', sub_package[13:14])[0]
robot_enabled = struct.unpack('!?', sub_package[14:15])[0]
robot_on = struct.unpack('!?', sub_package[15:16])[0]
emergency_stop = struct.unpack('!?', sub_package[16:17])[0]
protective_stop = struct.unpack('!?', sub_package[17:18])[0]
program_running = struct.unpack('!?', sub_package[18:19])[0]
program_paused = struct.unpack('!?', sub_package[19:20])[0]
robot_mode = struct.unpack('!B', sub_package[20:21])[0]
control_mode = struct.unpack('!B', sub_package[21:22])[0]
print("Timestamp: " + str(timestamp))
print("Robot connected: " + str(robot_connected))
print("Robot enabled: " + str(robot_enabled))
print("Robot on: " + str(robot_on))
print("Emergency stop: " + str(emergency_stop))
print("Protective stop: " + str(protective_stop))
print("Program running: " + str(program_running))
print("Program paused: " + str(program_paused))
print("Robot mode: " + str(robot_mode))
print("Control mode: " + str(control_mode))
i = length_sub_package + i
So this works, but it never receives anything else than package_type 0, so where is the other data?