13. Oś rozszerzenia

13.1. Ustawianie parametrów osi rozszerzenia 485

Nowe w wersji python: SDK-v2.0.3

Prototyp

AuxServoSetParam(servoId,servoCompany,servoModel,servoSoftVersion, servoResolution,axisMechTransRatio)

Opis

Ustawianie parametrów osi rozszerzenia 485

Parametry wymagane

  • servoId: ID serwonapędu, zakres [1-15], odpowiada ID węzła podrzędnego;

  • servoCompany: Producent serwonapędu, 1-DynaTek;

  • servoModel: Model serwonapędu, 1-FD100-750C;

  • servoSoftVersion: Wersja oprogramowania serwonapędu, 1-V1.0;

  • servoResolution: Rozdzielczość enkodera;

  • axisMechTransRatio: Przełożenie mechaniczne;

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.2. Pobieranie parametrów konfiguracyjnych osi rozszerzenia 485

Nowe w wersji python: SDK-v2.0.3

Prototyp

AuxServoGetParam(servoId)

Opis

Pobieranie parametrów konfiguracyjnych osi rozszerzenia 485

Parametry wymagane

  • servoId: ID serwonapędu, zakres [1-15], odpowiada ID węzła podrzędnego;

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode;

  • servoCompany: Producent serwonapędu, 1-DynaTek;

  • servoModel: Model serwonapędu, 1-FD100-750C;

  • servoSoftVersion: Wersja oprogramowania serwonapędu, 1-V1.0;

  • servoResolution: Rozdzielczość enkodera;

  • axisMechTransRatio: Przełożenie mechaniczne;

13.3. Ustawianie włączenia/wyłączenia osi rozszerzenia 485

Nowe w wersji python: SDK-v2.0.3

Prototyp

AuxServoEnable(servoId,status)

Opis

Ustawianie włączenia/wyłączenia osi rozszerzenia 485

Parametry wymagane

  • servoId: ID serwonapędu, zakres [1-15], odpowiada ID węzła podrzędnego;

  • status: Stan włączenia, 0-wyłącz, 1-włącz;

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.4. Ustawianie trybu sterowania osi rozszerzenia 485

Nowe w wersji python: SDK-v2.0.3

Prototyp

AuxServoSetControlMode(servoId,mode)

Opis

Ustawianie trybu sterowania osi rozszerzenia 485

Parametry wymagane

  • servoId: ID serwonapędu, zakres [1-15], odpowiada ID węzła podrzędnego;

  • mode: Tryb sterowania, 0-tryb pozycyjny, 1-tryb prędkościowy;

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

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

Nowe w wersji python: SDK-v2.0.3

Prototyp

AuxServoSetTargetPos(servoId,pos,speed)

Opis

Ustawianie pozycji docelowej osi rozszerzenia 485 (tryb pozycyjny)

Parametry wymagane

  • servoId: ID serwonapędu, zakres [1-15], odpowiada ID węzła podrzędnego;

  • pos: Pozycja docelowa, mm lub °;

  • speed: Prędkość docelowa, mm/s lub °/s;

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

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

Nowe w wersji python: SDK-v2.0.3

Prototyp

AuxServoSetTargetTorque(servoId,torque)

Opis

Ustawianie momentu obrotowego docelowego osi rozszerzenia 485 (tryb momentowy)

Parametry wymagane

  • servoId: ID serwonapędu, zakres [1-15], odpowiada ID węzła podrzędnego;

  • torque: Moment obrotowy docelowy, Nm;

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.7. Ustawianie powrotu do zera osi rozszerzenia 485

Nowe w wersji python: SDK-v2.0.3

Prototyp

AuxServoHoming(servoId,mode,searchVel,latchVel)

Opis

Ustawianie powrotu do zera osi rozszerzenia 485

Parametry wymagane

  • servoId: ID serwonapędu, zakres [1-15], odpowiada ID węzła podrzędnego;

  • mode: Tryb powrotu do zera, 1-powrót do zera w bieżącej pozycji; 2-powrót do zera z ograniczeniem ujemnym; 3-powrót do zera z ograniczeniem dodatnim;

  • searchVel: Prędkość poszukiwania zera, mm/s lub °/s;

  • latchVel: Prędkość zatrzasku, mm/s lub °/s;

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

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

Nowe w wersji python: SDK-v2.0.3

Prototyp

AuxServoClearError(servoId)

Opis

Czyszczenie informacji o błędzie osi rozszerzenia 485

Parametry wymagane

  • servoId: ID serwonapędu, zakres [1-15], odpowiada ID węzła podrzędnego;

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.9. Pobieranie stanu serwonapędu osi rozszerzenia 485

Nowe w wersji python: SDK-v2.0.3

Prototyp

AuxServoGetStatus(servoId)

Opis

Pobieranie stanu serwonapędu osi rozszerzenia 485

Parametry wymagane

  • servoId: ID serwonapędu, zakres [1-15], odpowiada ID węzła podrzędnego;

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode;

  • servoErrCode: Kod błędu serwonapędu

  • servoState: Stan serwonapędu bit0:0-wyłączony; 1-włączony; bit1:0-brak ruchu; 1-w ruchu; bit2 0-ograniczenie dodatnie nieaktywne; 1-ograniczenie dodatnie aktywne; bit3 0-ograniczenie ujemne nieaktywne; 1-ograniczenie ujemne aktywne; bit4 0-brak pozycjonowania; 1-pozycjonowanie zakończone; bit5:0-brak powrotu do zera; 1-powrót do zera zakończony;

  • servoPos: Bieżąca pozycja serwonapędu mm lub °;

  • servoSpeed: Bieżąca prędkość serwonapędu mm/s lub °/s;

  • servoTorque: Bieżący moment obrotowy serwonapędu Nm;

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

Nowe w wersji python: SDK-v2.0.3

Prototyp

AuxServoSetTargetSpeed(servoId,speed)

Opis

Ustawianie prędkości docelowej osi rozszerzenia 485 (tryb prędkościowy)

Parametry wymagane

  • servoId: ID serwonapędu, zakres [1-15], odpowiada ID węzła podrzędnego;

  • speed: Prędkość docelowa, mm/s lub °/s;

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

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

Nowe w wersji python: SDK-v2.0.3

Prototyp

AuxServosetStatusID(servoId)

Opis

Ustawianie numeru osi danych osi rozszerzenia 485 w sprzężeniu zwrotnym stanu

Parametry wymagane

  • servoId: ID serwonapędu, zakres [1-15], odpowiada ID węzła podrzędnego;

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

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

Nowe w wersji python: SDK-v2.0.5

Prototyp

AuxServoSetAcc(acc, dec)

Opis

Ustawianie przyspieszenia i opóźnienia ruchu osi rozszerzenia 485

Parametry wymagane

  • acc: Przyspieszenie ruchu osi rozszerzenia 485

  • dec: Opóźnienie ruchu osi rozszerzenia 485

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

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

Nowe w wersji python: SDK-v2.0.5

Prototyp

AuxServoSetEmergencyStopAcc(acc, dec)

Opis

Ustawianie przyspieszenia i opóźnienia awaryjnego zatrzymania osi rozszerzenia 485

Parametry wymagane

  • acc: Przyspieszenie awaryjnego zatrzymania osi rozszerzenia 485

  • dec: Opóźnienie awaryjnego zatrzymania osi rozszerzenia 485

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

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

Nowe w wersji python: SDK-v2.0.5

Prototyp

AuxServoGetAcc()

Opis

Pobieranie przyspieszenia i opóźnienia ruchu osi rozszerzenia 485

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • acc: Przyspieszenie ruchu osi rozszerzenia 485

  • dec: Opóźnienie ruchu osi rozszerzenia 485

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

Nowe w wersji python: SDK-v2.0.5

Prototyp

AuxServoGetEmergencyStopAcc()

Opis

Pobieranie przyspieszenia i opóźnienia awaryjnego zatrzymania osi rozszerzenia 485

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • acc: Przyspieszenie awaryjnego zatrzymania osi rozszerzenia 485

  • dec: Opóźnienie awaryjnego zatrzymania osi rozszerzenia 485

13.16. Przykład kodu sterowania osią rozszerzenia

 1from fairino import Robot
 2import time
 3import threading
 4# Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota
 5robot = Robot.RPC('192.168.58.2')
 6retval = robot.AuxServoSetParam(1, 1, 1, 1, 131072, 15.45)
 7print(f"AuxServoSetParam is: {retval}")
 8servoCompany = 0
 9servoModel = 0
