5. I/O del Robot

5.1. Impostare le uscite digitali della scatola di controllo

1/**
2* @brief  Imposta le uscite digitali della scatola di controllo
3* @param  [in] id  numero io, intervallo [0~15]
4* @param  [in] status 0-spento, 1-acceso
5* @param  [in] smooth 0-non smoothing, 1-smoothing
6* @param  [in] block  0-bloccante, 1-non bloccante
7* @return  Codice di errore
8*/
9errno_t  SetDO(int id, uint8_t status, uint8_t smooth, uint8_t block);

5.2. Impostare le uscite digitali dell’utensile

1/**
2* @brief  Imposta le uscite digitali dell'utensile
3* @param  [in] id  numero io, intervallo [0~1]
4* @param  [in] status 0-spento, 1-acceso
5* @param  [in] smooth 0-non smoothing, 1-smoothing
6* @param  [in] block  0-bloccante, 1-non bloccante
7* @return  Codice di errore
8*/
9errno_t  SetToolDO(int id, uint8_t status, uint8_t smooth, uint8_t block);

5.3. Impostare le uscite analogiche della scatola di controllo

1/**
2* @brief  Imposta le uscite analogiche della scatola di controllo
3* @param  [in] id  numero io, intervallo [0~1]
4* @param  [in] value percentuale valore corrente o tensione, intervallo [0~100] corrispondente a valore corrente [0~20mA] o tensione [0~10V]
5* @param  [in] block  0-bloccante, 1-non bloccante
6* @return  Codice di errore
7*/
8errno_t  SetAO(int id, float value, uint8_t block);

5.4. Impostare le uscite analogiche dell’utensile

1/**
2* @brief  Imposta le uscite analogiche dell'utensile
3* @param  [in] id  numero io, intervallo [0]
4* @param  [in] value percentuale valore corrente o tensione, intervallo [0~100] corrispondente a valore corrente [0~20mA] o tensione [0~10V]
5* @param  [in] block  0-bloccante, 1-non bloccante
6* @return  Codice di errore
7*/
8errno_t  SetToolAO(int id, float value, uint8_t block);

5.5. Esempio di codice per impostare uscite digitali e analogiche

 1 int TestAODO(void)
 2 {
 3     ROBOT_STATE_PKG pkg = {};
 4     FRRobot robot;
 5     robot.LoggerInit();
 6     robot.SetLoggerLevel(1);
 7     int rtn = robot.RPC("192.168.58.2");
 8     if (rtn != 0)
 9     {
10         return -1;
11     }
12     robot.SetReConnectParam(true, 30000, 500);
13     uint8_t status = 1;
14     uint8_t smooth = 0;
15     uint8_t block = 0;
16     for (int i = 0; i < 16; i++)
17     {
18         robot.SetDO(i, status, smooth, block);
19         robot.Sleep(300);
20     }
21     status = 0;
22     for (int i = 0; i < 16; i++)
23     {
24         robot.SetDO(i, status, smooth, block);
25         robot.Sleep(300);
26     }
27     status = 1;
28     for (int i = 0; i < 2; i++)
29     {
30         robot.SetToolDO(i, status, smooth, block);
31         robot.Sleep(1000);
32     }
33     status = 0;
34     for (int i = 0; i < 2; i++)
35     {
36         robot.SetToolDO(i, status, smooth, block);
37         robot.Sleep(1000);
38     }
39     for (int i = 0; i < 100; i++)
40     {
41         robot.SetAO(0, i * 40.96, block);
42         robot.Sleep(30);
43     }
44     for (int i = 0; i < 100; i++)
45     {
46         robot.SetToolAO(0, i * 40.96, block);
47         robot.Sleep(30);
48     }
49     robot.CloseRPC();
50     return 0;
51 }

5.6. Ottenere gli ingressi digitali della scatola di controllo

1/**
2* @brief  Ottiene gli ingressi digitali della scatola di controllo
3* @param  [in] id  numero io, intervallo [0~15]
4* @param  [in] block  0-bloccante, 1-non bloccante
5* @param  [out] result  0-livello basso, 1-livello alto
6* @return  Codice di errore
7*/
8errno_t  GetDI(int id, uint8_t block, uint8_t *result);

5.7. Ottenere gli ingressi digitali dell’utensile

