11. Urządzenia peryferyjne robota

11.1. Konfiguracja chwytaka

1/**
2* @brief  Konfiguruje chwytak
3* @param  [in] company  Producent chwytaka, do ustalenia
4* @param  [in] device  Numer urządzenia, tymczasowo nieużywane, domyślnie 0
5* @param  [in] softvesion  Numer wersji oprogramowania, tymczasowo nieużywane, domyślnie 0
6* @param  [in] bus Pozycja magistrali, na której zawieszono urządzenie, tymczasowo nieużywane, domyślnie 0
7* @return  Kod błędu
8*/
9int SetGripperConfig(int company, int device, int softvesion, int bus);

11.2. Pobranie konfiguracji chwytaka

1/**
2* @brief  Pobiera konfigurację chwytaka
3* @param  [in] company  Producent chwytaka, do ustalenia
4* @param  [in] device  Numer urządzenia, tymczasowo nieużywane, domyślnie 0
5* @param  [in] softvesion  Numer wersji oprogramowania, tymczasowo nieużywane, domyślnie 0
6* @param  [in] bus Pozycja magistrali, na której zawieszono urządzenie, tymczasowo nieużywane, domyślnie 0
7* @return  Kod błędu
8*/
9int GetGripperConfig(int *company, int *device, int *softvesion, int *bus);

11.3. Aktywacja chwytaka

1/**
2* @brief  Aktywuje chwytak
3* @param  [in] index  Numer chwytaka
4* @param  [in] act  0-reset, 1-aktywacja
5* @return  Kod błędu
6*/
7int ActGripper(int index, byte act);

11.4. Sterowanie chwytakiem

 1/**
 2* @brief  Steruje 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ące, 1-nieblokujące
 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, byte block, int type, double rotNum, int rotVel, int rotTorque);

11.5. Pobranie stanu ruchu chwytaka

1/**
2* @brief  Pobiera stan ruchu chwytaka
3* @param  [out] fault  0-brak błędu, 1-wystąpił błąd
4* @param  [out] staus  0-ruch nieukończony, 1-ruch ukończony
5* @return  Kod błędu
6*/
7int GetGripperMotionDone(ref int fault, ref int status);

11.6. Pobranie stanu aktywacji chwytaka

1/**
2* @brief  Pobiera stan aktywacji chwytaka
3* @param  [out] fault  0-brak błędu, 1-wystąpił błąd
4* @param  [out] status  bit0~bit15 odpowiadają numerom chwytaka 0~15, bit=0 oznacza nieaktywny, bit=1 oznacza aktywny
5* @return  Kod błędu
6*/
7int GetGripperActivateStatus(ref int fault, ref int status);

11.7. Pobranie pozycji chwytaka

1/**
2* @brief  Pobiera pozycję chwytaka
3* @param  [out] fault  0-brak błędu, 1-wystąpił błąd
4* @param  [out] position  Procent pozycji, zakres 0~100%
5* @return  Kod błędu
6*/
7int GetGripperCurPosition(ref int fault, ref int position);

11.8. Pobranie prędkości chwytaka

1/**
2* @brief  Pobiera prędkość chwytaka
3* @param  [out] fault  0-brak błędu, 1-wystąpił błąd
4* @param  [out] speed  Procent prędkości, zakres 0~100%
5* @return  Kod błędu
6*/
7int GetGripperCurSpeed(ref int fault, ref int speed);

11.9. Pobranie prądu chwytaka

1/**
2* @brief  Pobiera prąd chwytaka
3* @param  [out] fault  0-brak błędu, 1-wystąpił błąd
4* @param  [out] current  Procent prądu, zakres 0~100%
5* @return  Kod błędu
6*/
7int GetGripperCurCurrent(ref int fault, ref int current);

11.10. Pobranie napięcia chwytaka

1/**
2* @brief  Pobiera napięcie chwytaka
3* @param  [out] fault  0-brak błędu, 1-wystąpił błąd
4* @param  [out] voltage  Napięcie, jednostka 0,1 V
5* @return  Kod błędu
6*/
7int GetGripperVoltage(ref int fault, ref int voltage);

11.11. Pobranie temperatury chwytaka

1/**
2* @brief  Pobiera temperaturę chwytaka
3* @param  [out] fault  0-brak błędu, 1-wystąpił błąd
4* @param  [out] temp  Temperatura, jednostka °C
5* @return  Kod błędu
6*/
7int GetGripperTemp(ref int fault, ref int temp);

11.12. Obliczenie punktu wstępnego chwytania - wizja

1/**
2* @brief Oblicza punkt wstępnego chwytania - wizja
3* @param [in] desc_pos Pozycja i orientacja kartezjańska punktu chwytania
4* @param [in] zlength Przesunięcie w osi Z
5* @param [in] zangle Przesunięcie kątowe wokół osi Z
6* @param [out] pre_pos Punkt wstępnego chwytania
7* @return Kod błędu
8*/
9int ComputePrePick(DescPose desc_pos, double zlength, double zangle, ref DescPose pre_pos);

11.13. Obliczenie punktu wycofania - wizja

1/**
2* @brief Oblicza punkt wycofania - wizja
3* @param [in] desc_pos Pozycja i orientacja kartezjańska punktu wycofania
4* @param [in] zlength Przesunięcie w osi Z
5* @param [in] zangle Przesunięcie kątowe wokół osi Z
6* @param [out] post_pos Punkt wycofania
7* @return Kod błędu
8*/
9int ComputePostPick(DescPose desc_pos, double zlength, double zangle, ref DescPose post_pos);

11.14. Przykład kodu operacji chwytakiem robota

 1private void button36_Click(object sender, EventArgs e)
 2{
 3    int company = 4;
 4    int device = 0;
 5    int softversion = 0;
 6    int bus = 2;
 7    int index = 2;
 8    byte act = 0;
 9    int max_time = 30000;
10    byte block = 0;
11    int status=0;
12    int fault=0;
13    int active_status = 0;
14    int current_pos = 0;
15    int current = 0;
16    int voltage = 0;
17    int temp = 0;
18    int speed = 0;
19
20    robot.SetGripperConfig(company, device, softversion, bus);
21    Thread.Sleep(1000);
22    robot.GetGripperConfig(ref company, ref device, ref softversion, ref bus);
23    Console.WriteLine("gripper config:{0},{1},{2},{3}\n", company, device, softversion, bus);
24
25    robot.ActGripper(index, act);
26    Thread.Sleep(1000);
27    act = 1;
28    robot.ActGripper(index, act);
29    Thread.Sleep(1000);
30
31    robot.MoveGripper(index, 90, 50, 50, max_time, block, 0, 0, 0, 0);
32    Thread.Sleep(1000);
33    robot.MoveGripper(index, 30, 50, 0, max_time, block, 0, 0, 0, 0);
34
35    robot.GetGripperMotionDone(ref fault, ref status);
36    Console.WriteLine("motion status:{0},{1}\n", fault, status);
37
38    robot.GetGripperActivateStatus(ref fault, ref active_status);
39    Console.WriteLine("gripper active fault is: {0}, status is: {1}\n", fault, active_status);
40
41    robot.GetGripperCurPosition(ref fault, ref current_pos);
42    Console.WriteLine("fault is:{0}, current position is: {1}\n", fault, current_pos);
43
44    robot.GetGripperCurCurrent(ref fault, ref current);
45    Console.WriteLine("fault is:{0}, current current is: {1}\n", fault, current);
46
47    robot.GetGripperVoltage(ref fault, ref voltage);
48    Console.WriteLine("fault is:{0}, current voltage is: {1} \n", fault, voltage);
49
50    robot.GetGripperTemp(ref fault, ref temp);
51    Console.WriteLine("fault is:{0}, current temperature is: {1}\n", fault, temp);
52
53    robot.GetGripperCurSpeed(ref fault, ref speed);
54    Console.WriteLine("fault is:{0}, current speed is: {1}\n", fault, speed);
55
56    int retval = 0;
57    DescPose prepick_pose = new DescPose();
58    DescPose postpick_pose = new DescPose();
59
60    DescPose p1Desc = new DescPose(-419.524f, -13.000f, 351.569f, -178.118f, 0.314f, 3.833f);
61    DescPose p2Desc = new DescPose(-321.222f, 185.189f, 335.520f, -179.030f, -1.284f, -29.869f);
62
63    retval = robot.ComputePrePick(p1Desc, 10, 0, ref prepick_pose);
64    Console.WriteLine("ComputePrePick retval is: {0}\n", retval);
65    Console.WriteLine("xyz is: {0}, {1}, {2}; rpy is: {3}, {4}, {5}\n",
66        prepick_pose.tran.x, prepick_pose.tran.y, prepick_pose.tran.z,
67        prepick_pose.rpy.rx, prepick_pose.rpy.ry, prepick_pose.rpy.rz);
68
69    retval = robot.ComputePostPick( p2Desc, -10, 0, ref postpick_pose);
70    Console.WriteLine("ComputePostPick retval is: {0}\n", retval);
71    Console.WriteLine("xyz is: {0}, {1}, {2}; rpy is: {3}, {4}, {5}\n",
72        postpick_pose.tran.x, postpick_pose.tran.y, postpick_pose.tran.z,
73        postpick_pose.rpy.rx, postpick_pose.rpy.ry, postpick_pose.rpy.rz);
74
75}

11.15. Pobranie liczby obrotów chwytaka obrotowego

1/**
2* @brief  Pobiera liczbę obrotów chwytaka obrotowego
3* @param  [out] fault  0-brak błędu, 1-wystąpił błąd
4* @param  [out] num  Liczba obrotów
5* @return  Kod błędu
6*/
7int GetGripperRotNum(ref UInt16 fault, ref double num);

