13. Oś rozszerzona

13.1. Ustawianie parametrów osi rozszerzonej 485

Nowe w wersji C++SDK-v2.1.3.0.

 1/**
 2* @brief Ustawia parametry osi rozszerzonej 485
 3* @param [in] servoId ID serwonapędu, zakres [1-15], odpowiada ID stacji podrzędnej
 4* @param [in] servoCompany Producent serwonapędu, 1 - Dynatect
 5* @param [in] servoModel Model serwonapędu, 1 - FD100-750C
 6* @param [in] servoSoftVersion Wersja oprogramowania serwonapędu, 1 - V1.0
 7* @param [in] servoResolution Rozdzielczość enkodera
 8* @param [in] axisMechTransRatio Mechaniczne przełożenie transmisyjne
 9* @return Kod błędu
10*/
11errno_t AuxServoSetParam(int servoId, int servoCompany, int servoModel, int servoSoftVersion, int servoResolution, double axisMechTransRatio);

13.2. Pobieranie parametrów konfiguracyjnych osi rozszerzonej 485

Nowe w wersji C++SDK-v2.1.3.0.

 1/**
 2* @brief Pobiera parametry konfiguracyjne osi rozszerzonej 485
 3* @param [in] servoId ID serwonapędu, zakres [1-15], odpowiada ID stacji podrzędnej
 4* @param [out] servoCompany Producent serwonapędu, 1 - Dynatect
 5* @param [out] servoModel Model serwonapędu, 1 - FD100-750C
 6* @param [out] servoSoftVersion Wersja oprogramowania serwonapędu, 1 - V1.0
 7* @param [out] servoResolution Rozdzielczość enkodera
 8* @param [out] axisMechTransRatio Mechaniczne przełożenie transmisyjne
 9* @return Kod błędu
10*/
11errno_t AuxServoGetParam(int servoId, int* servoCompany, int* servoModel, int* servoSoftVersion, int* servoResolution, double* axisMechTransRatio);

13.3. Włączanie/wyłączanie zasilania osi rozszerzonej 485

Nowe w wersji C++SDK-v2.1.3.0.

1/**
2* @brief Włącza/wyłącza zasilanie osi rozszerzonej 485
3* @param [in] servoId ID serwonapędu, zakres [1-15], odpowiada ID stacji podrzędnej
4* @param [in] status Stan zasilania, 0 - wyłączone, 1 - włączone
5* @return Kod błędu
6*/
7errno_t AuxServoEnable(int servoId, int status);

13.4. Ustawianie trybu sterowania osi rozszerzonej 485

Nowe w wersji C++SDK-v2.1.3.0.

1/**
2* @brief Ustawia tryb sterowania osi rozszerzonej 485
3* @param [in] servoId ID serwonapędu, zakres [1-15], odpowiada ID stacji podrzędnej
4* @param [in] mode Tryb sterowania, 0 - tryb pozycyjny, 1 - tryb prędkościowy
5* @return Kod błędu
6*/
7errno_t AuxServoSetControlMode(int servoId, int mode);

13.5. Ustawianie pozycji docelowej osi rozszerzonej 485 (tryb pozycyjny)

Nowe w wersji C++SDK-v2.1.3.0.

1/**
2* @brief Ustawia pozycję docelową osi rozszerzonej 485 (tryb pozycyjny)
3* @param [in] servoId ID serwonapędu, zakres [1-15], odpowiada ID stacji podrzędnej
4* @param [in] pos Pozycja docelowa, mm lub °
5* @param [in] speed Prędkość docelowa, mm/s lub °/s
6* @return Kod błędu
7*/
8errno_t AuxServoSetTargetPos(int servoId, double pos, double speed);

13.6. Ustawianie momentu obrotowego docelowego osi rozszerzonej 485 (tryb momentowy) - Tymczasowo niedostępne

Nowe w wersji C++SDK-v2.1.3.0.

1/**
2* @brief Ustawia moment obrotowy docelowy osi rozszerzonej 485 (tryb momentowy)
3* @param [in] servoId ID serwonapędu, zakres [1-15], odpowiada ID stacji podrzędnej
4* @param [in] torque Moment docelowy, Nm
5* @return Kod błędu
6*/
7errno_t AuxServoSetTargetTorque(int servoId, double torque);

13.7. Ustawianie powrotu do zera osi rozszerzonej 485

Nowe w wersji C++SDK-v2.1.3.0.

1/**
2* @brief Ustawia powrót do zera osi rozszerzonej 485
3* @param [in] servoId ID serwonapędu, zakres [1-15], odpowiada ID stacji podrzędnej
4* @param [in] mode Tryb powrotu do zera, 0 - powrót do bieżącej pozycji; 1 - powrót do ogranicznika
5* @param [in] searchVel Prędkość poszukiwania zera, mm/s lub °/s
6* @param [in] latchVel Prędkość zatrzaskiwania, mm/s lub °/s
7* @return Kod błędu
8*/
9errno_t AuxServoHoming(int servoId, int mode, double searchVel, double latchVel);

13.8. Czyszczenie informacji o błędzie osi rozszerzonej 485

Nowe w wersji C++SDK-v2.1.3.0.

1/**
2* @brief Czyści informacje o błędzie osi rozszerzonej 485
3* @param [in] servoId ID serwonapędu, zakres [1-15], odpowiada ID stacji podrzędnej
4* @return Kod błędu
5*/
6errno_t AuxServoClearError(int servoId);

13.9. Pobieranie stanu serwonapędu osi rozszerzonej 485

Nowe w wersji C++SDK-v2.1.3.0.

 1/**
 2* @brief Pobiera stan serwonapędu osi rozszerzonej 485
 3* @param [in] servoId ID serwonapędu, zakres [1-15], odpowiada ID stacji podrzędnej
 4* @param [out] servoErrCode Kod błędu serwonapędu
 5* @param [out] servoState Stan serwonapędu [liczba dziesiętna konwertowana na binarną, bit0-bit5: serwonapęd włączony - serwonapęd pracuje - zadziałanie dodatniego ogranicznika - zadziałanie ujemnego ogranicznika - pozycjonowanie zakończone - powrót do zera zakończony]
 6* @param [out] servoPos Bieżąca pozycja serwonapędu mm lub °
 7* @param [out] servoSpeed Bieżąca prędkość serwonapędu mm/s lub °/s
 8* @param [out] servoTorque Bieżący moment obrotowy serwonapędu Nm
 9* @return Kod błędu
10*/
11errno_t AuxServoGetStatus(int servoId, int* servoErrCode, int* servoState, double* servoPos, double* servoSpeed, double* servoTorque);

13.10. Ustawianie prędkości docelowej osi rozszerzonej 485 (tryb prędkościowy)

Nowe w wersji C++SDK-v2.1.3.0.

1/**
2* @brief Ustawia prędkość docelową osi rozszerzonej 485 (tryb prędkościowy)
3* @param [in] servoId ID serwonapędu, zakres [1-15], odpowiada ID stacji podrzędnej
4* @param [in] speed Prędkość docelowa, mm/s lub °/s
5* @return Kod błędu
6*/
7errno_t AuxServoSetTargetSpeed(int servoId, double speed);

13.11. Ustawianie numeru osi danych osi rozszerzonej 485 w sprzężeniu zwrotnym stanu

Nowe w wersji C++SDK-v2.1.3.0.

1/**
2* @brief Ustawia numer osi danych osi rozszerzonej 485 w sprzężeniu zwrotnym stanu
3* @param [in] servoId ID serwonapędu, zakres [1-15], odpowiada ID stacji podrzędnej
4* @return Kod błędu
5*/
6errno_t AuxServosetStatusID(int servoId);

13.12. Ustawianie przyspieszenia i opóźnienia ruchu osi rozszerzonej 485

Nowe w wersji C++SDK-v2.1.5.0.

1/**
2* @brief Ustawia przyspieszenie i opóźnienie ruchu osi rozszerzonej 485
3* @param [in] acc Przyspieszenie ruchu osi rozszerzonej 485
4* @param [in] dec Opóźnienie ruchu osi rozszerzonej 485
5* @return Kod błędu
6*/
7errno_t AuxServoSetAcc(double acc, double dec);

13.13. Ustawianie przyspieszenia i opóźnienia awaryjnego zatrzymania osi rozszerzonej 485

Nowe w wersji C++SDK-v2.1.5.0.

