11. Urządzenia peryferyjne robota
11.1. Konfiguracja chwytaka
1/**
2* @brief Konfiguracja chwytaka
3* @param [in] config .company Producent chwytaka, 1-Robotiq, 2-Huiling, 3-Tianji, 4-Dahuan, 5-Zhixing
4* @param [in] config .device Numer urządzenia, Robotiq(0-2F-85 series), Huiling(0-NK series,1-Z-EFG-100), Tianji(0-TEG-110), Dahuan(0-PGI-140), Zhixing(0-CTPM2F20)
5* @param [in] config .softvesion Numer wersji oprogramowania, tymczasowo nieużywane, domyślnie 0
6* @param [in] config .bus Pozycja magistrali końcowej urządzenia, tymczasowo nieużywane, domyślnie 0
7* @return Kod błędu
8*/
9int SetGripperConfig(DeviceConfig config);
11.2. Pobranie konfiguracji chwytaka
1/**
2* @brief Pobranie konfiguracji chwytaka
3* @param [out] config .company Producent chwytaka, 1-Robotiq, 2-Huiling, 3-Tianji, 4-Dahuan, 5-Zhixing
4* @param [out] config .device Numer urządzenia, Robotiq(0-2F-85 series), Huiling(0-NK series,1-Z-EFG-100), Tianji(0-TEG-110), Dahuan(0-PGI-140), Zhixing(0-CTPM2F20)
5* @param [out] config .softvesion Numer wersji oprogramowania, tymczasowo nieużywane, domyślnie 0
6* @param [out] config .bus Pozycja magistrali końcowej urządzenia, tymczasowo nieużywane, domyślnie 0
7* @return Kod błędu
8*/
9int GetGripperConfig(DeviceConfig config);
11.3. Aktywacja chwytaka
1/**
2* @brief Aktywacja chwytaka
3* @param [in] index Numer chwytaka
4* @param [in] act 0-reset, 1-aktywacja
5* @return Kod błędu
6*/
7int ActGripper(int index, int act);
11.4. Sterowanie chwytakiem
1/**
2* @brief Sterowanie chwytakiem
3* @param [in] index Numer chwytaka
4* @param [in] pos Procent pozycji, zakres [0~100]
5* @param [in] vel Procent prędkości, zakres [0~100]
6* @param [in] force Procent momentu, zakres [0~100]
7* @param [in] max_time Maksymalny czas oczekiwania, zakres [0~30000], jednostka ms
8* @param [in] block 0-blokujący, 1-nieblokujący
9* @param [in] type Typ chwytaka, 0-chwytak równoległy; 1-chwytak obrotowy
10* @param [in] rotNum Liczba obrotów
11* @param [in] rotVel Procent prędkości obrotowej [0-100]
12* @param [in] rotTorque Procent momentu obrotowego [0-100]
13* @return Kod błędu
14*/
15int MoveGripper(int index, int pos, int vel, int force, int max_time, int block, int type, double rotNum, int rotVel, int rotTorque);
11.5. Pobranie stanu ruchu chwytaka
1/**
2* @brief Pobranie stanu ruchu chwytaka
3* @return List[0]:Kod błędu; List[1] : fault 0-brak błędu, 1-jest błąd; List[2]: status 0-ruch niezakończony, 1-ruch zakończony
4*/
5List<Integer> GetGripperMotionDone();
11.6. Pobranie stanu aktywacji chwytaka
1/**
2* @brief Pobranie stanu aktywacji chwytaka
3* @return List[0]:Kod błędu; List[1] : fault 0-brak błędu, 1-jest błąd; List[2]: status bit0~bit15 odpowiada numerom chwytaka 0~15, bit=0 oznacza nieaktywny, bit=1 oznacza aktywny
4*/
5List<Number> GetGripperActivateStatus()
11.7. Pobranie pozycji chwytaka
1/**
2* @brief Pobranie pozycji chwytaka
3* @return List[0]:Kod błędu; List[1] : fault 0-brak błędu, 1-jest błąd; List[2]: position Procent pozycji, zakres 0~100%
4*/
5List<Number> GetGripperCurPosition()
11.8. Pobranie prędkości chwytaka
1/**
2* @brief Pobranie prędkości chwytaka
3* @return List[0]:Kod błędu; List[1] : fault 0-brak błędu, 1-jest błąd; List[2]: speed Procent prędkości, zakres 0~100%
4*/
5List<Number> GetGripperCurSpeed()
11.9. Pobranie prądu chwytaka
1/**
2* @brief Pobranie prądu chwytaka
3* @return List[0]:Kod błędu; List[1] : fault 0-brak błędu, 1-jest błąd; List[2]: current Procent prądu, zakres 0~100%
4*/
5List<Number> GetGripperCurCurrent()
11.10. Pobranie napięcia chwytaka
1/**
2* @brief Pobranie napięcia chwytaka
3* @return List[0]:Kod błędu; List[1] : fault 0-brak błędu, 1-jest błąd; List[2]:voltage Napięcie, jednostka 0.1V
4*/
5List<Number> GetGripperVoltage()
11.11. Pobranie temperatury chwytaka
1/**
2* @brief Pobranie temperatury chwytaka
3* @return List[0]:Kod błędu; List[1] : fault 0-brak błędu, 1-jest błąd; List[2]:temp Temperatura, jednostka ℃
4*/
5List<Number> GetGripperTemp()
11.12. Obliczenie punktu wstępnego chwytania - wizja
1/**
2* @brief Obliczenie punktu wstępnego chwytania - wizja
3* @param [in] desc_pos Pozycja kartezjańska punktu chwytania
4* @param [in] zlength Przesunięcie osi Z
5* @param [in] zangle Przesunięcie obrotu wokół osi Z
6* @param [out] pre_pos Punkt wstępny
7* @return Kod błędu
8*/
9int ComputePrePick(DescPose desc_pos, double zlength, double zangle, DescPose pre_pos);
11.13. Obliczenie punktu wycofania - wizja
1/**
2* @brief Obliczenie punktu wycofania - wizja
3* @param [in] desc_pos Pozycja kartezjańska punktu chwytania
4* @param [in] zlength Przesunięcie osi Z
5* @param [in] zangle Przesunięcie obrotu wokół osi Z
6* @param [out] post_poss Punkt wycofania
7* @return Kod błędu
8*/
9int ComputePostPick(DescPose desc_pos, double zlength, double zangle, DescPose post_pos);
11.14. Przykład kodu operacji chwytakiem robota
1public static int TestGripper(Robot robot)
2{
3 int company = 4;
4 int device = 0;
5 int softversion = 0;
6 int bus = 2;
7 int index = 2;
8 int act = 0;
9 int max_time = 30000;
10 int block = 0;
11
12 int current_pos = 0;
13 int current = 0;
14 int voltage = 0;
15 int temp = 0;
16 int speed = 0;
17
18 DeviceConfig cnn=new DeviceConfig(company,device,softversion,bus);
19 robot.SetGripperConfig(cnn);
20 robot.GetGripperConfig(cnn);
21
22 robot.ActGripper(index, act);
23 robot.Sleep(1000);
24 act = 1;
25 robot.ActGripper(index, act);
26 robot.Sleep(1000);
27
28 robot.MoveGripper(index, 100, 50, 50, max_time, block, 0, 0, 0, 0);
29 robot.Sleep(1000);
30 robot.MoveGripper(index, 0, 50, 0, max_time, block, 0, 0, 0, 0);
31
32 List<Integer> stat=new ArrayList<>();
33 stat=robot.GetGripperMotionDone();
34
35 List<Number> list=new ArrayList<>();
36 list=robot.GetGripperActivateStatus();
37
38 list=robot.GetGripperCurPosition();
39
40 list=robot.GetGripperCurCurrent();
41
42 list=robot.GetGripperVoltage();
43
44 list=robot.GetGripperTemp();
45
46 list=robot.GetGripperCurSpeed();
47
48 int retval = 0;
49 DescPose prepick_pose = new DescPose(){};
50 DescPose postpick_pose = new DescPose(){};
51
52 DescPose p1Desc=new DescPose(-419.524, -13.000, 351.569, -178.118, 0.314, 3.833);
53 DescPose p2Desc=new DescPose(-321.222, 185.189, 335.520, -179.030, -1.284, -29.869);
54
55 retval = robot.ComputePrePick(p1Desc, 10, 0, prepick_pose);
56
57 retval = robot.ComputePostPick(p2Desc, -10, 0, postpick_pose);
58 return 0;
59}
11.15. Pobranie liczby obrotów chwytaka obrotowego
1/**
2* @brief Pobranie liczby obrotów chwytaka obrotowego
3* @return List[0]:Kod błędu List[1]: 0-brak błędu, 1-jest błąd List[2]:Liczba obrotów
4*/
5List<Number> GetGripperRotNum();
11.16. Pobranie procentu prędkości obrotowej chwytaka obrotowego
1/**
2* @brief Pobranie procentu prędkości obrotowej chwytaka obrotowego
3* @return List[0]:Kod błędu List[1]: 0-brak błędu, 1-jest błąd List[2]:Procent prędkości obrotowej
4*/
5List<Number> GetGripperRotSpeed();
11.17. Pobranie procentu momentu obrotowego chwytaka obrotowego
1/**
2* @brief Pobranie procentu momentu obrotowego chwytaka obrotowego
3* @return List[0]:Kod błędu List[1]: 0-brak błędu, 1-jest błąd List[2]:Procent momentu obrotowego
4*/
5List<Number> GetGripperRotTorque();
11.18. Przykład kodu pobrania stanu chwytaka obrotowego
1public static int TestRotGripperState(Robot robot)
2{
3 int fault = 0;
4 List<Number> rotNum=new ArrayList<>();
5 List<Number> rotSpeed=new ArrayList<>();
6 List<Number> rotTorque=new ArrayList<>();
7
8 rotNum=robot.GetGripperRotNum();
9 rotSpeed=robot.GetGripperRotSpeed();
10 rotTorque=robot.GetGripperRotTorque();
11 System.out.println("gripper rot num :"+rotNum.get(2)+ ", gripper rotSpeed :"+rotSpeed.get(2)+",gripper rotTorque : "+rotTorque.get(2));
12
13 return 0;
14}
11.19. Uruchomienie, zatrzymanie przenośnika taśmowego
1/**
2* @brief Uruchomienie, zatrzymanie przenośnika taśmowego
3* @param [in] status Stan, 1-uruchom, 0-zatrzymaj
4* @return Kod błędu
5*/
6int ConveyorStartEnd(int status);
11.20. Rejestracja punktu detekcji IO
1/**
2* @brief Rejestracja punktu detekcji IO
3* @return Kod błędu
4*/
5int ConveyorPointIORecord();
11.21. Rejestracja punktu A
1/**
2* @brief Rejestracja punktu A
3* @return Kod błędu
4*/
5int ConveyorPointARecord();
11.22. Rejestracja punktu odniesienia
1/**
2* @brief Rejestracja punktu odniesienia
3* @return Kod błędu
4*/
5int ConveyorRefPointRecord();
11.23. Rejestracja punktu B
1/**
2* @brief Rejestracja punktu B
3* @return Kod błędu
4*/
5int ConveyorPointBRecord();
11.24. Detekcja IO przedmiotu na przenośniku
1/**
2* @brief Detekcja IO przedmiotu na przenośniku
3* @param [in] max_t Maksymalny czas detekcji, jednostka ms
4* @return Kod błędu
5*/
6int ConveyorIODetect(int max_t);
11.25. Pobranie bieżącej pozycji przedmiotu
1/**
2* @brief Pobranie bieżącej pozycji przedmiotu
3* @param [in] mode 1-śledzenie i chwytanie, 2-śledzenie ruchu, 3-śledzenie TPD
4* @return Kod błędu
5*/
6int ConveyorGetTrackData(int mode);
11.26. Rozpoczęcie śledzenia przenośnika
1/**
2* @brief Rozpoczęcie śledzenia przenośnika
3* @param [in] status Stan, 1-uruchom, 0-zatrzymaj
4* @return Kod błędu
5*/
6int ConveyorTrackStart(int status);
11.27. Zatrzymanie śledzenia przenośnika
1/**
2* @brief Zatrzymanie śledzenia przenośnika
3* @return Kod błędu
4*/
5int ConveyorTrackEnd();
11.28. Konfiguracja parametrów przenośnika
Zmienione w wersji Java: SDK-v1.0.4-3.8.1
1/**
2* @brief Konfiguracja parametrów przenośnika
3* @param [in] encChannel Kanał enkodera 1~2
4* @param [in] resolution Liczba impulsów enkodera na jeden obrót
5* @param [in] lead Odległość przejścia przenośnika na jeden obrót enkodera
6* @param [in] wpAxis Numer układu przedmiotu dla funkcji śledzenia ruchu wybierz numer układu przedmiotu, dla śledzenia chwytania, śledzenia TPD ustaw na 0
7* @param [in] vision Czy z wizją 0 nie 1 tak
8* @param [in] speedRadio Współczynnik prędkości dla opcji śledzenia chwytania przenośnika (1-100) dla innych opcji domyślnie 1
9* @param [in] followType Typ śledzenia ruchu, 0-śledzenie ruchu; 1-śledzenie kontrolne
10* @param [in] startDis Należy ustawić dla śledzenia kontrolnego, Odległość początkowa śledzenia, -1: automatyczne obliczenie (automatyczne śledzenie kontrolne po dotarciu przedmiotu pod robota), jednostka mm, wartość domyślna 0
11* @param [in] endDis Należy ustawić dla śledzenia kontrolnego, Odległość końcowa śledzenia, jednostka mm, wartość domyślna 100
12* @return Kod błędu
13*/
14int ConveyorSetParam(int encChannel, int resolution, double lead, int wpAxis, int vision, double speedRadio, int followType, int startDis, int endDis);
11.29. Ustawienie kompensacji punktu chwytania przenośnika
1/**
2* @brief Ustawienie kompensacji punktu chwytania przenośnika
3* @param [in] cmp Pozycja kompensacji double[3]{x, y, z}
4* @return Kod błędu
5*/
6int ConveyorCatchPointComp(Object[] cmp);
11.30. Ruch liniowy przenośnika
1/**
2* @brief Ruch liniowy
3* @param [in] name Opis punktu ruchu
4* @param [in] tool Numer narzędzia, zakres [0~14]
5* @param [in] wobj Numer przedmiotu, 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* @return Kod błędu
11*/
12int ConveyorTrackMoveL(String name, int tool, int wobj, double vel, double acc, double ovl, double blendR);
11.31. Detekcja wejścia komunikacyjnego przenośnika
Nowe w wersji Java: SDK-v1.0.4-3.8.1
1/**
2* @brief Detekcja wejścia komunikacyjnego przenośnika
3* @param [in] timeout Czas oczekiwania na timeout ms
4* @return Kod błędu
5*/
6int ConveyorComDetect(int timeout);
11.32. Wyzwolenie detekcji wejścia komunikacyjnego przenośnika
Nowe w wersji Java: SDK-v1.0.4-3.8.1
1/**
2* @brief Wyzwolenie detekcji wejścia komunikacyjnego przenośnika
3* @param [in] timeout Czas oczekiwania na timeout ms
4* @return Kod błędu
5*/
6int ConveyorComDetectTrigger();
11.33. Przykładowy program operacji przenośnika robota
1public static int TestConveyor(Robot robot)
2{
3 int retval = 0;
4
5 retval = robot.ConveyorStartEnd(1);
6
7 retval = robot.ConveyorPointIORecord();
8
9 retval = robot.ConveyorPointARecord();
10
11 retval = robot.ConveyorRefPointRecord();
12
13 retval = robot.ConveyorPointBRecord();
14
15 retval = robot.ConveyorStartEnd(0);
16
17 retval = 0;
18
19 retval = robot.ConveyorSetParam(1,10000,200,0,0,20,0,0,100);
20
21 Object[] cmp = new Object[]{ 0.0, 0.0, 0.0 };
22 retval = robot.ConveyorCatchPointComp(cmp);
23
24 int index = 1;
25 int max_time = 30000;
26 int block = 0;
27 retval = 0;
28
29 DescPose p1Desc=new DescPose(-419.524, -13.000, 351.569, -178.118, 0.314, 3.833);
30 DescPose p2Desc=new DescPose(-321.222, 185.189, 335.520, -179.030, -1.284, -29.869);
31
32
33 retval = robot.MoveCart(p1Desc, 1, 0, 100.0, 100.0, 100.0, -1.0, -1);
34
35 retval = robot.WaitMs(1);
36
37 retval = robot.ConveyorTrackStart(1);
38
39 retval = robot.ConveyorTrackMoveL("cvrCatchPoint", 1, 0, 100, 100, 100, -1.0);
40
41 retval = robot.MoveGripper(index, 51, 40, 30, max_time, block, 0, 0, 0, 0);
42
43 retval = robot.ConveyorTrackMoveL("cvrRaisePoint", 1, 0, 100, 100, 100, -1.0);
44
45 retval = robot.ConveyorTrackEnd();
46
47 robot.MoveCart(p2Desc, 1, 0, 100.0, 100.0, 100.0, -1.0, -1);
48
49 retval = robot.MoveGripper(index, 100, 40, 10, max_time, block, 0, 0, 0, 0);
50
51 return 0;
52}
11.34. Konfiguracja czujnika końcowego
1/**
2* @brief Konfiguracja czujnika końcowego
3* @param [in] config idCompany Producent, 18-JUNKONG;25-HUIDE
4* @param [in] config idDevice Typ, 0-JUNKONG/RYR6T.V1.0
5* @param [in] config idSoftware Wersja oprogramowania, 0-J1.0/HuiDe1.0(tymczasowo niedostępne)
6* @param [in] config idBus Pozycja podłączenia, 1-port końcowy 1;2-port końcowy 2...8-port końcowy 8(tymczasowo niedostępne)
7* @return Kod błędu
8*/
9int AxleSensorConfig(DeviceConfig config);
11.35. Pobranie konfiguracji czujnika końcowego
1/**
2* @brief Pobranie konfiguracji czujnika końcowego
3* @param [out] config idCompany Producent, 18-JUNKONG;25-HUIDE
4* @param [out] config idDevice Typ, 0-JUNKONG/RYR6T.V1.0
5* @return Kod błędu
6*/
7int AxleSensorConfigGet(DeviceConfig config);
11.36. Aktywacja czujnika końcowego
1/**
2* @brief Aktywacja czujnika końcowego
3* @param [in] actFlag 0-reset;1-aktywacja
4* @return Kod błędu
5*/
6int AxleSensorActivate(int actFlag);
11.37. Zapis do rejestru czujnika końcowego
1/**
2* @brief Zapis do rejestru czujnika końcowego
3* @param [in] devAddr Numer adresu urządzenia 0-255
4* @param [in] regHAddr Adres rejestru wysoki 8 bitów
5* @param [in] regLAddr Adres rejestru niski 8 bitów
6* @param [in] regNum Liczba rejestrów 0-255
7* @param [in] data1 Wartość do zapisu do rejestru 1
8* @param [in] data2 Wartość do zapisu do rejestru 2
9* @param [in] isNoBlock 0-blokujący;1-nieblokujący
10* @return Kod błędu
11*/
12int AxleSensorRegWrite(int devAddr, int regHAddr, int regLAddr, int regNum, int data1, int data2, int isNoBlock);
11.38. Przykład kodu czujnika końcowego
1public static int TestAxleSensor(Robot robot)
2{
3 DeviceConfig con=new DeviceConfig(18,0,0,1);
4 robot.AxleSensorConfig(con);
5 int company = -1;
6 int type = -1;
7 robot.AxleSensorConfigGet(con);
8
9 int rtn = robot.AxleSensorActivate(1);
10
11 robot.Sleep(1000);
12
13 rtn = robot.AxleSensorRegWrite(1, 4, 6, 1, 0, 0, 0);
14 return 0;
15}
11.39. Pobranie protokołu urządzeń peryferyjnych robota
1/**
2* @brief Pobranie protokołu urządzeń peryferyjnych robota
3* @return List[0]:Kod błędu; List[1] : int protocol Numer protokołu urządzeń peryferyjnych robota 4096-karta sterująca osią rozszerzenia;4097-ModbusSlave;4098-ModbusMaster
4*/
5List<Integer> GetExDevProtocol();
11.40. Ustawienie protokołu urządzeń peryferyjnych robota
1/**
2* @brief Ustawienie protokołu urządzeń peryferyjnych robota
3* @param [in] protocol Numer protokołu urządzeń peryferyjnych robota 4096-karta sterująca osią rozszerzenia;4097-ModbusSlave;4098-ModbusMaster
4* @return Kod błędu
5*/
6int SetExDevProtocol(int protocol);
11.41. Przykładowy program ustawiania protokołu urządzeń peryferyjnych robota
1public static int TestExDevProtocol(Robot robot)
2{
3 int protocol = 4096;
4 int rtn = robot.SetExDevProtocol(protocol);
5 List<Integer> integer=new ArrayList<>();
6 integer = robot.GetExDevProtocol();
7
8 return 0;
9}
11.42. Pobranie parametrów komunikacji końcowej
1/**
2* @brief Pobranie parametrów komunikacji końcowej
3* @param [out] param Parametry komunikacji końcowej
4* @return Kod błędu
5*/
6int GetAxleCommunicationParam(AxleComParam param)
11.43. Ustawienie parametrów komunikacji końcowej
1/**
2* @brief Ustawienie parametrów komunikacji końcowej
3* @param [in] param Parametry komunikacji końcowej
4* @return Kod błędu
5*/
6int SetAxleCommunicationParam(AxleComParam param)
11.44. Ustawienie typu transferu pliku końcowego
1/**
2* @brief Ustawienie typu transferu pliku końcowego
3* @param [in] type 1-plik aktualizacji MCU;2-plik LUA
4* @return Kod błędu
5*/
6public int SetAxleFileType(int type)
11.45. Ustawienie włączenia wykonania LUA końcowego
1/**
2* @brief Ustawienie włączenia wykonania LUA końcowego
3* @param [in] enable 0-niewłączony;1-włączony
4* @return Kod błędu
5*/
6public int SetAxleLuaEnable(int enable)
11.46. Odnowienie błędu wyjątkowego pliku LUA końcowego
1/**
2* @brief Odnowienie błędu wyjątkowego pliku LUA końcowego
3* @param [in] status 0-nie odnawiaj;1-odnów
4* @return Kod błędu
5*/
6public int SetRecoverAxleLuaErr(int status)
11.47. Pobranie stanu włączenia wykonania LUA końcowego
1/**
2* @brief Pobranie stanu włączenia wykonania LUA końcowego
3* @param [out] status[0]: 0-niewłączony;1-włączony
4* @return Kod błędu
5*/
6int GetAxleLuaEnableStatus(int[] status)
11.48. Ustawianie włączonych typów urządzeń końcówki dla LUA
1/**
2* @brief Ustawia włączone typy urządzeń końcówki dla LUA
3* @param forceSensorEnable Stan włączenia czujnika siły, 0-wyłączony; 1-włączony
4* @param gripperEnable Stan włączenia chwytaka, 0-wyłączony; 1-włączony
5* @param IOEnable Stan włączenia urządzenia IO, 0-wyłączony; 1-włączony
6* @param dexhandEnable Stan włączenia dłoni, 0-wyłączony; 1-włączony
7* @return Kod błędu
8*/
9public int SetAxleLuaEnableDeviceType(int forceSensorEnable, int gripperEnable, int IOEnable, int dexhandEnable)
11.49. Pobieranie włączonych typów urządzeń końcówki dla LUA
1/**
2 * @brief Pobiera włączone typy urządzeń końcówki dla LUA
3 * @param enable enable[0]:forceSensorEnable Stan włączenia czujnika siły, 0-wyłączony; 1-włączony
4 * @param enable enable[1]:gripperEnable Stan włączenia chwytaka, 0-wyłączony; 1-włączony
5 * @param enable enable[2]:IOEnable Stan włączenia urządzenia IO, 0-wyłączony; 1-włączony
6 * @param enable enable[3]:dexhandEnable Stan włączenia dłoni, 0-wyłączony; 1-włączony
7 * @return Kod błędu
8 */
9public int GetAxleLuaEnableDeviceType(int[] enable)
11.50. Pobieranie aktualnie skonfigurowanych urządzeń końcówki
1/**
2 * @brief Pobiera aktualnie skonfigurowane urządzenia końcówki
3 * @param forceSensorEnable Numer włączonego urządzenia czujnika siły, 0-wyłączony; 1-włączony
4 * @param gripperEnable Numer włączonego urządzenia chwytaka, 0-wyłączony; 1-włączony
5 * @param IODeviceEnable Numer włączonego urządzenia IO, 0-wyłączony; 1-włączony
6 * @param dexhandEnable Stan włączenia dłoni, 0-wyłączony; 1-włączony
7 * @return Kod błędu
8 */
9public int GetAxleLuaEnableDevice(int[] forceSensorEnable, int[] gripperEnable, int[] IODeviceEnable, int[] dexhandEnable)
11.51. Ustawianie włączonych funkcji sterowania ruchem chwytaka
1/**
2 * @brief Ustawia włączone funkcje sterowania ruchem chwytaka
3 * @param id Numer urządzenia chwytaka
4 * @param func func[0]-włączenie chwytaka; func[1]-inicjalizacja chwytaka; func[2]-ustawienie pozycji; func[3]-ustawienie prędkości; func[4]-ustawienie momentu obrotowego; func[6]-odczyt stanu chwytaka;
5 func[7]-odczyt stanu inicjalizacji; func[8]-odczyt kodu błędu; func[9]-odczyt pozycji; func[10]-odczyt prędkości; func[11]-odczyt momentu obrotowego; func[12]-ustawienie liczby obrotów dla chwytaka obrotowego;
6 func[13]-ustawienie prędkości obrotowej dla chwytaka obrotowego; func[14]-ustawienie momentu obrotowego dla chwytaka obrotowego; func[15]-odczyt stanu chwytaka obrotowego; func[16]-odczyt stanu inicjalizacji chwytaka obrotowego;
7 func[17]-odczyt liczby obrotów chwytaka obrotowego; func[18]-odczyt prędkości chwytaka obrotowego; func[19]-odczyt momentu obrotowego chwytaka obrotowego; func[20]-ustawienie ruchu synchronicznego wieloosiowego; func[21]-komenda kasowania błędów;
8 func[22]-stan pracy pojedynczej osi; func[23]-stan pracy wszystkich osi;
9 * @return Kod błędu
10 */
11public int SetAxleLuaGripperFunc(int id, int[] func)
11.52. Pobieranie włączonych funkcji sterowania ruchem chwytaka
1/**
2 * @brief Pobiera włączone funkcje sterowania ruchem chwytaka
3 * @param id Numer urządzenia chwytaka
4 * @param func func[0]-włączenie chwytaka; func[1]-inicjalizacja chwytaka; func[2]-ustawienie pozycji; func[3]-ustawienie prędkości; func[4]-ustawienie momentu obrotowego; func[6]-odczyt stanu chwytaka;
5 func[7]-odczyt stanu inicjalizacji; func[8]-odczyt kodu błędu; func[9]-odczyt pozycji; func[10]-odczyt prędkości; func[11]-odczyt momentu obrotowego; func[12]-ustawienie liczby obrotów dla chwytaka obrotowego;
6 func[13]-ustawienie prędkości obrotowej dla chwytaka obrotowego; func[14]-ustawienie momentu obrotowego dla chwytaka obrotowego; func[15]-odczyt stanu chwytaka obrotowego; func[16]-odczyt stanu inicjalizacji chwytaka obrotowego;
7 func[17]-odczyt liczby obrotów chwytaka obrotowego; func[18]-odczyt prędkości chwytaka obrotowego; func[19]-odczyt momentu obrotowego chwytaka obrotowego; func[20]-ustawienie ruchu synchronicznego wieloosiowego; func[21]-komenda kasowania błędów;
8 func[22]-stan pracy pojedynczej osi; func[23]-stan pracy wszystkich osi;
9 * @return Kod błędu
10 */
11public int GetAxleLuaGripperFunc(int id, int[] func)
11.53. Zapis pliku węzła podrzędnego Ethercat robota
1/**
2 * @brief Zapis pliku węzła podrzędnego Ethercat robota
3 * @param type Typ pliku węzła podrzędnego, 1-plik aktualizacji węzła podrzędnego;2-plik konfiguracyjny węzła podrzędnego
4 * @param slaveID Numer węzła podrzędnego
5 * @param fileName Nazwa przesyłanego pliku
6 * @return Kod błędu
7 */
8public int SlaveFileWrite(int type, int slaveID, String fileName)
11.54. Przesłanie pliku protokołu otwartego LUA końcowego
1/**
2 * @brief Przesłanie pliku protokołu otwartego LUA końcowego
3 * @param filePath Ścieżka lokalnego pliku lua ".../AXLE_LUA_End_DaHuan.lua"
4 * @return Kod błędu
5 */
6public int AxleLuaUpload(String filePath)
11.55. Wprowadzenie węzła podrzędnego Ethercat robota w tryb boot
1/**
2 * @brief Wprowadzenie węzła podrzędnego Ethercat robota w tryb boot
3 * @return Kod błędu
4 */
5public int SetSysServoBootMode()
11.56. Przykład kodu operacji na pliku LUA końcowego robota
1public static int TestAxleLua(Robot robot)
2{
3 robot.AxleLuaUpload("D://zUP/AXLE_LUA_End_DaHuan.lua");
4
5 AxleComParam param=new AxleComParam(7, 8, 1, 0, 5, 3, 1);
6 robot.SetAxleCommunicationParam(param);
7
8 robot.GetAxleCommunicationParam(param);
9
10 robot.SetAxleLuaEnable(1);
11 int[] luaEnableStatus = new int[]{0};
12 robot.GetAxleLuaEnableStatus(luaEnableStatus);
13 robot.SetAxleLuaEnableDeviceType(0, 1, 0);
14
15 int forceEnable = 0;
16 int gripperEnable = 0;
17 int ioEnable = 0;
18 int [] enable=new int[]{0,0,0};
19 robot.GetAxleLuaEnableDeviceType(enable);
20
21 int[] func = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
22 robot.SetAxleLuaGripperFunc(1, func);
23 int[] getFunc = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
24 robot.GetAxleLuaGripperFunc(1, getFunc);
25 int[] getforceEnable = { 0,0,0,0,0,0,0,0};
26 int[] getgripperEnable = { 0,0,0,0,0,0,0,0};
27 int[] getioEnable = { 0,0,0,0,0,0,0,0};
28 robot.GetAxleLuaEnableDevice(getforceEnable, getgripperEnable, getioEnable);
29 for (int i = 0; i < 8; i++)
30 {
31 System.out.println(getforceEnable[i]);
32 }
33 System.out.println("getgripperEnable status : ");
34 for (int i = 0; i < 8; i++)
35 {
36 System.out.println(getgripperEnable[i]);
37 }
38 System.out.println("getioEnable status : ");
39 for (int i = 0; i < 8; i++)
40 {
41 System.out.println(getioEnable[i]);
42 }
43 robot.ActGripper(1, 0);
44 robot.Sleep(2000);
45 robot.ActGripper(1, 1);
46 robot.Sleep(2000);
47 robot.MoveGripper(1, 90, 10, 100, 50000, 0, 0, 0, 0, 0);
48 int pos = 0;
49 while (true)
50 {
51 ROBOT_STATE_PKG pkg=new ROBOT_STATE_PKG();
52 pkg=robot.GetRobotRealTimeState();
53 System.out.println("gripper pos is:"+pkg.gripper_position);
54 robot.Sleep(100);
55 }
56
57}
11.57. Pobranie stanu przycisków SmartTool
Nowe w wersji Java: SDK-v1.0.4-3.8.1
1/**
2* @brief Pobranie stanu przycisków SmartTool
3* @param [out] state Stan przycisków uchwytu SmartTool;(bit0:0-komunikacja normalna;1-utrata komunikacji;bit1-cofnij operację;bit2-wyczyść program;bit3-przycisk A;bit4-przycisk B;bit5-przycisk C;bit6-przycisk D;bit7-przycisk E;bit8-przycisk IO;bit9-ręczny/automatyczny;bit10-start)
4* @return Kod błędu
5*/
6int GetSmarttoolBtnState(int[] state)
11.58. Przykład kodu przycisków SmartTool
1public static void main(String[] args)
2{
3 Robot robot = new Robot();
4 robot.SetReconnectParam(true, 100, 500);//设置重连次数、间隔
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 System.out.println("rpc连接 success");
9 } else {
10 System.out.println("rpc连接 fail");
11 return;
12 }
13
14 int[] state = {0};
15 while (true)
16 {
17 robot.GetSmarttoolBtnState(state);
18
19 String binaryString = String.format("%32s", Integer.toBinaryString(state[0])).replace(' ', '0');
20 System.out.println("GetSmarttoolBtnState:"+binaryString);
21 robot.Sleep(100);
22 }
23}
11.59. Przesłanie pliku LUA protokołu otwartego
Nowe w wersji Java: SDK-v1.0.8-3.8.5
1/**
2* @brief Przesłanie pliku LUA protokołu otwartego
3* @param filePath Ścieżka lokalnego pliku lua protokołu otwartego
4* @return Kod błędu
5*/
6public int OpenLuaUpload(String filePath)
11.60. Pobranie parametrów karty węzła podrzędnego
Nowe w wersji Java: SDK-v1.0.8-3.8.5
1/**
2* @brief Pobranie parametrów karty węzła podrzędnego
3* @param type 0-Ethercat,1-CClink, 3-Ethercat, 4-EIP
4* @param version Wersja protokołu
5* @param connState 0-niepołączony 1-połączony
6* @return Kod błędu
7*/
8public int GetFieldBusConfig(int[] type, int[] version, int[] connState)
11.61. Zapis DO węzła podrzędnego
Nowe w wersji Java: SDK-v1.0.8-3.8.5
1/**
2* @brief Zapis DO węzła podrzędnego
3* @param DOIndex Numer DO
4* @param wirteNum Liczba do zapisu
5* @param status Wartości do zapisu, maksymalnie 8
6* @return Kod błędu
7*/
8public int FieldBusSlaveWriteDO(int DOIndex, int wirteNum, int[] status)
11.62. Zapis AO węzła podrzędnego
Nowe w wersji Java: SDK-v1.0.8-3.8.5
1/*
2* @brief Zapis AO węzła podrzędnego
3* @param AOIndex Numer AO
4* @param wirteNum Liczba do zapisu
5* @param status Tablica wartości do zapisu (maksymalnie 8), AO0~AO15 są typu całkowitego, AO16~AO31 są typu zmiennoprzecinkowego
6* @return Kod błędu
7*/
8public int FieldBusSlaveWriteAO(int AOIndex, int wirteNum, double[] status)
11.63. Odczyt DI węzła podrzędnego
Nowe w wersji Java: SDK-v1.0.8-3.8.5
1/**
2* @brief Odczyt DI węzła podrzędnego
3* @param DOIndex Numer DI
4* @param readNum Liczba do odczytu
5* @param status Odczytane wartości, maksymalnie 8
6* @return Kod błędu
7*/
8public int FieldBusSlaveReadDI(int DOIndex, int readNum, int[] status)
11.64. Odczyt AI węzła podrzędnego
Nowe w wersji Java: SDK-v1.0.8-3.8.5
1/**
2* @brief Odczyt AI węzła podrzędnego
3* @param AIIndex Numer AI
4* @param readNum Liczba do odczytu
5* @param status Odczytane wartości, maksymalnie 8
6* @return Kod błędu
7*/
8public int FieldBusSlaveReadAI(int AIIndex, int readNum, double[] status)
11.65. Oczekiwanie na wejście rozszerzonego DI
Nowe w wersji Java: SDK-v1.0.8-3.8.5
1/**
2* @brief Oczekiwanie na wejście rozszerzonego DI
3* @param DIIndex Numer DI
4* @param status 0-niski poziom;1-wysoki poziom
5* @param waitMs Maksymalny czas oczekiwania (ms)
6* @return Kod błędu
7*/
8public int FieldBusSlaveWaitDI(int DIIndex, int status, int waitMs)
11.66. Oczekiwanie na wejście rozszerzonego AI
Nowe w wersji Java: SDK-v1.0.8-3.8.5
1/**
2* @brief Oczekiwanie na wejście rozszerzonego AI
3* @param AIIndex Numer AI
4* @param waitType 0-większe niż;1-mniejsze niż
5* @param value Wartość AI
6* @param waitMs Maksymalny czas oczekiwania (ms)
7* @return Kod błędu
8*/
9public int FieldBusSlaveWaitAI(int AIIndex, int waitType, double value, int waitMs)
11.67. Przykład kodu instrukcji interfejsów trybu węzła podrzędnego
1public static void testFieldBusBoard(Robot robot)
2{
3 // Przesłanie i załadowanie pliku protokołu otwartego
4 robot.OpenLuaUpload("D://zUP/1111/CtrlDev_field.lua");
5 robot.Sleep(2000);
6 robot.SetCtrlOpenLUAName(3, "CtrlDev_field.lua");
7 robot.UnloadCtrlOpenLUA(3);
8 robot.LoadCtrlOpenLUA(3);
9 robot.Sleep(8000);
10 int[] type=new int[1];
11 int[] version=new int[1];
12 int[] connState=new int[1];
13 // Pobranie typu protokołu karty węzła podrzędnego, wersji oprogramowania, stanu połączenia z PLC
14 robot.GetFieldBusConfig(type, version, connState);
15 System.out.println("type is: "+type[0]+", version is : "+version[0]+", connState is : "+connState[0]);
16 // Zapis DO0 = 1, DO1 = 0, DO2 = 1
17 int[] ctrl =new int[8];
18 ctrl[0] = 1;
19 ctrl[1] = 0;
20 ctrl[2] = 1;
21 robot.FieldBusSlaveWriteDO(0, 3, ctrl);
22 // Zapis AO2 = 0x1000
23 int[] ctrlAO =new int[8];
24 ctrlAO[0] = 0x1000;
25 robot.FieldBusSlaveWriteAO(2, 1, ctrlAO);
26 int[] DI=new int[4];
27 double[] AI=new double[3];
28 // Pętla monitorująca DI0~DI3 AI0~AI2
29 for (int i = 0; i < 100; i++)
30 {
31 robot.FieldBusSlaveReadDI(0, 4, DI);
32 System.out.println("DI0 is: "+DI[0]+", DI1 is: "+DI[1]+",DI2 is: "+DI[2]+",DI3 is: "+DI[3]);
33 robot.FieldBusSlaveReadAI(0, 3, AI);
34 System.out.println("AI0 is: "+AI[0]+ ",AI1 is: "+AI[1]+",AI2 is: "+AI[2]);
35 robot.Sleep(10);
36 }
37 // Oczekiwanie, czy DI0 ma wartość 1, czas oczekiwania 100ms i wydrukowanie wyniku
38 int ret = robot.FieldBusSlaveWaitDI(0, 1, 100);
39 System.out.println("FieldBusSlaveWaitDI result is: "+ ret);
40 // Oczekiwanie, czy AI0 jest większe niż 400, czas oczekiwania 100ms i wydrukowanie wyniku
41 ret = robot.FieldBusSlaveWaitAI(0,0,400.00,100);
42 System.out.println("FieldBusSlaveWaitAI result is: "+ ret);
43 robot.CloseRPC();
44}
11.68. Sterowanie matrycową przyssawką
Nowe w wersji Java: SDK-v1.0.8-3.8.5
1/**
2* @brief Sterowanie matrycową przyssawką
3* @param slaveID Numer węzła podrzędnego
4* @param len Długość
5* @param ctrlValue Wartość sterowania 1-zassanie z maksymalnym podciśnieniem 2-zassanie z ustawionym podciśnieniem 3-zatrzymanie zassania
6* @return Kod błędu
7*/
8public int SetSuckerCtrl(int slaveID, int len, int[] ctrlValue)
11.69. Pobranie stanu matrycowej przyssawki
Nowe w wersji Java: SDK-v1.0.8-3.8.5
1/**
2* @brief Pobranie stanu matrycowej przyssawki
3* @param slaveID Numer węzła podrzędnego
4* @param state Stan przyssania 0-zwolnienie przedmiotu 1-wykryto pomyślne przyssanie przedmiotu 2-brak przyssania przedmiotu 3-oderwanie przedmiotu
5* @param pressValue Bieżące podciśnienie jednostka kpa
6* @param error Bieżący kod błędu przyssawki
7* @return Kod błędu
8*/
9public int GetSuckerState(int slaveID, int[] state, int[] pressValue, int[] error)
11.70. Oczekiwanie na stan przyssawki
Nowe w wersji Java: SDK-v1.0.8-3.8.5
1/**
2* @brief Oczekiwanie na stan przyssawki
3* @param slaveID Numer węzła podrzędnego
4* @param state Stan przyssania 0-zwolnienie przedmiotu 1-wykryto pomyślne przyssanie przedmiotu 2-brak przyssania przedmiotu 3-oderwanie przedmiotu
5* @param ms Maksymalny czas oczekiwania
6* @return Kod błędu
7*/
8public int WaitSuckerState(int slaveID, int state, int ms)
11.71. Przykład kodu instrukcji sterowania matrycową przyssawką
1public static void testSucker(Robot robot)
2{
3 // Przesłanie i załadowanie pliku protokołu otwartego
4 robot.OpenLuaUpload("C://项目/外设SDK/CtrlDev_sucker.lua");
5 robot.Sleep(2000);
6 robot.UnloadCtrlOpenLUA(1);
7 robot.LoadCtrlOpenLUA(1);
8 robot.Sleep(1000);
9 // Sterowanie w trybie rozgłaszania przyssawki, zassanie z maksymalną wydajnością
10 int[] ctrl = {1};
11 robot.SetSuckerCtrl(0, 1, ctrl);
12 int[] state=new int[1];
13 int[] pressVlaue=new int[1];
14 int[] error=new int[1];
15 // Pętla monitorująca stan przyssawki nr 1 i nr 12
16 for (int i = 0; i < 100; i++)
17 {
18 robot.GetSuckerState(1, state,pressVlaue, error);
19 System.out.println("sucker1 state is:"+state[0]+",pressVlaue is:"+pressVlaue[0]+",error num is"+error[0]);
20 robot.GetSuckerState(12, state, pressVlaue, error);
21 System.out.println("sucker12 state is :"+state[0]+", pressVlaue is:"+pressVlaue[0]+",error num is:"+error[0]);
22 robot.Sleep(100);
23 }
24 // Oczekiwanie, czy przyssawka nr 1 osiągnęła stan przyssania przedmiotu, czas oczekiwania 100ms
25 int ret = robot.WaitSuckerState(1, 1, 100);
26 System.out.println("WaitSuckerState result is:"+ ret);
27 // Wyłączenie przyssawek nr 1 i nr 12 w trybie unicast
28 ctrl[0] = 3;
29 robot.SetSuckerCtrl(1, 1, ctrl);
30 robot.SetSuckerCtrl(12, 1, ctrl);
31 robot.CloseRPC();
32}
11.72. Funkcja włączania/wyłączania urządzenia peryferyjnego laserowego
Nowe w wersji Java: SDK-v1.0.9-3.8.6
1/**
2 * @brief Funkcja włączania/wyłączania urządzenia peryferyjnego laserowego
3 * @param [in] OnOff 0-wyłącz 1-włącz
4 * @param [in] weldId ID spoiny domyślnie 0
5 * @return Kod błędu
6 */
7public int LaserTrackingLaserOnOff(int OnOff, int weldId)
11.73. Funkcja rozpoczęcia/zakończenia śledzenia laserowego
Nowe w wersji Java: SDK-v1.0.9-3.8.6
1/**
2 * @brief Funkcja rozpoczęcia/zakończenia śledzenia laserowego
3 * @param [in] OnOff 0-zakończ 1-rozpocznij
4 * @param [in] coordId Numer układu narzędzia urządzenia peryferyjnego laserowego
5 * @return Kod błędu
6 */
7public int LaserTrackingTrackOnOff(int OnOff, int coordId)
11.74. Poszukiwanie pozycji laserowej - stały kierunek
Nowe w wersji Java: SDK-v1.0.9-3.8.6
1/**
2 * @brief Poszukiwanie pozycji laserowej - stały kierunek
3 * @param [in] direction 0-x+ 1-x- 2-y+ 3-y- 4-z+ 5-z-
4 * @param [in] vel Prędkość jednostka%
5 * @param [in] distance Maksymalna odległość poszukiwania jednostka mm
6 * @param [in] timeout Czas timeout poszukiwania jednostka ms
7 * @param [in] posSensorNum Numer narzędzia skalibrowanego lasera
8 * @return Kod błędu
9 */
10public int LaserTrackingSearchStart_xyz(int direction, int vel, int distance, int timeout, int posSensorNum)
11.75. Poszukiwanie pozycji laserowej - dowolny kierunek
Nowe w wersji Java: SDK-v1.0.9-3.8.6
1/**
2 * @brief Poszukiwanie pozycji laserowej - dowolny kierunek
3 * @param [in] directionPoint Punkt wejściowy poszukiwania współrzędne xyz
4 * @param [in] vel Prędkość jednostka%
5 * @param [in] distance Maksymalna odległość poszukiwania jednostka mm
6 * @param [in] timeout Czas timeout poszukiwania jednostka ms
7 * @param [in] posSensorNum Numer narzędzia skalibrowanego lasera
8 * @return Kod błędu
9 */
10public int LaserTrackingSearchStart_point(DescTran directionPoint, int vel, int distance, int timeout, int posSensorNum)
11.76. Zakończenie poszukiwania pozycji laserowej
Nowe w wersji Java: SDK-v1.0.9-3.8.6
1/**
2 * @brief Zakończenie poszukiwania pozycji laserowej
3 * @return Kod błędu
4 */
5 public int LaserTrackingSearchStop()
11.77. Konfiguracja IP lasera
Nowe w wersji Java: SDK-v1.0.9-3.8.6
1 /**
2 * @brief Konfiguracja IP lasera
3 * @param [in] ip Adres IP urządzenia peryferyjnego laserowego
4 * @param [in] port Numer portu urządzenia peryferyjnego laserowego
5 * @return Kod błędu
6 */
7 public int LaserTrackingSensorConfig(String ip, int port)
11.78. Konfiguracja okresu próbkowania urządzenia peryferyjnego laserowego
Nowe w wersji Java: SDK-v1.0.9-3.8.6
1/**
2 * @brief Konfiguracja okresu próbkowania urządzenia peryferyjnego laserowego
3 * @param [in] period Okres próbkowania urządzenia peryferyjnego laserowego jednostka ms
4 * @return Kod błędu
5 */
6public int LaserTrackingSensorSamplePeriod(int period)
11.79. Ładowanie sterownika urządzenia peryferyjnego laserowego
Nowe w wersji Java: SDK-v1.0.9-3.8.6
1/**
2 * @brief Ładowanie sterownika urządzenia peryferyjnego laserowego
3 * @param [in] type Typ protokołu sterownika urządzenia peryferyjnego laserowego 101-RuiNiu 102-ChuangXiang 103-QuanShi 104-TongZhou 105-AoTai
4 * @return Kod błędu
5 */
6public int LoadPosSensorDriver(int type)
11.80. Rozładowanie sterownika urządzenia peryferyjnego laserowego
Nowe w wersji Java: SDK-v1.0.9-3.8.6
1/**
2 * @brief Rozładowanie sterownika urządzenia peryferyjnego laserowego
3 * @return Kod błędu
4 */
5public int UnLoadPosSensorDriver()
11.81. Rejestracja ścieżki spoiny laserowej
Nowe w wersji Java: SDK-v1.0.9-3.8.6
1/**
2 * @brief Rejestracja ścieżki spoiny laserowej
3 * @param [in] status 0-zatrzymaj rejestrację 1-śledzenie w czasie rzeczywistym 2-rozpocznij rejestrację
4 * @param [in] delayTime Czas opóźnienia jednostka ms
5 * @return Kod błędu
6 */
7public int LaserSensorRecord1(int status, int delayTime)
11.82. Odtwarzanie ścieżki spoiny laserowej
Nowe w wersji Java: SDK-v1.0.9-3.8.6
1/**
2 * @brief Odtwarzanie ścieżki spoiny laserowej
3 * @param [in] delayTime Czas opóźnienia jednostka ms
4 * @param [in] speed Prędkość jednostka%
5 * @return Kod błędu
6 */
7public int LaserSensorReplay(int delayTime, double speed)
11.83. Odtwarzanie śledzenia laserowego
Nowe w wersji Java: SDK-v1.0.9-3.8.6
1/**
2 * @brief Odtwarzanie śledzenia laserowego
3 * @return Kod błędu
4 */
5public int MoveLTR()
11.84. Odtwarzanie ścieżki spoiny laserowej
Nowe w wersji Java: SDK-v1.0.9-3.8.6
1/**
2* @brief Odtwarzanie ścieżki spoiny laserowej
3* @param delayMode Tryb 0-czas opóźnienia 1-odległość opóźnienia
4* @param delayTime Czas opóźnienia jednostka ms
5* @param delayDisExAxisNum Numer osi rozszerzenia opóźnienia
6* @param delayDis Odległość opóźnienia jednostka mm
7* @param sensitivePara Współczynnik czułości kompensacji
8* @param trackMode Typ śledzenia punktowego. 0-ruch asynchroniczny osi rozszerzenia;1-robot
9* @param triggerMode Sposób wyzwalania śledzenia punktowego. 0-czas śledzenia;1-IO
10* @param runTime Czas śledzenia punktowego robota (s)
11* @param speed Prędkość jednostka%
12* @return Kod błędu
13*/
14public int LaserSensorRecordandReplay(int delayMode, int delayTime, int delayDisExAxisNum, double delayDis, double sensitivePara, int trackMode, int triggerMode, double runTime, double speed)
11.85. Ruch do początku zapisu ścieżki spoiny
Nowe w wersji Java: SDK-v1.0.9-3.8.6
1/**
2 * @brief Ruch do początku zapisu ścieżki spoiny
3 * @param [in] moveType 0-PTP 1-LIN
4 * @param [in] ovl Prędkość jednostka%
5 * @return Kod błędu
6 */
7public int MoveToLaserRecordStart(int moveType, double ovl)
11.86. Ruch do końca zapisu ścieżki spoiny
Nowe w wersji Java: SDK-v1.0.9-3.8.6
1/**
2 * @brief Ruch do końca zapisu ścieżki spoiny
3 * @param [in] moveType 0-PTP 1-LIN
4 * @param [in] ovl Prędkość jednostka%
5 * @return Kod błędu
6 */
7public int MoveToLaserRecordEnd(int moveType, double ovl)
11.87. Ruch do punktu poszukiwanego przez czujnik laserowy
Nowe w wersji Java: SDK-v1.0.9-3.8.6
1/**
2 * @brief Ruch do punktu poszukiwanego przez czujnik laserowy
3 * @param [in] moveFlag Typ ruchu: 0-PTP;1-LIN
4 * @param [in] ovl Współczynnik skalowania prędkości, 0-100
5 * @param [in] dataFlag Wybór danych bufora spoiny: 0-wykonaj dane planowania;1-wykonaj dane zapisu
6 * @param [in] plateType Typ blachy: 0-blacha falista;1-blacha trapezowa;2-blacha ogrodzeniowa;3-beczka;4-stal pancerzowa falista
7 * @param [in] trackOffectType Typ przesunięcia czujnika laserowego: 0-bez przesunięcia;1-przesunięcie w układzie bazowym;2-przesunięcie w układzie narzędzia;3-przesunięcie surowych danych czujnika laserowego
8 * @param [in] offset Wartość przesunięcia
9 * @return Kod błędu
10 */
11public int MoveToLaserSeamPos(int moveFlag, double ovl, int dataFlag, int plateType, int trackOffectType, DescPose offset)
11.88. Pobranie informacji o współrzędnych punktu poszukiwanego przez czujnik laserowy
Nowe w wersji Java: SDK-v1.0.9-3.8.6
1/**
2 * @brief Pobranie informacji o współrzędnych punktu poszukiwanego przez czujnik laserowy
3 * @param [in] trackOffectType Typ przesunięcia czujnika laserowego: 0-bez przesunięcia;1-przesunięcie w układzie bazowym;2-przesunięcie w układzie narzędzia;3-przesunięcie surowych danych czujnika laserowego
4 * @param [in] offset Wartość przesunięcia
5 * @param [out] jPos Pozycja przegubów [°]
6 * @param [out] descPos Pozycja kartezjańska [mm]
7 * @param [out] tool Układ narzędzia
8 * @param [out] user Układ przedmiotu
9 * @param [out] exaxis Pozycja osi rozszerzenia [mm]
10 * @return Kod błędu
11 */
12public int GetLaserSeamPos(int trackOffectType, DescPose offset, JointPos jPos, DescPose descPos, int[] tool, int[] user, ExaxisPos exaxis)
11.89. Przykład kodu konfiguracji parametrów i debugowania urządzenia peryferyjnego laserowego
1public static void testLaserConfig(Robot robot)
2{
3 robot.LaserTrackingSensorConfig("192.168.58.20", 5020);
4
5 robot.LaserTrackingSensorSamplePeriod(20);
6
7 robot.LoadPosSensorDriver(101);
8 robot.LaserTrackingLaserOnOff(0,0);
9
10 robot.Sleep(3000);
11
12 robot.LaserTrackingLaserOnOff(1, 0);
13
14 robot.CloseRPC();
15}
11.90. Przykład kodu skanowania i odtwarzania ścieżki laserowej
1public static void testLaserRecordAndReplay(Robot robot)
2{
3 // Przesłanie i załadowanie pliku protokołu otwartego
4 robot.OpenLuaUpload("D://zUP/CtrlDev_laser_ruiniu-0117.lua");
5 robot.Sleep(2000);
6 robot.SetCtrlOpenLUAName(0, "CtrlDev_laser_ruiniu-0117.lua");
7 robot.UnloadCtrlOpenLUA(0);
8 robot.LoadCtrlOpenLUA(0);
9 robot.Sleep(8000);
10
11 for (int i=0;i<10;++i){
12 JointPos startjointPos=new JointPos(56.205, -117.951, 141.872, -118.149, -94.217, -122.176);
13 DescPose startdescPose=new DescPose(-97.552, -282.855, 26.675, 174.182, -1.338, -91.707);
14 ExaxisPos exaxisPos=new ExaxisPos(0, 0, 0, 0);
15 DescPose offdese=new DescPose(0, 0, 0, 0, 0, 0);
16 robot.MoveL(startjointPos, startdescPose, 1, 0, 100, 100, 100, -1, 0,exaxisPos, 0, 0, offdese, 0,1, 1);
17
18 robot.LaserSensorRecord1(2, 10);
19
20 JointPos endjointPos=new JointPos(68.809, -87.100, 121.120, -127.233, -95.038, -109.555);
21 DescPose enddescPose=new DescPose(-103.555, -464.234, 13.076, 174.179, -1.344, -91.709);
22 robot.MoveL(endjointPos, enddescPose, 1, 0, 50, 100, 100, -1,0, exaxisPos, 0, 0, offdese, 0,1, 1);
23
24 robot.LaserSensorRecord1(0, 10);
25
26 robot.MoveToLaserRecordStart(1, 30);
27
28 robot.LaserSensorReplay(10, 100);
29
30 robot.MoveLTR();
31
32 robot.LaserSensorRecord1(0, 10);
33 }
34
35 robot.CloseRPC();
36}
11.91. Przykład kodu poszukiwania pozycji laserowej i śledzenia w czasie rzeczywistym
1public static void testLasertrack(Robot robot)
2{
3 // Przesłanie i załadowanie pliku protokołu otwartego
4 robot.OpenLuaUpload("D://zUP/CtrlDev_laser_ruiniu-0117.lua");
5 robot.Sleep(2000);
6 robot.SetCtrlOpenLUAName(0, "CtrlDev_laser_ruiniu-0117.lua");
7 robot.UnloadCtrlOpenLUA(0);
8 robot.LoadCtrlOpenLUA(0);
9 robot.Sleep(8000);
10 for(int i=0;i<10;++i){
11 JointPos startjointPos=new JointPos(56.205, -117.951, 141.872, -118.149, -94.217, -122.176);
12 DescPose startdescPose=new DescPose(-97.552, -282.855, 26.675, 174.182, -1.338, -91.707);
13 ExaxisPos exaxisPos=new ExaxisPos(0, 0, 0, 0);
14 DescPose offdese=new DescPose(0, 0, 0, 0, 0, 0);
15 DescTran directionPoint=new DescTran();
16 robot.MoveL(startjointPos, startdescPose, 1, 0, 100, 100, 100, -1, 0,exaxisPos, 0, 0, offdese, 0,1, 1);
17
18 robot.LaserTrackingSearchStart_xyz(3, 100, 300, 1000, 3);
19 robot.LaserTrackingSearchStop();
20
21 // robot.GetRobotTeachingPoint(name, data);
22 robot.MoveToLaserSeamPos(1, 30, 0, 0, 0, offdese);
23 // printf("%f, %f, %f,%f, %f, %f,%f, %f, %f,%f, %f, %f\n", data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8], data[9], data[10], data[11]);
24
25 robot.LaserTrackingTrackOnOff(1, 3);
26 // robot.LaserTrackingTrackOn(3);
27 JointPos endjointPos=new JointPos(68.809,-87.100,121.120,-127.233,-95.038,-109.555);
28 DescPose enddescPose=new DescPose(-103.555,-464.234,13.076,174.179,-1.344,-91.709);
29 robot.MoveL(endjointPos, enddescPose, 1, 0, 20, 100, 100, -1, 0,exaxisPos, 0, 0, offdese, 0,1, 1);
30
31 robot.LaserTrackingTrackOnOff(0, 3);
32 System.out.println("To jest " + (i+1) + " raz");
33 }
34 robot.CloseRPC();
35}
11.92. Przykład kodu śledzenia laserowego z osią rozszerzenia synchronicznie z robotem
1public static void testLasertrackandExitAxis(Robot robot)
2{
3 ExaxisPos startexaxisPos =new ExaxisPos( 0,0,0,0 );
4 ExaxisPos seamexaxisPos = new ExaxisPos(-10,0,0,0 );
5 ExaxisPos endexaxisPos = new ExaxisPos(-30, 0, 0, 0);
6 DescPose offdese = new DescPose(0, 0, 0, 0, 0, 0 );
7 JointPos seamjointPos=new JointPos(0, 0, 0, 0, 0, 0);
8 DescPose seamdescPose=new DescPose(0, 0, 0, 0, 0, 0);
9
10 for(int i =0;i<10;++i) {
11 // Ruch do punktu początkowego wymagającego poszukiwania pozycji
12 JointPos startjointPos = new JointPos(58.337, -119.628, 146.037, -116.358, -92.224, -117.654);
13 DescPose startdescPose = new DescPose(-53.375, -255.363, 0.919, 178.054, 1.077, -94.026);
14 robot.ExtAxisSyncMoveJ(startjointPos, startdescPose, 1, 0, 100, 100, 100, startexaxisPos, -1, 0, offdese);
15
16 System.out.println("11111");
17 // Rozpoczęcie poszukiwania pozycji w kierunku -y
18 int ret = robot.LaserTrackingSearchStart_xyz(3, 100, 300, 1000, 2);
19 robot.LaserTrackingSearchStop();
20 System.out.println("2222");
21 int[] tool = new int[1];
22 int[] user = new int[1];
23 robot.GetLaserSeamPos(0, offdese, seamjointPos, seamdescPose, tool, user, startexaxisPos);
24 System.out.println(seamjointPos.J1 + ", " + seamjointPos.J2 + ", " +
25 seamjointPos.J3 + ", " + seamjointPos.J4 + ", " +
26 seamjointPos.J5 + ", " + seamjointPos.J6 + ", " +
27 seamdescPose.tran.x + ", " + seamdescPose.tran.y + ", " +
28 seamdescPose.tran.z + ", " + seamdescPose.rpy.rx + ", " +
29 seamdescPose.rpy.ry + ", " + seamdescPose.rpy.rz);
30 // Jeśli poszukiwanie pozycji zakończone sukcesem
31 if (ret == 0) {
32 // Synchroniczny ruch robota i osi rozszerzenia do punktu poszukiwanego
33 robot.ExtAxisSyncMoveJ(seamjointPos, seamdescPose, 1, 0, 100, 100, 100, seamexaxisPos, -1, 0, offdese);
34
35 // Rozpoczęcie śledzenia laserowego wzdłuż punktu poszukiwanego i synchronicznego ruchu z osią rozszerzenia
36 System.out.println("3333");
37 robot.LaserTrackingTrackOnOff(1, 2);
38 JointPos endjointPos = new JointPos(70.580, -90.918, 126.593, -125.154, -92.162, -105.403);
39 DescPose enddescPose = new DescPose(-53.375, -419.020, 0.920, 178.054, 1.076, -94.026);
40 robot.ExtAxisSyncMoveL(endjointPos, enddescPose, 1, 0, 20, 100, 100, -1, endexaxisPos, 0, offdese);
41 ;
42 // Zatrzymanie śledzenia
43 robot.LaserTrackingTrackOnOff(0, 2);
44 System.out.println("44444");
45 }
46 System.out.println("Aktualna liczba uruchomień: "+i);
47 }
48 robot.CloseRPC();
49}
11.93. Interfejs SDK włączania/wyłączania funkcji przezroczystej transmisji końcowej
1/**
2* @brief Włączenie ogólnej funkcji przezroczystej transmisji końcowej
3* @param włączenie, 0-wyłącz, 1-włącz
4* @return Kod błędu
5*/
6public int SetAxleGenComEnable(int mode)
11.94. Interfejs SDK wysyłania i odbierania danych aperiodycznych funkcji przezroczystej transmisji końcowej
1/**
2* @brief Wysłanie danych aperiodycznych przez końcówkę i oczekiwanie na odpowiedź
3* @param lenSnd Długość wysyłania
4* @param sndBuff Dane wysyłane
5* @param lenRcv Wybór długości odbioru
6* @param [out] rcvData Dane odpowiedzi
7* @return Kod błędu
8*/
9public int SndRcvAxleGenComCmdData(int lenSnd, int[] sndBuff, int lenRcv, int[] rcvData)
11.95. Przykład kodu komunikacji danych aperiodycznych głowicy moxibuscyjnej Beiyikang w oparciu o funkcję przezroczystej transmisji końcowej
1public static void testAxleGenCom(Robot robot) {
2int[] led_on = {0xAB, 0xBA, 0x12, 0x01, 0x01, 0x79};
3int[] led_off = {0xAB, 0xBA, 0x12, 0x01, 0x00, 0x78};
4int[] version = {0xAB, 0xBA, 0x11, 0x00, 0x76};
5int[] state = {0xAB, 0xBA, 0x1B, 0x01, 0xAA, 0x2B};
6
7int[] rcvdata = new int[16];
8int ret = 0;
9int cnt = 1;
10
11JointPos p1Joint = new JointPos(88.708, -86.178, 140.989, -141.825, -89.162, -49.879);
12DescPose p1Desc = new DescPose(188.007, -377.850, 260.207, 178.715, 2.823, -131.466);
13
14JointPos p2Joint = new JointPos(112.131, -75.554, 126.989, -139.027, -88.044, -26.477);
15DescPose p2Desc = new DescPose(368.003, -377.848, 260.211, 178.715, 2.823, -131.465);
16
17ExaxisPos exaxisPos = new ExaxisPos(0, 0, 0, 0);
18DescPose offdese = new DescPose(0, 0, 0, 0, 0, 0);
19
20// Włączenie funkcji przezroczystej transmisji końcowej
21robot.SetAxleGenComEnable(1);
22robot.SetAxleLuaEnable(1);
23
24while (cnt <= 10000) {
25 // Odczyt numeru wersji
26 ret = robot.SndRcvAxleGenComCmdData(5, version, 10, rcvdata);
27 if (ret == 0) {
28 System.out.printf(" hard version : %d,hard code:%d, soft version:%d %d, soft code:%d \n",
29 rcvdata[4], rcvdata[5], rcvdata[6], rcvdata[7], rcvdata[8]);
30 } else {
31 System.out.println("SndRcvAxleGenComCmdData version fail: " + ret);
32 break;
33 }
34 robot.Sleep(1000);
35
36 // Odczyt stanu obecności głowicy moxibuscyjnej
37 ret = robot.SndRcvAxleGenComCmdData(6, state, 6, rcvdata);
38 if (ret == 0) {
39 System.out.printf(" state : %d \n", rcvdata[4]);
40 }
41 robot.Sleep(1000);
42
43 // Włączenie lasera głowicy moxibuscyjnej
44 ret = robot.SndRcvAxleGenComCmdData(6, led_on, 6, rcvdata);
45 if (ret == 0) {
46 System.out.printf("led on rcv data is: %d, %d, %d, %d, %d, %d\n",
47 rcvdata[0], rcvdata[1], rcvdata[2], rcvdata[3], rcvdata[4], rcvdata[5]);
48 }
49 robot.MoveJ(p1Joint, p1Desc, 0, 0, 100.0, 100.0, 100.0, exaxisPos, -1.0, 0, offdese);
50 robot.Sleep(4000);
51
52 // Wyłączenie lasera głowicy moxibuscyjnej
53 ret = robot.SndRcvAxleGenComCmdData(6, led_off, 6, rcvdata);
54 if (ret == 0) {
55 System.out.printf("led off rcv data is: %d, %d, %d, %d, %d, %d \n",
56 rcvdata[0], rcvdata[1], rcvdata[2], rcvdata[3], rcvdata[4], rcvdata[5]);
57 }
58 robot.MoveJ(p2Joint, p2Desc, 0, 0, 100.0, 100.0, 100.0, exaxisPos, -1.0, 0, offdese);
59 robot.Sleep(1000);
60
61 System.out.println("***********************complete No. " + cnt + " SDK test*****************************");
62 cnt++;
63}
64}
11.96. Pobranie pliku LUA protokołu otwartego
1/**
2* @brief Pobranie pliku LUA protokołu otwartego
3* @param fileName Nazwa pliku protokołu otwartego „CtrlDev_XXX.lua”
4* @param savePath Ścieżka zapisu pliku protokołu otwartego
5* @return Kod błędu
6*/
7public int OpenLuaDownload(string fileName, string savePath)
11.97. Usunięcie pliku LUA protokołu otwartego
1/**
2* @brief Usunięcie pliku LUA protokołu otwartego
3* @param [in] fileName Nazwa pliku lua protokołu otwartego do usunięcia „CtrlDev_XXX.lua”
4* @return Kod błędu
5*/
6public int OpenLuaDelete(string fileName)
11.98. Usunięcie wszystkich plików LUA protokołu otwartego
1/**
2* @brief Usunięcie wszystkich plików LUA protokołu otwartego
3* @return Kod błędu
4*/
5public int AllOpenLuaDelete()
11.99. Przykład kodu przesyłania, pobierania i usuwania protokołu otwartego urządzeń peryferyjnych kontrolera
1public static int TestCtrlOpenLuaOperate(Robot robot) {
2 int rtn;
3 rtn = robot.OpenLuaUpload("D://zUP/openlua/CtrlDev_WELDING_A.lua");
4 System.out.println("OpenLuaUpload rtn is " + rtn);
5 rtn = robot.OpenLuaUpload("D://zUP/openlua/CtrlDev_SWDPOLISH.lua");
6 System.out.println("OpenLuaUpload rtn is " + rtn);
7 rtn = robot.OpenLuaDownload("CtrlDev_WELDING_A.lua", "D://zDOWN/");
8 System.out.println("OpenLuaDownload rtn is " + rtn);
9 rtn = robot.OpenLuaDownload("CtrlDev_SWDPOLISH.lua", "D://zDOWN/");
10 System.out.println("OpenLuaDownload rtn is " + rtn);
11
12 rtn = robot.SetCtrlOpenLUAName(0, "CtrlDev_WELDING_A.lua");
13 System.out.println("SetCtrlOpenLUAName rtn is " + rtn);
14 rtn = robot.SetCtrlOpenLUAName(1, "CtrlDev_SWDPOLISH.lua");
15 System.out.println("SetCtrlOpenLUAName rtn is " + rtn);
16
17 String[] names = new String[4];
18 rtn = robot.GetCtrlOpenLUAName(names);
19 System.out.println("GetCtrlOpenLUAName rtn is " + rtn + ", names: " +
20 names[0] + ", " + names[1] + ", " + names[2] + ", " + names[3]);
21
22 rtn = robot.LoadCtrlOpenLUA(1);
23 System.out.println("LoadCtrlOpenLUA rtn is " + rtn);
24 robot.Sleep(2000);
25 rtn = robot.UnloadCtrlOpenLUA(1);
26 System.out.println("UnloadCtrlOpenLUA rtn is " + rtn);
27
28 rtn = robot.OpenLuaDelete("CtrlDev_WELDING_A.lua");
29 System.out.println("OpenLuaDelete rtn is " + rtn);
30 rtn = robot.AllOpenLuaDelete();
31 System.out.println("AllOpenLuaDelete rtn is " + rtn);
32
33 robot.Sleep(1000);
34 return 0;
35}
11.100. Sterowanie Ruchem Dłoni
1/**
2* @brief Sterowanie ruchem dłoni
3* @param idstart Początkowy numer stacji podrzędnej
4* @param slaveNum Liczba
5* @param pos Tablica pozycji, długość 16, zakres (-360~360)
6* @param speed Tablica procentów prędkości, długość 16, zakres [0~100]
7* @param force Tablica procentów momentu obrotowego, długość 16, zakres [0~100]
8* @param max_time Maksymalny czas oczekiwania, zakres [0~30000], jednostka ms
9* @return Kod błędu
10*/
11public int SetDexterousHandsMove(int idstart, int slaveNum, double[] pos, int[] speed, int[] force, int max_time)
11.101. Sterowanie Resetem i Aktywacją Dłoni
1/**
2* @brief Sterowanie resetem i aktywacją dłoni
3* @param id Numer stacji podrzędnej
4* @param act 0-reset 1-aktywacja
5* @return Kod błędu
6*/
7public int SetDexterousHandsAct(int id, int act)
11.102. Czyszczenie Błędu Dłoni
1/**
2* @brief Czyszczenie błędu dłoni
3* @return Kod błędu
4*/
5public int ClearDexterousHandsError()
11.103. Ustawianie Włączonych Funkcji Sterowania Ruchem Dłoni
1/**
2* @brief Ustawia włączone funkcje sterowania ruchem dłoni
3* @param id Numer stacji podrzędnej dłoni
4* @param func Tablica funkcji, długość 32, Bit0-wyzwolenie chwytu, Bit1-inicjalizacja chwytaka, Bit2-ustawienie pozycji, Bit3-ustawienie prędkości, Bit4-ustawienie momentu obrotowego, Bit6-odczyt stanu chwytaka, Bit7-odczyt stanu inicjalizacji, Bit8-odczyt kodu błędu, Bit9-odczyt pozycji, Bit10-odczyt prędkości, Bit11-odczyt momentu obrotowego, Bit12-ustawienie liczby obrotów, Bit13-ustawienie prędkości obrotowej, Bit14-ustawienie momentu obrotowego obrotu, Bit15-odczyt stanu chwytaka obrotowego, Bit16-odczyt stanu inicjalizacji obrotu, Bit17-odczyt liczby obrotów, Bit18-odczyt prędkości obrotowej, Bit19-odczyt momentu obrotowego obrotu, Bit20-ustawienie ruchu synchronicznego wieloosiowego, Bit21-komenda kasowania błędów, Bit22-stan pracy pojedynczej osi, Bit23-stan pracy wszystkich osi
5* @return Kod błędu
6*/
7public int SetDexterousHandsFunc(int id, int[] func)
11.104. Pobieranie Włączonych Funkcji Sterowania Ruchem Dłoni
1/**
2* @brief Pobiera włączone funkcje sterowania ruchem dłoni
3* @param id Numer urządzenia dłoni
4* @param func Tablica parametrów wyjściowych, długość 32, Bit0-wyzwolenie chwytu, Bit1-inicjalizacja chwytaka, Bit2-ustawienie pozycji, Bit3-ustawienie prędkości, Bit4-ustawienie momentu obrotowego, Bit6-odczyt stanu chwytaka, Bit7-odczyt stanu inicjalizacji, Bit8-odczyt kodu błędu, Bit9-odczyt pozycji, Bit10-odczyt prędkości, Bit11-odczyt momentu obrotowego, Bit12-ustawienie liczby obrotów, Bit13-ustawienie prędkości obrotowej, Bit14-ustawienie momentu obrotowego obrotu, Bit15-odczyt stanu chwytaka obrotowego, Bit16-odczyt stanu inicjalizacji obrotu, Bit17-odczyt liczby obrotów, Bit18-odczyt prędkości obrotowej, Bit19-odczyt momentu obrotowego obrotu, Bit20-ustawienie ruchu synchronicznego wieloosiowego, Bit21-komenda kasowania błędów, Bit22-stan pracy pojedynczej osi, Bit23-stan pracy wszystkich osi
5* @return Kod błędu
6*/
7public int GetDexterousHandsFunc(int id, int[] func)
11.105. Przykład Kodu Konfiguracji i Ruchu Dłoni na Końcówce Robota
1public static int TestDexterousHands(Robot robot) {
2 int id = 1;
3 int slaveNum = 4;
4 int max_time = 8000;
5 int[] speed = new int[16];
6 int[] force = new int[16];
7
8 robot.LoggerInit(FrLogType.DIRECT, FrLogLevel.INFO, "D://log", 10, 10);
9 for (int i = 0; i < 16; i++) {
10 force[i] = (i < 4) ? 50 : 0;
11 }
12
13 final double[] pos = new double[16];
14
15 JointPos j1 = new JointPos(-91.876, -85.920, 109.279, -86.239, -96.664, -28.563);
16 JointPos j2 = new JointPos(-40.954, -85.920, 109.279, -86.239, -96.664, -28.563);
17 ExaxisPos epos = new ExaxisPos(0, 0, 0, 0);
18 DescPose offset_pos = new DescPose(0, 0, 0, 0, 0, 0);
19
20 int ret = robot.ClearDexterousHandsError();
21 System.out.println("ClearDexterousHandsError -> " + ret);
22
23 int[] setFunc = new int[32];
24 setFunc[2] = 1;
25 setFunc[4] = 1;
26 setFunc[9] = 1;
27 setFunc[10] = 1;
28 setFunc[11] = 1;
29 setFunc[22] = 1;
30
31 ret = robot.SetDexterousHandsFunc(id, setFunc);
32
33 int[] getFunc = new int[32];
34 ret = robot.GetDexterousHandsFunc(id, getFunc);
35 System.out.println("GetDexterousHandsFunc -> " + ret);
36 if (ret == 0) {
37 for (int i = 0; i < getFunc.length; i++) {
38 System.out.print(" [" + i + "]=" + getFunc[i]);
39 if ((i + 1) % 8 == 0) {
40 System.out.println();
41 } else if (i < getFunc.length - 1) {
42 System.out.print(", ");
43 }
44 }
45 if (getFunc.length % 8 != 0) {
46 System.out.println();
47 }
48 }
49
50 ret = robot.SetDexterousHandsAct(id, 1);
51 if (ret != 0) {
52 return ret;
53 }
54
55 setPositions(pos, 20, 20, 20, 20);
56 ret = robot.SetDexterousHandsMove(id, slaveNum, pos, speed, force, max_time);
57 robot.Sleep(5000);
58
59 for (int iteration = 1; iteration <= 10; iteration++) {
60 robot.MoveJ(j1, 0, 0, 100, 100, 100, epos, -1, 0, offset_pos);
61
62 setPositions(pos, 10, 10, 10, 10);
63 ret = robot.SetDexterousHandsMove(id, slaveNum, pos, speed, force, max_time);
64 robot.Sleep(1000);
65
66 robot.MoveJ(j2, 0, 0, 100, 100, 100, epos, -1, 0, offset_pos);
67 setPositions(pos, 50, 50, 50, 50);
68 ret = robot.SetDexterousHandsMove(id, slaveNum, pos, speed, force, max_time);
69 robot.Sleep(1000);
70 }
71 return 0;
72}