1/**
2* @brief  Ottiene gli ingressi digitali dell'utensile
3* @param  [in] id  numero io, intervallo [0~1]
4* @param  [in] block  0-bloccante, 1-non bloccante
5* @param  [out] result  0-livello basso, 1-livello alto
6* @return  Codice di errore
7*/
8errno_t  GetToolDI(int id, uint8_t block, uint8_t *result);

5.8. Ottenere gli ingressi analogici della scatola di controllo

1/**
2* @brief  Ottiene gli ingressi analogici della scatola di controllo
3* @param  [in] id  numero io, intervallo [0~1]
4* @param  [in] block  0-bloccante, 1-non bloccante
5* @param  [out] result  percentuale valore corrente o tensione di ingresso, intervallo [0~100] corrispondente a valore corrente [0~20mA] o tensione [0~10V]
6* @return  Codice di errore
7*/
8errno_t  GetAI(int id, uint8_t block, float *result);

5.9. Ottenere gli ingressi analogici dell’utensile

1/**
2* @brief  Ottiene gli ingressi analogici dell'utensile
3* @param  [in] id  numero io, intervallo [0]
4* @param  [in] block  0-bloccante, 1-non bloccante
5* @param  [out] result  percentuale valore corrente o tensione di ingresso, intervallo [0~100] corrispondente a valore corrente [0~20mA] o tensione [0~10V]
6* @return  Codice di errore
7*/
8errno_t  GetToolAI(int id, uint8_t block, float *result);

5.10. Ottenere lo stato del pulsante di registrazione punti terminale del robot

1/**
2 * @brief Ottiene lo stato del pulsante di registrazione punti terminale del robot
3 * @param [out] state stato pulsante, 0-premuto, 1-rilasciato
4 * @return Codice di errore
5 */
6errno_t  GetAxlePointRecordBtnState(uint8_t *state);

5.11. Ottenere lo stato delle uscite DO terminali del robot

1/**
2 * @brief Ottiene lo stato delle uscite DO terminali del robot
3 * @param [out] do_state stato uscite DO, do0~do1 corrisponde a bit1~bit2, da bit0 inizio
4 * @return Codice di errore
5 */
6errno_t  GetToolDO(uint8_t *do_state);

5.12. Ottenere lo stato delle uscite DO del controller del robot

1/**
2 * @brief Ottiene lo stato delle uscite DO del controller del robot
3 * @param [out] do_state_h stato uscite DO, co0~co7 corrisponde a bit0~bit7
4 * @param [out] do_state_l stato uscite DO, do0~do7 corrisponde a bit0~bit7
5 * @return Codice di errore
6 */
7errno_t  GetDO(uint8_t *do_state_h, uint8_t *do_state_l);

5.13. Esempio di codice per ottenere stati DI/DO del robot

 1 int TestGetDIAI(void)
 2 {
 3     ROBOT_STATE_PKG pkg = {};
 4     FRRobot robot;
 5     robot.LoggerInit();
 6     robot.SetLoggerLevel(1);
 7     int rtn = robot.RPC("192.168.58.2");
 8     if (rtn != 0)
 9     {
10         return -1;
11     }
12     robot.SetReConnectParam(true, 30000, 500);
13     uint8_t status = 1;
14     uint8_t smooth = 0;
15     uint8_t block = 0;
16     uint8_t di = 0, tool_di = 0;
17     float ai = 0.0, tool_ai = 0.0;
18     float value = 0.0;
19     robot.GetDI(0, block, &di);
20     printf("di0:%u\n", di);
21     tool_di = robot.GetToolDI(1, block, &tool_di);
22     printf("tool_di1:%u\n", tool_di);
23     robot.GetAI(0, block, &ai);
24     printf("ai0:%f\n", ai);
25     tool_ai = robot.GetToolAI(0, block, &tool_ai);
26     printf("tool_ai0:%f\n", tool_ai);
27     uint8_t _button_state = 0;
28     robot.GetAxlePointRecordBtnState(&_button_state);
29     printf("_button_state is: %u\n", _button_state);
30     uint8_t tool_do_state = 0;
31     robot.GetToolDO(&tool_do_state);
32     printf("tool DO state is: %u\n", tool_do_state);
33     uint8_t do_state_h = 0;
34     uint8_t do_state_l = 0;
35     robot.GetDO(&do_state_h, &do_state_l);
36     printf("DO state high is: %u \n DO state low is: %u\n", do_state_h, do_state_l);
37     robot.CloseRPC();
38     return 0;
39 }

5.14. Attendere ingresso digitale della scatola di controllo

