14. Robot di Saldatura

14.1. Impostare i parametri della curva del processo di saldatura

Nuovo nella versione C++SDK-v2.1.5.0.

 1/**
 2 * @brief Imposta i parametri della curva del processo di saldatura
 3 * @param [in] id Numero del processo di saldatura (1-99)
 4 * @param [in] startCurrent Corrente di accensione dell'arco (A)
 5 * @param [in] startVoltage Tensione di accensione dell'arco (V)
 6 * @param [in] startTime Tempo di accensione dell'arco (ms)
 7 * @param [in] weldCurrent Corrente di saldatura (A)
 8 * @param [in] weldVoltage Tensione di saldatura (V)
 9 * @param [in] endCurrent Corrente di spegnimento dell'arco (A)
10 * @param [in] endVoltage Tensione di spegnimento dell'arco (V)
11 * @param [in] endTime Tempo di spegnimento dell'arco (ms)
12 * @return Codice di errore
13 */
14errno_t WeldingSetProcessParam(int id, double startCurrent, double startVoltage, double startTime, double weldCurrent, double weldVoltage, double endCurrent, double endVoltage, double endTime);

14.2. Ottenere i parametri della curva del processo di saldatura

Nuovo nella versione C++SDK-v2.1.5.0.

 1/**
 2 * @brief Ottiene i parametri della curva del processo di saldatura
 3 * @param [in] id Numero del processo di saldatura (1-99)
 4 * @param [out] startCurrent Corrente di accensione dell'arco (A)
 5 * @param [out] startVoltage Tensione di accensione dell'arco (V)
 6 * @param [out] startTime Tempo di accensione dell'arco (ms)
 7 * @param [out] weldCurrent Corrente di saldatura (A)
 8 * @param [out] weldVoltage Tensione di saldatura (V)
 9 * @param [out] endCurrent Corrente di spegnimento dell'arco (A)
10 * @param [out] endVoltage Tensione di spegnimento dell'arco (V)
11 * @param [out] endTime Tempo di spegnimento dell'arco (ms)
12 * @return Codice di errore
13 */
14errno_t WeldingGetProcessParam(int id, double& startCurrent, double& startVoltage, double& startTime, double& weldCurrent, double& weldVoltage, double& endCurrent, double& endVoltage, double& endTime);

14.3. Impostare la relazione tra corrente di saldatura e uscita analogica

Nuovo nella versione C++SDK-v2.1.1.0.

1/**
2 * @brief Imposta la relazione tra corrente di saldatura e uscita analogica
3 * @param [in] currentMin Valore corrente del punto sinistro della relazione lineare corrente-uscita analogica (A)
4 * @param [in] currentMax Valore corrente del punto destro della relazione lineare corrente-uscita analogica (A)
5 * @param [in] outputVoltageMin Valore di tensione di uscita analogica del punto sinistro della relazione lineare (V)
6 * @param [in] outputVoltageMax Valore di tensione di uscita analogica del punto destro della relazione lineare (V)
7 * @return Codice di errore
8 */
9errno_t WeldingSetCurrentRelation(double currentMin, double currentMax, double outputVoltageMin, double outputVoltageMax);

14.4. Impostare la relazione tra tensione di saldatura e uscita analogica

Nuovo nella versione C++SDK-v2.1.1.0.

1/**
2 * @brief Imposta la relazione tra tensione di saldatura e uscita analogica
3 * @param [in] weldVoltageMin Valore di tensione di saldatura del punto sinistro della relazione lineare (V)
4 * @param [in] weldVoltageMax Valore di tensione di saldatura del punto destro della relazione lineare (V)
5 * @param [in] outputVoltageMin Valore di tensione di uscita analogica del punto sinistro della relazione lineare (V)
6 * @param [in] outputVoltageMax Valore di tensione di uscita analogica del punto destro della relazione lineare (V)
7 * @return Codice di errore
8 */
9errno_t WeldingSetVoltageRelation(double weldVoltageMin, double weldVoltageMax, double outputVoltageMin, double outputVoltageMax);

14.5. Ottenere la relazione tra corrente di saldatura e uscita analogica

Nuovo nella versione C++SDK-v2.1.1.0.

1/**
2 * @brief Ottiene la relazione tra corrente di saldatura e uscita analogica
3 * @param [out] currentMin Valore corrente del punto sinistro della relazione lineare corrente-uscita analogica (A)
4 * @param [out] currentMax Valore corrente del punto destro della relazione lineare corrente-uscita analogica (A)
5 * @param [out] outputVoltageMin Valore di tensione di uscita analogica del punto sinistro della relazione lineare (V)
6 * @param [out] outputVoltageMax Valore di tensione di uscita analogica del punto destro della relazione lineare (V)
7 * @return Codice di errore
8 */
9errno_t WeldingGetCurrentRelation(double *currentMin, double *currentMax, double *outputVoltageMin, double *outputVoltageMax);

14.6. Ottenere la relazione tra tensione di saldatura e uscita analogica

Nuovo nella versione C++SDK-v2.1.1.0.

1/**
2 * @brief Ottiene la relazione tra tensione di saldatura e uscita analogica
3 * @param [out] weldVoltageMin Valore di tensione di saldatura del punto sinistro della relazione lineare (V)
4 * @param [out] weldVoltageMax Valore di tensione di saldatura del punto destro della relazione lineare (V)
5 * @param [out] outputVoltageMin Valore di tensione di uscita analogica del punto sinistro della relazione lineare (V)
6 * @param [out] outputVoltageMax Valore di tensione di uscita analogica del punto destro della relazione lineare (V)
7 * @return Codice di errore
8 */
9errno_t WeldingGetVoltageRelation(double *weldVoltageMin, double *weldVoltageMax, double *outputVoltageMin, double *outputVoltageMax);

14.7. Impostare la corrente di saldatura

Nuovo nella versione C++SDK-v2.1.1.0.

1/**
2 * @brief Imposta la corrente di saldatura
3 * @param [in] ioType Tipo IO di controllo 0-IO della centralina; 1-IO esteso
4 * @param [in] current Valore della corrente di saldatura (A)
5 * @param [in] AOIndex Porta di uscita analogica della centralina per il controllo della corrente di saldatura (0-1)
6 * @param [in] blend Se levigare 0-Non levigare; 1-Levigare
7 * @return Codice di errore
8 */
9errno_t WeldingSetCurrent(int ioType, double current, int AOIndex, int blend);

