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}

5.28. Konfigurierbare CI-Portfunktionen des Steuerkastens einstellen

 1/**
 2* @brief Einstellen der konfigurierbaren CI-Portfunktionen des Steuerkastens
 3* @param [in] config CI0-CI7 Funktionscodes;
 4* 0-Keine;1-Lichtbogenstart erfolgreich;2-Schweißgerät bereit;3-Förderbanderkennung;4-Pause;5-Fortsetzen;6-Start;7-Stopp;
 58-Pause/Fortsetzen;9-Start/Stopp;10-Fußtaster-Ziehen;11-Zur Arbeitsposition bewegen;12-Manuell/Auto umschalten;
 613-Drahtpositionssuche erfolgreich;14-Bewegungsunterbrechung;15-Hauptprogramm starten;16-Rückspulen starten;17-Startbestätigung;
 718-Photoelektrisches Erkennungssignal X;19-Photoelektrisches Erkennungssignal Y;20-Externer Not-Halt-Eingangssignal 1;21-Externer Not-Halt-Eingangssignal 2;
 822-Stufe 1 Reduzierungsmodus;23-Stufe 2 Reduzierungsmodus;24-Stufe 3 Reduzierungsmodus (Stopp);25-Schweißen fortsetzen;26-Schweißen beenden;
 927-Hilfszug aktivieren;28-Hilfszug deaktivieren;29-Hilfszug aktivieren/deaktivieren;30-Alle Fehler löschen;
1031-Manuell/Auto umschalten (High/Low-Pegel);32-Aktivieren;33-Deaktivieren;34-Aktivieren/Deaktivieren (steigende/fallende Flanke);35-Fixpunkt-Tracking starten/beenden
11* @return Fehlercode
12*/
13errno_t SetDIConfig(int config[8]);

5.29. Konfigurierbare CI-Portfunktionen des Steuerkastens abrufen

 1/**
 2* @brief Abrufen der konfigurierbaren CI-Portfunktionen des Steuerkastens
 3* @param [in] config CI0-CI7 Funktionscodes;
 4* 0-Keine;1-Lichtbogenstart erfolgreich;2-Schweißgerät bereit;3-Förderbanderkennung;4-Pause;5-Fortsetzen;6-Start;7-Stopp;
 58-Pause/Fortsetzen;9-Start/Stopp;10-Fußtaster-Ziehen;11-Zur Arbeitsposition bewegen;12-Manuell/Auto umschalten;
 613-Drahtpositionssuche erfolgreich;14-Bewegungsunterbrechung;15-Hauptprogramm starten;16-Rückspulen starten;17-Startbestätigung;
 718-Photoelektrisches Erkennungssignal X;19-Photoelektrisches Erkennungssignal Y;20-Externer Not-Halt-Eingangssignal 1;21-Externer Not-Halt-Eingangssignal 2;
 822-Stufe 1 Reduzierungsmodus;23-Stufe 2 Reduzierungsmodus;24-Stufe 3 Reduzierungsmodus (Stopp);25-Schweißen fortsetzen;26-Schweißen beenden;
 927-Hilfszug aktivieren;28-Hilfszug deaktivieren;29-Hilfszug aktivieren/deaktivieren;30-Alle Fehler löschen;
1031-Manuell/Auto umschalten (High/Low-Pegel);32-Aktivieren;33-Deaktivieren;34-Aktivieren/Deaktivieren (steigende/fallende Flanke);35-Fixpunkt-Tracking starten/beenden
11* @return Fehlercode
12*/
13errno_t GetDIConfig(int config[8]);