11.16. Pobranie procentu prędkości obrotowej chwytaka obrotowego

1/**
2* @brief  Pobiera procent prędkości obrotowej chwytaka obrotowego
3* @param  [out] fault  0-brak błędu, 1-wystąpił błąd
4* @param  [out] speed  Procent prędkości obrotowej
5* @return  Kod błędu
6*/
7int GetGripperRotSpeed(ref UInt16 fault, ref int speed);

11.17. Pobranie procentu momentu obrotowego chwytaka obrotowego

1/**
2* @brief  Pobiera procent momentu obrotowego chwytaka obrotowego
3* @param  [out] fault  0-brak błędu, 1-wystąpił błąd
4* @param  [out] torque  Procent momentu obrotowego
5* @return  Kod błędu
6*/
7int GetGripperRotTorque(ref UInt16 fault, ref int torque);

11.18. Przykład kodu pobierania stanu chwytaka obrotowego

 1int MoveRotGripper(int pos, double rotPos)
 2{
 3    robot.ResetAllError();
 4    robot.ActGripper(1, 1);
 5    Thread.Sleep(1000);
 6    int rtn = robot.MoveGripper(1, pos, 50, 50, 5000, 1, 1, rotPos, 50, 100);
 7    Console.WriteLine($"move gripper rtn is {rtn}" );
 8    UInt16 fault = 0;
 9    double rotNum = 0.0;
10    int rotSpeed = 0;
11    int rotTorque = 0;
12    robot.GetGripperRotNum(ref fault, ref rotNum);
13    robot.GetGripperRotSpeed(ref fault, ref rotSpeed);
14    robot.GetGripperRotTorque(ref fault, ref rotTorque);
15    Console.WriteLine($"gripper rot num :{ rotNum}, gripper rotSpeed :{rotSpeed}, gripper rotTorque : { rotTorque}");
16    return 0;
17}

11.19. Uruchomienie, zatrzymanie taśmociągu

1/**
2* @brief Uruchomienie, zatrzymanie taśmociągu
3* @param [in] status Stan, 1-uruchom, 0-zatrzymaj
4* @return Kod błędu
5*/
6int ConveyorStartEnd(byte status);

11.20. Zapis punktu detekcji I/O

1/**
2* @brief Zapis punktu detekcji I/O
3* @return Kod błędu
4*/
5int ConveyorPointIORecord();

11.21. Zapis punktu A

1/**
2* @brief Zapis punktu A
3* @return Kod błędu
4*/
5int ConveyorPointARecord();

11.22. Zapis punktu odniesienia

1/**
2* @brief Zapis punktu odniesienia
3* @return Kod błędu
4*/
5int ConveyorRefPointRecord();

11.23. Zapis punktu B

1/**
2* @brief Zapis punktu B
3* @return Kod błędu
4*/
5int ConveyorPointBRecord();

11.24. Detekcja I/O przedmiotu na taśmociągu

1/**
2* @brief Detekcja I/O przedmiotu na taśmociągu
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 chwytania, 2-śledzenie ruchu, 3-śledzenie TPD
4* @return Kod błędu
5*/
6int ConveyorGetTrackData(int mode);

11.26. Rozpoczęcie śledzenia taśmociągu

1/**
2* @brief Rozpoczęcie śledzenia taśmociągu
3* @param [in] status Stan, 1-uruchom, 0-zatrzymaj
4* @return Kod błędu
5*/
6int ConveyorTrackStart(byte status);

11.27. Zatrzymanie śledzenia taśmociągu

1/**
2* @brief Zatrzymanie śledzenia taśmociągu
3* @return Kod błędu
4*/
5int ConveyorTrackEnd();

11.28. Konfiguracja parametrów taśmociągu

 1/**
 2* @brief Konfiguracja parametrów taśmociągu
 3* @param [in] para[0] Kanał enkodera 1~2
 4* @param [in] para[1] Liczba impulsów enkodera na jeden obrót
 5* @param [in] para[2] Odległość przebyta przez taśmociąg na jeden obrót enkodera
 6* @param [in] para[3] Numer układu współrzędnych przedmiotu dla funkcji śledzenia ruchu, dla śledzenia chwytania i śledzenia TPD ustaw na 0
 7* @param [in] para[4] Czy z wizją 0-bez 1-z
 8* @param [in] para[5] Współczynnik prędkości dla opcji śledzenia chwytania taśmociągu (1-100) dla innych opcji domyślnie 1
 9* @param [in] followType Typ ruchu śledzenia, 0-ruch śledzący; 1-ruch doganiający
10* @param [in] startDis Dla chwytania doganiającego, odległość początkowa śledzenia, -1: automatyczne obliczenie (po dotarciu przedmiotu pod robota), jednostka mm, wartość domyślna 0
11* @param [in] endDis Dla chwytania doganiającego, 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=0, int endDis=100);

11.29. Ustawienie kompensacji punktu chwytania taśmociągu

1/**
2* @brief Ustawienie kompensacji punktu chwytania taśmociągu
3* @param [in] cmp Pozycja kompensacji double[3]{x, y, z}
4* @return Kod błędu
5*/
6int ConveyorCatchPointComp(double[] cmp);

11.30. Ruch liniowy śledzenia taśmociągu

 1/**
 2* @brief Ruch liniowy śledzenia taśmociągu
 3* @param [in] name Nazwa punktu ruchu
 4* @param [in] tool Numer układu współrzędnych narzędzia, zakres [0~14]
 5* @param [in] wobj Numer układu współrzędnych 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 nieudostępnione
 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ładzenia (nieblokujący), jednostka mm
10* @return Kod błędu
11*/
12int ConveyorTrackMoveL(string name, int tool, int wobj, float vel, float acc, float ovl, float blendR);

11.31. Detekcja wejścia komunikacji taśmociągu

1/**
2* @brief Detekcja wejścia komunikacji taśmociągu
3* @param [in] timeout Czas oczekiwania na przekroczenie limitu ms
4* @return Kod błędu
5*/
6public int ConveyorComDetect(int timeout)

11.32. Wyzwolenie detekcji wejścia komunikacji taśmociągu

1/**
2* @brief Wyzwolenie detekcji wejścia komunikacji taśmociągu
3* @return Kod błędu
4*/
5int ConveyorComDetectTrigger();

11.33. Przykładowy program wyzwalania detekcji wejścia komunikacji taśmociągu

 1private void button3_Click(object sender, EventArgs e)
 2{
 3
 4    // Wyłącz przycisk, aby zapobiec wielokrotnemu kliknięciu
 5    button3.Enabled = false;
 6
 7    // Wykonaj operację czasochłonną w wątku tła
 8    Thread conveyorThread = new Thread(ConveyorTest);
 9    conveyorThread.IsBackground = true;
10    conveyorThread.Start();
11}
12
13private void button4_Click(object sender, EventArgs e)
14{
15    // Pobierz dane wejściowe użytkownika
16    string input = texBox.Text;
17    Console.WriteLine($"please input a number to trigger:{input}");
18
19    int rtn = robot.ConveyorComDetectTrigger();
20    Console.WriteLine($"ConveyorComDetectTrigger 返回值: {rtn}");
21
22}
23
24private void ConveyorTest()
25{
26    // Użyj Invoke do aktualizacji kontrolek w wątku UI
27    this.Invoke((MethodInvoker)delegate {
28        Console.WriteLine("开始传送带测试...");
29    });
30
31    int retval = 0;
32    int index = 1;
33    int max_time = 30000;
34    bool block = false;
35    retval = 0;
36
37    /* Przebieg chwytania taśmociągu */
38    DescPose startdescPose = new DescPose(139.176f, 4.717f, 9.088f, -179.999f, -0.004f, -179.990f);
39    JointPos startjointPos = new JointPos(-34.129f, -88.062f, 97.839f, -99.780f, -90.003f, -34.140f);
40
41    DescPose homePose = new DescPose(139.177f, 4.717f, 69.084f, -180.000f, -0.004f, -179.989f);
42    JointPos homejointPos = new JointPos(-34.129f, -88.618f, 84.039f, -85.423f, -90.003f, -34.140f);
43
44    ExaxisPos exaxisPos = new ExaxisPos(0, 0, 0, 0);
45    DescPose offdese = new DescPose(0, 0, 0, 0, 0, 0);
46
47    // Przejdź do bezpiecznej pozycji
48    retval = robot.MoveL(homejointPos, homePose, 1, 1, 100, 100, 100, -1, exaxisPos, 0, 0, offdese, 1, 1);
49    Console.WriteLine($"MoveL 到安全位置返回值: {retval}");
50
51    // Detekcja taśmociągu
52    retval = robot.ConveryComDetect(1000 * 10);
53    Console.WriteLine($"ConveyorComDetect 返回值: {retval}");
54
55    // Pobierz dane śledzenia
56    retval = robot.ConveyorGetTrackData(2);
57    Console.WriteLine($"ConveyorGetTrackData 返回值: {retval}");
58
59    // Rozpocznij śledzenie
60    retval = robot.ConveyorTrackStart(2);
61    Console.WriteLine($"ConveyorTrackStart 返回值: {retval}");
62
63    // Przejdź do pozycji początkowej
64    robot.MoveL(startjointPos, startdescPose, 1, 1, 100, 100, 100, -1, exaxisPos, 0, 0, offdese, 1, 1);
65    robot.MoveL(startjointPos, startdescPose, 1, 1, 100, 100, 100, -1, exaxisPos, 0, 0, offdese, 1, 1);
66
67    // Zakończ śledzenie
68    retval = robot.ConveyorTrackEnd();
69    Console.WriteLine($"ConveyorTrackEnd 返回值: {retval}");
70
71    // Wróć do bezpiecznej pozycji
72    robot.MoveL(homejointPos, homePose, 1, 1, 100, 100, 100, -1, exaxisPos, 0, 0, offdese, 1, 1);
73
74    this.Invoke((MethodInvoker)delegate {
75        Console.WriteLine("传送带测试完成!");
76        button3.Enabled = true;
77    });
78}

