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 Output DO Scatola Controllo Si Ripristina Dopo Stop/Pausa
1/**
2* @brief Imposta se l'output DO della scatola di controllo si ripristina dopo stop/pausa
3* @param [in] resetFlag 0-Non ripristina; 1-Ripristina
4* @param [in] reloadFlag Se ricaricare dopo ripresa pausa, 0-Non caricare; 1-Carica
5* @return Codice errore
6*/
7public int SetOutputResetCtlBoxDO(int resetFlag, int reloadFlag);
5.21. Imposta Se Output AO Scatola Controllo Si Ripristina Dopo Stop/Pausa
1/**
2* @brief Imposta se l'output AO della scatola di controllo si ripristina dopo stop/pausa
3* @param [in] resetFlag 0-Non ripristina; 1-Ripristina
4* @param [in] reloadFlag Se ricaricare dopo ripresa pausa, 0-Non caricare; 1-Carica
5* @return Codice errore
6*/
7public int SetOutputResetCtlBoxAO(int resetFlag, int reloadFlag);
5.22. Imposta Se Output DO Utensile Terminale Si Ripristina Dopo Stop/Pausa
1/**
2* @brief Imposta se l'output DO dell'utensile terminale si ripristina dopo stop/pausa
3* @param [in] resetFlag 0-Non ripristina; 1-Ripristina
4* @param [in] reloadFlag Se ricaricare dopo ripresa pausa, 0-Non caricare; 1-Carica
5* @return Codice errore
6*/
7public int SetOutputResetAxleDO(int resetFlag, int reloadFlag);
5.23. Imposta Se Output AO Utensile Terminale Si Ripristina Dopo Stop/Pausa
1/**
2* @brief Imposta se l'output AO dell'utensile terminale si ripristina dopo stop/pausa
3* @param [in] resetFlag 0-Non ripristina; 1-Ripristina
4* @param [in] reloadFlag Se ricaricare dopo ripresa pausa, 0-Non caricare; 1-Carica
5* @return Codice errore
6*/
7public int SetOutputResetAxleAO(int resetFlag, int reloadFlag);
5.24. Imposta Se Output DO Esteso Si Ripristina Dopo Stop/Pausa
1/**
2* @brief Imposta se l'output DO esteso si ripristina dopo stop/pausa
3* @param [in] resetFlag 0-Non ripristina; 1-Ripristina
4* @param [in] reloadFlag Se ricaricare dopo ripresa pausa, 0-Non caricare; 1-Carica
5* @return Codice errore
6*/
7public int SetOutputResetExtDO(int resetFlag, int reloadFlag);
5.25. Imposta Se Output AO Esteso Si Ripristina Dopo Stop/Pausa
1/**
2* @brief Imposta se l'output AO esteso si ripristina dopo stop/pausa
3* @param [in] resetFlag 0-Non ripristina; 1-Ripristina
4* @param [in] reloadFlag Se ricaricare dopo ripresa pausa, 0-Non caricare; 1-Carica
5* @return Codice errore
6*/
7public int SetOutputResetExtAO(int resetFlag, int reloadFlag);
5.26. Imposta Se Output SmartTool Si Ripristina Dopo Stop/Pausa
1/**
2* @brief Imposta se l'output SmartTool si ripristina dopo stop/pausa
3* @param [in] resetFlag 0-Non ripristina; 1-Ripristina
4* @param [in] reloadFlag Se ricaricare dopo ripresa pausa, 0-Non caricare; 1-Carica
5* @return Codice errore
6*/
7public int SetOutputResetSmartToolDO(int resetFlag, int reloadFlag);
5.27. Esempio Codice Impostazione Ripristino Output Dopo Stop/Pausa Programma Lua
1public void TestDOReset()
2{
3 ROBOT_STATE_PKG pkg = new ROBOT_STATE_PKG();
4
5 for (int i = 0; i < 16; i++)
6 {
7 robot.SetDO(i, 1, 0, 0);
8 Thread.Sleep(200);
9 }
10
11 int resetFlag = 1;
12 int resumeReloadFlag = 1;
13 int rtn = robot.SetOutputResetCtlBoxDO(resetFlag, resumeReloadFlag);
14 robot.SetOutputResetCtlBoxAO(resetFlag, resumeReloadFlag);
15 robot.SetOutputResetAxleDO(resetFlag, resumeReloadFlag);
16 robot.SetOutputResetAxleAO(resetFlag, resumeReloadFlag);
17 robot.SetOutputResetExtDO(resetFlag, resumeReloadFlag);
18 robot.SetOutputResetExtAO(resetFlag, resumeReloadFlag);
19 robot.SetOutputResetSmartToolDO(resetFlag, resumeReloadFlag);
20
21 robot.ProgramLoad("/fruser/test.lua");
22 robot.ProgramRun();
23
24 Thread.Sleep(2000);
25 robot.PauseMotion();
26 Thread.Sleep(2000);
27 robot.ResumeMotion();
28 Thread.Sleep(2000);
29}