5.30. Konfigurierbare CO-Portfunktionen des Steuerkastens einstellen

 1/**
 2* @brief Einstellen der konfigurierbaren CO-Portfunktionen des Steuerkastens
 3* @param [out] config CO0-CO7 Funktionscodes;
 4* 0-Keine;1-Roboterfehler;2-Roboter in Bewegung;3-Spritzen start/stopp;4-Spritzpistolenreinigung;5-Gaszufuhrsignal;6-Lichtbogenstartsignal;7-Tippen Drahtvorschub;
 58-Rückwärts Drahtvorschub;9-JOB-Eingang 1;10-JOB-Eingang 2;11-JOB-Eingang 3;12-Förderband start/stopp Steuerung;13-Roboter pausiert;14-Arbeitsposition erreicht;
 615-Interferenzbereich erreicht;16-Drahtpositionssuche start/stopp Steuerung;17-Roboterstart abgeschlossen;18-Programm start/stopp;19-Auto/Manuell-Modus;20-Not-Halt-Ausgangssignal 1-Sicherheit;
 721-Not-Halt-Ausgangssignal 2-Sicherheit;22-Lua-Skriptprogramm läuft/gestoppt;23-Sicherheitsstatusausgang-Sicherheit;24-Schutzstopp-Statusausgang-Sicherheit;
 825-Roboter in Bewegung-Sicherheit;26-Roboter im Reduzierungsmodus-Sicherheit;27-Roboter nicht im Reduzierungsmodus-Sicherheit;28-Roboter nicht gestoppt;29-Roboterfehler-Befehlspunktfehler;
 930-Roboterfehler-Antriebsfehler;31-Roboterfehler-Weichgrenze überschritten;32-Roboterfehler-Kollisionsfehler;33-Roboterfehler-Fehler bei Anzahl aktiver Slaves;
1034-Roboterfehler-Slave-Fehler;35-Roboterfehler-IO-Fehler;36-Roboterfehler-Greiferfehler;37-Roboterfehler-Dateifehler;38-Roboterfehler-Singuläre Pose;
1139-Roboterfehler-Antriebskommunikationsfehler;40-Roboterfehler-Parameterfehler;41-Roboterfehler-Externe Achse Weichgrenze überschritten;42-Roboterwarnung-Warnung;
1243-Roboterwarnung-Sicherheitstürwarnung;44-Roboterwarnung-Bewegungswarnung;45-Roboterwarnung-Interferenzbereichswarnung;46-Roboterwarnung-Sicherheitswandwarnung;
1347-Aktivierungsstatus;48-Automatisches Anheben bei Unterbrechung;49-Würfel 1 Interferenzwarnung;50-Würfel 2 Interferenzwarnung;51-Würfel 3 Interferenzwarnung;52-Würfel 4 Interferenzwarnung;
14* @return Fehlercode
15*/
16errno_t SetDOConfig(int config[8]);

5.31. Konfigurierbare CO-Portfunktionen des Steuerkastens abrufen

 1/**
 2* @brief Abrufen der konfigurierbaren CO-Portfunktionen des Steuerkastens
 3* @param [out] config CO0-CO7 Funktionscodes;
 4* 0-Keine;1-Roboterfehler;2-Roboter in Bewegung;3-Spritzen start/stopp;4-Spritzpistolenreinigung;5-Gaszufuhrsignal;6-Lichtbogenstartsignal;7-Tippen Drahtvorschub;
 58-Rückwärts Drahtvorschub;9-JOB-Eingang 1;10-JOB-Eingang 2;11-JOB-Eingang 3;12-Förderband start/stopp Steuerung;13-Roboter pausiert;14-Arbeitsposition erreicht;
 615-Interferenzbereich erreicht;16-Drahtpositionssuche start/stopp Steuerung;17-Roboterstart abgeschlossen;18-Programm start/stopp;19-Auto/Manuell-Modus;20-Not-Halt-Ausgangssignal 1-Sicherheit;
 721-Not-Halt-Ausgangssignal 2-Sicherheit;22-Lua-Skriptprogramm läuft/gestoppt;23-Sicherheitsstatusausgang-Sicherheit;24-Schutzstopp-Statusausgang-Sicherheit;
 825-Roboter in Bewegung-Sicherheit;26-Roboter im Reduzierungsmodus-Sicherheit;27-Roboter nicht im Reduzierungsmodus-Sicherheit;28-Roboter nicht gestoppt;29-Roboterfehler-Befehlspunktfehler;
 930-Roboterfehler-Antriebsfehler;31-Roboterfehler-Weichgrenze überschritten;32-Roboterfehler-Kollisionsfehler;33-Roboterfehler-Fehler bei Anzahl aktiver Slaves;
1034-Roboterfehler-Slave-Fehler;35-Roboterfehler-IO-Fehler;36-Roboterfehler-Greiferfehler;37-Roboterfehler-Dateifehler;38-Roboterfehler-Singuläre Pose;
1139-Roboterfehler-Antriebskommunikationsfehler;40-Roboterfehler-Parameterfehler;41-Roboterfehler-Externe Achse Weichgrenze überschritten;42-Roboterwarnung-Warnung;
1243-Roboterwarnung-Sicherheitstürwarnung;44-Roboterwarnung-Bewegungswarnung;45-Roboterwarnung-Interferenzbereichswarnung;46-Roboterwarnung-Sicherheitswandwarnung;
1347-Aktivierungsstatus;48-Automatisches Anheben bei Unterbrechung;49-Würfel 1 Interferenzwarnung;50-Würfel 2 Interferenzwarnung;51-Würfel 3 Interferenzwarnung;52-Würfel 4 Interferenzwarnung;
14* @return Fehlercode
15*/
16errno_t GetDOConfig(int config[8]);