11.34. Przykładowy program operacji taśmociągu robota

 1private void btnConvert_Click(object sender, EventArgs e)
 2{
 3    // Conveyor belt tracking
 4    DescPose pos1 = new DescPose(-354.549, 63.914, 270.176, -179.679, -0.134, 2.468);
 5    DescPose pos2 = new DescPose(-351.203, -213.393, 351.054, -179.932, -0.508, 2.472);
 6
 7    double[] cmp = { 0.0, 0.0, 0.0 };
 8    int rtn = robot.ConveyorCatchPointComp(cmp); // Set conveyor pick-up point compensation
 9    if (rtn != 0)
10    {
11        return;
12    }
13    Console.WriteLine("ConveyorCatchPointComp: rtn  " + rtn);
14
15    rtn = robot.MoveCart(pos1, 1, 0, (float)30.0, (float)180.0, (float)100.0, (float)-1.0, -1);
16    Console.WriteLine("MoveCart: rtn  " + rtn);
17
18    rtn = robot.ConveyorIODetect(10000); // Conveyor workpiece I/O detection
19    Console.WriteLine("ConveyorIODetect: rtn   " + rtn);
20
21    robot.ConveyorGetTrackData(1); // Configure conveyor tracking for picking
22    rtn = robot.ConveyorTrackStart(1); // Start tracking
23    Console.WriteLine("ConveyorTrackStart: rtn  " + rtn);
24
25    rtn = robot.ConveyorTrackMoveL("cvrCatchPoint", 1, 0, (float)100.0, (float)0.0, (float)100.0, (float)-1.0, 0, 0);
26    Console.WriteLine("ConveyorTrackMoveL: rtn  " + rtn);
27
28    rtn = robot.MoveGripper(2, 30, 60, 30, 30000, 0, 0, 0, 50, 50);
29    Console.WriteLine("ConveyorTrackMoveL: rtn  " + rtn);
30
31
32    rtn = robot.ConveyorTrackMoveL("cvrRaisePoint", 1, 0, (float)100.0, (float)0.0, (float)100.0, (float)-1.0, 0, 0);
33    Console.WriteLine("ConveyorTrackMoveL: rtn   " + rtn);
34
35    rtn = robot.ConveyorTrackEnd(); // Stop conveyor tracking
36    Console.WriteLine("ConveyorTrackEnd: rtn  " + rtn);
37
38    rtn = robot.MoveCart(pos2, 1, 0, (float)30.0, (float)180.0, (float)100.0, (float)-1.0, -1);
39    Console.WriteLine("MoveCart: rtn  " + rtn);
40
41    rtn = robot.MoveGripper(2, 100, 60, 30, 30000, 0,0,0,50,50);
42    Console.WriteLine("MoveGripper: rtn  " + rtn);
43
44}

11.35. Konfiguracja czujnika końcowego

1/**
2* @brief  Konfiguruje czujnik końcowy
3* @param  [in] idCompany Producent, 18-JUNKONG; 25-HUIDE
4* @param  [in] idDevice Typ, 0-JUNKONG/RYR6T.V1.0
5* @param  [in] idSoftware Wersja oprogramowania, 0-J1.0/HuiDe1.0 (tymczasowo nieudostępnione)
6* @param  [in] idBus Miejsce podłączenia, 1-port końcowy 1; 2-port końcowy 2...8-port końcowy 8 (tymczasowo nieudostępnione)
7* @return  Kod błędu
8*/
9int AxleSensorConfig(int idCompany, int idDevice, int idSoftware, int idBus);

11.36. Pobranie konfiguracji czujnika końcowego

1/**
2* @brief  Pobiera konfigurację czujnika końcowego
3* @param  [out] idCompany Producent, 18-JUNKONG; 25-HUIDE
4* @param  [out] idDevice Typ, 0-JUNKONG/RYR6T.V1.0
5* @return  Kod błędu
6*/
7int AxleSensorConfigGet(ref int idCompany, ref int idDevice);

11.37. Aktywacja czujnika końcowego

1/**
2* @brief  Aktywuje czujnik końcowy
3* @param  [in] actFlag 0-reset; 1-aktywacja
4* @return  Kod błędu
5*/
6int AxleSensorActivate(int actFlag);

11.38. 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 Wysoka 8 bitów adresu rejestru
 5* @param  [in] regLAddr Niska 8 bitów adresu rejestru
 6* @param  [in] regNum  Liczba rejestrów 0-255
 7* @param  [in] data1 Wartość 1 zapisywana do rejestru
 8* @param  [in] data2 Wartość 2 zapisywana do rejestru
 9* @param  [in] isNoBlock 0-blokujące; 1-nieblokujące
10* @return  Kod błędu
11*/
12 int AxleSensorRegWrite(int devAddr, int regHAddr, int regLAddr, int regNum, int data1, int data2, int isNoBlock);

11.39. Przykład kodu czujnika końcowego

 1private void button2_Click_1(object sender, EventArgs e)
 2{
 3    robot.AxleSensorConfig(18, 0, 0, 1);
 4    int company = -1;
 5    int type = -1;
 6    robot.AxleSensorConfigGet(ref company, ref type);
 7    Console.WriteLine("company is " + company + ", type is " + type);
 8
 9    int rtn = robot.AxleSensorActivate(1);
10    Console.WriteLine("AxleSensorActivate rtn is " + rtn);
11
12    Thread.Sleep(1000);
13
14    rtn = robot.AxleSensorRegWrite(1, 4, 6, 1, 0, 0, 0);
15    Console.WriteLine("AxleSensorRegWrite rtn is " + rtn);
16}

11.40. Pobranie protokołu urządzenia peryferyjnego robota

Nowe w wersji C#SDK-v1.0.6.

1/**
2* @brief Pobiera protokół urządzenia peryferyjnego robota
3* @param [out] protocol Numer protokołu urządzenia peryferyjnego robota 4096-karta sterująca osią rozszerzoną; 4097-ModbusSlave; 4098-ModbusMaster
4* @return Kod błędu
5*/
6int GetExDevProtocol(ref int protocol);

11.41. Ustawienie protokołu urządzenia peryferyjnego robota

Nowe w wersji C#SDK-v1.0.6.

1/**
2* @brief Ustawia protokół urządzenia peryferyjnego robota
3* @param [in] protocol Numer protokołu urządzenia peryferyjnego robota 4096-karta sterująca osią rozszerzoną; 4097-ModbusSlave; 4098-ModbusMaster
4* @return Kod błędu
5*/
6int SetExDevProtocol(int protocol);

11.42. Przykładowy program ustawiania protokołu urządzenia peryferyjnego robota

1private void btnSetProto_Click(object sender, EventArgs e)
2{
3  int protocol = 4096;
4  int rtn = robot.SetExDevProtocol(protocol);
5  Console.WriteLine("SetExDevProtocol rtn " + rtn);
6  rtn = robot.GetExDevProtocol(ref protocol);
7  Console.WriteLine("GetExDevProtocol rtn " + rtn + " protocol is: " + protocol);
8}

11.43. Pobranie parametrów komunikacji końcowej

1/**
2* @brief Pobiera parametry komunikacji końcowej
3* @param param Parametry komunikacji końcowej
4* @return  Kod błędu
5*/
6int GetAxleCommunicationParam(ref AxleComParam getParam);

11.44. Ustawienie parametrów komunikacji końcowej

1/**
2* @brief Ustawia parametry komunikacji końcowej
3* @param param  Parametry komunikacji końcowej
4* @return  Kod błędu
5*/
6int SetAxleCommunicationParam(AxleComParam param);

11.45. Ustawienie typu przesyłania plików końcowych

1/**
2* @brief Ustawia typ przesyłania plików końcowych
3* @param type 1-plik aktualizacji MCU; 2-plik LUA
4* @return  Kod błędu
5*/
6int SetAxleFileType(int type);

11.46. Ustawienie włączenia wykonania LUA końcowego

1/**
2* @brief Ustawia włączenie wykonania LUA końcowego
3* @param enable 0-nie włączaj; 1-włączaj
4* @return  Kod błędu
5*/
6int SetAxleLuaEnable(int enable);

11.47. Przywracanie błędu wyjątkowego pliku LUA końcowego

1/**
2* @brief Przywracanie błędu wyjątkowego pliku LUA końcowego
3* @param status 0-nie przywracaj; 1-przywracaj
4* @return  Kod błędu
5*/
6int SetRecoverAxleLuaErr(int status);

11.48. Pobranie stanu włączenia wykonania LUA końcowego

1/**
2* @brief Pobiera stan włączenia wykonania LUA końcowego
3* @param [out] status 0-nie włączone; 1-włączone
4* @return  Kod błędu
5*/
6int GetAxleLuaEnableStatus(ref int status);

11.49. 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 [in] forceSensorEnable Stan włączenia czujnika siły, 0-wyłączony; 1-włączony
4* @param [in] gripperEnable Stan włączenia chwytaka, 0-wyłączony; 1-włączony
5* @param [in] IOEnable Stan włączenia urządzenia IO, 0-wyłączony; 1-włączony
6* @param [in] 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.50. 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 [out] forceSensorEnable Stan włączenia czujnika siły, 0-wyłączony; 1-włączony
4* @param [out] gripperEnable Stan włączenia chwytaka, 0-wyłączony; 1-włączony
5* @param [out] IOEnable Stan włączenia urządzenia IO, 0-wyłączony; 1-włączony
6* @param [out] dexhandEnable Stan włączenia dłoni, 0-wyłączony; 1-włączony
7* @return  Kod błędu
8*/
9public int GetAxleLuaEnableDeviceType(ref int forceSensorEnable, ref int gripperEnable, ref int IOEnable, ref int dexhandEnable)

