14. Robotersystem - Schweißen

14.1. Parameter der Schweißprozesskurve einstellen

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

 1/**
 2 * @brief Stellt die Parameter der Schweißprozesskurve ein.
 3 * @param [in] id Schweißprozessnummer (1-99).
 4 * @param [in] startCurrent Lichtbogenzündstrom (A).
 5 * @param [in] startVoltage Lichtbogenzündspannung (V).
 6 * @param [in] startTime Lichtbogenzündzeit (ms).
 7 * @param [in] weldCurrent Schweißstrom (A).
 8 * @param [in] weldVoltage Schweißspannung (V).
 9 * @param [in] endCurrent Lichtbogenendstrom (A).
10 * @param [in] endVoltage Lichtbogenendspannung (V).
11 * @param [in] endTime Lichtbogenendzeit (ms).
12 * @return Fehlercode.
13 */
14errno_t WeldingSetProcessParam(int id, double startCurrent, double startVoltage, double startTime, double weldCurrent, double weldVoltage, double endCurrent, double endVoltage, double endTime);

14.2. Parameter der Schweißprozesskurve abrufen

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

 1/**
 2 * @brief Gibt die Parameter der Schweißprozesskurve zurück.
 3 * @param [in] id Schweißprozessnummer (1-99).
 4 * @param [out] startCurrent Lichtbogenzündstrom (A).
 5 * @param [out] startVoltage Lichtbogenzündspannung (V).
 6 * @param [out] startTime Lichtbogenzündzeit (ms).
 7 * @param [out] weldCurrent Schweißstrom (A).
 8 * @param [out] weldVoltage Schweißspannung (V).
 9 * @param [out] endCurrent Lichtbogenendstrom (A).
10 * @param [out] endVoltage Lichtbogenendspannung (V).
11 * @param [out] endTime Lichtbogenendzeit (ms).
12 * @return Fehlercode.
13 */
14errno_t WeldingGetProcessParam(int id, double& startCurrent, double& startVoltage, double& startTime, double& weldCurrent, double& weldVoltage, double& endCurrent, double& endVoltage, double& endTime);

14.3. Beziehung zwischen Schweißstrom und Analogausgang festlegen

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

1/**
2* @brief Legt die Beziehung zwischen Schweißstrom und Analogausgang fest.
3* @param [in] currentMin Stromwert des linken Punkts der linearen Beziehung (A).
4* @param [in] currentMax Stromwert des rechten Punkts der linearen Beziehung (A).
5* @param [in] outputVoltageMin Analogausgangsspannung des linken Punkts (V).
6* @param [in] outputVoltageMax Analogausgangsspannung des rechten Punkts (V).
7* @return Fehlercode.
8*/
9errno_t WeldingSetCurrentRelation(double currentMin, double currentMax, double outputVoltageMin, double outputVoltageMax);

14.4. Beziehung zwischen Schweißspannung und Analogausgang festlegen

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

1/**
2* @brief Legt die Beziehung zwischen Schweißspannung und Analogausgang fest.
3* @param [in] weldVoltageMin Spannungswert des linken Punkts der linearen Beziehung (V).
4* @param [in] weldVoltageMax Spannungswert des rechten Punkts der linearen Beziehung (V).
5* @param [in] outputVoltageMin Analogausgangsspannung des linken Punkts (V).
6* @param [in] outputVoltageMax Analogausgangsspannung des rechten Punkts (V).
7* @return Fehlercode.
8*/
9errno_t WeldingSetVoltageRelation(double weldVoltageMin, double weldVoltageMax, double outputVoltageMin, double outputVoltageMax);

14.5. Beziehung zwischen Schweißstrom und Analogausgang abrufen

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

1/**
2* @brief Gibt die Beziehung zwischen Schweißstrom und Analogausgang zurück.
3* @param [out] currentMin Stromwert des linken Punkts (A).
4* @param [out] currentMax Stromwert des rechten Punkts (A).
5* @param [out] outputVoltageMin Analogausgangsspannung des linken Punkts (V).
6* @param [out] outputVoltageMax Analogausgangsspannung des rechten Punkts (V).
7* @return Fehlercode.
8*/
9errno_t WeldingGetCurrentRelation(double *currentMin, double *currentMax, double *outputVoltageMin, double *outputVoltageMax);

14.6. Beziehung zwischen Schweißspannung und Analogausgang abrufen

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

1/**
2* @brief Gibt die Beziehung zwischen Schweißspannung und Analogausgang zurück.
3* @param [out] weldVoltageMin Spannungswert des linken Punkts (V).
4* @param [out] weldVoltageMax Spannungswert des rechten Punkts (V).
5* @param [out] outputVoltageMin Analogausgangsspannung des linken Punkts (V).
6* @param [out] outputVoltageMax Analogausgangsspannung des rechten Punkts (V).
7* @return Fehlercode.
8*/
9errno_t WeldingGetVoltageRelation(double *weldVoltageMin, double *weldVoltageMax, double *outputVoltageMin, double *outputVoltageMax);

14.7. Schweißstrom einstellen

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

1/**
2* @brief Stellt den Schweißstrom ein.
3* @param [in] ioType I/O-Typ 0-Steuerschrank I/O; 1-Erweiterungs-I/O.
4* @param [in] current Schweißstromwert (A).
5* @param [in] AOIndex Analogausgangsport des Steuerschranks für den Strom (0-1).
6* @param [in] blend Glättung 0-nicht glätten; 1-glätten.
7* @return Fehlercode.
8*/
9errno_t WeldingSetCurrent(int ioType, double current, int AOIndex, int blend);

14.8. Schweißspannung einstellen

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

1/**
2* @brief Stellt die Schweißspannung ein.
3* @param [in] ioType I/O-Typ 0-Steuerschrank I/O; 1-Erweiterungs-I/O.
4* @param [in] voltage Schweißspannungswert (V).
5* @param [in] AOIndex Analogausgangsport des Steuerschranks für die Spannung (0-1).
6* @param [in] blend Glättung 0-nicht glätten; 1-glätten.
7* @return Fehlercode.
8*/
9errno_t WeldingSetVoltage(int ioType, double voltage, int AOIndex, int blend);

14.9. Pendelparameter einstellen

 1/**
 2 * @brief Stellt die Pendelparameter ein.
 3 * @param [in] weaveNum Konfigurationsnummer der Pendelparameter.
 4 * @param [in] weaveType Pendeltyp 0-Ebenes Dreieck; 1-Vertikales L-Dreieck; 2-Kreis im Uhrzeigersinn; 3-Kreis gegen Uhrzeigersinn; 4-Ebene Sinus; 5-Vertikales L-Sinus; 6-Vertikales Dreieck; 7-Vertikales Sinus.
 5 * @param [in] weaveFrequency Pendelfrequenz (Hz).
 6 * @param [in] weaveIncStayTime Wartezeitmodus 0-Zyklus ohne Wartezeit; 1-Zyklus mit Wartezeit.
 7 * @param [in] weaveRange Pendelamplitude (mm).
 8 * @param [in] weaveLeftRange Länge der linken Sehne bei vertikalem Dreieck (mm).
 9 * @param [in] weaveRightRange Länge der rechten Sehne bei vertikalem Dreieck (mm).
10 * @param [in] additionalStayTime Verweilzeit am vertikalen Dreieckspunkt (ms).
11 * @param [in] weaveLeftStayTime Linke Pendelverweilzeit (ms).
12 * @param [in] weaveRightStayTime Rechte Pendelverweilzeit (ms).
13 * @param [in] weaveCircleRadio Rückrufverhältnis für Kreispendeln (0-100%).
14 * @param [in] weaveStationary Position während Wartezeit 0-weiterbewegen; 1-stillstehen.
15 * @param [in] weaveYawAngle Azimutwinkel der Pendelrichtung (Rotation um Pendel-Z-Achse), Einheit °.
16 * @param [in] weaveRotAngle Rollwinkel der Pendelrichtung (Neigung um Pendel-X-Achse), Einheit °.
17 * @return Fehlercode.
18 */
19 errno_t WeaveSetPara(int weaveNum, int weaveType, double weaveFrequency, int weaveIncStayTime, double weaveRange, double weaveLeftRange, double weaveRightRange, int additionalStayTime, int weaveLeftStayTime, int weaveRightStayTime, int weaveCircleRadio, int weaveStationary, double weaveYawAngle, double weaveRotAngle = 0);

14.10. Codebeispiel zum Einstellen von Schweißparametern

 1int TestSetWeldParam(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.WeldingSetProcessParam(1, 177, 27, 1000, 178, 28, 176, 26, 1000);
14  robot.WeldingSetProcessParam(2, 188, 28, 555, 199, 29, 133, 23, 333);
15  double startCurrent = 0;
16  double startVoltage = 0;
17  double startTime = 0;
18  double weldCurrent = 0;
19  double weldVoltage = 0;
20  double endCurrent = 0;
21  double endVoltage = 0;
22  double endTime = 0;
23  robot.WeldingGetProcessParam(1, startCurrent, startVoltage, startTime, weldCurrent, weldVoltage, endCurrent, endVoltage, endTime);
24  cout << "the Num 1 process param is " << startCurrent << " " << startVoltage << " " << startTime << " " << weldCurrent << " " << weldVoltage << " " << endCurrent << " " << endVoltage << " " << endTime << endl;
25  robot.WeldingGetProcessParam(2, startCurrent, startVoltage, startTime, weldCurrent, weldVoltage, endCurrent, endVoltage, endTime);
26  cout << "the Num 2 process param is " << startCurrent << " " << startVoltage << " " << startTime << " " << weldCurrent << " " << weldVoltage << " " << endCurrent << " " << endVoltage << " " << endTime << endl;
27  rtn = robot.WeldingSetCurrentRelation(0, 400, 0, 10, 0);
28  cout << "WeldingSetCurrentRelation rtn is: " << rtn << endl;
29  rtn = robot.WeldingSetVoltageRelation(0, 40, 0, 10, 1);
30  cout << "WeldingSetVoltageRelation rtn is: " << rtn << endl;
31  double current_min = 0;
32  double current_max = 0;
33  double vol_min = 0;
34  double vol_max = 0;
35  double output_vmin = 0;
36  double output_vmax = 0;
37  int curIndex = 0;
38  int volIndex = 0;
39  rtn = robot.WeldingGetCurrentRelation(&current_min, &current_max, &output_vmin, &output_vmax, &curIndex);
40  cout << "WeldingGetCurrentRelation rtn is: " << rtn << endl;
41  cout << "current min " << current_min << " current max " << current_max << " output vol min " << output_vmin << " output vol max " << output_vmax << endl;
42  rtn = robot.WeldingGetVoltageRelation(&vol_min, &vol_max, &output_vmin, &output_vmax, &volIndex);
43  cout << "WeldingGetVoltageRelation rtn is: " << rtn << endl;
44  cout << "vol min " << vol_min << " vol max " << vol_max << " output vol min " << output_vmin << " output vol max " << output_vmax << endl;
45  rtn = robot.WeldingSetCurrent(1, 100, 0, 0);
46  cout << "WeldingSetCurrent rtn is: " << rtn << endl;
47  this_thread::sleep_for(chrono::seconds(3));
48  rtn = robot.WeldingSetVoltage(1, 10, 0, 0);
49  cout << "WeldingSetVoltage rtn is: " << rtn << endl;
50  rtn = robot.WeaveSetPara(0, 0, 2.000000, 0, 10.000000, 0.000000, 0.000000, 0, 0, 0, 0, 0, 60.000000);
51  cout << "rtn is: " << rtn << endl;
52  robot.WeaveOnlineSetPara(0, 0, 1, 0, 20, 0, 0, 0, 0);
53  rtn = robot.WeldingSetCheckArcInterruptionParam(1, 200);
54  printf("WeldingSetCheckArcInterruptionParam  %d\n", rtn);
55  rtn = robot.WeldingSetReWeldAfterBreakOffParam(1, 5.7, 98.2, 0);
56  printf("WeldingSetReWeldAfterBreakOffParam  %d\n", rtn);
57  int enable = 0;
58  double length = 0;
59  double velocity = 0;
60  int moveType = 0;
61  int checkEnable = 0;
62  int arcInterruptTimeLength = 0;
63  rtn = robot.WeldingGetCheckArcInterruptionParam(&checkEnable, &arcInterruptTimeLength);
64  printf("WeldingGetCheckArcInterruptionParam checkEnable %d  arcInterruptTimeLength %d\n", checkEnable, arcInterruptTimeLength);
65  rtn = robot.WeldingGetReWeldAfterBreakOffParam(&enable, &length, &velocity, &moveType);
66  printf("WeldingGetReWeldAfterBreakOffParam enable = %d, length = %lf, velocity = %lf, moveType = %d\n", enable, length, velocity, moveType);
67  robot.SetWeldMachineCtrlModeExtDoNum(17);
68  for (int i = 0; i < 5; i++)
69  {
70    robot.SetWeldMachineCtrlMode(0);
71    robot.Sleep(1000);
72    robot.SetWeldMachineCtrlMode(1);
73    robot.Sleep(1000);
74  }
75  robot.CloseRPC();
76  return 0;
77}