1/**
2* @brief Attende ingresso digitale della scatola di controllo
3* @param  [in] id  numero io, intervallo [0~15]
4* @param  [in]  status 0-spento, 1-acceso
5* @param  [in]  max_time  tempo massimo attesa, unità ms
6* @param  [in]  opt  strategia dopo timeout, 0-programma si ferma e segnala timeout, 1-ignora timeout programma continua, 2-attesa continua
7* @return  Codice di errore
8*/
9errno_t  WaitDI(int id, uint8_t status, int max_time, int opt);

5.15. Attendere ingressi digitali multipli della scatola di controllo

 1/**
 2* @brief Attende ingressi digitali multipli della scatola di controllo
 3* @param  [in] mode 0-AND multipli, 1-OR multipli
 4* @param  [in] id  numero io, bit0~bit7 corrisponde DI0~DI7, bit8~bit15 corrisponde CI0~CI7
 5* @param  [in]  status 0-spento, 1-acceso
 6* @param  [in]  max_time  tempo massimo attesa, unità ms
 7* @param  [in]  opt  strategia dopo timeout, 0-programma si ferma e segnala timeout, 1-ignora timeout programma continua, 2-attesa continua
 8* @return  Codice di errore
 9*/
10errno_t  WaitMultiDI(int mode, int id, uint8_t status, int max_time, int opt);

5.16. Attendere ingresso digitale dell’utensile

1/**
2* @brief Attende ingresso digitale dell'utensile
3* @param  [in] id  numero io, intervallo [0~1]
4* @param  [in]  status 0-spento, 1-acceso
5* @param  [in]  max_time  tempo massimo attesa, unità ms
6* @param  [in]  opt  strategia dopo timeout, 0-programma si ferma e segnala timeout, 1-ignora timeout programma continua, 2-attesa continua
7* @return  Codice di errore
8*/
9errno_t  WaitToolDI(int id, uint8_t status, int max_time, int opt);

5.17. Attendere ingresso analogico della scatola di controllo

 1/**
 2* @brief Attende ingresso analogico della scatola di controllo
 3* @param  [in] id  numero io, intervallo [0~1]
 4* @param  [in]  sign 0-maggiore di, 1-minore di
 5* @param  [in]  value percentuale valore corrente o tensione di ingresso, intervallo [0~100] corrispondente a valore corrente [0~20mA] o tensione [0~10V]
 6* @param  [in]  max_time  tempo massimo attesa, unità ms
 7* @param  [in]  opt  strategia dopo timeout, 0-programma si ferma e segnala timeout, 1-ignora timeout programma continua, 2-attesa continua
 8* @return  Codice di errore
 9*/
10errno_t  WaitAI(int id, int sign, float value, int max_time, int opt);

5.18. Attendere ingresso analogico dell’utensile

 1/**
 2* @brief Attende ingresso analogico dell'utensile
 3* @param  [in] id  numero io, intervallo [0]
 4* @param  [in]  sign 0-maggiore di, 1-minore di
 5* @param  [in]  value percentuale valore corrente o tensione di ingresso, intervallo [0~100] corrispondente a valore corrente [0~20mA] o tensione [0~10V]
 6* @param  [in]  max_time  tempo massimo attesa, unità ms
 7* @param  [in]  opt  strategia dopo timeout, 0-programma si ferma e segnala timeout, 1-ignora timeout programma continua, 2-attesa continua
 8* @return  Codice di errore
 9*/
10errno_t  WaitToolAI(int id, int sign, float value, int max_time, int opt);

5.19. Esempio di codice per attendere segnali di ingresso digitali/analogici della scatola di controllo

Cambiato nella versione C++SDK-v2.1.2.0.

 1 int TestWaitDIAI(void)
 2 {
 3     ROBOT_STATE_PKG pkg = {};
 4     FRRobot robot;
 5     robot.LoggerInit();
 6     robot.SetLoggerLevel(1);
 7     int rtn = robot.RPC("192.168.58.2");
 8     if (rtn != 0)
 9     {
10         return -1;
11     }
12     robot.SetReConnectParam(true, 30000, 500);
13     uint8_t status = 1;
14     uint8_t smooth = 0;
15     uint8_t block = 0;
16     uint8_t di = 0, tool_di = 0;
17     float ai = 0.0, tool_ai = 0.0;
18     float value = 0.0;
19     rtn = robot.WaitDI(0, 1, 1000, 1);
20     cout << "WaitDI over; rtn is: " << rtn << endl;
21     robot.WaitMultiDI(1, 3, 3, 1000, 1);
22     cout << "WaitDI over; rtn is: " << rtn << endl;
23     robot.WaitToolDI(1, 1, 1000, 1);
24     cout << "WaitDI over; rtn is: " << rtn << endl;
25     robot.WaitAI(0, 0, 50, 1000, 1);
26     cout << "WaitDI over; rtn is: " << rtn << endl;
27     robot.WaitToolAI(0, 0, 50, 1000, 1);
28     cout << "WaitDI over; rtn is: " << rtn << endl;
29     robot.CloseRPC();
30     return 0;
31 }