1/**
2* @brief Ustawia przyspieszenie i opóźnienie awaryjnego zatrzymania osi rozszerzonej 485
3* @param [in] acc Przyspieszenie awaryjnego zatrzymania osi rozszerzonej 485
4* @param [in] dec Opóźnienie awaryjnego zatrzymania osi rozszerzonej 485
5* @return Kod błędu
6*/
7errno_t AuxServoSetEmergencyStopAcc(double acc, double dec);

13.14. Pobieranie przyspieszenia i opóźnienia ruchu osi rozszerzonej 485

Nowe w wersji C++SDK-v2.1.5.0.

1/**
2* @brief Pobiera przyspieszenie i opóźnienie ruchu osi rozszerzonej 485
3* @param [out] acc Przyspieszenie ruchu osi rozszerzonej 485
4* @param [out] dec Opóźnienie ruchu osi rozszerzonej 485
5* @return Kod błędu
6*/
7errno_t AuxServoGetAcc(double& acc, double& dec);

13.15. Pobieranie przyspieszenia i opóźnienia awaryjnego zatrzymania osi rozszerzonej 485

Nowe w wersji C++SDK-v2.1.5.0.

1/**
2* @brief Pobiera przyspieszenie i opóźnienie awaryjnego zatrzymania osi rozszerzonej 485
3* @param [out] acc Przyspieszenie awaryjnego zatrzymania osi rozszerzonej 485
4* @param [out] dec Opóźnienie awaryjnego zatrzymania osi rozszerzonej 485
5* @return Kod błędu
6*/
7errno_t AuxServoGetEmergencyStopAcc(double& acc, double& dec);

13.16. Przykład kodu sterowania osią rozszerzoną

Nowe w wersji C++SDK-v2.1.5.0.

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

13.17. Konfiguracja parametrów komunikacji UDP dla osi rozszerzonej

 1/**
 2* @brief Konfiguruje parametry komunikacji UDP dla osi rozszerzonej
 3* @param [in] ip Adres IP PLC
 4* @param [in] port Numer portu
 5* @param [in] period Okres komunikacji (ms, domyślnie 2, nie modyfikować tego parametru)
 6* @param [in] lossPkgTime Czas wykrywania utraty pakietów (ms)
 7* @param [in] lossPkgNum Liczba utraconych pakietów
 8* @param [in] disconnectTime Czas potwierdzenia przerwania komunikacji
 9* @param [in] reconnectEnable Włączenie automatycznego ponownego łączenia po przerwaniu komunikacji 0 - nie włączone, 1 - włączone
10* @param [in] reconnectPeriod Odstęp między próbami ponownego łączenia (ms)
11* @param [in] reconnectNum Liczba prób ponownego łączenia
12* @param [in] selfConnect Czy automatycznie nawiązać połączenie po ponownym uruchomieniu zasilania; 0 - nie nawiązuj połączenia; 1 - nawiąż połączenie
13* @return Kod błędu
14*/
15errno_t ExtDevSetUDPComParam(std::string ip, int port, int period, int lossPkgTime, int lossPkgNum, int disconnectTime, int reconnectEnable, int reconnectPeriod, int reconnectNum, int selfConnect = 1);

13.18. Pobieranie konfiguracji parametrów komunikacji UDP dla osi rozszerzonej

Nowe w wersji C++SDK-v2.1.4.0.

 1/**
 2* @brief Pobiera parametry komunikacji UDP dla osi rozszerzonej
 3* @param [out] ip Adres IP PLC
 4* @param [out] port Numer portu
 5* @param [out] period Okres komunikacji (ms, domyślnie 2, nie modyfikować tego parametru)
 6* @param [out] lossPkgTime Czas wykrywania utraty pakietów (ms)
 7* @param [out] lossPkgNum Liczba utraconych pakietów
 8* @param [out] disconnectTime Czas potwierdzenia przerwania komunikacji
 9* @param [out] reconnectEnable Włączenie automatycznego ponownego łączenia po przerwaniu komunikacji 0 - nie włączone, 1 - włączone
10* @param [out] reconnectPeriod Odstęp między próbami ponownego łączenia (ms)
11* @param [out] reconnectNum Liczba prób ponownego łączenia
12* @param [out] selfStart Czy automatycznie ponownie połączyć po ponownym uruchomieniu szafy sterowniczej; 0 - nie łącz ponownie; 1 - łącz ponownie
13* @return Kod błędu
14*/
15errno_t ExtDevGetUDPComParam(std::string& ip, int& port, int& period, int& lossPkgTime, int& lossPkgNum, int& disconnectTime, int& reconnectEnable, int& reconnectPeriod, int& reconnectNum, int& selfConnect);

13.19. Ładowanie komunikacji UDP

Nowe w wersji C++SDK-v2.1.4.0.

1/**
2* @brief Ładuje komunikację UDP
3* @return Kod błędu
4*/
5errno_t ExtDevLoadUDPDriver();

13.20. Zwolnienie komunikacji UDP

Nowe w wersji C++SDK-v2.1.4.0.

1/**
2* @brief Zwolnienie komunikacji UDP
3* @return Kod błędu
4*/
5errno_t ExtDevUnloadUDPDriver();

13.21. Przywracanie połączenia po przerwaniu komunikacji UDP osi rozszerzonej

Nowe w wersji C++SDK-v2.1.4.0.

1/**
2* @brief Przywraca połączenie po przerwaniu komunikacji UDP osi rozszerzonej
3* @return Kod błędu
4*/
5errno_t ExtDevUDPClientComReset();

13.22. Zamykanie komunikacji po przerwaniu komunikacji UDP osi rozszerzonej

Nowe w wersji C++SDK-v2.1.4.0.

1/**
2* @brief Zamyka komunikację po przerwaniu komunikacji UDP osi rozszerzonej
3* @return Kod błędu
4*/
5errno_t ExtDevUDPClientComClose();

13.23. Konfiguracja parametrów osi rozszerzonej UDP

Nowe w wersji C++SDK-v2.1.4.0.

 1/**
 2* @brief Konfiguruje parametry osi rozszerzonej UDP
 3* @param [in] axisID Numer osi
 4* @param [in] axisType Typ osi rozszerzonej 0 - przesuwna; 1 - obrotowa
 5* @param [in] axisDirection Kierunek osi rozszerzonej 0 - dodatni; 1 - ujemny
 6* @param [in] axisMax Maksymalna pozycja osi rozszerzonej mm
 7* @param [in] axisMin Minimalna pozycja osi rozszerzonej mm
 8* @param [in] axisVel Prędkość mm/s
 9* @param [in] axisAcc Przyspieszenie mm/s2
10* @param [in] axisLead Skok śruby pociągowej mm
11* @param [in] encResolution Rozdzielczość enkodera
12* @param [in] axisOffect Przesunięcie osi rozszerzonej punktu początkowego spoiny
13* @param [in] axisCompany Producent sterownika 1 - Hechuan; 2 - Huichuan; 3 - Panasonic
14* @param [in] axisModel Model sterownika 1 - Hechuan-SV-XD3EA040L-E, 2 - Hechuan-SV-X2EA150A-A, 1 - Huichuan-SV620PT5R4I, 1 - Panasonic-MADLN15SG, 2 - Panasonic-MSDLN25SG, 3 - Panasonic-MCDLN35SG
15* @param [in] axisEncType Typ enkodera 0 - inkrementalny; 1 - absolutny
16* @return Kod błędu
17*/
18errno_t ExtAxisParamConfig(int axisID, int axisType, int axisDirection, double axisMax, double axisMin, double axisVel, double axisAcc, double axisLead, long encResolution, double axisOffect, int axisCompany, int axisModel, int axisEncType);