14.11. Pendelparameter sofort einstellen (Online)

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

 1/**
 2* @brief Stellt die Pendelparameter sofort ein (Online).
 3* @param [in] weaveNum Konfigurationsnummer der Pendelparameter.
 4* @param [in] weaveType Pendeltyp (siehe WeaveSetPara).
 5* @param [in] weaveFrequency Pendelfrequenz (Hz).
 6* @param [in] weaveIncStayTime Wartezeitmodus 0-Zyklus ohne Wartezeit; 1-Zyklus mit Wartezeit.
 7* @param [in] weaveRange Pendelamplitude (mm).
 8* @param [in] weaveLeftStayTime Linke Pendelverweilzeit (ms).
 9* @param [in] weaveRightStayTime Rechte Pendelverweilzeit (ms).
10* @param [in] weaveCircleRadio Rückrufverhältnis für Kreispendeln (0-100%).
11* @param [in] weaveStationary Position während Wartezeit 0-weiterbewegen; 1-stillstehen.
12* @return Fehlercode.
13*/
14errno_t WeaveOnlineSetPara(int weaveNum, int weaveType, double weaveFrequency, int weaveIncStayTime, double weaveRange, int weaveLeftStayTime, int weaveRightStayTime, int weaveCircleRadio, int weaveStationary);

14.12. Parameter für die Erkennung einer unerwarteten Lichtbogenunterbrechung einstellen

Neu in Version C++SDK-v2.1.8-3.7.8.

1/**
2 * @brief Stellt die Parameter für die Erkennung einer unerwarteten Lichtbogenunterbrechung ein.
3 * @param [in] checkEnable Erkennung aktivieren/deaktivieren; 0-deaktivieren; 1-aktivieren.
4 * @param [in] arcInterruptTimeLength Bestätigungsdauer für Lichtbogenunterbrechung (ms).
5 * @return Fehlercode.
6*/
7errno_t WeldingSetCheckArcInterruptionParam(int checkEnable, int arcInterruptTimeLength);

14.13. Parameter für die Erkennung einer unerwarteten Lichtbogenunterbrechung abrufen

Neu in Version C++SDK-v2.1.8-3.7.8.

1/**
2 * @brief Gibt die Parameter für die Erkennung einer unerwarteten Lichtbogenunterbrechung zurück.
3 * @param [out] checkEnable Erkennung aktiviert? 0-deaktiviert; 1-aktiviert.
4 * @param [out] arcInterruptTimeLength Bestätigungsdauer für Lichtbogenunterbrechung (ms).
5 * @return Fehlercode.
6*/
7errno_t WeldingGetCheckArcInterruptionParam(int* checkEnable, int* arcInterruptTimeLength);

14.14. Parameter für die Wiederaufnahme nach Schweißunterbrechung einstellen

Neu in Version C++SDK-v2.1.8-3.7.8.

1/**
2 * @brief Stellt die Parameter für die Wiederaufnahme nach Schweißunterbrechung ein.
3 * @param [in] enable Wiederaufnahme nach Unterbrechung aktivieren.
4 * @param [in] length Überlappungslänge der Schweißnaht (mm).
5 * @param [in] velocity Geschwindigkeitsprozentsatz für die Rückkehr zum Wiederzündpunkt (0-100).
6 * @param [in] moveType Bewegungstyp zum Wiederzündpunkt; 0-LIN; 1-PTP.
7 * @return Fehlercode.
8*/
9errno_t WeldingSetReWeldAfterBreakOffParam(int enable, double length, double velocity, int moveType);

14.15. Parameter für die Wiederaufnahme nach Schweißunterbrechung abrufen

Neu in Version C++SDK-v2.1.8-3.7.8.

1/**
2 * @brief Gibt die Parameter für die Wiederaufnahme nach Schweißunterbrechung zurück.
3 * @param [out] enable Wiederaufnahme nach Unterbrechung aktiviert?.
4 * @param [out] length Überlappungslänge der Schweißnaht (mm).
5 * @param [out] velocity Geschwindigkeitsprozentsatz für die Rückkehr zum Wiederzündpunkt.
6 * @param [out] moveType Bewegungstyp zum Wiederzündpunkt; 0-LIN; 1-PTP.
7 * @return Fehlercode.
8*/
9errno_t WeldingGetReWeldAfterBreakOffParam(int* enable, double* length, double* velocity, int* moveType);

14.16. Erweiterten DO-Port für Schweißgeräte-Steuermodus einstellen

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

1/**
2* @brief Stellt den erweiterten DO-Port für den Schweißgeräte-Steuermodus ein.
3* @param DONum DO-Portnummer (0-127).
4* @return Fehlercode.
5*/
6errno_t SetWeldMachineCtrlModeExtDoNum(int DONum);

14.17. Schweißgeräte-Steuermodus einstellen

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

1/**
2* @brief Schweißmaschinen-Steuerungsmodus einstellen
3* @param [in] mode Schweißmaschinen-Steuerungsmodus; 0-Gleichstrom-Einknopf-Modus; 1-Impuls-Einknopf-Modus; 2-JOB-Modus; 3-Nahsteuerungs-Modus; 4-Separat-Modus; 5-CC/CV-Modus; 6-TIG; 7-CMT
4* @param [in] ioType Steuerungstyp; 0-Steuerkasten-IO; 1-Digitales Kommunikationsprotokoll (UDP); 2-Digitales Kommunikationsprotokoll (ModbusTCP)
5* @return Fehlercode
6*/
7errno_t SetWeldMachineCtrlMode(int mode, int ioType = 1);

14.18. Schweißen starten (Lichtbogen zünden)

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

1/**
2* @brief Startet das Schweißen (zündet den Lichtbogen).
3* @param [in] ioType I/O-Typ 0-Steuerschrank I/O; 1-Erweiterungs-I/O.
4* @param [in] arcNum Nummer der Schweißgerätekonfigurationsdatei.
5* @param [in] timeout Zeitüberschreitung für die Lichtbogenzündung (ms).
6* @return Fehlercode.
7*/
8errno_t ARCStart(int ioType, int arcNum, int timeout);

14.19. Schweißen beenden (Lichtbogen löschen)

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

1/**
2* @brief Beendet das Schweißen (löscht den Lichtbogen).
3* @param [in] ioType I/O-Typ 0-Steuerschrank I/O; 1-Erweiterungs-I/O.
4* @param [in] arcNum Nummer der Schweißgerätekonfigurationsdatei.
5* @param [in] timeout Zeitüberschreitung für das Lichtbogenlöschen (ms).
6* @return Fehlercode.
7*/
8errno_t ARCEnd(int ioType, int arcNum, int timeout);

14.20. Pendeln starten

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

1/**
2* @brief Startet das Pendeln.
3* @param [in] weaveNum Konfigurationsnummer der Pendelparameter.
4* @return Fehlercode.
5*/
6errno_t WeaveStart(int weaveNum);

14.21. Pendeln beenden

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

1/**
2* @brief Beendet das Pendeln.
3* @param [in] weaveNum Konfigurationsnummer der Pendelparameter.
4* @return Fehlercode.
5*/
6errno_t WeaveEnd(int weaveNum);

14.22. Vorwärts-Drahtvorschub

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

1/**
2* @brief Steuert den Vorwärts-Drahtvorschub.
3* @param [in] ioType I/O-Typ 0-Steuerschrank I/O; 1-Erweiterungs-I/O.
4* @param [in] wireFeed Drahtvorschubsteuerung 0-stoppen; 1-starten.
5* @return Fehlercode.
6*/
7errno_t SetForwardWireFeed(int ioType, int wireFeed);

14.23. Rückwärts-Drahtvorschub

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

1/**
2* @brief Steuert den Rückwärts-Drahtvorschub.
3* @param [in] ioType I/O-Typ 0-Steuerschrank I/O; 1-Erweiterungs-I/O.
4* @param [in] wireFeed Drahtvorschubsteuerung 0-stoppen; 1-starten.
5* @return Fehlercode.
6*/
7errno_t SetReverseWireFeed(int ioType, int wireFeed);

14.24. Schutzgas steuern

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

1/**
2* @brief Steuert das Schutzgas.
3* @param [in] ioType I/O-Typ 0-Steuerschrank I/O; 1-Erweiterungs-I/O.
4* @param [in] airControl Gassteuerung 0-stoppen; 1-starten.
5* @return Fehlercode.
6*/
7errno_t SetAspirated(int ioType, int airControl);

14.25. Schweißen nach Unterbrechung wiederaufnehmen

Neu in Version C++SDK-v2.1.8-3.7.8.

1/**
2 * @brief Nimmt das Schweißen nach einer Unterbrechung wieder auf.
3 * @return Fehlercode.
4*/
5errno_t WeldingStartReWeldAfterBreakOff();

14.26. Schweißen nach Unterbrechung abbrechen

Neu in Version C++SDK-v2.1.8-3.7.8.

1/**
2 * @brief Bricht das Schweißen nach einer Unterbrechung ab.
3 * @return Fehlercode.
4 */
5errno_t WeldingAbortWeldAfterBreakOff();

14.27. Codebeispiel für Roboter-Schweißsteuerung

 1int TestWelding(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.SetForwardWireFeed(0, 1);
14  robot.Sleep(1000);
15  robot.SetForwardWireFeed(0, 0);
16  robot.SetReverseWireFeed(0, 1);
17  robot.Sleep(1000);
18  robot.SetReverseWireFeed(0, 0);
19  robot.SetAspirated(0, 1);
20  robot.Sleep(1000);
21  robot.SetAspirated(0, 0);
22  robot.WeldingSetCurrent(1, 230, 0, 0);
23  robot.WeldingSetVoltage(1, 24, 0, 1);
24  DescPose p1Desc(228.879, -503.594, 453.984, -175.580, 8.293, 171.267);
25  JointPos p1Joint(102.700, -85.333, 90.518, -102.365, -83.932, 22.134);
26  DescPose p2Desc(-333.302, -435.580, 449.866, -174.997, 2.017, 109.815);
27  JointPos p2Joint(41.862, -85.333, 90.526, -100.587, -90.014, 22.135);
28  ExaxisPos exaxisPos(0, 0, 0, 0);
29  DescPose offdese(0, 0, 0, 0, 0, 0);
30  robot.MoveJ(&p1Joint, &p1Desc, 13, 0, 20, 100, 100, &exaxisPos, -1, 0, &offdese);
31  robot.ARCStart(1, 0, 10000);
32  robot.WeaveStart(0);
33  robot.MoveL(&p2Joint, &p2Desc, 13, 0, 20, 100, 100, -1, 0, &exaxisPos, 0, 0, &offdese);
34  robot.ARCEnd(1, 0, 10000);
35  robot.WeaveEnd(0);
36  robot.WeldingStartReWeldAfterBreakOff();
37  robot.WeldingAbortWeldAfterBreakOff();
38  robot.CloseRPC();
39  return 0;
40}

