13. Oś rozszerzona
13.1. Ustawianie parametrów osi rozszerzonej 485
1/**
2* @brief Ustawia parametry osi rozszerzonej 485
3* @param [in] servoId ID serwonapędu, zakres [1-16], odpowiada ID stacji podrzędnej
4* @param [in] param Parametry osi rozszerzonej 485
5* @return Kod błędu
6*/
7int AuxServoSetParam(int servoId, Axis485Param param)
13.2. Pobieranie parametrów osi rozszerzonej 485
1/**
2* @brief Pobiera parametry konfiguracyjne osi rozszerzonej 485
3* @param [in] servoId ID serwonapędu, zakres [1-16], odpowiada ID stacji podrzędnej
4* @param [out] param Parametry osi rozszerzonej 485
5* @return Kod błędu
6*/
7int AuxServoGetParam(int servoId, Axis485Param param);
13.3. Włączanie/wyłączanie zasilania osi rozszerzonej 485
1/**
2* @brief Włącza/wyłącza zasilanie osi rozszerzonej 485
3* @param [in] servoId ID serwonapędu, zakres [1-16], odpowiada ID stacji podrzędnej
4* @param [in] status Stan zasilania, 0-wyłączone, 1-włączone
5* @return Kod błędu
6*/
7int AuxServoEnable(int servoId, int status);
13.4. Ustawianie trybu sterowania osi rozszerzonej 485
1/**
2* @brief Ustawia tryb sterowania osi rozszerzonej 485
3* @param [in] servoId ID serwonapędu, zakres [1-16], 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*/
7int AuxServoSetControlMode(int servoId, int mode);
13.5. Ustawianie pozycji docelowej osi rozszerzonej 485 (tryb pozycyjny)
1/**
2* @brief Ustawia pozycję docelową osi rozszerzonej 485 (tryb pozycyjny)
3* @param [in] servoId ID serwonapędu, zakres [1-16], 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* @param [in] acc Procent przyspieszenia [0-100]
7* @return Kod błędu
8*/
9int AuxServoSetTargetPos(int servoId, double pos, double speed, double acc);
13.6. Ustawianie momentu obrotowego docelowego osi rozszerzonej 485 (tryb momentowy) - tymczasowo niedostępne
1/**
2* @brief Ustawia moment obrotowy docelowy osi rozszerzonej 485 (tryb momentowy) - tymczasowo niedostępne
3* @param [in] servoId ID serwonapędu, zakres [1-16], odpowiada ID stacji podrzędnej
4* @param [in] torque Moment docelowy, Nm
5* @return Kod błędu
6*/
7int AuxServoSetTargetTorque(int servoId, double torque);
13.7. Ustawianie powrotu do zera osi rozszerzonej 485
1/**
2* @brief Ustawia powrót do zera osi rozszerzonej 485
3* @param [in] servoId ID serwonapędu, zakres [1-16], odpowiada ID stacji podrzędnej
4* @param [in] mode Tryb powrotu do zera, 1-powrót do bieżącej pozycji; 2-powrót do ujemnego ogranicznika; 3-powrót do dodatniego ogranicznika
5* @param [in] searchVel Prędkość poszukiwania zera, mm/s lub °/s
6* @param [in] latchVel Prędkość zatrzaskiwania zera, mm/s lub °/s
7* @param [in] acc Procent przyspieszenia [0-100]
8* @return Kod błędu
9*/
10int AuxServoHoming(int servoId, int mode, double searchVel, double latchVel);
13.8. Czyszczenie informacji o błędzie osi rozszerzonej 485
1/**
2* @brief Czyści informacje o błędzie osi rozszerzonej 485
3* @param [in] servoId ID serwonapędu, zakres [1-16], odpowiada ID stacji podrzędnej
4* @return Kod błędu
5*/
6int AuxServoClearError(int servoId);
13.9. Pobieranie stanu serwonapędu osi rozszerzonej 485
1/**
2* @brief Pobiera stan serwonapędu osi rozszerzonej 485
3* @param [in] servoId ID serwonapędu, zakres [1-16], odpowiada ID stacji podrzędnej
4* @param [in] servoErrCode Kod błędu serwonapędu
5* @param [in] servoState Stan serwonapędu bit0:0-niewłączony; 1-włączony; bit1:0-nie w ruchu; 1-w ruchu; bit4:0-nie ukończono pozycjonowania; 1-ukończono pozycjonowanie; bit5:0-nie wyzerowano; 1-wyzerowano
6* @param [in] servoPos Bieżąca pozycja serwonapędu mm lub °
7* @param [in] servoSpeed Bieżąca prędkość serwonapędu mm/s lub °/s
8* @param [in] servoTorque Bieżący moment obrotowy serwonapędu Nm
9* @return Kod błędu
10*/
11int 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)
1/**
2* @brief Ustawia prędkość docelową osi rozszerzonej 485 (tryb prędkościowy)
3* @param [in] servoId ID serwonapędu, zakres [1-16], odpowiada ID stacji podrzędnej
4* @param [in] speed Prędkość docelowa, mm/s lub °/s
5* @param [in] acc Procent przyspieszenia [0-100]
6* @return Kod błędu
7*/
8int AuxServoSetTargetSpeed(int servoId, double speed, double acc);
13.11. Ustawianie numeru osi danych osi rozszerzonej 485 w sprzężeniu zwrotnym stanu
1/**
2* @brief Ustawia numer osi danych osi rozszerzonej 485 w sprzężeniu zwrotnym stanu
3* @param [in] servoId ID serwonapędu, zakres [1-16], odpowiada ID stacji podrzędnej
4* @return Kod błędu
5*/
6int AuxServosetStatusID(int servoId);
13.12. Ustawianie przyspieszenia i opóźnienia ruchu osi rozszerzonej 485
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*/
7int AuxServoSetAcc(double acc, double dec)
13.13. Ustawianie przyspieszenia i opóźnienia awaryjnego zatrzymania osi rozszerzonej 485
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*/
7int AuxServoSetEmergencyStopAcc(double acc, double dec)
13.14. Pobieranie przyspieszenia i opóźnienia ruchu osi rozszerzonej 485
1/**
2* @brief Pobiera przyspieszenie i opóźnienie ruchu osi rozszerzonej 485
3* @return List[0]:kod błędu; List[1]:przyspieszenie ruchu osi rozszerzonej 485; List[2]:opóźnienie ruchu osi rozszerzonej 485
4*/
5List<Number> AuxServoGetAcc()
13.15. Pobieranie przyspieszenia i opóźnienia awaryjnego zatrzymania osi rozszerzonej 485
1/**
2* @brief Pobiera przyspieszenie i opóźnienie awaryjnego zatrzymania osi rozszerzonej 485
3* @return List[0]:kod błędu; List[1]:przyspieszenie awaryjnego zatrzymania osi rozszerzonej 485; List[2]:opóźnienie awaryjnego zatrzymania osi rozszerzonej 485
4*/
5List<Number> AuxServoGetEmergencyStopAcc()
13.16. Przykład kodu sterowania osią rozszerzoną
1public static int Test485Auxservo(Robot robot)
2{
3 Axis485Param ax=new Axis485Param(1, 1, 1, 131072, 15.45);
4 int retval = robot.AuxServoSetParam(1, ax);
5
6 Axis485Param ax2=new Axis485Param();
7 retval = robot.AuxServoGetParam(1, ax2);
8
9 ax.servoCompany=10;
10 ax.servoModel=11;
11 ax.servoSoftVersion=12;
12 ax.servoResolution=13;
13 ax.axisMechTransRatio=14;
14
15 retval = robot.AuxServoSetParam(1, ax);
16
17 retval = robot.AuxServoGetParam(1,ax2);
18
19 ax.servoCompany=1;
20 ax.servoModel=1;
21 ax.servoSoftVersion=1;
22 ax.servoResolution=131072;
23 ax.axisMechTransRatio=36;
24
25 retval = robot.AuxServoSetParam(1, ax);
26 robot.Sleep(3000);
27
28 robot.AuxServoSetAcc(3000, 3000);
29 robot.AuxServoSetEmergencyStopAcc(5000, 5000);
30 robot.Sleep(1000);
31 double emagacc = 0, acc = 0;
32 double emagdec = 0, dec = 0;
33
34 List<Number> aux=new ArrayList<>();
35
36 aux=robot.AuxServoGetEmergencyStopAcc();
37 aux=robot.AuxServoGetAcc();
38
39 robot.AuxServoSetControlMode(1, 0);
40 robot.Sleep(2000);
41
42 retval = robot.AuxServoEnable(1, 0);
43 robot.Sleep(1000);
44 int[] servoerrcode =new int[]{0};
45 int[] servoErrCode=new int[]{0};
46 int[] servoState=new int[]{0};
47 double[] servoPos=new double[]{0};
48 double[] servoSpeed=new double[]{0};
49 double[] servoTorque=new double[]{0};
50 retval = robot.AuxServoGetStatus(1, servoErrCode, servoState, servoPos, servoSpeed, servoTorque);
51 robot.Sleep(1000);;
52
53 retval = robot.AuxServoEnable(1, 1);
54 robot.Sleep(1000);
55 retval = robot.AuxServoGetStatus(1, servoErrCode, servoState, servoPos, servoSpeed, servoTorque);
56 robot.Sleep(1000);
57
58 retval = robot.AuxServoHoming(1, 1, 5, 1,100);
59 robot.Sleep(3000);
60
61 retval = robot.AuxServoSetTargetPos(1, 200, 30,100);
62 robot.Sleep(1000);
63 retval = robot.AuxServoGetStatus(1, servoErrCode, servoState, servoPos, servoSpeed, servoTorque);
64 robot.Sleep(8000);
65
66
67 robot.AuxServoSetControlMode(1, 1);
68 robot.Sleep(2000);
69
70 robot.AuxServoEnable(1, 0);
71 robot.Sleep(1000);
72 robot.AuxServoEnable(1, 1);
73 robot.Sleep(1000);
74 robot.AuxServoSetTargetSpeed(1, 100, 80);
75
76 robot.Sleep(5000);
77 robot.AuxServoSetTargetSpeed(1, 0, 80);
78
79 robot.CloseRPC();
80 return 0;
81}
13.17. Konfiguracja parametrów komunikacji UDP dla osi rozszerzonej
Zmienione w wersji Java: SDK-v1.0.5-3.8.2
1/**
2* @brief Konfiguruje parametry komunikacji UDP dla osi rozszerzonej
3* @param [in] param Parametry komunikacji
4* @return Kod błędu
5*/
6int ExtDevSetUDPComParam(UDPComParam param);
13.18. Pobieranie konfiguracji parametrów komunikacji UDP dla osi rozszerzonej
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] selfConnect Czy automatycznie ponownie połączyć po ponownym uruchomieniu szafy sterowniczej; 0-nie łącz ponownie; 1-łącz ponownie
13* @return Kod błędu
14*/
15public int ExtDevGetUDPComParam(ref string ip, ref int port, ref int period, ref int lossPkgTime, ref int lossPkgNum, ref int disconnectTime, ref int reconnectEnable, ref int reconnectPeriod, ref int reconnectNum, ref int selfConnect)
13.19. Ładowanie komunikacji UDP
1/**
2* @brief Ładuje komunikację UDP
3* @return Kod błędu
4*/
5int ExtDevLoadUDPDriver();
13.20. Zwolnienie komunikacji UDP
1/**
2* @brief Zwolnienie komunikacji UDP
3* @return Kod błędu
4*/
5int ExtDevUnloadUDPDriver();
13.21. Przywracanie połączenia po przerwaniu komunikacji UDP osi rozszerzonej
1/**
2* @brief Przywraca połączenie po przerwaniu komunikacji UDP osi rozszerzonej
3* @return Kod błędu
4*/
5int ExtDevUDPClientComReset();
13.22. Zamykanie komunikacji po przerwaniu komunikacji UDP osi rozszerzonej
1/**
2* @brief Zamyka komunikację po przerwaniu komunikacji UDP osi rozszerzonej
3* @return Kod błędu
4*/
5int ExtDevUDPClientComClose();
13.23. Konfiguracja parametrów osi rozszerzonej UDP
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*/
18int ExtAxisParamConfig(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.24. Pobieranie parametrów osi rozszerzonej UDP
1/**
2* @brief Pobiera parametry osi rozszerzonej UDP
3* @param axisID Numer osi rozszerzonej [1-4]
4* @param params Tablica parametrów wyjściowych, długość 12, kolejność:
5* [0] axisType Typ osi rozszerzonej 0-przesuwna; 1-obrotowa
6* [1] axisDirection Kierunek osi rozszerzonej 0-dodatni; 1-ujemny
7* [2] axisMax Maksymalna pozycja osi rozszerzonej mm
8* [3] axisMin Minimalna pozycja osi rozszerzonej mm
9* [4] axisVel Prędkość mm/s
10* [5] axisAcc Przyspieszenie mm/s2
11* [6] axisLead Skok śruby pociągowej mm
12* [7] encResolution Rozdzielczość enkodera
13* [8] axisOffect Przesunięcie osi rozszerzonej punktu początkowego spoiny
14* [9] axisCompany Producent sterownika 1-Hechuan; 2-Huichuan; 3-Panasonic
15* [10] axisModel Model sterownika
16* [11] axisEncType Typ enkodera 0-inkrementalny; 1-absolutny
17* @return Kod błędu
18*/
19public int ExtAxisGetParamConfig(int axisID, Object[] params)
13.25. Ustawianie pozycji montażowej osi rozszerzonej
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*/
6int SetRobotPosToAxis(int installType);
13.26. Ustawianie konfiguracji parametrów DH systemu osi rozszerzonej
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-dwukierunkowy pozycjoner typu L, 2-trójkierunkowa, 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*/
14int 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
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*/
7int ExtAxisServoOn(int axisID, int status);
13.28. Powrót do zera osi rozszerzonej UDP
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*/
9int ExtAxisSetHoming(int axisID, int mode, double searchVel, double latchVel);
13.29. Rozpoczęcie ruchu jałowego osi rozszerzonej UDP
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*/
10int ExtAxisStartJog(int axisID, int direction, double vel, double acc, double maxDistance);
13.30. Zatrzymanie ruchu jałowego osi rozszerzonej UDP
1/**
2* @brief Zatrzymuje ruch jałowy osi rozszerzonej UDP
3* @param [in] axisID Numer osi [1-4]
4* @return Kod błędu
5*/
6int ExtAxisStopJog(int axisID);
13.31. Przykład kodu konfiguracji i ruchu jałowego osi rozszerzonej UDP
1public static int TestUDPAxis(Robot robot) {
2 int rtn = -1;
3
4 UDPComParam param = new UDPComParam("192.168.58.88", 2021, 2, 100, 3, 200, 1, 100, 5, 1);
5 rtn = robot.ExtDevSetUDPComParam(param);
6 System.out.println("ExtDevSetUDPComParam rtn is " + rtn);
7
8 UDPComParam getParam = new UDPComParam();
9 rtn = robot.ExtDevGetUDPComParam(getParam);
10 String paramStr = "\nip " + getParam.ip + "\nport " + getParam.port + "\nperiod " + getParam.period +
11 "\nlossPkgTime " + getParam.lossPkgTime + "\nlossPkgNum " + getParam.lossPkgNum +
12 "\ndisconnectTime " + getParam.disconnectTime + "\nreconnectEnable " + getParam.reconnectEnable +
13 "\nreconnectPeriod " + getParam.reconnectPeriod + "\nreconnectNum " + getParam.reconnectNum +
14 "\nselfConnect " + getParam.selfConnect;
15 System.out.println("ExtDevGetUDPComParam rtn is " + rtn + paramStr);
16
17 robot.ExtDevLoadUDPDriver();
18
19 rtn = robot.SetExAxisCmdDoneTime(5000.0);
20 System.out.println("SetExAxisCmdDoneTime rtn is " + rtn);
21
22 rtn = robot.ExtAxisServoOn(1, 1);
23 System.out.println("ExtAxisServoOn axis id 1 rtn is " + rtn);
24 rtn = robot.ExtAxisServoOn(2, 1);
25 System.out.println("ExtAxisServoOn axis id 2 rtn is " + rtn);
26 robot.Sleep(2000);
27
28 robot.ExtAxisSetHoming(1, 0, 10, 2);
29 robot.Sleep(2000);
30 rtn = robot.ExtAxisSetHoming(2, 0, 10, 2);
31 System.out.println("ExtAxisSetHoming rtn is " + rtn);
32
33 robot.Sleep(4000);
34
35 rtn = robot.SetRobotPosToAxis(1);
36 System.out.println("SetRobotPosToAxis rtn is " + rtn);
37
38 rtn = robot.SetAxisDHParaConfig(10, 20, 0, 0, 0, 0, 0, 0, 0);
39 System.out.println("SetAxisDHParaConfig rtn is " + rtn);
40
41 rtn = robot.ExtAxisParamConfig(1, 1, 1, 1000, -1000, 1000, 1000, 1.905, 262144, 200, 1, 0, 0);
42 System.out.println("ExtAxisParamConfig axis 1 rtn is " + rtn);
43
44 Object[] params1 = new Object[12];
45 rtn = robot.ExtAxisGetParamConfig(1, params1);
46 System.out.printf("axis id 1 ExtAxisGetParamConfig : axisType %d, axisDirection %d, axisMax %.2f, axisMin %.2f, axisVel %.2f, axisAcc %.2f, axisLead %.2f, encResolution %d, axisOffect %.2f, axisCompany %d, axisModel %d, axisEncType %d\n",
47 (int)params1[0], (int)params1[1], (double)params1[2], (double)params1[3],
48 (double)params1[4], (double)params1[5], (double)params1[6], (int)params1[7],
49 (double)params1[8], (int)params1[9], (int)params1[10], (int)params1[11]);
50
51 rtn = robot.ExtAxisParamConfig(2, 1, 1, 1000, -1000, 1000, 1000, 4.444, 262144, 200, 1, 0, 0);
52 System.out.println("ExtAxisParamConfig axis 2 rtn is " + rtn);
53
54 Object[] params2 = new Object[12];
55 rtn = robot.ExtAxisGetParamConfig(2, params2);
56 System.out.printf("axis id 2 ExtAxisGetParamConfig : axisType %d, axisDirection %d, axisMax %.2f, axisMin %.2f, axisVel %.2f, axisAcc %.2f, axisLead %.2f, encResolution %d, axisOffect %.2f, axisCompany %d, axisModel %d, axisEncType %d\n",
57 (int)params2[0], (int)params2[1], (double)params2[2], (double)params2[3],
58 (double)params2[4], (double)params2[5], (double)params2[6], (int)params2[7],
59 (double)params2[8], (int)params2[9], (int)params2[10], (int)params2[11]);
60
61 robot.Sleep(3000);
62
63 robot.ExtAxisStartJog(1, 0, 10, 10, 30);
64 robot.Sleep(1000);
65 robot.ExtAxisStopJog(1);
66 robot.Sleep(3000);
67 robot.ExtAxisServoOn(1, 0);
68
69 robot.Sleep(3000);
70
71 robot.ExtAxisStartJog(2, 0, 10, 10, 30);
72 robot.Sleep(1000);
73 robot.ExtAxisStopJog(2);
74 robot.Sleep(3000);
75 robot.ExtAxisServoOn(2, 0);
76 robot.ExtDevUnloadUDPDriver();
77
78 return 0;
79}
13.32. Ustawianie punktu odniesienia układu współrzędnych osi rozszerzonej - metoda czterech punktów
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*/
6int ExtAxisSetRefPoint(int pointNum);
13.33. Obliczanie układu współrzędnych osi rozszerzonej - metoda czterech punktów
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*/
6int ExtAxisComputeECoordSys(DescPose coord);
13.34. Ustawianie punktu odniesienia układu współrzędnych pozycjonera
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*/
6int PositionorSetRefPoint(int pointNum);
13.35. Obliczanie układu współrzędnych pozycjonera - metoda czterech punktów
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*/
6int PositionorComputeECoordSys(DescPose coord);
13.36. Ustawianie pozy i orientacji punktu odniesienia kalibracji w układzie współrzędnych końcówki pozycjonera
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*/
6int SetRefPointInExAxisEnd(DescPose pos);
13.37. Stosowanie układu współrzędnych osi rozszerzonej
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*/
9int ExtAxisActiveECoordSys(int applyAxisId, int axisCoordNum, DescPose coord, int calibFlag);
13.38. Pobieranie układu współrzędnych osi rozszerzonej
Nowe w wersji Java: SDK-v1.0.5-3.8.2
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*/
6int ExtAxisGetCoord(DescPose coord);
13.39. Przykład kodu kalibracji układu współrzędnych osi rozszerzonej
1public static int TestUDPAxisCalib(Robot robot)
2{
3 UDPComParam para1=new UDPComParam("192.168.58.88", 2021, 2, 100, 3, 200, 1, 100, 5, 1);
4
5 int rtn = robot.ExtDevSetUDPComParam(para1);
6 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;
7 UDPComParam para2=new UDPComParam(ip, port, period, lossPkgTime, lossPkgNum, disconnectTime, reconnectEnable, reconnectPeriod, reconnectNum,0);
8
9 rtn = robot.ExtDevGetUDPComParam(para2);
10
11 robot.ExtDevLoadUDPDriver();
12
13 rtn = robot.ExtAxisServoOn(1, 1);
14 rtn = robot.ExtAxisServoOn(2, 1);
15
16 robot.Sleep(4000);
17
18 rtn = robot.SetRobotPosToAxis(1);
19 rtn = robot.SetAxisDHParaConfig(1, 128.5, 206.4, 0, 0, 0, 0, 0, 0);
20 rtn = robot.ExtAxisParamConfig(1, 1, 1, 1000, -1000, 1000, 1000, 1.905, 262144, 200, 1, 0, 0);
21 rtn = robot.ExtAxisParamConfig(2, 1, 1, 1000, -1000, 1000, 1000, 4.444, 262144, 200, 1, 0, 0);
22
23 DescPose toolCoord=new DescPose(0, 0, 210, 0, 0, 0);
24 robot.SetToolCoord(1, toolCoord, 0, 0, 1, 0);
25
26 JointPos jSafe=new JointPos(115.193, -96.149, 92.489, -87.068, -89.15, -83.488);
27 JointPos j1=new JointPos(117.559, -92.624, 100.329, -96.909, -94.057, -83.488);
28 JointPos j2=new JointPos(112.239, -90.096, 99.282, -95.909, -89.824, -83.488);
29 JointPos j3=new JointPos(110.839, -83.473, 93.166, -89.22, -90.499, -83.487);
30 JointPos j4=new JointPos(107.935, -83.572, 95.424, -92.873, -87.933, -83.488);
31
32 DescPose descSafe =new DescPose(0,0,0,0,0,0);
33 DescPose desc1 = new DescPose(0,0,0,0,0,0);
34 DescPose desc2 = new DescPose(0,0,0,0,0,0);
35 DescPose desc3 = new DescPose(0,0,0,0,0,0);
36 DescPose desc4 = new DescPose(0,0,0,0,0,0);
37 ExaxisPos exaxisPos =new ExaxisPos(0,0,0,0);
38 DescPose offdese =new DescPose(0, 0, 0, 0, 0, 0);
39
40 robot.GetForwardKin(jSafe, descSafe);
41 robot.MoveJ(jSafe, descSafe, 1, 0, 100, 100, 100, exaxisPos, -1, 0, offdese);
42 robot.Sleep(2000);
43
44 robot.GetForwardKin(j1, desc1);
45 robot.MoveJ(j1, desc1, 1, 0, 100, 100, 100, exaxisPos, -1, 0, offdese);
46 robot.Sleep(2000);
47
48 DescPose actualTCPPos =new DescPose(0,0,0,0,0,0);
49
50 robot.GetActualTCPPose(actualTCPPos);
51 robot.SetRefPointInExAxisEnd(actualTCPPos);
52 rtn = robot.PositionorSetRefPoint(1);
53 robot.Sleep(2000);
54
55 robot.MoveJ(jSafe, descSafe, 1, 0, 100, 100, 100, exaxisPos, -1, 0, offdese);
56 robot.ExtAxisStartJog(1, 0, 50, 50, 10);
57 robot.Sleep(1000);
58 robot.ExtAxisStartJog(2, 0, 50, 50, 10);
59 robot.Sleep(1000);
60 robot.GetForwardKin(j2, desc2);
61 rtn = robot.MoveJ(j2, desc2, 1, 0, 100, 100, 100, exaxisPos, -1, 0, offdese);
62 rtn = robot.PositionorSetRefPoint(2);
63 robot.Sleep(2000);
64
65 robot.MoveJ(jSafe, descSafe, 1, 0, 100, 100, 100, exaxisPos, -1, 0, offdese);
66 robot.ExtAxisStartJog(1, 0, 50, 50, 10);
67 robot.Sleep(1000);
68 robot.ExtAxisStartJog(2, 0, 50, 50, 10);
69 robot.Sleep(1000);
70 robot.GetForwardKin(j3, desc3);
71 robot.MoveJ(j3, desc3, 1, 0, 100, 100, 100, exaxisPos, -1, 0, offdese);
72 rtn = robot.PositionorSetRefPoint(3);
73 robot.Sleep(2000);
74
75 robot.MoveJ(jSafe, descSafe, 1, 0, 100, 100, 100, exaxisPos, -1, 0, offdese);
76 robot.ExtAxisStartJog(1, 0, 50, 50, 10);
77 robot.Sleep(1000);
78 robot.ExtAxisStartJog(2, 0, 50, 50, 10);
79 robot.Sleep(1000);
80 robot.GetForwardKin(j4, desc4);
81 robot.MoveJ(j4, desc4, 1, 0, 100, 100, 100, exaxisPos, -1, 0, offdese);
82 rtn = robot.PositionorSetRefPoint(4);
83 robot.Sleep(2000);
84
85 DescPose axisCoord = new DescPose();
86 robot.PositionorComputeECoordSys(axisCoord);
87 robot.MoveJ(jSafe, descSafe, 1, 0, 100, 100, 100, exaxisPos, -1, 0, offdese);
88 rtn = robot.ExtAxisActiveECoordSys(3, 1, axisCoord, 1);
89
90 robot.CloseRPC();
91 return 0;
92}
13.40. Ruch osi rozszerzonej UDP
Zmienione w wersji Java: SDK-v1.0.7-3.8.4
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)
6* @return Kod błędu
7*/
8int ExtAxisMove(ExaxisPos pos, double ovl, double blend)
13.41. Przykład kodu ruchu osi rozszerzonej UDP
1public static int TestUDPAxisCalib(Robot robot)
2{
3 ExaxisPos exaxisPos = new ExaxisPos( 20, 0, 0, 0 );
4 robot.ExtAxisMove(exaxisPos,40);
5 robot.CloseRPC();
6 return 0;
7}
13.42. Ruch synchroniczny osi rozszerzonej UDP z ruchem stawowym robota
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] ffset_pos Wartość przesunięcia pozy i orientacji
14* @return Kod błędu
15*/
16int ExtAxisSyncMoveJ(JointPos joint_pos, DescPose desc_pos, int tool, int user, double vel, double acc, double ovl, ExaxisPos epos, double blendT, int offset_flag, DescPose offset_pos);
13.43. Ruch synchroniczny osi rozszerzonej UDP z ruchem stawowym robota (automatyczne obliczanie prostej kinematyki)
Nowe w wersji Java: SDK-v1.0.8-3.8.5
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*/
15int ExtAxisSyncMoveJ(JointPos joint_pos, int tool, int user, double vel, double acc, double ovl, ExaxisPos epos, double blendT, int offset_flag, DescPose offset_pos)
13.44. Przykład kodu ruchu synchronicznego z ruchem stawowym robota
1public int testSyncMoveJ(Robot robot)
2{
3 //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:
4 // int SetToolPoint(int point_num); //Ustawia punkt odniesienia narzędzia - metoda sześciu punktów
5 // int ComputeTool(ref DescPose tcp_pose); //Oblicza układ współrzędnych narzędzia
6 // int SetTcp4RefPoint(int point_num); //Ustawia punkt odniesienia narzędzia - metoda czterech punktów
7 // int ComputeTcp4(ref DescPose tcp_pose); //Oblicza układ współrzędnych narzędzia - metoda czterech punktów
8 // int SetToolCoord(int id, DescPose coord, int type, int install); //Ustawia i stosuje układ współrzędnych narzędzia
9 // int SetToolList(int id, DescPose coord, int type, int install); //Ustawia i stosuje listę układów współrzędnych narzędzia
10 //2. Ustaw parametry komunikacji UDP i załaduj komunikację UDP
11 UDPComParam param=new UDPComParam("192.168.58.88", 2021, 2, 100, 3, 100, 1, 100, 10,0);
12 robot.ExtDevSetUDPComParam(param);
13 robot.ExtDevLoadUDPDriver();
14 //3. Ustaw parametry osi rozszerzonej, w tym typ osi rozszerzonej, parametry sterownika osi rozszerzonej, parametry DH osi rozszerzonej
15 robot.SetAxisDHParaConfig(4, 200, 200, 0, 0, 0, 0, 0, 0); //Jednoosiowy pozycjoner i parametry DH
16 robot.SetRobotPosToAxis(1); //Pozycja montażowa osi rozszerzonej
17 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.
18 //4. Włącz zasilanie wybranej osi i wykonaj powrót do zera
19 robot.ExtAxisServoOn(1, 0);
20 robot.ExtAxisSetHoming(1, 0, 20, 3);
21 //5. Wykonaj kalibrację układu współrzędnych osi rozszerzonej i zastosuj go
22 DescPose pos = new DescPose(/* Wprowadź współrzędne swojego punktu kalibracyjnego */ );
23 robot.SetRefPointInExAxisEnd(pos);
24 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ę */
25 DescPose coord = new DescPose();
26 robot.PositionorComputeECoordSys(coord); //Oblicz wynik kalibracji osi rozszerzonej
27 robot.ExtAxisActiveECoordSys(1, 1, coord, 1); //Zastosuj wynik kalibracji do układu współrzędnych osi rozszerzonej
28 //6. Kalibracja układu współrzędnych obiektu na osi rozszerzonej. Będziesz potrzebować następujących interfejsów:
29 //int SetWObjCoordPoint(int point_num);
30 //int ComputeWObjCoord(int method, ref DescPose wobj_pose);
31 //int SetWObjCoord(int id, DescPose coord);
32 //int SetWObjList(int id, DescPose coord);
33 //7. Zapisz punkt początkowy synchronicznego ruchu stawowego
34 DescPose startdescPose = new DescPose(/* Wprowadź swoje współrzędne */ );
35 JointPos startjointPos = new JointPos(/* Wprowadź swoje współrzędne */ );
36 ExaxisPos startexaxisPos = new ExaxisPos(/* Wprowadź współrzędne punktu początkowego osi rozszerzonej */ );
37 //8. Zapisz współrzędne punktu końcowego synchronicznego ruchu stawowego
38 DescPose enddescPose = new DescPose(/* Wprowadź swoje współrzędne */ );
39 JointPos endjointPos = new JointPos(/* Wprowadź swoje współrzędne */ );
40 ExaxisPos endexaxisPos =new ExaxisPos(/* Wprowadź współrzędne punktu końcowego osi rozszerzonej */);
41 //9. Napisz program ruchu synchronicznego
42 //Przejedź do punktu początkowego, zakładając, że stosowane układy współrzędnych narzędzia i obiektu to 1
43 robot.ExtAxisMove(startexaxisPos, 20);
44 DescPose offdese = new DescPose( 0, 0, 0, 0, 0, 0 );
45 robot.MoveJ(startjointPos, startdescPose, 1, 1, 100, 100, 100, startexaxisPos, 0, 0, offdese);
46 //Rozpocznij ruch synchroniczny
47 robot.ExtAxisSyncMoveJ(endjointPos, enddescPose, 1, 1, 100, 100, 100, endexaxisPos, -1, 0, offdese);
48 robot.MoveJ(startjointPos, 1, 1, 100, 100, 100, startexaxisPos, 0, 0, offdese);
49 //Rozpocznij ruch synchroniczny
50 robot.ExtAxisSyncMoveJ(endjointPos, 1, 1, 100, 100, 100, endexaxisPos, -1, 0, offdese);
51 robot.CloseRPC();
52 return 0;
53}
13.45. Ruch synchroniczny osi rozszerzonej UDP z ruchem liniowym robota
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*/
16int ExtAxisSyncMoveL(JointPos joint_pos, DescPose desc_pos, int tool, int user, double vel, double acc, double ovl, double blendR, ExaxisPos epos, int offset_flag, DescPose offset_pos);
13.46. Ruch synchroniczny osi rozszerzonej UDP z ruchem liniowym robota (automatyczne obliczanie odwrotnej kinematyki)
Nowe w wersji Java: SDK-v1.0.8-3.8.5
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*/
16int ExtAxisSyncMoveL(DescPose desc_pos, int tool, int user, double vel, double acc, double ovl, double blendR, ExaxisPos epos, int offset_flag, DescPose offset_pos,int config)
13.47. Przykład kodu ruchu synchronicznego z ruchem liniowym robota
1public int testSyncMoveL(Robot robot)
2{
3 //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:
4 // int SetToolPoint(int point_num); //Ustawia punkt odniesienia narzędzia - metoda sześciu punktów
5 // int ComputeTool(ref DescPose tcp_pose); //Oblicza układ współrzędnych narzędzia
6 // int SetTcp4RefPoint(int point_num); //Ustawia punkt odniesienia narzędzia - metoda czterech punktów
7 // int ComputeTcp4(ref DescPose tcp_pose); //Oblicza układ współrzędnych narzędzia - metoda czterech punktów
8 // int SetToolCoord(int id, DescPose coord, int type, int install); //Ustawia i stosuje układ współrzędnych narzędzia
9 // int SetToolList(int id, DescPose coord, int type, int install); //Ustawia i stosuje listę układów współrzędnych narzędzia
10 //2. Ustaw parametry komunikacji UDP i załaduj komunikację UDP
11 UDPComParam param=new UDPComParam("192.168.58.88", 2021, 2, 100, 3, 100, 1, 100, 10,0);
12 robot.ExtDevSetUDPComParam(param);
13 robot.ExtDevLoadUDPDriver();
14 //3. Ustaw parametry osi rozszerzonej, w tym typ osi rozszerzonej, parametry sterownika osi rozszerzonej, parametry DH osi rozszerzonej
15 robot.SetAxisDHParaConfig(4, 200, 200, 0, 0, 0, 0, 0, 0); //Jednoosiowy pozycjoner i parametry DH
16 robot.SetRobotPosToAxis(1); //Pozycja montażowa osi rozszerzonej
17 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.
18 //4. Włącz zasilanie wybranej osi i wykonaj powrót do zera
19 robot.ExtAxisServoOn(1, 0);
20 robot.ExtAxisSetHoming(1, 0, 20, 3);
21 //5. Wykonaj kalibrację układu współrzędnych osi rozszerzonej i zastosuj go
22 DescPose pos = new DescPose(/* Wprowadź współrzędne swojego punktu kalibracyjnego */ );
23 robot.SetRefPointInExAxisEnd(pos);
24 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ę */
25 DescPose coord = new DescPose();
26 robot.PositionorComputeECoordSys(coord); //Oblicz wynik kalibracji osi rozszerzonej
27 robot.ExtAxisActiveECoordSys(1, 1, coord, 1); //Zastosuj wynik kalibracji do układu współrzędnych osi rozszerzonej
28 //6. Kalibracja układu współrzędnych obiektu na osi rozszerzonej. Będziesz potrzebować następujących interfejsów:
29 //int SetWObjCoordPoint(int point_num);
30 //int ComputeWObjCoord(int method, ref DescPose wobj_pose);
31 //int SetWObjCoord(int id, DescPose coord);
32 //int SetWObjList(int id, DescPose coord);
33 //7. Zapisz punkt początkowy synchronicznego ruchu liniowego
34 DescPose startdescPose = new DescPose(/* Wprowadź swoje współrzędne */ );
35 JointPos startjointPos = new JointPos(/* Wprowadź swoje współrzędne */ );
36 ExaxisPos startexaxisPos = new ExaxisPos(/* Wprowadź współrzędne punktu początkowego osi rozszerzonej */ );
37 //8. Zapisz współrzędne punktu końcowego synchronicznego ruchu liniowego
38 DescPose enddescPose = new DescPose(/* Wprowadź swoje współrzędne */ );
39 JointPos endjointPos = new JointPos(/* Wprowadź swoje współrzędne */ );
40 ExaxisPos endexaxisPos =new ExaxisPos(/* Wprowadź współrzędne punktu końcowego osi rozszerzonej */);
41 //9. Napisz program ruchu synchronicznego
42 //Przejedź do punktu początkowego, zakładając, że stosowane układy współrzędnych narzędzia i obiektu to 1
43 robot.ExtAxisMove(startexaxisPos, 20);
44 DescPose offdese = new DescPose( 0, 0, 0, 0, 0, 0 );
45 robot.MoveJ(startjointPos, startdescPose, 1, 1, 100, 100, 100, startexaxisPos, 0, 0, offdese);
46 //Rozpocznij ruch synchroniczny
47 robot.ExtAxisSyncMoveL(endjointPos, enddescPose, 1, 1, 100, 100, 100, 0, endexaxisPos, 0, offdese);
48 robot.MoveJ(startjointPos, 1, 1, 100, 100, 100, startexaxisPos, 0, 0, offdese);
49 //Rozpocznij ruch synchroniczny
50 robot.ExtAxisSyncMoveL(enddescPose, 1, 1, 100, 100, 100, 0, endexaxisPos, 0, offdese,-1);
51 robot.CloseRPC();
52 return 0;
53}
13.48. Ruch synchroniczny osi rozszerzonej UDP z ruchem łukowym robota
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*/
25int ExtAxisSyncMoveC(JointPos joint_pos_p, DescPose desc_pos_p, int ptool, int puser, double pvel, double pacc, ExaxisPos epos_p, int poffset_flag, DescPose offset_pos_p, JointPos joint_pos_t, DescPose desc_pos_t, int ttool, int tuser, double tvel, double tacc, ExaxisPos epos_t, int toffset_flag, DescPose offset_pos_t, double ovl, double blendR);
13.49. Ruch synchroniczny osi rozszerzonej UDP z ruchem łukowym robota (automatyczne obliczanie odwrotnej kinematyki)
Nowe w wersji Java: SDK-v1.0.8-3.8.5
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*/
24int ExtAxisSyncMoveC(DescPose desc_pos_p, int ptool, int puser, double pvel, double pacc, ExaxisPos epos_p, int poffset_flag, DescPose offset_pos_p, DescPose desc_pos_t, int ttool, int tuser, double tvel, double tacc, ExaxisPos epos_t, int toffset_flag, DescPose offset_pos_t, double ovl, double blendR,int config)
13.50. Przykład kodu ruchu synchronicznego z ruchem łukowym robota
1public int testSyncMoveC(Robot robot)
2{
3 //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:
4 // int SetToolPoint(int point_num); //Ustawia punkt odniesienia narzędzia - metoda sześciu punktów
5 // int ComputeTool(ref DescPose tcp_pose); //Oblicza układ współrzędnych narzędzia
6 // int SetTcp4RefPoint(int point_num); //Ustawia punkt odniesienia narzędzia - metoda czterech punktów
7 // int ComputeTcp4(ref DescPose tcp_pose); //Oblicza układ współrzędnych narzędzia - metoda czterech punktów
8 // int SetToolCoord(int id, DescPose coord, int type, int install); //Ustawia i stosuje układ współrzędnych narzędzia
9 // int SetToolList(int id, DescPose coord, int type, int install); //Ustawia i stosuje listę układów współrzędnych narzędzia
10 //2. Ustaw parametry komunikacji UDP i załaduj komunikację UDP
11 UDPComParam param=new UDPComParam("192.168.58.88", 2021, 2, 100, 3, 100, 1, 100, 10,0);
12 robot.ExtDevSetUDPComParam(param);
13 robot.ExtDevLoadUDPDriver();
14 //3. Ustaw parametry osi rozszerzonej, w tym typ osi rozszerzonej, parametry sterownika osi rozszerzonej, parametry DH osi rozszerzonej
15 robot.SetAxisDHParaConfig(4, 200, 200, 0, 0, 0, 0, 0, 0); //Jednoosiowy pozycjoner i parametry DH
16 robot.SetRobotPosToAxis(1); //Pozycja montażowa osi rozszerzonej
17 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.
18 //4. Włącz zasilanie wybranej osi i wykonaj powrót do zera
19 robot.ExtAxisServoOn(1, 0);
20 robot.ExtAxisSetHoming(1, 0, 20, 3);
21 //5. Wykonaj kalibrację układu współrzędnych osi rozszerzonej i zastosuj go
22 DescPose pos = new DescPose(/* Wprowadź współrzędne swojego punktu kalibracyjnego */ );
23 robot.SetRefPointInExAxisEnd(pos);
24 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ę */
25 DescPose coord = new DescPose();
26 robot.PositionorComputeECoordSys(coord); //Oblicz wynik kalibracji osi rozszerzonej
27 robot.ExtAxisActiveECoordSys(1, 1, coord, 1); //Zastosuj wynik kalibracji do układu współrzędnych osi rozszerzonej
28 //6. Kalibracja układu współrzędnych obiektu na osi rozszerzonej. Będziesz potrzebować następujących interfejsów:
29 //int SetWObjCoordPoint(int point_num);
30 //int ComputeWObjCoord(int method, ref DescPose wobj_pose);
31 //int SetWObjCoord(int id, DescPose coord);
32 //int SetWObjList(int id, DescPose coord);
33 //7. Zapisz punkt początkowy synchronicznego ruchu łukowego
34 DescPose startdescPose = new DescPose(/* Wprowadź swoje współrzędne */ );
35 JointPos startjointPos = new JointPos(/* Wprowadź swoje współrzędne */ );
36 ExaxisPos startexaxisPos = new ExaxisPos(/* Wprowadź współrzędne punktu początkowego osi rozszerzonej */ );
37 //8. Zapisz współrzędne punktu końcowego synchronicznego ruchu łukowego
38 DescPose enddescPose = new DescPose(/* Wprowadź swoje współrzędne */ );
39 JointPos endjointPos = new JointPos(/* Wprowadź swoje współrzędne */ );
40 ExaxisPos endexaxisPos = new ExaxisPos(/* Wprowadź współrzędne punktu końcowego osi rozszerzonej */ );
41 //9. Zapisz współrzędne punktu pośredniego synchronicznego ruchu łukowego
42 DescPose middescPose = new DescPose(/* Wprowadź swoje współrzędne */ );
43 JointPos midjointPos =new JointPos(/* Wprowadź swoje współrzędne */ );
44 ExaxisPos midexaxisPos = new ExaxisPos(/* Wprowadź współrzędne osi rozszerzonej w punkcie pośrednim łuku robota */ );
45 //10. Napisz program ruchu synchronicznego
46 //Przejedź do punktu początkowego, zakładając, że stosowane układy współrzędnych narzędzia i obiektu to 1
47 robot.ExtAxisMove(startexaxisPos, 20);
48 DescPose offdese = new DescPose( 0, 0, 0, 0, 0, 0 );
49 robot.MoveJ(startjointPos, startdescPose, 1, 1, 100, 100, 100, startexaxisPos, 0, 0, offdese);
50 //Rozpocznij ruch synchroniczny
51 robot.ExtAxisSyncMoveC(midjointPos, middescPose, 1, 1, 100, 100, midexaxisPos, 0, offdese, endjointPos, enddescPose, 1, 1, 100, 100, endexaxisPos, 0, offdese, 100, 0);
52 robot.MoveJ(startjointPos, 1, 1, 100, 100, 100, startexaxisPos, 0, 0, offdese);
53 //Rozpocznij ruch synchroniczny
54 robot.ExtAxisSyncMoveC(middescPose, 1, 1, 100, 100, midexaxisPos, 0, offdese, enddescPose, 1, 1, 100, 100, endexaxisPos, 0, offdese, 100, 0,-1);
55 robot.CloseRPC();
56 return 0;
57}
13.51. Ustawianie rozszerzonego wyjścia cyfrowego (DO)
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*/
9int SetAuxDO(int DONum, boolean bOpen, boolean smooth, boolean block);
13.52. Ustawianie rozszerzonego wyjścia analogowego (AO)
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*/
8int SetAuxAO(int AONum, double value, boolean block);
13.53. Ustawianie czasu filtracji wejścia rozszerzonego DI
1/**
2* @brief Ustawia czas filtracji wejścia rozszerzonego DI
3* @param [in] filterTime Czas filtracji (ms)
4* @return Kod błędu
5*/
6int SetAuxDIFilterTime(int filterTime);
13.54. Ustawianie czasu filtracji wejścia rozszerzonego AI
1/**
2* @brief Ustawia czas filtracji wejścia rozszerzonego AI
3* @param [in] AONum Numer AO
4* @param [in] filterTime Czas filtracji (ms)
5* @return Kod błędu
6*/
7int SetAuxAIFilterTime(int AONum, int filterTime);
13.55. Oczekiwanie na wejście rozszerzone DI
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*/
9int WaitAuxDI(int DINum, boolean bOpen, int time, boolean errorAlarm);
13.56. Oczekiwanie na wejście rozszerzone AI
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*/
10int WaitAuxAI(int AINum, int sign, int value, int time, boolean errorAlarm);
13.57. Pobieranie wartości rozszerzonego DI
1/**
2* @brief Pobiera wartość rozszerzonego DI
3* @param [in] DINum Numer DI
4* @param [in] isNoBlock Czy blokować
5* @return List[0]:kod błędu; List[1] : isOpen 0-wyłączone; 1-włączone
6*/
7List<Integer> GetAuxDI(int DINum, boolean isNoBlock)
13.58. Pobieranie wartości rozszerzonego AI
1/**
2* @brief Pobiera wartość rozszerzonego AI
3* @param [in] AINum Numer AI
4* @param [in] isNoBlock Czy blokować
5* @return List[0]:kod błędu; List[1] : value Wartość wejściowa
6*/
7List<Integer> GetAuxAI(int AINum, boolean isNoBlock);
13.59. Przykład kodu rozszerzonego IO
1public static int TestAuxDOAO(Robot robot)
2{
3 for (int i = 0; i < 128; i++)
4 {
5 robot.SetAuxDO(i, true, false, true);
6 robot.Sleep(100);
7 }
8 for (int i = 0; i < 128; i++)
9 {
10 robot.SetAuxDO(i, false, false, true);
11 robot.Sleep(100);
12 }
13
14 for (int i = 0; i < 409; i++)
15 {
16 robot.SetAuxAO(0, i * 10, true);
17 robot.SetAuxAO(1, 4095 - i * 10, true);
18 robot.SetAuxAO(2, i * 10, true);
19 robot.SetAuxAO(3, 4095 - i * 10, true);
20 robot.Sleep(10);
21 }
22
23 robot.SetAuxDIFilterTime(10);
24 robot.SetAuxAIFilterTime(0, 10);
25
26
27 int curValue = -1;
28 List<Integer> liter=new ArrayList<>();
29 for (int i = 0; i < 4; i++)
30 {
31 liter = robot.GetAuxAI(i, true);
32 }
33
34 robot.WaitAuxDI(1, false, 1000, false);
35 robot.WaitAuxAI(1, 1, 132, 1000, false);
36
37 robot.CloseRPC();
38 return 0;
39}
13.60. Włączanie zasilania mobilnego urządzenia
1/**
2* @brief Włącza zasilanie mobilnego urządzenia
3* @param [in] enable false-wyłączone; true-włączone
4* @return Kod błędu
5*/
6int TractorEnable(Boolean enable);
13.61. Powrót do zera mobilnego urządzenia
1/**
2* @brief Powrót do zera mobilnego urządzenia
3* @return Kod błędu
4*/
5int TractorHoming();
13.62. Ruch liniowy mobilnego urządzenia
1/**
2* @brief Ruch liniowy mobilnego urządzenia
3* @param [in] distance Dystans ruchu liniowego (mm)
4* @param [in] vel Procent prędkości ruchu liniowego (0-100)
5* @return Kod błędu
6*/
7int TractorMoveL(double distance, double vel);
13.63. Ruch łukowy mobilnego urządzenia
1/**
2* @brief Ruch łukowy mobilnego urządzenia
3* @param [in] radio Promień ruchu łukowego (mm)
4* @param [in] angle Kąt ruchu łukowego (°)
5* @param [in] vel Procent prędkości ruchu liniowego (0-100)
6* @return Kod błędu
7*/
8int TractorMoveC(double radio, double angle, double vel);
13.64. Zatrzymanie ruchu mobilnego urządzenia
1/**
2* @brief Zatrzymuje ruch mobilnego urządzenia
3* @return Kod błędu
4*/
5int TractorStop();
13.65. Przykład kodu mobilnego urządzenia
1public static void main(String[] args)
2{
3 Robot robot = new Robot();
4 robot.SetReconnectParam(true,20,500);//ustawienie liczby prób ponownego łączenia i odstępu
5 robot.LoggerInit(FrLogType.DIRECT, FrLogLevel.INFO, "D://log", 10, 10);
6 int rtn = robot.RPC("192.168.58.2");
7 if(rtn == 0)
8 {
9 System.out.println("rpc połączenie success");
10 }
11 else
12 {
13 System.out.println("rpc połączenie fail");
14 return ;
15 }
16 UDPComParam param = new UDPComParam("192.168.58.88", 2021, 2, 100, 3, 100, 1, 100, 10);
17 robot.ExtDevSetUDPComParam(param);//komunikacja UDP osi rozszerzonej
18 robot.ExtAxisParamConfig(1, 0, 0, 50000, -50000, 1000, 1000, 6.280, 16384, 200, 0, 0, 0);
19 robot.ExtAxisParamConfig(2, 0, 0, 50000, -50000, 1000, 1000, 6.280, 16384, 200, 0, 0, 0);
20 robot.SetAxisDHParaConfig(5, 0, 0, 0, 0, 0, 0, 0, 0);
21
22 robot.TractorEnable(false);
23 robot.Sleep(2000);
24 robot.TractorEnable(true);
25 robot.Sleep(2000);
26 robot.TractorHoming();
27
28 robot.Sleep(2000);
29 robot.TractorMoveL(100, 20);
30 robot.Sleep(5000);
31 robot.TractorMoveL(-100, 20);
32 robot.Sleep(5000);
33 robot.TractorMoveC(300, 90, 20);
34 robot.Sleep(2000);
35 robot.TractorStop();//zatrzymanie wózka
36 robot.TractorMoveC(300, -90, 20);
37}
13.66. Ustawianie czasu zakończenia pozycjonowania osi rozszerzonej UDP
1/**
2* @brief Ustawia czas zakończenia pozycjonowania osi rozszerzonej UDP
3* @param time Czas zakończenia pozycjonowania [ms]
4* @return Kod błędu
5*/
6public int SetExAxisCmdDoneTime(double time)