14.8. Impostare la tensione di saldatura

Nuovo nella versione C++SDK-v2.1.1.0.

1/**
2 * @brief Imposta la tensione di saldatura
3 * @param [in] ioType Tipo IO di controllo 0-IO della centralina; 1-IO esteso
4 * @param [in] voltage Valore della tensione di saldatura (V)
5 * @param [in] AOIndex Porta di uscita analogica della centralina per il controllo della tensione di saldatura (0-1)
6 * @param [in] blend Se levigare 0-Non levigare; 1-Levigare
7 * @return Codice di errore
8 */
9errno_t WeldingSetVoltage(int ioType, double voltage, int AOIndex, int blend);

14.9. Impostare i parametri di oscillazione

 1/**
 2 * @brief Imposta i parametri di oscillazione
 3 * @param [in] weaveNum Numero di configurazione dei parametri di saldatura oscillante
 4 * @param [in] weaveType Tipo di oscillazione 0-Oscillazione a onda triangolare piana; 1-Oscillazione a onda triangolare L verticale; 2-Oscillazione circolare in senso orario; 3-Oscillazione circolare in senso antiorario; 4-Oscillazione a onda sinusoidale piana; 5-Oscillazione a onda sinusoidale L verticale; 6-Oscillazione a onda triangolare verticale; 7-Oscillazione a onda sinusoidale verticale
 5 * @param [in] weaveFrequency Frequenza di oscillazione (Hz)
 6 * @param [in] weaveIncStayTime Modalità di attesa 0-Il ciclo non include il tempo di attesa; 1-Il ciclo include il tempo di attesa
 7 * @param [in] weaveRange Ampiezza di oscillazione (mm)
 8 * @param [in] weaveLeftRange Lunghezza della corda sinistra per l'oscillazione triangolare verticale (mm)
 9 * @param [in] weaveRightRange Lunghezza della corda destra per l'oscillazione triangolare verticale (mm)
10 * @param [in] additionalStayTime Tempo di permanenza nel punto del triangolo verticale (ms)
11 * @param [in] weaveLeftStayTime Tempo di permanenza a sinistra (ms)
12 * @param [in] weaveRightStayTime Tempo di permanenza a destra (ms)
13 * @param [in] weaveCircleRadio Rapporto di ritorno per l'oscillazione circolare (0-100%)
14 * @param [in] weaveStationary Attesa della posizione di oscillazione, 0-La posizione continua a muoversi durante il tempo di attesa; 1-La posizione rimane ferma durante il tempo di attesa
15 * @param [in] weaveYawAngle Angolo di direzione dell'oscillazione (rotazione attorno all'asse Z dell'oscillazione), unità °
16 * @param [in] weaveRotAngle Angolo di rollio direzione oscillazione (rotazione attorno all'asse X oscillazione), unità °
17 * @return Codice di errore
18 */
19errno_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. Esempio di codice per impostare i parametri di saldatura

 1 int 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. Impostare i parametri di oscillazione in tempo reale

Nuovo nella versione C++SDK-v2.1.1.0.

 1/**
 2 * @brief Imposta i parametri di oscillazione in tempo reale
 3 * @param [in] weaveNum Numero di configurazione dei parametri di saldatura oscillante
 4 * @param [in] weaveType Tipo di oscillazione 0-Oscillazione a onda triangolare piana; 1-Oscillazione a onda triangolare L verticale; 2-Oscillazione circolare in senso orario; 3-Oscillazione circolare in senso antiorario; 4-Oscillazione a onda sinusoidale piana; 5-Oscillazione a onda sinusoidale L verticale; 6-Oscillazione a onda triangolare verticale; 7-Oscillazione a onda sinusoidale verticale
 5 * @param [in] weaveFrequency Frequenza di oscillazione (Hz)
 6 * @param [in] weaveIncStayTime Modalità di attesa 0-Il ciclo non include il tempo di attesa; 1-Il ciclo include il tempo di attesa
 7 * @param [in] weaveRange Ampiezza di oscillazione (mm)
 8 * @param [in] weaveLeftStayTime Tempo di permanenza a sinistra (ms)
 9 * @param [in] weaveRightStayTime Tempo di permanenza a destra (ms)
10 * @param [in] weaveCircleRadio Rapporto di ritorno per l'oscillazione circolare (0-100%)
11 * @param [in] weaveStationary Attesa della posizione di oscillazione, 0-La posizione continua a muoversi durante il tempo di attesa; 1-La posizione rimane ferma durante il tempo di attesa
12 * @return Codice di errore
13 */
14errno_t WeaveOnlineSetPara(int weaveNum, int weaveType, double weaveFrequency, int weaveIncStayTime, double weaveRange, int weaveLeftStayTime, int weaveRightStayTime, int weaveCircleRadio, int weaveStationary);

14.12. Impostare i parametri di rilevamento dell’interruzione dell’arco di saldatura del robot

Nuovo nella versione C++SDK-v2.1.8-3.7.8.

1/**
2 * @brief Imposta i parametri di rilevamento dell'interruzione accidentale dell'arco di saldatura del robot
3 * @param [in] checkEnable Abilita il rilevamento; 0-Disabilitato; 1-Abilitato
4 * @param [in] arcInterruptTimeLength Durata di conferma dell'interruzione dell'arco (ms)
5 * @return Codice di errore
6 */
7errno_t WeldingSetCheckArcInterruptionParam(int checkEnable, int arcInterruptTimeLength);

14.13. Ottenere i parametri di rilevamento dell’interruzione dell’arco di saldatura del robot

Nuovo nella versione C++SDK-v2.1.8-3.7.8.

1/**
2 * @brief Ottiene i parametri di rilevamento dell'interruzione accidentale dell'arco di saldatura del robot
3 * @param [out] checkEnable Abilita il rilevamento; 0-Disabilitato; 1-Abilitato
4 * @param [out] arcInterruptTimeLength Durata di conferma dell'interruzione dell'arco (ms)
5 * @return Codice di errore
6 */
7errno_t WeldingGetCheckArcInterruptionParam(int* checkEnable, int* arcInterruptTimeLength);