14.28. Segmentweises Schweißen starten

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

 1/**
 2* @brief Startet das segmentweise Schweißen.
 3* @param [in] startDesePos Kartesische Position des Startpunkts.
 4* @param [in] endDesePos Kartesische Pose des Endpunkts.
 5* @param [in] startJPos Gelenkposition des Startpunkts.
 6* @param [in] endJPos Gelenkposition des Endpunkts.
 7* @param [in] weldLength Länge des Schweißsegments (mm).
 8* @param [in] noWeldLength Länge des Nicht-Schweißsegments (mm).
 9* @param [in] weldIOType Schweiß-I/O-Typ (0-Steuerschrank I/O; 1-Erweiterungs-I/O).
10* @param [in] arcNum Nummer der Schweißgerätekonfigurationsdatei.
11* @param [in] weldTimeout Zeitüberschreitung für Lichtbogenzündung/-löschung (ms).
12* @param [in] isWeave Soll gependelt werden?.
13* @param [in] weaveNum Konfigurationsnummer der Pendelparameter.
14* @param [in] tool Werkzeugkoordinatennummer, Bereich [0~14].
15* @param [in] user Werkstückkoordinatennummer, Bereich [0~14].
16* @param [in] vel Geschwindigkeitsprozentsatz, Bereich [0~100].
17* @param [in] acc Beschleunigungsprozentsatz, Bereich [0~100] (vorerst nicht verfügbar).
18* @param [in] ovl Geschwindigkeitsskalierungsfaktor, Bereich [0~100].
19* @param [in] blendR [-1.0]-Bewegung abschließen (blockierend), [0~1000.0]-Glättungsradius (nicht blockierend), Einheit mm.
20* @param [in] epos Position der Erweiterungsachse, Einheit mm.
21* @param [in] search 0-keine Schweißdraht-Positionssuche, 1-Schweißdraht-Positionssuche.
22* @param [in] offset_flag 0-kein Versatz, 1-Versatz im Basis-/Werkstückkoordinatensystem, 2-Versatz im Werkzeugkoordinatensystem.
23* @param [in] offset_pos Posenversatz.
24* @return Fehlercode.
25*/
26errno_t SegmentWeldStart(DescPose *startDesePos, DescPose *endDesePos, JointPos *startJPos, JointPos *endJPos, double weldLength, double noWeldLength, int weldIOType, int arcNum, int weldTimeout, bool isWeave, int weaveNum, int tool, int user, float vel, float acc, float ovl, float blendR, ExaxisPos *epos, uint8_t search, uint8_t offset_flag, DescPose *offset_pos);

14.29. Codebeispiel für robotergestütztes segmentweises Schweißen

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

 1int TestSegWeld(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.WeldingSetCurrent(1, 230, 0, 0);
14  robot.WeldingSetVoltage(1, 24, 0, 1);
15  DescPose p1Desc(228.879, -503.594, 453.984, -175.580, 8.293, 171.267);
16  JointPos p1Joint(102.700, -85.333, 90.518, -102.365, -83.932, 22.134);
17  DescPose p2Desc(-333.302, -435.580, 449.866, -174.997, 2.017, 109.815);
18  JointPos p2Joint(41.862, -85.333, 90.526, -100.587, -90.014, 22.135);
19  ExaxisPos exaxisPos(0, 0, 0, 0);
20  DescPose offdese(0, 0, 0, 0, 0, 0);
21  rtn = robot.SegmentWeldStart(&p1Desc, &p2Desc, &p1Joint, &p2Joint, 20, 20, 0, 0, 5000, 0, 0, 0, 0, 100, 100, 100, -1, &exaxisPos, 0, 0, &offdese);
22  printf("SegmentWeldStart rtn is %d\n", rtn);
23  robot.CloseRPC();
24  return 0;
25}

14.30. Simulationspendeln starten

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

1/**
2 * @brief Startet das Simulationspendeln (nur Visualisierung, ohne Bewegung?).
3 * @param [in] weaveNum Pendelparameternummer.
4 * @return Fehlercode.
5 */
6errno_t WeaveStartSim(int weaveNum);

14.31. Simulationspendeln beenden

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

1/**
2 * @brief Beendet das Simulationspendeln.
3 * @param [in] weaveNum Pendelparameternummer.
4 * @return Fehlercode.
5 */
6errno_t WeaveEndSim(int weaveNum);

14.32. Bahnprüfung/-warnung starten (ohne Bewegung)

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

1/**
2 * @brief Startet die Bahnprüfung/-warnung (ohne Bewegung).
3 * @param [in] weaveNum Pendelparameternummer.
4 * @return Fehlercode.
5 */
6errno_t WeaveInspectStart(int weaveNum);

14.33. Bahnprüfung/-warnung beenden (ohne Bewegung)

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

1/**
2 * @brief Beendet die Bahnprüfung/-warnung (ohne Bewegung).
3 * @param [in] weaveNum Pendelparameternummer.
4 * @return Fehlercode.
5 */
6errno_t WeaveInspectEnd(int weaveNum);

14.34. Pendel-Gradientenstart (WeaveChangeStart)

1/**
2 * @brief Startet den Pendel-Gradienten (Änderung von Parametern während der Bewegung).
3 * @param [in] weaveChangeFlag 1-Pendelparameter ändern; 2-Pendelparameter + Schweißgeschwindigkeit ändern.
4 * @param [in] weaveNum Pendelnummer.
5 * @param [in] velStart Schweißgeschwindigkeit am Start (cm/min).
6 * @param [in] velEnd Schweißgeschwindigkeit am Ende (cm/min).
7 * @return Fehlercode.
8 */
9 errno_t WeaveChangeStart(int weaveChangeFlag, int weaveNum, double velStart, double velEnd);

14.35. Codebeispiel für robotergestütztes Pendel-Gradientenschweißen

 1int TestWeave(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  DescPose p1Desc(228.879, -503.594, 453.984, -175.580, 8.293, 171.267);
14  JointPos p1Joint(102.700, -85.333, 90.518, -102.365, -83.932, 22.134);
15  DescPose p2Desc(-333.302, -435.580, 449.866, -174.997, 2.017, 109.815);
16  JointPos p2Joint(41.862, -85.333, 90.526, -100.587, -90.014, 22.135);
17  ExaxisPos exaxisPos(0, 0, 0, 0);
18  DescPose offdese(0, 0, 0, 0, 0, 0);
19  robot.MoveJ(&p1Joint, &p1Desc, 13, 0, 20, 100, 100, &exaxisPos, -1, 0, &offdese);
20  robot.WeaveStartSim(0);
21  robot.MoveL(&p2Joint, &p2Desc, 13, 0, 20, 100, 100, -1, 0, &exaxisPos, 0, 0, &offdese);
22  robot.WeaveEndSim(0);
23  robot.MoveJ(&p1Joint, &p1Desc, 13, 0, 20, 100, 100, &exaxisPos, -1, 0, &offdese);
24  robot.WeaveInspectStart(0);
25  robot.MoveL(&p2Joint, &p2Desc, 13, 0, 20, 100, 100, -1, 0, &exaxisPos, 0, 0, &offdese);
26  robot.WeaveInspectEnd(0);
27  robot.WeldingSetVoltage(1, 19, 0, 0);
28  robot.WeldingSetCurrent(1, 190, 0, 0);
29  robot.MoveL(&p1Joint, &p1Desc, 1, 1, 100, 100, 50, -1, &exaxisPos, 0, 0, &offdese);
30  robot.ARCStart(1, 0, 10000);
31  robot.ArcWeldTraceControl(1, 0, 1, 0.06, 5, 5, 60, 1, 0.06, 5, 5, 80, 0, 0, 4, 1, 10, 0, 0);
32  robot.WeaveStart(0);
33  robot.WeaveChangeStart(1, 0, 50, 30);
34  robot.MoveL(&p2Joint, &p2Desc, 1, 1, 100, 100, 1, -1, &exaxisPos, 0, 0, &offdese);
35  robot.WeaveChangeEnd();
36  robot.WeaveEnd(0);
37  robot.ArcWeldTraceControl(0, 0, 1, 0.06, 5, 5, 60, 1, 0.06, 5, 5, 80, 0, 0, 4, 1, 10, 0, 0);
38  robot.ARCEnd(1, 0, 10000);
39  robot.CloseRPC();
40  return 0;
41}

14.36. Pendel-Gradienten beenden

Neu in Version C++SDK-v2.2.0-3.8.0.

1/**
2 * @brief Beendet den Pendel-Gradienten.
3 * @return Fehlercode.
4 */
5errno_t WeaveChangeEnd();

14.37. Erweiterter I/O - Gasprüfsignal für Schweißgerät konfigurieren

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

1/**
2 * @brief Konfiguriert den erweiterten DO-Port für das Gasprüfsignal des Schweißgeräts.
3 * @param [in] DONum Erweiterte DO-Nummer für das Gasprüfsignal.
4 * @return Fehlercode.
5 */
6errno_t SetAirControlExtDoNum(int DONum);

14.38. Erweiterter I/O - Lichtbogenzünde-Signal für Schweißgerät konfigurieren

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

1/**
2 * @brief Konfiguriert den erweiterten DO-Port für das Lichtbogenzünde-Signal des Schweißgeräts.
3 * @param [in] DONum Erweiterte DO-Nummer für das Lichtbogenzünde-Signal.
4 * @return Fehlercode.
5 */
6errno_t SetArcStartExtDoNum(int DONum);

14.39. Erweiterter I/O - Rückwärts-Drahtvorschubsignal für Schweißgerät konfigurieren

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

1/**
2 * @brief Konfiguriert den erweiterten DO-Port für das Rückwärts-Drahtvorschubsignal des Schweißgeräts.
3 * @param [in] DONum Erweiterte DO-Nummer für das Rückwärts-Drahtvorschubsignal.
4 * @return Fehlercode.
5 */
6errno_t SetWireReverseFeedExtDoNum(int DONum);

14.40. Erweiterter I/O - Vorwärts-Drahtvorschubsignal für Schweißgerät konfigurieren

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

1/**
2 * @brief Konfiguriert den erweiterten DO-Port für das Vorwärts-Drahtvorschubsignal des Schweißgeräts.
3 * @param [in] DONum Erweiterte DO-Nummer für das Vorwärts-Drahtvorschubsignal.
4 * @return Fehlercode.
5 */
6errno_t SetWireForwardFeedExtDoNum(int DONum);

14.41. Erweiterter I/O - Erfolgreiche Lichtbogenzündung-Signal für Schweißgerät konfigurieren

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

1/**
2 * @brief Konfiguriert den erweiterten DI-Port für das Signal "Lichtbogenzündung erfolgreich" des Schweißgeräts.
3 * @param [in] DINum Erweiterte DI-Nummer für das Signal "Lichtbogenzündung erfolgreich".
4 * @return Fehlercode.
5 */
6errno_t SetArcDoneExtDiNum(int DINum);

