5. I/O del robot

5.1. Imposta uscita digitale del cabinet di controllo

1/**
2* @brief  Imposta uscita digitale del cabinet 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 smooth, 1-Smooth
6* @param  [in] block  0-Bloccante, 1-Non bloccante
7* @return  Codice di errore
8*/
9int SetDO(int id, byte status, byte smooth, byte block);

5.2. Imposta uscita digitale dell’utensile

1/**
2* @brief  Imposta uscita digitale 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 smooth, 1-Smooth
6* @param  [in] block  0-Bloccante, 1-Non bloccante
7* @return  Codice di errore
8*/
9int SetToolDO(int id, byte status, byte smooth, byte block);

5.3. Imposta uscita analogica del cabinet di controllo

1/**
2* @brief  Imposta uscita analogica del cabinet 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 corrente [0~20mA] o tensione [0~10V]
5* @param  [in] block  0-Bloccante, 1-Non bloccante
6* @return  Codice di errore
7*/
8int SetAO(int id, float value, byte block);

5.4. Imposta uscita analogica dell’utensile

1/**
2* @brief  Imposta uscita analogica dell'utensile
3* @param  [in] id  Numero io, intervallo [0]
4* @param  [in] value Percentuale valore corrente o tensione, intervallo [0~100] corrispondente a corrente [0~20mA] o tensione [0~10V]
5* @param  [in] block  0-Bloccante, 1-Non bloccante
6* @return  Codice di errore
7*/
8int SetToolAO(int id, float value, byte block);

5.5. Esempio di codice per impostare uscite digitali e analogiche

 1private void button14_Click(object sender, EventArgs e)
 2{
 3    byte status = 1;
 4    byte smooth = 0;
 5    byte block = 0;
 6    byte di = 0, tool_di = 0;
 7    float ai = 0.0f, tool_ai = 0.0f;
 8    float value = 0.0f;
 9
10
11    for (int i = 0; i < 16; i++)
12    {
13        robot.SetDO(i, status, smooth, block);
14        Thread.Sleep(300);
15    }
16
17    status = 0;
18
19    for (int i = 0; i < 16; i++)
20    {
21        robot.SetDO(i, status, smooth, block);
22        Thread.Sleep(300);
23    }
24
25    status = 1;
26
27    for (int i = 0; i < 2; i++)
28    {
29        robot.SetToolDO(i, status, smooth, block);
30        Thread.Sleep(1000);
31    }
32
33    status = 0;
34
35    for (int i = 0; i < 2; i++)
36    {
37        robot.SetToolDO(i, status, smooth, block);
38        Thread.Sleep(1000);
39    }
40
41    for (int i = 0; i < 100; i++)
42    {
43        robot.SetAO(0, i, block);
44        Thread.Sleep(30);
45    }
46
47    for (int i = 0; i < 100; i++)
48    {
49        robot.SetToolAO(0, i, block);
50        Thread.Sleep(30);
51    }
52
53}

5.6. Ottieni ingresso digitale del cabinet di controllo

1/**
2* @brief  Ottieni ingresso digitale del cabinet 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-Basso livello, 1-Alto livello
6* @return  Codice di errore
7*/
8int GetDI(int id, byte block, ref byte level);

5.7. Ottieni ingresso digitale dell’utensile

1/**
2* @brief  Ottieni ingresso digitale 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-Basso livello, 1-Alto livello
6* @return  Codice di errore
7*/
8int GetToolDI(int id, byte block, ref byte level);

5.8. Ottieni ingresso analogico del cabinet di controllo

1/**
2* @brief  Ottieni ingresso analogico del cabinet 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 in ingresso, intervallo [0~100] corrispondente a corrente [0~20mS] o tensione [0~10V]
6* @return  Codice di errore
7*/
8int GetAI(int id, byte block, ref float persent);

5.9. Ottieni ingresso analogico dell’utensile

1/**
2* @brief  Ottieni ingresso analogico 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 in ingresso, intervallo [0~100] corrispondente a corrente [0~20mS] o tensione [0~10V]
6* @return  Codice di errore
7*/
8int GetToolAI(int id, byte block, ref float persent);

5.10. Ottieni lo stato del pulsante di registrazione all’estremità del robot

1/**
2* @brief Ottieni lo stato del pulsante di registrazione all'estremità del robot
3* @param [out] state Stato pulsante, 0-Premuto, 1-Rilasciato
4* @return Codice di errore
5*/
6int GetAxlePointRecordBtnState(ref byte state);

5.11. Ottieni lo stato delle uscite DO all’estremità del robot

1/**
2* @brief Ottieni lo stato delle uscite DO all'estremità del robot
3* @param [out] do_state Stato uscite DO, do0~do1 corrisponde a bit1~bit2, a partire da bit0
4* @return Codice di errore
5*/
6int GetToolDO(ref byte do_state);

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