13.24. Pobieranie parametrów osi rozszerzonej UDP

 1/**
 2* @brief Pobiera parametry osi rozszerzonej UDP
 3* @param [in] axisID Numer osi rozszerzonej [1-4]
 4* @param [out] axisType Typ osi rozszerzonej 0 - przesuwna; 1 - obrotowa
 5* @param [out] axisDirection Kierunek osi rozszerzonej 0 - dodatni; 1 - ujemny
 6* @param [out] axisMax Maksymalna pozycja osi rozszerzonej mm
 7* @param [out] axisMin Minimalna pozycja osi rozszerzonej mm
 8* @param [out] axisVel Prędkość mm/s
 9* @param [out] axisAcc Przyspieszenie mm/s2
10* @param [out] axisLead Skok śruby pociągowej mm
11* @param [out] encResolution Rozdzielczość enkodera
12* @param [out] axisOffect Przesunięcie osi rozszerzonej punktu początkowego spoiny
13* @param [out] axisCompany Producent sterownika 1 - Hechuan; 2 - Huichuan; 3 - Panasonic
14* @param [out] axisModel Model sterownika 1 - Hechuan-SV-XD3EA040L-E, 2 - Hechuan-SV-X2EA150A-A, 1 - Huichuan-SV620PT5R4I, 1 - Panasonic-MADLN15SG, 2 - Panasonic-MSDLN25SG, 3 - Panasonic-MCDLN35SG
15* @param [out] axisEncType Typ enkodera 0 - inkrementalny; 1 - absolutny
16* @return Kod błędu
17*/
18errno_t ExtAxisGetParamConfig(int axisID, int& axisType, int& axisDirection, double& axisMax, double& axisMin, double& axisVel, double& axisAcc, double& axisLead, int& encResolution, double& axisOffect, int& axisCompany, int& axisModel, int& axisEncType);

13.25. Ustawianie pozycji montażowej osi rozszerzonej

Nowe w wersji C++SDK-v2.1.4.0.

1/**
2* @brief Ustawia pozycję montażową osi rozszerzonej
3* @param [in] installType 0 - robot zamontowany na osi zewnętrznej, 1 - robot zamontowany poza osią zewnętrzną
4* @return Kod błędu
5*/
6errno_t SetRobotPosToAxis(int installType);

13.26. Ustawianie konfiguracji parametrów DH systemu osi rozszerzonej

Nowe w wersji C++SDK-v2.1.4.0.

 1/**
 2* @brief Ustawia konfigurację parametrów DH systemu osi rozszerzonej
 3* @param [in]  axisConfig Konfiguracja osi zewnętrznej, 0 - jednokierunkowa prosta szyna szynowa, 1 - dwukierunkowa pozycjoner typu L, 2 - trzykierunkowa, 3 - czterokierunkowa, 4 - jednokierunkowy pozycjoner
 4* @param [in]  axisDHd1 Parametr DH osi zewnętrznej d1 mm
 5* @param [in]  axisDHd2 Parametr DH osi zewnętrznej d2 mm
 6* @param [in]  axisDHd3 Parametr DH osi zewnętrznej d3 mm
 7* @param [in]  axisDHd4 Parametr DH osi zewnętrznej d4 mm
 8* @param [in]  axisDHa1 Parametr DH osi zewnętrznej a1 mm
 9* @param [in]  axisDHa2 Parametr DH osi zewnętrznej a2 mm
10* @param [in]  axisDHa3 Parametr DH osi zewnętrznej a3 mm
11* @param [in]  axisDHa4 Parametr DH osi zewnętrznej a4 mm
12* @return Kod błędu
13*/
14errno_t SetAxisDHParaConfig(int axisConfig, double axisDHd1, double axisDHd2, double axisDHd3, double axisDHd4, double axisDHa1, double axisDHa2, double axisDHa3, double axisDHa4);

13.27. Włączanie zasilania osi rozszerzonej UDP

Nowe w wersji C++SDK-v2.1.4.0.

1/**
2* @brief Włącza zasilanie osi rozszerzonej UDP
3* @param [in] axisID Numer osi [1-4]
4* @param [in] status 0 - wyłączone; 1 - włączone
5* @return Kod błędu
6*/
7errno_t ExtAxisServoOn(int axisID, int status);

13.28. Powrót do zera osi rozszerzonej UDP

Nowe w wersji C++SDK-v2.1.4.0.

1/**
2* @brief Powrót do zera osi rozszerzonej UDP
3* @param [in] axisID Numer osi [1-4]
4* @param [in] mode Sposób powrotu do zera 0 - powrót do bieżącej pozycji, 1 - powrót do ujemnego ogranicznika, 2 - powrót do dodatniego ogranicznika
5* @param [in] searchVel Prędkość poszukiwania zera (mm/s)
6* @param [in] latchVel Prędkość zatrzaskiwania zera (mm/s)
7* @return Kod błędu
8*/
9errno_t ExtAxisSetHoming(int axisID, int mode, double searchVel, double latchVel);

13.29. Rozpoczęcie ruchu jałowego osi rozszerzonej UDP

Nowe w wersji C++SDK-v2.1.4.0.

 1/**
 2* @brief Rozpoczyna ruch jałowy osi rozszerzonej UDP
 3* @param [in] axisID Numer osi [1-4]
 4* @param [in] direction Kierunek obrotu 0 - przeciwny; 1 - zgodny
 5* @param [in] vel Prędkość (mm/s)
 6* @param [in] acc Przyspieszenie (mm/s2)
 7* @param [in] maxDistance Maksymalna odległość ruchu jałowego
 8* @return Kod błędu
 9*/
10errno_t ExtAxisStartJog(int axisID, int direction, double vel, double acc, double maxDistance);

13.30. Zatrzymanie ruchu jałowego osi rozszerzonej UDP

Nowe w wersji C++SDK-v2.1.4.0.

1/**
2* @brief Zatrzymuje ruch jałowy osi rozszerzonej UDP
3* @param [in] axisID Numer osi [1-4]
4* @return Kod błędu
5*/
6errno_t ExtAxisStopJog(int axisID);

13.31. Przykład kodu konfiguracji i ruchu jałowego osi rozszerzonej UDP

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

13.32. Ustawianie punktu odniesienia układu współrzędnych osi rozszerzonej - metoda czterech punktów

Nowe w wersji C++SDK-v2.1.4.0.

1/**
2* @brief Ustawia punkt odniesienia układu współrzędnych osi rozszerzonej - metoda czterech punktów
3* @param [in]  pointNum Numer punktu [1-4]
4* @return Kod błędu
5*/
6errno_t ExtAxisSetRefPoint(int pointNum);

13.33. Obliczanie układu współrzędnych osi rozszerzonej - metoda czterech punktów

Nowe w wersji C++SDK-v2.1.4.0.

1/**
2* @brief Oblicza układ współrzędnych osi rozszerzonej - metoda czterech punktów
3* @param [out]  coord Wartości układu współrzędnych
4* @return Kod błędu
5*/
6errno_t ExtAxisComputeECoordSys(DescPose& coord);

13.34. Ustawianie punktu odniesienia układu współrzędnych pozycjonera

Nowe w wersji C++SDK-v2.1.4.0.

1/**
2* @brief Ustawia punkt odniesienia układu współrzędnych pozycjonera
3* @param [in]  pointNum Numer punktu [1-4]
4* @return Kod błędu
5*/
6errno_t PositionorSetRefPoint(int pointNum);

13.35. Obliczanie układu współrzędnych pozycjonera - metoda czterech punktów

Nowe w wersji C++SDK-v2.1.4.0.

1/**
2* @brief Oblicza układ współrzędnych pozycjonera - metoda czterech punktów
3* @param [out] coord Wartości układu współrzędnych
4* @return Kod błędu
5*/
6errno_t PositionorComputeECoordSys(DescPose& coord);

13.36. Ustawianie pozy i orientacji punktu odniesienia kalibracji w układzie współrzędnych końcówki pozycjonera

Nowe w wersji C++SDK-v2.1.4.0.

1/**
2* @brief Ustawia pozy i orientację punktu odniesienia kalibracji w układzie współrzędnych końcówki pozycjonera
3* @param [in] pos Wartości pozy i orientacji
4* @return Kod błędu
5*/
6errno_t SetRefPointInExAxisEnd(DescPose pos);

13.37. Stosowanie układu współrzędnych osi rozszerzonej

Nowe w wersji C++SDK-v2.1.4.0.

1/**
2* @brief Stosuje układ współrzędnych osi rozszerzonej
3* @param [in]  applyAxisId Numer osi rozszerzonej bit0-bit3 odpowiada numerom osi rozszerzonej 1-4, np. zastosowanie osi rozszerzonych 1 i 3 to 0b 0000 0101; czyli 5
4* @param [in]  axisCoordNum Numer układu współrzędnych osi rozszerzonej
5* @param [in]  coord Wartości układu współrzędnych
6* @param [in]  calibFlag Flaga kalibracji 0 - nie, 1 - tak
7* @return Kod błędu
8*/
9errno_t ExtAxisActiveECoordSys(int applyAxisId, int axisCoordNum, DescPose coord, int calibFlag);