14.42. Erweiterter I/O - Bereitschaftssignal für Schweißgerät konfigurieren

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

1/**
2 * @brief Konfiguriert den erweiterten DI-Port für das Bereitschaftssignal des Schweißgeräts.
3 * @param [in] DINum Erweiterte DI-Nummer für das Bereitschaftssignal.
4 * @return Fehlercode.
5 */
6errno_t SetWeldReadyExtDiNum(int DINum);

14.43. Erweiterte I/O - Signale für Wiederaufnahme/Abruch nach Schweißunterbrechung konfigurieren

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

1/**
2 * @brief Konfiguriert die erweiterten DI-Ports für die Signale "Wiederaufnahme nach Unterbrechung" und "Abbruch nach Unterbrechung".
3 * @param [in] reWeldDINum Erweiterte DI-Nummer für das Signal "Wiederaufnahme nach Unterbrechung".
4 * @param [in] abortWeldDINum Erweiterte DI-Nummer für das Signal "Abbruch nach Unterbrechung".
5 * @return Fehlercode.
6 */
7errno_t SetExtDIWeldBreakOffRecover(int reWeldDINum, int abortWeldDINum);

14.44. Codebeispiel zum Konfigurieren erweiterter I/O-Schweißsignale

 1int TestExtDIConfig(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.SetArcStartExtDoNum(10);
14  robot.SetAirControlExtDoNum(20);
15  robot.SetWireForwardFeedExtDoNum(30);
16  robot.SetWireReverseFeedExtDoNum(40);
17  robot.SetWeldReadyExtDiNum(50);
18  robot.SetArcDoneExtDiNum(60);
19  robot.SetExtDIWeldBreakOffRecover(70, 80);
20  robot.SetWireSearchExtDIONum(0, 1);
21  robot.CloseRPC();
22  return 0;
23}

14.45. Lichtbogen-Tracking-Steuerung

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

 1  /**
 2  * @brief Steuert das Lichtbogen-Tracking.
 3  * @param  [in] flag Schalter, 0-aus; 1-ein.
 4  * @param  [in] delaytime Verzögerungszeit, Einheit ms.
 5  * @param  [in] isLeftRight Links/Rechts-Abweichungskompensation aktivieren.
 6  * @param  [in] klr Links/Rechts-Einstellkoeffizient (Empfindlichkeit).
 7  * @param  [in] tStartLr Startzeit für Links/Rechts-Kompensation (cyc).
 8  * @param  [in] stepMaxLr Maximale Kompensation pro Schritt links/rechts (mm).
 9  * @param  [in] sumMaxLr Maximale Gesamtkompensation links/rechts (mm).
10  * @param  [in] isUpLow Oben/Unten-Abweichungskompensation aktivieren.
11  * @param  [in] kud Oben/Unten-Einstellkoeffizient (Empfindlichkeit).
12  * @param  [in] tStartUd Startzeit für Oben/Unten-Kompensation (cyc).
13  * @param  [in] stepMaxUd Maximale Kompensation pro Schritt oben/unten (mm).
14  * @param  [in] sumMaxUd Maximale Gesamtkompensation oben/unten (mm).
15  * @param  [in] axisSelect Koordinatensystem für oben/unten, 0-Pendel; 1-Werkzeug; 2-Basis.
16  * @param  [in] referenceType Einstellungsart für oben/unten-Referenzstrom, 0-Rückmeldung; 1-Konstante.
17  * @param  [in] referSampleStartUd Startzähler für Abtastung des oben/unten-Referenzstroms (bei Rückmeldung) (cyc).
18  * @param  [in] referSampleCountUd Zyklenzahl für Abtastung des oben/unten-Referenzstroms (bei Rückmeldung) (cyc).
19  * @param  [in] referenceCurrent Oben/unten-Referenzstrom (mA).
20  * @param  [in] offsetType Versatz-Tracking-Typ, 0-kein Versatz; 1-Abtastung; 2-Prozentsatz.
21  * @param  [in] offsetParameter Versatzparameter; Abtastung (Startzeit der Versatzabtastung, Standard eine Abtastperiode); Prozentsatz (Versatzprozentsatz (-100 ~ 100)).
22  * @return  Fehlercode.
23  */
24 errno_t ArcWeldTraceControl(int flag, double delaytime, int isLeftRight, double klr, double tStartLr, double stepMaxLr, double sumMaxLr, int isUpLow, double kud, double tStartUd, double stepMaxUd, double sumMaxUd, int axisSelect, int referenceType, double referSampleStartUd, double referSampleCountUd, double referenceCurrent, int offsetType = 0, int offsetParameter = 0);

14.46. Eingangssignalport für Lichtbogen-Tracking einstellen

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

1 /**
2  * @brief Stellt den erweiterten AI-Kanal für das Lichtbogen-Tracking-Eingangssignal ein.
3  * @param  [in] channel Auswahl des AI-Kanals für das Lichtbogen-Tracking, [0-3].
4  * @return Fehlercode.
5  */
6 errno_t ArcWeldTraceExtAIChannelConfig(int channel);

14.47. Lichtbogen-Tracking + Mehrlagenschweiß-Kompensation starten

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

1/**
2* @brief Startet Lichtbogen-Tracking mit Kompensation für Mehrlagenschweißen.
3* @return Fehlercode.
4*/
5errno_t ArcWeldTraceReplayStart();

14.48. Lichtbogen-Tracking + Mehrlagenschweiß-Kompensation beenden

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

1/**
2* @brief Beendet Lichtbogen-Tracking mit Kompensation für Mehrlagenschweißen.
3* @return Fehlercode.
4*/
5errno_t ArcWeldTraceReplayEnd();

14.49. Koordinatentransformation für Mehrlagenschweiß-Versatz

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

 1/**
 2* @brief Führt eine Koordinatentransformation für den Versatz beim Mehrlagenschweißen durch.
 3* @param [in] pointO Ursprungspunkt O.
 4* @param [in] pointX Punkt auf der X-Achse.
 5* @param [in] pointZ Punkt auf der Z-Achse.
 6* @param [in] dx Versatz in x-Richtung.
 7* @param [in] dy Versatz in y-Richtung.
 8* @param [in] db Versatz in ?-Richtung (wahrscheinlich z).
 9* @param [out] offset Resultierender Posenversatz.
10* @return Fehlercode.
11*/
12errno_t MultilayerOffsetTrsfToBase(DescTran pointO, DescTran pointX, DescTran pointZ, double dx, double dy, double db, DescPose& offset);

14.50. Codebeispiel für Lichtbogen-Tracking mit Mehrlagenschweißen

  1int TestArcWeldTrace(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  JointPos mulitilineorigin1_joint(-24.090, -63.501, 84.288, -111.940, -93.426, 57.669);
 14  DescPose mulitilineorigin1_desc(-677.559, 190.951, -1.205, 1.144, -41.482, -82.577);
 15  DescTran mulitilineX1_desc;
 16  mulitilineX1_desc.x = -677.556;
 17  mulitilineX1_desc.y = 211.949;
 18  mulitilineX1_desc.z = -1.206;
 19  DescTran mulitilineZ1_desc;
 20  mulitilineZ1_desc.x = -677.564;
 21  mulitilineZ1_desc.y = 190.956;
 22  mulitilineZ1_desc.z = 19.817;
 23  JointPos mulitilinesafe_joint(-25.734, -63.778, 81.502, -108.975, -93.392, 56.021);
 24  DescPose mulitilinesafe_desc(-677.561, 211.950, 19.812, 1.144, -41.482, -82.577);
 25  JointPos mulitilineorigin2_joint(-29.743, -75.623, 101.241, -116.354, -94.928, 55.735);
 26  DescPose mulitilineorigin2_desc(-563.961, 215.359, -0.681, 2.845, -40.476, -87.443);
 27  DescTran mulitilineX2_desc;
 28  mulitilineX2_desc.x = -563.965;
 29  mulitilineX2_desc.y = 220.355;
 30  mulitilineX2_desc.z = -0.680;
 31  DescTran mulitilineZ2_desc;
 32  mulitilineZ2_desc.x = -563.968;
 33  mulitilineZ2_desc.y = 215.362;
 34  mulitilineZ2_desc.z = 4.331;
 35  ExaxisPos epos(0, 0, 0, 0);
 36  DescPose offset(0, 0, 0, 0, 0, 0);
 37  robot.Sleep(10);
 38  int error = robot.MoveJ(&mulitilinesafe_joint, &mulitilinesafe_desc, 13, 0, 10, 100, 100, &epos, -1, 0, &offset);
 39  printf("MoveJ return: %d\n", error);
 40  error = robot.MoveL(&mulitilineorigin1_joint, &mulitilineorigin1_desc, 13, 0, 10, 100, 100, -1, &epos, 0, 0, &offset, 0, 100);
 41  printf("MoveL return: %d\n", error);
 42  error = robot.MoveJ(&mulitilinesafe_joint, &mulitilinesafe_desc, 13, 0, 10, 100, 100, &epos, -1, 0, &offset);
 43  printf("MoveJ return: %d\n", error);
 44  error = robot.MoveL(&mulitilineorigin2_joint, &mulitilineorigin2_desc, 13, 0, 10, 100, 100, -1, &epos, 0, 0, &offset, 0, 100);
 45  printf("MoveL return: %d\n", error);
 46  error = robot.MoveJ(&mulitilinesafe_joint, &mulitilinesafe_desc, 13, 0, 10, 100, 100, &epos, -1, 0, &offset);
 47  printf("MoveJ return: %d\n", error);
 48  error = robot.MoveL(&mulitilineorigin1_joint, &mulitilineorigin1_desc, 13, 0, 10, 100, 100, -1, &epos, 0, 0, &offset, 0, 100);
 49  printf("MoveL return: %d\n", error);
 50  error = robot.ARCStart(1, 0, 3000);
 51  printf("ARCStart return: %d\n", error);
 52  error = robot.WeaveStart(0);
 53  printf("WeaveStart return: %d\n", error);
 54  error = robot.ArcWeldTraceControl(1, 0, 1, 0.06, 5, 5, 50, 1, 0.06, 5, 5, 55, 0, 0, 4, 1, 10);
 55  printf("ArcWeldTraceControl return: %d\n", error);
 56  error = robot.MoveL(&mulitilineorigin2_joint, &mulitilineorigin2_desc, 13, 0, 1, 100, 100, -1, &epos, 0, 0, &offset, 0, 100);
 57  printf("MoveL return: %d\n", error);
 58  error = robot.ArcWeldTraceControl(0, 0, 1, 0.06, 5, 5, 50, 1, 0.06, 5, 5, 55, 0, 0, 4, 1, 10);
 59  printf("ArcWeldTraceControl return: %d\n", error);
 60  error = robot.WeaveEnd(0);
 61  printf("WeaveEnd return: %d\n", error);
 62  error = robot.ARCEnd(1, 0, 10000);
 63  printf("ARCEnd return: %d\n", error);
 64  error = robot.MoveJ(&mulitilinesafe_joint, &mulitilinesafe_desc, 13, 0, 10, 100, 100, &epos, -1, 0, &offset);
 65  printf("MoveJ return: %d\n", error);
 66  error = robot.MultilayerOffsetTrsfToBase(mulitilineorigin1_desc.tran, mulitilineX1_desc, mulitilineZ1_desc, 10.0, 0.0, 0.0, offset);
 67  printf("MultilayerOffsetTrsfToBase return: %d offect is %f %f %f \n", error, offset.tran.x, offset.tran.y, offset.tran.z);
 68  error = robot.MoveL(&mulitilineorigin1_joint, &mulitilineorigin1_desc, 13, 0, 10, 100, 100, -1, &epos, 0, 1, &offset, 0, 100);
 69  printf("MoveL return: %d\n", error);
 70  error = robot.ARCStart(1, 0, 3000);
 71  printf("ARCStart return: %d\n", error);
 72  error = robot.MultilayerOffsetTrsfToBase(mulitilineorigin2_desc.tran, mulitilineX2_desc, mulitilineZ2_desc, 10, 0, 0, offset);
 73  printf("MultilayerOffsetTrsfToBase return: %d offect is %f %f %f \n", error, offset.tran.x, offset.tran.y, offset.tran.z);
 74  error = robot.ArcWeldTraceReplayStart();
 75  printf("ArcWeldTraceReplayStart return: %d\n", error);
 76  error = robot.MoveL(&mulitilineorigin2_joint, &mulitilineorigin2_desc, 13, 0, 2, 100, 100, -1, &epos, 0, 1, &offset, 0, 100);
 77  printf("MoveL return: %d\n", error);
 78  error = robot.ArcWeldTraceReplayEnd();
 79  printf("ArcWeldTraceReplayEnd return: %d\n", error);
 80  error = robot.ARCEnd(1, 0, 10000);
 81  printf("ARCEnd return: %d\n", error);
 82  error = robot.MoveJ(&mulitilinesafe_joint, &mulitilinesafe_desc, 13, 0, 10, 100, 100, &epos, -1, 0, &offset);
 83  printf("MoveJ return: %d\n", error);
 84  error = robot.MultilayerOffsetTrsfToBase(mulitilineorigin1_desc.tran, mulitilineX1_desc, mulitilineZ1_desc, 0, 10, 0, offset);
 85  printf("MultilayerOffsetTrsfToBase return: %d offect is %f %f %f \n", error, offset.tran.x, offset.tran.y, offset.tran.z);
 86  error = robot.MoveL(&mulitilineorigin1_joint, &mulitilineorigin1_desc, 13, 0, 10, 100, 100, -1, &epos, 0, 1, &offset, 0, 100);
 87  printf("MoveL return: %d\n", error);
 88  error = robot.ARCStart(1, 0, 3000);
 89  printf("ARCStart return: %d\n", error);
 90  error = robot.MultilayerOffsetTrsfToBase(mulitilineorigin2_desc.tran, mulitilineX2_desc, mulitilineZ2_desc, 0, 10, 0, offset);
 91  printf("MultilayerOffsetTrsfToBase return: %d offect is %f %f %f \n", error, offset.tran.x, offset.tran.y, offset.tran.z);
 92  error = robot.ArcWeldTraceReplayStart();
 93  printf("MoveJ return: %d\n", error);
 94  error = robot.MoveL(&mulitilineorigin2_joint, &mulitilineorigin2_desc, 13, 0, 2, 100, 100, -1, &epos, 0, 1, &offset, 0, 100);
 95  printf("MoveL return: %d\n", error);
 96  error = robot.ArcWeldTraceReplayEnd();
 97  printf("ArcWeldTraceReplayEnd return: %d\n", error);
 98  error = robot.ARCEnd(1, 0, 3000);
 99  printf("ARCEnd return: %d\n", error);
100  error = robot.MoveJ(&mulitilinesafe_joint, &mulitilinesafe_desc, 13, 0, 10, 100, 100, &epos, -1, 0, &offset);
101  printf("MoveJ return: %d\n", error);
102  robot.CloseRPC();
103  return 0;
104}