11.51. Pobieranie aktualnie skonfigurowanych urządzeń końcówki

1/**
2* @brief Pobiera aktualnie skonfigurowane urządzenia końcówki
3* @param [out] forceSensorEnable Numer włączonego urządzenia czujnika siły, 0-wyłączony; 1-włączony
4* @param [out] gripperEnable Numer włączonego urządzenia chwytaka, 0-wyłączony; 1-włączony
5* @param [out] IODeviceEnable Numer włączonego urządzenia IO, 0-wyłączony; 1-włączony
6* @param [out] decHandEnable Numer włączonego urządzenia dłoni, 0-wyłączony; 1-włączony
7* @return  Kod błędu
8*/
9public int GetAxleLuaEnableDevice(ref int[] forceSensorEnable, ref int[] gripperEnable, ref int[] IODeviceEnable, ref int[] decHandEnable)

11.52. Ustawianie włączonych funkcji sterowania ruchem chwytaka

 1/**
 2* @brief Ustawia włączone funkcje sterowania ruchem chwytaka
 3* @param [in] id Numer urządzenia chwytaka
 4* @param [in] 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.53. Pobieranie włączonych funkcji sterowania ruchem chwytaka

 1/**
 2* @brief Pobiera włączone funkcje sterowania ruchem chwytaka
 3* @param [in] id Numer urządzenia chwytaka
 4* @param [out] 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, ref int[] func)

11.54. Zapis pliku stacji podrzędnej Ethercat robota

1/**
2* @brief Zapis pliku stacji podrzędnej Ethercat robota
3* @param [in] type Typ pliku stacji podrzędnej, 1-aktualizacja pliku stacji podrzędnej; 2-aktualizacja pliku konfiguracyjnego stacji podrzędnej
4* @param [in] slaveID Numer stacji podrzędnej
5* @param [in] fileName Nazwa przesyłanego pliku
6* @return  Kod błędu
7*/
8int SlaveFileWrite(int type, int slaveID, string fileName);

11.55. 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*/
6int AxleLuaUpload(string filePath);

11.56. Wejście stacji podrzędnej Ethercat robota w tryb boot

1/**
2* @brief Wejście stacji podrzędnej Ethercat robota w tryb boot
3* @return  Kod błędu
4*/
5int SetSysServoBootMode();

11.57. Przykład kodu operacji na pliku LUA końcowego robota

 1private void button41_Click(object sender, EventArgs e)
 2{
 3    ROBOT_STATE_PKG pkg = new ROBOT_STATE_PKG();
 4    robot.AxleLuaUpload("D://zUP/AXLE_LUA_End_JunDuo_V0.4_20260602.lua");
 5
 6    AxleComParam param = new AxleComParam(7, 8, 1, 0, 5, 3, 1);
 7    robot.SetAxleCommunicationParam(param);
 8
 9    AxleComParam getParam = new AxleComParam();
10    robot.GetAxleCommunicationParam(ref getParam);
11    Console.WriteLine("GetAxleCommunicationParam param is {0} {1} {2} {3} {4} {5} {6}",
12        getParam.baudRate, getParam.dataBit, getParam.stopBit, getParam.verify,
13        getParam.timeout, getParam.timeoutTimes, getParam.period);
14
15    robot.SetAxleLuaEnable(1);
16    int luaEnableStatus = 0;
17    robot.GetAxleLuaEnableStatus(ref luaEnableStatus);
18    robot.SetAxleLuaEnableDeviceType(0, 1, 0, 0);
19
20    int forceEnable = 0;
21    int gripperEnable = 0;
22    int ioEnable = 0;
23    int dexhandEnable = 0;
24    robot.GetAxleLuaEnableDeviceType(ref forceEnable, ref gripperEnable, ref ioEnable, ref dexhandEnable);
25    Console.WriteLine("GetAxleLuaEnableDeviceType param is {0} {1} {2}", forceEnable, gripperEnable, ioEnable);
26
27    int[] func = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
28    robot.SetAxleLuaGripperFunc(1, func);
29
30    int[] getFunc = new int[32];
31    robot.GetAxleLuaGripperFunc(1, ref getFunc);
32    int[] getforceEnable = new int[16];
33    int[] getgripperEnable = new int[16];
34    int[] getioEnable = new int[16];
35    int[] dexhandEnable1 = new int[16];
36    robot.GetAxleLuaEnableDevice(ref getforceEnable, ref getgripperEnable, ref getioEnable,ref dexhandEnable1);
37    Console.WriteLine("\ngetforceEnable status : ");
38    foreach (int i in getforceEnable)
39    {
40        Console.Write(i + ",");
41    }
42    Console.WriteLine("\ngetgripperEnable status : ");
43    foreach (int i in getgripperEnable)
44    {
45        Console.Write(i + ",");
46    }
47    Console.WriteLine("\ngetioEnable status : ");
48    foreach (int i in getioEnable)
49    {
50        Console.Write(i + ",");
51    }
52    Console.WriteLine();
53    robot.ActGripper(1, 0);
54    Thread.Sleep(3000);
55    robot.ActGripper(1, 1);
56    Thread.Sleep(4000);
57    robot.MoveGripper(1, 50, 10, 100, 50000, 0, 0, 0, 0, 0);
58    int pos = 0;
59    while (true)
60    {
61        robot.GetRobotRealTimeState(ref pkg);
62        Console.WriteLine("gripper pos is " + pkg.gripper_position);
63        Thread.Sleep(100);
64    }
65}

11.58. Pobranie stanu przycisków SmartTool

Nowe w wersji C#SDK-V1.1.3: Web-3.8.2

1/**
2* @brief Pobiera stan 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;
4    bit3-przycisk A; bit4-przycisk B; bit5-przycisk C; bit6-przycisk D; bit7-przycisk E; bit8-przycisk I/O; bit9-ręczny/automatyczny; bit10-start)
5* @return Kod błędu
6*/
7int GetSmarttoolBtnState(ref int state);

11.59. Przykład kodu

Nowe w wersji C#SDK-V1.1.3: Web-3.8.2

 1private void button11_Click(object sender, EventArgs e)
 2{
 3
 4    ROBOT_STATE_PKG pkg = new ROBOT_STATE_PKG();
 5    int state = 0;
 6    while (true)
 7    {
 8        int rtn = robot.GetSmarttoolBtnState(ref state);
 9        string binaryString = Convert.ToString(state, 2).PadLeft(32, '0');
10        Console.WriteLine($"GetSmarttoolBtnState rtn (binary): {binaryString}");
11        Thread.Sleep(100);
12    }
13
14}

11.60. Przesłanie pliku Lua protokołu otwartego

Nowe w wersji C#SDK-V1.1.7: Web-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.61. Pobranie parametrów karty stacji podrzędnej

Nowe w wersji C#SDK-V1.1.7: Web-3.8.5

1/**
2* @brief  Pobiera parametry karty stacji podrzędnej
3* @param  type  0-Ethercat, 1-CClink, 3-Ethercat, 4-EIP
4* @param  version  Wersja protokołu
5* @param  connState  0-odłączony 1-połączony
6* @return  Kod błędu
7*/
8public int GetFieldBusConfig(int[] type, int[] version, int[] connState)

11.62. Zapis DO stacji podrzędnej

Nowe w wersji C#SDK-V1.1.7: Web-3.8.5

1/**
2* @brief  Zapis DO stacji podrzędnej
3* @param   DOIndex  Numer DO
4* @param   wirteNum  Liczba zapisywanych
5* @param   status Wartości do zapisania, maksymalnie 8
6* @return  Kod błędu
7*/
8public int FieldBusSlaveWriteDO(int DOIndex, int wirteNum, int[] status)

11.63. Zapis AO stacji podrzędnej

Nowe w wersji C#SDK-V1.1.7: Web-3.8.5

1/**
2* @brief  Zapis AO stacji podrzędnej
3* @param [in] AOIndex Numer AO
4* @param [in] wirteNum Liczba zapisywanych
5* @param [in] status Tablica wartości do zapisania (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.64. Odczyt DI stacji podrzędnej

Nowe w wersji C#SDK-V1.1.7: Web-3.8.5

1/**
2* @brief  Odczyt DI stacji podrzędnej
3* @param  DOIndex  Numer DI
4* @param  readNum  Liczba odczytywanych
5* @param  status Odczytywane wartości, maksymalnie 8
6* @return  Kod błędu
7*/
8public int FieldBusSlaveReadDI(int DOIndex, int readNum, int[] status)

11.65. Odczyt AI stacji podrzędnej

Nowe w wersji C#SDK-V1.1.7: Web-3.8.5

1/**
2* @brief  Odczyt AI stacji podrzędnej
3* @param  AIIndex  Numer AI
4* @param  readNum  Liczba odczytywanych
5* @param  status Odczytywane wartości, maksymalnie 8
6* @return  Kod błędu
7*/
8public int FieldBusSlaveReadAI(int AIIndex, int readNum, double[] status)

11.66. Oczekiwanie na wejście rozszerzone DI

Nowe w wersji C#SDK-V1.1.7: Web-3.8.5

1/**
2* @brief Oczekiwanie na wejście rozszerzone DI
3* @param  DIIndex Numer DI
4* @param  status 0-poziom niski; 1-poziom wysoki
5* @param  waitMs Maksymalny czas oczekiwania (ms)
6* @return Kod błędu
7*/
8public int FieldBusSlaveWaitDI(int DIIndex, int status, int waitMs)