10servoSoftVersion = 0
11servoResolution = 0
12axisMechTransRatio = 0.0
13retval, servoCompany, servoModel, servoSoftVersion, servoResolution, axisMechTransRatio = robot.AuxServoGetParam(1)
14print(f"servoCompany {servoCompany}\n"
15      f"servoModel {servoModel}\n"
16      f"servoSoftVersion {servoSoftVersion}\n"
17      f"servoResolution {servoResolution}\n"
18      f"axisMechTransRatio {axisMechTransRatio}\n")
19retval = robot.AuxServoSetParam(1, 10, 11, 12, 13, 14)
20print(f"AuxServoSetParam is: {retval}")
21retval, servoCompany, servoModel, servoSoftVersion, servoResolution, axisMechTransRatio = robot.AuxServoGetParam(1)
22print(f"servoCompany {servoCompany}\n"
23      f"servoModel {servoModel}\n"
24      f"servoSoftVersion {servoSoftVersion}\n"
25      f"servoResolution {servoResolution}\n"
26      f"axisMechTransRatio {axisMechTransRatio}\n")
27retval = robot.AuxServoSetParam(1, 1, 1, 1, 131072, 36)
28print(f"AuxServoSetParam is: {retval}")
29time.sleep(3)
30robot.AuxServoSetAcc(3000, 3000)
31robot.AuxServoSetEmergencyStopAcc(5000, 5000)
32time.sleep(1)
33emagacc = 0.0
34emagdec = 0.0
35acc = 0.0
36dec = 0.0
37error,emagacc, emagdec = robot.AuxServoGetEmergencyStopAcc()
38print(f"emergency acc is {emagacc}  dec is {emagdec}")
39error,acc, dec = robot.AuxServoGetAcc()
40print(f"acc is {acc}  dec is {dec}")
41robot.AuxServoSetControlMode(1, 0)
42time.sleep(2)
43retval = robot.AuxServoEnable(1, 0)
44print(f"AuxServoEnable disenable {retval}")
45time.sleep(1)
46servoErrCode = 0
47servoState = 0
48servoPos = 0.0
49servoSpeed = 0.0
50servoTorque = 0.0
51retval, servoErrCode, servoState, servoPos, servoSpeed, servoTorque = robot.AuxServoGetStatus(1)
52print(f"AuxServoGetStatus servoState {servoState}")
53time.sleep(1)
54retval = robot.AuxServoEnable(1, 1)
55print(f"AuxServoEnable enable {retval}")
56time.sleep(1)
57retval, servoErrCode, servoState, servoPos, servoSpeed, servoTorque = robot.AuxServoGetStatus(1)
58print(f"AuxServoGetStatus servoState {servoState}")
59time.sleep(1)
60retval = robot.AuxServoHoming(1, 1, 5, 1,100)
61print(f"AuxServoHoming {retval}")
62time.sleep(3)
63retval = robot.AuxServoSetTargetPos(1, 200, 30,100)
64print(f"AuxServoSetTargetPos {retval}")
65time.sleep(1)
66retval, servoErrCode, servoState, servoPos, servoSpeed, servoTorque = robot.AuxServoGetStatus(1)
67print(f"AuxServoGetStatus servoSpeed {servoSpeed}")
68time.sleep(8)
69robot.AuxServoSetControlMode(1, 1)
70time.sleep(2)
71robot.AuxServoEnable(1, 0)
72time.sleep(1)
73robot.AuxServoEnable(1, 1)
74time.sleep(1)
75robot.AuxServoSetTargetSpeed(1, 100, 80)
76time.sleep(5)
77robot.AuxServoSetTargetSpeed(1, 0, 80)
78robot.CloseRPC()

13.17. Konfiguracja parametrów komunikacji UDP dla osi rozszerzenia

Nowe w wersji python: SDK-v2.1.2

Prototyp

ExtDevSetUDPComParam(ip, port, period, lossPkgTime, lossPkgNum, disconnectTime, reconnectEnable, reconnectPeriod, reconnectNum, selfConnect)

Opis

Konfiguracja parametrów komunikacji UDP dla osi rozszerzenia

Parametry wymagane

  • ip: Adres IP PLC;

  • port: Numer portu;

  • period: Okres komunikacji (ms, tymczasowo niedostępne);

  • lossPkgTime: Czas wykrywania utraty pakietów (ms);

  • lossPkgNum: Liczba utraconych pakietów;

  • disconnectTime: Czas potwierdzenia przerwania komunikacji;

  • reconnectEnable: Włączenie automatycznego ponownego łączenia po przerwaniu komunikacji 0-niewłączone 1-włączone;

  • reconnectPeriod: Odstęp czasu ponownego łączenia (ms);

  • reconnectNum: Liczba ponownych łączeń

  • selfConnect: Czy automatycznie ustanowić połączenie po ponownym uruchomieniu zasilania; 0-nie ustanawiaj połączenia; 1-ustanów połączenie

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.18. Pobieranie parametrów komunikacji UDP dla osi rozszerzenia

Nowe w wersji python: SDK-v2.0.4

Prototyp

ExtDevGetUDPComParam()

Opis

Pobieranie parametrów komunikacji UDP dla osi rozszerzenia

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode;

  • ip: Adres IP PLC;

  • port: Numer portu;

  • period: Okres komunikacji (ms, tymczasowo niedostępne);

  • lossPkgTime: Czas wykrywania utraty pakietów (ms);

  • lossPkgNum: Liczba utraconych pakietów;

  • disconnectTime: Czas potwierdzenia przerwania komunikacji;

  • reconnectEnable: Włączenie automatycznego ponownego łączenia po przerwaniu komunikacji 0-niewłączone 1-włączone;

  • reconnectPeriod: Odstęp czasu ponownego łączenia (ms);

  • reconnectNum: Liczba ponownych łączeń

  • selfConnect: Czy automatycznie ponownie połączyć po ponownym uruchomieniu skrzynki kontrolnej; 0-nie łącz ponownie; 1-łącz ponownie

13.19. Ładowanie komunikacji UDP

Nowe w wersji python: SDK-v2.0.4

Prototyp

ExtDevLoadUDPDriver()

Opis

Ładowanie komunikacji UDP

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.20. Rozładowanie komunikacji UDP

Nowe w wersji python: SDK-v2.0.4

Prototyp

ExtDevUnloadUDPDriver()

Opis

Rozładowanie komunikacji UDP

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.21. Przywracanie połączenia po nieprawidłowym przerwaniu komunikacji UDP osi rozszerzenia

Nowe w wersji python: SDK-v2.0.4

Prototyp

ExtDevUDPClientComReset()

Opis

Przywracanie połączenia po nieprawidłowym przerwaniu komunikacji UDP osi rozszerzenia

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.22. Zamykanie komunikacji po nieprawidłowym przerwaniu komunikacji UDP osi rozszerzenia

Nowe w wersji python: SDK-v2.0.4

Prototyp

ExtDevUDPClientComClose()

Opis

Zamykanie komunikacji po nieprawidłowym przerwaniu komunikacji UDP osi rozszerzenia

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.23. Konfiguracja parametrów UDP osi rozszerzenia

Nowe w wersji python: SDK-v2.0.4

Prototyp

ExtAxisParamConfig(axisId, axisType, axisDirection, axisMax, axisMin, axisVel, axisAcc,axisLead, encResolution, axisOffect, axisCompany, axisModel, axisEncType)

Opis

Konfiguracja parametrów UDP osi rozszerzenia

Parametry wymagane

  • axisId: Numer osi [1-4];

  • axisType: Typ osi rozszerzenia 0-przesuwna; 1-obrotowa;

  • axisDirection: Kierunek osi rozszerzenia 0-dodatni; 1-ujemny;

  • axisMax: Maksymalna pozycja osi rozszerzenia mm;

  • axisMin: Minimalna pozycja osi rozszerzenia mm;

  • axisVel: Prędkość mm/s;

  • axisAcc: Przyspieszenie mm/s2;

  • axisLead: Skok śruby mm;

  • encResolution: Rozdzielczość enkodera;

  • axisOffect: Przesunięcie osi rozszerzenia punktu początkowego spoiny;

  • axisCompany: Producent serwonapędu 1-Hechuan; 2-Inovance; 3-Panasonic;

  • axisModel: Model serwonapędu 1-Hechuan-SV-XD3EA040L-E, 2-Hechuan-SV-X2EA150A-A, 1-Inovance-SV620PT5R4I, 1-Panasonic-MADLN15SG, 2-Panasonic-MSDLN25SG, 3-Panasonic-MCDLN35SG;

  • axisEncType: Typ enkodera 0-inkrementacyjny; 1-absolutny;

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.24. Pobieranie parametrów UDP osi rozszerzenia