14.51. Auswahl des AI-Kanals für die Schweißstromrückmeldung beim Lichtbogen-Tracking

1/**
2 * @brief Wählt den AI-Kanal für die Schweißstromrückmeldung beim Lichtbogen-Tracking aus.
3 * @param [in] channel Kanal; 0-Erweiterungs-AI0; 1-Erweiterungs-AI1; 2-Erweiterungs-AI2; 3-Erweiterungs-AI3; 4-Steuerschrank-AI0; 5-Steuerschrank-AI1.
4 * @return Fehlercode.
5 */
6 errno_t ArcWeldTraceAIChannelCurrent(int channel);

14.52. Auswahl des AI-Kanals für die Schweißspannungsrückmeldung beim Lichtbogen-Tracking

1/**
2 * @brief Wählt den AI-Kanal für die Schweißspannungsrückmeldung beim Lichtbogen-Tracking aus.
3 * @param [in] channel Kanal; 0-Erweiterungs-AI0; 1-Erweiterungs-AI1; 2-Erweiterungs-AI2; 3-Erweiterungs-AI3; 4-Steuerschrank-AI0; 5-Steuerschrank-AI1.
4 * @return Fehlercode.
5 */
6 errno_t ArcWeldTraceAIChannelVoltage(int channel);

14.53. Umrechnungsparameter für die Schweißstromrückmeldung beim Lichtbogen-Tracking

1 /**
2  * @brief Stellt die Umrechnungsparameter für die Schweißstromrückmeldung beim Lichtbogen-Tracking ein.
3  * @param [in] AILow Untere Grenze des AI-Kanals, Standard 0 V, Bereich [0-10 V].
4  * @param [in] AIHigh Obere Grenze des AI-Kanals, Standard 10 V, Bereich [0-10 V].
5  * @param [in] currentLow Schweißstromwert entsprechend der unteren AI-Grenze, Standard 0 A, Bereich [0-200 A].
6  * @param [in] currentHigh Schweißstromwert entsprechend der oberen AI-Grenze, Standard 100 A, Bereich [0-200 A].
7  * @return Fehlercode.
8  */
9 errno_t ArcWeldTraceCurrentPara(float AILow, float AIHigh, float currentLow, float currentHigh);

14.54. Umrechnungsparameter für die Schweißspannungsrückmeldung beim Lichtbogen-Tracking

1 /**
2  * @brief Stellt die Umrechnungsparameter für die Schweißspannungsrückmeldung beim Lichtbogen-Tracking ein.
3  * @param [in] AILow Untere Grenze des AI-Kanals, Standard 0 V, Bereich [0-10 V].
4  * @param [in] AIHigh Obere Grenze des AI-Kanals, Standard 10 V, Bereich [0-10 V].
5  * @param [in] voltageLow Schweißspannungswert entsprechend der unteren AI-Grenze, Standard 0 V, Bereich [0-200 V].
6  * @param [in] voltageHigh Schweißspannungswert entsprechend der oberen AI-Grenze, Standard 100 V, Bereich [0-200 V].
7  * @return Fehlercode.
8  */
9  errno_t ArcWeldTraceVoltagePara(float AILow, float AIHigh, float voltageLow, float voltageHigh);

14.55. Codebeispiel für Lichtbogen-Tracking

 1int WeldTraceControlWithCtrlBoxAI(FRRobot* robot)
 2{
 3  DescPose startdescPose = { -473.86, 257.879, -20.849, -37.317, -42.021, 2.543 };
 4  JointPos startjointPos = { -43.487, -76.526, 95.568, -104.445, -89.356, 3.72 };
 5
 6  DescPose enddescPose = { -499.844, 141.225, 7.72, -34.856, -40.17, 13.13 };
 7  JointPos endjointPos = { -31.305, -82.998, 99.401, -104.426, -89.35, 3.696 };
 8
 9  DescPose safedescPose = { -504.043, 275.181, 40.908, -28.002, -42.025, -14.044 };
10  JointPos safejointPos = { -39.078, -76.732, 87.227, -99.47, -94.301, 18.714 };
11
12  ExaxisPos exaxisPos = { 0, 0, 0, 0 };
13  DescPose offdese = { 0, 0, 0, 0, 0, 0 };
14
15  robot->WeldingSetCurrentRelation(0, 495, 1, 10);
16  robot->WeldingSetVoltageRelation(10, 45, 1, 10);
17
18  robot->WeldingSetVoltage(0, 25, 1, 0);// ----Spannung einstellen
19  robot->WeldingSetCurrent(0, 260, 0, 0);// ----Strom einstellen
20
21  int rtn = robot->ArcWeldTraceAIChannelCurrent(4);
22  cout << "ArcWeldTraceAIChannelCurrent rtn is " << rtn << endl;
23  rtn = robot->ArcWeldTraceAIChannelVoltage(5);
24  cout << "ArcWeldTraceAIChannelVoltage rtn is " << rtn << endl;
25  rtn = robot->ArcWeldTraceCurrentPara(0, 5, 0, 500);
26  cout << "ArcWeldTraceCurrentPara rtn is " << rtn << endl;
27  rtn = robot->ArcWeldTraceVoltagePara(1.018, 10, 0, 50);
28  cout << "ArcWeldTraceVoltagePara rtn is " << rtn << endl;
29  robot->MoveJ(&safejointPos, &safedescPose, 1, 0, 5, 100, 100, &exaxisPos, -1, 0, &offdese);
30  robot->MoveJ(&startjointPos, &startdescPose, 1, 0, 5, 100, 100, &exaxisPos, -1, 0, &offdese);
31  rtn = robot->ArcWeldTraceControl(1, 0, 1, 0.08, 5, 5, 300, 1, 0.06, 4, 4, 300, 1, 0, 4, 1, 10, 0, 0);
32  cout << "ArcWeldTraceControl rtn is " << rtn << endl;
33  robot->ARCStart(0, 0, 10000);
34  robot->WeaveStart(0);
35  robot->MoveL(&endjointPos, &enddescPose, 1, 0, 100, 100, 2, -1, &exaxisPos, 0, 0, &offdese);
36  robot->ARCEnd(0, 0, 10000);
37  robot->WeaveEnd(0);
38  robot->ArcWeldTraceControl(0, 0, 1, 0.08, 5, 5, 300, 1, 0.06, 4, 4, 300, 1, 0, 4, 1, 10, 0, 0);
39  return 0;
40}

14.56. Erweiterte I/O-Ports für die Schweißdraht-Positionssuche einstellen

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

1/**
2* @brief Stellt die erweiterten I/O-Ports für die Schweißdraht-Positionssuche ein.
3* @param searchDoneDINum Erweiterter DI-Port für "Positionssuche erfolgreich" (0-127).
4* @param searchStartDONum Erweiterter DO-Port für Start/Stopp der Positionssuche (0-127).
5* @return Fehlercode.
6*/
7errno_t SetWireSearchExtDIONum(int searchDoneDINum, int searchStartDONum);