13.38. Pobieranie układu współrzędnych osi rozszerzonej

1/**
2* @brief Pobiera układ współrzędnych osi rozszerzonej
3* @param [out] coord Układ współrzędnych osi rozszerzonej
4* @return Kod błędu
5*/
6errno_t ExtAxisGetCoord(DescPose& coord);

13.39. Przykład kodu kalibracji układu współrzędnych osi rozszerzonej

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

13.40. Ruch osi rozszerzonej UDP

Zmienione w wersji C++SDK-v2.2.4.0.

1/**
2* @brief Ruch osi rozszerzonej UDP
3* @param [in] pos Pozycja docelowa
4* @param [in] ovl Procent prędkości
5* @param [in] blend Parametr wygładzania (mm lub ms); -1: oczekuj na zakończenie ruchu
6* @return Kod błędu
7*/
8errno_t ExtAxisMove(ExaxisPos pos, double ovl, double blend = -1);

13.41. Przykład kodu ruchu osi rozszerzonej UDP

 1int TestUDPAxisCalib(void)
 2{
 3  ROBOT_STATE_PKG pkg = {};
 4  FRRobot robot;
 5  robot.LoggerInit();
 6  robot.SetLoggerLevel(1);
 7  int rtn = robot.RPC("192.168.58.2");
 8  if (rtn != 0)
 9  {
10    return -1;
11  }
12  ExaxisPos axisPos;
13  axisPos.ePos[0] = 20;
14  axisPos.ePos[1] = 0;
15  axisPos.ePos[2] = 0;
16  axisPos.ePos[3] = 0;
17  robot.ExtAxisMove(axisPos, 50);
18  robot.CloseRPC();
19  return 0;
20}

13.42. Ruch synchroniczny osi rozszerzonej UDP z ruchem stawowym robota

Nowe w wersji C++SDK-v2.1.4.0.

 1/**
 2* @brief Ruch synchroniczny osi rozszerzonej UDP z ruchem stawowym robota
 3* @param [in] joint_pos Docelowa pozycja stawów, jednostka deg
 4* @param [in] desc_pos Docelowa poza i orientacja w kartezjańskim układzie współrzędnych
 5* @param [in] tool Numer narzędzia, zakres [0~14]
 6* @param [in] user Numer obiektu, zakres [0~14]
 7* @param [in] vel Procent prędkości, zakres [0~100]
 8* @param [in] acc Procent przyspieszenia, zakres [0~100], tymczasowo niedostępne
 9* @param [in] ovl Współczynnik skalowania prędkości, zakres [0~100]
10* @param [in] epos Pozycja osi rozszerzonej, jednostka mm
11* @param [in] blendT [-1.0] - ruch do pozycji (blokujący), [0~500.0] - czas wygładzania (nieblokujący), jednostka ms
12* @param [in] offset_flag 0 - brak przesunięcia, 1 - przesunięcie w układzie bazowym/układzie obiektu, 2 - przesunięcie w układzie narzędzia
13* @param [in] offset_pos Wartość przesunięcia pozy i orientacji
14* @return Kod błędu
15*/
16errno_t ExtAxisSyncMoveJ(JointPos joint_pos, DescPose desc_pos, int tool, int user, float vel, float acc, float ovl, ExaxisPos epos, float blendT, byte offset_flag, DescPose offset_pos);

13.43. Ruch synchroniczny osi rozszerzonej UDP z ruchem stawowym robota (automatyczne obliczanie prostej kinematyki)

 1/**
 2* @brief Ruch synchroniczny osi rozszerzonej UDP z ruchem stawowym robota (automatyczne obliczanie prostej kinematyki)
 3* @param [in] joint_pos Docelowa pozycja stawów, jednostka deg
 4* @param [in] tool Numer narzędzia, zakres [0~14]
 5* @param [in] user Numer obiektu, zakres [0~14]
 6* @param [in] vel Procent prędkości, zakres [0~100]
 7* @param [in] acc Procent przyspieszenia, zakres [0~100], tymczasowo niedostępne
 8* @param [in] ovl Współczynnik skalowania prędkości, zakres [0~100]
 9* @param [in] epos Pozycja osi rozszerzonej, jednostka mm
10* @param [in] blendT [-1.0] - ruch do pozycji (blokujący), [0~500.0] - czas wygładzania (nieblokujący), jednostka ms
11* @param [in] offset_flag 0 - brak przesunięcia, 1 - przesunięcie w układzie bazowym/układzie obiektu, 2 - przesunięcie w układzie narzędzia
12* @param [in] offset_pos Wartość przesunięcia pozy i orientacji
13* @return Kod błędu
14*/
15errno_t ExtAxisSyncMoveJ(JointPos joint_pos, int tool, int user, float vel, float acc, float ovl, ExaxisPos epos, float blendT, uint8_t offset_flag, DescPose offset_pos);

13.44. Przykład kodu ruchu synchronicznego z ruchem stawowym robota

 1int testSyncMoveJ()
 2{
 3  ROBOT_STATE_PKG pkg = {};
 4  FRRobot robot;
 5  robot.LoggerInit();
 6  robot.SetLoggerLevel(1);
 7  int rtn = robot.RPC("192.168.58.2");
 8  if (rtn != 0)
 9  {
10    return -1;
11  }
12  robot.SetReConnectParam(true, 30000, 500);
13  //1. Kalibracja i zastosowanie układu współrzędnych narzędzia robota. Możesz użyć metody czterech lub sześciu punktów do kalibracji i zastosowania układu współrzędnych narzędzia. Interfejsy związane z kalibracją układu współrzędnych narzędzia są następujące:
14  //  int SetToolPoint(int point_num); //Ustawia punkt odniesienia narzędzia - metoda sześciu punktów
15  //  int ComputeTool(ref DescPose tcp_pose); //Oblicza układ współrzędnych narzędzia
16  //  int SetTcp4RefPoint(int point_num);  //Ustawia punkt odniesienia narzędzia - metoda czterech punktów
17  //  int ComputeTcp4(ref DescPose tcp_pose);  //Oblicza układ współrzędnych narzędzia - metoda czterech punktów
18  //  int SetToolCoord(int id, DescPose coord, int type, int install); //Ustawia i stosuje układ współrzędnych narzędzia
19  //  int SetToolList(int id, DescPose coord, int type, int install);  //Ustawia i stosuje listę układów współrzędnych narzędzia
20  //2. Ustaw parametry komunikacji UDP i załaduj komunikację UDP
21  robot.ExtDevSetUDPComParam("192.168.58.88", 2021, 2, 100, 3, 100, 1, 100, 10);
22  robot.ExtDevLoadUDPDriver();
23  //3. Ustaw parametry osi rozszerzonej, w tym typ osi rozszerzonej, parametry sterownika osi rozszerzonej, parametry DH osi rozszerzonej
24  robot.SetAxisDHParaConfig(4, 200, 200, 0, 0, 0, 0, 0, 0); //Jednoosiowy pozycjoner i parametry DH
25  robot.SetRobotPosToAxis(1); //Pozycja montażowa osi rozszerzonej
26  robot.ExtAxisParamConfig(1, 0, 1, 100, -100, 10, 10, 12, 131072, 0, 1, 0, 0); //Parametry sterownika serwonapędu. W tym przykładzie dla pozycjonera jednoosiowego wystarczy ustawić parametry jednego sterownika. Jeśli wybierzesz typ osi rozszerzonej zawierający wiele osi, musisz ustawić parametry sterownika dla każdej osi.
27  //4. Włącz zasilanie wybranej osi i wykonaj powrót do zera
28  robot.ExtAxisServoOn(1, 0);
29  robot.ExtAxisSetHoming(1, 0, 20, 3);
30  //5. Wykonaj kalibrację układu współrzędnych osi rozszerzonej i zastosuj go
31  DescPose pos = {/* Wprowadź współrzędne swojego punktu kalibracyjnego */ };
32  robot.SetRefPointInExAxisEnd(pos);
33  robot.PositionorSetRefPoint(1); /*Musisz skalibrować oś rozszerzoną za pomocą czterech różnych pozycji punktów, dlatego musisz wywołać ten interfejs 4 razy, aby zakończyć kalibrację */
34  DescPose coord = {};
35  robot.PositionorComputeECoordSys(coord); //Oblicz wynik kalibracji osi rozszerzonej
36  robot.ExtAxisActiveECoordSys(1, 1, coord, 1); //Zastosuj wynik kalibracji do układu współrzędnych osi rozszerzonej
37  //6. Kalibracja układu współrzędnych obiektu na osi rozszerzonej. Będziesz potrzebować następujących interfejsów:
38  //int SetWObjCoordPoint(int point_num);
39  //int ComputeWObjCoord(int method, ref DescPose wobj_pose);
40  //int SetWObjCoord(int id, DescPose coord);
41  //int SetWObjList(int id, DescPose coord);
42  //7. Zapisz punkt początkowy synchronicznego ruchu stawowego
43  DescPose startdescPose = {/* Wprowadź swoje współrzędne */ };
44  JointPos startjointPos = {/* Wprowadź swoje współrzędne */ };
45  ExaxisPos startexaxisPos = {/* Wprowadź współrzędne punktu początkowego osi rozszerzonej */ };
46  //8. Zapisz współrzędne punktu końcowego synchronicznego ruchu stawowego
47  DescPose enddescPose = {/* Wprowadź swoje współrzędne */ };
48  JointPos endjointPos = {/* Wprowadź swoje współrzędne */ };
49  ExaxisPos endexaxisPos = {/* Wprowadź współrzędne punktu końcowego osi rozszerzonej */ };
50  //9. Napisz program ruchu synchronicznego
51  //Przejedź do punktu początkowego, zakładając, że stosowane układy współrzędnych narzędzia i obiektu to 1
52  robot.ExtAxisMove(startexaxisPos, 20);
53  DescPose offdese = { 0, 0, 0, 0, 0, 0 };
54  robot.MoveJ(&startjointPos, &startdescPose, 1, 1, 100, 100, 100, &startexaxisPos, 0, 0, &offdese);
55  //Rozpocznij ruch synchroniczny
56  robot.ExtAxisSyncMoveJ(endjointPos, enddescPose, 1, 1, 100, 100, 100, endexaxisPos, -1, 0, offdese);
57  robot.MoveJ(&startjointPos, 1, 1, 100, 100, 100, &startexaxisPos, 0, 0, &offdese);
58  //Rozpocznij ruch synchroniczny
59  robot.ExtAxisSyncMoveJ(endjointPos, 1, 1, 100, 100, 100, endexaxisPos, -1, 0, offdese);
60  robot.CloseRPC();
61}

