16. Inne interfejsy

16.1. Pobranie klucza publicznego SSH

1/**
2* @brief Pobiera klucz publiczny SSH
3* @param [out] keygen Klucz publiczny
4* @return Kod błędu
5*/
6int GetSSHKeygen(ref string keygen);

16.2. Wysłanie instrukcji SCP

Nowe w wersji C#SDK-V1.1.4: Web-3.8.3

 1/**
 2* @brief Wysyła instrukcję SCP
 3* @param [in] mode 0-przesyłanie (komputer nadrzędny -> kontroler), 1-pobieranie (kontroler -> komputer nadrzędny)
 4* @param [in] sshname Nazwa użytkownika komputera nadrzędnego
 5* @param [in] sship Adres IP komputera nadrzędnego
 6* @param [in] usr_file_url Ścieżka pliku na komputerze nadrzędnym
 7* @param [in] robot_file_url Ścieżka pliku w kontrolerze robota
 8* @return Kod błędu
 9*/
10int SetSSHScpCmd(int mode, string sshname, string sship, string usr_file_url, string robot_file_url);

16.3. Obliczenie wartości MD5 pliku w określonej ścieżce

1/**
2* @brief Oblicza wartość MD5 pliku w określonej ścieżce
3* @param [in] file_path Ścieżka pliku wraz z nazwą pliku, domyślna ścieżka folderu Traj to:"/fruser/traj/", np."/fruser/traj/trajHelix_aima_1.txt"
4* @param [out] md5 Wartość MD5 pliku
5* @return Kod błędu
6*/
7int ComputeFileMD5(string file_path, ref string md5);

16.4. Przykład kodu instrukcji SSH i MD5 robota

Nowe w wersji C#SDK-V1.1.4: Web-3.8.3

 1private void button46_Click(object sender, EventArgs e)
 2{
 3    string file_path = "/fruser/airlab.lua";
 4    string md5 = "";
 5    byte emerg_state = 0;
 6    byte si0_state = 0;
 7    byte si1_state = 0;
 8    int sdk_com_state = 0;
 9
10    string ssh_keygen = "";
11    int retval = robot.GetSSHKeygen(ref ssh_keygen);
12    Console.WriteLine("GetSSHKeygen retval is: {0}", retval);
13    Console.WriteLine("ssh key is: {0}", ssh_keygen);
14
15    string ssh_name = "fr";
16    string ssh_ip = "192.168.58.45";
17    string ssh_route = "/home/fr";
18    string ssh_robot_url = "/root/robot/dhpara.config";
19    retval = robot.SetSSHScpCmd(1, ssh_name, ssh_ip, ssh_route, ssh_robot_url);
20    Console.WriteLine("SetSSHScpCmd retval is: {0}", retval);
21    Console.WriteLine("robot url is: {0}", ssh_robot_url);
22
23    robot.ComputeFileMD5(file_path, ref md5);
24    Console.WriteLine("md5 is: {0}", md5);
25}

16.5. Ustawienie okresu informacji zwrotnej na porcie 20004 robota

1/**
2* @brief Ustawia okres informacji zwrotnej na porcie 20004 robota
3* @param [in] period Okres informacji zwrotnej na porcie 20004 robota (ms)
4* @return Kod błędu
5*/
6int SetRobotRealtimeStateSamplePeriod(int period);

16.6. Pobranie okresu informacji zwrotnej na porcie 20004 robota

