1+ #include < stdio.h>
2+ #include < unistd.h>
3+ #include < modbus.h>
4+
5+ #define SERVER_ID 0x09 ;
6+
7+ int main (void ) {
8+ modbus_t *mb;
9+ uint16_t tab_reg[32 ];
10+
11+ mb = modbus_new_tcp (" /tmp/ttyUR" , 115200 , ' N' , 8 , 1 );
12+ modbus_set_slave (SERVER_ID);
13+ modbus_set_debug (TRUE );
14+ modbus_connect (mb);
15+ printf (" \n Connected\n " );
16+
17+ // /* Read 5 registers from the address 0 */
18+ // modbus_read_registers(mb, 2000, 6, tab_reg);
19+
20+ // printf("Status: %.2X %.2X %.2X %.2X %.2X %.2X\n" tab_reg[0], tab_reg[0], tab_reg[0], tab_reg[0], tab_reg[0], tab_reg[0]);
21+
22+
23+ // Modbus RTU example
24+ printf (" Step 1 Activation Request (clear and set rACT)\n " );
25+ uint16_t activation_request_register_reset = [0x00 , 0x00 , 0x00 ];
26+ modbus_write_registers (mb, 0x03E8 , 3 , activation_request_register_reset);
27+
28+ uint16_t activation_request_register_set = [0x01 , 0x00 , 0x00 ];
29+ modbus_write_registers (mb, 0x03E8 , 3 , activation_request_register_set);
30+
31+
32+ printf (" Step 2: Read Gripper status until the activation is completed\n " );
33+ uint16_t activation_status = [0x0000 ];
34+ uint16_t activation_status_not_complete = [0x1100 ];
35+ uint16_t activation_status_complete = [0x3100 ];
36+
37+ modbus_read_registers (mb, 0x07D0 , 1 , activation_status);
38+
39+ while (activation_status[0 ] != activation_status_complete[0 ]){
40+ printf (" Gripper not yet activated\n " );
41+ modbus_read_registers (mb, 0x07D0 , 1 , activation_status);
42+ usleep (100 * 1000 ); // ms * 1000
43+ }
44+ printf (" Gripper activated\n " );
45+
46+ printf (" BYPASS: Step 3: Move the robot to the pick-up location\n " );
47+
48+ printf (" Step 4: Close the Gripper at full speed and full force\n " );
49+ uint16_t close_gripper_request_register = [0x0900 , 0x00FF , 0xFFFF ];
50+ modbus_write_registers (mb, 0x03E8 , 3 , close_gripper_request_register);
51+
52+ printf (" Step 5: Read Gripper status until the grip is complete\n " );
53+ uint16_t gripper_status_closing = [0x0000 ];
54+ uint16_t gripper_status_motion = [0x3900 , 0x00FF , 0x0E0A ];
55+ uint16_t gripper_status_closed_obj = [0xB900 , 0x00FF , 0xBD00 ]; // gOBJ==0x02 or 0x03
56+ uint16_t gripper_status_requested_position_no_obj = [0xF900 , 0x00FF , 0xBD00 ]; // gOBJ==0x02 or 0x03
57+
58+ modbus_read_registers (mb, 0x07D0 , 3 , gripper_status_closing);
59+
60+ while (gripper_status_closing[0 ] != gripper_status_closed_obj[0 ] || gripper_status_closing[0 ] != gripper_status_requested_position_no_obj[0 ]){
61+ printf (" Gripper not yet closed\n " );
62+ modbus_read_registers (mb, 0x07D0 , 3 , gripper_status_closing);
63+ usleep (100 * 1000 ); // ms * 1000
64+ }
65+ printf (" Gripper closed. Wiating 2s before continuation\n " );
66+
67+ sleep (2 );
68+
69+ printf (" BYPASS: Step 6: Move the robot to the release location\n " );
70+
71+ printf (" Step 7: Open the Gripper at full speed and full force\n " );
72+ uint16_t open_gripper_request_register = [0x0900 , 0x0000 , 0xFFFF ];
73+ modbus_write_registers (mb, 0x03E8 , 3 , open_gripper_request_register);
74+
75+ printf (" Step 8: Read Gripper status until opening is complete\n " );
76+ uint16_t gripper_status_opening = [0x0000 ];
77+ // uint16_t gripper_status_motion = [0x3900, 0x00FF, 0x0E0A];
78+ // uint16_t gripper_status_closed_obj = [0xB900, 0x00FF, 0xBD00]; // gOBJ==0x02 or 0x03
79+ // uint16_t gripper_status_requested_position_no_obj = [0xF900, 0x00FF, 0xBD00]; // gOBJ==0x02 or 0x03
80+
81+ modbus_read_registers (mb, 0x07D0 , 3 , gripper_status_opening);
82+
83+ while (gripper_status_opening[0 ] != gripper_status_closed_obj[0 ] || gripper_status_opening[0 ] != gripper_status_requested_position_no_obj[0 ]){
84+ printf (" Gripper not yet opened\n " );
85+ modbus_read_registers (mb, 0x07D0 , 3 , gripper_status_opening);
86+ usleep (100 * 1000 ); // ms * 1000
87+ }
88+ printf (" Gripper opened\n " );
89+
90+ printf (" Test finished, closing connection to the Gripper\n " );
91+
92+ modbus_close (mb);
93+ modbus_free (mb);
94+ }
0 commit comments