Prototyp

ExtAxisGetParamConfig(self, axisID)

Opis

Pobieranie parametrów UDP osi rozszerzenia

Parametry wymagane

  • axisID: Numer osi rozszerzenia [1-4]

  • axisType: Typ osi rozszerzenia 0-przesuwna; 1-obrotowa

  • axisDirection: Kierunek osi rozszerzenia 0-dodatni; 1-ujemny

  • axisMax: Maksymalna pozycja osi rozszerzenia mm

  • axisMin: Minimalna pozycja osi rozszerzenia mm

  • axisVel: Prędkość mm/s

  • axisAcc: Przyspieszenie mm/s2

  • axisLead: Skok śruby mm

  • encResolution: Rozdzielczość enkodera

  • axisOffect: Przesunięcie osi rozszerzenia punktu początkowego spoiny

  • axisCompany: Producent serwonapędu 1-Hechuan; 2-Inovance; 3-Panasonic

  • axisModel: Model serwonapędu 1-Hechuan-SV-XD3EA040L-E, 2-Hechuan-SV-X2EA150A-A, 1-Inovance-SV620PT5R4I, 1-Panasonic-MADLN15SG, 2-Panasonic-MSDLN25SG, 3-Panasonic-MCDLN35SG

  • axisEncType: Typ enkodera 0-inkrementacyjny; 1-absolutny

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.25. Ustawianie pozycji rozszerzonego robota względem osi rozszerzenia

Nowe w wersji python: SDK-v2.0.4

Prototyp

SetRobotPosToAxis(installType)

Opis

Ustawianie pozycji rozszerzonego robota względem osi rozszerzenia

Parametry wymagane

  • installType: 0-robot zamontowany na osi zewnętrznej, 1-robot zamontowany poza osią zewnętrzną;

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.26. Ustawianie konfiguracji parametrów DH układu osi rozszerzenia

Nowe w wersji python: SDK-v2.0.4

Prototyp

SetAxisDHParaConfig(axisConfig,axisDHd1,axisDHd2,axisDHd3,axisDHd4,axisDHa1, axisDHa2,axisDHa3,axisDHa4)

Opis

Ustawianie konfiguracji parametrów DH układu osi rozszerzenia

Parametry wymagane

  • axisConfig: Konfiguracja osi zewnętrznej, 0-prosta prowadnica liniowa z jednym stopniem swobody, 1-pozycjoner L z dwoma stopniami swobody, 2-trzech stopni swobody, 3-czterech stopni swobody, 4-pozycjoner z jednym stopniem swobody;

  • axisDHd1: Parametr DH osi zewnętrznej d1 mm;

  • axisDHd2: Parametr DH osi zewnętrznej d2 mm;

  • axisDHd3: Parametr DH osi zewnętrznej d3 mm;

  • axisDHd4: Parametr DH osi zewnętrznej d4 mm;

  • axisDHa1: Parametr DH osi zewnętrznej a1 mm;

  • axisDHa2: Parametr DH osi zewnętrznej a2 mm;

  • axisDHa3: Parametr DH osi zewnętrznej a3 mm;

  • axisDHa4: Parametr DH osi zewnętrznej a4 mm;

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.27. Włączanie UDP osi rozszerzenia

Nowe w wersji python: SDK-v2.0.4

Prototyp

ExtAxisServoOn(axisID, status)

Opis

Włączanie UDP osi rozszerzenia

Parametry wymagane

  • axisID: Numer osi [1-4];

  • status: 0-wyłącz; 1-włącz;

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.28. Powrót do zera UDP osi rozszerzenia

Nowe w wersji python: SDK-v2.0.4

Prototyp

ExtAxisSetHoming(axisID, mode, searchVel, latchVel)

Opis

Powrót do zera UDP osi rozszerzenia

Parametry wymagane

  • axisID: Numer osi [1-4];

  • mode: Sposób powrotu do zera 0-powrót do zera w bieżącej pozycji, 1-powrót do zera z ograniczeniem ujemnym, 2-powrót do zera z ograniczeniem dodatnim;

  • searchVel: Prędkość poszukiwania zera (mm/s);

  • latchVel: Prędkość zatrzasku poszukiwania zera (mm/s);

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.29. Rozpoczęcie punktowego ruchu UDP osi rozszerzenia

Nowe w wersji python: SDK-v2.0.4

Prototyp

ExtAxisStartJog( axisID, direction, vel, acc, maxDistance)

Opis

Rozpoczęcie punktowego ruchu UDP osi rozszerzenia

Parametry wymagane

  • axisID: Numer osi [1-4];

  • direction: Kierunek obrotu 0-ujemny; 1-dodatni;

  • vel: Prędkość (mm/s);

  • acc: Przyspieszenie (mm/s);

  • maxDistance: Maksymalna odległość punktowego ruchu;

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.30. Zatrzymanie punktowego ruchu UDP osi rozszerzenia

Nowe w wersji python: SDK-v2.0.4

Prototyp

ExtAxisStopJog(axisID)

Opis

Zatrzymanie punktowego ruchu UDP osi rozszerzenia

Parametry wymagane

  • axisID: Numer osi [1-4];

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.31. Przykład kodu konfiguracji i punktowego ruchu UDP osi rozszerzenia

 1from fairino import Robot
 2from fairino.Robot import RobotState
 3import time
 4
 5def main():
 6    # Dodanie potrzebnych danych stanu w czasie rzeczywistym (jeśli potrzebne)
 7    # rtn = AddRobotRealtimeState([RobotState.ExaxisCoordID])
 8    # if rtn != 0:
 9    #     print(f"✗ Dodanie pola nie powiodło się, kod błędu: {rtn}")
