Skip to content

Commit 60d0ea3

Browse files
committed
fix:1.blockly fixes errors in counter and mechanical claw controls;2.Add slide rail stop operation when error is reported;3.Blockly's modbus tcp control is changed to hexadecimal output
1 parent b4cef6a commit 60d0ea3

File tree

5 files changed

+43
-10
lines changed

5 files changed

+43
-10
lines changed

xarm/tools/blockly/_blockly_base.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -202,18 +202,19 @@ def _get_condition_expression(self, value_block, arg_map=None):
202202
cmd_li = re.sub('\s+', ' ', cmd_li)
203203
cmd_li = cmd_li.strip().split(' ')
204204
int_li = [int(da, 16) for da in cmd_li]
205-
return 'self._arm.getset_tgpio_modbus_data({}, host_id={})'.format(int_li, host_id)
205+
return '[data if isinstance(data, int) else [hex(da).split("0x")[1].upper().zfill(2) for da in data] for ' \
206+
'data in self._arm.getset_tgpio_modbus_data({}, host_id={})]'.format(int_li, host_id)
206207
elif block.attrib['type'] == 'get_gripper_status':
207208
fields = self._get_nodes('field', root=block)
208209
timeout = fields[0].text
209-
return '0 == self._arm.arm.check_gripper_status()[1]'
210+
return '0 == self._arm.arm.check_gripper_status()'
210211
elif block.attrib['type'] == 'get_ft_sensor':
211212
direction_li = ['Fx', 'Fy', 'Fz', 'Tx', 'Ty', 'Tz']
212213
fields = self._get_nodes('field', root=block)
213214
direction = fields[0].text
214215
return 'self._arm.get_joints_torque()[1][{}]'.format(direction_li.index(direction))
215216
elif block.attrib['type'] == 'get_counter':
216-
return 'self._arm.count()'
217+
return 'str(self._arm.count)'
217218

218219

219220
def __get_logic_compare(self, block, arg_map=None):

xarm/tools/blockly/_blockly_handler.py

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ def __init__(self, xml_path):
3434
self._cgpio_digital_callbacks = []
3535
self._cgpio_analog_callbacks = []
3636
self._count_callbacks= []
37+
38+
self.is_run_linear_track = False
3739

3840
def _append_init_code(self, code):
3941
self._init_code_list.append(code)
@@ -263,6 +265,33 @@ def _handle_move_cartesian_var(self, block, indent=0, arg_map=None):
263265
self._append_main_code('if not self._check_code(code, \'set_position\'):', indent + 2)
264266
self._append_main_code(' return', indent + 2)
265267

268+
def _handle_move_circle_var(self, block, indent=0, arg_map=None):
269+
values = self._get_nodes('value', root=block)
270+
percent = self._get_block_val(values[2], arg_map=arg_map)
271+
wait = self._get_block_val(values[3], arg_map=arg_map)
272+
if wait == 'TRUE' or wait == 'FALSE':
273+
wait = wait == 'TRUE'
274+
275+
pose1_block= self._get_node('block', root=values[0])
276+
pose1_nodes = self._get_nodes('value', root=pose1_block)
277+
pose1 = []
278+
for val_node in pose1_nodes:
279+
val = self._get_condition_expression(val_node, arg_map=arg_map)
280+
pose1.append(val)
281+
282+
pose2_block = self._get_node('block', root=values[1])
283+
pose2_nodes = self._get_nodes('value', root=pose2_block)
284+
pose2 = []
285+
for val_node in pose2_nodes:
286+
val = self._get_condition_expression(val_node, arg_map=arg_map)
287+
pose2.append(val)
288+
289+
pose1 = '[{}]'.format(', '.join(pose1))
290+
pose2 = '[{}]'.format(', '.join(pose2))
291+
self._append_main_code('code = self._arm.move_circle({}, {}, float({}) / 360 * 100, speed=self._tcp_speed, mvacc=self._tcp_acc, wait={})'.format(pose1, pose2, percent, wait), indent + 2)
292+
self._append_main_code('if not self._check_code(code, \'move_circle\'):', indent + 2)
293+
self._append_main_code(' return', indent + 2)
294+
266295
def _handle_move_axis_angle(self, block, indent=0, arg_map=None):
267296
fields = self._get_nodes('field', root=block)
268297
values = []
@@ -772,7 +801,7 @@ def __handle_count_event(self, count_type, block, indent=0, arg_map=None):
772801
self._count_callbacks.append(name)
773802
self._append_main_code(
774803
'self._count_callbacks.append({{\'trigger\': {}, \'op\': \'{}\', \'callback\': self.{}}})'.format(
775-
trigger, op, name), indent=indent + 2)
804+
trigger, '==' if op == '=' else op, name), indent=indent + 2)
776805

