|
10 | 10 | import logging |
11 | 11 | import os |
12 | 12 | import sys |
| 13 | +import crc |
13 | 14 |
|
14 | 15 | from pymycobot.log import setup_logging |
15 | 16 |
|
@@ -86,7 +87,7 @@ def __init__(self, temperature): |
86 | 87 | jog_velocity = 1.0 # 100.0/60.0 |
87 | 88 | angular_jog_velocity = 3600 / 60 |
88 | 89 | MAX_PINS = 64 |
89 | | -MAX_ANGULAR_SPEED = 6930 |
| 90 | +MAX_ANGULAR_SPEED = 6500 |
90 | 91 | MAX_LINEAR_SPEED = 30000 |
91 | 92 | DEFAULT_XY_TORQUE_LIMIT = 55 |
92 | 93 | DEFAULT_Z_TORQUE_LIMIT = 30 |
@@ -2780,6 +2781,58 @@ def tool_set_gripper_mode(self, mode): |
2780 | 2781 | """ |
2781 | 2782 | self._send_can([0x02, 0x6D, mode]) |
2782 | 2783 |
|
| 2784 | + def tool_gripper_pro_set_angle(self, angle): |
| 2785 | + if angle < 0 or angle > 100: |
| 2786 | + return False |
| 2787 | + command = [254, 254, 8, 14, 6, 0, 11, 0, angle] |
| 2788 | + crc16_value = crc.Calculator(crc.Crc16.MODBUS.value).checksum(bytes(command)) |
| 2789 | + command.extend([(crc16_value >> 8), (crc16_value & 0xFF)]) |
| 2790 | + self.tool_serial_write_data(command) |
| 2791 | + ret = self.tool_serial_read_data(11) |
| 2792 | + return bool(ret[8]) |
| 2793 | + |
| 2794 | + def tool_gripper_pro_get_angle(self): |
| 2795 | + command = [254, 254, 8, 14, 3, 0, 12, 0, 0] |
| 2796 | + crc16_value = crc.Calculator(crc.Crc16.MODBUS.value).checksum(bytes(command)) |
| 2797 | + command.extend([(crc16_value >> 8), (crc16_value & 0xFF)]) |
| 2798 | + self.tool_serial_write_data(command) |
| 2799 | + ret = self.tool_serial_read_data(11) |
| 2800 | + return int((ret[7] << 8) | (ret[8])) |
| 2801 | + |
| 2802 | + def tool_gripper_pro_open(self): |
| 2803 | + return self.tool_gripper_pro_set_angle(100) |
| 2804 | + |
| 2805 | + def tool_gripper_pro_close(self): |
| 2806 | + return self.tool_gripper_pro_set_angle(0) |
| 2807 | + |
| 2808 | + def tool_gripper_pro_set_torque(self, torque_value): |
| 2809 | + if torque_value < 100 or torque_value > 300: |
| 2810 | + return False |
| 2811 | + command = [ |
| 2812 | + 254, |
| 2813 | + 254, |
| 2814 | + 8, |
| 2815 | + 14, |
| 2816 | + 6, |
| 2817 | + 0, |
| 2818 | + 27, |
| 2819 | + (torque_value >> 8), |
| 2820 | + (torque_value & 0xFF), |
| 2821 | + ] |
| 2822 | + crc16_value = crc.Calculator(crc.Crc16.MODBUS.value).checksum(bytes(command)) |
| 2823 | + command.extend([(crc16_value >> 8), (crc16_value & 0xFF)]) |
| 2824 | + self.tool_serial_write_data(command) |
| 2825 | + ret = self.tool_serial_read_data(11) |
| 2826 | + return bool(ret[8]) |
| 2827 | + |
| 2828 | + def tool_gripper_pro_get_torque(self): |
| 2829 | + command = [254, 254, 8, 14, 3, 0, 28, 0, 0] |
| 2830 | + crc16_value = crc.Calculator(crc.Crc16.MODBUS.value).checksum(bytes(command)) |
| 2831 | + command.extend([(crc16_value >> 8), (crc16_value & 0xFF)]) |
| 2832 | + self.tool_serial_write_data(command) |
| 2833 | + ret = self.tool_serial_read_data(11) |
| 2834 | + return int((ret[7] << 8) | (ret[8])) |
| 2835 | + |
2783 | 2836 | def tool_serial_restore(self): |
2784 | 2837 | """Restore ESP32 serial.""" |
2785 | 2838 | self._send_can([0x01, 0xB1]) |
@@ -2819,7 +2872,7 @@ def tool_serial_read_data(self, n): |
2819 | 2872 | data = [] |
2820 | 2873 | msg = self._receive_can() |
2821 | 2874 | data.extend(msg.data[3:]) |
2822 | | - while msg is not None: |
| 2875 | + while msg is not None and len(data) < n: |
2823 | 2876 | msg = self._receive_can() |
2824 | 2877 | data.extend(msg.data[3:]) |
2825 | 2878 | return data |
|
0 commit comments