14.57. Beispielprogramm für Schweißdraht-Positionssuche (UDP)

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

 1void TestUDPWireSearch(FRRobot* robot)
 2{
 3robot->ExtDevSetUDPComParam("192.168.58.88", 2021, 2, 50, 5, 50, 1, 50, 10);
 4robot->ExtDevLoadUDPDriver();
 5
 6robot->SetWireSearchExtDIONum(0, 0);
 7
 8int rtn0, rtn1, rtn2 = 0;
 9ExaxisPos exaxisPos = { 0.0, 0.0, 0.0, 0.0 };
10DescPose offdese = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
11
12DescPose descStart = { -158.767, -510.596, 271.709, -179.427, -0.745, -137.349 };
13JointPos jointStart = { 61.667, -79.848, 108.639, -119.682, -89.700, -70.985 };
14
15DescPose descEnd = { 0.332, -516.427, 270.688, 178.165, 0.017, -119.989 };
16JointPos jointEnd = { 79.021, -81.839, 110.752, -118.298, -91.729, -70.981 };
17
18robot->MoveL(&jointStart, &descStart, 1, 0, 100, 100, 100, -1, &exaxisPos, 0, 0, &offdese);
19robot->MoveL(&jointEnd, &descEnd, 1, 0, 100, 100, 100, -1, &exaxisPos, 0, 0, &offdese);
20
21DescPose descREF0A = { -66.106, -560.746, 270.381, 176.479, -0.126, -126.745 };
22JointPos jointREF0A = { 73.531, -75.588, 102.941, -116.250, -93.347, -69.689 };
23
24DescPose descREF0B = { -66.109, -528.440, 270.407, 176.479, -0.129, -126.744 };
25JointPos jointREF0B = { 72.534, -79.625, 108.046, -117.379, -93.366, -70.687 };
26
27DescPose descREF1A = { 72.975, -473.242, 270.399, 176.479, -0.129, -126.744 };
28JointPos jointREF1A = { 87.169, -86.509, 115.710, -117.341, -92.993, -56.034 };
29
30DescPose descREF1B = { 31.355, -473.238, 270.405, 176.480, -0.130, -126.745 };
31JointPos jointREF1B = { 82.117, -87.146, 116.470, -117.737, -93.145, -61.090 };
32
33rtn0 = robot->WireSearchStart(0, 10, 100, 0, 10, 100, 0);
34robot->MoveL(&jointREF0A, &descREF0A, 1, 0, 100, 100, 100, -1, &exaxisPos, 0, 0, &offdese); //起点
35robot->MoveL(&jointREF0B, &descREF0B, 1, 0, 10, 100, 100, -1, &exaxisPos, 1, 0, &offdese); //方向点
36rtn1 = robot->WireSearchWait("REF0");
37rtn2 = robot->WireSearchEnd(0, 10, 100, 0, 10, 100, 0);
38
39rtn0 = robot->WireSearchStart(0, 10, 100, 0, 10, 100, 0);
40robot->MoveL(&jointREF1A, &descREF1A, 1, 0, 100, 100, 100, -1, &exaxisPos, 0, 0, &offdese); //起点
41robot->MoveL(&jointREF1B, &descREF1B, 1, 0, 10, 100, 100, -1, &exaxisPos, 1, 0, &offdese); //方向点
42rtn1 = robot->WireSearchWait("REF1");
43rtn2 = robot->WireSearchEnd(0, 10, 100, 0, 10, 100, 0);
44
45rtn0 = robot->WireSearchStart(0, 10, 100, 0, 10, 100, 0);
46robot->MoveL(&jointREF0A, &descREF0A, 1, 0, 100, 100, 100, -1, &exaxisPos, 0, 0, &offdese); //起点
47robot->MoveL(&jointREF0B, &descREF0B, 1, 0, 10, 100, 100, -1, &exaxisPos, 1, 0, &offdese); //方向点
48rtn1 = robot->WireSearchWait("RES0");
49rtn2 = robot->WireSearchEnd(0, 10, 100, 0, 10, 100, 0);
50
51rtn0 = robot->WireSearchStart(0, 10, 100, 0, 10, 100, 0);
52robot->MoveL(&jointREF1A, &descREF1A, 1, 0, 100, 100, 100, -1, &exaxisPos, 0, 0, &offdese); //起点
53robot->MoveL(&jointREF1B, &descREF1B, 1, 0, 10, 100, 100, -1, &exaxisPos, 1, 0, &offdese); //方向点
54rtn1 = robot->WireSearchWait("RES1");
55rtn2 = robot->WireSearchEnd(0, 10, 100, 0, 10, 100, 0);
56
57vector <string> varNameRef = { "REF0", "REF1", "#", "#", "#", "#" };
58vector <string> varNameRes = { "RES0", "RES1", "#", "#", "#", "#" };
59int offectFlag = 0;
60DescPose offectPos = { 0, 0, 0, 0, 0, 0 };
61rtn0 = robot->GetWireSearchOffset(0, 0, varNameRef, varNameRes, offectFlag, offectPos);
62robot->PointsOffsetEnable(0, &offectPos);
63robot->MoveL(&jointStart, &descStart, 1, 0, 100, 100, 100, -1, &exaxisPos, 0, 0, &offdese);
64robot->MoveL(&jointEnd, &descEnd, 1, 0, 100, 100, 100, -1, &exaxisPos, 0, 0, &offdese);
65robot->PointsOffsetDisable();
66}

14.58. Schweißdraht-Positionssuche starten

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

 1/**
 2* @brief Startet die Schweißdraht-Positionssuche.
 3* @param  [in] refPos  1-Referenzpunkt; 0-Kontaktpunkt.
 4* @param  [in] searchVel   Suchgeschwindigkeit (%).
 5* @param  [in] searchDis  Suchstrecke (mm).
 6* @param  [in] autoBackFlag Automatische Rückkehr-Flag, 0-nicht automatisch; 1-automatisch.
 7* @param  [in] autoBackVel  Automatische Rückkehrgeschwindigkeit (%).
 8* @param  [in] autoBackDis  Automatische Rückkehrstrecke (mm).
 9* @param  [in] offectFlag  1-Positionssuche mit Versatz; 0-Positionssuche mit Teachpunkten.
10* @return Fehlercode.
11*/
12 errno_t WireSearchStart(int refPos, float searchVel, int searchDis, int autoBackFlag, float autoBackVel, int autoBackDis, int offectFlag);

14.59. Schweißdraht-Positionssuche beenden

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

 1 /**
 2  * @brief Beendet die Schweißdraht-Positionssuche.
 3  * @param  [in] refPos  1-Referenzpunkt; 2-Kontaktpunkt.
 4  * @param  [in] searchVel   Suchgeschwindigkeit (%).
 5  * @param  [in] searchDis  Suchstrecke (mm).
 6  * @param  [in] autoBackFlag Automatische Rückkehr-Flag, 0-nicht automatisch; 1-automatisch.
 7  * @param  [in] autoBackVel  Automatische Rückkehrgeschwindigkeit (%).
 8  * @param  [in] autoBackDis  Automatische Rückkehrstrecke (mm).
 9  * @param  [in] offectFlag  1-Positionssuche mit Versatz; 2-Positionssuche mit Teachpunkten.
10  * @return Fehlercode.
11  */
12 errno_t WireSearchEnd(int refPos, float searchVel, int searchDis, int autoBackFlag, float autoBackVel, int autoBackDis, int offectFlag);

14.60. Versatz aus Schweißdraht-Positionssuche berechnen

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

 1 /**
 2  * @brief Berechnet den Versatz aus der Schweißdraht-Positionssuche.
 3  * @param  [in] seamType  Nahttyp.
 4  * @param  [in] method   Berechnungsmethode.
 5  * @param  [in] varNameRef Array der Referenzpunktnamen 1-6, "#" für nicht verwendete Punkte.
 6  * @param  [in] varNameRes Array der Kontaktpunktnamen 1-6, "#" für nicht verwendete Punkte.
 7  * @param  [out] offectFlag 0-Versatz direkt zum Befehlspunkt addieren; 1-Versatz erfordert Koordinatentransformation des Befehlspunkts.
 8  * @param  [out] offect Versatzpose [x, y, z, a, b, c].
 9  * @return Fehlercode.
10  */
11 errno_t GetWireSearchOffset(int seamType, int method, std::vector<std::string> varNameRef, std::vector<std::string> varNameRes, int& offectFlag, DescPose& offect);

14.61. Auf Abschluss der Schweißdraht-Positionssuche warten

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

1 /**
2  * @brief Wartet auf den Abschluss der Schweißdraht-Positionssuche.
3  * @param [in] varName Name der Variable, die das Ergebnis speichern soll? (z.B. "REF0")
4  * @return Fehlercode.
5  */
6 errno_t WireSearchWait(std::string varName);

14.62. Kontaktpunkt der Schweißdraht-Positionssuche in Datenbank schreiben

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

1 /**
2  * @brief Schreibt einen Kontaktpunkt der Schweißdraht-Positionssuche in die Datenbank.
3  * @param  [in] varName  Kontaktpunktname "RES0" ~ "RES99".
4  * @param  [in] pos  Kontaktpunktdaten [x, y, z, a, b, c].
5  * @return Fehlercode.
6  */
7 errno_t SetPointToDatabase(std::string varName, DescPose pos);

14.63. Codebeispiel für robotergestützte Schweißdraht-Positionssuche

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

 1int TestWireSearch(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  DescPose toolCoord(0, 0, 200, 0, 0, 0);
14  robot.SetToolCoord(1, &toolCoord, 0, 0, 1, 0);
15  DescPose wobjCoord(0, 0, 0, 0, 0, 0);
16  robot.SetWObjCoord(1, &wobjCoord, 0);
17  int rtn0, rtn1, rtn2 = 0;
18  ExaxisPos exaxisPos = { 0, 0, 0, 0 };
19  DescPose offdese = { 0, 0, 0, 0, 0, 0 };
20  DescPose descStart = { 216.543, 445.175, 93.465, 179.683, 1.757, -112.641 };
21  JointPos jointStart = { -128.345, -86.660, 114.679, -119.625, -89.219, 74.303 };
22  DescPose descEnd = { 111.143, 523.384, 87.659, 179.703, 1.835, -97.750 };
23  JointPos jointEnd = { -113.454, -81.060, 109.328, -119.954, -89.218, 74.302 };
24  robot.MoveL(&jointStart, &descStart, 1, 1, 100, 100, 100, -1, &exaxisPos, 0, 0, &offdese);
25  robot.MoveL(&jointEnd, &descEnd, 1, 1, 100, 100, 100, -1, &exaxisPos, 0, 0, &offdese);
26  DescPose descREF0A = { 142.135, 367.604, 86.523, 179.728, 1.922, -111.089 };
27  JointPos jointREF0A = { -126.794, -100.834, 128.922, -119.864, -89.218, 74.302 };
28  DescPose descREF0B = { 254.633, 463.125, 72.604, 179.845, 2.341, -114.704 };
29  JointPos jointREF0B = { -130.413, -81.093, 112.044, -123.163, -89.217, 74.303 };
30  DescPose descREF1A = { 92.556, 485.259, 47.476, -179.932, 3.130, -97.512 };
31  JointPos jointREF1A = { -113.231, -83.815, 119.877, -129.092, -89.217, 74.303 };
32  DescPose descREF1B = { 203.103, 583.836, 63.909, 179.991, 2.854, -103.372 };
33  JointPos jointREF1B = { -119.088, -69.676, 98.692, -121.761, -89.219, 74.303 };
34  rtn0 = robot.WireSearchStart(0, 10, 100, 0, 10, 100, 0);
35  robot.MoveL(&jointREF0A, &descREF0A, 1, 1, 100, 100, 100, -1, &exaxisPos, 0, 0, &offdese); //起点
36  robot.MoveL(&jointREF0B, &descREF0B, 1, 1, 100, 100, 100, -1, &exaxisPos, 1, 0, &offdese); //方向点
37  rtn1 = robot.WireSearchWait("REF0");
38  rtn2 = robot.WireSearchEnd(0, 10, 100, 0, 10, 100, 0);
39  rtn0 = robot.WireSearchStart(0, 10, 100, 0, 10, 100, 0);
40  robot.MoveL(&jointREF1A, &descREF1A, 1, 1, 100, 100, 100, -1, &exaxisPos, 0, 0, &offdese); //起点
41  robot.MoveL(&jointREF1B, &descREF1B, 1, 1, 100, 100, 100, -1, &exaxisPos, 1, 0, &offdese); //方向点
42  rtn1 = robot.WireSearchWait("REF1");
43  rtn2 = robot.WireSearchEnd(0, 10, 100, 0, 10, 100, 0);
44  rtn0 = robot.WireSearchStart(0, 10, 100, 0, 10, 100, 0);
45  robot.MoveL(&jointREF0A, &descREF0A, 1, 1, 100, 100, 100, -1, &exaxisPos, 0, 0, &offdese); //起点
46  robot.MoveL(&jointREF0B, &descREF0B, 1, 1, 100, 100, 100, -1, &exaxisPos, 1, 0, &offdese); //方向点
47  rtn1 = robot.WireSearchWait("RES0");
48  rtn2 = robot.WireSearchEnd(0, 10, 100, 0, 10, 100, 0);
49  rtn0 = robot.WireSearchStart(0, 10, 100, 0, 10, 100, 0);
50  robot.MoveL(&jointREF1A, &descREF1A, 1, 1, 100, 100, 100, -1, &exaxisPos, 0, 0, &offdese); //起点
51  robot.MoveL(&jointREF1B, &descREF1B, 1, 1, 100, 100, 100, -1, &exaxisPos, 1, 0, &offdese); //方向点
52  rtn1 = robot.WireSearchWait("RES1");
53  rtn2 = robot.WireSearchEnd(0, 10, 100, 0, 10, 100, 0);
54  vector <string> varNameRef = { "REF0", "REF1", "#", "#", "#", "#" };
55  vector <string> varNameRes = { "RES0", "RES1", "#", "#", "#", "#" };
56  int offectFlag = 0;
57  DescPose offectPos = { 0, 0, 0, 0, 0, 0 };
58  rtn0 = robot.GetWireSearchOffset(0, 0, varNameRef, varNameRes, offectFlag, offectPos);
59  robot.PointsOffsetEnable(0, &offectPos);
60  robot.MoveL(&jointStart, &descStart, 1, 1, 100, 100, 100, -1, &exaxisPos, 0, 0, &offdese);
61  robot.MoveL(&jointEnd, &descEnd, 1, 1, 100, 100, 100, -1, &exaxisPos, 1, 0, &offdese);
62  robot.PointsOffsetDisable();
63  robot.CloseRPC();
64  return 0;
65}