11.67. Oczekiwanie na wejście rozszerzone AI

Nowe w wersji C#SDK-V1.1.7: Web-3.8.5

1/**
2* @brief Oczekiwanie na wejście rozszerzone 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.68. Przykład kodu instrukcji interfejsu trybu stacji podrzędnej

 1private void button101_Click(object sender, EventArgs e)
 2{
 3    int rtn = 0;
 4
 5    int type = 0, version = 0, connState = 0;
 6    int[] ctrl = new int[8];
 7    double[] ctrlAO = new double[8];
 8    int[] DI = new int[8];
 9    double[] AI = new double[8];
10    if (rtn != 0)
11    {
12        return;
13    }
14    // Upload and load open protocol file
15    robot.OpenLuaUpload("E://temp /CtrlDev_field.lua");
16    Thread.Sleep(2000);
17    robot.SetCtrlOpenLUAName(3, "CtrlDev_field.lua");
18    robot.UnloadCtrlOpenLUA(3);
19    robot.LoadCtrlOpenLUA(3);
20    Thread.Sleep(8000);
21
22    // Get protocol type, software version, and connection status with PLC
23    robot.GetFieldBusConfig(ref type, ref version, ref connState);
24    Console.WriteLine($"type is {type}, version is {version}, connState is {connState}");
25
26    // Write DO0 = 1, DO1 = 0, DO2 = 1
27    ctrl[0] = 1;
28    ctrl[1] = 0;
29    ctrl[2] = 1;
30    robot.FieldBusSlaveWriteDO(0, 3, ctrl);
31
32    // Write AO2 = 0x1000
33    ctrlAO[0] = 0x1000;
34    robot.FieldBusSlaveWriteAO(2, 1, ctrlAO);
35
36    for (int i = 0; i < 100; i++)
37    {
38        robot.FieldBusSlaveReadDI(0, 4, ref DI);
39        Console.WriteLine($"DI0 is {DI[0]}, DI1 is {DI[1]}, DI2 is {DI[2]}, DI3 is {DI[3]}");
40        robot.FieldBusSlaveReadAI(0, 3, ref AI);
41        Console.WriteLine($"AI0 is {AI[0]}, AI1 is {AI[1]}, AI2 is {AI[2]}");
42        Thread.Sleep(10);
43    }
44    int ret = robot.FieldBusSlaveWaitDI(0, 1, 100);
45    Console.WriteLine($"FieldBusSlaveWaitDI result is {ret}");
46
47    ret = robot.FieldBusSlaveWaitAI(0, 0, 400.00f, 100);
48    Console.WriteLine($"FieldBusSlaveWaitAI result is {ret}");
49}

11.69. Sterowanie macierzową przyssawką

Nowe w wersji C#SDK-V1.1.7: Web-3.8.5

1/**
2* @brief Sterowanie macierzową przyssawką
3* @param  slaveID Numer stacji podrzędnej
4* @param  len Długość
5* @param  ctrlValue Wartość sterowania 1-zasysanie z maksymalnym podciśnieniem 2-zasysanie z ustawionym podciśnieniem 3-zatrzymanie zasysania
6* @return Kod błędu
7*/
8public int SetSuckerCtrl(int slaveID, int len, int[] ctrlValue)

11.70. Pobranie stanu macierzowej przyssawki

Nowe w wersji C#SDK-V1.1.7: Web-3.8.5

1/**
2* @brief Pobranie stanu macierzowej przyssawki
3* @param  slaveID Numer stacji podrzędnej
4* @param  state Stan przyssania 0-uwolnienie 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.71. Oczekiwanie na stan przyssawki

Nowe w wersji C#SDK-V1.1.7: Web-3.8.5

1/**
2* @brief Oczekiwanie na stan przyssawki
3* @param  slaveID Numer stacji podrzędnej
4* @param  state Stan przyssania 0-uwolnienie 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.72. Przykład kodu instrukcji sterowania macierzową przyssawką

 1private void TestSucker(Robot robot)
 2{
 3
 4    int[] ctrl = new int[20];
 5    int state=0;
 6    int pressValue=0;
 7    int error=0;
 8    int rtn;
 9
10
11    // Upload and load open protocol file
12    robot.OpenLuaUpload(@"C:\SDK\CtrlDev_sucker.lua");
13    Thread.Sleep(2000);
14    robot.UnloadCtrlOpenLUA(1);
15    robot.LoadCtrlOpenLUA(1);
16    Thread.Sleep(1000);
17
18    // Control sucker in broadcast mode with maximum adsorption capacity
19    ctrl[0] = 1;
20    robot.SetSuckerCtrl(0, 1, ctrl);
21
22    // Monitor states of sucker 1 and sucker 12 in a loop
23    for (int i = 0; i < 100; i++)
24    {
25        robot.GetSuckerState(1, ref state, ref pressValue, ref error);
26        Console.WriteLine($"sucker1 state is {state}, pressValue is {pressValue}, error num is {error}");
27        robot.GetSuckerState(12, ref state, ref pressValue, ref error);
28        Console.WriteLine($"sucker12 state is {state}, pressValue is {pressValue}, error num is {error}");
29        Thread.Sleep(100);
30    }
31    // Wait for sucker 1 to reach adsorbed state, timeout 100ms
32    int ret = robot.WaitSuckerState(1, 1, 100);
33    Console.WriteLine($"WaitSuckerState result is {ret}");
34
35    // Unicast mode to turn off sucker 1 and 12
36    ctrl[0] = 3;
37    robot.SetSuckerCtrl(1, 1, ctrl);
38    robot.SetSuckerCtrl(12, 1, ctrl);
39
40    robot.CloseRPC();
41}

11.73. Funkcja włączania/wyłączania urządzenia peryferyjnego lasera

Nowe w wersji C#SDK-V1.1.8: Web-3.8.6

1/**
2 * @brief Funkcja włączania/wyłączania urządzenia peryferyjnego lasera
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.74. Funkcja rozpoczęcia/zakończenia śledzenia laserowego

Nowe w wersji C#SDK-V1.1.8: Web-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 współrzędnych narzędzia urządzenia peryferyjnego lasera
5 * @return Kod błędu
6 */
7public int LaserTrackingTrackOnOff(int OnOff, int coordId)

11.75. Pozycjonowanie laserowe - stały kierunek

Nowe w wersji C#SDK-V1.1.8: Web-3.8.6

 1/**
 2 * @brief Pozycjonowanie laserowe - 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ść pozycjonowania jednostka mm
 6 * @param [in] timeout Czas przekroczenia limitu pozycjonowania jednostka ms
 7 * @param [in] posSensorNum Numer narzędzia skalibrowanego dla lasera
 8 * @return Kod błędu
 9 */
10public int LaserTrackingSearchStart_xyz(int direction, int vel, int distance, int timeout, int posSensorNum)

11.76. Pozycjonowanie laserowe - dowolny kierunek

Nowe w wersji C#SDK-V1.1.8: Web-3.8.6

 1/**
 2 * @brief Pozycjonowanie laserowe - dowolny kierunek
 3 * @param [in] directionPoint Współrzędne xyz punktu wejściowego pozycjonowania
 4 * @param [in] vel Prędkość jednostka%
 5 * @param [in] distance Maksymalna odległość pozycjonowania jednostka mm
 6 * @param [in] timeout Czas przekroczenia limitu pozycjonowania jednostka ms
 7 * @param [in] posSensorNum Numer narzędzia skalibrowanego dla lasera
 8 * @return Kod błędu
 9 */
10public int LaserTrackingSearchStart_point(DescTran directionPoint, int vel, int distance, int timeout, int posSensorNum)

11.77. Zakończenie pozycjonowania laserowego

Nowe w wersji C#SDK-V1.1.8: Web-3.8.6

1/**
2* @brief  Zakończenie pozycjonowania laserowego
3* @return Kod błędu
4*/
5public int LaserTrackingSearchStop()

11.78. Konfiguracja adresu IP lasera

Nowe w wersji C#SDK-V1.1.8: Web-3.8.6

1/**
2 * @brief Konfiguracja adresu IP lasera
3 * @param [in] ip Adres IP urządzenia peryferyjnego lasera
4 * @param [in] port Numer portu urządzenia peryferyjnego lasera
5 * @return Kod błędu
6 */
7public int LaserTrackingSensorConfig(string ip, int port)

11.79. Konfiguracja okresu próbkowania urządzenia peryferyjnego lasera

Nowe w wersji C#SDK-V1.1.8: Web-3.8.6

1/**
2 * @brief Konfiguracja okresu próbkowania urządzenia peryferyjnego lasera
3 * @param [in] period Okres próbkowania urządzenia peryferyjnego lasera jednostka ms
4 * @return Kod błędu
5 */
6public int LaserTrackingSensorSamplePeriod(int period)

11.80. Ładowanie sterownika urządzenia peryferyjnego lasera

Nowe w wersji C#SDK-V1.1.8: Web-3.8.6

1/**
2 * @brief Ładowanie sterownika urządzenia peryferyjnego lasera
3 * @param [in] type Typ protokołu sterownika urządzenia peryferyjnego lasera 101-Ruiniu 102-Chuangxiang 103-Quanshi 104-Tongzhou 105-Aotai
4 * @return Kod błędu
5 */
6public int LoadPosSensorDriver(int type)

11.81. Rozładowanie sterownika urządzenia peryferyjnego lasera

Nowe w wersji C#SDK-V1.1.8: Web-3.8.6

1/**
2 * @brief Rozładowanie sterownika urządzenia peryferyjnego lasera
3 * @return Kod błędu
4 */
5public int UnLoadPosSensorDriver()