13.45. Ruch synchroniczny osi rozszerzonej UDP z ruchem liniowym robota

Nowe w wersji C++SDK-v2.1.4.0.

 1/**
 2* @brief Ruch synchroniczny osi rozszerzonej UDP z ruchem liniowym robota
 3* @param [in] joint_pos Docelowa pozycja stawów, jednostka deg
 4* @param [in] desc_pos Docelowa poza i orientacja w kartezjańskim układzie współrzędnych
 5* @param [in] tool Numer narzędzia, zakres [0~14]
 6* @param [in] user Numer obiektu, zakres [0~14]
 7* @param [in] vel Procent prędkości, zakres [0~100]
 8* @param [in] acc Procent przyspieszenia, zakres [0~100], tymczasowo niedostępne
 9* @param [in] ovl Współczynnik skalowania prędkości, zakres [0~100]
10* @param [in] blendR [-1.0] - ruch do pozycji (blokujący), [0~1000.0] - promień wygładzania (nieblokujący), jednostka mm
11* @param [in] epos Pozycja osi rozszerzonej, jednostka mm
12* @param [in] offset_flag 0 - brak przesunięcia, 1 - przesunięcie w układzie bazowym/układzie obiektu, 2 - przesunięcie w układzie narzędzia
13* @param [in] offset_pos Wartość przesunięcia pozy i orientacji
14* @return Kod błędu
15*/
16errno_t ExtAxisSyncMoveL(JointPos joint_pos, DescPose desc_pos, int tool, int user, float vel, float acc, float ovl, float blendR, ExaxisPos epos, int offset_flag, DescPose offset_pos);

13.46. Ruch synchroniczny osi rozszerzonej UDP z ruchem liniowym robota (automatyczne obliczanie odwrotnej kinematyki)

 1/**
 2* @brief Ruch synchroniczny osi rozszerzonej UDP z ruchem liniowym robota (automatyczne obliczanie odwrotnej kinematyki)
 3* @param [in] desc_pos Docelowa poza i orientacja w kartezjańskim układzie współrzędnych
 4* @param [in] tool Numer narzędzia, zakres [0~14]
 5* @param [in] user Numer obiektu, zakres [0~14]
 6* @param [in] vel Procent prędkości, zakres [0~100]
 7* @param [in] acc Procent przyspieszenia, zakres [0~100], tymczasowo niedostępne
 8* @param [in] ovl Współczynnik skalowania prędkości, zakres [0~100]
 9* @param [in] blendR [-1.0] - ruch do pozycji (blokujący), [0~1000.0] - promień wygładzania (nieblokujący), jednostka mm
10* @param [in] epos Pozycja osi rozszerzonej, jednostka mm
11* @param [in] offset_flag 0 - brak przesunięcia, 1 - przesunięcie w układzie bazowym/układzie obiektu, 2 - przesunięcie w układzie narzędzia
12* @param [in] offset_pos Wartość przesunięcia pozy i orientacji
13* @param [in] config Konfiguracja przestrzeni stawów dla odwrotnej kinematyki, [-1] - obliczenia w oparciu o bieżącą pozycję stawów, [0~7] - obliczenia zgodnie z określoną konfiguracją przestrzeni stawów
14* @return Kod błędu
15*/
16errno_t ExtAxisSyncMoveL(DescPose desc_pos, int tool, int user, float vel, float acc, float ovl, float blendR, ExaxisPos epos, uint8_t offset_flag, DescPose offset_pos, int config = -1);