10    #     return None
11    # print("✓ Pole dodane pomyślnie")
12
13    # Połączenie z kontrolerem robota
14    robot = Robot.RPC('192.168.58.2')
15    time.sleep(0.5)  # Oczekiwanie na połączenie i odbiór danych
16
17    # Konfiguracja parametrów komunikacji UDP
18    rtn = robot.ExtDevSetUDPComParam("192.168.58.88", 2021, 2, 100, 3, 200, 1, 100, 5, 1)
19    print(f"ExtDevSetUDPComParam rtn is {rtn}")
20
21    # Pobranie parametrów komunikacji UDP
22    error, param = robot.ExtDevGetUDPComParam()
23    print("ExtDevGetUDPComParam return ", error)
24    print("Parametry komunikacji UDP osi rozszerzenia: ", param)
25
26    # Ładowanie sterownika UDP
27    robot.ExtDevLoadUDPDriver()
28
29    # Ustawienie czasu zakończenia polecenia osi rozszerzenia
30    rtn = robot.SetExAxisCmdDoneTime(5000.0)
31    print(f"SetExAxisCmdDoneTime rtn is {rtn}")
32
33    # Włączenie serwonapędu osi rozszerzenia
34    rtn = robot.ExtAxisServoOn(1, 1)
35    print(f"ExtAxisServoOn axis id 1 rtn is {rtn}")
36    rtn = robot.ExtAxisServoOn(2, 1)
37    print(f"ExtAxisServoOn axis id 2 rtn is {rtn}")
38    time.sleep(2)
39
40    # Powrót do zera osi rozszerzenia
41    robot.ExtAxisSetHoming(1, 0, 10, 2)
42    time.sleep(2)
43    rtn = robot.ExtAxisSetHoming(2, 0, 10, 2)
44    print(f"ExtAxisSetHoming rtn is {rtn}")
45
46    time.sleep(4)
47
48    # Ustawienie pozycji robota względem osi rozszerzenia
49    rtn = robot.SetRobotPosToAxis(1)
50    print(f"SetRobotPosToAxis rtn is {rtn}")
51
52    # Ustawienie konfiguracji parametrów DH osi rozszerzenia
53    rtn = robot.SetAxisDHParaConfig(10, 20, 0, 0, 0, 0, 0, 0, 0)
54    print(f"SetAxisDHParaConfig rtn is {rtn}")
55
56    # Konfiguracja parametrów osi rozszerzenia 1
57    rtn = robot.ExtAxisParamConfig(1, 1, 1, 1000, -1000, 1000, 1000, 1.905, 262144, 200, 1, 0, 0)
58    print(f"ExtAxisParamConfig axis 1 rtn is {rtn}")
59
60    # Pobranie konfiguracji parametrów osi rozszerzenia 1
61    rtn, axisType, axisDirection, axisMax, axisMin, axisVel, axisAcc, axisLead, encResolution, axisOffect, axisCompany, axisModel, axisEncType = robot.ExtAxisGetParamConfig(1)
62    print(f"axis id 1 ExtAxisGetParamConfig : axisType {axisType}, axisDirection {axisDirection}, axisMax {axisMax}, axisMin {axisMin}, axisVel {axisVel}, axisAcc {axisAcc}, axisLead {axisLead}, encResolution {encResolution}, axisOffect {axisOffect}, axisCompany {axisCompany}, axisModel {axisModel}, axisEncType {axisEncType}")
63
64    # Konfiguracja parametrów osi rozszerzenia 2
65    rtn = robot.ExtAxisParamConfig(2, 1, 1, 1000, -1000, 1000, 1000, 4.444, 262144, 200, 1, 0, 0)
66    print(f"ExtAxisParamConfig axis 2 rtn is {rtn}")
67
68    # Pobranie konfiguracji parametrów osi rozszerzenia 2
69    rtn, axisType, axisDirection, axisMax, axisMin, axisVel, axisAcc, axisLead, encResolution, axisOffect, axisCompany, axisModel, axisEncType = robot.ExtAxisGetParamConfig(2)
70    print(f"axis id 2 ExtAxisGetParamConfig : axisType {axisType}, axisDirection {axisDirection}, axisMax {axisMax}, axisMin {axisMin}, axisVel {axisVel}, axisAcc {axisAcc}, axisLead {axisLead}, encResolution {encResolution}, axisOffect {axisOffect}, axisCompany {axisCompany}, axisModel {axisModel}, axisEncType {axisEncType}")
71
72    time.sleep(3)
73
74    # Test punktowego ruchu osi rozszerzenia 1
75    robot.ExtAxisStartJog(1, 0, 10, 10, 30)
76    time.sleep(1)
77    robot.ExtAxisStopJog(1)
78    time.sleep(3)
79    robot.ExtAxisServoOn(1, 0)
80
81    time.sleep(3)
82
83    # Test punktowego ruchu osi rozszerzenia 2
84    robot.ExtAxisStartJog(2, 0, 10, 10, 30)
85    time.sleep(1)
86    robot.ExtAxisStopJog(2)
87    time.sleep(3)
88    robot.ExtAxisServoOn(2, 0)
89
90    # Rozładowanie sterownika UDP
91    robot.ExtDevUnloadUDPDriver()
92
93    # Zamknięcie połączenia
94    robot.CloseRPC()
95
96
97# Wywołanie funkcji testowej
98main()

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

Nowe w wersji python: SDK-v2.0.4

Prototyp

ExtAxisSetRefPoint(pointNum)

Opis

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

Parametry wymagane

  • pointNum: Numer punktu [1-4];

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

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

Nowe w wersji python: SDK-v2.0.4

Prototyp

ExtAxisComputeECoordSys()

Opis

Obliczanie układu współrzędnych osi rozszerzenia - metoda czterech punktów

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode;

  • coord: Wartość układu współrzędnych osi rozszerzenia [x,y,z,rx,ry,rz];

13.34. Ustawianie punktu odniesienia układu współrzędnych pozycjonera - metoda czterech punktów

Nowe w wersji python: SDK-v2.0.4

Prototyp

PositionorSetRefPoint(pointNum)

Opis

Ustawianie punktu odniesienia układu współrzędnych pozycjonera - metoda czterech punktów

Parametry wymagane

  • pointNum: Numer punktu [1-4];

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

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

Nowe w wersji python: SDK-v2.0.4

Prototyp

PositionorComputeECoordSys()

Opis

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

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode;

  • coord: Wartość układu współrzędnych pozycjonera [x,y,z,rx,ry,rz];

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

Nowe w wersji python: SDK-v2.0.4

Prototyp

SetRefPointInExAxisEnd(pos)

Opis

Ustawianie pozy punktu kalibracji w układzie współrzędnych końcówki pozycjonera

Parametry wymagane

  • pos: Wartość pozy [x,y,z,rx,ry,rz];

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

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

Nowe w wersji python: SDK-v2.0.4

Prototyp

ExtAxisActiveECoordSys(applyAxisId,axisCoordNum,coord,calibFlag)

Opis

Stosowanie układu współrzędnych osi rozszerzenia

Parametry wymagane

  • applyAxisId: Numer osi rozszerzenia bit0-bit3 odpowiada numerom osi rozszerzenia 1-4, np. zastosowanie osi rozszerzenia 1 i 3, to 0b 0000 0101, czyli 5;

  • axisCoordNum: Numer układu współrzędnych osi rozszerzenia;

  • coord: Wartość układu współrzędnych [x,y,z,rx,ry,rz];

  • calibFlag: Flaga kalibracji 0-nie, 1-tak;

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

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

Nowe w wersji python: SDK-v2.1.2

Prototyp

ExtAxisGetCoord()

Opis

Pobieranie układu współrzędnych osi rozszerzenia

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • coord: Układ współrzędnych osi rozszerzenia

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

 1from fairino import Robot
 2import time
 3import threading
 4# Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota
 5robot = Robot.RPC('192.168.58.2')
 6rtn = robot.ExtDevSetUDPComParam("192.168.58.88", 2021, 2, 100, 3, 200, 1, 100, 5, 1)
 7print(f"ExtDevSetUDPComParam rtn is {rtn}")
 8rtn,udp_params = robot.ExtDevGetUDPComParam()
 9ip, port, period, lossPkgTime, lossPkgNum, disconnectTime, reconnectEnable, reconnectPeriod, reconnectNum = udp_params