5.32. Konfigurierbare End-CI-Portfunktionen des Endeffektors einstellen

 1/**
 2* @brief Einstellen der konfigurierbaren End-CI-Portfunktionen des Endeffektors
 3* @param [in] config End CI0-CI1 Funktionscodes;
 4* 0-Keine;1-Zieh-Teaching-Werkzeugschalter;2-Punktaufzeichnungssignal;3-Manuell/Auto umschalten (Impulssignal);4-TPD-Aufzeichnung start/stopp;5-Bewegung pausieren;
 56-Bewegung fortsetzen;7-Start;8-Stopp;9-Pause/Fortsetzen;10-Start/Stopp;11-Kraftsensor-Hilfszug aktivieren;12-Kraftsensor-Hilfszug deaktivieren;
 613-Kraftsensor-Hilfszug aktivieren/deaktivieren;14-Lasererkennungssignal X;15-Lasererkennungssignal Y;16-PTP-Bewegung zur Arbeitsposition;17-Bewegungsunterbrechung, aktuelle Bewegung je nach Signal stoppen;
 718-Hauptprogramm starten;19-Rückspulen starten;20-Startbestätigung;21-Schweißen fortsetzen;22-Schweißen beenden;23-Fehler löschen;24-Manuell/Auto umschalten (High/Low-Pegel);
 825-Aktivieren;26-Deaktivieren;27-Aktivieren/Deaktivieren;28-Laser-Servo-Tracking start/stopp Signal;
 9* @return Fehlercode
10*/
11errno_t SetToolDIConfig(int config[2]);

5.33. Konfigurierbare End-CI-Portfunktionen des Endeffektors abrufen

 1/**
 2* @brief Abrufen der konfigurierbaren End-CI-Portfunktionen des Endeffektors
 3* @param [out] config End CI0-CI1 Funktionscodes;
 4* 0-Keine;1-Zieh-Teaching-Werkzeugschalter;2-Punktaufzeichnungssignal;3-Manuell/Auto umschalten (Impulssignal);4-TPD-Aufzeichnung start/stopp;5-Bewegung pausieren;
 56-Bewegung fortsetzen;7-Start;8-Stopp;9-Pause/Fortsetzen;10-Start/Stopp;11-Kraftsensor-Hilfszug aktivieren;12-Kraftsensor-Hilfszug deaktivieren;
 613-Kraftsensor-Hilfszug aktivieren/deaktivieren;14-Lasererkennungssignal X;15-Lasererkennungssignal Y;16-PTP-Bewegung zur Arbeitsposition;17-Bewegungsunterbrechung, aktuelle Bewegung je nach Signal stoppen;
 718-Hauptprogramm starten;19-Rückspulen starten;20-Startbestätigung;21-Schweißen fortsetzen;22-Schweißen beenden;23-Fehler löschen;24-Manuell/Auto umschalten (High/Low-Pegel);
 825-Aktivieren;26-Deaktivieren;27-Aktivieren/Deaktivieren;28-Laser-Servo-Tracking start/stopp Signal;
 9* @return Fehlercode
10*/
11errno_t GetToolDIConfig(int config[2]);

5.34. Konfigurierbaren CI-Aktivzustand des Steuerkastens einstellen

1/**
2* @brief Einstellen des konfigurierbaren CI-Aktivzustands des Steuerkastens
3* @param [in] config CI0-CI7 Port-Aktivzustand; 0-aktiv high; 1-aktiv low
4* @return Fehlercode
5*/
6errno_t SetDIConfigLevel(int config[8]);

5.35. Konfigurierbaren CI-Aktivzustand des Steuerkastens abrufen

1/**
2* @brief Abrufen des konfigurierbaren CI-Aktivzustands des Steuerkastens
3* @param [out] config CI0-CI7 Port-Aktivzustand; 0-aktiv high; 1-aktiv low
4* @return Fehlercode
5*/
6errno_t GetDIConfigLevel(int config[8]);