13.47. Przykład kodu ruchu synchronicznego z ruchem liniowym robota

 1int testSyncMoveL()
 2{
 3  ROBOT_STATE_PKG pkg = {};
 4  FRRobot robot;
 5  robot.LoggerInit();
 6  robot.SetLoggerLevel(1);
 7  int rtn = robot.RPC("192.168.58.2");
 8  if (rtn != 0)
 9  {
10    return -1;
11  }
12  robot.SetReConnectParam(true, 30000, 500);
13  //1. Kalibracja i zastosowanie układu współrzędnych narzędzia robota. Możesz użyć metody czterech lub sześciu punktów do kalibracji i zastosowania układu współrzędnych narzędzia. Interfejsy związane z kalibracją układu współrzędnych narzędzia są następujące:
14  //  int SetToolPoint(int point_num); //Ustawia punkt odniesienia narzędzia - metoda sześciu punktów
15  //  int ComputeTool(ref DescPose tcp_pose); //Oblicza układ współrzędnych narzędzia
16  //  int SetTcp4RefPoint(int point_num);  //Ustawia punkt odniesienia narzędzia - metoda czterech punktów
17  //  int ComputeTcp4(ref DescPose tcp_pose);  //Oblicza układ współrzędnych narzędzia - metoda czterech punktów
18  //  int SetToolCoord(int id, DescPose coord, int type, int install); //Ustawia i stosuje układ współrzędnych narzędzia
19  //  int SetToolList(int id, DescPose coord, int type, int install);  //Ustawia i stosuje listę układów współrzędnych narzędzia
20  //2. Ustaw parametry komunikacji UDP i załaduj komunikację UDP
21  robot.ExtDevSetUDPComParam("192.168.58.88", 2021, 2, 100, 3, 100, 1, 100, 10);
22  robot.ExtDevLoadUDPDriver();
23  //3. Ustaw parametry osi rozszerzonej, w tym typ osi rozszerzonej, parametry sterownika osi rozszerzonej, parametry DH osi rozszerzonej
24  robot.SetAxisDHParaConfig(4, 200, 200, 0, 0, 0, 0, 0, 0); //Jednoosiowy pozycjoner i parametry DH
25  robot.SetRobotPosToAxis(1); //Pozycja montażowa osi rozszerzonej
26  robot.ExtAxisParamConfig(1, 0, 1, 100, -100, 10, 10, 12, 131072, 0, 1, 0, 0); //Parametry sterownika serwonapędu. W tym przykładzie dla pozycjonera jednoosiowego wystarczy ustawić parametry jednego sterownika. Jeśli wybierzesz typ osi rozszerzonej zawierający wiele osi, musisz ustawić parametry sterownika dla każdej osi.
27  //4. Włącz zasilanie wybranej osi i wykonaj powrót do zera
28  robot.ExtAxisServoOn(1, 0);
29  robot.ExtAxisSetHoming(1, 0, 20, 3);
30  //5. Wykonaj kalibrację układu współrzędnych osi rozszerzonej i zastosuj go
31  DescPose pos = {/* Wprowadź współrzędne swojego punktu kalibracyjnego */ };
32  robot.SetRefPointInExAxisEnd(pos);
33  robot.PositionorSetRefPoint(1); /*Musisz skalibrować oś rozszerzoną za pomocą czterech różnych pozycji punktów, dlatego musisz wywołać ten interfejs 4 razy, aby zakończyć kalibrację */
34  DescPose coord = {};
35  robot.PositionorComputeECoordSys(coord); //Oblicz wynik kalibracji osi rozszerzonej
36  robot.ExtAxisActiveECoordSys(1, 1, coord, 1); //Zastosuj wynik kalibracji do układu współrzędnych osi rozszerzonej
37  //6. Kalibracja układu współrzędnych obiektu na osi rozszerzonej. Będziesz potrzebować następujących interfejsów:
38  //int SetWObjCoordPoint(int point_num);
39  //int ComputeWObjCoord(int method, ref DescPose wobj_pose);
40  //int SetWObjCoord(int id, DescPose coord);
41  //int SetWObjList(int id, DescPose coord);
42  //7. Zapisz punkt początkowy synchronicznego ruchu liniowego
43  DescPose startdescPose = {/* Wprowadź swoje współrzędne */ };
44  JointPos startjointPos = {/* Wprowadź swoje współrzędne */ };
45  ExaxisPos startexaxisPos = {/* Wprowadź współrzędne punktu początkowego osi rozszerzonej */ };
46  //8. Zapisz współrzędne punktu końcowego synchronicznego ruchu liniowego
47  DescPose enddescPose = {/* Wprowadź swoje współrzędne */ };
48  JointPos endjointPos = {/* Wprowadź swoje współrzędne */ };
49  ExaxisPos endexaxisPos = {/* Wprowadź współrzędne punktu końcowego osi rozszerzonej */ };
50  //9. Napisz program ruchu synchronicznego
51  //Przejedź do punktu początkowego, zakładając, że stosowane układy współrzędnych narzędzia i obiektu to 1
52  robot.ExtAxisMove(startexaxisPos, 20);
53  DescPose offdese = { 0, 0, 0, 0, 0, 0 };
54  robot.MoveJ(&startjointPos, &startdescPose, 1, 1, 100, 100, 100, &startexaxisPos, 0, 0, &offdese);
55  //Rozpocznij ruch synchroniczny
56  robot.ExtAxisSyncMoveL(endjointPos, enddescPose, 1, 1, 100, 100, 100, 0, endexaxisPos, 0, offdese);
57
58  robot.MoveJ(&startjointPos, 1, 1, 100, 100, 100, &startexaxisPos, 0, 0, &offdese);
59  //Rozpocznij ruch synchroniczny
60  robot.ExtAxisSyncMoveL(enddescPose, 1, 1, 100, 100, 100, 0, endexaxisPos, 0, offdese);
61  robot.CloseRPC();
62}

13.48. Ruch synchroniczny osi rozszerzonej UDP z ruchem łukowym robota

Nowe w wersji C++SDK-v2.1.4.0.

 1/**
 2* @brief Ruch synchroniczny osi rozszerzonej UDP z ruchem łukowym robota
 3* @param [in] joint_pos_p Pozycja stawów punktu pośredniego, jednostka deg
 4* @param [in] desc_pos_p Poza i orientacja punktu pośredniego w kartezjańskim układzie współrzędnych
 5* @param [in] ptool Numer narzędzia, zakres [0~14]
 6* @param [in] puser Numer obiektu, zakres [0~14]
 7* @param [in] pvel Procent prędkości, zakres [0~100]
 8* @param [in] pacc Procent przyspieszenia, zakres [0~100], tymczasowo niedostępne
 9* @param [in] epos_p Pozycja osi rozszerzonej punktu pośredniego, jednostka mm
10* @param [in] poffset_flag 0 - brak przesunięcia, 1 - przesunięcie w układzie bazowym/układzie obiektu, 2 - przesunięcie w układzie narzędzia
11* @param [in] offset_pos_p Wartość przesunięcia pozy i orientacji
12* @param [in] joint_pos_t Pozycja stawów punktu docelowego, jednostka deg
13* @param [in] desc_pos_t Poza i orientacja punktu docelowego w kartezjańskim układzie współrzędnych
14* @param [in] ttool Numer narzędzia, zakres [0~14]
15* @param [in] tuser Numer obiektu, zakres [0~14]
16* @param [in] tvel Procent prędkości, zakres [0~100]
17* @param [in] tacc Procent przyspieszenia, zakres [0~100], tymczasowo niedostępne
18* @param [in] epos_t Pozycja osi rozszerzonej punktu docelowego, jednostka mm
19* @param [in] toffset_flag 0 - brak przesunięcia, 1 - przesunięcie w układzie bazowym/układzie obiektu, 2 - przesunięcie w układzie narzędzia
20* @param [in] offset_pos_t Wartość przesunięcia pozy i orientacji
21* @param [in] ovl Współczynnik skalowania prędkości, zakres [0~100]
22* @param [in] blendR [-1.0] - ruch do pozycji (blokujący), [0~1000.0] - promień wygładzania (nieblokujący), jednostka mm
23* @return Kod błędu
24*/
25errno_t ExtAxisSyncMoveC(JointPos joint_pos_p, DescPose desc_pos_p, int ptool, int puser, float pvel, float pacc, ExaxisPos epos_p, int poffset_flag, DescPose offset_pos_p, JointPos joint_pos_t, DescPose desc_pos_t, int ttool, int tuser, float tvel, float tacc, ExaxisPos epos_t, int toffset_flag, DescPose offset_pos_t, float ovl, float blendR);

13.49. Ruch synchroniczny osi rozszerzonej UDP z ruchem łukowym robota (automatyczne obliczanie odwrotnej kinematyki)

 1/**
 2* @brief Ruch synchroniczny osi rozszerzonej UDP z ruchem łukowym robota (automatyczne obliczanie odwrotnej kinematyki)
 3* @param [in] desc_pos_p Poza i orientacja punktu pośredniego w kartezjańskim układzie współrzędnych
 4* @param [in] ptool Numer narzędzia, zakres [0~14]
 5* @param [in] puser Numer obiektu, zakres [0~14]
 6* @param [in] pvel Procent prędkości, zakres [0~100]
 7* @param [in] pacc Procent przyspieszenia, zakres [0~100], tymczasowo niedostępne
 8* @param [in] epos_p Pozycja osi rozszerzonej punktu pośredniego, jednostka mm
 9* @param [in] poffset_flag 0 - brak przesunięcia, 1 - przesunięcie w układzie bazowym/układzie obiektu, 2 - przesunięcie w układzie narzędzia
10* @param [in] offset_pos_p Wartość przesunięcia pozy i orientacji
11* @param [in] desc_pos_t Poza i orientacja punktu docelowego w kartezjańskim układzie współrzędnych
12* @param [in] ttool Numer narzędzia, zakres [0~14]
13* @param [in] tuser Numer obiektu, zakres [0~14]
14* @param [in] tvel Procent prędkości, zakres [0~100]
15* @param [in] tacc Procent przyspieszenia, zakres [0~100], tymczasowo niedostępne
16* @param [in] epos_t Pozycja osi rozszerzonej punktu docelowego, jednostka mm
17* @param [in] toffset_flag 0 - brak przesunięcia, 1 - przesunięcie w układzie bazowym/układzie obiektu, 2 - przesunięcie w układzie narzędzia
18* @param [in] offset_pos_t Wartość przesunięcia pozy i orientacji
19* @param [in] ovl Współczynnik skalowania prędkości, zakres [0~100]
20* @param [in] blendR [-1.0] - ruch do pozycji (blokujący), [0~1000.0] - promień wygładzania (nieblokujący), jednostka mm
21* @param [in] config Konfiguracja przestrzeni stawów dla odwrotnej kinematyki, [-1] - obliczenia w oparciu o bieżącą pozycję stawów, [0~7] - obliczenia zgodnie z określoną konfiguracją przestrzeni stawów
22* @return Kod błędu
23*/
24errno_t ExtAxisSyncMoveC(DescPose desc_pos_p, int ptool, int puser, float pvel, float pacc, ExaxisPos epos_p, uint8_t poffset_flag, DescPose offset_pos_p, DescPose desc_pos_t, int ttool, int tuser, float tvel, float tacc, ExaxisPos epos_t, uint8_t toffset_flag, DescPose offset_pos_t, float ovl, float blendR, int config = -1);

