Firmware 5.9 parsing is added. (#113)

* Firmware 5.9 parsing is added.

* Delete .history/urx directory

* .history removed.

* Added a function to read a variable from the pendant.
This commit is contained in:
Byeongdulee 2023-06-15 14:49:46 -05:00 committed by GitHub
parent 00211834e2
commit e277ef1a7f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 52 additions and 2 deletions

1
.gitignore vendored
View File

@ -1,4 +1,5 @@
docs/_* docs/_*
build build
.idea/ .idea/
.history/
*.pyc *.pyc

View File

@ -1,8 +1,10 @@
''' '''
Module for implementing a UR controller real-time monitor over socket port 30003. Module for implementing a UR controller real-time monitor over socket port 30003.
Confer http://support.universal-robots.com/Technical/RealTimeClientInterface Confer http://support.universal-robots.com/Technical/RealTimeClientInterface
Note: The packet lenght given in the web-page is 740. What is actually received from the controller is 692. It is assumed that the motor currents, the last group of 48 bytes, are not send. Note: The packet lenght given in the web-page is 740. What is actually received from the controller is 692.
It is assumed that the motor currents, the last group of 48 bytes, are not send.
Originally Written by Morten Lind Originally Written by Morten Lind
Parsing for Firmware 5.9 is added by Byeongdu Lee
''' '''
import logging import logging
import socket import socket
@ -31,6 +33,7 @@ class URRTMonitor(threading.Thread):
rtstruct540 = struct.Struct('>d6d6d6d6d6d6d6d6d18d') rtstruct540 = struct.Struct('>d6d6d6d6d6d6d6d6d18d')
rtstruct5_1 = struct.Struct('>d1d6d6d6d6d6d6d6d6d6d6d6d6d6d6d1d6d1d1d1d6d1d6d3d6d1d1d1d1d1d1d1d6d1d1d3d3d') rtstruct5_1 = struct.Struct('>d1d6d6d6d6d6d6d6d6d6d6d6d6d6d6d1d6d1d1d1d6d1d6d3d6d1d1d1d1d1d1d1d6d1d1d3d3d')
rtstruct5_9 = struct.Struct('>d6d6d6d6d6d6d6d6d6d6d6d6d6d6d1d6d1d1d1d6d1d6d3d6d1d1d1d1d1d1d1d6d1d1d3d3d1d')
def __init__(self, urHost, urFirm=None): def __init__(self, urHost, urFirm=None):
threading.Thread.__init__(self) threading.Thread.__init__(self)
@ -56,6 +59,19 @@ class URRTMonitor(threading.Thread):
self._main_voltage = None self._main_voltage = None
self._robot_voltage = None self._robot_voltage = None
self._robot_current = None self._robot_current = None
self._qdTarget = None
self._qddTarget = None
self._iTarget = None
self._mTarget = None
self._qdActual = None
self._tcp_speed = None
self._tcp = None
self._robot_mode = None
self._joint_modes = None
self._digital_outputs = None
self._program_state = None
self._safety_status = None
self.__recvTime = 0 self.__recvTime = 0
self._last_ctrl_ts = 0 self._last_ctrl_ts = 0
# self._last_ts = 0 # self._last_ts = 0
@ -233,6 +249,8 @@ class URRTMonitor(threading.Thread):
if self.urFirm is not None: if self.urFirm is not None:
if self.urFirm == 5.1: if self.urFirm == 5.1:
unp = self.rtstruct5_1.unpack(payload[:self.rtstruct5_1.size]) unp = self.rtstruct5_1.unpack(payload[:self.rtstruct5_1.size])
if self.urFirm == 5.9:
unp = self.rtstruct5_9.unpack(payload[:self.rtstruct5_9.size])
else: else:
if pkgsize >= 692: if pkgsize >= 692:
unp = self.rtstruct692.unpack(payload[:self.rtstruct692.size]) unp = self.rtstruct692.unpack(payload[:self.rtstruct692.size])
@ -272,6 +290,20 @@ class URRTMonitor(threading.Thread):
self._robot_voltage = unp[122] self._robot_voltage = unp[122]
self._robot_current = unp[123] self._robot_current = unp[123]
if self.urFirm>= 5.9:
self._qdTarget = np.array(unp[7:13])
self._qddTarget = np.array(unp[13:19])
self._iTarget = np.array(unp[19:25])
self._mTarget = np.array(unp[25:31])
self._tcp_speed = np.array(unp[61:67])
self._joint_current = np.array(unp[49:55])
self._joint_voltage = np.array(unp[124:130])
self._robot_mode = unp[94]
self._joint_modes = np.array(unp[95:101])
self._digital_outputs = unp[130]
self._program_state = unp[131]
self._safety_status = unp[138]
if self._csys: if self._csys:
with self._csys_lock: with self._csys_lock:
# might be a godd idea to remove dependancy on m3d # might be a godd idea to remove dependancy on m3d
@ -337,14 +369,22 @@ class URRTMonitor(threading.Thread):
ctrltimestamp=self._ctrlTimestamp, ctrltimestamp=self._ctrlTimestamp,
qActual=self._qActual, qActual=self._qActual,
qTarget=self._qTarget, qTarget=self._qTarget,
qdActual=self._qdActual,
qdTarget=self._qdTarget,
tcp=self._tcp, tcp=self._tcp,
tcp_force=self._tcp_force, tcp_force=self._tcp_force,
tcp_speed=self._tcp_speed,
joint_temperature=self._joint_temperature, joint_temperature=self._joint_temperature,
joint_voltage=self._joint_voltage, joint_voltage=self._joint_voltage,
joint_current=self._joint_current, joint_current=self._joint_current,
joint_modes=self._joint_modes,
robot_modes=self._robot_mode,
main_voltage=self._main_voltage, main_voltage=self._main_voltage,
robot_voltage=self._robot_voltage, robot_voltage=self._robot_voltage,
robot_current=self._robot_current) robot_current=self._robot_current,
digital_outputs=self._digital_outputs,
program_state=self._program_state,
safety_status=self._safety_status)
getALLData = get_all_data getALLData = get_all_data
def stop(self): def stop(self):

View File

@ -142,6 +142,15 @@ class URScript(object):
self.add_line_to_program(msg) self.add_line_to_program(msg)
self._sync() self._sync()
def _socket_get_var2var(self, var, varout, socket_name, prefix = ''):
msg = "{}{} = socket_get_var(\"{}\",\"{}\")".format(prefix, varout, var, socket_name)
self.add_line_to_program(msg)
def _socket_send_byte(self, byte, socket_name):
msg = "socket_send_byte(\"{}\",\"{}\")".format(str(byte), socket_name) # noqa
self.add_line_to_program(msg)
self._sync()
def _sync(self): def _sync(self):
msg = "sync()" msg = "sync()"
self.add_line_to_program(msg) self.add_line_to_program(msg)