13. Erweiterungsachsen

13.1. Parameter für 485-Erweiterungsachse einstellen

Neu in Version C++SDK-v2.1.3.0.

 1/**
 2* @brief Stellt die Parameter für eine 485-Erweiterungsachse ein
 3* @param [in] servoId Servoantriebs-ID, Bereich [1-15], entspricht der Slave-ID
 4* @param [in] servoCompany Hersteller des Servoantriebs, 1-DYNATEC
 5* @param [in] servoModel Modell des Servoantriebs, 1-FD100-750C
 6* @param [in] servoSoftVersion Softwareversion des Servoantriebs, 1-V1.0
 7* @param [in] servoResolution Encoderauflösung
 8* @param [in] axisMechTransRatio Mechanisches Übersetzungsverhältnis
 9* @return Fehlercode
10*/
11errno_t AuxServoSetParam(int servoId, int servoCompany, int servoModel, int servoSoftVersion, int servoResolution, double axisMechTransRatio);

13.2. Konfigurationsparameter der 485-Erweiterungsachse abrufen

Neu in Version C++SDK-v2.1.3.0.

 1/**
 2* @brief Gibt die Konfigurationsparameter einer 485-Erweiterungsachse zurück
 3* @param [in] servoId Servoantriebs-ID, Bereich [1-15], entspricht der Slave-ID
 4* @param [out] servoCompany Hersteller des Servoantriebs, 1-DYNATEC
 5* @param [out] servoModel Modell des Servoantriebs, 1-FD100-750C
 6* @param [out] servoSoftVersion Softwareversion des Servoantriebs, 1-V1.0
 7* @param [out] servoResolution Encoderauflösung
 8* @param [out] axisMechTransRatio Mechanisches Übersetzungsverhältnis
 9* @return Fehlercode
10*/
11errno_t AuxServoGetParam(int servoId, int* servoCompany, int* servoModel, int* servoSoftVersion, int* servoResolution, double* axisMechTransRatio);

13.3. Aktivierung/Deaktivierung der 485-Erweiterungsachse einstellen

Neu in Version C++SDK-v2.1.3.0.

1/**
2* @brief Stellt die Aktivierung/Deaktivierung der 485-Erweiterungsachse ein
3* @param [in] servoId Servoantriebs-ID, Bereich [1-15], entspricht der Slave-ID
4* @param [in] status Aktivierungsstatus, 0-deaktivieren, 1-aktivieren
5* @return Fehlercode
6*/
7errno_t AuxServoEnable(int servoId, int status);

13.4. Steuerungsmodus der 485-Erweiterungsachse einstellen

Neu in Version C++SDK-v2.1.3.0.

1/**
2* @brief Stellt den Steuerungsmodus der 485-Erweiterungsachse ein
3* @param [in] servoId Servoantriebs-ID, Bereich [1-15], entspricht der Slave-ID
4* @param [in] mode Steuerungsmodus, 0-Positionsmodus, 1-Geschwindigkeitsmodus
5* @return Fehlercode
6*/
7errno_t AuxServoSetControlMode(int servoId, int mode);

13.5. Zielposition der 485-Erweiterungsachse einstellen (Positionsmodus)

Neu in Version C++SDK-v2.1.3.0.

1/**
2* @brief Stellt die Zielposition der 485-Erweiterungsachse ein (Positionsmodus)
3* @param [in] servoId Servoantriebs-ID, Bereich [1-15], entspricht der Slave-ID
4* @param [in] pos Zielposition, mm oder °
5* @param [in] speed Zielgeschwindigkeit, mm/s oder °/s
6* @return Fehlercode
7*/
8errno_t AuxServoSetTargetPos(int servoId, double pos, double speed);

13.6. Zieldrehmoment der 485-Erweiterungsachse einstellen (Drehmomentmodus) - noch nicht freigegeben

Neu in Version C++SDK-v2.1.3.0.

1/**
2* @brief Stellt das Zieldrehmoment der 485-Erweiterungsachse ein (Drehmomentmodus)
3* @param [in] servoId Servoantriebs-ID, Bereich [1-15], entspricht der Slave-ID
4* @param [in] torque Zieldrehmoment, Nm
5* @return Fehlercode
6*/
7errno_t AuxServoSetTargetTorque(int servoId, double torque);

13.7. Referenzpunktfahrt der 485-Erweiterungsachse einstellen

Neu in Version C++SDK-v2.1.3.0.

1/**
2* @brief Stellt die Referenzpunktfahrt der 485-Erweiterungsachse ein
3* @param [in] servoId Servoantriebs-ID, Bereich [1-15], entspricht der Slave-ID
4* @param [in] mode Referenzpunktfahrt-Modus, 0-aktuelle Position als Nullpunkt; 1-Endlagenschalter als Nullpunkt
5* @param [in] searchVel Suchgeschwindigkeit, mm/s oder °/s
6* @param [in] latchVel Einrastgeschwindigkeit, mm/s oder °/s
7* @return Fehlercode
8*/
9errno_t AuxServoHoming(int servoId, int mode, double searchVel, double latchVel);

13.8. Fehlerinformationen der 485-Erweiterungsachse löschen

Neu in Version C++SDK-v2.1.3.0.

1/**
2* @brief Löscht Fehlerinformationen der 485-Erweiterungsachse
3* @param [in] servoId Servoantriebs-ID, Bereich [1-15], entspricht der Slave-ID
4* @return Fehlercode
5*/
6errno_t AuxServoClearError(int servoId);

13.9. Servostatus der 485-Erweiterungsachse abrufen

Neu in Version C++SDK-v2.1.3.0.

 1/**
 2* @brief Gibt den Servostatus der 485-Erweiterungsachse zurück
 3* @param [in] servoId Servoantriebs-ID, Bereich [1-15], entspricht der Slave-ID
 4* @param [out] servoErrCode Fehlercode des Servoantriebs
 5* @param [out] servoState Status des Servoantriebs [Dezimalzahl in Binär, bit0-bit5: Servo aktiviert - Servo läuft - positive Endlage ausgelöst - negative Endlage ausgelöst - Positionierung abgeschlossen - Referenzpunktfahrt abgeschlossen]
 6* @param [out] servoPos Aktuelle Position des Servos mm oder °
 7* @param [out] servoSpeed Aktuelle Geschwindigkeit des Servos mm/s oder °/s
 8* @param [out] servoTorque Aktuelles Drehmoment des Servos Nm
 9* @return Fehlercode
10*/
11errno_t AuxServoGetStatus(int servoId, int* servoErrCode, int* servoState, double* servoPos, double* servoSpeed, double* servoTorque);

13.10. Zielgeschwindigkeit der 485-Erweiterungsachse einstellen (Geschwindigkeitsmodus)

Neu in Version C++SDK-v2.1.3.0.

1/**
2* @brief Stellt die Zielgeschwindigkeit der 485-Erweiterungsachse ein (Geschwindigkeitsmodus)
3* @param [in] servoId Servoantriebs-ID, Bereich [1-15], entspricht der Slave-ID
4* @param [in] speed Zielgeschwindigkeit, mm/s oder °/s
5* @return Fehlercode
6*/
7errno_t AuxServoSetTargetSpeed(int servoId, double speed);

13.11. Achsnummer der 485-Erweiterungsachse in der Statusrückmeldung einstellen

Neu in Version C++SDK-v2.1.3.0.

1/**
2* @brief Stellt die Achsnummer der 485-Erweiterungsachse in der Statusrückmeldung ein
3* @param [in] servoId Servoantriebs-ID, Bereich [1-15], entspricht der Slave-ID
4* @return Fehlercode
5*/
6errno_t AuxServosetStatusID(int servoId);

13.12. Bewegungsbeschleunigung und -verzögerung der 485-Erweiterungsachse einstellen

Neu in Version C++SDK-v2.1.5.0.

1/**
2* @brief Stellt die Bewegungsbeschleunigung und -verzögerung der 485-Erweiterungsachse ein
3* @param [in] acc Bewegungsbeschleunigung der 485-Erweiterungsachse
4* @param [in] dec Bewegungsverzögerung der 485-Erweiterungsachse
5* @return Fehlercode
6*/
7errno_t AuxServoSetAcc(double acc, double dec);

13.13. Not-Halt-Beschleunigung und -Verzögerung der 485-Erweiterungsachse einstellen

Neu in Version C++SDK-v2.1.5.0.

1/**
2* @brief Stellt die Not-Halt-Beschleunigung und -Verzögerung der 485-Erweiterungsachse ein
3* @param [in] acc Not-Halt-Beschleunigung der 485-Erweiterungsachse
4* @param [in] dec Not-Halt-Verzögerung der 485-Erweiterungsachse
5* @return Fehlercode
6*/
7errno_t AuxServoSetEmergencyStopAcc(double acc, double dec);

13.14. Bewegungsbeschleunigung und -verzögerung der 485-Erweiterungsachse abrufen

Neu in Version C++SDK-v2.1.5.0.

1/**
2* @brief Gibt die Bewegungsbeschleunigung und -verzögerung der 485-Erweiterungsachse zurück
3* @param [out] acc Bewegungsbeschleunigung der 485-Erweiterungsachse
4* @param [out] dec Bewegungsverzögerung der 485-Erweiterungsachse
5* @return Fehlercode
6*/
7errno_t AuxServoGetAcc(double& acc, double& dec);

13.15. Not-Halt-Beschleunigung und -Verzögerung der 485-Erweiterungsachse abrufen

Neu in Version C++SDK-v2.1.5.0.

1/**
2* @brief Gibt die Not-Halt-Beschleunigung und -Verzögerung der 485-Erweiterungsachse zurück
3* @param [out] acc Not-Halt-Beschleunigung der 485-Erweiterungsachse
4* @param [out] dec Not-Halt-Verzögerung der 485-Erweiterungsachse
5* @return Fehlercode
6*/
7errno_t AuxServoGetEmergencyStopAcc(double& acc, double& dec);

13.16. Codebeispiel zur Steuerung einer Erweiterungsachse