777806
def _handle_event_get_counter_condition(self, block, indent=0, arg_map=None):
778807
self.__handle_count_event('get_counter', block, indent, arg_map=arg_map)
@@ -1018,6 +1047,7 @@ def _handle_controls_if(self, block, indent=0, arg_map=None):
10181047
break
10191048

10201049
def _handle_set_line_track(self, block, indent=0, arg_map=None):
1050+
self.is_run_linear_track = True
10211051
fields = self._get_nodes('field', root=block)
10221052
if fields is None:
10231053
values = self._get_nodes('value', root=block)

xarm/tools/blockly/_blockly_tool.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -312,17 +312,17 @@ def __define_listen_count_thread_func(self):
312312
if self._listen_count or len(self._count_callbacks):
313313
self._append_main_init_code(' def _listen_count_thread(self):')
314314
if self._listen_count or len(self._count_callbacks):
315-
self._append_main_init_code(' values = self._arm.count()')
315+
self._append_main_init_code(' values = self._arm.count')
316316

317317
self._append_main_init_code(' while self.alive:')
318318

319-
self._append_main_init_code(' values = self._arm.count()')
319+
self._append_main_init_code(' values = self._arm.count')
320320
self._append_main_init_code(
321321
' if self._counter_val is not None and self._counter_val != values:')
322322
if self._listen_count or len(self._count_callbacks):
323323
self._append_main_init_code(' for item in self._count_callbacks:')
324324
self._append_main_init_code(
325-
' if eval(\'{} {} {}\'.format(values, item[\'op\'], item[\'trigger\'])) and not eval(\'{} {} {}\'.format(self._counter_val, item[\'op\'], item[\'trigger\'])):')
325+
' if eval(\'{} {} {}\'.format(values, item[\'op\'], item[\'trigger\'])) and not eval(\'{} {} {}\'.format(self._counter_val, item[\'op\'], item[\'trigger\'])):')
326326
self._append_main_init_code(' self._callback_que.put(item[\'callback\'])')
327327
self._append_main_init_code(' self._counter_val = values')
328328
self._append_main_init_code(' time.sleep(0.01)\n')
@@ -356,6 +356,8 @@ def __define_error_warn_changed_callback_func(self, error_exit=True):
356356
self._append_main_init_code(' if data and data[\'error_code\'] != 0:')
357357
self._append_main_init_code(' self.alive = False')
358358
self._append_main_init_code(' self.pprint(\'err={}, quit\'.format(data[\'error_code\']))')
359+
if self.is_run_linear_track:
360+
self._append_main_init_code(' self._arm.set_linear_track_stop()')
359361
self._append_main_init_code(' self._arm.release_error_warn_changed_callback(self._error_warn_changed_callback)\n')
360362

361363
def __define_state_changed_callback_func(self, stop_exit=True):

xarm/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '1.13.26'
1+
__version__ = '1.13.27'

xarm/x3/gripper.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,7 @@ def __check_gripper_position(self, target_pos, timeout=None):
425425
time.sleep(0.2)
426426
return code
427427

428-
def __check_gripper_status(self, timeout=None):
428+
def check_gripper_status(self, timeout=None):
429429
start_move = False
430430
not_start_move_cnt = 0
431431
failed_cnt = 0
@@ -486,7 +486,7 @@ def _set_modbus_gripper_position(self, pos, wait=False, speed=None, auto_enable=
486486
ret[0] = self._check_modbus_code(ret, only_check_code=True)
487487
if wait and ret[0] == 0:
488488
if self.gripper_is_support_status:
489-
return self.__check_gripper_status(timeout=timeout)
489+
return self.check_gripper_status(timeout=timeout)
490490
else:
491491
return self.__check_gripper_position(pos, timeout=timeout)
492492
return ret[0]

0 commit comments

Comments
 (0)