5.20. Impostare se l’uscita DO della scatola di controllo si resetta dopo stop/pausa

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2* @brief Imposta se l'uscita DO della scatola di controllo si resetta dopo stop/pausa
3* @param [in] resetFlag 0-non reset; 1-reset
4* @return Codice di errore
5*/
6errno_t SetOutputResetCtlBoxDO(int resetFlag);

5.21. Impostare se l’uscita AO della scatola di controllo si resetta dopo stop/pausa

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief Imposta se l'uscita AO della scatola di controllo si resetta dopo stop/pausa
3 * @param [in] resetFlag 0-non reset; 1-reset
4 * @return Codice di errore
5 */
6errno_t SetOutputResetCtlBoxAO(int resetFlag);

5.22. Impostare se l’uscita DO dell’utensile terminale si resetta dopo stop/pausa

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief Imposta se l'uscita DO dell'utensile terminale si resetta dopo stop/pausa
3 * @param [in] resetFlag 0-non reset; 1-reset
4 * @return Codice di errore
5 */
6errno_t SetOutputResetAxleDO(int resetFlag);

5.23. Impostare se l’uscita AO dell’utensile terminale si resetta dopo stop/pausa

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief Imposta se l'uscita AO dell'utensile terminale si resetta dopo stop/pausa
3 * @param [in] resetFlag 0-non reset; 1-reset
4 * @return Codice di errore
5 */
6errno_t SetOutputResetAxleAO(int resetFlag);

5.24. Impostare se l’uscita DO estesa si resetta dopo stop/pausa

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief Imposta se l'uscita DO estesa si resetta dopo stop/pausa
3 * @param [in] resetFlag 0-non reset; 1-reset
4 * @return Codice di errore
5 */
6errno_t SetOutputResetExtDO(int resetFlag);

5.25. Impostare se l’uscita AO estesa si resetta dopo stop/pausa

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief Imposta se l'uscita AO estesa si resetta dopo stop/pausa
3 * @param [in] resetFlag 0-non reset; 1-reset
4 * @return Codice di errore
5 */
6errno_t SetOutputResetExtAO(int resetFlag);

5.26. Impostare se l’uscita SmartTool si resetta dopo stop/pausa

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief Imposta se l'uscita SmartTool si resetta dopo stop/pausa
3 * @param [in] resetFlag 0-non reset; 1-reset
4 * @return Codice di errore
5 */
6errno_t SetOutputResetSmartToolDO(int resetFlag);

5.27. Esempio di codice per impostare reset uscite dopo stop/pausa programma LUA

Nuovo nella versione C++SDK-v2.1.5.0.

 1int TestDOReset(void)
 2{
 3  ROBOT_STATE_PKG pkg = {};
 4  FRRobot robot;
 5  robot.LoggerInit();
 6  robot.SetLoggerLevel(1);
 7  int rtn = robot.RPC("192.168.58.2");
 8  if (rtn != 0)
 9  {
10    return -1;
11  }
12  robot.SetReConnectParam(true, 30000, 500);
13  for (int i = 0; i < 16; i++)
14  {
15    robot.SetDO(i, 1, 0, 0);
16    robot.Sleep(300);
17  }
18  int resetFlag = 1;
19  rtn = robot.SetOutputResetCtlBoxDO(resetFlag);
20  robot.SetOutputResetCtlBoxAO(resetFlag);
21  robot.SetOutputResetAxleDO(resetFlag);
22  robot.SetOutputResetAxleAO(resetFlag);
23  robot.SetOutputResetExtDO(resetFlag);
24  robot.SetOutputResetExtAO(resetFlag);
25  robot.SetOutputResetSmartToolDO(resetFlag);
26  robot.ProgramLoad("/fruser/test.lua");
27  robot.ProgramRun();
28  robot.CloseRPC();
29  return 0;
30}