11.82. Rejestracja trajektorii spoiny laserowej

Nowe w wersji C#SDK-V1.1.8: Web-3.8.6

1/**
2 * @brief Rejestracja trajektorii 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.83. Odtworzenie trajektorii spoiny laserowej

Nowe w wersji C#SDK-V1.1.8: Web-3.8.6

1/**
2 * @brief Odtworzenie trajektorii 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.84. Odtworzenie śledzenia laserowego

Nowe w wersji C#SDK-V1.1.8: Web-3.8.6

1/**
2 * @brief Odtworzenie śledzenia laserowego
3 * @return Kod błędu
4 */
5public int MoveLTR()

11.85. Rejestracja i odtworzenie trajektorii spoiny laserowej

 1/**
 2* @brief Rejestracja i odtworzenie trajektorii spoiny laserowej
 3* @param [in] delayMode Tryb 0-czas opóźnienia 1-odległość opóźnienia
 4* @param [in] delayTime Czas opóźnienia jednostka ms
 5* @param [in] delayDisExAxisNum Numer osi rozszerzonej
 6* @param [in] delayDis Odległość opóźnienia jednostka mm
 7* @param [in] sensitivePara Współczynnik czułości kompensacji
 8* @param [in] trackMode Typ śledzenia punktowego. 0-ruch asynchroniczny osi rozszerzonej; 1-robot
 9* @param [in] triggerMode Sposób wyzwalania śledzenia punktowego. 0-czas śledzenia; 1-I/O
10* @param [in] runTime Czas śledzenia punktowego robota (s)
11* @param [in] 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.86. Przejście do punktu początkowego zarejestrowanej spoiny

Nowe w wersji C#SDK-V1.1.8: Web-3.8.6

1/**
2 * @brief Przejście do punktu początkowego zarejestrowanej 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.87. Przejście do punktu końcowego zarejestrowanej spoiny

Nowe w wersji C#SDK-V1.1.8: Web-3.8.6

1/**
2 * @brief Przejście do punktu końcowego zarejestrowanej 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.88. Przejście do punktu pozycjonowania czujnika laserowego

Nowe w wersji C#SDK-V1.1.8: Web-3.8.6

 1/**
 2 * @brief Przejście do punktu pozycjonowania czujnika laserowego
 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 rejestracji
 6 * @param [in] plateType Typ materiału: 0-blacha falista; 1-blacha trapezowa; 2-blacha ogrodzeniowa; 3-beczka; 4-stal pancerna falista
 7 * @param [in] trackOffectType Typ przesunięcia czujnika laserowego: 0-brak przesunięcia; 1-przesunięcie w podstawowym układzie współrzędnych; 2-przesunięcie w układzie współrzędnych 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.89. Pobranie informacji o współrzędnych punktu pozycjonowania czujnika laserowego

Nowe w wersji C#SDK-V1.1.8: Web-3.8.6

 1/**
 2 * @brief Pobranie informacji o współrzędnych punktu pozycjonowania czujnika laserowego
 3 * @param [in] trackOffectType Typ przesunięcia czujnika laserowego: 0-brak przesunięcia; 1-przesunięcie w podstawowym układzie współrzędnych; 2-przesunięcie w układzie współrzędnych narzędzia; 3-przesunięcie surowych danych czujnika laserowego
 4 * @param [in] offset Wartość przesunięcia
 5 * @param [out] jPos Pozycja stawów [°]
 6 * @param [out] descPos Pozycja kartezjańska [mm]
 7 * @param [out] tool Układ współrzędnych narzędzia
 8 * @param [out] user Układ współrzędnych przedmiotu
 9 * @param [out] exaxis Pozycja osi rozszerzonej [mm]
10 * @return Kod błędu
11 */
12public int GetLaserSeamPos(int trackOffectType, DescPose offset, ref JointPos jPos, ref DescPose descPos, ref int tool, ref int user, ref ExaxisPos exaxis)

11.90. Przykład kodu konfiguracji i debugowania parametrów czujnika urządzenia peryferyjnego lasera

Nowe w wersji C#SDK-V1.1.8: Web-3.8.6

 1void testLaserConfig()
 2{
 3    int[] ctrl = new int[20];
 4    int state;
 5    int pressValue;
 6    int error;
 7    robot.LaserTrackingSensorConfig("192.168.58.20", 5020);
 8    robot.LaserTrackingSensorSamplePeriod(20);
 9    robot.LoadPosSensorDriver(101);
10    robot.LaserTrackingLaserOnOff(0, 0);
11    System.Threading.Thread.Sleep(3000);
12    robot.LaserTrackingLaserOnOff(1, 0);
13}

11.91. Przykład kodu skanowania trajektorii laserowej i odtwarzania trajektorii

Nowe w wersji C#SDK-V1.1.8: Web-3.8.6

 1void testLaserRecordAndReplay()
 2{
 3    int[] ctrl = new int[20];
 4    int state;
 5    int pressValue;
 6    int error;
 7    robot.OpenLuaUpload("D://zUP/CtrlDev_laser_ruiniu-0117.lua");
 8    System.Threading.Thread.Sleep(2000);
 9    robot.SetCtrlOpenLUAName(0, "CtrlDev_laser_ruiniu-0117.lua");
10    robot.UnloadCtrlOpenLUA(0);
11    robot.LoadCtrlOpenLUA(0);
12    System.Threading.Thread.Sleep(8000);
13    for (int i=0;i<10;++i)
14    {
15        JointPos startjointPos = new JointPos(56.205, -117.951, 141.872, -118.149, -94.217, -122.176);
16        DescPose startdescPose = new DescPose(-97.552, -282.855, 26.675, 174.182, -1.338, -91.707);
17        ExaxisPos exaxisPos = new ExaxisPos(0, 0, 0, 0);
18        DescPose offdese = new DescPose(0, 0, 0, 0, 0, 0);
19
20        robot.MoveL(startjointPos, startdescPose, 1, 0, 100, 100, 100, -1, exaxisPos, 0, 0, offdese, 0);
21        robot.LaserSensorRecord1(2, 10);
22
23        JointPos endjointPos = new JointPos(68.809, -87.100, 121.120, -127.233, -95.038, -109.555);
24        DescPose enddescPose = new DescPose(-103.555, -464.234, 13.076, 174.179, -1.344, -91.709);
25        robot.MoveL(endjointPos, enddescPose, 1, 0, 50, 100, 100, -1, exaxisPos, 0, 0, offdese, 0);
26
27        robot.LaserSensorRecord1(0, 10);
28        robot.MoveToLaserRecordStart(1, 30);
29        robot.LaserSensorReplay(10, 100);
30        robot.MoveLTR();
31        robot.LaserSensorRecord1(0, 10);
32        Console.WriteLine($"Number of completions : {i+1} ");
33    }
34
35}

11.92. Przykład kodu pozycjonowania laserowego i śledzenia w czasie rzeczywistym

Nowe w wersji C#SDK-V1.1.8: Web-3.8.6

 1public static void testLasertrack()
 2{
 3    int[] ctrl = new int[20];
 4    int state;
 5    int pressValue;
 6    int error;
 7    robot.OpenLuaUpload("D://zUP/CtrlDev_laser_ruiniu-0117.lua");
 8    System.Threading.Thread.Sleep(2000);
 9    robot.SetCtrlOpenLUAName(0, "CtrlDev_laser_ruiniu-0117.lua");
10    robot.UnloadCtrlOpenLUA(0);
11    robot.LoadCtrlOpenLUA(0);
12    System.Threading.Thread.Sleep(8000);
13    for (int i = 0; i < 10; ++i)
14    {
15        JointPos startjointPos = new JointPos(56.205, -117.951, 141.872, -118.149, -94.217, -122.176);
16        DescPose startdescPose = new DescPose(-97.552, -282.855, 26.675, 174.182, -1.338, -91.707);
17        ExaxisPos exaxisPos = new ExaxisPos(0, 0, 0, 0);
18        DescPose offdese = new DescPose(0, 0, 0, 0, 0, 0);
19        DescTran directionPoint = new DescTran();
20
21        robot.MoveL(startjointPos, startdescPose, 1, 0, 100, 100, 100, -1, exaxisPos, 0, 0, offdese, 0);
22        robot.LaserTrackingSearchStart_xyz(3, 100, 300, 1000, 3);
23        robot.LaserTrackingSearchStop();
24        robot.MoveToLaserSeamPos(1, 30, 0, 0, 0, offdese);
25
26        robot.LaserTrackingTrackOnOff(1, 3);
27
28        JointPos endjointPos = new JointPos(68.809, -87.100, 121.120, -127.233, -95.038, -109.555);
29        DescPose enddescPose = new DescPose(-103.555, -464.234, 13.076, 174.179, -1.344, -91.709);
30        robot.MoveL(endjointPos, enddescPose, 1, 0, 20, 100, 100, -1, exaxisPos, 0, 0, offdese, 0);
31        robot.LaserTrackingTrackOnOff(0, 3);
32        Console.WriteLine($"Number of completions : {i + 1} ");
33    }
34}

11.93. Przykład kodu śledzenia laserowego z osią rozszerzoną i robotem synchronicznie

Nowe w wersji C#SDK-V1.1.8: Web-3.8.6

 1public void TestLaserTrackAndExitAxis()
 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 startjointPos = new JointPos(58.337, -119.628, 146.037, -116.358, -92.224, -117.654);
 8    DescPose startdescPose = new DescPose(-53.375, -255.363, 0.919, 178.054, 1.077, -94.026);
 9    for (int i=0;i<10;++i)