10patam = (
11    f"\nip {ip}\nport {port}\nperiod {period}\nlossPkgTime {lossPkgTime}\n"
12    f"lossPkgNum {lossPkgNum}\ndisConntime {disconnectTime}\nreconnecable {reconnectEnable}\n"
13    f"reconnperiod {reconnectPeriod}\nreconnnun {reconnectNum}"
14)
15print(f"ExtDevGetUDPComParam rtn is {rtn}{patam}")
16robot.ExtDevLoadUDPDriver()
17rtn = robot.ExtAxisServoOn(1, 1)
18print(f"ExtAxisServoOn axis id 1 rtn is {rtn}")
19rtn = robot.ExtAxisServoOn(2, 1)
20print(f"ExtAxisServoOn axis id 2 rtn is {rtn}")
21time.sleep(2)
22robot.ExtAxisSetHoming(1, 0, 10, 2)
23time.sleep(2)
24rtn = robot.ExtAxisSetHoming(2, 0, 10, 2)
25print(f"ExtAxisSetHoming rtn is {rtn}")
26time.sleep(4)
27rtn = robot.SetRobotPosToAxis(1)
28print(f"SetRobotPosToAxis rtn is {rtn}")
29rtn = robot.SetAxisDHParaConfig(1, 128.5, 206.4, 0, 0, 0, 0, 0, 0)
30print(f"SetAxisDHParaConfig rtn is {rtn}")
31rtn = robot.ExtAxisParamConfig(1, 1, 1, 1000, -1000, 1000, 1000, 1.905, 262144, 200, 1, 0, 0)
32print(f"ExtAxisParamConfig axis 1 rtn is {rtn}")
33rtn = robot.ExtAxisParamConfig(2, 1, 1, 1000, -1000, 1000, 1000, 4.444, 262144, 200, 1, 0, 0)
34print(f"ExtAxisParamConfig axis 2 rtn is {rtn}")
35toolCoord = [0, 0, 210, 0, 0, 0]
36robot.SetToolCoord(1, toolCoord, 0, 0, 1, 0)
37jSafe = [115.193, -96.149, 92.489, -87.068, -89.15, -83.488]
38j1 = [117.559, -92.624, 100.329, -96.909, -94.057, -83.488]
39j2 = [112.239, -90.096, 99.282, -95.909, -89.824, -83.488]
40j3 = [110.839, -83.473, 93.166, -89.22, -90.499, -83.487]
41j4 = [107.935, -83.572, 95.424, -92.873, -87.933, -83.488]
42descSafe = [0.0,0.0,0.0,0.0,0.0,0.0]
43desc1 = [0.0,0.0,0.0,0.0,0.0,0.0]
44desc2 = [0.0,0.0,0.0,0.0,0.0,0.0]
45desc3 = [0.0,0.0,0.0,0.0,0.0,0.0]
46desc4 = [0.0,0.0,0.0,0.0,0.0,0.0]
47exaxisPos = [0.0,0.0,0.0,0.0]
48offdese = [0.0,0.0,0.0,0.0,0.0,0.0]
49error, descSafe = robot.GetForwardKin(jSafe)
50robot.MoveJ(joint_pos=jSafe,tool= 1,user= 0,vel= 100)
51time.sleep(2)
52error, desc1 = robot.GetForwardKin(j1)
53robot.MoveJ(joint_pos=j1,tool= 1,user= 0,vel= 100)
54time.sleep(2)
55actualTCPPos = [0.0,0.0,0.0,0.0,0.0,0.0]
56error, actualTCPPos = robot.GetActualTCPPose(0)
57robot.SetRefPointInExAxisEnd(actualTCPPos)
58rtn = robot.PositionorSetRefPoint(1)
59print(f"PositionorSetRefPoint 1 rtn is {rtn}")
60time.sleep(2)
61robot.MoveJ(joint_pos=jSafe,tool= 1,user= 0,vel= 100)
62robot.ExtAxisStartJog(1, 0, 50, 50, 10)
63time.sleep(1)
64robot.ExtAxisStartJog(2, 0, 50, 50, 10)
65time.sleep(1)
66error, desc2 = robot.GetForwardKin(j2)
67rtn = robot.MoveJ(joint_pos=j2,tool= 1,user= 0,vel= 100)
68rtn = robot.PositionorSetRefPoint(2)
69print(f"PositionorSetRefPoint 2 rtn is {rtn}")
70time.sleep(2)
71robot.MoveJ(joint_pos=jSafe,tool= 1,user= 0,vel= 100)
72robot.ExtAxisStartJog(1, 0, 50, 50, 10)
73time.sleep(1)
74robot.ExtAxisStartJog(2, 0, 50, 50, 10)
75time.sleep(1)
76error, desc3 = robot.GetForwardKin(j3)
77robot.MoveJ(joint_pos=j3,tool= 1,user= 0,vel= 100)
78rtn = robot.PositionorSetRefPoint(3)
79print(f"PositionorSetRefPoint 3 rtn is {rtn}")
80time.sleep(2)
81robot.MoveJ(joint_pos=jSafe,tool= 1,user= 0,vel= 100)
82robot.ExtAxisStartJog(1, 0, 50, 50, 10)
83time.sleep(1)
84robot.ExtAxisStartJog(2, 0, 50, 50, 10)
85time.sleep(1)
86error, desc4 = robot.GetForwardKin(j4)
87robot.MoveJ(joint_pos=j4,tool= 1,user= 0,vel= 100)
88rtn = robot.PositionorSetRefPoint(4)
89print(f"PositionorSetRefPoint 4 rtn is {rtn}")
90time.sleep(2)
91axisCoord = [0.0,0.0,0.0,0.0,0.0,0.0]
92error,axisCoord = robot.PositionorComputeECoordSys()
93robot.MoveJ(joint_pos=jSafe,tool= 1,user= 0,vel= 100)
94print(f"PositionorComputeECoordSys rtn is {axisCoord[0]} {axisCoord[1]} {axisCoord[2]} {axisCoord[3]} {axisCoord[4]} {axisCoord[5]}")
95rtn = robot.ExtAxisActiveECoordSys(3, 1, axisCoord, 1)
96print(f"ExtAxisActiveECoordSys rtn is {rtn}")
97robot.CloseRPC()

13.40. Ruch UDP osi rozszerzenia

Nowe w wersji python: SDK-v2.1.4

Prototyp

ExtAxisMove(pos,ovl,blend=-1)

Opis

Ruch UDP osi rozszerzenia

Parametry wymagane

  • pos=[exaxis[0],exaxis[1],exaxis[2],exaxis[3]]: Pozycja docelowa pozycja osi 1 ~ pozycja osi 4;

  • ovl: Procent prędkości

Parametry domyślne

  • blend: Parametr wygładzania (mm lub ms), -1, oczekiwanie na zakończenie ruchu, domyślnie -1

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.41. Przykład kodu ruchu UDP osi rozszerzenia

1from fairino import Robot
2import time
3# Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota
4robot = Robot.RPC('192.168.58.2')
5axisPos = [20,0,0,0]
6robot.ExtAxisMove(axisPos, 50, -1)
7robot.CloseRPC()
8return 0

13.42. Ruch synchroniczny UDP osi rozszerzenia z ruchem przegubowym robota

Nowe w wersji python: SDK-v2.0.4

Prototyp

ExtAxisSyncMoveJ(joint_pos,tool,user,exaxis_pos, desc_pos=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], vel=20.0, acc=0.0, ovl= 100.0,  blendT=-1.0, offset_flag=0, offset_pos=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0])

Opis

Ruch synchroniczny UDP osi rozszerzenia z ruchem przegubowym robota

Parametry wymagane

  • joint_pos: Docelowa pozycja przegubów, jednostka [°];

  • desc_pos: Docelowa poza kartezjańska, jednostka [mm][°]

  • tool: Numer narzędzia, [0~14]

  • user: Numer przedmiotu, [0~14]

  • exaxis_pos: Pozycja osi zewnętrznej 1 ~ pozycja osi zewnętrznej 4

Parametry domyślne

  • desc_pos: Docelowa poza kartezjańska, jednostka [mm][°] domyślnie [0.0,0.0,0.0,0.0,0.0,0.0], wartość domyślna wywołuje wartość zwracaną z rozwiązania kinematyki prostej;

  • vel: Procent prędkości, [0~100] domyślnie 20.0;

  • acc: Procent przyspieszenia, [0~100] tymczasowo niedostępne, domyślnie 0.0;

  • ovl: Współczynnik skalowania prędkości, [0~100] domyślnie 100.0;

  • blendT: [-1.0]-ruch do pozycji (blokujący), [0~500.0]-czas wygładzania (nieblokujący), jednostka [ms] domyślnie -1.0;

  • offset_flag: [0]-brak przesunięcia, [1]-przesunięcie w układzie przedmiotu/bazowym, [2]-przesunięcie w układzie narzędzia domyślnie 0;

  • offset_pos: Wartość przesunięcia pozy, jednostka [mm][°] domyślnie [0.0,0.0,0.0,0.0,0.0,0.0];

Wartość zwracana

Kod błędu sukces-0 błąd- errcode;

13.43. Przykład kodu ruchu synchronicznego UDP osi rozszerzenia z ruchem przegubowym robota

 1from fairino import Robot
 2# Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota
 3robot = Robot.RPC('192.168.58.2')
 4# Ustawienie parametrów komunikacji UDP i załadowanie
 5robot.ExtDevSetUDPComParam("192.168.58.88", 2021, 2, 100, 3, 100, 1, 100, 10)
 6robot.ExtDevLoadUDPDriver()
 7# Ustawienie parametrów osi rozszerzenia
 8robot.SetAxisDHParaConfig(4, 200, 200, 0, 0, 0, 0, 0, 0)
 9robot.SetRobotPosToAxis(1)
10robot.ExtAxisParamConfig(1, 0, 1, 100, -100, 10, 10, 12, 131072, 0, 1, 0, 0)
11# Włączenie i powrót do zera osi rozszerzenia
12robot.ExtAxisServoOn(1, 0)
13robot.ExtAxisSetHoming(1, 0, 20, 3)
14# Kalibracja układu współrzędnych osi rozszerzenia
15pos = []  # Proszę wpisać współrzędne punktu kalibracyjnego
16robot.SetRefPointInExAxisEnd(pos)
17robot.PositionorSetRefPoint(1)  # Tę operację należy powtórzyć 4 razy (używając 4 punktów)
18error,coord = robot.PositionorComputeECoordSys()
19robot.ExtAxisActiveECoordSys(1, 1, coord, 1)
20# Punkt początkowy i końcowy ruchu synchronicznego
21startdescPose = []  # Proszę wpisać konkretne współrzędne
22startjointPos = []  # Proszę wpisać konkretne współrzędne
23startexaxisPos = []  # Proszę wpisać konkretne współrzędne
24enddescPose = []  # Proszę wpisać konkretne współrzędne
25endjointPos = []  # Proszę wpisać konkretne współrzędne
26endexaxisPos = []  # Proszę wpisać konkretne współrzędne
27# Ruch do punktu początkowego
28robot.ExtAxisMove(startexaxisPos, 20, -1)
29offdese = [0, 0, 0, 0, 0, 0]
30robot.MoveJ(joint_pos=startjointPos,tool= 1,user= 1,vel= 100,acc= 100,ovl= 100,exaxis_pos= startexaxisPos,blendT= 0,offset_flag= 0,offset_pos= offdese)
31robot.ExtAxisSyncMoveJ(endjointPos, enddescPose, 1, 1, endexaxisPos, 100, 100, 100, -1, 0, offdese)
32robot.CloseRPC()