14.64. Schweißspannungs-Gradienten starten

 1 /**
 2  * @brief Startet den Schweißspannungs-Gradienten.
 3  * @param [in] IOType Steuerungstyp; 0-Steuerschrank I/O; 1-UDP; 2-ModbusTCP.
 4  * @param [in] voltageStart Start-Schweißspannung (V).
 5  * @param [in] voltageEnd End-Schweißspannung (V).
 6  * @param [in] AOIndex AO-Port des Steuerschranks (0-1).
 7  * @param [in] blend Glättung 0-nicht glätten; 1-glätten.
 8  * @return Fehlercode.
 9  */
10  errno_t WeldingSetVoltageGradualChangeStart(int IOType, double voltageStart, double voltageEnd, int AOIndex, int blend);

14.65. Schweißspannungs-Gradienten beenden

1 /**
2  * @brief Beendet den Schweißspannungs-Gradienten.
3  * @return Fehlercode.
4  */
5 errno_t WeldingSetVoltageGradualChangeEnd();

14.66. Schweißstrom-Gradienten starten

 1 /**
 2  * @brief Startet den Schweißstrom-Gradienten.
 3  * @param [in] IOType Steuerungstyp; 0-Steuerschrank I/O; 1-UDP; 2-ModbusTCP.
 4  * @param [in] currentStart Start-Schweißstrom (A).
 5  * @param [in] currentEnd End-Schweißstrom (A).
 6  * @param [in] AOIndex AO-Port des Steuerschranks (0-1).
 7  * @param [in] blend Glättung 0-nicht glätten; 1-glätten.
 8  * @return Fehlercode.
 9  */
10 errno_t WeldingSetCurrentGradualChangeStart(int IOType, double currentStart, double currentEnd, int AOIndex, int blend);

14.67. Schweißstrom-Gradienten beenden

1/**
2 * @brief Beendet den Schweißstrom-Gradienten.
3 * @return Fehlercode.
4 */
5errno_t WeldingSetCurrentGradualChangeEnd();

14.68. Codebeispiel für Schweißstrom-/spannungs-Gradienten

 1int WeldparamChange(FRRobot* robot)
 2{
 3  DescPose startdescPose = { -484.707, 276.996, -14.013, -37.657, -40.508, -1.548 };
 4  JointPos startjointPos = { -45.421, -75.673, 93.627, -104.302, -87.938, 6.005 };
 5
 6  DescPose enddescPose = { -508.767, 137.109, -13.966, -37.639, -40.508, -1.559 };
 7  JointPos endjointPos = { -32.768, -80.947, 100.254, -106.201, -87.201, 18.648 };
 8
 9  DescPose safedescPose = { -484.709, 294.436, 13.621, -37.660, -40.508, -1.545 };
10  JointPos safejointPos = { -46.604, -75.410, 89.109, -100.003, -88.012, 4.823 };
11  ExaxisPos exaxisPos = { 0, 0, 0, 0 };
12  DescPose offdese = { 0, 0, 0, 0, 0, 0 };
13
14  robot->WeldingSetCurrentRelation(0, 495, 1, 10, 0);
15  robot->WeldingSetVoltageRelation(10, 45, 1, 10, 1);
16  robot->MoveJ(&safejointPos, &safedescPose, 1, 0, 5, 100, 100, &exaxisPos, -1, 0, &offdese);
17  int rtn = robot->WeldingSetCurrentGradualChangeStart(0, 260, 220, 0, 0);
18  cout << "WeldingSetCurrentGradualChangeStart rtn is " << rtn << endl;
19  rtn = robot->WeldingSetVoltageGradualChangeStart(0, 25, 22, 1, 0);
20  cout << "WeldingSetVoltageGradualChangeStart rtn is " << rtn << endl;
21  rtn = robot->ArcWeldTraceControl(1, 0, 1, 0.08, 5, 5, 300, 1, 0.06, 4, 4, 300, 1, 0, 4, 1, 10, 0, 0);
22  cout << "ArcWeldTraceControl rtn is " << rtn << endl;
23  robot->MoveJ(&startjointPos, &startdescPose, 1, 0, 5, 100, 100, &exaxisPos, -1, 0, &offdese);
24
25  robot->ARCStart(0, 0, 10000);
26  robot->WeaveStart(0);
27  robot->WeaveChangeStart(2, 1, 24, 36);
28  robot->MoveL(&endjointPos, &enddescPose, 1, 0, 100, 100, 2, -1, &exaxisPos, 0, 0, &offdese);
29  robot->ARCEnd(0, 0, 10000);
30  robot->WeaveChangeEnd();
31  robot->WeaveEnd(0);
32  robot->ArcWeldTraceControl(0, 0, 1, 0.08, 5, 5, 300, 1, 0.06, 4, 4, 300, 1, 0, 4, 1, 10, 0, 0);
33  robot->WeldingSetCurrentGradualChangeEnd();
34  robot->WeldingSetVoltageGradualChangeEnd();
35  return 0;
36}

14.69. Benutzerdefinierte Pendelparameter einstellen

Neu in Version C++SDK-v3.8.6.

 1/**
 2* @brief Stellt benutzerdefinierte Pendelparameter ein.
 3* @param [in] id Benutzerdefinierte Pendelnummer: 0-2.
 4* @param [in] pointNum Anzahl der Pendelpunkte (0-10).
 5* @param [in] point Array der Bewegungspunkte (x, y, z).
 6* @param [in] stayTime Array der Verweilzeiten an den Punkten (ms).
 7* @param [in] frequency Pendelfrequenz (Hz).
 8* @param [in] incStayType Wartezeitmodus: 0-Zyklus ohne Wartezeit; 1-Zyklus mit Wartezeit.
 9* @param [in] stationary Position während Wartezeit: 0-weiterbewegen; 1-stillstehen.
10* @return Fehlercode.
11*/
12errno_t CustomWeaveSetPara(int id, int pointNum, DescTran point[10], double stayTime[10], double frequency, int incStayType, int stationary);

14.70. Benutzerdefinierte Pendelparameter abrufen

Neu in Version C++SDK-v3.8.6.

 1/**
 2* @brief Gibt benutzerdefinierte Pendelparameter zurück.
 3* @param [in] id Benutzerdefinierte Pendelnummer: 0-2.
 4* @param [out] pointNum Anzahl der Pendelpunkte (0-10).
 5* @param [out] point Array der Bewegungspunkte (x, y, z).
 6* @param [out] stayTime Array der Verweilzeiten an den Punkten (ms).
 7* @param [out] frequency Pendelfrequenz (Hz).
 8* @param [out] incStayType Wartezeitmodus: 0-Zyklus ohne Wartezeit; 1-Zyklus mit Wartezeit.
 9* @param [out] stationary Position während Wartezeit: 0-weiterbewegen; 1-stillstehen.
10* @return Fehlercode.
11*/
12errno_t CustomWeaveGetPara(int id, int& pointNum, DescTran point[10], double stayTime[10], double& frequency, int& incStayType, int& stationary);

14.71. Codebeispiel für benutzerdefinierte Pendelparameter

Neu in Version C++SDK-v3.8.6.

 1int TestCustomWeaveSetPara()
 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 0;
11  }
12  robot.SetReConnectParam(true, 30000, 500);
13  DescTran point[10] = {};
14  point[0].x = -3;
15  point[0].y = -3;
16  point[0].z = 0;
17  point[1].x = -6;
18  point[1].y = 0;
19  point[1].z = 0;
20  point[2].x = -3;
21  point[2].y = 3;
22  point[2].z = 0;
23  point[3].x = 0;
24  point[3].y = 0;
25  point[3].z = 0;
26  double stayTime[10] = { 0,0,0,0,0,0,0,0,0,0 };
27  rtn = robot.CustomWeaveSetPara(2, 4, point, stayTime, 1.000, 0, 0);
28  printf("CustomWeaveSetPara rtn is %d\n", rtn);
29  robot.Sleep(1000);
30  int pointNum = 0;
31  double frequency;
32  int incStayType;
33  int stationary;
34  robot.CustomWeaveGetPara(2, pointNum, point, stayTime, frequency, incStayType, stationary);
35  printf("pointNum is %d\n", pointNum);
36  for (int i = 0; i < pointNum; i++)
37  {
38    printf("point %d, point x y z %f %f %f\n", i, point[i].x, point[i].y, point[i].z);
39  }
40  printf("fre is %f, stay is %d %d \n", frequency, incStayType, stationary);
41  robot.WeaveSetPara(0, 9, 1.000000, 1, 5.000000, 6.000000, 5.000000, 50, 100, 100, 0, 1, 0.000000, 0.000000);
42  DescPose desc_p1 = { -288.650, 367.807, 288.404, 0.000, -0.001, 0.001 };
43  DescPose desc_p2 = { -431.714, 367.815, 288.415, 0.001, 0.001, 0.000 };
44  DescPose desc_p3 = { -348.666, 427.798, 288.404, -0.000, -0.000, 0.001 };
45  JointPos j1 = { 140.656, -84.560, -91.707, -93.734, 90.000, 50.655 };
46  JointPos j2 = { 149.873, -98.298, -77.599, -94.103, 90.000, 59.873 };
47  JointPos j3 = { 139.773, -96.173, -80.014, -93.814, 90.000, 49.772 };
48  ExaxisPos epos = {};
49  DescPose offset_pos = {};
50  robot.MoveJ(&j1, &desc_p1, 3, 0, 100, 100, 100, &epos, -1, 0, &offset_pos);
51  robot.WeaveStart(0);
52  robot.Circle(&j3, &desc_p3, 3, 0, 100, 100, &epos, &j2, &desc_p2, 3, 0, 100, 100, &epos, 10, -1, &offset_pos);
53  robot.WeaveEnd(0);
54  robot.MoveJ(&j1, &desc_p1, 3, 0, 100, 100, 100, &epos, -1, 0, &offset_pos);
55  robot.WeaveStart(0);
56  robot.MoveC(&j3, &desc_p3, 3, 0, 100, 100, &epos, 0, &offset_pos, &j2, &desc_p2, 3, 0, 100, 100, &epos, 0, &offset_pos, 10, -1);
57  robot.WeaveEnd(0);
58  robot.MoveJ(&j1, &desc_p1, 3, 0, 100, 100, 100, &epos, -1, 0, &offset_pos);
59  robot.WeaveStart(0);
60  robot.MoveL(&j2, &desc_p2, 3, 0, 100, 100, 10, -1, &epos, 0, 0, &offset_pos, 0, 100);
61  robot.WeaveEnd(0);
62  robot.CloseRPC();
63}

