5. Roboter-I/O
5.1. Digitalausgang des Steuerschranks setzen
1/**
2* @brief Setzt einen digitalen Ausgang des Steuerschranks.
3* @param [in] id I/O-Nummer, Bereich [0~15].
4* @param [in] status 0-aus, 1-ein.
5* @param [in] smooth 0-nicht glätten, 1-glätten.
6* @param [in] block 0-blockierend, 1-nicht blockierend.
7* @return Fehlercode.
8*/
9int SetDO(int id, int status, int smooth, int block);
5.2. Digitalausgang des Werkzeugs setzen
1/**
2* @brief Setzt einen digitalen Ausgang des Werkzeugs.
3* @param [in] id I/O-Nummer, Bereich [0~1].
4* @param [in] status 0-aus, 1-ein.
5* @param [in] smooth 0-nicht glätten, 1-glätten.
6* @param [in] block 0-blockierend, 1-nicht blockierend.
7* @return Fehlercode.
8*/
9int SetToolDO(int id, int status, int smooth, int block);
5.3. Analogausgang des Steuerschranks setzen
1/**
2* @brief Setzt einen analogen Ausgang des Steuerschranks.
3* @param [in] id I/O-Nummer, Bereich [0~1].
4* @param [in] value Prozentwert des Stroms oder der Spannung, Bereich [0~100] entspricht Strom [0~20 mA] oder Spannung [0~10 V].
5* @param [in] block 0-blockierend, 1-nicht blockierend.
6* @return Fehlercode.
7*/
8int SetAO(int id, double value, int block);
5.4. Analogausgang des Werkzeugs setzen
1/**
2* @brief Setzt einen analogen Ausgang des Werkzeugs.
3* @param [in] id I/O-Nummer, Bereich [0].
4* @param [in] value Prozentwert des Stroms oder der Spannung, Bereich [0~100] entspricht Strom [0~20 mA] oder Spannung [0~10 V].
5* @param [in] block 0-blockierend, 1-nicht blockierend.
6* @return Fehlercode.
7*/
8int SetToolAO(int id, double value, int block);
5.5. Codebeispiel zum Setzen von Digital- und Analogausgängen
1public static int TestAODO(Robot robot)
2{
3
4 int status = 1;
5 int smooth = 0;
6 int block = 0;
7
8 for (int i = 0; i < 16; i++)
9 {
10 robot.SetDO(i, status, smooth, block);
11 robot.Sleep(300);
12 }
13
14 status = 0;
15
16 for (int i = 0; i < 16; i++)
17 {
18 robot.SetDO(i, status, smooth, block);
19 robot.Sleep(300);
20 }
21
22 status = 1;
23
24 for (int i = 0; i < 2; i++)
25 {
26 robot.SetToolDO(i, status, smooth, block);
27 robot.Sleep(1000);
28 }
29
30 status = 0;
31
32 for (int i = 0; i < 2; i++)
33 {
34 robot.SetToolDO(i, status, smooth, block);
35 robot.Sleep(1000);
36 }
37
38 for (int i = 0; i < 100; i++)
39 {
40 robot.SetAO(0, i, block);
41 robot.Sleep(30);
42 }
43
44 for (int i = 0; i < 100; i++)
45 {
46 robot.SetToolAO(0, i, block);
47 robot.Sleep(30);
48 }
49
50 robot.CloseRPC();
51 return 0;
52}
5.6. Digitaleingang des Steuerschranks abrufen
1/**
2* @brief Gibt den Zustand eines digitalen Eingangs des Steuerschranks zurück.
3* @param [in] id I/O-Nummer, Bereich [0~15].
4* @param [in] block 0-blockierend, 1-nicht blockierend.
5* @param [out] level Array der Länge 1, 0-niedriger Pegel, 1-hoher Pegel.
6* @return Fehlercode.
7*/
8int GetDI(int id, int block, int[] level);
5.7. Digitaleingang des Werkzeugs abrufen
1/**
2* @brief Gibt den Zustand eines digitalen Eingangs des Werkzeugs zurück.
3* @param [in] id I/O-Nummer, Bereich [0~1].
4* @param [in] block 0-blockierend, 1-nicht blockierend.
5* @param [out] level Array der Länge 1, 0-niedriger Pegel, 1-hoher Pegel.
6* @return Fehlercode.
7*/
8int GetToolDI(int id, int block, int[] level);
5.8. Analogeingang des Steuerschranks abrufen
1/**
2* @brief Gibt den Wert eines analogen Eingangs des Steuerschranks zurück.
3* @param [in] id I/O-Nummer, Bereich [0~1].
4* @param [in] block 0-blockierend, 1-nicht blockierend.
5* @param [out] persent Array der Länge 1, Prozentwert des Eingangsstroms oder der -spannung, Bereich [0~100] entspricht Strom [0~20 mA] oder Spannung [0~10 V].
6* @return Fehlercode.
7*/
8int GetAI(int id, int block, double[] persent);
5.9. Analogeingang des Werkzeugs abrufen
1/**
2* @brief Gibt den Wert eines analogen Eingangs des Werkzeugs zurück.
3* @param [in] id I/O-Nummer, Bereich [0].
4* @param [in] block 0-blockierend, 1-nicht blockierend.
5* @param [out] persent Array der Länge 1, Prozentwert des Eingangsstroms oder der -spannung, Bereich [0~100] entspricht Strom [0~20 mA] oder Spannung [0~10 V].
6* @return Fehlercode.
7*/
8int GetToolAI(int id, int block, double[] persent);
5.10. Status der Punktaufzeichnungstaste am Roboterende abrufen
1/**
2* @brief Gibt den Status der Punktaufzeichnungstaste am Roboterende zurück.
3* @param [out] state Array der Länge 1, Tastenstatus, 0-gedrückt, 1-losgelassen.
4* @return Fehlercode.
5*/
6int GetAxlePointRecordBtnState(int[] state);
5.11. DO-Ausgangsstatus am Roboterende abrufen
1/**
2* @brief Gibt den DO-Ausgangsstatus am Roboterende zurück.
3* @param [out] do_state Array der Länge 1, DO-Ausgangsstatus, do0~do1 entsprechen bit1~bit2, beginnend bei bit0.
4* @return Fehlercode.
5*/
6int GetToolDO(int[] do_state);
5.12. DO-Ausgangsstatus des Robotersteuerschranks abrufen
1/**
2* @brief Gibt den DO-Ausgangsstatus des Robotersteuerschranks zurück.
3* @param [out] do_state_h Array der Länge 1, DO-Ausgangsstatus, co0~co7 entsprechen bit0~bit7.
4* @param [out] do_state_l Array der Länge 1, DO-Ausgangsstatus, do0~do7 entsprechen bit0~bit7.
5* @return Fehlercode.
6*/
7int GetDO(int[] do_state_h, int[] do_state_l);
5.13. Codebeispiel zum Abrufen von Roboter-DI/DO-Status
1public static int TestGetDIAI(Robot robot)
2{
3 int status = 1;
4 int smooth = 0;
5 int block = 0;
6 int[] di =new int[]{0}, tool_di =new int[] {0};
7 double[] ai =new double[] {0}, tool_ai = new double[]{0};
8 double value = 0.0;
9
10
11 robot.GetDI(0, block, di);
12 System.out.println("di0:"+di[0]);
13
14 robot.GetToolDI(1, block, tool_di);
15 System.out.println("tool_di1:"+ tool_di[0]);
16
17 robot.GetAI(0, block, ai);
18 System.out.println("ai0:"+ ai[0]);
19
20 robot.GetToolAI(0, block, tool_ai);
21 System.out.println("tool_ai0:"+ tool_ai[0]);
22
23 int[] _button_state=new int[]{0};
24 robot.GetAxlePointRecordBtnState(_button_state);
25 System.out.println("_button_state is: "+ _button_state[0]);
26
27 int[] tool_do_state=new int[]{0};
28 robot.GetToolDO(tool_do_state);
29 System.out.println("tool DO state is: "+ tool_do_state[0]);
30
31 int[] do_state_h=new int[]{0};
32 int[] do_state_l=new int[]{0};
33 robot.GetDO(do_state_h, do_state_l);
34 System.out.println("DO state high is: "+do_state_h[0]+", DO state low is: "+ do_state_l[0]);
35
36 return 0;
37}
5.14. Auf digitalen Eingang des Steuerschranks warten
1/**
2* @brief Wartet auf einen digitalen Eingang des Steuerschranks.
3* @param [in] id I/O-Nummer, Bereich [0~15].
4* @param [in] status 0-aus, 1-ein.
5* @param [in] max_time Maximale Wartezeit, Einheit ms.
6* @param [in] opt Strategie bei Zeitüberschreitung: 0-Programm stoppen und Timeout melden, 1-Timeout ignorieren und Programm fortsetzen, 2-unbegrenzt warten.
7* @return Fehlercode.
8*/
9int WaitDI(int id, int status, int max_time, int opt);
5.15. Auf mehrere digitale Eingänge des Steuerschranks warten
1/**
2* @brief Wartet auf mehrere digitale Eingänge des Steuerschranks.
3* @param [in] mode 0-UND-Verknüpfung aller Kanäle, 1-ODER-Verknüpfung aller Kanäle.
4* @param [in] id I/O-Nummern als Bitmaske, Bits 0-7 für DI0-DI7, Bits 8-15 für CI0-CI7.
5* @param [in] status 0-aus, 1-ein.
6* @param [in] max_time Maximale Wartezeit, Einheit ms.
7* @param [in] opt Strategie bei Zeitüberschreitung: 0-Programm stoppen und Timeout melden, 1-Timeout ignorieren und Programm fortsetzen, 2-unbegrenzt warten.
8* @return Fehlercode.
9*/
10int WaitMultiDI(int mode, int id, int status, int max_time, int opt);
5.16. Auf digitalen Eingang des Werkzeugs warten
1/**
2* @brief Wartet auf einen digitalen Eingang des Werkzeugs.
3* @param [in] id I/O-Nummer, Bereich [0~1].
4* @param [in] status 0-aus, 1-ein.
5* @param [in] max_time Maximale Wartezeit, Einheit ms.
6* @param [in] opt Strategie bei Zeitüberschreitung: 0-Programm stoppen und Timeout melden, 1-Timeout ignorieren und Programm fortsetzen, 2-unbegrenzt warten.
7* @return Fehlercode.
8*/
9int WaitToolDI(int id, int status, int max_time, int opt);
5.17. Auf analogen Eingang des Steuerschranks warten
1/**
2* @brief Wartet auf einen analogen Eingang des Steuerschranks.
3* @param [in] id I/O-Nummer, Bereich [0~1].
4* @param [in] sign 0-größer als, 1-kleiner als.
5* @param [in] value Prozentwert des Eingangsstroms oder der -spannung, Bereich [0~100] entspricht Strom [0~20 mA] oder Spannung [0~10 V].
6* @param [in] max_time Maximale Wartezeit, Einheit ms.
7* @param [in] opt Strategie bei Zeitüberschreitung: 0-Programm stoppen und Timeout melden, 1-Timeout ignorieren und Programm fortsetzen, 2-unbegrenzt warten.
8* @return Fehlercode.
9*/
10int WaitAI(int id, int sign, double value, int max_time, int opt);
5.18. Auf analogen Eingang des Werkzeugs warten
1/**
2* @brief Wartet auf einen analogen Eingang des Werkzeugs.
3* @param [in] id I/O-Nummer, Bereich [0].
4* @param [in] sign 0-größer als, 1-kleiner als.
5* @param [in] value Prozentwert des Eingangsstroms oder der -spannung, Bereich [0~100] entspricht Strom [0~20 mA] oder Spannung [0~10 V].
6* @param [in] max_time Maximale Wartezeit, Einheit ms.
7* @param [in] opt Strategie bei Zeitüberschreitung: 0-Programm stoppen und Timeout melden, 1-Timeout ignorieren und Programm fortsetzen, 2-unbegrenzt warten.
8* @return Fehlercode.
9*/
10int WaitToolAI(int id, int sign, double value, int max_time, int opt);
5.19. Codebeispiel zum Warten auf digitale/analoge Eingangssignale des Steuerschranks
1public static int TestWaitDIAI(Robot robot)
2{
3 int rtn=-1;
4
5 int status = 1;
6 int smooth = 0;
7 int block = 0;
8 int di = 0, tool_di = 0;
9 double ai = 0.0, tool_ai = 0.0;
10 double value = 0.0;
11
12 rtn = robot.WaitDI(0, 1, 1000, 1);
13 System.out.println("WaitDI over; rtn is: "+ rtn);
14
15 robot.WaitMultiDI(1, 3, 3, 1000, 1);
16 System.out.println("WaitDI over; rtn is: "+ rtn);
17
18 robot.WaitToolDI(1, 1, 1000, 1);
19 System.out.println("WaitDI over; rtn is: " + rtn);
20
21 robot.WaitAI(0, 0, 50, 1000, 1);
22 System.out.println("WaitDI over; rtn is: " + rtn);
23
24 robot.WaitToolAI(0, 0, 50, 1000, 1);
25 System.out.println("WaitDI over; rtn is: " + rtn);
26 return 0;
27}
5.20. Einstellung, ob DO-Ausgänge des Steuerschranks nach Stopp/Pause zurückgesetzt werden
1/**
2* @brief Legt fest, ob die DO-Ausgänge des Steuerschranks nach einem Stopp/Pause zurückgesetzt werden.
3* @param resetFlag 0-nicht zurücksetzen; 1-zurücksetzen.
4* @param reloadFlag Ob nach Wiederaufnahme der Pause neu geladen werden soll, 0-nicht laden; 1-laden.
5* @return Fehlercode.
6*/
7public int SetOutputResetCtlBoxDO(int resetFlag, int reloadFlag);
5.21. Einstellung, ob AO-Ausgänge des Steuerschranks nach Stopp/Pause zurückgesetzt werden
1/**
2* @brief Legt fest, ob die AO-Ausgänge des Steuerschranks nach einem Stopp/Pause zurückgesetzt werden.
3* @param resetFlag 0-nicht zurücksetzen; 1-zurücksetzen.
4* @param reloadFlag Ob nach Wiederaufnahme der Pause neu geladen werden soll, 0-nicht laden; 1-laden.
5* @return Fehlercode.
6*/
7public int SetOutputResetCtlBoxAO(int resetFlag, int reloadFlag);
5.22. Einstellung, ob DO-Ausgänge des Endeffektorwerkzeugs nach Stopp/Pause zurückgesetzt werden
1/**
2* @brief Legt fest, ob die DO-Ausgänge des Endeffektorwerkzeugs nach einem Stopp/Pause zurückgesetzt werden.
3* @param resetFlag 0-nicht zurücksetzen; 1-zurücksetzen.
4* @param reloadFlag Ob nach Wiederaufnahme der Pause neu geladen werden soll, 0-nicht laden; 1-laden.
5* @return Fehlercode.
6*/
7public int SetOutputResetAxleDO(int resetFlag, int reloadFlag);
5.23. Einstellung, ob AO-Ausgänge des Endeffektorwerkzeugs nach Stopp/Pause zurückgesetzt werden
1/**
2* @brief Legt fest, ob die AO-Ausgänge des Endeffektorwerkzeugs nach einem Stopp/Pause zurückgesetzt werden.
3* @param resetFlag 0-nicht zurücksetzen; 1-zurücksetzen.
4* @param reloadFlag Ob nach Wiederaufnahme der Pause neu geladen werden soll, 0-nicht laden; 1-laden.
5* @return Fehlercode.
6*/
7public int SetOutputResetAxleAO(int resetFlag, int reloadFlag);
5.24. Einstellung, ob erweiterte DO-Ausgänge nach Stopp/Pause zurückgesetzt werden
1/**
2* @brief Legt fest, ob die erweiterten DO-Ausgänge nach einem Stopp/Pause zurückgesetzt werden.
3* @param resetFlag 0-nicht zurücksetzen; 1-zurücksetzen.
4* @param reloadFlag Ob nach Wiederaufnahme der Pause neu geladen werden soll, 0-nicht laden; 1-laden.
5* @return Fehlercode.
6*/
7public int SetOutputResetExtDO(int resetFlag, int reloadFlag);
5.25. Einstellung, ob erweiterte AO-Ausgänge nach Stopp/Pause zurückgesetzt werden
1/**
2* @brief Legt fest, ob die erweiterten AO-Ausgänge nach einem Stopp/Pause zurückgesetzt werden.
3* @param resetFlag 0-nicht zurücksetzen; 1-zurücksetzen.
4* @param reloadFlag Ob nach Wiederaufnahme der Pause neu geladen werden soll, 0-nicht laden; 1-laden.
5* @return Fehlercode.
6*/
7public int SetOutputResetExtAO(int resetFlag, int reloadFlag);
5.26. Einstellung, ob SmartTool-DO-Ausgänge nach Stopp/Pause zurückgesetzt werden
1/**
2* @brief Legt fest, ob die SmartTool-DO-Ausgänge nach einem Stopp/Pause zurückgesetzt werden.
3* @param resetFlag 0-nicht zurücksetzen; 1-zurücksetzen.
4* @param reloadFlag Ob nach Wiederaufnahme der Pause neu geladen werden soll, 0-nicht laden; 1-laden.
5* @return Fehlercode.
6*/
7public int SetOutputResetSmartToolDO(int resetFlag, int reloadFlag);
5.27. Codebeispiel zum Zurücksetzen der Ausgänge nach LUA-Programmstopp/-pause
1public static void TestDOReset(Robot robot)
2{
3 for (int i = 0; i < 16; i++)
4 {
5 robot.SetDO(i, 1, 0, 0);
6 robot.Sleep(200);
7 }
8 int resetFlag = 1;
9 int resumeReloadFlag = 1;
10 int rtn = robot.SetOutputResetCtlBoxDO(resetFlag, resumeReloadFlag);
11 robot.SetOutputResetCtlBoxAO(resetFlag, resumeReloadFlag);
12 robot.SetOutputResetAxleDO(resetFlag, resumeReloadFlag);
13 robot.SetOutputResetAxleAO(resetFlag, resumeReloadFlag);
14 robot.SetOutputResetExtDO(resetFlag, resumeReloadFlag);
15 robot.SetOutputResetExtAO(resetFlag, resumeReloadFlag);
16 robot.SetOutputResetSmartToolDO(resetFlag, resumeReloadFlag);
17 robot.ProgramLoad("/fruser/test.lua");
18 robot.ProgramRun();
19 robot.Sleep(2000);
20 robot.PauseMotion();
21 robot.Sleep(2000);
22 robot.ResumeMotion();
23 robot.Sleep(2000);
24 robot.CloseRPC();
25}