10    {
11        robot.ExtAxisSyncMoveJ(startjointPos, startdescPose, 1, 0, 100, 100, 100, startexaxisPos, -1, 0, offdese);
12        Console.WriteLine("11111");
13        int ret = robot.LaserTrackingSearchStart_xyz(3, 100, 300, 1000, 2);
14        robot.LaserTrackingSearchStop();
15        Console.WriteLine("2222");
16        int tool = 0;
17        int user = 0;
18        JointPos seamjointPos = new JointPos();
19        DescPose seamdescPose = new DescPose();
20        robot.GetLaserSeamPos(0, offdese, ref seamjointPos, ref seamdescPose, ref tool, ref user, ref startexaxisPos);
21        Console.WriteLine($"{seamjointPos.jPos[0]}, {seamjointPos.jPos[1]}, {seamjointPos.jPos[2]}, " +
22                        $"{seamjointPos.jPos[3]}, {seamjointPos.jPos[4]}, {seamjointPos.jPos[5]}, " +
23                        $"{seamdescPose.tran.x}, {seamdescPose.tran.y}, {seamdescPose.tran.z}, " +
24                        $"{seamdescPose.rpy.rx}, {seamdescPose.rpy.ry}, {seamdescPose.rpy.rz}");
25        if (ret == 0)
26        {
27            robot.ExtAxisSyncMoveJ(seamjointPos, seamdescPose, 1, 0, 100, 100, 100, seamexaxisPos, -1, 0, offdese);
28            Console.WriteLine("3333");
29            robot.LaserTrackingTrackOnOff(1, 2);
30            JointPos endjointPos = new JointPos(70.580, -90.918, 126.593, -125.154, -92.162, -105.403);
31            DescPose enddescPose = new DescPose(-53.375, -419.020, 0.920, 178.054, 1.076, -94.026);
32            robot.ExtAxisSyncMoveL(endjointPos, enddescPose, 1, 0, 20, 100, 100, -1, endexaxisPos, 0, offdese);
33            robot.LaserTrackingTrackOnOff(0, 2);
34        }
35        Console.WriteLine($"Number of completions : {i + 1} ");
36    }
37}

11.94. Włączanie/wyłączanie funkcji transmisji transparentnej końcowej

1/**
2* @brief Włączanie ogólnej funkcji transmisji transparentnej końcowej
3* @param [in] Włączenie, 0-wyłączone, 1-włączone
4* @return Kod błędu
5*/
6public int SetAxleGenComEnable(int mode)

11.95. Wysyłanie i odbieranie danych nieokresowych funkcji transmisji transparentnej końcowej

1/**
2* @brief Wysyłanie danych nieokresowych przez końcówkę i oczekiwanie na odpowiedź
3* @param [in] len_snd, długość wysyłanych danych
4* @param [in] sndBuff[], dane do wysłania
5* @param [in] len_rcv, wybór długości odbieranych danych
6* @param [out] rcvBuff[], odebrane dane odpowiedzi
7* @return Kod błędu
8*/
9public int SndRcvAxleGenComCmdData(int len_snd, int[] sndBuff, int len_rcv, ref int[] rcvdata)

11.96. Przykład kodu komunikacji danych nieokresowych dla głowicy do moksybustii Beykon w oparciu o funkcję transmisji transparentnej końcowej

 1void testAxleGenCom()
 2{
 3    int[] led_on = new int[6] { 0xAB, 0xBA, 0x12, 0x01, 0x01, 0x79 };
 4    int[] led_off = new int[6] { 0xAB, 0xBA, 0x12, 0x01, 0x00, 0x78 };
 5    int[] version = new int[5]{ 0xAB, 0xBA, 0x11, 0x00, 0x76 };
 6    int[] state = new int[6] { 0xAB, 0xBA, 0x1B,0x01, 0xAA, 0x2B };
 7    int[] cycleState = new int[6] { 0xAB, 0xBA, 0x12, 0x01, 0x00, 0x78 };
 8
 9    int[] rcvdata = new int[16];
10    int ret = 0;
11    int cnt = 1;
12
13    JointPos p1Joint = new JointPos(88.708, -86.178, 140.989, -141.825, -89.162, -49.879);
14    DescPose p1Desc = new DescPose(188.007, -377.850, 260.207, 178.715, 2.823, -131.466);
15
16    JointPos p2Joint = new JointPos(112.131, -75.554, 126.989, -139.027, -88.044, -26.477);
17    DescPose p2Desc = new DescPose(368.003, -377.848, 260.211, 178.715, 2.823, -131.465);
18
19    ExaxisPos exaxisPos = new ExaxisPos(0, 0, 0, 0);
20    DescPose offdese = new DescPose(0, 0, 0, 0, 0, 0);
21
22    //Włączenie funkcji transmisji transparentnej końcowej
23    robot.SetAxleGenComEnable(1);
24    robot.SetAxleLuaEnable(1);
25
26    while(cnt<=10)
27    {
28        //Odczytanie numeru wersji
29        ret = robot.SndRcvAxleGenComCmdData(5, version, 10, ref rcvdata);
30        Console.WriteLine($" hard version : {rcvdata[4]},hard code:{rcvdata[5]}, soft version:{rcvdata[6]} {rcvdata[7]}, soft code:{rcvdata[8]}");
31        if (ret != 0)
32        {
33            break;
34        }
35        Thread.Sleep(1000);
36        //Odczytanie stanu obecności głowicy do moksybustii
37        ret = robot.SndRcvAxleGenComCmdData(6, state, 6, ref rcvdata);
38        Console.WriteLine($" state : {rcvdata[4]}");
39        Thread.Sleep(1000);
40        //Włączenie lasera głowicy do moksybustii
41        ret = robot.SndRcvAxleGenComCmdData(6, led_on, 6, ref rcvdata);
42        Console.WriteLine($"led on rcv data is: {rcvdata[0]},{rcvdata[1]}, {rcvdata[2]}, {rcvdata[3]}, {rcvdata[4]}, {rcvdata[5]}");
43        robot.MoveJ(p1Joint, p1Desc, 0, 0, 100, 100, 100, exaxisPos, -1, 0, offdese);
44        Thread.Sleep(4000);
45        //Wyłączenie lasera głowicy do moksybustii
46        ret = robot.SndRcvAxleGenComCmdData(6, led_off, 6, ref rcvdata);
47        Console.WriteLine($"led off rcv data is: {rcvdata[0]},{rcvdata[1]}, {rcvdata[2]}, {rcvdata[3]}, {rcvdata[4]}, {rcvdata[5]}");
48        robot.MoveJ(p2Joint, p2Desc, 0, 0, 100, 100, 100, exaxisPos, -1, 0, offdese);
49        Thread.Sleep(1000);
50        Console.WriteLine($"***********************complate No. {cnt}  SDK test*****************************");
51        cnt++;
52    }
53
54}

11.97. Pobranie pliku Lua protokołu otwartego

1/**
2* @brief Pobranie pliku Lua protokołu otwartego
3* @param [in] fileName Nazwa pliku protokołu otwartego "CtrlDev_XXX.lua"
4* @param [in] savePath Ścieżka zapisu pliku protokołu otwartego
5* @return Kod błędu
6*/
7public int OpenLuaDownload(string fileName, string savePath)

11.98. 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.99. 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.100. Przykład kodu SDK operacji na plikach Lua protokołu otwartego

 1public int TestCtrlOpenLuaOperate()
 2{
 3    int rtn;
 4
 5    // Przesłanie pliku Lua do robota
 6    rtn = robot.OpenLuaUpload("D://zUP/openlua/CtrlDev_WELDING_A.lua");
 7    Console.WriteLine($"OpenLuaUpload rtn is {rtn}");
 8    rtn = robot.OpenLuaUpload("D://zUP/openlua/CtrlDev_SWDPOLISH.lua");
 9    Console.WriteLine($"OpenLuaUpload rtn is {rtn}");
10
11    // Pobranie pliku Lua z robota
12    rtn = robot.OpenLuaDownload("CtrlDev_WELDING_A.lua", "D://zDOWN/");
13    Console.WriteLine($"OpenLuaDownload rtn is {rtn}");
14    rtn = robot.OpenLuaDownload("CtrlDev_SWDPOLISH.lua", "D://zDOWN/");
15    Console.WriteLine($"OpenLuaDownload rtn is {rtn}");
16
17    // Ustawienie nazwy Lua protokołu otwartego sterowania
18    rtn = robot.SetCtrlOpenLUAName(0, "CtrlDev_WELDING_A.lua");
19    Console.WriteLine($"SetCtrlOpenLUAName rtn is {rtn}");
20    rtn = robot.SetCtrlOpenLUAName(1, "CtrlDev_SWDPOLISH.lua");
21    Console.WriteLine($"SetCtrlOpenLUAName rtn is {rtn}");
22
23    // Pobranie nazwy Lua protokołu otwartego sterowania
24    string[] name = new string[4];
25    rtn = robot.GetCtrlOpenLUAName(ref name);
26    Console.WriteLine($"ctrl open lua names : {name[0]}, {name[1]}, {name[2]}, {name[3]}");
27
28    // Załadowanie i rozładowanie Lua protokołu otwartego
29    rtn = robot.LoadCtrlOpenLUA(1);
30    Console.WriteLine($"LoadCtrlOpenLUA rtn is {rtn}");
31    robot.Sleep(2000);
32    rtn = robot.UnloadCtrlOpenLUA(1);
33    Console.WriteLine($"UnloadCtrlOpenLUA rtn is {rtn}");
34
35    // Usunięcie określonego pliku Lua i wszystkich plików Lua
36    rtn = robot.OpenLuaDelete("CtrlDev_WELDING_A.lua");
37    Console.WriteLine($"OpenLuaDelete rtn is {rtn}");
38    rtn = robot.AllOpenLuaDelete();
39    Console.WriteLine($"AllOpenLuaDelete rtn is {rtn}");
40
41    return 0;
42}

