xarm-python-sdk 1.15.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. xarm/__init__.py +2 -0
  2. xarm/build_backend.py +17 -0
  3. xarm/core/__init__.py +2 -0
  4. xarm/core/comm/__init__.py +5 -0
  5. xarm/core/comm/base.py +303 -0
  6. xarm/core/comm/serial_port.py +44 -0
  7. xarm/core/comm/socket_port.py +150 -0
  8. xarm/core/comm/uxbus_cmd_protocol.py +100 -0
  9. xarm/core/config/__init__.py +0 -0
  10. xarm/core/config/x_code.py +1427 -0
  11. xarm/core/config/x_config.py +553 -0
  12. xarm/core/utils/__init__.py +3 -0
  13. xarm/core/utils/convert.py +124 -0
  14. xarm/core/utils/crc16.py +76 -0
  15. xarm/core/utils/debug_print.py +21 -0
  16. xarm/core/utils/log.py +98 -0
  17. xarm/core/version.py +1 -0
  18. xarm/core/wrapper/__init__.py +11 -0
  19. xarm/core/wrapper/uxbus_cmd.py +1457 -0
  20. xarm/core/wrapper/uxbus_cmd_ser.py +94 -0
  21. xarm/core/wrapper/uxbus_cmd_tcp.py +305 -0
  22. xarm/tools/__init__.py +0 -0
  23. xarm/tools/blockly/__init__.py +1 -0
  24. xarm/tools/blockly/_blockly_base.py +416 -0
  25. xarm/tools/blockly/_blockly_handler.py +1338 -0
  26. xarm/tools/blockly/_blockly_highlight.py +94 -0
  27. xarm/tools/blockly/_blockly_node.py +61 -0
  28. xarm/tools/blockly/_blockly_tool.py +480 -0
  29. xarm/tools/blockly_tool.py +1864 -0
  30. xarm/tools/gcode.py +90 -0
  31. xarm/tools/list_ports.py +39 -0
  32. xarm/tools/modbus_tcp.py +205 -0
  33. xarm/tools/threads.py +30 -0
  34. xarm/tools/utils.py +36 -0
  35. xarm/version.py +1 -0
  36. xarm/wrapper/__init__.py +1 -0
  37. xarm/wrapper/studio_api.py +34 -0
  38. xarm/wrapper/xarm_api.py +4416 -0
  39. xarm/x3/__init__.py +2 -0
  40. xarm/x3/base.py +2638 -0
  41. xarm/x3/base_board.py +198 -0
  42. xarm/x3/code.py +62 -0
  43. xarm/x3/decorator.py +104 -0
  44. xarm/x3/events.py +166 -0
  45. xarm/x3/ft_sensor.py +264 -0
  46. xarm/x3/gpio.py +457 -0
  47. xarm/x3/grammar_async.py +21 -0
  48. xarm/x3/grammar_coroutine.py +24 -0
  49. xarm/x3/gripper.py +830 -0
  50. xarm/x3/modbus_tcp.py +84 -0
  51. xarm/x3/parse.py +110 -0
  52. xarm/x3/record.py +216 -0
  53. xarm/x3/report.py +204 -0
  54. xarm/x3/robotiq.py +220 -0
  55. xarm/x3/servo.py +485 -0
  56. xarm/x3/studio.py +138 -0
  57. xarm/x3/track.py +424 -0
  58. xarm/x3/utils.py +43 -0
  59. xarm/x3/xarm.py +1928 -0
  60. xarm_python_sdk-1.15.2.dist-info/METADATA +103 -0
  61. xarm_python_sdk-1.15.2.dist-info/RECORD +63 -0
  62. xarm_python_sdk-1.15.2.dist-info/WHEEL +4 -0
  63. xarm_python_sdk-1.15.2.dist-info/licenses/LICENSE +27 -0