14.72. Konfiguration der Laserschweißgerät-Parameter

 1/**
 2* @brief Konfiguration der Laserschweißgerät-Parameter
 3* @param[in] io_type Kommunikationstyp 0-IO 1-UDP
 4* @param[in] num Gruppennummer, die eingestellt werden soll (1~10)
 5* @param[in] scanSpeed Scangeschwindigkeit
 6* @param[in] scanWidth Scanbreite
 7* @param[in] peakPower Spitzenleistung
 8* @param[in] dutyCycle Tastverhältnis
 9* @param[in] freq Frequenz
10* @return Fehlercode
11*/
12errno_t SetLaserWeldingParam(int io_type, int num, int scanSpeed, int scanWidth, int peakPower, int dutyCycle, int freq);

14.73. Laserschweißen Start/Stopp einstellen

1/**
2* @brief Laserschweißen Start/Stopp einstellen
3* @param[in] io_type Kommunikationstyp 0-IO 1-UDP
4* @param[in] status Steuerwort 0-Laser aus 1-Laser an
5* @param[in] max_waittime Maximale Wartezeit, Einheit Millisekunden, Standard 10000
6* @return Fehlercode
7*/
8errno_t SetLaserWeldingStartEnd(int io_type, int status, int max_waittime = 10000);

14.74. Laserschweißgerät aktivieren/deaktivieren

1/**
2* @brief Laserschweißgerät aktivieren/deaktivieren
3* @param[in] io_type Kommunikationstyp 0-IO 1-UDP
4* @param[in] status 0-deaktivieren 1-aktivieren
5* @return Fehlercode
6*/
7errno_t SetLaserWeldingEnable(int io_type, int status);

14.75. Laserschweißgerät-Fehler zurücksetzen

1/**
2* @brief Laserschweißgerät-Fehler zurücksetzen
3* @param[in] io_type Kommunikationstyp 0-IO 1-UDP
4* @param[in] status Steuerwort 0-ungültig 1-Fehler zurücksetzen
5* @return Fehlercode
6*/
7errno_t ResetLaserWeldingErr(int io_type, int status);

14.76. Laserschweißgerät-Betriebsstatus abrufen

1/**
2* @brief Laserschweißgerät-Betriebsstatus abrufen
3* @param[in] io_type Kommunikationstyp 0-IO 1-UDP
4* @param[out] status Steuerwort 0-gestoppt 1-läuft
5* @return Fehlercode
6*/
7errno_t GetLaserWeldingRunningState(int io_type, int& status);

14.77. Laserschweißgerät-Fehlerstatus abrufen

1/**
2* @brief Laserschweißgerät-Fehlerstatus abrufen
3* @param[in] io_type Kommunikationstyp 0-IO 1-UDP
4* @param[out] status 0-kein Fehler 1-Fehler vorhanden
5* @return Fehlercode
6*/
7errno_t GetLaserWeldingErrState(int io_type, int& status);

14.78. Konfigurierte Parameter des Laserschweißgeräts abrufen

 1/**
 2* @brief Konfigurierte Parameter des Laserschweißgeräts abrufen
 3* @param[in] num Gruppennummer, die eingestellt werden soll (1~10)
 4* @param[out] scanSpeed Scangeschwindigkeit
 5* @param[out] scanWidth Scanbreite
 6* @param[out] peakPower Spitzenleistung
 7* @param[out] dutyCycle Tastverhältnis
 8* @param[out] freq Frequenz
 9* @return Fehlercode
10*/
11errno_t GetLaserWeldingParamTarget(int num, int& scanSpeed, int& scanWidth, int& peakPower, int& dutyCycle, int& freq);

14.79. Aktuell aktive Konfigurationsparameter des Laserschweißgeräts abrufen

 1/**
 2* @brief Die aktuell aktiven Konfigurationsparameter des Laserschweißgeräts abrufen
 3* @param[in] io_type Kommunikationstyp 0-IO 1-UDP
 4* @param[out] scanSpeed Scangeschwindigkeit
 5* @param[out] scanWidth Scanbreite
 6* @param[out] peakPower Spitzenleistung
 7* @param[out] dutyCycle Tastverhältnis
 8* @param[out] freq Frequenz
 9* @return Fehlercode, 0 zeigt Erfolg an, nicht 0 zeigt Fehler an
10*/
11errno_t GetLaserWeldingParamActual(int io_type, int& scanSpeed, int& scanWidth, int& peakPower, int& dutyCycle, int& freq);

14.80. Erweiterte IO-Aktivierungs-DO-Port des Laserschweißgeräts konfigurieren

1/**
2* @brief Erweiterte IO-Aktivierungs-DO-Port des Laserschweißgeräts konfigurieren
3* @param[in] ctrlModeDONum Erweiterte DO-Portnummer für die Aktivierung des Laserschweißgeräts
4* @return Fehlercode, 0 zeigt Erfolg an, nicht 0 zeigt Fehler an
5*/
6errno_t SetLaserWeldingEnableExtDoNum(int ctrlModeDONum);

14.81. Erweiterte IO-Start-DO-Port des Laserschweißgeräts konfigurieren

1/**
2* @brief Erweiterte IO-Start-DO-Port des Laserschweißgeräts konfigurieren
3* @param[in] ctrlModeDONum Erweiterte DO-Portnummer für den Start (Laser an/aus) des Laserschweißgeräts
4* @return Fehlercode, 0 zeigt Erfolg an, nicht 0 zeigt Fehler an
5*/
6errno_t SetLaserWeldingStartExtDoNum(int ctrlModeDONum);

14.82. Erweiterte IO-Fehlerrücksetzungs-DO-Port des Laserschweißgeräts konfigurieren

1/**
2* @brief Erweiterte IO-Fehlerrücksetzungs-DO-Port des Laserschweißgeräts konfigurieren
3* @param[in] ctrlModeDONum Erweiterte DO-Portnummer für die Fehlerrücksetzung des Laserschweißgeräts
4* @return Fehlercode, 0 zeigt Erfolg an, nicht 0 zeigt Fehler an
5*/
6errno_t SetLaserWeldingErrResetExtDoNum(int ctrlModeDONum);

14.83. Erweiterte DI für Betriebsstatus (Laser an-Status) des Laserschweißgeräts konfigurieren

1/**
2* @brief Erweiterte DI für Betriebsstatus (Laser an-Status) des Laserschweißgeräts konfigurieren
3* @param[in] diNum Erweiterte DI-Portnummer für den Betriebsstatus (Laser an-Status) des Laserschweißgeräts
4* @return Fehlercode, 0 zeigt Erfolg an, nicht 0 zeigt Fehler an
5*/
6errno_t SetLaserWeldingRunningStateExtDiNum(int diNum);

14.84. Erweiterte DI für Fehlerstatus des Laserschweißgeräts konfigurieren

1/**
2* @brief Erweiterte DI für Fehlerstatus des Laserschweißgeräts konfigurieren
3* @param[in] diNum Erweiterte DI-Portnummer für den Fehlerstatus des Laserschweißgeräts
4* @return Fehlercode, 0 zeigt Erfolg an, nicht 0 zeigt Fehler an
5*/
6errno_t SetLaserWeldingErrStateExtDiNum(int diNum);

14.85. Laserschweiß-Codebeispiel

 1int TestLaserWeld()
 2{
 3    ROBOT_STATE_PKG pkg = {};
 4    FRRobot robot;
 5    robot.LoggerInit();
 6    robot.SetLoggerLevel(1);
 7    robot.SetReConnectParam(true, 300000, 500);
 8    int rtn = robot.RPC("192.168.58.2");
 9    if (rtn != 0)
10    {
11        return -1;
12    }
13    rtn = robot.ExtDevLoadUDPDriver();
14    if (rtn != 0)
15    {
16        std::cout << "Failed to load UDP driver, error code: " << rtn << std::endl;
17    }
18    robot.Sleep(1000);
19    rtn = robot.SetLaserWeldingParam(1, 3, 2000, 3, 1500, 100, 1000);
20    if (rtn != 0)
21    {
22        std::cout << "SetLaserWeldingParam failed, error code: " << rtn << std::endl;
23    }
24    else
25    {
26        std::cout << "SetLaserWeldingParam success" << std::endl;
27    }
28    rtn = robot.SetLaserWeldingStartExtDoNum(1);
29    if (rtn != 0)
30    {
31        std::cout << "SetLaserWeldingStartExtDoNum failed, error code: " << rtn << std::endl;
32    }
33    rtn = robot.Mode(0);
34    if (rtn != 0)
35    {
36        std::cout << "Set mode 0 failed, error code: " << rtn << std::endl;
37    }
38    robot.Sleep(1000);
39    DescPose desc_pos1(-303.721, -206.960, 297.105, 152.209, 19.857, 109.166);
40    DescPose desc_pos2(-301.575, -254.888, 284.786, 155.919, 26.946, 111.629);
41    DescPose desc_safe(-344.386, -280.830, 435.073, 173.835, 15.333, 124.931);
42    JointPos jointPos1(9.827, -99.740, 120.088, -78.900, -77.241, -17.904);
43    JointPos jointPos2(15.251, -96.456, 120.138, -84.664, -68.542, -17.843);
44    JointPos jointSafe(19.142, -98.078, 101.493, -83.078, -77.070, -17.794);
45    ExaxisPos exaxis(0.0, 0.0, 0.0, 0.0);
46    DescPose offset(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
47    int error = robot.MoveL(&desc_pos1,0, 0, 100, 100, 100, -1, 0, &exaxis, 0, 0, &offset, -1, 0);
48    std::cout << "MoveL to pos1 return: " << error << std::endl;
49    rtn = robot.SetLaserWeldingStartEnd(1, 1, 10000);
50    if (rtn != 0)
51    {
52        std::cout << "SetLaserWeldingStartEnd (start) failed, error code: " << rtn << std::endl;
53    }
54    else
55    {
56        std::cout << "Laser started" << std::endl;
57    }
58    rtn = robot.MoveL(&desc_pos2,0, 0, 30, 100, 100, -1, 0, &exaxis, 0, 0, &offset, -1, 0);
59    std::cout << "MoveL to pos2 return: " << rtn << std::endl;
60    rtn = robot.SetLaserWeldingStartEnd(1, 0, 10000);
61    if (rtn != 0)
62    {
63        std::cout << "SetLaserWeldingStartEnd (stop) failed, error code: " << rtn << std::endl;
64    }
65    else
66    {
67        std::cout << "Laser stopped" << std::endl;
68    }
69    robot.Sleep(500);
70    rtn = robot.MoveL(&desc_safe, 0, 0, 100, 100, 100, -1, 0, &exaxis, 0, 0, &offset, -1, 0);
71    std::cout << "MoveL to safe_pos return: " << rtn << std::endl;
72    rtn = robot.Mode(1);
73    if (rtn != 0)
74    {
75        std::cout << "Set mode 1 failed, error code: " << rtn << std::endl;
76    }
77    robot.Sleep(1000);
78    robot.CloseRPC();
79    robot.Sleep(1000);
80    std::cout << "Test completed" << std::endl;
81    return 0;
82}