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*/
9errno_t SetDO(int id, uint8_t status, uint8_t smooth, uint8_t 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*/
9errno_t SetToolDO(int id, uint8_t status, uint8_t smooth, uint8_t 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*/
8errno_t SetAO(int id, float value, uint8_t 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*/
8errno_t SetToolAO(int id, float value, uint8_t block);
5.5. Codebeispiel zum Setzen von Digital- und Analogausgängen
1int 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. 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] result 0-niedriger Pegel, 1-hoher Pegel
6* @return Fehlercode.
7*/
8errno_t GetDI(int id, uint8_t block, uint8_t *result);
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] result 0-niedriger Pegel, 1-hoher Pegel
6* @return Fehlercode.
7*/
8errno_t GetToolDI(int id, uint8_t block, uint8_t *result);
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] result Prozentwert des Eingangsstroms oder der -spannung, Bereich [0~100] entspricht Strom [0~20 mA] oder Spannung [0~10 V]
6* @return Fehlercode.
7*/
8errno_t GetAI(int id, uint8_t block, float *result);
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] result Prozentwert des Eingangsstroms oder der -spannung, Bereich [0~100] entspricht Strom [0~20 mA] oder Spannung [0~10 V]
6* @return Fehlercode.
7*/
8errno_t GetToolAI(int id, uint8_t block, float *result);
5.10. Status der Punktaufzeichnungstaste am Roboterende abrufen
1/**
2 * @brief Gibt den Status der Punktaufzeichnungstaste am Roboterende zurück.
3 * @param [out] state Tastenstatus, 0-gedrückt, 1-losgelassen
4 * @return Fehlercode.
5 */
6errno_t GetAxlePointRecordBtnState(uint8_t *state);
5.11. DO-Ausgangsstatus am Roboterende abrufen
1/**
2 * @brief Gibt den DO-Ausgangsstatus am Roboterende zurück.
3 * @param [out] do_state DO-Ausgangsstatus, do0~do1 entsprechen bit1~bit2, beginnend bei bit0.
4 * @return Fehlercode.
5 */
6errno_t GetToolDO(uint8_t *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 DO-Ausgangsstatus, co0~co7 entsprechen bit0~bit7.
4 * @param [out] do_state_l DO-Ausgangsstatus, do0~do7 entsprechen bit0~bit7.
5 * @return Fehlercode.
6 */
7errno_t GetDO(uint8_t *do_state_h, uint8_t *do_state_l);
5.13. Codebeispiel zum Abrufen von Roboter-DI/DO-Status
1int 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 robot.GetDI(0, block, &di);
19 printf("di0:%u\n", di);
20 robot.GetToolDI(1, block, &tool_di);
21 printf("tool_di1:%u\n", tool_di);
22 robot.GetAI(0, block, &ai);
23 printf("ai0:%f\n", ai);
24 robot.GetToolAI(0, block, &tool_ai);
25 printf("tool_ai0:%f\n", tool_ai);
26 uint8_t _button_state = 0;
27 robot.GetAxlePointRecordBtnState(&_button_state);
28 printf("_button_state is: %u\n", _button_state);
29 uint8_t tool_do_state = 0;
30 robot.GetToolDO(&tool_do_state);
31 printf("tool DO state is: %u\n", tool_do_state);
32 uint8_t do_state_h = 0;
33 uint8_t do_state_l = 0;
34 robot.GetDO(&do_state_h, &do_state_l);
35 printf("DO state high is: %u \n DO state low is: %u\n", do_state_h, do_state_l);
36 robot.CloseRPC();
37 return 0;
38}
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*/
9errno_t WaitDI(int id, uint8_t 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*/
10errno_t WaitMultiDI(int mode, int id, uint8_t 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*/
9errno_t WaitToolDI(int id, uint8_t 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*/
10errno_t WaitAI(int id, int sign, float 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*/
10errno_t WaitToolAI(int id, int sign, float value, int max_time, int opt);
5.19. Codebeispiel zum Warten auf digitale/analoge Eingangssignale des Steuerschranks
Geändert in Version 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. Einstellung, ob DO-Ausgänge des Steuerschranks nach Stopp/Pause zurückgesetzt werden
Neu in Version C++SDK-v2.1.5.0.
1/**
2* @brief Legt fest, ob die DO-Ausgänge des Steuerschranks nach einem Stopp/Pause zurückgesetzt werden.
3* @param [in] resetFlag 0-nicht zurücksetzen; 1-zurücksetzen
4* @param [in] reloadFlag Ob nach Wiederaufnahme der Pause neu geladen werden soll, 0-nicht laden; 1-laden
5* @return Fehlercode.
6*/
7errno_t SetOutputResetCtlBoxDO(int resetFlag, int reloadFlag = 0);
5.21. Einstellung, ob AO-Ausgänge des Steuerschranks nach Stopp/Pause zurückgesetzt werden
Neu in Version C++SDK-v2.1.5.0.
1/**
2* @brief Legt fest, ob die AO-Ausgänge des Steuerschranks nach einem Stopp/Pause zurückgesetzt werden.
3* @param [in] resetFlag 0-nicht zurücksetzen; 1-zurücksetzen
4* @param [in] reloadFlag Ob nach Wiederaufnahme der Pause neu geladen werden soll, 0-nicht laden; 1-laden
5* @return Fehlercode.
6*/
7errno_t SetOutputResetCtlBoxAO(int resetFlag, int reloadFlag = 0);
5.22. Einstellung, ob DO-Ausgänge des Endeffektorwerkzeugs nach Stopp/Pause zurückgesetzt werden
Neu in Version C++SDK-v2.1.5.0.
1/**
2* @brief Legt fest, ob die DO-Ausgänge des Endeffektorwerkzeugs nach einem Stopp/Pause zurückgesetzt werden.
3* @param [in] resetFlag 0-nicht zurücksetzen; 1-zurücksetzen
4* @param [in] reloadFlag Ob nach Wiederaufnahme der Pause neu geladen werden soll, 0-nicht laden; 1-laden
5* @return Fehlercode.
6*/
7errno_t SetOutputResetAxleDO(int resetFlag, int reloadFlag = 0);
5.23. Einstellung, ob AO-Ausgänge des Endeffektorwerkzeugs nach Stopp/Pause zurückgesetzt werden
Neu in Version C++SDK-v2.1.5.0.
1/**
2* @brief Legt fest, ob die AO-Ausgänge des Endeffektorwerkzeugs nach einem Stopp/Pause zurückgesetzt werden.
3* @param [in] resetFlag 0-nicht zurücksetzen; 1-zurücksetzen
4* @param [in] reloadFlag Ob nach Wiederaufnahme der Pause neu geladen werden soll, 0-nicht laden; 1-laden
5* @return Fehlercode.
6*/
7errno_t SetOutputResetAxleAO(int resetFlag, int reloadFlag = 0);
5.24. Einstellung, ob erweiterte DO-Ausgänge nach Stopp/Pause zurückgesetzt werden
Neu in Version C++SDK-v2.1.5.0.
1/**
2* @brief Legt fest, ob die erweiterten DO-Ausgänge nach einem Stopp/Pause zurückgesetzt werden.
3* @param [in] resetFlag 0-nicht zurücksetzen; 1-zurücksetzen
4* @param [in] reloadFlag Ob nach Wiederaufnahme der Pause neu geladen werden soll, 0-nicht laden; 1-laden
5* @return Fehlercode.
6*/
7errno_t SetOutputResetExtDO(int resetFlag, int reloadFlag = 0);
5.25. Einstellung, ob erweiterte AO-Ausgänge nach Stopp/Pause zurückgesetzt werden
Neu in Version C++SDK-v2.1.5.0.
1/**
2* @brief Legt fest, ob die erweiterten AO-Ausgänge nach einem Stopp/Pause zurückgesetzt werden.
3* @param [in] resetFlag 0-nicht zurücksetzen; 1-zurücksetzen
4* @param [in] reloadFlag Ob nach Wiederaufnahme der Pause neu geladen werden soll, 0-nicht laden; 1-laden
5* @return Fehlercode.
6*/
7errno_t SetOutputResetExtAO(int resetFlag, int reloadFlag = 0);
5.26. Einstellung, ob SmartTool-DO-Ausgänge nach Stopp/Pause zurückgesetzt werden
Neu in Version C++SDK-v2.1.5.0.
1/**
2* @brief Legt fest, ob die SmartTool-DO-Ausgänge nach einem Stopp/Pause zurückgesetzt werden.
3* @param [in] resetFlag 0-nicht zurücksetzen; 1-zurücksetzen
4* @param [in] reloadFlag Ob nach Wiederaufnahme der Pause neu geladen werden soll, 0-nicht laden; 1-laden
5* @return Fehlercode.
6*/
7errno_t SetOutputResetSmartToolDO(int resetFlag, int reloadFlag = 0);
5.27. Codebeispiel zum Zurücksetzen der Ausgänge nach LUA-Programmstopp/-pause
Neu in Version C++SDK-v2.1.5.0.
1int TestDOReset(void)
2{
3 ROBOT_STATE_PKG pkg = {};
4 FRRobot robot;
5 robot.LoggerInit();
6 robot.SetLoggerLevel(3);
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(200);
17 }
18 int resetFlag = 0;
19 int resumeReloadFlag = 0;
20 rtn = robot.SetOutputResetCtlBoxDO(resetFlag, resumeReloadFlag);
21 robot.SetOutputResetCtlBoxAO(resetFlag, resumeReloadFlag);
22 robot.SetOutputResetAxleDO(resetFlag, resumeReloadFlag);
23 robot.SetOutputResetAxleAO(resetFlag, resumeReloadFlag);
24 robot.SetOutputResetExtDO(resetFlag, resumeReloadFlag);
25 robot.SetOutputResetExtAO(resetFlag, resumeReloadFlag);
26 robot.SetOutputResetSmartToolDO(resetFlag, resumeReloadFlag);
27 robot.ProgramLoad("/fruser/test.lua");
28 robot.ProgramRun();
29 robot.Sleep(2000);
30 robot.PauseMotion();
31 robot.Sleep(2000);
32 robot.ResumeMotion();
33 robot.Sleep(2000);
34 robot.CloseRPC();
35 return 0;
36}