xarm/x3/track.py ADDED
@@ -0,0 +1,424 @@
1
+ # -*- coding: utf-8 -*-
2
+ # __author: rock
3
+ # @time: 2021-07-19
4
+
5
+ import time
6
+ from ..core.config.x_config import XCONF
7
+ from ..core.utils.log import logger
8
+ from ..core.utils import convert
9
+ from .code import APIState
10
+ from .gpio import GPIO
11
+ from .decorator import xarm_is_connected, xarm_wait_until_not_pause, xarm_is_not_simulation_mode
12
+
13
+
14
+ class Track(GPIO):
15
+
16
+ def __init__(self):
17
+ super(Track, self).__init__()
18
+ self._linear_track_status = {
19
+ 'pos': 0,
20
+ 'status': 0,
21
+ 'error': 0,
22
+ 'is_enabled': 0,
23
+ 'on_zero': 0,
24
+ 'sci': 1,
25
+ 'sco': [0, 0],
26
+ }
27
+
28
+ @property
29
+ def linear_track_status(self):
30
+ return self._linear_track_status
31
+
32
+ @property
33
+ def linear_track_error_code(self):
34
+ return self._linear_track_status['error']
35
+
36
+ @linear_track_error_code.setter
37
+ def linear_track_error_code(self, val):
38
+ self._linear_track_status['error'] = val
39
+
40
+ def _get_linear_track_registers(self, addr, number_of_registers=1):
41
+ code = self.checkset_modbus_baud(self._default_linear_track_baud, host_id=XCONF.LINEER_TRACK_HOST_ID)
42
+ if code != 0:
43
+ return code, []
44
+ ret = self.arm_cmd.track_modbus_r16s(addr, number_of_registers)
45
+ ret[0] = self._check_modbus_code(ret, length=5 + 2 * number_of_registers, host_id=XCONF.LINEER_TRACK_HOST_ID)
46
+ return ret[0], ret[1:]
47
+
48
+ @xarm_is_connected(_type='get')
49
+ @xarm_is_not_simulation_mode(ret=(0, []))
50
+ def get_linear_track_registers(self, addr=0x0A20, number_of_registers=8):
51
+ assert (addr == 0x0A20 and number_of_registers >= 2) \
52
+ or (0x0A22 <= addr <= 0x0A27 and number_of_registers >= 1), \
53
+ 'parameters error, only support (addr == 0x0A20 and number_of_registers >= 2) ' \
54
+ 'or (0x0A22 <= addr <= 0x0A27 and number_of_registers >= 1)'
55
+ code, data = self._get_linear_track_registers(addr, number_of_registers=number_of_registers)
56
+ if code == 0:
57
+ if addr == 0x0A20 and number_of_registers >= 2:
58
+ self._linear_track_status['pos'] = round(convert.bytes_to_long_big(data[4:8]) / 2000)
59
+ if 0x0A22 - number_of_registers < addr <= 0x0A22:
60
+ start_inx = (0x0A22 - addr) * 2 + 4
61
+ self._linear_track_status['status'] = convert.bytes_to_u16(data[start_inx:start_inx+2])
62
+ if 0x0A23 - number_of_registers < addr <= 0x0A23:
63
+ start_inx = (0x0A23 - addr) * 2 + 4
64
+ self._linear_track_status['error'] = convert.bytes_to_u16(data[start_inx:start_inx+2])
65
+ if 0x0A24 - number_of_registers < addr <= 0x0A24:
66
+ start_inx = (0x0A24 - addr) * 2 + 4
67
+ self._linear_track_status['is_enabled'] = convert.bytes_to_u16(data[start_inx:start_inx+2]) & 0x01
68
+ self.linear_track_is_enabled = self._linear_track_status['is_enabled'] == 1
69
+ if 0x0A25 - number_of_registers < addr <= 0x0A25:
70
+ start_inx = (0x0A25 - addr) * 2 + 4
71
+ self._linear_track_status['on_zero'] = convert.bytes_to_u16(data[start_inx:start_inx+2]) & 0x01
72
+ if 0x0A26 - number_of_registers < addr <= 0x0A26:
73
+ start_inx = (0x0A26 - addr) * 2 + 4
74
+ self._linear_track_status['sci'] = convert.bytes_to_u16(data[start_inx:start_inx+2]) >> 1 & 0x01
75
+ if 0x0A27 - number_of_registers < addr <= 0x0A27:
76
+ start_inx = (0x0A27 - addr) * 2 + 4
77
+ sco = convert.bytes_to_u16(data[start_inx:start_inx+2])
78
+ self._linear_track_status['sco'][0] = sco & 0x01
79
+ self._linear_track_status['sco'][1] = sco >> 1 & 0x01
80
+ return code, self._linear_track_status
81
+
82
+ def get_linear_track_pos(self):
83
+ code, _ = self.get_linear_track_registers(addr=0x0A20, number_of_registers=2)
84
+ return code, self._linear_track_status['pos']
85
+
86
+ def get_linear_track_status(self):
87
+ code, _ = self.get_linear_track_registers(addr=0x0A22, number_of_registers=1)
88
+ return code, self._linear_track_status['status']
89
+
90
+ def get_linear_track_error(self):
91
+ code, _ = self.get_linear_track_registers(addr=0x0A23, number_of_registers=1)
92
+ return code, self._linear_track_status['error']
93
+
94
+ def get_linear_track_is_enabled(self):
95
+ code, _ = self.get_linear_track_registers(addr=0x0A24, number_of_registers=1)
96
+ return code, self._linear_track_status['is_enabled']
97
+
98
+ def get_linear_track_on_zero(self):
99
+ code, _ = self.get_linear_track_registers(addr=0x0A25, number_of_registers=1)
100
+ return code, self._linear_track_status['on_zero']
101
+
102
+ def get_linear_track_sci(self):
103
+ code, _ = self.get_linear_track_registers(addr=0x0A26, number_of_registers=1)
104
+ return code, self._linear_track_status['sci']
105
+
106
+ def get_linear_track_sco(self):
107
+ code, _ = self.get_linear_track_registers(addr=0x0A27, number_of_registers=1)
108
+ return code, self._linear_track_status['sco']
109
+
110
+ @xarm_is_connected(_type='set')
111
+ @xarm_is_not_simulation_mode(ret=(0, []))
112
+ def set_linear_track_enable(self, enable):
113
+ code = self.checkset_modbus_baud(self._default_linear_track_baud, host_id=XCONF.LINEER_TRACK_HOST_ID)
114
+ if code != 0:
115
+ return code
116
+ value = convert.u16_to_bytes(int(enable))
117
+ ret = self.arm_cmd.track_modbus_w16s(XCONF.ServoConf.CON_EN, value, 1)
118
+ ret[0] = self._check_modbus_code(ret, length=8, host_id=XCONF.LINEER_TRACK_HOST_ID)
119
+ # get_status: error, is_enable, on_zero
120
+ code2, status = self.get_linear_track_registers(addr=0x0A23, number_of_registers=3)
121
+ if ret[0] == 0 and self._linear_track_status['error'] == 0 and enable:
122
+ self.linear_track_is_enabled = self._linear_track_status['is_enabled'] == 1
123
+ else:
124
+ self.linear_track_is_enabled = False
125
+ self.log_api_info('API -> set_linear_track_enable(enable={}) -> code1={}, code2={}, err={}, enabled={}, zero={}'.format(
126
+ enable, ret[0], code2, status['error'], status['is_enabled'], status['on_zero']), code=ret[0])
127
+ return ret[0] if self.linear_track_error_code == 0 else APIState.LINEAR_TRACK_HAS_FAULT
128
+
129
+ @xarm_is_connected(_type='set')
130
+ @xarm_is_not_simulation_mode(ret=(0, []))
131
+ def set_linear_track_back_origin(self, wait=True, **kwargs):
132
+ code = self.checkset_modbus_baud(self._default_linear_track_baud, host_id=XCONF.LINEER_TRACK_HOST_ID)
133
+ if code != 0:
134
+ return code
135
+ auto_enable = kwargs.get('auto_enable', True)
136
+ timeout = kwargs.get('timeout', 10)
137
+ ret = self.arm_cmd.track_modbus_r16s(XCONF.ServoConf.BACK_ORIGIN, 1, 0x06)
138
+ ret[0] = self._check_modbus_code(ret, length=8, host_id=XCONF.LINEER_TRACK_HOST_ID)
139
+ # get_status: error, is_enable, on_zero
140
+ code2, status = self.get_linear_track_registers(addr=0x0A23, number_of_registers=3)
141
+ self.log_api_info(
142
+ 'API -> set_linear_track_back_origin() -> code1={}, code2={}, err={}, enabled={}, zero={}'.format(
143
+ ret[0], code2, status['error'], status['is_enabled'], status['on_zero']), code=ret[0])
144
+ if ret[0] == 0 and wait:
145
+ ret[0] = self.__wait_linear_track_back_origin(timeout)
146
+ if auto_enable:
147
+ ret[0] = self.set_linear_track_enable(True)
148
+ return ret[0] if self.linear_track_error_code == 0 else APIState.LINEAR_TRACK_HAS_FAULT
149
+
150
+ @xarm_is_connected(_type='set')
151
+ @xarm_is_not_simulation_mode(ret=(0, []))
152
+ def set_linear_track_pos(self, pos, speed=None, wait=True, timeout=100, **kwargs):
153
+ code = self.checkset_modbus_baud(self._default_linear_track_baud, host_id=XCONF.LINEER_TRACK_HOST_ID)
154
+ if code != 0:
155
+ return code
156
+ auto_enable = kwargs.get('auto_enable', True)
157
+ # get_status: error, is_enable, on_zero
158
+ code, status = self.get_linear_track_registers(addr=0x0A23, number_of_registers=3)
159
+ if code == 0 and status['on_zero'] != 1:
160
+ logger.warn('linear track is not on zero, please set linear track back to origin')
161
+ return APIState.LINEAR_TRACK_NOT_INIT
162
+ if auto_enable and (code != 0 or status['is_enabled'] != 1):
163
+ self.set_linear_track_enable(auto_enable)
164
+ if speed is not None and self.linear_track_speed != speed:
165
+ self.set_linear_track_speed(speed)
166
+ value = convert.int32_to_bytes(int(pos * 2000), is_big_endian=True)
167
+ ret = self.arm_cmd.track_modbus_w16s(XCONF.ServoConf.TAGET_POS, value, 2)
168
+ self.get_linear_track_registers(addr=0x0A23, number_of_registers=3)
169
+ ret[0] = self._check_modbus_code(ret, length=8, host_id=XCONF.LINEER_TRACK_HOST_ID)
170
+ self.log_api_info('API -> set_linear_track_pos(pos={}) -> code={}, err={}, enabled={}, zero={}'.format(
171
+ pos, ret[0], self._linear_track_status['error'],
172
+ self._linear_track_status['is_enabled'], self._linear_track_status['on_zero']), code=ret[0])
173
+ if ret[0] == 0 and wait:
174
+ return self.__wait_linear_track_stop(timeout)
175
+ return ret[0] if self.linear_track_error_code == 0 else APIState.LINEAR_TRACK_HAS_FAULT
176
+
177
+ @xarm_is_connected(_type='set')
178
+ @xarm_is_not_simulation_mode(ret=(0, []))
179
+ def set_linear_track_speed(self, speed):
180
+ code = self.checkset_modbus_baud(self._default_linear_track_baud, host_id=XCONF.LINEER_TRACK_HOST_ID)
181
+ if code != 0:
182
+ return code
183
+ value = convert.u16_to_bytes(int(speed*6.667))
184
+ ret = self.arm_cmd.track_modbus_w16s(XCONF.ServoConf.POS_SPD, value, 1)
185
+ ret[0] = self._check_modbus_code(ret, length=8, host_id=XCONF.LINEER_TRACK_HOST_ID)
186
+ if ret[0] == 0:
187
+ self.linear_track_speed = speed
188
+ self.log_api_info('API -> set_linear_track_speed(speed={}) -> code={}'.format(speed, ret[0]), code=ret[0])
189
+ return ret[0]
190
+
191
+ @xarm_is_connected(_type='set')
192
+ @xarm_is_not_simulation_mode(ret=(0, []))
193
+ def set_linear_track_stop(self):
194
+ code = self.checkset_modbus_baud(self._default_linear_track_baud, host_id=XCONF.LINEER_TRACK_HOST_ID)
195
+ if code != 0:
196
+ return code
197
+ value = convert.u16_to_bytes(int(1))
198
+ ret = self.arm_cmd.track_modbus_w16s(XCONF.ServoConf.STOP_TRACK, value, 1)
199
+ ret[0] = self._check_modbus_code(ret, length=8, host_id=XCONF.LINEER_TRACK_HOST_ID)
200
+ # get_status: error, is_enable, on_zero
201
+ code2, status = self.get_linear_track_registers(addr=0x0A22, number_of_registers=2)
202
+ self.log_api_info('API -> set_linear_track_stop() -> code={}, code2={}, status={}, err={}'.format(
203
+ ret[0], code2, status['status'], status['error']), code=ret[0])
204
+ return ret[0]
205
+
206
+ @xarm_is_connected(_type='get')
207
+ @xarm_is_not_simulation_mode(ret=(0, []))
208
+ def clean_linear_track_error(self):
209
+ code = self.checkset_modbus_baud(self._default_linear_track_baud, host_id=XCONF.LINEER_TRACK_HOST_ID)
210
+ if code != 0:
211
+ return code
212
+ value = convert.u16_to_bytes(int(1))
213
+ self.linear_track_error_code = 0
214
+ ret = self.arm_cmd.track_modbus_w16s(XCONF.ServoConf.RESET_ERR, value, 1)
215
+ _, err = self.get_linear_track_error()
216
+ self.log_api_info('API -> clean_linear_track_error -> code={}, code2={}, err={}'.format(ret[0], _, err),
217
+ code=ret[0])
218
+ ret[0] = self._check_modbus_code(ret, length=8, host_id=XCONF.LINEER_TRACK_HOST_ID)
219
+ return ret[0] if self.linear_track_error_code == 0 else APIState.LINEAR_TRACK_HAS_FAULT
220
+
221
+ def __wait_linear_track_stop(self, timeout=100):
222
+ failed_cnt = 0
223
+ if not timeout or not isinstance(timeout, (int, float)) or timeout <= 0:
224
+ timeout = 100
225
+ expired = time.monotonic() + timeout
226
+ code = APIState.WAIT_FINISH_TIMEOUT
227
+ while self.connected and time.monotonic() < expired:
228
+ _, status = self.get_linear_track_registers(addr=0x0A22, number_of_registers=5)
229
+ if _ == 0 and status['sci'] == 0:
230
+ return APIState.LINEAR_TRACK_SCI_IS_LOW
231
+ if _ == 0 and status['error'] != 0:
232
+ return APIState.LINEAR_TRACK_HAS_FAULT
233
+ failed_cnt = 0 if _ == 0 else failed_cnt + 1
234
+ if _ == 0 and (status['status'] & 0x01 == 0):
235
+ return 0
236
+ else:
237
+ if failed_cnt > 10:
238
+ return APIState.CHECK_FAILED
239
+ time.sleep(0.1)
240
+ return code
241
+
242
+ def __wait_linear_track_back_origin(self, timeout=10):
243
+ failed_cnt = 0
244
+ if not timeout or not isinstance(timeout, (int, float)) or timeout <= 0:
245
+ timeout = 10
246
+ expired = time.monotonic() + timeout
247
+ code = APIState.WAIT_FINISH_TIMEOUT
248
+ while self.connected and time.monotonic() < expired:
249
+ _, status = self.get_linear_track_registers(addr=0x0A22, number_of_registers=5)
250
+ if _ == 0 and status['sci'] == 0:
251
+ return APIState.LINEAR_TRACK_SCI_IS_LOW
252
+ if _ == 0 and status['error'] != 0:
253
+ return APIState.LINEAR_TRACK_HAS_FAULT
254
+ failed_cnt = 0 if _ == 0 else failed_cnt + 1
255
+ if _ == 0 and status['on_zero'] == 1:
256
+ return 0
257
+ else:
258
+ if failed_cnt > 10:
259
+ return APIState.CHECK_FAILED
260
+ time.sleep(0.1)
261
+ return code
262
+
263
+ @xarm_is_connected(_type='get')
264
+ @xarm_is_not_simulation_mode(ret=(0, []))
265
+ def get_linear_track_version(self):
266
+ code = self.checkset_modbus_baud(self._default_linear_track_baud, host_id=XCONF.LINEER_TRACK_HOST_ID)
267
+ if code != 0:
268
+ return code, '*.*.*'
269
+ versions = ['*', '*', '*']
270
+ ret1 = self.arm_cmd.track_modbus_r16s(0x0801, 1)
271
+ ret2 = self.arm_cmd.track_modbus_r16s(0x0802, 1)
272
+ ret3 = self.arm_cmd.track_modbus_r16s(0x0803, 1)
273
+ ret1[0] = self._check_modbus_code(ret1, length=7, host_id=XCONF.LINEER_TRACK_HOST_ID)
274
+ ret2[0] = self._check_modbus_code(ret2, length=7, host_id=XCONF.LINEER_TRACK_HOST_ID)
275
+ ret3[0] = self._check_modbus_code(ret3, length=7, host_id=XCONF.LINEER_TRACK_HOST_ID)
276
+
277
+ code = 0
278
+
279
+ if ret1[0] == 0:
280
+ versions[0] = convert.bytes_to_u16(ret1[5:7])
281
+ else:
282
+ code = ret1[0]
283
+
284
+ if ret2[0] == 0:
285
+ versions[1] = convert.bytes_to_u16(ret2[5:7])
286
+ else:
287
+ code = ret2[0]
288
+
289
+ if ret3[0] == 0:
290
+ versions[2] = convert.bytes_to_u16(ret3[5:7])
291
+ else:
292
+ code = ret3[0]
293
+
294
+ return code, '.'.join(map(str, versions))
295
+
296
+ @xarm_is_connected(_type='get')
297
+ @xarm_is_not_simulation_mode(ret=(0, []))
298
+ def get_linear_track_sn(self):
299
+ code = self.checkset_modbus_baud(self._default_linear_track_baud, host_id=XCONF.LINEER_TRACK_HOST_ID)
300
+ if code != 0:
301
+ return code, None
302
+ rd_sn = ''
303
+ ret = [0, '']
304
+ for i in range(0, 14):
305
+ ret = self.arm_cmd.track_modbus_r16s(0x0B10 + i, 1)
306
+ ret[0] = self._check_modbus_code(ret, length=7, host_id=XCONF.LINEER_TRACK_HOST_ID)
307
+ if chr(ret[-1]).isalnum():
308
+ rd_sn = ''.join([rd_sn, chr(ret[-1])])
309
+ else:
310
+ rd_sn = ''.join([rd_sn, '*'])
311
+ time.sleep(0.05)
312
+ return ret[0], rd_sn
313
+
314
+ @xarm_is_connected(_type='set')
315
+ @xarm_is_not_simulation_mode(ret=(0, []))
316
+ def set_linear_track_sn(self, sn):
317
+ assert len(sn) >= 14, 'The length of SN is wrong'
318
+ code = self.checkset_modbus_baud(self._default_linear_track_baud, host_id=XCONF.LINEER_TRACK_HOST_ID)
319
+ if code != 0:
320
+ return code
321
+ code = 0
322
+ if len(sn) == 14:
323
+ for i in range(0, 14):
324
+ value = convert.u16_to_bytes(ord(sn[i]))
325
+ ret = self.arm_cmd.track_modbus_w16s(0x1B10 + i, value, 1)
326
+ code = self._check_modbus_code(ret, length=8, host_id=XCONF.LINEER_TRACK_HOST_ID)
327
+ if code != 0:
328
+ break
329
+ time.sleep(0.05)
330
+ return code
331
+
332
+ def _set_linear_track_registers(self, addr, value, number_of_registers=1):
333
+ ret = self.arm_cmd.track_modbus_w16s(addr, value, number_of_registers)
334
+ ret[0] = self._check_modbus_code(ret, length=8, host_id=XCONF.LINEER_TRACK_HOST_ID)
335
+ return ret[0], ret[1:]
336
+
337
+ @xarm_is_connected(_type='set')
338
+ @xarm_is_not_simulation_mode(ret=(0, []))
339
+ def set_linear_track_default_parmas(self):
340
+ code_li = []
341
+ motro_type = convert.u16_to_bytes(610) # 电机类型
342
+ ret = self._set_linear_track_registers(0x1804, motro_type, 1)
343
+ code_li.append(ret[0])
344
+ time.sleep(0.05)
345
+
346
+ power_level = convert.u16_to_bytes(1) # 功率等级
347
+ ret = self._set_linear_track_registers(0x1901, power_level, 1)
348
+ code_li.append(ret[0])
349
+ time.sleep(0.05)
350
+
351
+ speed = convert.u16_to_bytes(5000) # 滑轨运行速度
352
+ ret = self._set_linear_track_registers(0x0303, speed, 1)
353
+ code_li.append(ret[0])
354
+ time.sleep(0.05)
355
+
356
+ toq_ref_flt = convert.u16_to_bytes(0)
357
+ ret = self._set_linear_track_registers(0x0501, toq_ref_flt, 1)
358
+ code_li.append(ret[0])
359
+ time.sleep(0.05)
360
+
361
+ position_gain = convert.u16_to_bytes(250) # 位置环增益
362
+ ret = self._set_linear_track_registers(0x1200, position_gain, 1)
363
+ code_li.append(ret[0])
364
+ time.sleep(0.05)
365
+
366
+ filter_times = convert.u16_to_bytes(5) # 位置环前滤波时间
367
+ speedz_kp = convert.u16_to_bytes(200) # 速度环增益
368
+ speed_ki = convert.u16_to_bytes(150) # 速度环积分
369
+ value = filter_times + speedz_kp + speed_ki
370
+ ret = self._set_linear_track_registers(0x1202, value, 3)
371
+ code_li.append(ret[0])
372
+ time.sleep(0.05)
373
+
374
+ acc_time = convert.u16_to_bytes(300) # 位置加速时间
375
+ dec_time = convert.u16_to_bytes(300) # 位置加速时间
376
+ smooth_time = convert.u16_to_bytes(10) # 位置平滑时间
377
+ value = acc_time + dec_time + smooth_time
378
+ ret = self._set_linear_track_registers(0x1300, value, 3)
379
+ code_li.append(ret[0])
380
+ time.sleep(0.05)
381
+
382
+ spd_ref_flt = convert.u16_to_bytes(160)
383
+ spd_fb_flt = convert.u16_to_bytes(160)
384
+ spd_limit = convert.u16_to_bytes(10000) # 运行速度限制
385
+ home_speed = convert.u16_to_bytes(1533) # 回零速度
386
+ value = spd_ref_flt + spd_fb_flt + spd_limit + home_speed
387
+ ret = self._set_linear_track_registers(0x1401, value, 4)
388
+ code_li.append(ret[0])
389
+ time.sleep(0.05)
390
+
391
+ current_kp = convert.u16_to_bytes(6000) # 电流增益
392
+ current_ki = convert.u16_to_bytes(1000) # 电流积分
393
+ value = current_kp + current_ki
394
+ ret = self._set_linear_track_registers(0x190C, value, 2)
395
+ code_li.append(ret[0])
396
+ time.sleep(0.05)
397
+
398
+ on_zero = convert.u16_to_bytes(0) # 是否回零默认值 0 --- 否 1 --- 是
399
+ tar_end = convert.u16_to_bytes(1000) # 定位完成范围
400
+ value = on_zero + tar_end
401
+ ret = self._set_linear_track_registers(0x1A0A, value, 2)
402
+ code_li.append(ret[0])
403
+ time.sleep(0.05)
404
+
405
+ angle_range = convert.u16_to_bytes(1800) # 上电校零两角度比较允许范围
406
+ is_stop = convert.u16_to_bytes(0) # 急停默认值 0 --- 没有急停 1 --- 急停
407
+ value = angle_range + is_stop
408
+ ret = self._set_linear_track_registers(0x1A0D, value, 2)
409
+ code_li.append(ret[0])
410
+ time.sleep(0.05)
411
+
412
+ is_on_zero = convert.u16_to_bytes(0) # 回零完成状态默认值 0 --- 没有回零完成 1 --- 回零完成
413
+ ret = self._set_linear_track_registers(0x1A25, is_on_zero, 1)
414
+ code_li.append(ret[0])
415
+ time.sleep(0.05)
416
+
417
+ for code in code_li:
418
+ if code != 0:
419
+ return code
420
+
421
+ return 0
422
+
423
+
424
+
xarm/x3/utils.py ADDED
@@ -0,0 +1,43 @@
1
+ # !/usr/bin/env python3
2
+ # Software License Agreement (BSD License)
3
+ #
4
+ # Copyright (c) 2018, UFACTORY, Inc.
5
+ # All rights reserved.
6
+ #
7
+ # Author: Vinman <vinman.wen@ufactory.cc> <vinman.cub@gmail.com>
8
+
9
+ import time
10
+ import math
11
+ import functools
12
+ from ..core.utils.log import logger
13
+ from .code import APIState
14
+ from ..core.config.x_config import XCONF
15
+
16
+
17
+ def compare_time(time1, time2):
18
+ try:
19
+ s_time = time.mktime(time.strptime(time1, '%Y-%m-%d'))
20
+ e_time = time.mktime(time.strptime(time2, '%Y-%m-%d'))
21
+ return int(s_time) - int(e_time) > 0
22
+ except:
23
+ return False
24
+
25
+
26
+ def compare_version(v1, v2):
27
+ for i in range(3):
28
+ if v1[i] > v2[i]:
29
+ return True
30
+ elif v1[i] < v2[i]:
31
+ return False
32
+ return False
33
+
34
+
35
+ def filter_invaild_number(num, ndigits=3, default=0.0):
36
+ if math.isnan(num) or math.isinf(num):
37
+ return round(default, 0) if ndigits < 0 else round(default, ndigits)
38
+ return round(num, 0) if ndigits < 0 else round(num, ndigits)
39
+
40
+
41
+ def to_radian(val, is_radian=False, default=0):
42
+ return default if val is None else float(val) if is_radian else math.radians(val)
43
+