14.14. Impostare i parametri di recupero dell’interruzione di saldatura del robot

Nuovo nella versione C++SDK-v2.1.8-3.7.8.

1/**
2 * @brief Imposta i parametri di recupero dell'interruzione di saldatura del robot
3 * @param [in] enable Abilita il recupero dell'interruzione di saldatura
4 * @param [in] length Distanza di sovrapposizione della saldatura (mm)
5 * @param [in] velocity Velocità percentuale del robot per tornare al punto di riaccensione (0-100)
6 * @param [in] moveType Metodo di movimento del robot verso il punto di riaccensione; 0-LIN; 1-PTP
7 * @return Codice di errore
8 */
9errno_t WeldingSetReWeldAfterBreakOffParam(int enable, double length, double velocity, int moveType);

14.15. Ottenere i parametri di recupero dell’interruzione di saldatura del robot

Nuovo nella versione C++SDK-v2.1.8-3.7.8.

1/**
2 * @brief Ottiene i parametri di recupero dell'interruzione di saldatura del robot
3 * @param [out] enable Abilita il recupero dell'interruzione di saldatura
4 * @param [out] length Distanza di sovrapposizione della saldatura (mm)
5 * @param [out] velocity Velocità percentuale del robot per tornare al punto di riaccensione (0-100)
6 * @param [out] moveType Metodo di movimento del robot verso il punto di riaccensione; 0-LIN; 1-PTP
7 * @return Codice di errore
8 */
9errno_t WeldingGetReWeldAfterBreakOffParam(int* enable, double* length, double* velocity, int* moveType);

14.16. Impostare la porta DO estesa per la modalità di controllo della saldatrice

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief Imposta la porta DO estesa per la modalità di controllo della saldatrice
3 * @param DONum Porta DO per la modalità di controllo della saldatrice (0-127)
4 * @return Codice di errore
5 */
6errno_t SetWeldMachineCtrlModeExtDoNum(int DONum);

14.17. Impostare la modalità di controllo della saldatrice

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief Imposta modalità di controllo della saldatrice
3 * @param [in] mode Modalità di controllo della saldatrice; 0-Modo unico DC; 1-Modo unico a impulsi; 2-Modalità JOB; 3-Modalità controllo locale; 4-Modalità separata; 5-Modalità CC/CV; 6-TIG; 7-CMT
4 * @param [in] ioType Tipo di controllo; 0-IO del box di controllo; 1-Protocollo di comunicazione digitale (UDP); 2-Protocollo di comunicazione digitale (ModbusTCP)
5 * @return Codice di errore
6*/
7errno_t SetWeldMachineCtrlMode(int mode, int ioType = 1);

14.18. Inizio della saldatura

Nuovo nella versione C++SDK-v2.1.1.0.

1/**
2 * @brief Inizia la saldatura
3 * @param [in] ioType Tipo IO 0-IO del controllore; 1-IO esteso
4 * @param [in] arcNum Numero del file di configurazione della saldatrice
5 * @param [in] timeout Tempo di timeout per l'accensione dell'arco
6 * @return Codice di errore
7 */
8errno_t ARCStart(int ioType, int arcNum, int timeout);

14.19. Fine della saldatura

Nuovo nella versione C++SDK-v2.1.1.0.

1/**
2 * @brief Termina la saldatura
3 * @param [in] ioType Tipo IO 0-IO del controllore; 1-IO esteso
4 * @param [in] arcNum Numero del file di configurazione della saldatrice
5 * @param [in] timeout Tempo di timeout per lo spegnimento dell'arco
6 * @return Codice di errore
7 */
8errno_t ARCEnd(int ioType, int arcNum, int timeout);

14.20. Inizio dell’oscillazione

Nuovo nella versione C++SDK-v2.1.1.0.

1/**
2 * @brief Inizia l'oscillazione
3 * @param [in] weaveNum Numero di configurazione dei parametri di saldatura oscillante
4 * @return Codice di errore
5 */
6errno_t WeaveStart(int weaveNum);

14.21. Fine dell’oscillazione

Nuovo nella versione C++SDK-v2.1.1.0.

1/**
2 * @brief Termina l'oscillazione
3 * @param [in] weaveNum Numero di configurazione dei parametri di saldatura oscillante
4 * @return Codice di errore
5 */
6errno_t WeaveEnd(int weaveNum);

14.22. Alimentazione del filo in avanti

Nuovo nella versione C++SDK-v2.1.1.0.

1/**
2 * @brief Alimentazione del filo in avanti
3 * @param [in] ioType Tipo IO 0-IO del controllore; 1-IO esteso
4 * @param [in] wireFeed Controllo alimentazione filo 0-Ferma alimentazione filo; 1-Alimenta filo
5 * @return Codice di errore
6 */
7errno_t SetForwardWireFeed(int ioType, int wireFeed);

14.23. Alimentazione del filo all’indietro

Nuovo nella versione C++SDK-v2.1.1.0.

1/**
2 * @brief Alimentazione del filo all'indietro
3 * @param [in] ioType Tipo IO 0-IO del controllore; 1-IO esteso
4 * @param [in] wireFeed Controllo alimentazione filo 0-Ferma alimentazione filo; 1-Alimenta filo
5 * @return Codice di errore
6 */
7errno_t SetReverseWireFeed(int ioType, int wireFeed);

14.24. Alimentazione del gas

Nuovo nella versione C++SDK-v2.1.1.0.

1/**
2 * @brief Alimentazione del gas
3 * @param [in] ioType Tipo IO 0-IO del controllore; 1-IO esteso
4 * @param [in] airControl Controllo alimentazione gas 0-Ferma alimentazione gas; 1-Alimenta gas
5 * @return Codice di errore
6 */
7errno_t SetAspirated(int ioType, int airControl);

14.25. Impostare il recupero della saldatura dopo l’interruzione del robot

Nuovo nella versione C++SDK-v2.1.8-3.7.8.

1/**
2 * @brief Imposta il recupero della saldatura dopo l'interruzione del robot
3 * @return Codice di errore
4 */
5errno_t WeldingStartReWeldAfterBreakOff();