13.44. Ruch synchroniczny UDP osi rozszerzenia z ruchem liniowym robota

Nowe w wersji python: SDK-v2.1.5

Prototyp

ExtAxisSyncMoveL(desc_pos, tool, user, exaxis_pos, joint_pos=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], vel=20.0, acc=0.0, ovl=100.0, blendR=-1.0, search=0, offset_flag=0, offset_pos=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0],config=-1)

Opis

Ruch synchroniczny UDP osi rozszerzenia z ruchem liniowym robota

Parametry wymagane

  • desc_pos: Docelowa poza kartezjańska, jednostka [mm][°];

  • tool: Numer narzędzia, [0~14];

  • user: Numer przedmiotu, [0~14];

  • exaxis_pos: Pozycja osi zewnętrznej 1 ~ pozycja osi zewnętrznej 4;

Parametry domyślne

  • joint_pos: Docelowa pozycja przegubów, jednostka [°] domyślnie [0.0,0.0,0.0,0.0,0.0,0.0], wartość domyślna wywołuje wartość zwracaną z rozwiązania kinematyki odwrotnej;

  • vel: Procent prędkości, [0~100] domyślnie 20.0;

  • acc: Procent przyspieszenia, [0~100] tymczasowo niedostępne, domyślnie 0.0;

  • ovl: Współczynnik skalowania prędkości, [0~100] domyślnie 100.0;

  • blendR: [-1.0]-ruch do pozycji (blokujący), [0~500.0]-czas wygładzania (nieblokujący), jednostka [ms] domyślnie -1.0;

  • search: [0]-brak poszukiwania pozycji drutu, [1]-poszukiwanie pozycji drutu;

  • offset_flag: [0]-brak przesunięcia, [1]-przesunięcie w układzie przedmiotu/bazowym, [2]-przesunięcie w układzie narzędzia domyślnie 0;

  • offset_pos: Wartość przesunięcia pozy, jednostka [mm][°] domyślnie [0.0,0.0,0.0,0.0,0.0,0.0];

  • config: Konfiguracja przestrzeni przegubów dla kinematyki odwrotnej, [-1]-obliczenia względem bieżącej pozycji przegubów, [0~7]-obliczenia według określonej konfiguracji przestrzeni przegubów, domyślnie -1

Wartość zwracana

Kod błędu sukces-0 błąd- errcode;

13.45. Przykład kodu ruchu synchronicznego UDP osi rozszerzenia z ruchem liniowym robota

 1from fairino import Robot
 2# Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota
 3robot = Robot.RPC('192.168.58.2')
 4# Ustawienie parametrów komunikacji UDP i załadowanie
 5robot.ExtDevSetUDPComParam("192.168.58.88", 2021, 2, 100, 3, 100, 1, 100, 10)
 6robot.ExtDevLoadUDPDriver()
 7# Ustawienie parametrów osi rozszerzenia
 8robot.SetAxisDHParaConfig(4, 200, 200, 0, 0, 0, 0, 0, 0)
 9robot.SetRobotPosToAxis(1)
10robot.ExtAxisParamConfig(1, 0, 1, 100, -100, 10, 10, 12, 131072, 0, 1, 0, 0)
11# Włączenie i powrót do zera osi rozszerzenia
12robot.ExtAxisServoOn(1, 0)
13robot.ExtAxisSetHoming(1, 0, 20, 3)
14# Kalibracja układu współrzędnych osi rozszerzenia
15pos = []  # Proszę wpisać współrzędne punktu kalibracyjnego
16robot.SetRefPointInExAxisEnd(pos)
17robot.PositionorSetRefPoint(1)  # Należy wywołać 4 razy w celu kalibracji
18error,coord = robot.PositionorComputeECoordSys()
19robot.ExtAxisActiveECoordSys(1, 1, coord, 1)
20# Punkt początkowy i końcowy ruchu synchronicznego
21startdescPose = []  # Proszę wpisać współrzędne
22startjointPos = []  # Proszę wpisać współrzędne
23startexaxisPos = []  # Proszę wpisać współrzędne
24enddescPose = []  # Proszę wpisać współrzędne
25endjointPos = []  # Proszę wpisać współrzędne
26endexaxisPos = []  # Proszę wpisać współrzędne
27# Ruch do punktu początkowego
28robot.ExtAxisMove(startexaxisPos, 20, -1)
29offdese = [0, 0, 0, 0, 0, 0]
30robot.MoveJ(joint_pos=startjointPos, tool= 1,user= 1,vel= 100,acc= 100,ovl= 100,exaxis_pos= startexaxisPos,blendT= 0)
31# Wykonanie synchronicznego ruchu liniowego
32robot.ExtAxisSyncMoveL(endjointPos, enddescPose, 1, 1, endexaxisPos, 100, 100, 100, 0, 0, offdese)
33robot.CloseRPC()

13.46. Ruch synchroniczny UDP osi rozszerzenia z ruchem po łuku robota

Nowe w wersji python: SDK-v2.1.5

Prototyp

ExtAxisSyncMoveC(desc_pos_p, tool_p, user_p,exaxis_pos_p, desc_pos_t, tool_t, user_t,exaxis_pos_t,joint_pos_p=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], joint_pos_t=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0],vel_p=20.0, acc_p=100.0, offset_flag_p=0, offset_pos_p =[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], vel_t=20.0, acc_t=100.0, offset_flag_t=0, offset_pos_t=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0], ovl=100.0, blendR=-1.0, config=-1)

Opis

Ruch synchroniczny UDP osi rozszerzenia z ruchem po łuku robota

Parametry wymagane

  • desc_pos_p: Pozycja kartezjańska punktu pośredniego, jednostka [mm][°];

  • tool_p: Numer narzędzia punktu pośredniego, [0~14];

  • user_p: Numer przedmiotu punktu pośredniego, [0~14];

  • exaxis_pos_p: Pozycja osi zewnętrznej 1 ~ pozycja osi zewnętrznej 4 punktu pośredniego domyślnie [0.0,0.0,0.0,0.0];

  • desc_pos_t: Docelowa poza kartezjańska punktu docelowego, jednostka [mm][°];

  • tool_t: Numer narzędzia, [0~14];

  • user_t: Numer przedmiotu, [0~14];

  • exaxis_pos_t: Pozycja osi zewnętrznej 1 ~ pozycja osi zewnętrznej 4 punktu docelowego domyślnie [0.0,0.0,0.0,0.0];

Parametry domyślne

  • joint_pos_p: Docelowa pozycja przegubów, jednostka [°] domyślnie [0.0,0.0,0.0,0.0,0.0,0.0], wartość domyślna wywołuje wartość zwracaną z rozwiązania kinematyki odwrotnej;

  • joint_pos_t: Docelowa pozycja przegubów, jednostka [°] domyślnie [0.0,0.0,0.0,0.0,0.0,0.0], wartość domyślna wywołuje wartość zwracaną z rozwiązania kinematyki odwrotnej;

  • vel_p: Procent prędkości punktu pośredniego, [0~100] domyślnie 20.0;

  • acc_p: Procent przyspieszenia punktu pośredniego, [0~100] tymczasowo niedostępne, domyślnie 0.0;

  • offset_flag_p: Czy przesunięcie punktu pośredniego [0]-brak przesunięcia, [1]-przesunięcie w układzie przedmiotu/bazowym, [2]-przesunięcie w układzie narzędzia domyślnie 0;

  • offset_pos_p: Wartość przesunięcia pozy punktu pośredniego, jednostka [mm][°] domyślnie [0.0,0.0,0.0,0.0,0.0,0.0];

  • vel_t: Procent prędkości punktu docelowego, [0~100] domyślnie 20.0;

  • acc_t: Procent przyspieszenia punktu docelowego, [0~100] tymczasowo niedostępne domyślnie 0.0;

  • offset_flag_t: Czy przesunięcie punktu docelowego [0]-brak przesunięcia, [1]-przesunięcie w układzie przedmiotu/bazowym, [2]-przesunięcie w układzie narzędzia domyślnie 0;

  • offset_pos_t: Wartość przesunięcia pozy punktu docelowego, jednostka [mm][°] domyślnie [0.0,0.0,0.0,0.0,0.0,0.0];

  • ovl: Współczynnik skalowania prędkości, [0~100] domyślnie 100.0;

  • blendR: [-1.0]-ruch do pozycji (blokujący), [0~1000]-promień wygładzania (nieblokujący), jednostka [mm] domyślnie -1.0;

  • config: Konfiguracja przestrzeni przegubów dla kinematyki odwrotnej, [-1]-obliczenia względem bieżącej pozycji przegubów, [0~7]-obliczenia według określonej konfiguracji przestrzeni przegubów, domyślnie -1

