22#include <unistd.h>
33#include <modbus.h>
44
5- #define SERVER_ID 0x09 ;
5+ #define SERVER_ID 0x09
66
77int main (void ) {
88 modbus_t * mb ;
99 uint16_t tab_reg [32 ];
1010
11- mb = modbus_new_tcp (" /tmp/ttyUR" , 115200 , ' N' , 8 , 1 );
12- modbus_set_slave (SERVER_ID);
13- modbus_set_debug (TRUE );
11+ mb = modbus_new_rtu ("/tmp/ttyUR" , 115200 , 'N' , 8 , 1 );
12+ modbus_set_slave (mb , SERVER_ID );
13+ modbus_set_debug (mb , TRUE);
1414 modbus_connect (mb );
1515 printf ("\nConnected\n" );
1616
17- // /* Read 5 registers from the address 0 */
18- // modbus_read_registers(mb, 2000, 6, tab_reg);
17+ // Read 5 registers from the address 0
18+ modbus_read_registers (mb , 2000 , 6 , tab_reg );
1919
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 ]);
20+ printf ("Status: %.4X %.4X %.4X %.4X %.4X %.4X \n" , tab_reg [0 ], tab_reg [1 ], tab_reg [2 ], tab_reg [3 ], tab_reg [4 ], tab_reg [5 ]);
2121
2222
23- // Modbus RTU example
23+ // Modbus RTU example
2424 printf ("Step 1 Activation Request (clear and set rACT)\n" );
25- uint16_t activation_request_register_reset = [ 0x00 , 0x00 , 0x00 ] ;
25+ uint16_t activation_request_register_reset [ 3 ] = { 0x0000 , 0x0000 , 0x0000 } ;
2626 modbus_write_registers (mb , 0x03E8 , 3 , activation_request_register_reset );
2727
28- uint16_t activation_request_register_set = [ 0x01 , 0x00 , 0x00 ] ;
28+ uint16_t activation_request_register_set [ 3 ] = { 0x0100 , 0x0000 , 0x0000 } ;
2929 modbus_write_registers (mb , 0x03E8 , 3 , activation_request_register_set );
3030
3131
3232 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 ];
33+ uint16_t activation_status [1 ] = {0x0000 };
34+ uint16_t activation_status_complete [1 ] = {0x3100 };
3635
3736 modbus_read_registers (mb , 0x07D0 , 1 , activation_status );
3837
3938 while (activation_status [0 ] != activation_status_complete [0 ]){
40- printf (" Gripper not yet activated\n " );
39+ printf ("Gripper not yet activated: %.4X vs. %.4X \n" , activation_status [ 0 ], activation_status_complete [ 0 ] );
4140 modbus_read_registers (mb , 0x07D0 , 1 , activation_status );
4241 usleep (100 * 1000 ); // ms * 1000
4342 }
44- printf (" Gripper activated\n " );
43+ printf ("Gripper activated, press any key to continue\n" );
44+ getc (stdin );
4545
4646 printf ("BYPASS: Step 3: Move the robot to the pick-up location\n" );
4747
4848 printf ("Step 4: Close the Gripper at full speed and full force\n" );
49- uint16_t close_gripper_request_register = [ 0x0900 , 0x00FF , 0xFFFF ] ;
49+ uint16_t close_gripper_request_register [ 3 ] = { 0x0900 , 0x00FF , 0xFFFF } ;
5050 modbus_write_registers (mb , 0x03E8 , 3 , close_gripper_request_register );
5151
5252 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
53+ uint16_t gripper_status_closing [1 ] = {0x0000 };
54+ uint16_t gripper_status_closed_obj [3 ] = {0xB900 , 0x00FF , 0xBD00 }; // gOBJ==0x02
55+ uint16_t gripper_status_requested_position_no_obj [3 ] = {0xF900 , 0x00FF , 0xBD00 }; // gOBJ==0x03
5756
5857 modbus_read_registers (mb , 0x07D0 , 3 , gripper_status_closing );
5958
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 " );
59+ while (gripper_status_closing [0 ] != gripper_status_closed_obj [0 ] && gripper_status_closing [0 ] != gripper_status_requested_position_no_obj [0 ]){
60+ printf ("Gripper not yet closed: %.4X vs. %.4X \n" , gripper_status_closing [ 0 ], gripper_status_requested_position_no_obj [ 0 ] );
6261 modbus_read_registers (mb , 0x07D0 , 3 , gripper_status_closing );
6362 usleep (100 * 1000 ); // ms * 1000
6463 }
65- printf (" Gripper closed. Wiating 2s before continuation\n " );
64+ printf ("Gripper closed, press any key to continue\n" );
65+ getc (stdin );
6666
67- sleep (2 );
68-
6967 printf ("BYPASS: Step 6: Move the robot to the release location\n" );
7068
7169 printf ("Step 7: Open the Gripper at full speed and full force\n" );
72- uint16_t open_gripper_request_register = [ 0x0900 , 0x0000 , 0xFFFF ] ;
70+ uint16_t open_gripper_request_register [ 3 ] = { 0x0900 , 0x0000 , 0xFFFF } ;
7371 modbus_write_registers (mb , 0x03E8 , 3 , open_gripper_request_register );
7472
7573 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-
74+ uint16_t gripper_status_opening [1 ] = {0x0000 };
8175 modbus_read_registers (mb , 0x07D0 , 3 , gripper_status_opening );
8276
83- while (gripper_status_opening[0 ] != gripper_status_closed_obj[0 ] || gripper_status_opening[0 ] != gripper_status_requested_position_no_obj[0 ]){
77+ while (gripper_status_opening [0 ] != gripper_status_closed_obj [0 ] && gripper_status_opening [0 ] != gripper_status_requested_position_no_obj [0 ]){
8478 printf ("Gripper not yet opened\n" );
8579 modbus_read_registers (mb , 0x07D0 , 3 , gripper_status_opening );
8680 usleep (100 * 1000 ); // ms * 1000
@@ -91,4 +85,4 @@ int main(void) {
9185
9286 modbus_close (mb );
9387 modbus_free (mb );
94- }
88+ }
0 commit comments