14.26. Impostare l’uscita dalla saldatura dopo l’interruzione del robot

Nuovo nella versione C++SDK-v2.1.8-3.7.8.

1/**
2 * @brief Imposta l'uscita dalla saldatura dopo l'interruzione del robot
3 * @return Codice di errore
4 */
5errno_t WeldingAbortWeldAfterBreakOff();

14.27. Esempio di codice per controllo saldatura robot

 1 int 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. Inizio della saldatura a segmenti

Nuovo nella versione C++SDK-v2.1.1.0.

 1/**
 2 * @brief Inizia la saldatura a segmenti
 3 * @param [in] startDesePos Posizione cartesiana del punto di inizio
 4 * @param [in] endDesePos Posa cartesiana del punto di fine
 5 * @param [in] startJPos Posa articolare del punto di inizio
 6 * @param [in] endJPos Posa articolare del punto di fine
 7 * @param [in] weldLength Lunghezza del segmento di saldatura (mm)
 8 * @param [in] noWeldLength Lunghezza del segmento non saldato (mm)
 9 * @param [in] weldIOType Tipo IO di saldatura (0-IO della centralina; 1-IO esteso)
10 * @param [in] arcNum Numero del file di configurazione della saldatrice
11 * @param [in] weldTimeout Tempo di timeout per accensione/spegnimento dell'arco
12 * @param [in] isWeave Se oscillare
13 * @param [in] weaveNum Numero di configurazione dei parametri di saldatura oscillante
14 * @param [in] tool Numero sistema coordinate utensile, intervallo [0~14]
15 * @param [in] user Numero sistema coordinate pezzo, intervallo [0~14]
16 * @param [in] vel Percentuale di velocità, range [0~100]
17 * @param [in] acc Percentuale di accelerazione, range [0~100], attualmente non disponibile
18 * @param [in] ovl Fattore di scala della velocità, range [0~100]
19 * @param [in] blendR [-1.0]-Movimento fino a destinazione (bloccante), [0~1000.0]-Raggio di levigatura (non bloccante), unità mm
20 * @param [in] epos Posizione degli assi estesi, unità mm
21 * @param [in] search 0-Nessuna ricerca del filo, 1-Ricerca del filo
22 * @param [in] offset_flag 0-Nessun offset, 1-Offset nel sistema di coordinate base/pezzo, 2-Offset nel sistema di coordinate utensile
23 * @param [in] offset_pos Quantità di offset della posa
24 * @return Codice di errore
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. Esempio di codice per saldatura a segmenti del robot

Cambiato nella versione C++SDK-v2.1.2.0.

 1 int 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. Inizio della simulazione di oscillazione

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief Inizia la simulazione di oscillazione
3 * @param [in] weaveNum Numero dei parametri di oscillazione
4 * @return Codice di errore
5 */
6errno_t WeaveStartSim(int weaveNum);

14.31. Fine della simulazione di oscillazione

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief Termina la simulazione di oscillazione
3 * @param [in] weaveNum Numero dei parametri di oscillazione
4 * @return Codice di errore
5 */
6errno_t WeaveEndSim(int weaveNum);

14.32. Inizio del rilevamento di traiettoria di allarme (senza movimento)

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief Inizia il rilevamento di traiettoria di allarme (senza movimento)
3 * @param [in] weaveNum Numero dei parametri di oscillazione
4 * @return Codice di errore
5 */
6errno_t WeaveInspectStart(int weaveNum);

14.33. Fine del rilevamento di traiettoria di allarme (senza movimento)

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief Termina il rilevamento di traiettoria di allarme (senza movimento)
3 * @param [in] weaveNum Numero dei parametri di oscillazione
4 * @return Codice di errore
5 */
6errno_t WeaveInspectEnd(int weaveNum);

14.34. Inizio della transizione graduale di oscillazione

1/**
2 * @brief Inizia la transizione graduale di oscillazione
3 * @param [in] weaveChangeFlag 1-Cambia parametri di oscillazione; 2-Cambia parametri di oscillazione + velocità di saldatura
4 * @param [in] weaveNum Numero di oscillazione
5 * @param [in] velStart Velocità di inizio saldatura, (cm/min)
6 * @param [in] velEnd Velocità di fine saldatura, (cm/min)
7 * @return Codice di errore
8 */
9errno_t WeaveChangeStart(int weaveChangeFlag, int weaveNum, double velStart, double velEnd);

14.35. Esempio di codice per saldatura con transizione graduale di oscillazione del robot

 1 int 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. Fine della transizione graduale di oscillazione

Nuovo nella versione C++SDK-v2.2.0-3.8.0.

1/**
2 * @brief Termina la transizione graduale di oscillazione
3 * @return Codice di errore
4 */
5errno_t WeaveChangeEnd();

14.37. IO esteso - Configurare il segnale di rilevamento del gas della saldatrice

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief IO esteso - Configura il segnale di rilevamento del gas della saldatrice
3 * @param [in] DONum Numero DO esteso per il segnale di rilevamento del gas
4 * @return Codice di errore
5 */
6errno_t SetAirControlExtDoNum(int DONum);

14.38. IO esteso - Configurare il segnale di accensione dell’arco della saldatrice

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief IO esteso - Configura il segnale di accensione dell'arco della saldatrice
3 * @param [in] DONum Numero DO esteso per il segnale di accensione dell'arco
4 * @return Codice di errore
5 */
6errno_t SetArcStartExtDoNum(int DONum);

14.39. IO esteso - Configurare il segnale di alimentazione all’indietro del filo della saldatrice

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief IO esteso - Configura il segnale di alimentazione all'indietro del filo della saldatrice
3 * @param [in] DONum Numero DO esteso per il segnale di alimentazione all'indietro del filo
4 * @return Codice di errore
5 */
6errno_t SetWireReverseFeedExtDoNum(int DONum);

14.40. IO esteso - Configurare il segnale di alimentazione in avanti del filo della saldatrice

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief IO esteso - Configura il segnale di alimentazione in avanti del filo della saldatrice
3 * @param [in] DONum Numero DO esteso per il segnale di alimentazione in avanti del filo
4 * @return Codice di errore
5 */
6errno_t SetWireForwardFeedExtDoNum(int DONum);