5.36. Konfigurierbaren CO-Aktivzustand des Steuerkastens einstellen

1/**
2* @brief Einstellen des konfigurierbaren CO-Aktivzustands des Steuerkastens
3* @param [in] config CO0-CO7 Port-Aktivzustand; 0-aktiv high; 1-aktiv low
4* @return Fehlercode
5*/
6errno_t SetDOConfigLevel(int config[8]);

5.37. Konfigurierbaren CO-Aktivzustand des Steuerkastens abrufen

1/**
2* @brief Abrufen des konfigurierbaren CO-Aktivzustands des Steuerkastens
3* @param [out] config CO0-CO7 Port-Aktivzustand; 0-aktiv high; 1-aktiv low
4* @return Fehlercode
5*/
6errno_t GetDOConfigLevel(int config[8]);

5.38. Konfigurierbaren CI-Aktivzustand des Endeffektors einstellen

1/**
2* @brief Einstellen des konfigurierbaren CI-Aktivzustands des Endeffektors
3* @param [in] config CI0-CI1 Port-Aktivzustand; 0-aktiv high; 1-aktiv low
4* @return Fehlercode
5*/
6errno_t SetToolDIConfigLevel(int config[2]);

5.39. Konfigurierbaren CI-Aktivzustand des Endeffektors abrufen

1/**
2* @brief Abrufen des konfigurierbaren CI-Aktivzustands des Endeffektors
3* @param [out] config CI0-CI1 Port-Aktivzustand; 0-aktiv high; 1-aktiv low
4* @return Fehlercode
5*/
6errno_t GetToolDIConfigLevel(int config[2]);

5.40. Standard-DI-Aktivzustand des Steuerkastens einstellen

1/**
2* @brief Einstellen des Standard-DI-Aktivzustands des Steuerkastens
3* @param [in] config DI0-DI7 Port-Aktivzustand; 0-aktiv high; 1-aktiv low
4* @return Fehlercode
5*/
6errno_t SetStandardDILevel(int config[8]);

5.41. Standard-DI-Aktivzustand des Steuerkastens abrufen

1/**
2* @brief Abrufen des Standard-DI-Aktivzustands des Steuerkastens
3* @param [out] config DI0-DI7 Port-Aktivzustand; 0-aktiv high; 1-aktiv low
4* @return Fehlercode
5*/
6errno_t GetStandardDILevel(int config[8]);

5.42. Standard-DO-Aktivzustand des Steuerkastens einstellen

1/**
2* @brief Einstellen des Standard-DO-Aktivzustands des Steuerkastens
3* @param [in] config DO0-DO7 Port-Aktivzustand; 0-aktiv high; 1-aktiv low
4* @return Fehlercode
5*/
6errno_t SetStandardDOLevel(int config[8]);

5.43. Standard-DO-Aktivzustand des Steuerkastens abrufen

1/**
2* @brief Abrufen des Standard-DO-Aktivzustands des Steuerkastens
3* @param [out] config DO0-DO7 Port-Aktivzustand; 0-aktiv high; 1-aktiv low
4* @return Fehlercode
5*/
6errno_t GetStandardDOLevel(int config[8]);

5.44. Robot IO Konfigurationscodebeispiel

 1int TestIOConfig()
 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    int setDIConfig[8] = { 1, 2, 3, 4, 5, 6, 7, 8 };