13.50. Przykład kodu ruchu synchronicznego z ruchem łukowym robota

 1int testSyncMoveC()
 2{
 3  ROBOT_STATE_PKG pkg = {};
 4  FRRobot robot;
 5  robot.LoggerInit();
 6  robot.SetLoggerLevel(1);
 7  int rtn = robot.RPC("192.168.58.2");
 8  if (rtn != 0)
 9  {
10    return -1;
11  }
12  robot.SetReConnectParam(true, 30000, 500);
13  //1. Kalibracja i zastosowanie układu współrzędnych narzędzia robota. Możesz użyć metody czterech lub sześciu punktów do kalibracji i zastosowania układu współrzędnych narzędzia. Interfejsy związane z kalibracją układu współrzędnych narzędzia są następujące:
14  //  int SetToolPoint(int point_num); //Ustawia punkt odniesienia narzędzia - metoda sześciu punktów
15  //  int ComputeTool(ref DescPose tcp_pose); //Oblicza układ współrzędnych narzędzia
16  //  int SetTcp4RefPoint(int point_num);  //Ustawia punkt odniesienia narzędzia - metoda czterech punktów
17  //  int ComputeTcp4(ref DescPose tcp_pose);  //Oblicza układ współrzędnych narzędzia - metoda czterech punktów
18  //  int SetToolCoord(int id, DescPose coord, int type, int install); //Ustawia i stosuje układ współrzędnych narzędzia
19  //  int SetToolList(int id, DescPose coord, int type, int install);  //Ustawia i stosuje listę układów współrzędnych narzędzia
20  //2. Ustaw parametry komunikacji UDP i załaduj komunikację UDP
21  robot.ExtDevSetUDPComParam("192.168.58.88", 2021, 2, 100, 3, 100, 1, 100, 10);
22  robot.ExtDevLoadUDPDriver();
23  //3. Ustaw parametry osi rozszerzonej, w tym typ osi rozszerzonej, parametry sterownika osi rozszerzonej, parametry DH osi rozszerzonej
24  robot.SetAxisDHParaConfig(4, 200, 200, 0, 0, 0, 0, 0, 0); //Jednoosiowy pozycjoner i parametry DH
25  robot.SetRobotPosToAxis(1); //Pozycja montażowa osi rozszerzonej
26  robot.ExtAxisParamConfig(1, 0, 1, 100, -100, 10, 10, 12, 131072, 0, 1, 0, 0); //Parametry sterownika serwonapędu. W tym przykładzie dla pozycjonera jednoosiowego wystarczy ustawić parametry jednego sterownika. Jeśli wybierzesz typ osi rozszerzonej zawierający wiele osi, musisz ustawić parametry sterownika dla każdej osi.
27  //4. Włącz zasilanie wybranej osi i wykonaj powrót do zera
28  robot.ExtAxisServoOn(1, 0);
29  robot.ExtAxisSetHoming(1, 0, 20, 3);
30  //5. Wykonaj kalibrację układu współrzędnych osi rozszerzonej i zastosuj go
31  DescPose pos = {/* Wprowadź współrzędne swojego punktu kalibracyjnego */ };
32  robot.SetRefPointInExAxisEnd(pos);
33  robot.PositionorSetRefPoint(1); /*Musisz skalibrować oś rozszerzoną za pomocą czterech różnych pozycji punktów, dlatego musisz wywołać ten interfejs 4 razy, aby zakończyć kalibrację */
34  DescPose coord = {};
35  robot.PositionorComputeECoordSys(coord); //Oblicz wynik kalibracji osi rozszerzonej
36  robot.ExtAxisActiveECoordSys(1, 1, coord, 1); //Zastosuj wynik kalibracji do układu współrzędnych osi rozszerzonej
37  //6. Kalibracja układu współrzędnych obiektu na osi rozszerzonej. Będziesz potrzebować następujących interfejsów:
38  //int SetWObjCoordPoint(int point_num);
39  //int ComputeWObjCoord(int method, ref DescPose wobj_pose);
40  //int SetWObjCoord(int id, DescPose coord);
41  //int SetWObjList(int id, DescPose coord);
42  //7. Zapisz punkt początkowy synchronicznego ruchu łukowego
43  DescPose startdescPose = {/* Wprowadź swoje współrzędne */ };
44  JointPos startjointPos = {/* Wprowadź swoje współrzędne */ };
45  ExaxisPos startexaxisPos = {/* Wprowadź współrzędne punktu początkowego osi rozszerzonej */ };
46  //8. Zapisz współrzędne punktu końcowego synchronicznego ruchu łukowego
47  DescPose enddescPose = {/* Wprowadź swoje współrzędne */ };
48  JointPos endjointPos = {/* Wprowadź swoje współrzędne */ };
49  ExaxisPos endexaxisPos = {/* Wprowadź współrzędne punktu końcowego osi rozszerzonej */ };
50  //9. Zapisz współrzędne punktu pośredniego synchronicznego ruchu łukowego
51  DescPose middescPose = {/* Wprowadź swoje współrzędne */ };
52  JointPos midjointPos = {/* Wprowadź swoje współrzędne */ };
53  ExaxisPos midexaxisPos = {/* Wprowadź współrzędne osi rozszerzonej w punkcie pośrednim łuku robota */ };
54  //10. Napisz program ruchu synchronicznego
55  //Przejedź do punktu początkowego, zakładając, że stosowane układy współrzędnych narzędzia i obiektu to 1
56  robot.ExtAxisMove(startexaxisPos, 20);
57  DescPose offdese = { 0, 0, 0, 0, 0, 0 };
58  robot.MoveJ(&startjointPos, &startdescPose, 1, 1, 100, 100, 100, &startexaxisPos, 0, 0, &offdese);
59  //Rozpocznij ruch synchroniczny
60  robot.ExtAxisSyncMoveC(midjointPos, middescPose, 1, 1, 100, 100, midexaxisPos, 0, offdese, endjointPos, enddescPose, 1, 1, 100, 100, endexaxisPos, 0, offdese, 100, 0);
61  robot.MoveJ(&startjointPos, 1, 1, 100, 100, 100, &startexaxisPos, 0, 0, &offdese);
62  //Rozpocznij ruch synchroniczny
63  robot.ExtAxisSyncMoveC(middescPose, 1, 1, 100, 100, midexaxisPos, 0, offdese, enddescPose, 1, 1, 100, 100, endexaxisPos, 0, offdese, 100, 0);
64  robot.CloseRPC();
65}

13.51. Ustawianie rozszerzonego wyjścia cyfrowego (DO)

Nowe w wersji C++SDK-v2.1.4.0.

1/**
2* @brief Ustawia rozszerzone wyjście cyfrowe (DO)
3* @param [in] DONum Numer DO
4* @param [in] bOpen Stan przełącznika true - włączone; false - wyłączone
5* @param [in] smooth Czy wygładzać
6* @param [in] block Czy blokować
7* @return Kod błędu
8*/
9errno_t SetAuxDO(int DONum, bool bOpen, bool smooth, bool block);

13.52. Ustawianie rozszerzonego wyjścia analogowego (AO)

Nowe w wersji C++SDK-v2.1.4.0.

1/**
2* @brief Ustawia rozszerzone wyjście analogowe (AO)
3* @param [in] AONum Numer AO
4* @param [in] value Wartość analogowa [0-4095]
5* @param [in] block Czy blokować
6* @return Kod błędu
7*/
8errno_t SetAuxAO(int AONum, double value, bool block);

13.53. Ustawianie czasu filtracji wejścia rozszerzonego DI

Nowe w wersji C++SDK-v2.1.4.0.

1/**
2* @brief Ustawia czas filtracji wejścia rozszerzonego DI
3* @param [in] filterTime Czas filtracji (ms)
4* @return Kod błędu
5*/
6errno_t SetAuxDIFilterTime(int filterTime);

13.54. Ustawianie czasu filtracji wejścia rozszerzonego AI