14.41. IO esteso - Configurare il segnale di successo dell’accensione dell’arco della saldatrice

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief IO esteso - Configura il segnale di successo dell'accensione dell'arco della saldatrice
3 * @param [in] DINum Numero DI esteso per il segnale di successo dell'accensione dell'arco
4 * @return Codice di errore
5 */
6errno_t SetArcDoneExtDiNum(int DINum);

14.42. IO esteso - Configurare il segnale di pronto della saldatrice

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief IO esteso - Configura il segnale di pronto della saldatrice
3 * @param [in] DINum Numero DI esteso per il segnale di pronto della saldatrice
4 * @return Codice di errore
5 */
6errno_t SetWeldReadyExtDiNum(int DINum);

14.43. IO esteso - Configurare i segnali di recupero dell’interruzione di saldatura

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief IO esteso - Configura i segnali di recupero dell'interruzione di saldatura
3 * @param [in] reWeldDINum Numero DI esteso per il segnale di recupero della saldatura dopo interruzione
4 * @param [in] abortWeldDINum Numero DI esteso per il segnale di uscita dalla saldatura dopo interruzione
5 * @return Codice di errore
6 */
7errno_t SetExtDIWeldBreakOffRecover(int reWeldDINum, int abortWeldDINum);

14.44. Esempio di codice per impostare i segnali di saldatura IO estesi

 1 int 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. Controllo del tracciamento dell’arco

Nuovo nella versione C++SDK-v2.1.5.0.

 1/**
 2 * @brief Controllo del tracciamento dell'arco
 3 * @param [in] flag Interruttore, 0-Spegnere; 1-Accendere
 4 * @param [in] dalayTime Tempo di ritardo, unità ms
 5 * @param [in] isLeftRight Compensazione deviazione sinistra-destra
 6 * @param [in] klr Coefficiente di regolazione sinistra-destra (sensibilità)
 7 * @param [in] tStartLr Tempo di inizio compensazione sinistra-destra cyc
 8 * @param [in] stepMaxLr Compensazione massima per volta sinistra-destra mm
 9 * @param [in] sumMaxLr Compensazione totale massima sinistra-destra mm
10 * @param [in] isUpLow Compensazione deviazione alto-basso
11 * @param [in] kud Coefficiente di regolazione alto-basso (sensibilità)
12 * @param [in] tStartUd Tempo di inizio compensazione alto-basso cyc
13 * @param [in] stepMaxUd Compensazione massima per volta alto-basso mm
14 * @param [in] sumMaxUd Compensazione totale massima alto-basso mm
15 * @param [in] axisSelect Selezione sistema coordinate alto-basso, 0-Oscillazione; 1-Utensile; 2-Base
16 * @param [in] referenceType Metodo impostazione corrente di riferimento alto-basso, 0-Retroazione; 1-Costante
17 * @param [in] referSampleStartUd Conteggio inizio campionamento corrente di riferimento alto-basso (retroazione), cyc
18 * @param [in] referSampleCountUd Conteggio ciclo campionamento corrente di riferimento alto-basso (retroazione), cyc
19 * @param [in] referenceCurrent Corrente di riferimento alto-basso mA
20 * @param [in] offsetType Tipo di tracciamento offset, 0-Nessun offset; 1-Campionamento; 2-Percentuale
21 * @param [in] offsetParameter Parametro offset; Campionamento (tempo di inizio campionamento offset, per default campiona un ciclo); Percentuale (percentuale offset (-100 ~ 100))
22 * @return Codice di errore
23 */
24errno_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. Impostare la porta di ingresso del segnale per il tracciamento dell’arco

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief Imposta la porta di ingresso del segnale per il tracciamento dell'arco
3 * @param [in] channel Selezione banda passante AI per il tracciamento dell'arco, [0-3]
4 * @return Codice di errore
5 */
6errno_t ArcWeldTraceExtAIChannelConfig(int channel);

14.47. Attivazione tracciamento arco + compensazione multi-strato multi-passata

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief Attiva tracciamento arco + compensazione multi-strato multi-passata
3 * @return Codice di errore
4 */
5errno_t ArcWeldTraceReplayStart();

14.48. Disattivazione tracciamento arco + compensazione multi-strato multi-passata

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief Disattiva tracciamento arco + compensazione multi-strato multi-passata
3 * @return Codice di errore
4 */
5errno_t ArcWeldTraceReplayEnd();

14.49. Trasformazione delle coordinate di offset - Saldatura multi-strato multi-passata

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief Trasformazione delle coordinate di offset - Saldatura multi-strato multi-passata
3 * @return Codice di errore
4 */
5errno_t MultilayerOffsetTrsfToBase(DescTran pointO, DescTran pointX, DescTran pointZ, double dx, double dy, double db, DescPose& offset);

14.50. Esempio di codice per il tracciamento dell’arco nella saldatura multi-strato multi-passata

  1 int 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. Selezione canale AI per la retroazione della corrente della saldatrice nel tracciamento dell’arco

1/**
2 * @brief Selezione canale AI per la retroazione della corrente della saldatrice nel tracciamento dell'arco
3 * @param [in] channel Canale; 0-AI esteso 0; 1-AI esteso 1; 2-AI esteso 2; 3-AI esteso 3; 4-AI centralina 0; 5-AI centralina 1
4 * @return Codice di errore
5 */
6errno_t ArcWeldTraceAIChannelCurrent(int channel);

14.52. Selezione canale AI per la retroazione della tensione della saldatrice nel tracciamento dell’arco

1/**
2 * @brief Selezione canale AI per la retroazione della tensione della saldatrice nel tracciamento dell'arco
3 * @param [in] channel Canale; 0-AI esteso 0; 1-AI esteso 1; 2-AI esteso 2; 3-AI esteso 3; 4-AI centralina 0; 5-AI centralina 1
4 * @return Codice di errore
5 */
6errno_t ArcWeldTraceAIChannelVoltage(int channel);

14.53. Parametri di conversione per la retroazione della corrente della saldatrice nel tracciamento dell’arco