11.101. Sterowanie ruchem dłoni

 1/**
 2* @brief  Sterowanie ruchem dłoni
 3* @param  [in] idstart  Początkowy numer stacji podrzędnej
 4* @param  [in] slaveNum  Liczba
 5* @param  [in] pos[16]  Pozycja (-360~360)
 6* @param  [in] speed[16]  Procent prędkości, zakres [0~100]
 7* @param  [in] force[16]  Procent momentu obrotowego, zakres [0~100]
 8* @param  [in] 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.102. Sterowanie resetem i aktywacją dłoni

1/**
2* @brief  Sterowanie resetem i aktywacją dłoni
3* @param  [in] id  Numer stacji podrzędnej
4* @param  [in] act  0-reset 1-aktywacja
5* @return  Kod błędu
6*/
7public int SetDexterousHandsAct(int id, int act)

11.103. Czyszczenie błędu dłoni

1/**
2* @brief  Czyszczenie błędu dłoni
3* @return  Kod błędu
4*/
5public int ClearDexterousHandsError()

11.104. Ustawianie włączonych funkcji sterowania ruchem dłoni

1/**
2* @brief Ustawia włączone funkcje sterowania ruchem dłoni
3* @param [in] id Numer stacji podrzędnej dłoni
4* @param [in] func 0-wyzwolenie chwytu, 1-inicjalizacja chwytaka, 2-ustawienie pozycji, 3-ustawienie prędkości, 4-ustawienie momentu obrotowego, 6-odczyt stanu chwytaka, 7-odczyt stanu inicjalizacji, 8-odczyt kodu błędu, 9-odczyt pozycji, 10-odczyt prędkości, 11-odczyt momentu obrotowego, 12-ustawienie liczby obrotów, 13-ustawienie prędkości obrotowej, 14-ustawienie momentu obrotowego obrotu, 15-odczyt stanu chwytaka obrotowego, 16-odczyt stanu inicjalizacji obrotu, 17-odczyt liczby obrotów, 18-odczyt prędkości obrotowej, 19-odczyt momentu obrotowego obrotu, 20-ustawienie ruchu synchronicznego wieloosiowego, 21-komenda kasowania błędów, 22-stan pracy pojedynczej osi, 23-stan pracy wszystkich osi
5* @return  Kod błędu
6*/
7public int SetDexterousHandsFunc(int id, int[] func)

11.105. Pobieranie włączonych funkcji sterowania ruchem dłoni

1/**
2* @brief Pobiera włączone funkcje sterowania ruchem dłoni
3* @param [in] id Numer urządzenia dłoni
4* @param [out] func 0-wyzwolenie chwytu, 1-inicjalizacja chwytaka, 2-ustawienie pozycji, 3-ustawienie prędkości, 4-ustawienie momentu obrotowego, 6-odczyt stanu chwytaka, 7-odczyt stanu inicjalizacji, 8-odczyt kodu błędu, 9-odczyt pozycji, 10-odczyt prędkości, 11-odczyt momentu obrotowego, 12-ustawienie liczby obrotów, 13-ustawienie prędkości obrotowej, 14-ustawienie momentu obrotowego obrotu, 15-odczyt stanu chwytaka obrotowego, 16-odczyt stanu inicjalizacji obrotu, 17-odczyt liczby obrotów, 18-odczyt prędkości obrotowej, 19-odczyt momentu obrotowego obrotu, 20-ustawienie ruchu synchronicznego wieloosiowego, 21-komenda kasowania błędów, 22-stan pracy pojedynczej osi, 23-stan pracy wszystkich osi
5* @return  Kod błędu
6*/
7public int GetDexterousHandsFunc(int id, ref int[] func)

11.106. Przykład kodu konfiguracji i ruchu dłoni na końcówce robota

  1private void button105_Click(object sender, EventArgs e)
  2{
  3    int id = 1;               // Numer stacji podrzędnej
  4    int slaveNum = 4;         // Steruje 4 palcami
  5    int max_time = 8000;      // Maksymalny czas oczekiwania 8 sekund
  6    int[] speed = new int[16]; // Tablica prędkości, wszystkie 0 oznacza użycie domyślnej prędkości
  7    int[] force = new int[16]; // Tablica momentu obrotowego
  8
  9    // Inicjalizacja tablicy momentu: pierwsze 4 palce ustawione na 50%, reszta 0 (wartości wysyłane przez komendę Move)
 10    for (int i = 0; i < 16; i++)
 11        force[i] = (i < 4) ? 50 : 0;
 12
 13    // Funkcja pomocnicza: ustawienie tablicy pozycji (tylko pierwsze 4 palce są skuteczne)
 14    double[] pos = new double[16];
 15    void SetPositions(double v1, double v2, double v3, double v4)
 16    {
 17        for (int i = 0; i < 16; i++)
 18            pos[i] = 0;
 19        pos[0] = v1;
 20        pos[1] = v2;
 21        pos[2] = v3;
 22        pos[3] = v4;
 23    }
 24
 25    JointPos j1 = new JointPos(-91.876, -85.920, 109.279, -86.239, -96.664, -28.563);
 26    JointPos j2 = new JointPos(-40.954, -85.920, 109.279, -86.239, -96.664, -28.563);
 27    ExaxisPos epos = new ExaxisPos(0, 0, 0, 0);
 28    DescPose offset_pos = new DescPose(0, 0, 0, 0, 0, 0);
 29
 30    Console.WriteLine("===== Rozpoczęto pełny test funkcji dłoni =====");
 31
 32    // 1. Wyczyść błąd
 33    int ret = robot.ClearDexterousHandsError();
 34    Console.WriteLine($"ClearDexterousHandsError -> {ret}");
 35
 36    // ========== 2. Ustaw przełączniki funkcji ==========
 37    int[] setFunc = new int[32];
 38    setFunc[2] = 1;   // Włącz funkcję ustawiania pozycji
 39    setFunc[4] = 1;   // Włącz funkcję ustawiania momentu obrotowego
 40    setFunc[9] = 1;   // Odczyt pozycji
 41    setFunc[10] = 1;  // Odczyt momentu obrotowego
 42    setFunc[11] = 1;  // Odczyt statusu
 43    setFunc[22] = 1;  // Status ruchu pojedynczej osi
 44
 45    ret = robot.SetDexterousHandsFunc(id, setFunc);
 46    Console.WriteLine($"SetDexterousHandsFunc(włączono init + funkcje pozycji/momentu) -> {ret}");
 47
 48    // ========== 3. Odczyt statusu funkcji (weryfikacja, czy ustawienia zostały zastosowane) ==========
 49    int[] getFunc = new int[32];  // GetDexterousHandsFunc zwraca 32 liczby całkowite
 50    ret = robot.GetDexterousHandsFunc(id, ref getFunc);
 51    Console.WriteLine($"GetDexterousHandsFunc -> {ret}");
 52    if (ret == 0)
 53    {
 54        // Wyświetl wszystkie 32 wartości
 55        Console.WriteLine("Wszystkie 32 wartości zwrócone przez GetDexterousHandsFunc:");
 56        for (int i = 0; i < getFunc.Length; i++)
 57        {
 58            Console.Write($"  [{i}]={getFunc[i]}");
 59            if ((i + 1) % 8 == 0)
 60                Console.WriteLine();          // Nowa linia co 8 elementów
 61            else if (i < getFunc.Length - 1)
 62                Console.Write(", ");
 63        }
 64        if (getFunc.Length % 8 != 0)
 65            Console.WriteLine();              // Dodaj nową linię, jeśli ostatnia linia ma mniej niż 8 elementów
 66    }
 67
 68    // ========== 4. Aktywuj dłoń ==========
 69    ret = robot.SetDexterousHandsAct(id, 1);
 70    Console.WriteLine($"SetDexterousHandsAct(aktywacja) -> {ret}");
 71    if (ret != 0)
 72    {
 73        Console.WriteLine("Aktywacja nie powiodła się, test przerwany");
 74        return;
 75    }
 76
 77    // ========== 5. Początkowy ruch do 20° (wysyłanie wartości pozycji i momentu przez komendę Move) ==========
 78    SetPositions(20, 20, 20, 20);
 79    ret = robot.SetDexterousHandsMove(id, slaveNum, pos, speed, force, max_time);
 80    Console.WriteLine($"Początkowy ruch do 20° -> {ret}");
 81    robot.Sleep(5000);
 82
 83    // ========== 6. Ruch wahadłowy 10 razy (10° ↔ 50°) ==========
 84    Console.WriteLine("Rozpoczynanie 10 ruchów wahadłowych...");
 85    for (int iteration = 1; iteration <= 10; iteration++)
 86    {
 87        robot.MoveJ(j1, 0, 0, 100, 100, 100, epos, -1, 0, offset_pos);
 88
 89        SetPositions(10, 10, 10, 10);
 90        ret = robot.SetDexterousHandsMove(id, slaveNum, pos, speed, force, max_time);
 91        Console.WriteLine($"[{iteration}] Ruch do 10° -> {ret}");
 92        robot.Sleep(1000);
 93
 94        robot.MoveJ(j2, 0, 0, 100, 100, 100, epos, -1, 0, offset_pos);
 95
 96        SetPositions(50, 50, 50, 50);
 97        ret = robot.SetDexterousHandsMove(id, slaveNum, pos, speed, force, max_time);
 98        Console.WriteLine($"[{iteration}] Ruch do 50° -> {ret}");
 99        robot.Sleep(1000);
100    }
101
102    Console.WriteLine("Test zakończony (ustawienie/odczyt przełączników funkcji + aktywacja + 10 ruchów wahadłowych).");
103}