14    int getDIConfig[8] = { 0 };
15    rtn = robot.SetDIConfig(setDIConfig);
16    printf("SetDIConfig rtn is %d\n", rtn);
17    rtn = robot.GetDIConfig(getDIConfig);
18    printf("GetDIConfig rtn is %d, value is %d %d %d %d %d %d %d %d \n", rtn,
19        getDIConfig[0], getDIConfig[1], getDIConfig[2], getDIConfig[3], getDIConfig[4], getDIConfig[5], getDIConfig[6], getDIConfig[7]);
20    int setDOConfig[8] = { 9, 10, 11, 12, 13, 14, 15, 16 };
21    int getDOConfig[8] = { 0 };
22    rtn = robot.SetDOConfig(setDOConfig);
23    printf("SetDOConfig rtn is %d\n", rtn);
24    rtn = robot.GetDOConfig(getDOConfig);
25    printf("GetDOConfig rtn is %d, value is %d %d %d %d %d %d %d %d \n", rtn,
26        getDOConfig[0], getDOConfig[1], getDOConfig[2], getDOConfig[3], getDOConfig[4], getDOConfig[5], getDOConfig[6], getDOConfig[7]);
27    int setToolDIConfig[2] = { 17, 18 };
28    int getToolDIConfig[2] = { 0 };
29    rtn = robot.SetToolDIConfig(setToolDIConfig);
30    printf("SetToolDIConfig rtn is %d\n", rtn);
31    rtn = robot.GetToolDIConfig(getToolDIConfig);
32    printf("GetToolDIConfig rtn is %d, value is %d %d \n", rtn, getToolDIConfig[0], getToolDIConfig[1]);
33    int setDIConfigLevel[8] = { 1, 1, 1, 1, 0, 0, 0, 0 };
34    int getDIConfigLevel[8] = { 0 };
35    rtn = robot.SetDIConfigLevel(setDIConfigLevel);
36    printf("SetDIConfigLevel rtn is %d\n", rtn);
37    rtn = robot.GetDIConfigLevel(getDIConfigLevel);
38    printf("GetDIConfigLevel rtn is %d, value is %d %d %d %d %d %d %d %d \n", rtn,
39        getDIConfigLevel[0], getDIConfigLevel[1], getDIConfigLevel[2], getDIConfigLevel[3], getDIConfigLevel[4], getDIConfigLevel[5], getDIConfigLevel[6], getDIConfigLevel[7]);
40    int setDOConfigLevel[8] = { 0, 0, 0, 0, 1, 1, 1, 1 };
41    int getDOConfigLevel[8] = { 0 };
42    rtn = robot.SetDOConfigLevel(setDOConfigLevel);
43    printf("SetDOConfigLevel rtn is %d\n", rtn);
44    rtn = robot.GetDOConfigLevel(getDOConfigLevel);
45    printf("GetDOConfigLevel rtn is %d, value is %d %d %d %d %d %d %d %d \n", rtn,
46        getDOConfigLevel[0], getDOConfigLevel[1], getDOConfigLevel[2], getDOConfigLevel[3], getDOConfigLevel[4], getDOConfigLevel[5], getDOConfigLevel[6], getDOConfigLevel[7]);
47    int setToolDIConfigLevel[2] = { 1, 0 };
48    int getToolDIConfigLevel[2] = { 0 };
49    rtn = robot.SetToolDIConfigLevel(setToolDIConfigLevel);
50    printf("SetToolDIConfigLevel rtn is %d\n", rtn);
51    rtn = robot.GetToolDIConfigLevel(getToolDIConfigLevel);
52    printf("GetToolDIConfigLevel rtn is %d, value is %d %d \n", rtn, getToolDIConfigLevel[0], getToolDIConfigLevel[1]);
53    int setStandardDILevel[8] = { 1, 1, 1, 1, 0, 0, 0, 0 };
54    int getStandardDILevel[8] = { 0 };
55    rtn = robot.SetStandardDILevel(setStandardDILevel);
56    printf("SetStandardDILevel rtn is %d\n", rtn);
57    rtn = robot.GetStandardDILevel(getStandardDILevel);
58    printf("GetStandardDILevel rtn is %d, value is %d %d %d %d %d %d %d %d \n", rtn,
59        getStandardDILevel[0], getStandardDILevel[1], getStandardDILevel[2], getStandardDILevel[3], getStandardDILevel[4], getStandardDILevel[5], getStandardDILevel[6], getStandardDILevel[7]);
60    int setStandardDOLevel[8] = { 0, 0, 0, 0, 1, 1, 1, 1 };
61    int getStandardDOLevel[8] = { 0 };
62    rtn = robot.SetStandardDOLevel(setStandardDOLevel);
63    printf("SetStandardDOLevel rtn is %d\n", rtn);
64    rtn = robot.GetStandardDOLevel(getStandardDOLevel);
65    printf("GetStandsrdDOLevel rtn is %d, value is %d %d %d %d %d %d %d %d \n", rtn,
66        getStandardDOLevel[0], getStandardDOLevel[1], getStandardDOLevel[2], getStandardDOLevel[3], getStandardDOLevel[4], getStandardDOLevel[5], getStandardDOLevel[6], getStandardDOLevel[7]);
67    robot.Sleep(2000);
68    robot.CloseRPC();
69    robot.Sleep(1000);
70    return 0;
71}