1/**
2 * @brief Parametri di conversione per la retroazione della corrente della saldatrice nel tracciamento dell'arco
3 * @param [in] AILow Limite inferiore canale AI, valore predefinito 0V, range [0-10V]
4 * @param [in] AIHigh Limite superiore canale AI, valore predefinito 10V, range [0-10V]
5 * @param [in] currentLow Valore di corrente della saldatrice corrispondente al limite inferiore del canale AI, valore predefinito 0V, range [0-200V]
6 * @param [in] currentHigh Valore di corrente della saldatrice corrispondente al limite superiore del canale AI, valore predefinito 100V, range [0-200V]
7 * @return Codice di errore
8 */
9errno_t ArcWeldTraceCurrentPara(float AILow, float AIHigh, float currentLow, float currentHigh);

14.54. Parametri di conversione per la retroazione della tensione della saldatrice nel tracciamento dell’arco

1/**
2 * @brief Parametri di conversione per la retroazione della tensione della saldatrice nel tracciamento dell'arco
3 * @param [in] AILow Limite inferiore canale AI, valore predefinito 0V, range [0-10V]
4 * @param [in] AIHigh Limite superiore canale AI, valore predefinito 10V, range [0-10V]
5 * @param [in] voltageLow Valore di tensione della saldatrice corrispondente al limite inferiore del canale AI, valore predefinito 0V, range [0-200V]
6 * @param [in] voltageHigh Valore di tensione della saldatrice corrispondente al limite superiore del canale AI, valore predefinito 100V, range [0-200V]
7 * @return Codice di errore
8 */
9errno_t ArcWeldTraceVoltagePara(float AILow, float AIHigh, float voltageLow, float voltageHigh);

14.55. Esempio di codice per il tracciamento dell’arco

 1 int 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, 0);
16   robot->WeldingSetVoltageRelation(10, 45, 1, 10, 1);
17
18   robot->WeldingSetVoltage(0, 25, 1, 0);// ----Imposta tensione
19   robot->WeldingSetCurrent(0, 260, 0, 0);// ----Imposta corrente
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. Impostare le porte IO estese per la ricerca del filo

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief Imposta le porte IO estese per la ricerca del filo
3 * @param searchDoneDINum Porta DO per il successo della ricerca del filo (0-127)
4 * @param searchStartDONum Porta DO per il controllo avvio/arresto della ricerca del filo (0-127)
5 * @return Codice di errore
6 */
7errno_t SetWireSearchExtDIONum(int searchDoneDINum, int searchStartDONum);

14.57. Programma di esempio

Nuovo nella versione C++SDK-v2.1.5.0.

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

14.58. Inizio della ricerca del filo

Nuovo nella versione C++SDK-v2.1.5.0.

 1/**
 2 * @brief Inizia la ricerca del filo
 3 * @param [in] refPos 1-Punto di riferimento 0-Punto di contatto
 4 * @param [in] searchVel Velocità di ricerca %
 5 * @param [in] searchDis Distanza di ricerca mm
 6 * @param [in] autoBackFlag Flag ritorno automatico, 0-Non automatico; -Automatico
 7 * @param [in] autoBackVel Velocità di ritorno automatico %
 8 * @param [in] autoBackDis Distanza di ritorno automatico mm
 9 * @param [in] offectFlag 1-Ricerca con offset; 0-Ricerca al punto insegnato
10 * @return Codice di errore
11 */
12errno_t WireSearchStart(int refPos, float searchVel, int searchDis, int autoBackFlag, float autoBackVel, int autoBackDis, int offectFlag);

14.59. Fine della ricerca del filo

Nuovo nella versione C++SDK-v2.1.5.0.

 1/**
 2 * @brief Termina la ricerca del filo
 3 * @param [in] refPos 1-Punto di riferimento 2-Punto di contatto
 4 * @param [in] searchVel Velocità di ricerca %
 5 * @param [in] searchDis Distanza di ricerca mm
 6 * @param [in] autoBackFlag Flag ritorno automatico, 0-Non automatico; -Automatico
 7 * @param [in] autoBackVel Velocità di ritorno automatico %
 8 * @param [in] autoBackDis Distanza di ritorno automatico mm
 9 * @param [in] offectFlag 1-Ricerca con offset; 2-Ricerca al punto insegnato
10 * @return Codice di errore
11 */
12errno_t WireSearchEnd(int refPos, float searchVel, int searchDis, int autoBackFlag, float autoBackVel, int autoBackDis, int offectFlag);

14.60. Calcolare l’offset della ricerca del filo

Nuovo nella versione C++SDK-v2.1.5.0.

 1/**
 2 * @brief Calcola l'offset della ricerca del filo
 3 * @param [in] seamType Tipo di giunzione
 4 * @param [in] method Metodo di calcolo
 5 * @param [in] varNameRef Punti di riferimento 1-6, "#" indica nessuna variabile punto
 6 * @param [in] varNameRes Punti di contatto 1-6, "#" indica nessuna variabile punto
 7 * @param [out] offectFlag 0-L'offset viene aggiunto direttamente ai punti di comando; 1-L'offset richiede una trasformazione delle coordinate dei punti di comando
 8 * @param [out] offect Posa offset [x, y, z, a, b, c]
 9 * @return Codice di errore
10 */
11errno_t GetWireSearchOffset(int seamType, int method, std::vector<std::string> varNameRef, std::vector<std::string> varNameRes, int& offectFlag, DescPose& offect);

14.61. Attendere il completamento della ricerca del filo

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief Attende il completamento della ricerca del filo
3 * @return Codice di errore
4 */
5errno_t WireSearchWait(std::string varName);

14.62. Scrivere il punto di contatto della ricerca del filo nel database

Nuovo nella versione C++SDK-v2.1.5.0.

1/**
2 * @brief Scrive il punto di contatto della ricerca del filo nel database
3 * @param [in] varName Nome del punto di contatto "RES0" ~ "RES99"
4 * @param [in] pos Dati del punto di contatto [x, y, z, a, b, c]
5 * @return Codice di errore
6 */
7errno_t SetPointToDatabase(std::string varName, DescPose pos);

14.63. Esempio di codice per la ricerca del filo del robot