1/**
2* @brief Pobiera okres informacji zwrotnej na porcie 20004 robota
3* @param [out] period Okres informacji zwrotnej na porcie 20004 robota (ms)
4* @return Kod błędu
5*/
6int GetRobotRealtimeStateSamplePeriod((ref int period);

16.7. Przykład kodu konfiguracji okresu informacji zwrotnej o stanie na porcie 20004 robota

1private void button47_Click(object sender, EventArgs e)
2{
3    robot.SetRobotRealtimeStateSamplePeriod(10);
4    int getPeriod = 0;
5    robot.GetRobotRealtimeStateSamplePeriod(ref getPeriod);
6    Console.WriteLine("period is {0}", getPeriod);
7    Thread.Sleep(1000);
8}

16.8. Aktualizacja oprogramowania robota

1/**
2* @brief Aktualizacja oprogramowania robota
3* @param [in] filePath Pełna ścieżka pakietu aktualizacyjnego oprogramowania
4* @param [in] block Czy blokować do zakończenia aktualizacji true: blokujące; false: nieblokujące
5* @return  Kod błędu
6*/
7int SoftwareUpgrade(string filePath, bool block);

16.9. Pobranie stanu aktualizacji oprogramowania robota

1/**
2* @brief  Pobiera stan aktualizacji oprogramowania robota
3* @param [out] state Stan aktualizacji pakietu oprogramowania robota 0-bezczynny lub przesyłanie pakietu aktualizacyjnego; 1~100: procent ukończenia aktualizacji; -1: aktualizacja oprogramowania nieudana; -2: weryfikacja nieudana; -3: weryfikacja wersji nieudana; -4: dekompresja nieudana; -5: aktualizacja konfiguracji użytkownika nieudana; -6: aktualizacja konfiguracji urządzeń peryferyjnych nieudana; -7: aktualizacja konfiguracji osi rozszerzonej nieudana; -8: aktualizacja konfiguracji robota nieudana; -9: aktualizacja konfiguracji parametrów DH nieudana
4* @return  Kod błędu
5*/
6int GetSoftwareUpgradeState(ref int state);

16.10. Przykład kodu aktualizacji oprogramowania robota

 1private void button48_Click(object sender, EventArgs e)
 2{
 3    robot.SoftwareUpgrade("D://zUP/QNX382/software.tar.gz", false);
 4    while (true)
 5    {
 6        int curState = -1;
 7        robot.GetSoftwareUpgradeState(ref curState);
 8        Console.WriteLine("upgrade state is {0}", curState);
 9        Thread.Sleep(300);
10    }
11}

16.11. Pobranie tabeli punktów

1/**
2* @brief Pobranie tabeli punktów z kontrolera robota do komputera lokalnego
3* @param [in] pointTableName Nazwa tabeli punktów w kontrolerze: pointTable1.db
4* @param [in] saveFilePath Ścieżka zapisu tabeli punktów na komputerze C://test/
5* @return Kod błędu
6*/
7int PointTableDownLoad(string pointTableName, string saveFilePath);

16.12. Przesłanie tabeli punktów

1/**
2* @brief Przesłanie tabeli punktów z komputera lokalnego do kontrolera robota
3* @param [in] pointTableFilePath Bezwzględna ścieżka tabeli punktów na komputerze lokalnym C://test/pointTable1.db
4* @return Kod błędu
5*/
6int PointTableUpLoad(string pointTableFilePath);

16.13. Aktualizacja programu Lua za pomocą podanej tabeli punktów

1/**
2* @brief Aktualizacja punktów w programie lua za pomocą podanej tabeli punktów
3* @param [in] pointTableName Nazwa tabeli punktów w kontrolerze: "pointTable1.db", gdy tabela punktów jest pusta, czyli "", oznacza aktualizację programu lua do programu początkowego bez zastosowania tabeli punktów
4* @param [in] luaFileName Nazwa pliku lua do aktualizacji   "test.lua"
5* @param [out] errorStr Informacja o błędzie podczas aktualizacji tabeli punktów w lua
6* @return Kod błędu
7*/
8int PointTableUpdateLua(string pointTableName, string luaFileName, ref string errorStr);

16.14. Przełączenie tabeli punktów i zastosowanie

1/**
2* @brief Przełączenie tabeli punktów i zastosowanie
3* @param [in] pointTableName Nazwa tabeli punktów do przełączenia   "pointTable1.db"
4* @param [out] errorStr Informacja o błędzie podczas przełączania tabeli punktów
5* @return Kod błędu
6*/
7int PointTableSwitch(string pointTableName, ref string errorStr);

16.15. Przykład kodu operacji na tabeli punktów robota

 1private void btnUpload_Click(object sender, EventArgs e)
 2{
 3    string save_path = "D://zDOWN/";
 4    string point_table_name = "test_point_A.db";
 5    int rtn = robot.PointTableDownLoad(point_table_name, save_path);
 6    Console.WriteLine("download : {0} fail: {1}", point_table_name, rtn);
 7
 8    string upload_path = "D://zUP/test_point_A.db";
 9    rtn = robot.PointTableUpLoad(upload_path);
10    Console.WriteLine("retval is: {0}", rtn);
11
12    string point_tablename = "test_point_A.db";
13    string lua_name = "Text1.lua";
14
15    string errorStr = "";
16    rtn = robot.PointTableUpdateLua(point_tablename, lua_name, ref errorStr);
17    Console.WriteLine("retval is: {0}", rtn);
18}

16.16. Pobranie dziennika kontrolera

1/**
2* @brief  Pobranie dziennika kontrolera
3* @param [in] savePath Ścieżka zapisu pliku "D://zDown/"
4* @return  Kod błędu
5*/
6int RbLogDownload(string savePath);

16.17. Pobranie wszystkich źródeł danych

1/**
2* @brief Pobranie wszystkich źródeł danych
3* @param [in] savePath Ścieżka zapisu pliku "D://zDown/"
4* @return  Kod błędu
5*/
6int AllDataSourceDownload(string savePath);

16.18. Pobranie pakietu kopii zapasowej danych

1/**
2* @brief Pobranie pakietu kopii zapasowej danych
3* @param [in] savePath Ścieżka zapisu pliku "D://zDown/"
4* @return  Kod błędu
5*/
6int DataPackageDownload(string savePath);

16.19. Przykład kodu pobierania danych kontrolera

 1private void button50_Click(object sender, EventArgs e)
 2{
 3    int rtn = robot.RbLogDownload("D://zDOWN/");
 4    Console.WriteLine("RbLogDownload rtn is {0}", rtn);
 5
 6    rtn = robot.AllDataSourceDownload("D://zDOWN/");
 7    Console.WriteLine("AllDataSourceDownload rtn is {0}", rtn);
 8
 9    rtn = robot.DataPackageDownload("D://zDOWN/");
10    Console.WriteLine("DataPackageDownload rtn is {0}", rtn);
11}

16.20. Aktualizacja systemu operacyjnego robota (skrzynka sterownicza LA)

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

1/**
2 * @brief Aktualizacja systemu operacyjnego robota (skrzynka sterownicza LA)
3 * @param [in] filePath Pełna ścieżka pakietu aktualizacyjnego systemu operacyjnego
4 * @return  Kod błędu
5 */
6public int KernelUpgrade(string filePath)

16.21. Pobranie wyniku aktualizacji systemu operacyjnego robota (skrzynka sterownicza LA)

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

1/**
2 * @brief Pobranie wyniku aktualizacji systemu operacyjnego robota (skrzynka sterownicza LA)
3 * @param [out] result Wynik aktualizacji: 0:sukces; -1:porażka
4 * @return  Kod błędu
5 */
6public int GetKernelUpgradeResult(ref int[] result)

16.22. Ustawienie aktualizacji enkodera

Nowe w wersji C#SDK-V1.1.5: Web-3.8.4

1/**
2* @brief Ustawia aktualizację enkodera
3* @param [in] path Pełna ścieżka lokalnego pakietu aktualizacyjnego (D://zUP/XXXXX.bin)
4* @return Kod błędu
5*/
6int SetEncoderUpgrade(string path);

16.23. Ustawienie aktualizacji oprogramowania sprzętowego stawu

Nowe w wersji C#SDK-V1.1.5: Web-3.8.4

1/**
2* @brief Ustawia aktualizację oprogramowania sprzętowego stawu
3* @param [in] type Typ pliku aktualizacyjnego; 1-aktualizacja oprogramowania sprzętowego; 2-aktualizacja pliku konfiguracyjnego stacji podrzędnej
4* @param [in] path Pełna ścieżka lokalnego pakietu aktualizacyjnego (D://zUP/XXXXX.bin)
5* @return Kod błędu
6*/
7int SetJointFirmwareUpgrade(int type, string path);

16.24. Ustawienie aktualizacji oprogramowania sprzętowego skrzynki sterowniczej

Nowe w wersji C#SDK-V1.1.5: Web-3.8.4

1/**
2* @brief Ustawia aktualizację oprogramowania sprzętowego skrzynki sterowniczej
3* @param [in] type Typ pliku aktualizacyjnego; 1-aktualizacja oprogramowania sprzętowego; 2-aktualizacja pliku konfiguracyjnego stacji podrzędnej
4* @param [in] path Pełna ścieżka lokalnego pakietu aktualizacyjnego (D://zUP/XXXXX.bin)
5* @return Kod błędu
6*/
7int SetCtrlFirmwareUpgrade(int type, string path);

16.25. Ustawienie aktualizacji oprogramowania sprzętowego końcówki

Nowe w wersji C#SDK-V1.1.5: Web-3.8.4

1/**
2* @brief Ustawia aktualizację oprogramowania sprzętowego końcówki
3* @param [in] type Typ pliku aktualizacyjnego; 1-aktualizacja oprogramowania sprzętowego; 2-aktualizacja pliku konfiguracyjnego stacji podrzędnej
4* @param [in] path Pełna ścieżka lokalnego pakietu aktualizacyjnego (D://zUP/XXXXX.bin)
5* @return Kod błędu
6*/
7int SetEndFirmwareUpgrade(int type, string path);

16.26. Aktualizacja pliku konfiguracyjnego pełnych parametrów stawu

Nowe w wersji C#SDK-V1.1.5: Web-3.8.4

1/**
2* @brief Aktualizacja pliku konfiguracyjnego pełnych parametrów stawu
3* @param [in] path Pełna ścieżka lokalnego pakietu aktualizacyjnego (D://zUP/XXXXX.bin)
4* @return Kod błędu
5*/
6int JointAllParamUpgrade(string path);

16.27. Przykład kodu aktualizacji oprogramowania sprzętowego stacji podrzędnej robota

Nowe w wersji C#SDK-V1.1.5: Web-3.8.4

 1private void button83_Click(object sender, EventArgs e)
 2{
 3    robot.RobotEnable(0);
 4    Thread.Sleep(200);
 5    int rtn = robot.JointAllParamUpgrade("D://zUP/upgrade/jointallparameters.db");
 6    Console.WriteLine($"robot JointAllParamUpgrade rtn is{rtn}");
 7    rtn = robot.SetCtrlFirmwareUpgrade(2, "D://zUP/upgrade/FAIR_Cobot_Cbd_Asix_V2.0.bin");
 8    Console.WriteLine($"robot SetCtrlFirmwareUpgrade rtn is{rtn}");
 9    rtn = robot.SetEndFirmwareUpgrade(2, "D://zUP/upgrade/FAIR_Cobot_Axle_Asix_V2.4.bin");
10    Console.WriteLine($"robot SetEndFirmwareUpgrade rtn is {rtn}");
11    robot.SetSysServoBootMode();
12    rtn = robot.SetCtrlFirmwareUpgrade(1, "D://zUP/upgrade/FR_CTRL_PRIMCU_FV201212_MAIN_U4_T01_20250428(MT).bin");
13    Console.WriteLine($"robot SetCtrlFirmwareUpgrade rtn is{rtn}");
14    rtn = robot.SetEndFirmwareUpgrade(1, "D://zUP/upgrade/FR_END_FV201009_MAIN_U1_T01_20250428.bin");
15    Console.WriteLine($"robot SetEndFirmwareUpgrade rtn is {rtn}");
16    rtn = robot.SetJointFirmwareUpgrade(1, "D://zUP/upgrade/FR_SERVO_FV504214_MAIN_U7_T07_20250519.bin");
17    Console.WriteLine($"robot SetJointFirmwareUpgrade rtn is{rtn}");
18}

16.28. Generowanie dziennika MCU robota

Nowe w wersji C#SDK-V1.1.9: Web-3.8.7

1/**
2* @brief Generowanie dziennika MCU robota
3* @return Kod błędu
4*/
5public int RobotMCULogCollect();

16.29. Ustawienie zatrzymania robota po przerwaniu komunikacji portu

1/**
2* @brief Ustawienie zatrzymania robota po przerwaniu komunikacji portu
3* @param [in] pordID Numer portu 0-8080; 1-8083; 2-20002; 3-20004
4* @param [in] enable 0-wyłączone; 1-włączone
5* @param [in] confirmTime Czas potwierdzenia przerwania komunikacji (ms)[0-5000]
6* @return  Kod błędu
7*/
8public int SetRobotStopOnComDisc(int portID, bool enable, int confirmTime)

16.30. Pobranie parametrów zatrzymania robota po przerwaniu komunikacji portu

1/**
2* @brief Pobranie parametrów zatrzymania robota po przerwaniu komunikacji portu
3* @param [in] pordID Numer portu 0-8080; 1-8083; 2-20002; 3-20004
4* @param [out] enable 0-wyłączone; 1-włączone
5* @param [out] confirmTime Czas potwierdzenia przerwania komunikacji (ms)[0-5000]
6* @return  Kod błędu
7*/
8public int GetRobotStopOnComDisc(int portID, ref bool enable, ref int confirmTime)

16.31. Przykład kodu parametrów zatrzymania robota po przerwaniu komunikacji portu

 1void TestRobotStopOnComDisc()
 2{
 3    int rtn = 0;
 4
 5    // Ustawienie parametrów dla czterech portów
 6    rtn = robot.SetRobotStopOnComDisc(0, true, 330);
 7    rtn = robot.SetRobotStopOnComDisc(1, true, 550);
 8    rtn = robot.SetRobotStopOnComDisc(2, true, 110);
 9    rtn = robot.SetRobotStopOnComDisc(3, true, 220);
10    Console.WriteLine($"SetRobotStopOnComDisc {rtn}");
11
12    bool enable = false;
13    int confirmTime = 0;
14
15    // Pobranie i wydrukowanie ustawień dla każdego portu
16    robot.GetRobotStopOnComDisc(0, ref enable, ref confirmTime);
17    Console.WriteLine($"GetRobotStopOnComDisc 8080 rtn {rtn}; enable is {(enable ? 1 : 0)}; confirm time is {confirmTime}");
18
19    robot.GetRobotStopOnComDisc(1, ref enable, ref confirmTime);
20    Console.WriteLine($"GetRobotStopOnComDisc 8083 rtn {rtn}; enable is {(enable ? 1 : 0)}; confirm time is {confirmTime}");
21
22    robot.GetRobotStopOnComDisc(2, ref enable, ref confirmTime);
23    Console.WriteLine($"GetRobotStopOnComDisc 20002 rtn {rtn}; enable is {(enable ? 1 : 0)}; confirm time is {confirmTime}");
24
25    robot.GetRobotStopOnComDisc(3, ref enable, ref confirmTime);
26    Console.WriteLine($"GetRobotStopOnComDisc 20004 rtn {rtn}; enable is {(enable ? 1 : 0)}; confirm time is {confirmTime}");
27
28}

16.32. Wysłanie ramki instrukcji UDP

1/**
2* @brief Wysyła ramkę instrukcji UDP
3* @param [in] Ramka instrukcji
4* @return Kod błędu
5*/
6public int SendUDPFrame(string frame)

16.33. Przykład kodu SDK opartego na komunikacji UDP

 1void TestRobotUDP()
 2{
 3    robot.OnUdpFrameReceived += (comType, frameCount, frameCmdID, contentLen, content) =>
 4    {
 5        Console.WriteLine($"[UDP odpowiedź] comType={comType}, count={frameCount}, cmdID={frameCmdID}, content={content}");
 6    };
 7
 8
 9    //Wysłanie ramki
10    string frameToSend = "/f/bIII52III236III7IIIMode(1)III/b/f";
11    robot.SendUDPFrame(frameToSend);
12    Thread.Sleep(2000);
13    frameToSend = "/f/bIII52III236III7IIIMode(0)III/b/f";
14    robot.SendUDPFrame(frameToSend);
15    Thread.Sleep(2000);
16    frameToSend = "/f/bIII41III201III153IIIMoveJ(53.857,-89.441,119.453,-22.664,61.059,3.369,-54.249,-491.930,375.396,96.474,-6.896,-7.783,0,0,100,100,100,0.000,0.000,0.000,0.000,-1,0,0,0,0,0,0,0)III/b/f";
17    robot.SendUDPFrame(frameToSend);
18    Thread.Sleep(2000);
19    frameToSend = "/f/bIII42III203III163IIIMoveL(81.736,-85.284,114.974,-23.261,88.746,6.799,125.744,-506.570,375.396,96.474,-6.896,-7.783,0,0,100,100,100,-1,0,0.000,0.000,0.000,0.000,0,0,0,0,0,0,0,0,100,0)III/b/f";
20    robot.SendUDPFrame(frameToSend);
21    Thread.Sleep(2000);
22    frameToSend = "/f/bIII47III400III15IIIGetMCVersion(1)III/b/f/f/bIII48III424III21IIIGetSlaveFirmVersion()III/b/f";
23    robot.SendUDPFrame(frameToSend);
24    Thread.Sleep(2000);
25
26}

16.34. Ustawienie niestandardowego koloru lampki końcowej robota przez użytkownika

1/**
2* @brief Ustawienie niestandardowego koloru lampki końcowej robota przez użytkownika
3* @param [in] r Sterowanie czerwoną lampką końcową; 0-wyłączona; 1-włączona
4* @param [in] g Sterowanie zieloną lampką końcową; 0-wyłączona; 1-włączona
5* @param [in] b Sterowanie niebieską lampką końcową; 0-wyłączona; 1-włączona
6* @return Kod błędu
7*/
8public int SetUserLEDColor(bool r, bool g, bool b)

16.35. Przykład kodu SDK ustawienia niestandardowego koloru lampki końcowej robota przez użytkownika

 1public void testled()
 2{
 3    robot.SetUserLEDColor(true, true, true);
 4    robot.Sleep(1000);
 5    robot.SetUserLEDColor(false, false, false);
 6    robot.Sleep(1000);
 7    robot.SetUserLEDColor(true, false, false);
 8    robot.Sleep(1000);
 9    robot.SetUserLEDColor(false, true, false);
10    robot.Sleep(1000);
11    robot.SetUserLEDColor(false, false, true);
12}