Wartość zwracana

Kod błędu sukces-0 błąd- errcode;

13.47. Przykład kodu ruchu synchronicznego UDP osi rozszerzenia z ruchem po łuku robota

 1from fairino import Robot
 2# Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota
 3robot = Robot.RPC('192.168.58.2')
 4# Ustawienie parametrów komunikacji UDP i załadowanie
 5robot.ExtDevSetUDPComParam("192.168.58.88", 2021, 2, 100, 3, 100, 1, 100, 10)
 6robot.ExtDevLoadUDPDriver()
 7# Ustawienie parametrów osi rozszerzenia
 8robot.SetAxisDHParaConfig(4, 200, 200, 0, 0, 0, 0, 0, 0)
 9robot.SetRobotPosToAxis(1)
10robot.ExtAxisParamConfig(1, 0, 1, 100, -100, 10, 10, 12, 131072, 0, 1, 0, 0)
11# Włączenie i powrót do zera osi rozszerzenia
12robot.ExtAxisServoOn(1, 0)
13robot.ExtAxisSetHoming(1, 0, 20, 3)
14# Kalibracja układu współrzędnych osi rozszerzenia
15pos = []  # Wprowadź współrzędne punktu kalibracyjnego
16robot.SetRefPointInExAxisEnd(pos)
17robot.PositionorSetRefPoint(1)  # Wywołaj 4 razy w celu wykonania kalibracji
18coord = []
19error,coord = robot.PositionorComputeECoordSys()
20robot.ExtAxisActiveECoordSys(1, 1, coord, 1)
21# Punkt początkowy, pośredni i końcowy łuku synchronicznego
22startdescPose = []# Wprowadź współrzędne
23startjointPos = []# Wprowadź współrzędne
24startexaxisPos =[]  # Wprowadź współrzędne osi rozszerzenia
25middescPose = []# Wprowadź punkt pośredni
26midjointPos = []
27midexaxisPos =[]
28enddescPose = []
29endjointPos = []
30endexaxisPos =[]
31# Ruch do punktu początkowego
32robot.ExtAxisMove(startexaxisPos, 20, -1)
33offdese = [0, 0, 0, 0, 0, 0]
34robot.MoveJ(joint_pos=startjointPos,tool= 1,user= 1,vel= 100,acc= 100,ovl= 100,exaxis_pos= startexaxisPos,blendT= 0,offset_flag= 0,offset_pos= offdese)
35# Rozpoczęcie synchronicznego ruchu po łuku
36robot.ExtAxisSyncMoveC(midjointPos,middescPose,1,1,midexaxisPos,
37                       endjointPos,enddescPose,1,1,endexaxisPos,
38                       100,100,0,offdese,
39                       100,100,0,offdese,
40                       100,0)
41robot.CloseRPC()

13.48. Ustawianie rozszerzonego DO

Nowe w wersji python: SDK-v2.0.4

Prototyp

SetAuxDO(DONum,bOpen,smooth,block)

Opis

Ustawianie rozszerzonego DO

Parametry wymagane

  • DONum: Numer DO;

  • bOpen: Przełącznik True-wł., False-wył.;

  • smooth: Czy wygładzać True - tak, False - nie;

  • block: Czy blokować True - tak, False - nie;

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.49. Ustawianie rozszerzonego AO

Nowe w wersji python: SDK-v2.0.4

Prototyp

SetAuxAO(AONum,value,block)

Opis

Ustawianie rozszerzonego AO

Parametry wymagane

  • AONum: Numer AO;

  • value: Wartość analogowa [0-4095];

  • block: Czy blokować True - tak, False - nie;

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.50. Ustawianie czasu filtracji wejścia rozszerzonego DI

Nowe w wersji python: SDK-v2.0.4

Prototyp

SetAuxDIFilterTime(filterTime)

Opis

Ustawianie czasu filtracji wejścia rozszerzonego DI

Parametry wymagane

  • filterTime: Czas filtracji (ms);

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.51. Ustawianie czasu filtracji wejścia rozszerzonego AI

Nowe w wersji python: SDK-v2.0.4

Prototyp

SetAuxAIFilterTime(AINum,filterTime)

Opis

Ustawianie czasu filtracji wejścia rozszerzonego AI

Parametry wymagane

  • AINum: Numer AI;

  • filterTime: Czas filtracji (ms);

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.52. Oczekiwanie na wejście rozszerzonego DI

Nowe w wersji python: SDK-v2.0.4

Prototyp

WaitAuxDI(DINum,bOpen,time,errorAlarm)

Opis

Oczekiwanie na wejście rozszerzonego DI

Parametry wymagane

  • DINum: Numer DI;

  • bOpen: Przełącznik True-wł., False-wył.;

  • time: Maksymalny czas oczekiwania (ms);

  • errorAlarm: Czy kontynuować ruch True-tak, False-nie

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.53. Oczekiwanie na wejście rozszerzonego AI

Nowe w wersji python: SDK-v2.0.4

Prototyp

WaitAuxAI(,AINum,sign,value,time,errorAlarm)

Opis

Oczekiwanie na wejście rozszerzonego AI

Parametry wymagane

  • AINum: Numer AI;

  • sign: 0-większe niż; 1-mniejsze niż;

  • value: Wartość AI;

  • time: Maksymalny czas oczekiwania (ms);

  • errorAlarm: Czy kontynuować ruch True-tak, False-nie

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.54. Pobieranie wartości rozszerzonego DI

Nowe w wersji python: SDK-v2.0.4

Prototyp

GetAuxDI(DINum,isNoBlock)

Opis

Pobieranie wartości rozszerzonego DI

Parametry wymagane

  • DINum: Numer DI;

  • isNoBlock: Czy blokować True-blokujący false-nieblokujący;

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode;

  • isOpen: 0-wył.; 1-wł.;

13.55. Pobieranie wartości rozszerzonego AI

Nowe w wersji python: SDK-v2.0.4

Prototyp

GetAuxAI(AINum,isNoBlock)

Opis

Pobieranie wartości rozszerzonego AI

Parametry wymagane

  • AINum: Numer AI;

  • isNoBlock: Czy blokować True-blokujący False-nieblokujący

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode;

  • value: Wartość wejściowa;

13.56. Przykład kodu rozszerzonego IO

 1from fairino import Robot
 2import time
 3import threading
 4# Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota
 5robot = Robot.RPC('192.168.58.2')
 6for i in range(128):
 7    robot.SetAuxDO(i, True, False, True)
 8    time.sleep(0.1)
 9for i in range(128):
10    robot.SetAuxDO(i, False, False, True)
11    time.sleep(0.1)
12for i in range(409):
13    value1 = i * 10
14    value2 = 4095 - i * 10
15    robot.SetAuxAO(0, value1, True)
16    robot.SetAuxAO(1, value2, True)
17    robot.SetAuxAO(2, value1, True)
18    robot.SetAuxAO(3, value2, True)
19    time.sleep(0.01)
20robot.SetAuxDIFilterTime(10)
21robot.SetAuxAIFilterTime(0, 10)
22for i in range(20):
23    curValue = False
24    error, curValue = robot.GetAuxDI(i, False)  # Uwaga: w zależności od implementacji biblioteki, może wymagać modyfikacji
25    print(f"DI{i}   {curValue}")
26curValue = -1
27for i in range(4):
28    error, curValue = robot.GetAuxAI(i, True)  # Podobnie uwaga na przekazywanie przez referencję
29    print(f"AI{i}   {curValue}")
30robot.WaitAuxDI(1, False, 1000, False)
31robot.WaitAuxAI(1, 1, 132, 1000, False)
32robot.CloseRPC()