Nuovo nella versione C++SDK-v2.1.5.0.

 1 int 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); //Punto di partenza
36   robot.MoveL(&jointREF0B, &descREF0B, 1, 1, 100, 100, 100, -1, &exaxisPos, 1, 0, &offdese); //Punto direzione
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); //Punto di partenza
41   robot.MoveL(&jointREF1B, &descREF1B, 1, 1, 100, 100, 100, -1, &exaxisPos, 1, 0, &offdese); //Punto direzione
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); //Punto di partenza
46   robot.MoveL(&jointREF0B, &descREF0B, 1, 1, 100, 100, 100, -1, &exaxisPos, 1, 0, &offdese); //Punto direzione
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); //Punto di partenza
51   robot.MoveL(&jointREF1B, &descREF1B, 1, 1, 100, 100, 100, -1, &exaxisPos, 1, 0, &offdese); //Punto direzione
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. Impostare l’inizio della transizione graduale della tensione di saldatura

 1/**
 2 * @brief Imposta l'inizio della transizione graduale della tensione di saldatura
 3 * @param [in] IOType Tipo di controllo; 0-IO della centralina; 1-Protocollo di comunicazione digitale (UDP); 2-Protocollo di comunicazione digitale (ModbusTCP)
 4 * @param [in] voltageStart Tensione di saldatura iniziale (V)
 5 * @param [in] voltageEnd Tensione di saldatura finale (V)
 6 * @param [in] AOIndex Numero porta AO della centralina (0-1)
 7 * @param [in] blend Se levigare 0-Non levigare; 1-Levigare
 8 * @return Codice di errore
 9 */
10errno_t WeldingSetVoltageGradualChangeStart(int IOType, double voltageStart, double voltageEnd, int AOIndex, int blend);

14.65. Impostare la fine della transizione graduale della tensione di saldatura

1/**
2 * @brief Imposta la fine della transizione graduale della tensione di saldatura
3 * @return Codice di errore
4 */
5errno_t WeldingSetVoltageGradualChangeEnd();

14.66. Impostare l’inizio della transizione graduale della corrente di saldatura

 1/**
 2 * @brief Imposta l'inizio della transizione graduale della corrente di saldatura
 3 * @param [in] IOType Tipo di controllo; 0-IO della centralina; 1-Protocollo di comunicazione digitale (UDP); 2-Protocollo di comunicazione digitale (ModbusTCP)
 4 * @param [in] currentStart Corrente di saldatura iniziale (A)
 5 * @param [in] currentEnd Corrente di saldatura finale (A)
 6 * @param [in] AOIndex Numero porta AO della centralina (0-1)
 7 * @param [in] blend Se levigare 0-Non levigare; 1-Levigare
 8 * @return Codice di errore
 9 */
10errno_t WeldingSetCurrentGradualChangeStart(int IOType, double currentStart, double currentEnd, int AOIndex, int blend);

14.67. Impostare la fine della transizione graduale della corrente di saldatura

1/**
2 * @brief Imposta la fine della transizione graduale della corrente di saldatura
3 * @return Codice di errore
4 */
5errno_t WeldingSetCurrentGradualChangeEnd();

14.68. Esempio di codice per la transizione graduale di corrente e tensione di saldatura del robot

 1 int 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. Impostare i parametri di oscillazione personalizzati

Nuovo nella versione C++SDK-v3.8.6.

 1/**
 2 * @brief Imposta i parametri di oscillazione personalizzati
 3 * @param [in] id Numero di oscillazione personalizzata: 0-2
 4 * @param [in] pointNum Numero di punti di oscillazione 0-10
 5 * @param [in] point Dati dei punti di estremità del movimento x,y,z
 6 * @param [in] stayTime Tempi di permanenza nell'oscillazione ms
 7 * @param [in] frequency Frequenza di oscillazione Hz
 8 * @param [in] incStayType Modalità di attesa: 0-Il ciclo non include il tempo di attesa; 1-Il ciclo include il tempo di attesa
 9 * @param [in] stationary Attesa della posizione di oscillazione: 0-Continua a muoversi durante il tempo di attesa; 1-Posizione ferma durante il tempo di attesa
10 * @return Codice di errore
11 */
12errno_t CustomWeaveSetPara(int id, int pointNum, DescTran point[10], double stayTime[10], double frequency, int incStayType, int stationary);

14.70. Ottenere i parametri di oscillazione personalizzati

Nuovo nella versione C++SDK-v3.8.6.

 1/**
 2 * @brief Ottiene i parametri di oscillazione personalizzati
 3 * @param [in] id Numero di oscillazione personalizzata: 0-2
 4 * @param [out] pointNum Numero di punti di oscillazione 0-10
 5 * @param [out] point Dati dei punti di estremità del movimento x,y,z
 6 * @param [out] stayTime Tempi di permanenza nell'oscillazione ms
 7 * @param [out] frequency Frequenza di oscillazione Hz
 8 * @param [out] incStayType Modalità di attesa: 0-Il ciclo non include il tempo di attesa; 1-Il ciclo include il tempo di attesa
 9 * @param [out] stationary Attesa della posizione di oscillazione: 0-Continua a muoversi durante il tempo di attesa; 1-Posizione ferma durante il tempo di attesa
10 * @return Codice di errore
11 */
12errno_t CustomWeaveGetPara(int id, int& pointNum, DescTran point[10], double stayTime[10], double& frequency, int& incStayType, int& stationary);

14.71. Esempio di codice per parametri di oscillazione personalizzati

Nuovo nella versione C++SDK-v3.8.6.

 1 int 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. Configurazione dei Parametri della Saldatrice Laser

 1/**
 2* @brief Configurazione dei parametri della saldatrice laser
 3* @param[in] io_type Tipo di comunicazione 0-IO 1-UDP
 4* @param[in] num Numero del gruppo da impostare (1~10)
 5* @param[in] scanSpeed Velocità di scansione
 6* @param[in] scanWidth Larghezza di scansione
 7* @param[in] peakPower Potenza di picco
 8* @param[in] dutyCycle Ciclo di lavoro
 9* @param[in] freq Frequenza
10* @return Codice di errore
11*/
12errno_t SetLaserWeldingParam(int io_type, int num, int scanSpeed, int scanWidth, int peakPower, int dutyCycle, int freq);