Nowe w wersji C++SDK-v2.1.4.0.

1/**
2* @brief Ustawia czas filtracji wejścia rozszerzonego AI
3* @param [in] filterTime Czas filtracji (ms)
4* @return Kod błędu
5*/
6errno_t SetAuxAIFilterTime(int filterTime);

13.55. Oczekiwanie na wejście rozszerzone DI

Nowe w wersji C++SDK-v2.1.4.0.

1/**
2* @brief Oczekuje na wejście rozszerzone DI
3* @param [in] DINum Numer DI
4* @param [in] bOpen Stan przełącznika 0 - wyłączone; 1 - włączone
5* @param [in] time Maksymalny czas oczekiwania (ms)
6* @param [in] errorAlarm Czy kontynuować ruch
7* @return Kod błędu
8*/
9errno_t WaitAuxDI(int DINum, bool bOpen, int time, bool errorAlarm);

13.56. Oczekiwanie na wejście rozszerzone AI

Nowe w wersji C++SDK-v2.1.4.0.

 1/**
 2* @brief Oczekuje na wejście rozszerzone AI
 3* @param [in] AINum Numer AI
 4* @param [in] sign 0 - większe niż; 1 - mniejsze niż
 5* @param [in] value Wartość AI
 6* @param [in] time Maksymalny czas oczekiwania (ms)
 7* @param [in] errorAlarm Czy kontynuować ruch
 8* @return Kod błędu
 9*/
10errno_t WaitAuxAI(int AINum, int sign, int value, int time, bool errorAlarm);

13.57. Pobieranie wartości rozszerzonego DI

Nowe w wersji C++SDK-v2.1.4.0.

1/**
2* @brief Pobiera wartość rozszerzonego DI
3* @param [in] DINum Numer DI
4* @param [in] isNoBlock Czy blokować
5* @param [out] isOpen 0 - wyłączone; 1 - włączone
6* @return Kod błędu
7*/
8errno_t GetAuxDI(int DINum, bool isNoBlock, bool& isOpen);

13.58. Pobieranie wartości rozszerzonego AI

Nowe w wersji C++SDK-v2.1.4.0.

1/**
2* @brief Pobiera wartość rozszerzonego AI
3* @param [in] AINum Numer AI
4* @param [in] isNoBlock Czy blokować
5* @param [in] value Wartość wejściowa
6* @return Kod błędu
7*/
8errno_t GetAuxAI(int AINum, bool isNoBlock, int& value);

13.59. Przykład kodu rozszerzonego IO

 1int TestAuxDOAO(void)
 2{
 3  ROBOT_STATE_PKG pkg = {};
 4  FRRobot robot;
 5  robot.LoggerInit();
 6  robot.SetLoggerLevel(1);
 7  int rtn = robot.RPC("192.168.58.2");
 8  if (rtn != 0)
 9  {
10    return -1;
11  }
12  robot.SetReConnectParam(true, 30000, 500);
13  for (int i = 0; i < 128; i++)
14  {
15    robot.SetAuxDO(i, true, false, true);
16    Sleep(100);
17  }
18  for (int i = 0; i < 128; i++)
19  {
20    robot.SetAuxDO(i, false, false, true);
21    Sleep(100);
22  }
23  for (int i = 0; i < 409; i++)
24  {
25    robot.SetAuxAO(0, i * 10, true);
26    robot.SetAuxAO(1, 4095 - i * 10, true);
27    robot.SetAuxAO(2, i * 10, true);
28    robot.SetAuxAO(3, 4095 - i * 10, true);
29    Sleep(10);
30  }
31  robot.SetAuxDIFilterTime(10);
32  robot.SetAuxAIFilterTime(0, 10);
33  for (int i = 0; i < 20; i++)
34  {
35    bool curValue = false;
36    int rtn = robot.GetAuxDI(i, false, curValue);
37    cout << "DI" << i << "  " << curValue << endl;
38  }
39  int curValue = -1;
40  for (int i = 0; i < 4; i++)
41  {
42    rtn = robot.GetAuxAI(i, true, curValue);
43  }
44  robot.WaitAuxDI(1, false, 1000, false);
45  robot.WaitAuxAI(1, 1, 132, 1000, false);
46  robot.CloseRPC();
47  return 0;
48}

13.60. Włączanie zasilania mobilnego urządzenia

Nowe w wersji C++SDK-v2.1.5.0.

1/**
2* @brief Włącza zasilanie mobilnego urządzenia
3* @param enable false - wyłączone; true - włączone
4* @return Kod błędu
5*/
6errno_t TractorEnable(bool enable);

13.61. Powrót do zera mobilnego urządzenia

Nowe w wersji C++SDK-v2.1.5.0.

1/**
2* @brief Powrót do zera mobilnego urządzenia
3* @return Kod błędu
4*/
5errno_t TractorHoming();

13.62. Ruch liniowy mobilnego urządzenia

Nowe w wersji C++SDK-v2.1.5.0.

1/**
2* @brief Ruch liniowy mobilnego urządzenia
3* @param distance Dystans ruchu liniowego (mm)
4* @param vel Procent prędkości ruchu liniowego (0-100)
5* @return Kod błędu
6*/
7errno_t TractorMoveL(double distance, double vel);

13.63. Ruch łukowy mobilnego urządzenia

Nowe w wersji C++SDK-v2.1.5.0.

1/**
2* @brief Ruch łukowy mobilnego urządzenia
3* @param radio Promień ruchu łukowego (mm)
4* @param angle Kąt ruchu łukowego (°)
5* @param vel Procent prędkości ruchu liniowego (0-100)
6* @return Kod błędu
7*/
8errno_t TractorMoveC(double radio, double angle, double vel);

13.64. Zatrzymanie ruchu mobilnego urządzenia

Nowe w wersji C++SDK-v2.1.5.0.

1/**
2* @brief Zatrzymuje ruch mobilnego urządzenia
3* @return Kod błędu
4*/
5errno_t TractorStop();

13.65. Przykład kodu mobilnego urządzenia

 1int TestTractor(void)
 2{
 3  ROBOT_STATE_PKG pkg = {};
 4  FRRobot robot;
 5  robot.LoggerInit();
 6  robot.SetLoggerLevel(1);
 7  int rtn = robot.RPC("192.168.58.2");
 8  if (rtn != 0)
 9  {
10    return -1;
11  }
12  robot.SetReConnectParam(true, 30000, 500);
13  robot.ExtDevSetUDPComParam("192.168.58.2", 2021, 2, 50, 5, 50, 1, 50, 10, 1);
14  robot.ExtDevLoadUDPDriver();
15  rtn = robot.ExtAxisServoOn(1, 1);
16  rtn = robot.ExtAxisServoOn(2, 1);
17  robot.Sleep(2000);
18  robot.ExtAxisSetHoming(1, 0, 10, 2);
19  robot.Sleep(2000);
20  rtn = robot.ExtAxisSetHoming(2, 0, 10, 2);
21  robot.Sleep(4000);
22  robot.ExtAxisParamConfig(1, 0, 0, 50000, -50000, 1000, 1000, 6.280, 16384, 200, 0, 0, 0);
23  robot.ExtAxisParamConfig(2, 0, 0, 50000, -50000, 1000, 1000, 6.280, 16384, 200, 0, 0, 0);
24  robot.SetAxisDHParaConfig(5, 0, 0, 0, 0, 0, 0, 0, 0);
25  robot.TractorEnable(false);
26  robot.Sleep(2000);
27  robot.TractorEnable(true);
28  robot.Sleep(2000);
29  robot.TractorHoming();
30  robot.Sleep(2000);
31  robot.TractorMoveL(100, 2);
32  robot.Sleep(5000);
33  robot.TractorStop();
34  robot.TractorMoveL(-100, 20);
35  robot.Sleep(5000);
36  robot.TractorMoveC(300, 90, 20);
37  robot.Sleep(10000);
38  robot.TractorMoveC(300, -90, 20);
39  robot.Sleep(1);
40  robot.CloseRPC();
41  return 0;
42}

13.66. Ustawianie czasu zakończenia pozycjonowania osi rozszerzonej UDP

1/**
2* @brief Ustawia czas zakończenia pozycjonowania osi rozszerzonej UDP
3* @param [in] time Czas zakończenia pozycjonowania [ms]
4* @return Kod błędu
5*/
6errno_t SetExAxisCmdDoneTime(double time);