Neu in Version C++SDK-v2.1.5.0.

 1int Test485Auxservo(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  int retval = robot.AuxServoSetParam(1, 1, 1, 1, 131072, 15.45);
14  std::cout << "AuxServoSetParam is: " << retval << std::endl;
15  int servoCompany;
16  int servoModel;
17  int servoSoftVersion;
18  int servoResolution;
19  double axisMechTransRatio;
20  retval = robot.AuxServoGetParam(1, &servoCompany, &servoModel, &servoSoftVersion, &servoResolution, &axisMechTransRatio);
21  std::cout << "servoCompany " << servoCompany << "\n"
22    << "servoModel " << servoModel << "\n"
23    << "servoSoftVersion " << servoSoftVersion << "\n"
24    << "servoResolution " << servoResolution << "\n"
25    << "axisMechTransRatio " << axisMechTransRatio << "\n"
26    << std::endl;
27  retval = robot.AuxServoSetParam(1, 10, 11, 12, 13, 14);
28  std::cout << "AuxServoSetParam is: " << retval << std::endl;
29  retval = robot.AuxServoGetParam(1, &servoCompany, &servoModel, &servoSoftVersion, &servoResolution, &axisMechTransRatio);
30  std::cout << "servoCompany " << servoCompany << "\n"
31    << "servoModel " << servoModel << "\n"
32    << "servoSoftVersion " << servoSoftVersion << "\n"
33    << "servoResolution " << servoResolution << "\n"
34    << "axisMechTransRatio " << axisMechTransRatio << "\n"
35    << std::endl;
36  retval = robot.AuxServoSetParam(1, 1, 1, 1, 131072, 36);
37  std::cout << "AuxServoSetParam is: " << retval << std::endl;
38  robot.Sleep(3000);
39  robot.AuxServoSetAcc(3000, 3000);
40  robot.AuxServoSetEmergencyStopAcc(5000, 5000);
41  robot.Sleep(1000);
42  double emagacc = 0, acc = 0;
43  double emagdec = 0, dec = 0;
44  robot.AuxServoGetEmergencyStopAcc(emagacc, emagdec);
45  printf("emergency acc is %f dec is %f \n", emagacc, emagdec);
46  robot.AuxServoGetAcc(acc, dec);
47  printf("acc is %f dec is %f \n", acc, dec);
48  robot.AuxServoSetControlMode(1, 0);
49  robot.Sleep(2000);
50  retval = robot.AuxServoEnable(1, 0);
51  std::cout << "AuxServoEnable disenable " << retval << std::endl;
52  robot.Sleep(1000);
53  int servoerrcode = 0;
54  int servoErrCode;
55  int servoState;
56  double servoPos;
57  double servoSpeed;
58  double servoTorque;
59  retval = robot.AuxServoGetStatus(1, &servoErrCode, &servoState, &servoPos, &servoSpeed, &servoTorque);
60  std::cout << "AuxServoGetStatus servoState " << servoState << std::endl;
61  robot.Sleep(1000);;
62  retval = robot.AuxServoEnable(1, 1);
63  std::cout << "AuxServoEnable enable " << retval << std::endl;
64  robot.Sleep(1000);
65  retval = robot.AuxServoGetStatus(1, &servoErrCode, &servoState, &servoPos, &servoSpeed, &servoTorque);
66  std::cout << "AuxServoGetStatus servoState " << servoState << std::endl;
67  robot.Sleep(1000);
68  retval = robot.AuxServoHoming(1, 1, 5, 1);
69  std::cout << "AuxServoHoming " << retval << std::endl;
70  robot.Sleep(3000);
71  retval = robot.AuxServoSetTargetPos(1, 200, 30);
72  std::cout << "AuxServoSetTargetPos " << retval << std::endl;
73  robot.Sleep(1000);
74  retval = robot.AuxServoGetStatus(1, &servoErrCode, &servoState, &servoPos, &servoSpeed, &servoTorque);
75  std::cout << "AuxServoGetStatus servoSpeed " << servoSpeed << std::endl;
76  robot.Sleep(8000);
77  robot.AuxServoSetControlMode(1, 1);
78  robot.Sleep(2000);
79  robot.AuxServoEnable(1, 0);
80  robot.Sleep(1000);
81  robot.AuxServoEnable(1, 1);
82  robot.Sleep(1000);
83  robot.AuxServoSetTargetSpeed(1, 100, 80);
84  robot.Sleep(5000);
85  robot.AuxServoSetTargetSpeed(1, 0, 80);
86  robot.CloseRPC();
87  return 0;
88}

13.17. UDP-Kommunikationsparameter für Erweiterungsachse konfigurieren

 1/**
 2* @brief Konfiguriert die UDP-Kommunikationsparameter für die Erweiterungsachse
 3* @param [in] ip IP-Adresse der SPS
 4* @param [in] port  Portnummer
 5* @param [in] period    Kommunikationszyklus (ms, Standard 2, diesen Parameter nicht ändern)
 6* @param [in] lossPkgTime   Paketverlust-Erkennungszeit (ms)
 7* @param [in] lossPkgNum    Anzahl der Paketverluste
 8* @param [in] disconnectTime    Bestätigungsdauer für Kommunikationsunterbrechung
 9* @param [in] reconnectEnable   Automatische Wiederverbindung bei Kommunikationsunterbrechung aktivieren 0-deaktivieren 1-aktivieren
10* @param [in] reconnectPeriod   Wiederverbindungsintervall (ms)
11* @param [in] reconnectNum  Anzahl der Wiederverbindungsversuche
12* @param [in] selfConnect Automatische Verbindung nach Neustart? 0-keine Verbindung; 1-Verbindung herstellen
13* @return Fehlercode
14*/
15errno_t ExtDevSetUDPComParam(std::string ip, int port, int period, int lossPkgTime, int lossPkgNum, int disconnectTime, int reconnectEnable, int reconnectPeriod, int reconnectNum, int selfConnect = 1);

13.18. Abrufen der UDP-Kommunikationsparameterkonfiguration für Erweiterungsachsen

Neu in Version C++SDK-v2.1.4.0.

 1/**
 2* @brief Abrufen der UDP-Kommunikationsparameter für Erweiterungsachsen
 3* @param [out] ip PLC-IP-Adresse
 4* @param [out] port Portnummer
 5* @param [out] period Kommunikationszyklus (ms, Standard ist 2, diesen Parameter nicht ändern)
 6* @param [out] lossPkgTime Paketverlust-Erkennungszeit (ms)
 7* @param [out] lossPkgNum Anzahl der Paketverluste
 8* @param [out] disconnectTime Bestätigungsdauer für Kommunikationsunterbrechung
 9* @param [out] reconnectEnable Automatische Wiederverbindung bei Kommunikationsunterbrechung aktivieren 0-deaktiviert 1-aktiviert
10* @param [out] reconnectPeriod Wiederverbindungsintervall (ms)
11* @param [out] reconnectNum Anzahl der Wiederverbindungsversuche
12* @param [out] selfStart Automatische Wiederverbindung nach Neustart des Steuerkastens; 0-keine Wiederverbindung; 1-Wiederverbindung
13* @return Fehlercode
14*/
15errno_t ExtDevGetUDPComParam(std::string& ip, int& port, int& period, int& lossPkgTime, int& lossPkgNum, int& disconnectTime, int& reconnectEnable, int& reconnectPeriod, int& reconnectNum, int& selfConnect);

13.19. UDP-Kommunikation laden

Neu in Version C++SDK-v2.1.4.0.

1/**
2* @brief Lädt die UDP-Kommunikation
3* @return Fehlercode
4*/
5errno_t ExtDevLoadUDPDriver();

13.20. UDP-Kommunikation entladen

Neu in Version C++SDK-v2.1.4.0.

1/**
2* @brief Entlädt die UDP-Kommunikation
3* @return Fehlercode
4*/
5errno_t ExtDevUnloadUDPDriver();

13.21. Verbindung nach abnormaler UDP-Kommunikationsunterbrechung wiederherstellen

Neu in Version C++SDK-v2.1.4.0.

1/**
2* @brief Stellt die Verbindung nach einer abnormalen UDP-Kommunikationsunterbrechung wieder her
3* @return Fehlercode
4*/
5errno_t ExtDevUDPClientComReset();

13.22. Kommunikation nach abnormaler UDP-Kommunikationsunterbrechung schließen

Neu in Version C++SDK-v2.1.4.0.

1/**
2* @brief Schließt die Kommunikation nach einer abnormalen UDP-Kommunikationsunterbrechung
3* @return Fehlercode
4*/
5errno_t ExtDevUDPClientComClose();

13.23. Parameter für UDP-Erweiterungsachse konfigurieren

Neu in Version C++SDK-v2.1.4.0.

 1/**
 2* @brief Konfiguriert die Parameter einer UDP-Erweiterungsachse
 3* @param [in] axisID Achsnummer
 4* @param [in] axisType Erweiterungsachsentyp 0-Translation; 1-Rotation
 5* @param [in] axisDirection Richtung der Erweiterungsachse 0-positive Richtung; 1-negative Richtung (Achtung: 0-positiv, 1-negativ? Laut Beispiel 1)
 6* @param [in] axisMax Maximale Position der Achse mm
 7* @param [in] axisMin Minimale Position der Achse mm
 8* @param [in] axisVel Geschwindigkeit mm/s
 9* @param [in] axisAcc Beschleunigung mm/s²
10* @param [in] axisLead Spindelsteigung mm
11* @param [in] encResolution Encoderauflösung
12* @param [in] axisOffect Versatz des Schweißnahtstartpunkts zur Erweiterungsachse
13* @param [in] axisCompany Antriebshersteller 1-Hechuan; 2-Inovance; 3-Panasonic
14* @param [in] axisModel Antriebsmodell 1-Hechuan-SV-XD3EA040L-E, 2-Hechuan-SV-X2EA150A-A, 1-Inovance-SV620PT5R4I, 1-Panasonic-MADLN15SG, 2-Panasonic-MSDLN25SG, 3-Panasonic-MCDLN35SG
15* @param [in] axisEncType Encodertyp 0-inkremental; 1-absolut
16* @return Fehlercode
17*/
18errno_t ExtAxisParamConfig(int axisID, int axisType, int axisDirection, double axisMax, double axisMin, double axisVel, double axisAcc, double axisLead, long encResolution, double axisOffect, int axisCompany, int axisModel, int axisEncType);