14.73. Impostare Avvio/Arresto Saldatura Laser

1/**
2* @brief Imposta avvio/arresto saldatura laser
3* @param[in] io_type Tipo di comunicazione 0-IO 1-UDP
4* @param[in] status Parola di controllo 0-laser spento 1-laser acceso
5* @param[in] max_waittime Tempo massimo di attesa, unità millisecondi, default 10000
6* @return Codice di errore
7*/
8errno_t SetLaserWeldingStartEnd(int io_type, int status, int max_waittime = 10000);

14.74. Abilitazione/Disabilitazione Saldatrice Laser

1/**
2* @brief Abilita/disabilita la saldatrice laser
3* @param[in] io_type Tipo di comunicazione 0-IO 1-UDP
4* @param[in] status 0-disabilita 1-abilita
5* @return Codice di errore
6*/
7errno_t SetLaserWeldingEnable(int io_type, int status);

14.75. Ripristino Guasto Saldatrice Laser

1/**
2* @brief Ripristina il guasto della saldatrice laser
3* @param[in] io_type Tipo di comunicazione 0-IO 1-UDP
4* @param[in] status Parola di controllo 0-invalido 1-ripristino guasto
5* @return Codice di errore
6*/
7errno_t ResetLaserWeldingErr(int io_type, int status);

14.76. Ottenere lo Stato di Funzionamento della Saldatrice Laser

1/**
2* @brief Ottiene lo stato di funzionamento della saldatrice laser
3* @param[in] io_type Tipo di comunicazione 0-IO 1-UDP
4* @param[out] status Parola di controllo 0-fermo 1-in funzione
5* @return Codice di errore
6*/
7errno_t GetLaserWeldingRunningState(int io_type, int& status);

14.77. Ottenere lo Stato di Guasto della Saldatrice Laser

1/**
2* @brief Ottiene lo stato di guasto della saldatrice laser
3* @param[in] io_type Tipo di comunicazione 0-IO 1-UDP
4* @param[out] status 0-nessun guasto 1-guasto presente
5* @return Codice di errore
6*/
7errno_t GetLaserWeldingErrState(int io_type, int& status);

14.78. Ottenere i Parametri Configurati della Saldatrice Laser

 1/**
 2* @brief Ottiene i parametri configurati della saldatrice laser
 3* @param[in] num Numero del gruppo da impostare (1~10)
 4* @param[out] scanSpeed Velocità di scansione
 5* @param[out] scanWidth Larghezza di scansione
 6* @param[out] peakPower Potenza di picco
 7* @param[out] dutyCycle Ciclo di lavoro
 8* @param[out] freq Frequenza
 9* @return Codice di errore
10*/
11errno_t GetLaserWeldingParamTarget(int num, int& scanSpeed, int& scanWidth, int& peakPower, int& dutyCycle, int& freq);

14.79. Ottenere i Parametri di Configurazione Attualmente Attivi della Saldatrice Laser

 1/**
 2* @brief Ottiene i parametri di configurazione attualmente attivi della saldatrice laser
 3* @param[in] io_type Tipo di comunicazione 0-IO 1-UDP
 4* @param[out] scanSpeed Velocità di scansione
 5* @param[out] scanWidth Larghezza di scansione
 6* @param[out] peakPower Potenza di picco
 7* @param[out] dutyCycle Ciclo di lavoro
 8* @param[out] freq Frequenza
 9* @return Codice di errore, 0 indica successo, non zero indica fallimento
10*/
11errno_t GetLaserWeldingParamActual(int io_type, int& scanSpeed, int& scanWidth, int& peakPower, int& dutyCycle, int& freq);

14.80. Configurare la Porta DO di Abilitazione IO Esteso della Saldatrice Laser

1/**
2* @brief Configura la porta DO di abilitazione IO esteso della saldatrice laser
3* @param[in] ctrlModeDONum Numero della porta DO estesa per l'abilitazione della saldatrice laser
4* @return Codice di errore, 0 indica successo, non zero indica fallimento
5*/
6errno_t SetLaserWeldingEnableExtDoNum(int ctrlModeDONum);

14.81. Configurare la Porta DO di Avvio IO Esteso della Saldatrice Laser

1/**
2* @brief Configura la porta DO di avvio IO esteso della saldatrice laser
3* @param[in] ctrlModeDONum Numero della porta DO estesa per l'avvio (laser acceso/spento) della saldatrice laser
4* @return Codice di errore, 0 indica successo, non zero indica fallimento
5*/
6errno_t SetLaserWeldingStartExtDoNum(int ctrlModeDONum);

14.82. Configurare la Porta DO di Ripristino Guasto IO Esteso della Saldatrice Laser

1/**
2* @brief Configura la porta DO di ripristino guasto IO esteso della saldatrice laser
3* @param[in] ctrlModeDONum Numero della porta DO estesa per il ripristino del guasto della saldatrice laser
4* @return Codice di errore, 0 indica successo, non zero indica fallimento
5*/
6errno_t SetLaserWeldingErrResetExtDoNum(int ctrlModeDONum);

14.83. Configurare la Porta DI dello Stato di Funzionamento (Stato Laser Acceso) IO Esteso della Saldatrice Laser

1/**
2* @brief Configura la porta DI dello stato di funzionamento (stato laser acceso) IO esteso della saldatrice laser
3* @param[in] diNum Porta DI estesa per lo stato di funzionamento (stato laser acceso) della saldatrice laser
4* @return Codice di errore, 0 indica successo, non zero indica fallimento
5*/
6errno_t SetLaserWeldingRunningStateExtDiNum(int diNum);

14.84. Configurare la Porta DI dello Stato di Guasto IO Esteso della Saldatrice Laser

1/**
2* @brief Configura la porta DI dello stato di guasto IO esteso della saldatrice laser
3* @param[in] diNum Porta DI estesa per lo stato di guasto della saldatrice laser
4* @return Codice di errore, 0 indica successo, non zero indica fallimento
5*/
6errno_t SetLaserWeldingErrStateExtDiNum(int diNum);

14.85. Esempio di Codice per Saldatura Laser

 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}