1/**
2* @brief Ottieni 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*/
7int GetDO(ref int do_state_h, ref int do_state_l);

5.13. Esempio di codice per ottenere lo stato DI, DO del robot

 1private void button15_Click(object sender, EventArgs e)
 2{
 3    byte status = 1;
 4    byte smooth = 0;
 5    byte block = 0;
 6    byte di = 0, tool_di = 0;
 7    float ai = 0.0f, tool_ai = 0.0f;
 8    float value = 0.0f;
 9
10    robot.GetDI(0, block, ref di);
11    Console.WriteLine($"di0: {di}");
12
13    tool_di = (byte)robot.GetToolDI(1, block, ref tool_di);
14    Console.WriteLine($"tool_di1: {tool_di}");
15
16    robot.GetAI(0, block, ref ai);
17    Console.WriteLine($"ai0: {ai}");
18
19    tool_ai = robot.GetToolAI(0, block, ref tool_ai);
20    Console.WriteLine($"tool_ai0: {tool_ai}");
21
22    byte _button_state = 0;
23    robot.GetAxlePointRecordBtnState(ref _button_state);
24    Console.WriteLine($"_button_state is: {_button_state}");
25
26    byte tool_do_state = 0;
27    robot.GetToolDO(ref tool_do_state);
28    Console.WriteLine($"tool DO state is: {tool_do_state}");
29
30    int do_state_h = 0;
31    int do_state_l = 0;
32    robot.GetDO(ref do_state_h, ref do_state_l);
33    Console.WriteLine($"DO state high is: {do_state_h}\n DO state low is: {do_state_l}");
34}

5.14. Attendi ingresso digitale del cabinet di controllo

1/**
2* @brief Attendi ingresso digitale del cabinet 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 di attesa massimo, unità ms
6* @param  [in]  opt  Strategia dopo timeout, 0-Arresta programma e indica timeout, 1-Ignora indicazione timeout e continua esecuzione programma, 2-Aspetta indefinitamente
7* @return  Codice di errore
8*/
9int WaitDI(int id, byte status, int max_time, int opt);

5.15. Attendi ingressi digitali multipli del cabinet di controllo

 1/**
 2* @brief Attendi ingressi digitali multipli del cabinet di controllo
 3* @param  [in] mode 0-AND multipli, 1-OR multipli
 4* @param  [in] id  Numero io, bit0~bit7 corrisponde a DI0~DI7, bit8~bit15 corrisponde a CI0~CI7
 5* @param  [in]  status 0-Spento, 1-Acceso
 6* @param  [in]  max_time  Tempo di attesa massimo, unità ms
 7* @param  [in]  opt  Strategia dopo timeout, 0-Arresta programma e indica timeout, 1-Ignora indicazione timeout e continua esecuzione programma, 2-Aspetta indefinitamente
 8* @return  Codice di errore
 9*/
10int WaitMultiDI(int mode, int id, byte status, int max_time, int opt);

5.16. Attendi ingresso digitale dell’utensile

1/**
2* @brief Attendi 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 di attesa massimo, unità ms
6* @param  [in]  opt  Strategia dopo timeout, 0-Arresta programma e indica timeout, 1-Ignora indicazione timeout e continua esecuzione programma, 2-Aspetta indefinitamente
7* @return  Codice di errore
8*/
9int WaitToolDI(int id, byte status, int max_time, int opt);

5.17. Attendi ingresso analogico del cabinet di controllo

 1/**
 2* @brief Attendi ingresso analogico del cabinet 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 in ingresso, intervallo [0~100] corrispondente a corrente [0~20mS] o tensione [0~10V]
 6* @param  [in]  max_time  Tempo di attesa massimo, unità ms
 7* @param  [in]  opt  Strategia dopo timeout, 0-Arresta programma e indica timeout, 1-Ignora indicazione timeout e continua esecuzione programma, 2-Aspetta indefinitamente
 8* @return  Codice di errore
 9*/
10int WaitAI(int id, int sign, float value, int max_time, int opt);

5.18. Attendi ingresso analogico dell’utensile

 1/**
 2* @brief Attendi 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 in ingresso, intervallo [0~100] corrispondente a corrente [0~20mS] o tensione [0~10V]
 6* @param  [in]  max_time  Tempo di attesa massimo, unità ms
 7* @param  [in]  opt  Strategia dopo timeout, 0-Arresta programma e indica timeout, 1-Ignora indicazione timeout e continua esecuzione programma, 2-Aspetta indefinitamente
 8* @return  Codice di errore
 9*/
10int WaitToolAI(int id, int sign, float value, int max_time, int opt);