13.24. UDP-Erweiterungsachsenparameter abrufen

 1/**
 2* @brief UDP-Erweiterungsachsenparameter abrufen
 3* @param [in] axisID Erweiterungsachsennummer [1-4]
 4* @param [out] axisType Erweiterungsachsentyp 0-linear; 1-rotierend
 5* @param [out] axisDirection Erweiterungsachsenrichtung 0-positive; 1-negative
 6* @param [out] axisMax Maximale Position der Erweiterungsachse mm
 7* @param [out] axisMin Minimale Position der Erweiterungsachse mm
 8* @param [out] axisVel Geschwindigkeit mm/s
 9* @param [out] axisAcc Beschleunigung mm/s²
10* @param [out] axisLead Gewindesteigung mm
11* @param [out] encResolution Encoder-Auflösung
12* @param [out] axisOffect Schweißnahtstartpunkt-Erweiterungsachsenversatz
13* @param [out] axisCompany Antriebshersteller 1-Hecuan; 2-Inovance; 3-Panasonic
14* @param [out] axisModel Antriebsmodell 1-Hecuan-SV-XD3EA040L-E, 2-Hecuan-SV-X2EA150A-A, 1-Inovance-SV620PT5R4I, 1-Panasonic-MADLN15SG, 2-Panasonic-MSDLN25SG, 3-Panasonic-MCDLN35SG
15* @param [out] axisEncType Encodertyp 0-inkrementell; 1-absolut
16* @return Fehlercode
17*/
18errno_t ExtAxisGetParamConfig(int axisID, int& axisType, int& axisDirection, double& axisMax, double& axisMin, double& axisVel, double& axisAcc, double& axisLead, int& encResolution, double& axisOffect, int& axisCompany, int& axisModel, int& axisEncType);

13.25. Einbauposition der Erweiterungsachse einstellen

Neu in Version C++SDK-v2.1.4.0.

1/**
2* @brief Stellt die Einbauposition der Erweiterungsachse ein
3* @param [in] installType 0-Roboter auf der externen Achse montiert, 1-Roboter außerhalb der externen Achse montiert
4* @return Fehlercode
5*/
6errno_t SetRobotPosToAxis(int installType);

13.26. DH-Parameter des Erweiterungsachsensystems einstellen

Neu in Version C++SDK-v2.1.4.0.

 1/**
 2* @brief Stellt die DH-Parameter des Erweiterungsachsensystems ein
 3* @param [in] axisConfig Konfiguration der externen Achse, 0-Linearführung mit einem Freiheitsgrad, 1-L-förmiger Positionierer mit zwei Freiheitsgraden, 2-drei Freiheitsgrade, 3-vier Freiheitsgrade, 4-Positionierer mit einem Freiheitsgrad
 4* @param [in] axisDHd1 DH-Parameter d1 der externen Achse mm
 5* @param [in] axisDHd2 DH-Parameter d2 der externen Achse mm
 6* @param [in] axisDHd3 DH-Parameter d3 der externen Achse mm
 7* @param [in] axisDHd4 DH-Parameter d4 der externen Achse mm
 8* @param [in] axisDHa1 DH-Parameter a1 der externen Achse mm
 9* @param [in] axisDHa2 DH-Parameter a2 der externen Achse mm
10* @param [in] axisDHa3 DH-Parameter a3 der externen Achse mm
11* @param [in] axisDHa4 DH-Parameter a4 der externen Achse mm
12* @return Fehlercode
13*/
14errno_t SetAxisDHParaConfig(int axisConfig, double axisDHd1, double axisDHd2, double axisDHd3, double axisDHd4, double axisDHa1, double axisDHa2, double axisDHa3, double axisDHa4);

13.27. UDP-Erweiterungsachse aktivieren

Neu in Version C++SDK-v2.1.4.0.

1/**
2* @brief Aktiviert/Deaktiviert die UDP-Erweiterungsachse
3* @param [in] axisID Achsnummer [1-4]
4* @param [in] status 0-deaktivieren; 1-aktivieren
5* @return Fehlercode
6*/
7errno_t ExtAxisServoOn(int axisID, int status);

13.28. Referenzpunktfahrt der UDP-Erweiterungsachse einstellen

Neu in Version C++SDK-v2.1.4.0.

1/**
2* @brief Stellt die Referenzpunktfahrt der UDP-Erweiterungsachse ein
3* @param [in] axisID Achsnummer [1-4]
4* @param [in] mode Referenzpunktfahrt-Modus 0-aktuelle Position als Nullpunkt, 1-negative Endlage als Nullpunkt, 2-positive Endlage als Nullpunkt
5* @param [in] searchVel Suchgeschwindigkeit (mm/s)
6* @param [in] latchVel Einrastgeschwindigkeit (mm/s)
7* @return Fehlercode
8*/
9errno_t ExtAxisSetHoming(int axisID, int mode, double searchVel, double latchVel);

13.29. Tippbetrieb (Jog) der UDP-Erweiterungsachse starten

Neu in Version C++SDK-v2.1.4.0.

 1/**
 2* @brief Startet den Tippbetrieb (Jog) der UDP-Erweiterungsachse
 3* @param [in] axisID Achsnummer [1-4]
 4* @param [in] direction Drehrichtung 0-negativ; 1-positiv
 5* @param [in] vel Geschwindigkeit (mm/s)
 6* @param [in] acc Beschleunigung (mm/s²)
 7* @param [in] maxDistance Maximale Tippdistanz
 8* @return Fehlercode
 9*/
10errno_t ExtAxisStartJog(int axisID, int direction, double vel, double acc, double maxDistance);

13.30. Tippbetrieb (Jog) der UDP-Erweiterungsachse stoppen

Neu in Version C++SDK-v2.1.4.0.

1/**
2* @brief Stoppt den Tippbetrieb (Jog) der UDP-Erweiterungsachse
3* @param [in] axisID Achsnummer [1-4]
4* @return Fehlercode
5*/
6errno_t ExtAxisStopJog(int axisID);

13.31. Codebeispiel für Konfiguration und Tippbetrieb einer UDP-Erweiterungsachse

 1int TestUDPAxis(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    rtn = robot.ExtDevSetUDPComParam("192.168.58.88", 2021, 2, 100, 3, 200, 1, 100, 5, 1);
14    cout << "ExtDevSetUDPComParam rtn is " << rtn << endl;
15    string ip = ""; int port = 0; int period = 0; int lossPkgTime = 0; int lossPkgNum = 0; int disconnectTime = 0; int reconnectEnable = 0; int reconnectPeriod = 0; int reconnectNum = 0; int selfConnect = 0;
16    rtn = robot.ExtDevGetUDPComParam(ip, port, period, lossPkgTime, lossPkgNum, disconnectTime, reconnectEnable, reconnectPeriod, reconnectNum, selfConnect);
17    string patam = "\nip " + ip + "\nport " + to_string(port) + "\nperiod  " + to_string(period) + "\nlossPkgTime " + to_string(lossPkgTime) + "\nlossPkgNum  " + to_string(lossPkgNum) + "\ndisConntime  " +
18        to_string(disconnectTime) + "\nreconnecable  " + to_string(reconnectEnable) + "\nreconnperiod  " + to_string(reconnectPeriod) + "\nreconnnun  " + to_string(reconnectNum) + "\nselfConnect  " + to_string(selfConnect);
19    cout << "ExtDevGetUDPComParam rtn is " << rtn << patam << endl;
20    robot.ExtDevLoadUDPDriver();
21    rtn = robot.SetExAxisCmdDoneTime(5000.0);
22    cout << "SetExAxisCmdDoneTime rtn is " << rtn << endl;
23    rtn = robot.ExtAxisServoOn(1, 1);
24    cout << "ExtAxisServoOn axis id 1 rtn is " << rtn << endl;
25    rtn = robot.ExtAxisServoOn(2, 1);
26    cout << "ExtAxisServoOn axis id 2 rtn is " << rtn << endl;
27    robot.Sleep(2000);
28    robot.ExtAxisSetHoming(1, 0, 10, 2);
29    robot.Sleep(2000);
30    rtn = robot.ExtAxisSetHoming(2, 0, 10, 2);
31    cout << "ExtAxisSetHoming rtnn is  " << rtn << endl;
32    robot.Sleep(4000);
33    rtn = robot.SetRobotPosToAxis(1);
34    cout << "SetRobotPosToAxis rtn is " << rtn << endl;
35    rtn = robot.SetAxisDHParaConfig(10, 20, 0, 0, 0, 0, 0, 0, 0);
36    cout << "SetAxisDHParaConfig rtn is " << rtn << endl;
37    int axisType = -1;
38    int axisDirection = -1;
39    double axisMax = -1;
40    double axisMin = -1;
41    double axisVel = -1;
42    double axisAcc = -1;
43    double axisLead = -1;
44    int encResolution = -1;
45    double axisOffect = -1;
46    int axisCompany = -1;
47    int axisModel = -1;
48    int axisEncType = -1;
49    rtn = robot.ExtAxisParamConfig(1, 1, 1, 1000, -1000, 1000, 1000, 1.905, 262144, 200, 1, 0, 0);
50    cout << "ExtAxisParamConfig axis 1 rtn is " << rtn << endl;
51    rtn = robot.ExtAxisGetParamConfig(1, axisType, axisDirection, axisMax, axisMin, axisVel, axisAcc, axisLead, encResolution, axisOffect, axisCompany, axisModel, axisEncType);
52    printf("axis id 1 ExtAxisGetParamConfig : axisType %d, axisDirection %d, axisMax %lf, axisMin %lf, axisVel %lf, axisAcc %lf, axisLead%lf, encResolution %d, axisOffect %f, axisCompany %d, axisModel %d, axisEncType %d\n",
53        axisType, axisDirection, axisMax, axisMin, axisVel, axisAcc, axisLead, encResolution, axisOffect, axisCompany, axisModel, axisEncType);
54        rtn = robot.ExtAxisParamConfig(2, 1, 1, 1000, -1000, 1000, 1000, 4.444, 262144, 200, 1, 0, 0);
55    cout << "ExtAxisParamConfig axis 2 rtn is " << rtn << endl;
56    rtn = robot.ExtAxisGetParamConfig(2, axisType, axisDirection, axisMax, axisMin, axisVel, axisAcc, axisLead, encResolution, axisOffect, axisCompany, axisModel, axisEncType);
57    printf("axis id 2 ExtAxisGetParamConfig : axisType %d, axisDirection %d, axisMax %lf, axisMin %lf, axisVel %lf, axisAcc %lf, axisLead%lf, encResolution %d, axisOffect %f, axisCompany %d, axisModel %d, axisEncType %d\n",
58        axisType, axisDirection, axisMax, axisMin, axisVel, axisAcc, axisLead, encResolution, axisOffect, axisCompany, axisModel, axisEncType);
59    robot.Sleep(1000 * 3);
60    robot.ExtAxisStartJog(1, 0, 10, 10, 30);
61    robot.Sleep(1000 * 1);
62    robot.ExtAxisStopJog(1);
63    robot.Sleep(1000 * 3);
64    robot.ExtAxisServoOn(1, 0);
65    robot.Sleep(1000 * 3);
66    robot.ExtAxisStartJog(2, 0, 10, 10, 30);
67    robot.Sleep(1000 * 1);
68    robot.ExtAxisStopJog(2);
69    robot.Sleep(1000 * 3);
70    robot.ExtAxisServoOn(2, 0);
71    robot.Sleep(1000 * 1);
72    robot.ExtDevUnloadUDPDriver();
73    robot.CloseRPC();
74    return 0;
75}