13.57. Włączanie urządzenia ruchomego

Nowe w wersji python: SDK-v2.0.5

Prototyp

TractorEnable(enable)

Opis

Włączanie urządzenia ruchomego

Parametry wymagane

  • enable: Stan włączenia, 0-wyłącz, 1-włącz

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.58. Powrót do zera urządzenia ruchomego

Nowe w wersji python: SDK-v2.0.5

Prototyp

TractorHoming()

Opis

Powrót do zera urządzenia ruchomego

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.59. Ruch liniowy urządzenia ruchomego

Nowe w wersji python: SDK-v2.0.5

Prototyp

TractorMoveL(distance, vel)

Opis

Ruch liniowy urządzenia ruchomego

Parametry wymagane

  • distance: Odległość ruchu liniowego (mm)

  • vel: Procent prędkości ruchu liniowego (0-100)

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.60. Ruch po łuku urządzenia ruchomego

Nowe w wersji python: SDK-v2.0.5

Prototyp

TractorMoveC(radio, angle, vel)

Opis

Ruch po łuku urządzenia ruchomego

Parametry wymagane

  • radio: Promień ruchu po łuku (mm)

  • angle: Kąt ruchu po łuku (°)

  • vel: Procent prędkości ruchu po łuku (0-100)

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.61. Zatrzymanie ruchu urządzenia ruchomego

Nowe w wersji python: SDK-v2.0.5

Prototyp

ProgramStop()

Opis

Zatrzymanie ruchu urządzenia ruchomego

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.62. Przykład kodu urządzenia ruchomego

 1from fairino import Robot
 2# Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota
 3robot = Robot.RPC('192.168.58.2')
 4robot.ExtDevSetUDPComParam("192.168.58.2", 2021, 2, 50, 5, 50, 1, 50, 10, 1)
 5robot.ExtDevLoadUDPDriver()
 6rtn = robot.ExtAxisServoOn(1, 1)
 7rtn = robot.ExtAxisServoOn(2, 1)
 8time.sleep(2)
 9robot.ExtAxisSetHoming(1, 0, 10, 2)
10time.sleep(2)
11rtn = robot.ExtAxisSetHoming(2, 0, 10, 2)
12time.sleep(4)
13robot.ExtAxisParamConfig(1, 0, 0, 50000, -50000, 1000, 1000, 6.280, 16384, 200, 0, 0, 0)
14robot.ExtAxisParamConfig(2, 0, 0, 50000, -50000, 1000, 1000, 6.280, 16384, 200, 0, 0, 0)
15robot.SetAxisDHParaConfig(5, 0, 0, 0, 0, 0, 0, 0, 0)
16robot.TractorEnable(False)
17time.sleep(2)
18robot.TractorEnable(True)
19time.sleep(2)
20robot.TractorHoming()
21time.sleep(2)
22robot.TractorMoveL(100, 2)
23time.sleep(5)
24robot.TractorStop()
25robot.TractorMoveL(-100, 20)
26time.sleep(5)
27robot.TractorMoveC(300, 90, 20)
28time.sleep(10)
29robot.TractorMoveC(300, -90, 20)
30time.sleep(1)
31robot.CloseRPC()

13.63. Punkt rejestracji czujnika laserowego

Nowe w wersji python: SDK-v2.1.4

Prototyp

LaserRecordPoint(coordID)

Opis

Punkt rejestracji czujnika laserowego

Parametry wymagane

  • coordID: Układ współrzędnych czujnika laserowego

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • joint: Pozycja przegubów punktu rozpoznanego przez czujnik laserowy

  • desc: Pozycja kartezjańska punktu rozpoznanego przez czujnik laserowy

  • exaxis: Pozycja osi rozszerzenia punktu rozpoznanego przez czujnik laserowy

13.64. Przykład kodu punktu rejestracji czujnika laserowego

Nowe w wersji python: SDK-v2.1.4

 1from fairino import Robot
 2# Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota
 3robot = Robot.RPC('192.168.58.2')
 4direction_point = [0, 0, 0]
 5rtn = robot.LaserTrackingSearchStart(2, direction_point, 10, 100, 10000, 2)
 6print(f"LaserTrackingSearchStart rtn is {rtn}")
 7robot.LaserTrackingSearchStop()
 8coord_id = 2
 9rtn, joint, desc, exaxis = robot.LaserRecordPoint(coord_id)
10print(f"rtn is {rtn}")
11print(f"desc_pos:{desc[0]},{desc[1]},{desc[2]},"
12      f"{desc[3]},{desc[4]},{desc[5]}")
13print(f"joint_pos:{joint[0]},{joint[1]},{joint[2]},{joint[3]},{joint[4]},{joint[5]}")
14print(f"exaxis pos is {exaxis[0]} {exaxis[1]} {exaxis[2]} {exaxis[3]}")
15off = [0] * 6
16robot.MoveJ(joint,tool=1,user=0,vel=100,acc=100,ovl=50,exaxis_pos=exaxis,blendT=-1,offset_flag=0,offset_pos=off)
17robot.CloseRPC()

13.65. Ustawianie strategii ruchu synchronicznego osi rozszerzenia z robotem

Nowe w wersji python: SDK-v2.1.5

Prototyp

SetExAxisRobotPlan(strategy)

Opis

Ustawianie strategii ruchu synchronicznego osi rozszerzenia z robotem

Parametry wymagane

  • strategy: Strategia; 0-z robotem jako głównym; 1-oś rozszerzenia synchroniczna z robotem

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode

13.66. Przykład kodu ustawiania strategii ruchu synchronicznego osi rozszerzenia z robotem

Nowe w wersji python: SDK-v2.1.5

 1from fairino import Robot
 2# Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota
 3robot = Robot.RPC('192.168.58.2')
 4joint_pos1 = [-22.016, -49.217, 124.714, -161.100, -85.108, -0.333]
 5joint_pos2 = [-21.083, -46.613, 110.079, -147.796, -80.757, -0.330]
 6joint_pos3 = [-25.572, -60.090, 135.397, -163.889, -82.489, -0.345]
 7desc_pos1 = [2.637, -0.001, 30.673, 178.786, -4.134, 68.326]
 8desc_pos2 = [213.812, -1.440, 47.311, 177.410, 0.166, 68.946]
 9desc_pos3 = [444.342, -12.723, 82.470, -177.701, -1.325, 65.151]
10epos1 = [0.001, 0.000, 0.000, 0.000]
11epos2 = [299.977, 0.000, 0.000, 0.000]
12epos3 = [399.969, 0.000, 0.000, 0.000]
13offset_pos = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
14rtn = robot.SetExAxisRobotPlan(0)
15print(f"SetExAxisRobotPlan rtn is {rtn}")
16time.sleep(1)
17rtn = robot.ExtAxisSyncMoveL(desc_pos=desc_pos1,tool=1,user=0,vel=100,acc=100,ovl=100,blendR=-1,exaxis_pos=epos1,offset_flag=0,offset_pos=offset_pos)
18print(f"ExtAxisSyncMoveL 1 rtn is {rtn}")
19rtn = robot.ExtAxisSyncMoveL(desc_pos=desc_pos2,tool=1,user=0,vel=100,acc=100,ovl=100,blendR=-1,exaxis_pos=epos2,offset_flag=0,offset_pos=offset_pos)
20print(f"ExtAxisSyncMoveL 2 rtn is {rtn}")
21rtn = robot.ExtAxisSyncMoveL(desc_pos=desc_pos3,tool=1,user=0,vel=100,acc=100,ovl=100,blendR=-1,exaxis_pos=epos3,offset_flag=0,offset_pos=offset_pos)
22print(f"ExtAxisSyncMoveL 3 rtn is {rtn}")
23time.sleep(8)
24robot.CloseRPC()

13.67. Ustawianie czasu zakończenia pozycjonowania UDP osi rozszerzenia

Nowe w wersji python: SDK-v2.1.5

Prototyp

SetExAxisCmdDoneTime(time)

Opis

Ustawianie czasu zakończenia pozycjonowania UDP osi rozszerzenia

Parametry wymagane

  • time: Czas zakończenia pozycjonowania [ms]

Parametry domyślne

Brak

Wartość zwracana

Kod błędu sukces-0 błąd- errcode