5.19. Esempio di codice per attendere segnali di ingresso digitali e analogici del cabinet di controllo

 1private void btnIOTest_Click(object sender, EventArgs e)
 2{
 3    byte status = 1;
 4    byte smooth = 0;
 5    byte block = 0;
 6    byte di = 0, tool_di = 0;
 7    float ai = 0.0f, tool_ai = 0.0f;
 8    float value = 0.0f;
 9
10    int rtn = robot.WaitDI(0, 1, 1000, 1);
11    Console.WriteLine("WaitDI over; rtn is: " + rtn);
12
13    robot.WaitMultiDI(1, 3, 3, 1000, 1);
14    Console.WriteLine("WaitMultiDI over; rtn is: " + rtn);
15
16    robot.WaitToolDI(1, 1, 1000, 1);
17    Console.WriteLine("WaitToolDI over; rtn is: " + rtn);
18
19    robot.WaitAI(0, 0, 50, 1000, 1);
20    Console.WriteLine("WaitAI over; rtn is: " + rtn);
21
22    robot.WaitToolAI(0, 0, 50, 1000, 1);
23    Console.WriteLine("WaitToolAI over; rtn is: " + rtn);
24}

5.20. Imposta se resettare le uscite DO del cabinet di controllo dopo arresto/pausa

1/**
2* @brief  Imposta se resettare le uscite DO del cabinet di controllo dopo arresto/pausa
3* @param  [in] resetFlag  0-Non resettare; 1-Resetta
4* @return  Codice di errore
5*/
6int SetOutputResetCtlBoxDO(int resetFlag);

5.21. Imposta se resettare le uscite AO del cabinet di controllo dopo arresto/pausa

1/**
2* @brief  Imposta se resettare le uscite AO del cabinet di controllo dopo arresto/pausa
3* @param  [in] resetFlag  0-Non resettare; 1-Resetta
4* @return  Codice di errore
5*/
6int SetOutputResetCtlBoxAO(int resetFlag);

5.22. Imposta se resettare le uscite DO dell’utensile all’estremità dopo arresto/pausa

1/**
2* @brief  Imposta se resettare le uscite DO dell'utensile all'estremità dopo arresto/pausa
3* @param  [in] resetFlag  0-Non resettare; 1-Resetta
4* @return  Codice di errore
5*/
6int SetOutputResetAxleDO(int resetFlag);

5.23. Imposta se resettare le uscite AO dell’utensile all’estremità dopo arresto/pausa

1/**
2* @brief  Imposta se resettare le uscite AO dell'utensile all'estremità dopo arresto/pausa
3* @param  [in] resetFlag  0-Non resettare; 1-Resetta
4* @return  Codice di errore
5*/
6int SetOutputResetAxleAO(int resetFlag);

5.24. Imposta se resettare le uscite DO estese dopo arresto/pausa

1/**
2* @brief  Imposta se resettare le uscite DO estese dopo arresto/pausa
3* @param  [in] resetFlag  0-Non resettare; 1-Resetta
4* @return  Codice di errore
5*/
6int SetOutputResetExtDO(int resetFlag);

5.25. Imposta se resettare le uscite AO estese dopo arresto/pausa

1/**
2* @brief  Imposta se resettare le uscite AO estese dopo arresto/pausa
3* @param  [in] resetFlag  0-Non resettare; 1-Resetta
4* @return  Codice di errore
5*/
6int SetOutputResetExtAO(int resetFlag);

5.26. Imposta se resettare le uscite SmartTool dopo arresto/pausa

1/**
2* @brief  Imposta se resettare le uscite SmartTool dopo arresto/pausa
3* @param  [in] resetFlag  0-Non resettare; 1-Resetta
4* @return  Codice di errore
5*/
6int SetOutputResetSmartToolDO(int resetFlag);

5.27. Esempio di codice per impostare il reset delle uscite dopo arresto/pausa del programma LUA

 1private void button17_Click(object sender, EventArgs e)
 2{
 3    for (int i = 0; i < 16; i++)
 4    {
 5        robot.SetDO(i, 1, 0, 0);
 6        Thread.Sleep(300);
 7    }
 8    int resetFlag = 1;
 9    int rtn = robot.SetOutputResetCtlBoxDO(resetFlag);
10    robot.SetOutputResetCtlBoxAO(resetFlag);
11    robot.SetOutputResetAxleDO(resetFlag);
12    robot.SetOutputResetAxleAO(resetFlag);
13    robot.SetOutputResetExtDO(resetFlag);
14    robot.SetOutputResetExtAO(resetFlag);
15    robot.SetOutputResetSmartToolDO(resetFlag);
16    robot.ProgramLoad("/fruser/Text1.lua");
17    robot.ProgramRun();
18}