13.32. Referenzpunkte für das Erweiterungsachsen-Koordinatensystem einstellen - Vier-Punkt-Methode

Neu in Version C++SDK-v2.1.4.0.

1/**
2* @brief Stellt Referenzpunkte für das Erweiterungsachsen-Koordinatensystem ein - Vier-Punkt-Methode
3* @param [in] pointNum Punktnummer [1-4]
4* @return Fehlercode
5*/
6errno_t ExtAxisSetRefPoint(int pointNum);

13.33. Erweiterungsachsen-Koordinatensystem berechnen - Vier-Punkt-Methode

Neu in Version C++SDK-v2.1.4.0.

1/**
2* @brief Berechnet das Erweiterungsachsen-Koordinatensystem - Vier-Punkt-Methode
3* @param [out] coord Koordinatenwerte
4* @return Fehlercode
5*/
6errno_t ExtAxisComputeECoordSys(DescPose& coord);

13.34. Referenzpunkte für das Positionierer-Koordinatensystem einstellen

Neu in Version C++SDK-v2.1.4.0.

1/**
2* @brief Stellt Referenzpunkte für das Positionierer-Koordinatensystem ein
3* @param [in] pointNum Punktnummer [1-4]
4* @return Fehlercode
5*/
6errno_t PositionorSetRefPoint(int pointNum);

13.35. Positionierer-Koordinatensystem berechnen - Vier-Punkt-Methode

Neu in Version C++SDK-v2.1.4.0.

1/**
2* @brief Berechnet das Positionierer-Koordinatensystem - Vier-Punkt-Methode
3* @param [out] coord Koordinatenwerte
4* @return Fehlercode
5*/
6errno_t PositionorComputeECoordSys(DescPose& coord);

13.36. Pose des Kalibrierreferenzpunkts im Positionierer-Endkoordinatensystem einstellen

Neu in Version C++SDK-v2.1.4.0.

1/**
2* @brief Stellt die Pose des Kalibrierreferenzpunkts im Positionierer-Endkoordinatensystem ein
3* @param [in] pos Posenwert
4* @return Fehlercode
5*/
6errno_t SetRefPointInExAxisEnd(DescPose pos);

13.37. Erweiterungsachsen-Koordinatensystem anwenden

Neu in Version C++SDK-v2.1.4.0.

1/**
2* @brief Wendet das Erweiterungsachsen-Koordinatensystem an
3* @param [in] applyAxisId Erweiterungsachsennummern als Bitmaske, Bit0-Bit3 entsprechen den Achsnummern 1-4. z.B. Achsen 1 und 3 anwenden: 0b 0000 0101 = 5
4* @param [in] axisCoordNum Nummer des Erweiterungsachsen-Koordinatensystems
5* @param [in] coord Koordinatenwerte
6* @param [in] calibFlag Kalibrierungsflag 0-nein, 1-ja
7* @return Fehlercode
8*/
9errno_t ExtAxisActiveECoordSys(int applyAxisId, int axisCoordNum, DescPose coord, int calibFlag);

13.38. Erweiterungsachsen-Koordinatensystem abrufen

1/**
2* @brief Gibt das Erweiterungsachsen-Koordinatensystem zurück
3* @param [out] coord Erweiterungsachsen-Koordinatensystem
4* @return Fehlercode
5*/
6errno_t ExtAxisGetCoord(DescPose& coord);

13.39. Codebeispiel für die Kalibrierung des Erweiterungsachsen-Koordinatensystems

  1int TestUDPAxisCalib(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   rtn = robot.ExtDevSetUDPComParam("192.168.58.88", 2021, 2, 100, 3, 200, 1, 100, 5, 1);
 14   cout << "ExtDevSetUDPComParam rtn is " << rtn << endl;
 15   string ip = ""; int port = 0; int period = 0; int lossPkgTime = 0; int lossPkgNum = 0; int disconnectTime = 0; int reconnectEnable = 0; int reconnectPeriod = 0; int reconnectNum = 0;
 16   rtn = robot.ExtDevGetUDPComParam(ip, port, period, lossPkgTime, lossPkgNum, disconnectTime, reconnectEnable, reconnectPeriod, reconnectNum);
 17   string patam = "\nip " + ip + "\nport " + to_string(port) + "\nperiod " + to_string(period) + "\nlossPkgTime " + to_string(lossPkgTime) + "\nlossPkgNum " + to_string(lossPkgNum) + "\ndisConntime " + to_string(disconnectTime) + "\nreconnecable " + to_string(reconnectEnable) + "\nreconnperiod " + to_string(reconnectPeriod) + "\nreconnnun " + to_string(reconnectNum);
 18   cout << "ExtDevGetUDPComParam rtn is " << rtn << patam << endl;
 19   robot.ExtDevLoadUDPDriver();
 20   rtn = robot.ExtAxisServoOn(1, 1);
 21   cout << "ExtAxisServoOn axis id 1 rtn is " << rtn << endl;
 22   rtn = robot.ExtAxisServoOn(2, 1);
 23   cout << "ExtAxisServoOn axis id 2 rtn is " << rtn << endl;
 24   robot.Sleep(2000);
 25   robot.ExtAxisSetHoming(1, 0, 10, 2);
 26   robot.Sleep(2000);
 27   rtn = robot.ExtAxisSetHoming(2, 0, 10, 2);
 28   cout << "ExtAxisSetHoming rtnn is " << rtn << endl;
 29   robot.Sleep(4000);
 30   rtn = robot.SetRobotPosToAxis(1);
 31   cout << "SetRobotPosToAxis rtn is " << rtn << endl;
 32   rtn = robot.SetAxisDHParaConfig(1, 128.5, 206.4, 0, 0, 0, 0, 0, 0);
 33   cout << "SetAxisDHParaConfig rtn is " << rtn << endl;
 34   rtn = robot.ExtAxisParamConfig(1, 1, 1, 1000, -1000, 1000, 1000, 1.905, 262144, 200, 1, 0, 0);
 35   cout << "ExtAxisParamConfig axis 1 rtn is " << rtn << endl;
 36   rtn = robot.ExtAxisParamConfig(2, 1, 1, 1000, -1000, 1000, 1000, 4.444, 262144, 200, 1, 0, 0);
 37   cout << "ExtAxisParamConfig axis 1 rtn is " << rtn << endl;
 38   DescPose toolCoord(0, 0, 210, 0, 0, 0);
 39   robot.SetToolCoord(1, &toolCoord, 0, 0, 1, 0);
 40   JointPos jSafe(115.193, -96.149, 92.489, -87.068, -89.15, -83.488);
 41   JointPos j1(117.559, -92.624, 100.329, -96.909, -94.057, -83.488);
 42   JointPos j2(112.239, -90.096, 99.282, -95.909, -89.824, -83.488);
 43   JointPos j3(110.839, -83.473, 93.166, -89.22, -90.499, -83.487);
 44   JointPos j4(107.935, -83.572, 95.424, -92.873, -87.933, -83.488);
 45   DescPose descSafe = {};
 46   DescPose desc1 = {};
 47   DescPose desc2 = {};
 48   DescPose desc3 = {};
 49   DescPose desc4 = {};
 50   ExaxisPos exaxisPos = { 0, 0, 0, 0 };
 51   DescPose offdese = { 0, 0, 0, 0, 0, 0 };
 52   robot.GetForwardKin(&jSafe, &descSafe);
 53   robot.MoveJ(&jSafe, &descSafe, 1, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
 54   robot.Sleep(2000);
 55   robot.GetForwardKin(&j1, &desc1);
 56   robot.MoveJ(&j1, &desc1, 1, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
 57   robot.Sleep(2000);
 58   DescPose actualTCPPos = {};
 59   robot.GetActualTCPPose(0, &actualTCPPos);
 60   robot.SetRefPointInExAxisEnd(actualTCPPos);
 61   rtn = robot.PositionorSetRefPoint(1);
 62   cout << "PositionorSetRefPoint 1 rtn is " << rtn << endl;
 63   robot.Sleep(2000);
 64   robot.MoveJ(&jSafe, &descSafe, 1, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
 65   robot.ExtAxisStartJog(1, 0, 50, 50, 10);
 66   robot.Sleep(1000);
 67   robot.ExtAxisStartJog(2, 0, 50, 50, 10);
 68   robot.Sleep(1000);
 69   robot.GetForwardKin(&j2, &desc2);
 70   rtn = robot.MoveJ(&j2, &desc2, 1, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
 71   rtn = robot.PositionorSetRefPoint(2);
 72   cout << "PositionorSetRefPoint 2 rtn is " << rtn << endl;
 73   robot.Sleep(2000);
 74   robot.MoveJ(&jSafe, &descSafe, 1, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
 75   robot.ExtAxisStartJog(1, 0, 50, 50, 10);
 76   robot.Sleep(1000);
 77   robot.ExtAxisStartJog(2, 0, 50, 50, 10);
 78   robot.Sleep(1000);
 79   robot.GetForwardKin(&j3, &desc3);
 80   robot.MoveJ(&j3, &desc3, 1, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
 81   rtn = robot.PositionorSetRefPoint(3);
 82   cout << "PositionorSetRefPoint 3 rtn is " << rtn << endl;
 83   robot.Sleep(2000);
 84   robot.MoveJ(&jSafe, &descSafe, 1, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
 85   robot.ExtAxisStartJog(1, 0, 50, 50, 10);
 86   robot.Sleep(1000);
 87   robot.ExtAxisStartJog(2, 0, 50, 50, 10);
 88   robot.Sleep(1000);
 89   robot.GetForwardKin(&j4, &desc4);
 90   robot.MoveJ(&j4, &desc4, 1, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
 91   rtn = robot.PositionorSetRefPoint(4);
 92   cout << "PositionorSetRefPoint 4 rtn is " << rtn << endl;
 93   robot.Sleep(2000);
 94   DescPose axisCoord = {};
 95   robot.PositionorComputeECoordSys(axisCoord);
 96   robot.MoveJ(&jSafe, &descSafe, 1, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
 97   printf("PositionorComputeECoordSys rtn is %f %f %f %f %f %f\n", axisCoord.tran.x, axisCoord.tran.y, axisCoord.tran.z, axisCoord.rpy.rx, axisCoord.rpy.ry, axisCoord.rpy.rz);
 98   rtn = robot.ExtAxisActiveECoordSys(3, 1, axisCoord, 1);
 99   cout << "ExtAxisActiveECoordSys rtn is " << rtn << endl;
100   DescPose getCoord(0, 0, 0, 0, 0, 0);
101   rtn = robot.ExtAxisGetCoord(getCoord);
102   printf("ExtAxisGetCoord rtn is %f %f %f %f %f %f\n", getCoord.tran.x, getCoord.tran.y, getCoord.tran.z, getCoord.rpy.rx, getCoord.rpy.ry, getCoord.rpy.rz);
103   robot.CloseRPC();
104   return 0;
105}

13.40. UDP-Erweiterungsachsen-Bewegung

Geändert in Version C++SDK-v2.2.4.0.

1/**
2* @brief Bewegung der UDP-Erweiterungsachse
3* @param [in] pos Zielposition
4* @param [in] ovl Geschwindigkeitsprozentsatz
5* @param [in] blend Glättungsparameter (mm oder ms); -1: auf Bewegungsabschluss warten (blockierend)
6* @return Fehlercode
7*/
8errno_t ExtAxisMove(ExaxisPos pos, double ovl, double blend = -1);

13.41. Codebeispiel für UDP-Erweiterungsachsen-Bewegung

 1int TestUDPAxisCalib(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  ExaxisPos axisPos;
13  axisPos.ePos[0] = 20;
14  axisPos.ePos[1] = 0;
15  axisPos.ePos[2] = 0;
16  axisPos.ePos[3] = 0;
17  robot.ExtAxisMove(axisPos, 50);
18  robot.CloseRPC();
19  return 0;
20}

13.42. Synchronisierte Bewegung: UDP-Erweiterungsachse und Roboter-Gelenkbewegung

Neu in Version C++SDK-v2.1.4.0.

 1/**
 2* @brief Synchronisierte Bewegung: UDP-Erweiterungsachse und Roboter-Gelenkbewegung
 3* @param [in] joint_pos Ziel-Gelenkposition, Einheit deg
 4* @param [in] desc_pos Ziel-Kartesische Pose
 5* @param [in] tool Werkzeugkoordinatennummer, Bereich [0~14]
 6* @param [in] user Werkstückkoordinatennummer, Bereich [0~14]
 7* @param [in] vel Geschwindigkeitsprozentsatz, Bereich [0~100]
 8* @param [in] acc Beschleunigungsprozentsatz, Bereich [0~100], vorerst nicht verfügbar
 9* @param [in] ovl Geschwindigkeitsskalierungsfaktor, Bereich [0~100]
10* @param [in] epos Erweiterachsenposition, Einheit mm
11* @param [in] blendT [-1.0]-Bewegung abschließen (blockierend), [0~500.0]-Glättungszeit (nicht blockierend), Einheit ms
12* @param [in] offset_flag  0-kein Versatz, 1-Versatz im Basis-/Werkstückkoordinatensystem, 2-Versatz im Werkzeugkoordinatensystem
13* @param [in] offset_pos  Posenversatz
14* @return  Fehlercode
15*/
16errno_t ExtAxisSyncMoveJ(JointPos joint_pos, DescPose desc_pos, int tool, int user, float vel, float acc, float ovl, ExaxisPos epos, float blendT, byte offset_flag, DescPose offset_pos);

13.43. Synchronisierte Bewegung: UDP-Erweiterungsachse und Roboter-Gelenkbewegung (automatische Vorwärtskinematik)

 1/**
 2* @brief Synchronisierte Bewegung: UDP-Erweiterungsachse und Roboter-Gelenkbewegung (automatische Vorwärtskinematik)
 3* @param [in] joint_pos Ziel-Gelenkposition, Einheit deg
 4* @param [in] tool Werkzeugkoordinatennummer, Bereich [0~14]
 5* @param [in] user Werkstückkoordinatennummer, Bereich [0~14]
 6* @param [in] vel Geschwindigkeitsprozentsatz, Bereich [0~100]
 7* @param [in] acc Beschleunigungsprozentsatz, Bereich [0~100], vorerst nicht verfügbar
 8* @param [in] ovl Geschwindigkeitsskalierungsfaktor, Bereich [0~100]
 9* @param [in] epos Erweiterachsenposition, Einheit mm
10* @param [in] blendT [-1.0]-Bewegung abschließen (blockierend), [0~500.0]-Glättungszeit (nicht blockierend), Einheit ms
11* @param [in] offset_flag 0-kein Versatz, 1-Versatz im Basis-/Werkstückkoordinatensystem, 2-Versatz im Werkzeugkoordinatensystem
12* @param [in] offset_pos Posenversatz
13* @return Fehlercode
14*/
15errno_t ExtAxisSyncMoveJ(JointPos joint_pos, int tool, int user, float vel, float acc, float ovl, ExaxisPos epos, float blendT, uint8_t offset_flag, DescPose offset_pos);

13.44. Codebeispiel für synchronisierte Gelenkbewegung

 1int testSyncMoveJ()
 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
14    //1. Kalibrieren und Anwenden des Roboter-Werkzeugkoordinatensystems. Sie können die Vier-Punkt- oder Sechs-Punkt-Methode verwenden. Die relevanten Schnittstellen sind:
15    //  int SetToolPoint(int point_num); // Werkzeug-Referenzpunkt einstellen - Sechs-Punkt-Methode
16    //  int ComputeTool(ref DescPose tcp_pose); // Werkzeugkoordinatensystem berechnen
17    //  int SetTcp4RefPoint(int point_num);  // Werkzeug-Referenzpunkt einstellen - Vier-Punkt-Methode
18    //  int ComputeTcp4(ref DescPose tcp_pose);  // Werkzeugkoordinatensystem berechnen - Vier-Punkt-Methode
19    //  int SetToolCoord(int id, DescPose coord, int type, int install); // Werkzeugkoordinatensystem einstellen und anwenden
20    //  int SetToolList(int id, DescPose coord, int type, int install);  // Werkzeugkoordinatensystem in Liste einstellen und anwenden
21
22    //2. UDP-Kommunikationsparameter einstellen und UDP-Kommunikation laden
23    robot.ExtDevSetUDPComParam("192.168.58.88", 2021, 2, 100, 3, 100, 1, 100, 10);
24    robot.ExtDevLoadUDPDriver();
25
26    //3. Parameter für Erweiterungsachsen einstellen, einschließlich Typ, Antriebsparameter, DH-Parameter
27    robot.SetAxisDHParaConfig(4, 200, 200, 0, 0, 0, 0, 0, 0); // Einachs-Positionierer und DH-Parameter
28    robot.SetRobotPosToAxis(1); // Einbauposition der Erweiterungsachse
29    robot.ExtAxisParamConfig(1, 0, 1, 100, -100, 10, 10, 12, 131072, 0, 1, 0, 0); // Servoantriebsparameter, hier für Einachs-Positionierer. Bei mehreren Achsen müssen für jede Achse Parameter gesetzt werden.
30
31    //4. Ausgewählte Achse aktivieren und Referenzfahrt durchführen
32    robot.ExtAxisServoOn(1, 0);
33    robot.ExtAxisSetHoming(1, 0, 20, 3);
34
35    //5. Kalibrierung und Anwendung des Erweiterungsachsen-Koordinatensystems
36    DescPose pos = {/* Geben Sie hier Ihre Kalibrierungspunktkoordinaten ein */ };
37    robot.SetRefPointInExAxisEnd(pos);
38    robot.PositionorSetRefPoint(1); /* Sie müssen diese Schnittstelle 4 Mal mit verschiedenen Punkten aufrufen, um die Achse zu kalibrieren */
39    DescPose coord = {};
40    robot.PositionorComputeECoordSys(coord); // Kalibrierungsergebnis berechnen
41    robot.ExtAxisActiveECoordSys(1, 1, coord, 1); // Kalibrierungsergebnis auf das Erweiterungsachsen-Koordinatensystem anwenden
42
43    //6. Werkstückkoordinatensystem auf der Erweiterungsachse kalibrieren. Sie benötigen folgende Schnittstellen:
44    //int SetWObjCoordPoint(int point_num);
45    //int ComputeWObjCoord(int method, ref DescPose wobj_pose);
46    //int SetWObjCoord(int id, DescPose coord);
47    //int SetWObjList(int id, DescPose coord);
48
49    //7. Startpunkt der synchronen Gelenkbewegung erfassen
50    DescPose startdescPose = {/* Geben Sie hier Ihre Koordinaten ein */ };
51    JointPos startjointPos = {/* Geben Sie hier Ihre Koordinaten ein */ };
52    ExaxisPos startexaxisPos = {/* Geben Sie hier Ihre Startkoordinaten für die Erweiterungsachse ein */ };
53
54    //8. Endpunkt der synchronen Gelenkbewegung erfassen
55    DescPose enddescPose = {/* Geben Sie hier Ihre Koordinaten ein */ };
56    JointPos endjointPos = {/* Geben Sie hier Ihre Koordinaten ein */ };
57    ExaxisPos endexaxisPos = {/* Geben Sie hier Ihre Endkoordinaten für die Erweiterungsachse ein */ };
58
59    //9. Synchronbewegungsprogramm erstellen
60    // Zum Startpunkt bewegen, angenommen Werkzeug- und Werkstückkoordinatensystem sind beide 1
61    robot.ExtAxisMove(startexaxisPos, 20);
62    DescPose offdese = { 0, 0, 0, 0, 0, 0 };
63    robot.MoveJ(&startjointPos, &startdescPose, 1, 1, 100, 100, 100, &startexaxisPos, 0, 0, &offdese);
64
65    // Synchronbewegung starten
66    robot.ExtAxisSyncMoveJ(endjointPos, enddescPose, 1, 1, 100, 100, 100, endexaxisPos, -1, 0, offdese);
67
68    // Zum Startpunkt bewegen (Überladung ohne Zielpose)
69    robot.MoveJ(&startjointPos, 1, 1, 100, 100, 100, &startexaxisPos, 0, 0, &offdese);
70
71    // Synchronbewegung starten (Überladung ohne Zielpose)
72    robot.ExtAxisSyncMoveJ(endjointPos, 1, 1, 100, 100, 100, endexaxisPos, -1, 0, offdese);
73
74    robot.CloseRPC();
75}

13.45. Synchronisierte Bewegung: UDP-Erweiterungsachse und Roboter-Linearbewegung

Neu in Version C++SDK-v2.1.4.0.

 1/**
 2* @brief Synchronisierte Bewegung: UDP-Erweiterungsachse und Roboter-Linearbewegung
 3* @param [in] joint_pos  Ziel-Gelenkposition, Einheit deg
 4* @param [in] desc_pos   Ziel-Kartesische Pose
 5* @param [in] tool  Werkzeugkoordinatennummer, Bereich [0~14]
 6* @param [in] user  Werkstückkoordinatennummer, Bereich [0~14]
 7* @param [in] vel  Geschwindigkeitsprozentsatz, Bereich [0~100]
 8* @param [in] acc  Beschleunigungsprozentsatz, Bereich [0~100], vorerst nicht verfügbar
 9* @param [in] ovl  Geschwindigkeitsskalierungsfaktor, Bereich [0~100]
10* @param [in] blendR [-1.0]-Bewegung abschließen (blockierend), [0~1000.0]-Glättungsradius (nicht blockierend), Einheit mm
11* @param [in] epos  Erweiterachsenposition, Einheit mm
12* @param [in] offset_flag  0-kein Versatz, 1-Versatz im Basis-/Werkstückkoordinatensystem, 2-Versatz im Werkzeugkoordinatensystem
13* @param [in] offset_pos  Posenversatz
14* @return Fehlercode
15*/
16errno_t ExtAxisSyncMoveL(JointPos joint_pos, DescPose desc_pos, int tool, int user, float vel, float acc, float ovl, float blendR, ExaxisPos epos, int offset_flag, DescPose offset_pos);

13.46. Synchronisierte Bewegung: UDP-Erweiterungsachse und Roboter-Linearbewegung (automatische inverse Kinematik)

 1/**
 2* @brief Synchronisierte Bewegung: UDP-Erweiterungsachse und Roboter-Linearbewegung (automatische inverse Kinematik)
 3* @param [in] desc_pos  Ziel-Kartesische Pose
 4* @param [in] tool Werkzeugkoordinatennummer, Bereich [0~14]
 5* @param [in] user Werkstückkoordinatennummer, Bereich [0~14]
 6* @param [in] vel Geschwindigkeitsprozentsatz, Bereich [0~100]
 7* @param [in] acc Beschleunigungsprozentsatz, Bereich [0~100], vorerst nicht verfügbar
 8* @param [in] ovl Geschwindigkeitsskalierungsfaktor, Bereich [0~100]
 9* @param [in] blendR [-1.0]-Bewegung abschließen (blockierend), [0~1000.0]-Glättungsradius (nicht blockierend), Einheit mm
10* @param [in] epos Erweiterachsenposition, Einheit mm
11* @param [in] offset_flag 0-kein Versatz, 1-Versatz im Basis-/Werkstückkoordinatensystem, 2-Versatz im Werkzeugkoordinatensystem
12* @param [in] offset_pos Posenversatz
13* @param [in] config Konfiguration des inversen Gelenkraums, [-1]-basierend auf aktueller Gelenkposition berechnen, [0~7]-basierend auf spezifischer Konfiguration lösen
14* @return Fehlercode
15*/
16errno_t ExtAxisSyncMoveL(DescPose desc_pos, int tool, int user, float vel, float acc, float ovl, float blendR, ExaxisPos epos, uint8_t offset_flag, DescPose offset_pos, int config = -1);

13.47. Codebeispiel für synchronisierte Linearbewegung

 1int testSyncMoveL()
 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
14    //1. Kalibrieren und Anwenden des Roboter-Werkzeugkoordinatensystems. Sie können die Vier-Punkt- oder Sechs-Punkt-Methode verwenden. Die relevanten Schnittstellen sind:
15    //  int SetToolPoint(int point_num); // Werkzeug-Referenzpunkt einstellen - Sechs-Punkt-Methode
16    //  int ComputeTool(ref DescPose tcp_pose); // Werkzeugkoordinatensystem berechnen
17    //  int SetTcp4RefPoint(int point_num);  // Werkzeug-Referenzpunkt einstellen - Vier-Punkt-Methode
18    //  int ComputeTcp4(ref DescPose tcp_pose);  // Werkzeugkoordinatensystem berechnen - Vier-Punkt-Methode
19    //  int SetToolCoord(int id, DescPose coord, int type, int install); // Werkzeugkoordinatensystem einstellen und anwenden
20    //  int SetToolList(int id, DescPose coord, int type, int install);  // Werkzeugkoordinatensystem in Liste einstellen und anwenden
21
22    //2. UDP-Kommunikationsparameter einstellen und UDP-Kommunikation laden
23    robot.ExtDevSetUDPComParam("192.168.58.88", 2021, 2, 100, 3, 100, 1, 100, 10);
24    robot.ExtDevLoadUDPDriver();
25
26    //3. Parameter für Erweiterungsachsen einstellen, einschließlich Typ, Antriebsparameter, DH-Parameter
27    robot.SetAxisDHParaConfig(4, 200, 200, 0, 0, 0, 0, 0, 0); // Einachs-Positionierer und DH-Parameter
28    robot.SetRobotPosToAxis(1); // Einbauposition der Erweiterungsachse
29    robot.ExtAxisParamConfig(1, 0, 1, 100, -100, 10, 10, 12, 131072, 0, 1, 0, 0); // Servoantriebsparameter, hier für Einachs-Positionierer. Bei mehreren Achsen müssen für jede Achse Parameter gesetzt werden.
30
31    //4. Ausgewählte Achse aktivieren und Referenzfahrt durchführen
32    robot.ExtAxisServoOn(1, 0);
33    robot.ExtAxisSetHoming(1, 0, 20, 3);
34
35    //5. Kalibrierung und Anwendung des Erweiterungsachsen-Koordinatensystems
36    DescPose pos = {/* Geben Sie hier Ihre Kalibrierungspunktkoordinaten ein */ };
37    robot.SetRefPointInExAxisEnd(pos);
38    robot.PositionorSetRefPoint(1); /* Sie müssen diese Schnittstelle 4 Mal mit verschiedenen Punkten aufrufen, um die Achse zu kalibrieren */
39    DescPose coord = {};
40    robot.PositionorComputeECoordSys(coord); // Kalibrierungsergebnis berechnen
41    robot.ExtAxisActiveECoordSys(1, 1, coord, 1); // Kalibrierungsergebnis auf das Erweiterungsachsen-Koordinatensystem anwenden
42
43    //6. Werkstückkoordinatensystem auf der Erweiterungsachse kalibrieren. Sie benötigen folgende Schnittstellen:
44    //int SetWObjCoordPoint(int point_num);
45    //int ComputeWObjCoord(int method, ref DescPose wobj_pose);
46    //int SetWObjCoord(int id, DescPose coord);
47    //int SetWObjList(int id, DescPose coord);
48
49    //7. Startpunkt der synchronen Linearbewegung erfassen
50    DescPose startdescPose = {/* Geben Sie hier Ihre Koordinaten ein */ };
51    JointPos startjointPos = {/* Geben Sie hier Ihre Koordinaten ein */ };
52    ExaxisPos startexaxisPos = {/* Geben Sie hier Ihre Startkoordinaten für die Erweiterungsachse ein */ };
53
54    //8. Endpunkt der synchronen Linearbewegung erfassen
55    DescPose enddescPose = {/* Geben Sie hier Ihre Koordinaten ein */ };
56    JointPos endjointPos = {/* Geben Sie hier Ihre Koordinaten ein */ };
57    ExaxisPos endexaxisPos = {/* Geben Sie hier Ihre Endkoordinaten für die Erweiterungsachse ein */ };
58
59    //9. Synchronbewegungsprogramm erstellen
60    // Zum Startpunkt bewegen, angenommen Werkzeug- und Werkstückkoordinatensystem sind beide 1
61    robot.ExtAxisMove(startexaxisPos, 20);
62    DescPose offdese = { 0, 0, 0, 0, 0, 0 };
63    robot.MoveJ(&startjointPos, &startdescPose, 1, 1, 100, 100, 100, &startexaxisPos, 0, 0, &offdese);
64
65    // Synchronbewegung starten (mit Gelenkposition)
66    robot.ExtAxisSyncMoveL(endjointPos, enddescPose, 1, 1, 100, 100, 100, 0, endexaxisPos, 0, offdese);
67
68    // Zum Startpunkt bewegen (Überladung ohne Zielpose)
69    robot.MoveJ(&startjointPos, 1, 1, 100, 100, 100, &startexaxisPos, 0, 0, &offdese);
70
71    // Synchronbewegung starten (Überladung ohne Gelenkposition)
72    robot.ExtAxisSyncMoveL(enddescPose, 1, 1, 100, 100, 100, 0, endexaxisPos, 0, offdese);
73
74    robot.CloseRPC();
75}

13.48. Synchronisierte Bewegung: UDP-Erweiterungsachse und Roboter-Kreisbogenbewegung

Neu in Version C++SDK-v2.1.4.0.

 1/**
 2* @brief Synchronisierte Bewegung: UDP-Erweiterungsachse und Roboter-Kreisbogenbewegung
 3* @param [in] joint_pos_p Gelenkposition des Zwischenpunkts, Einheit deg
 4* @param [in] desc_pos_p  Kartesische Pose des Zwischenpunkts
 5* @param [in] ptool  Werkzeugkoordinatennummer für Zwischenpunkt, Bereich [0~14]
 6* @param [in] puser  Werkstückkoordinatennummer für Zwischenpunkt, Bereich [0~14]
 7* @param [in] pvel  Geschwindigkeitsprozentsatz für Zwischenpunkt, Bereich [0~100]
 8* @param [in] pacc  Beschleunigungsprozentsatz für Zwischenpunkt, Bereich [0~100], vorerst nicht verfügbar
 9* @param [in] epos_p  Erweiterachsenposition am Zwischenpunkt, Einheit mm
10* @param [in] poffset_flag  0-kein Versatz, 1-Versatz im Basis-/Werkstückkoordinatensystem, 2-Versatz im Werkzeugkoordinatensystem für Zwischenpunkt
11* @param [in] offset_pos_p  Posenversatz für Zwischenpunkt
12* @param [in] joint_pos_t  Gelenkposition des Zielpunkts, Einheit deg
13* @param [in] desc_pos_t   Kartesische Pose des Zielpunkts
14* @param [in] ttool  Werkzeugkoordinatennummer für Zielpunkt, Bereich [0~14]
15* @param [in] tuser  Werkstückkoordinatennummer für Zielpunkt, Bereich [0~14]
16* @param [in] tvel  Geschwindigkeitsprozentsatz für Zielpunkt, Bereich [0~100]
17* @param [in] tacc  Beschleunigungsprozentsatz für Zielpunkt, Bereich [0~100], vorerst nicht verfügbar
18* @param [in] epos_t  Erweiterachsenposition am Zielpunkt, Einheit mm
19* @param [in] toffset_flag  0-kein Versatz, 1-Versatz im Basis-/Werkstückkoordinatensystem, 2-Versatz im Werkzeugkoordinatensystem für Zielpunkt
20* @param [in] offset_pos_t  Posenversatz für Zielpunkt
21* @param [in] ovl  Geschwindigkeitsskalierungsfaktor, Bereich [0~100]
22* @param [in] blendR [-1.0]-Bewegung abschließen (blockierend), [0~1000.0]-Glättungsradius (nicht blockierend), Einheit mm
23* @return Fehlercode
24*/
25errno_t ExtAxisSyncMoveC(JointPos joint_pos_p, DescPose desc_pos_p, int ptool, int puser, float pvel, float pacc, ExaxisPos epos_p, int poffset_flag, DescPose offset_pos_p, JointPos joint_pos_t, DescPose desc_pos_t, int ttool, int tuser, float tvel, float tacc, ExaxisPos epos_t, int toffset_flag, DescPose offset_pos_t, float ovl, float blendR);

13.49. Synchronisierte Bewegung: UDP-Erweiterungsachse und Roboter-Kreisbogenbewegung (automatische inverse Kinematik)

 1/**
 2* @brief Synchronisierte Bewegung: UDP-Erweiterungsachse und Roboter-Kreisbogenbewegung (automatische inverse Kinematik)
 3* @param [in] desc_pos_p  Kartesische Pose des Zwischenpunkts
 4* @param [in] ptool Werkzeugkoordinatennummer für Zwischenpunkt, Bereich [0~14]
 5* @param [in] puser Werkstückkoordinatennummer für Zwischenpunkt, Bereich [0~14]
 6* @param [in] pvel Geschwindigkeitsprozentsatz für Zwischenpunkt, Bereich [0~100]
 7* @param [in] pacc Beschleunigungsprozentsatz für Zwischenpunkt, Bereich [0~100], vorerst nicht verfügbar
 8* @param [in] epos_p Erweiterachsenposition am Zwischenpunkt, Einheit mm
 9* @param [in] poffset_flag 0-kein Versatz, 1-Versatz im Basis-/Werkstückkoordinatensystem, 2-Versatz im Werkzeugkoordinatensystem für Zwischenpunkt
10* @param [in] offset_pos_p Posenversatz für Zwischenpunkt
11* @param [in] desc_pos_t  Kartesische Pose des Zielpunkts
12* @param [in] ttool Werkzeugkoordinatennummer für Zielpunkt, Bereich [0~14]
13* @param [in] tuser Werkstückkoordinatennummer für Zielpunkt, Bereich [0~14]
14* @param [in] tvel Geschwindigkeitsprozentsatz für Zielpunkt, Bereich [0~100]
15* @param [in] tacc Beschleunigungsprozentsatz für Zielpunkt, Bereich [0~100], vorerst nicht verfügbar
16* @param [in] epos_t Erweiterachsenposition am Zielpunkt, Einheit mm
17* @param [in] toffset_flag 0-kein Versatz, 1-Versatz im Basis-/Werkstückkoordinatensystem, 2-Versatz im Werkzeugkoordinatensystem für Zielpunkt
18* @param [in] offset_pos_t Posenversatz für Zielpunkt
19* @param [in] ovl Geschwindigkeitsskalierungsfaktor, Bereich [0~100]
20* @param [in] blendR [-1.0]-Bewegung abschließen (blockierend), [0~1000.0]-Glättungsradius (nicht blockierend), Einheit mm
21* @param [in] config Konfiguration des inversen Gelenkraums, [-1]-basierend auf aktueller Gelenkposition berechnen, [0~7]-basierend auf spezifischer Konfiguration lösen
22* @return Fehlercode
23*/
24errno_t ExtAxisSyncMoveC(DescPose desc_pos_p, int ptool, int puser, float pvel, float pacc, ExaxisPos epos_p, uint8_t poffset_flag, DescPose offset_pos_p, DescPose desc_pos_t, int ttool, int tuser, float tvel, float tacc, ExaxisPos epos_t, uint8_t toffset_flag, DescPose offset_pos_t, float ovl, float blendR, int config = -1);

13.50. Codebeispiel für synchronisierte Kreisbogenbewegung

 1int testSyncMoveC()
 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
14    //1. Kalibrieren und Anwenden des Roboter-Werkzeugkoordinatensystems. Sie können die Vier-Punkt- oder Sechs-Punkt-Methode verwenden. Die relevanten Schnittstellen sind:
15    //  int SetToolPoint(int point_num); // Werkzeug-Referenzpunkt einstellen - Sechs-Punkt-Methode
16    //  int ComputeTool(ref DescPose tcp_pose); // Werkzeugkoordinatensystem berechnen
17    //  int SetTcp4RefPoint(int point_num);  // Werkzeug-Referenzpunkt einstellen - Vier-Punkt-Methode
18    //  int ComputeTcp4(ref DescPose tcp_pose);  // Werkzeugkoordinatensystem berechnen - Vier-Punkt-Methode
19    //  int SetToolCoord(int id, DescPose coord, int type, int install); // Werkzeugkoordinatensystem einstellen und anwenden
20    //  int SetToolList(int id, DescPose coord, int type, int install);  // Werkzeugkoordinatensystem in Liste einstellen und anwenden
21
22    //2. UDP-Kommunikationsparameter einstellen und UDP-Kommunikation laden
23    robot.ExtDevSetUDPComParam("192.168.58.88", 2021, 2, 100, 3, 100, 1, 100, 10);
24    robot.ExtDevLoadUDPDriver();
25
26    //3. Parameter für Erweiterungsachsen einstellen, einschließlich Typ, Antriebsparameter, DH-Parameter
27    robot.SetAxisDHParaConfig(4, 200, 200, 0, 0, 0, 0, 0, 0); // Einachs-Positionierer und DH-Parameter
28    robot.SetRobotPosToAxis(1); // Einbauposition der Erweiterungsachse
29    robot.ExtAxisParamConfig(1, 0, 1, 100, -100, 10, 10, 12, 131072, 0, 1, 0, 0); // Servoantriebsparameter, hier für Einachs-Positionierer. Bei mehreren Achsen müssen für jede Achse Parameter gesetzt werden.
30
31    //4. Ausgewählte Achse aktivieren und Referenzfahrt durchführen
32    robot.ExtAxisServoOn(1, 0);
33    robot.ExtAxisSetHoming(1, 0, 20, 3);
34
35    //5. Kalibrierung und Anwendung des Erweiterungsachsen-Koordinatensystems
36    DescPose pos = {/* Geben Sie hier Ihre Kalibrierungspunktkoordinaten ein */ };
37    robot.SetRefPointInExAxisEnd(pos);
38    robot.PositionorSetRefPoint(1); /* Sie müssen diese Schnittstelle 4 Mal mit verschiedenen Punkten aufrufen, um die Achse zu kalibrieren */
39    DescPose coord = {};
40    robot.PositionorComputeECoordSys(coord); // Kalibrierungsergebnis berechnen
41    robot.ExtAxisActiveECoordSys(1, 1, coord, 1); // Kalibrierungsergebnis auf das Erweiterungsachsen-Koordinatensystem anwenden
42
43    //6. Werkstückkoordinatensystem auf der Erweiterungsachse kalibrieren. Sie benötigen folgende Schnittstellen:
44    //int SetWObjCoordPoint(int point_num);
45    //int ComputeWObjCoord(int method, ref DescPose wobj_pose);
46    //int SetWObjCoord(int id, DescPose coord);
47    //int SetWObjList(int id, DescPose coord);
48
49    //7. Startpunkt der synchronen Kreisbogenbewegung erfassen
50    DescPose startdescPose = {/* Geben Sie hier Ihre Koordinaten ein */ };
51    JointPos startjointPos = {/* Geben Sie hier Ihre Koordinaten ein */ };
52    ExaxisPos startexaxisPos = {/* Geben Sie hier Ihre Startkoordinaten für die Erweiterungsachse ein */ };
53
54    //8. Endpunkt der synchronen Kreisbogenbewegung erfassen
55    DescPose enddescPose = {/* Geben Sie hier Ihre Koordinaten ein */ };
56    JointPos endjointPos = {/* Geben Sie hier Ihre Koordinaten ein */ };
57    ExaxisPos endexaxisPos = {/* Geben Sie hier Ihre Endkoordinaten für die Erweiterungsachse ein */ };
58
59    //9. Zwischenpunkt der synchronen Kreisbogenbewegung erfassen
60    DescPose middescPose = {/* Geben Sie hier Ihre Koordinaten ein */ };
61    JointPos midjointPos = {/* Geben Sie hier Ihre Koordinaten ein */ };
62    ExaxisPos midexaxisPos = {/* Geben Sie hier die Koordinaten der Erweiterungsachse am Kreisbogen-Zwischenpunkt ein */ };
63
64    //10. Synchronbewegungsprogramm erstellen
65    // Zum Startpunkt bewegen, angenommen Werkzeug- und Werkstückkoordinatensystem sind beide 1
66    robot.ExtAxisMove(startexaxisPos, 20);
67    DescPose offdese = { 0, 0, 0, 0, 0, 0 };
68    robot.MoveJ(&startjointPos, &startdescPose, 1, 1, 100, 100, 100, &startexaxisPos, 0, 0, &offdese);
69
70    // Synchronbewegung starten (mit Gelenkpositionen für Zwischen- und Endpunkt)
71    robot.ExtAxisSyncMoveC(midjointPos, middescPose, 1, 1, 100, 100, midexaxisPos, 0, offdese,
72                        endjointPos, enddescPose, 1, 1, 100, 100, endexaxisPos, 0, offdese, 100, 0);
73
74    // Zum Startpunkt bewegen (Überladung ohne Zielpose)
75    robot.MoveJ(&startjointPos, 1, 1, 100, 100, 100, &startexaxisPos, 0, 0, &offdese);
76
77    // Synchronbewegung starten (Überladung ohne Gelenkpositionen)
78    robot.ExtAxisSyncMoveC(middescPose, 1, 1, 100, 100, midexaxisPos, 0, offdese,
79                        enddescPose, 1, 1, 100, 100, endexaxisPos, 0, offdese, 100, 0);
80
81    robot.CloseRPC();
82}

13.51. Erweiterungs-DO setzen

Neu in Version C++SDK-v2.1.4.0.

1/**
2* @brief Setzt einen erweiterten digitalen Ausgang (AuxDO)
3* @param [in] DONum DO-Nummer
4* @param [in] bOpen Schalter true-ein; false-aus
5* @param [in] smooth Glättung (ob Befehl geglättet wird)
6* @param [in] block Blockierung (ob auf Abschluss gewartet wird)
7* @return Fehlercode
8*/
9errno_t SetAuxDO(int DONum, bool bOpen, bool smooth, bool block);

13.52. Erweiterungs-AO setzen

Neu in Version C++SDK-v2.1.4.0.

1/**
2* @brief Setzt einen erweiterten analogen Ausgang (AuxAO)
3* @param [in] AONum AO-Nummer
4* @param [in] value Analogwert [0-4095]
5* @param [in] block Blockierung (ob auf Abschluss gewartet wird)
6* @return Fehlercode
7*/
8errno_t SetAuxAO(int AONum, double value, bool block);

13.53. Filterzeit für erweiterten digitalen Eingang (AuxDI) einstellen

Neu in Version C++SDK-v2.1.4.0.

1/**
2* @brief Stellt die Filterzeit für einen erweiterten digitalen Eingang (AuxDI) ein
3* @param [in] filterTime Filterzeit (ms)
4* @return Fehlercode
5*/
6errno_t SetAuxDIFilterTime(int filterTime);

13.54. Filterzeit für erweiterten analogen Eingang (AuxAI) einstellen

Neu in Version C++SDK-v2.1.4.0.

1/**
2* @brief Stellt die Filterzeit für einen erweiterten analogen Eingang (AuxAI) ein
3* @param [in] filterTime Filterzeit (ms)
4* @return Fehlercode
5*/
6errno_t SetAuxAIFilterTime(int filterTime);

13.55. Auf erweiterten digitalen Eingang (AuxDI) warten

Neu in Version C++SDK-v2.1.4.0.

1/**
2* @brief Wartet auf einen erweiterten digitalen Eingang (AuxDI)
3* @param [in] DINum DI-Nummer
4* @param [in] bOpen Schalter 0-aus; 1-ein
5* @param [in] time Maximale Wartezeit (ms)
6* @param [in] errorAlarm Verhalten bei Zeitüberschreitung (false: Fehler, Bewegung stoppen; true: Warnung, Bewegung fortsetzen)
7* @return Fehlercode
8*/
9errno_t WaitAuxDI(int DINum, bool bOpen, int time, bool errorAlarm);

13.56. Auf erweiterten analogen Eingang (AuxAI) warten

Neu in Version C++SDK-v2.1.4.0.

 1/**
 2* @brief Wartet auf einen erweiterten analogen Eingang (AuxAI)
 3* @param [in] AINum AI-Nummer
 4* @param [in] sign 0-größer als; 1-kleiner als
 5* @param [in] value AI-Wert
 6* @param [in] time Maximale Wartezeit (ms)
 7* @param [in] errorAlarm Verhalten bei Zeitüberschreitung (false: Fehler, Bewegung stoppen; true: Warnung, Bewegung fortsetzen)
 8* @return Fehlercode
 9*/
10errno_t WaitAuxAI(int AINum, int sign, int value, int time, bool errorAlarm);

13.57. Wert eines erweiterten digitalen Eingangs (AuxDI) abrufen

Neu in Version C++SDK-v2.1.4.0.

1/**
2* @brief Gibt den Wert eines erweiterten digitalen Eingangs (AuxDI) zurück
3* @param [in] DINum DI-Nummer
4* @param [in] isNoBlock Blockierung (false: blockierend; true: nicht blockierend)
5* @param [out] isOpen 0-aus; 1-ein
6* @return Fehlercode
7*/
8errno_t GetAuxDI(int DINum, bool isNoBlock, bool& isOpen);

13.58. Wert eines erweiterten analogen Eingangs (AuxAI) abrufen

Neu in Version C++SDK-v2.1.4.0.

1/**
2* @brief Gibt den Wert eines erweiterten analogen Eingangs (AuxAI) zurück
3* @param [in] AINum AI-Nummer
4* @param [in] isNoBlock Blockierung (false: blockierend; true: nicht blockierend)
5* @param [out] value Eingangswert
6* @return Fehlercode
7*/
8errno_t GetAuxAI(int AINum, bool isNoBlock, int& value);

13.59. Codebeispiel für erweiterte I/Os (AuxIO)

 1int TestAuxDOAO(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  for (int i = 0; i < 128; i++)
14  {
15    robot.SetAuxDO(i, true, false, true);
16    Sleep(100);
17  }
18  for (int i = 0; i < 128; i++)
19  {
20    robot.SetAuxDO(i, false, false, true);
21    Sleep(100);
22  }
23  for (int i = 0; i < 409; i++)
24  {
25    robot.SetAuxAO(0, i * 10, true);
26    robot.SetAuxAO(1, 4095 - i * 10, true);
27    robot.SetAuxAO(2, i * 10, true);
28    robot.SetAuxAO(3, 4095 - i * 10, true);
29    Sleep(10);
30  }
31  robot.SetAuxDIFilterTime(10);
32  robot.SetAuxAIFilterTime(0, 10);
33  for (int i = 0; i < 20; i++)
34  {
35    bool curValue = false;
36    int rtn = robot.GetAuxDI(i, false, curValue);
37    cout << "DI" << i << "  " << curValue << endl;
38  }
39  int curValue = -1;
40  for (int i = 0; i < 4; i++)
41  {
42    rtn = robot.GetAuxAI(i, true, curValue);
43  }
44  robot.WaitAuxDI(1, false, 1000, false);
45  robot.WaitAuxAI(1, 1, 132, 1000, false);
46  robot.CloseRPC();
47  return 0;
48}

13.60. Fahrbare Einheit aktivieren

Neu in Version C++SDK-v2.1.5.0.

1/**
2* @brief Aktiviert/Deaktiviert die fahrbare Einheit
3* @param enable false-deaktivieren; true-aktivieren
4* @return Fehlercode
5*/
6errno_t TractorEnable(bool enable);

13.61. Referenzpunktfahrt der fahrbaren Einheit

Neu in Version C++SDK-v2.1.5.0.

1/**
2* @brief Führt die Referenzpunktfahrt der fahrbaren Einheit durch
3* @return Fehlercode
4*/
5errno_t TractorHoming();

13.62. Linearbewegung der fahrbaren Einheit

Neu in Version C++SDK-v2.1.5.0.

1/**
2* @brief Linearbewegung der fahrbaren Einheit
3* @param distance Bewegungsstrecke (mm)
4* @param vel Geschwindigkeitsprozentsatz (0-100)
5* @return Fehlercode
6*/
7errno_t TractorMoveL(double distance, double vel);

13.63. Kreisbogenbewegung der fahrbaren Einheit

Neu in Version C++SDK-v2.1.5.0.

1/**
2* @brief Kreisbogenbewegung der fahrbaren Einheit
3* @param radio Radius der Kreisbogenbewegung (mm)
4* @param angle Winkel der Kreisbogenbewegung (°)
5* @param vel Geschwindigkeitsprozentsatz (0-100)
6* @return Fehlercode
7*/
8errno_t TractorMoveC(double radio, double angle, double vel);

13.64. Bewegung der fahrbaren Einheit stoppen

Neu in Version C++SDK-v2.1.5.0.

1/**
2* @brief Stoppt die Bewegung der fahrbaren Einheit
3* @return Fehlercode
4*/
5errno_t TractorStop();

13.65. Codebeispiel für fahrbare Einheit

 1int TestTractor(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  robot.ExtDevSetUDPComParam("192.168.58.2", 2021, 2, 50, 5, 50, 1, 50, 10, 1);
14  robot.ExtDevLoadUDPDriver();
15  rtn = robot.ExtAxisServoOn(1, 1);
16  rtn = robot.ExtAxisServoOn(2, 1);
17  robot.Sleep(2000);
18  robot.ExtAxisSetHoming(1, 0, 10, 2);
19  robot.Sleep(2000);
20  rtn = robot.ExtAxisSetHoming(2, 0, 10, 2);
21  robot.Sleep(4000);
22  robot.ExtAxisParamConfig(1, 0, 0, 50000, -50000, 1000, 1000, 6.280, 16384, 200, 0, 0, 0);
23  robot.ExtAxisParamConfig(2, 0, 0, 50000, -50000, 1000, 1000, 6.280, 16384, 200, 0, 0, 0);
24  robot.SetAxisDHParaConfig(5, 0, 0, 0, 0, 0, 0, 0, 0);
25  robot.TractorEnable(false);
26  robot.Sleep(2000);
27  robot.TractorEnable(true);
28  robot.Sleep(2000);
29  robot.TractorHoming();
30  robot.Sleep(2000);
31  robot.TractorMoveL(100, 2);
32  robot.Sleep(5000);
33  robot.TractorStop();
34  robot.TractorMoveL(-100, 20);
35  robot.Sleep(5000);
36  robot.TractorMoveC(300, 90, 20);
37  robot.Sleep(10000);
38  robot.TractorMoveC(300, -90, 20);
39  robot.Sleep(1);
40  robot.CloseRPC();
41  return 0;
42}

13.66. Einstellung der Positionierungsabschlusszeit für UDP-Erweiterungsachsen

1/**
2* @brief Einstellung der Positionierungsabschlusszeit für UDP-Erweiterungsachsen
3* @param [in] time Positionierungsabschlusszeit [ms]
4* @return Fehlercode
5*/
6errno_t SetExAxisCmdDoneTime(double time);