Strona główna ASTOR

Jak sterować ruchem synchronicznym serwonapędów za pomocą G-Code w Codesys cz. 2

Kontakt w sprawie artykułu: Wojciech Trojniar - 2018-12-13

Z tego artykułu dowiesz się:

  • Jak stworzyć aplikację obsługującą G-Code
  • Jak przekształcić program G-Code w ruch serwonapędów w oprogramowaniu Codesys
  • Jakie są funkcje modeli kinematycznych układów mechanicznych

W poprzedniej części – Jak stworzyć wirtualny serwonapęd i przetestować jego działanie w środowisku Codesys. Pierwsze kroki. – przedstawiliśmy Państwu, w jaki sposób napisać pierwszą aplikację do sterowania wirtualnym serwonapędem w środowisku Codesys. Do tego celu wykorzystywana była licencja Softmotion. W tym artykule dowiecie się Państwo jak od podstaw stworzyć bardziej zaawansowaną aplikację, która umożliwia obsługę G-Code – znormalizowanego języka zapisu poleceń dla maszyn CNC. Przed rozpoczęciem pracy warto zaznajomić się z poprzednim artykułem z tej serii, ponieważ zawiera szczegółowy opis dodawania serwonapędów do środowiska Codesys.

Gotowe bloki funkcyjne Softmotion CNC w Codesysie pozwalają na przekształcenie programu sterującego (G-Code) w ruch serwonapędów. Jednoczesna koordynacja wielu osi pozwala na poruszanie się narzędzia/chwytaka po określonej trajektorii (np. interpolacja kołowa) z zadaną prędkością. Gotowe modele kinematyczne typowych układów mechanicznych pozwalają w szybki i łatwy sposób napisać i uruchomić aplikację sterującą na podstawie G-Code łącznie z wizualizacją trajektorii przejazdu narzędzia.

1. W środowisku Codesys załóż nowy projekt „Standard project”.

2. Wybierz język Structured Text (ST)  oraz opcję Codesys Softmotion aby uruchomić symulator.

Dodawanie do projektu wirtualnego serwonapędu Astraada SRV

3. W drzewku projektowym należy kliknąć prawym przyciskiem myszy na zakładce SoftMotion General Axis Poll wybrać opcję „Add Device”.

4. Rozwiń opcję Virtual drives i wybierz opcję „SM_Drive_Virtual”

5. W zakładce Softmotion General Axis Pool pojawi się nowa wirtualna oś pod nazwą SM_Drive_Virtual

6. Możesz zmienić jej nazwę, klikając na osi prawym przyciskiem i wybierając opcję Properties.

7. Zmień nazwę na „os_a_wirtualna”

8. Powtórz kroki 3-7 i dodaj do projektu „os_b_wirtualna”

9. W drzewku projektowym kliknij prawym przyciskiem na zakładce Application, a następnie Add Object-> CNC program

Wybór zatwierdź przyciskiem Add.

10. Kliknij dwukrotnie na nowo utworzonej zakładce CNC

11. W otwartym oknie wpisz program sterujący G-Code:

N000 F100 E100 E-100
N010 G01 X100
N020 G01 Y100
N030 G01 X0 Y0
N040 G01 Y100
N050 G01 X50 Y150
N060 G01 X100 Y100
N070 G01 X0
N080 G01 X100 Y0

12. Kliknij dwukrotnie na zakładce PLC_PRG

13. W oknie programu dodaj następujące zmienne:

PROGRAM PLC_PRG
VAR
start_os_a: MC_Power;
start_os_b: MC_Power;
interpolator: SM3_CNC.SMC_interpolator;
tg2: SM3_CNC.SMC_TRAFO_Gantry2;
kontrola_os_a: SM3_CNC.SMC_ControlAxisByPos;
kontrola_os_b: SM3_CNC.SMC_ControlAxisByPos;
tg2f: SM3_CNC.SMC_TRAFOF_Gantry2;
END_VAR

14. W oknie programu uzupełnij parametry obsługi bloków funkcyjnych:

//Uruchomienie i zezwolenie na ruch osi a

start_os_a(
Axis:= os_a_wirtualna, );

//Uruchomienie i zezwolenie na ruch osi b

start_os_b(
Axis:= os_b_wirtualna, );

//zamiana ciągłej ścieżki(programu w G-Code) na dyskretną, oblicza pozycję i czas przejazdu we współrzędnych kartezjańskich

interpolator(
poqDataIn:= ADR(CNC) ,
dwIpoTime:= 20000);

//konwersja ze współrzędnych kartezjańskich na współrzędne osiowe

tg2(
pi:= interpolator.piSetPosition,
);

//sterowanie fizyczną osią/wirtualną – zadawane są współrzędne osiowe (os x) z modułu tg2 – wykonywany jest ruch osi x

kontrola_os_a(
Axis:= os_a_wirtualna,
iStatus:=interpolator.iStatus,
bEnable:= interpolator.bWorking,
fSetPosition:= tg2.dx,
fGapVelocity:= 100,
fGapAcceleration:= 100,
fGapDeceleration:= 100
);

//sterowanie fizyczną osią/wirtualną – zadawane są współrzędne osiowe (os y) z modułu tg2 – wykonywany jest ruch osi y

kontrola_os_b(
Axis:= os_b_wirtualna,
iStatus:=interpolator.iStatus,
bEnable:= interpolator.bWorking,
fSetPosition:= tg2.dy,
fGapVelocity:= 100,
fGapAcceleration:= 100,
fGapDeceleration:= 100
);

//Konwersja ze współrzędnych osiowych na kartezjańskie
//Blok podpinany do wizualizacji

tg2f(
DriveX:= os_a_wirtualna,
DriveY:= os_b_wirtualna,
minX:= 0,
maxX:= 150,
minY:= 0,
maxY:= 150,
);

15. Aby utworzyć wizualizację systemu sterowania osią, kliknij prawym przyciskiem na zakładce Application w drzewku projektowym, a następnie wybrać Add Object – > Visualization. Całość zatwierdź przyciskiem Add.

16. Licencja Codesys Softmotion i Softmotion CNC umożliwia korzystanie z dołączonej do Codesysa biblioteki SM3_Basic i SMC_CNC. Zawiera one gotowe wizualizacje, za pomocą których można szybko rozpocząć sterowanie osiami serwonapędów. Aby dodać do projektu wizualizację sterującą, z zakładki SM3_Basic wybierz Visu_MC_Power i przeciągnij do okna projektu.

Po przeciągnięciu wizualizacji dopnij zmienną start_os_a (typu MC_Power).

17. Krok 10 należy powtórzyć i utworzyć wizualizację dla start_os_b (typu MC_Power).

18. Dodaj do wizualizacji Visu_SMC_Interpolator i podepnij pod niego zmienną interpolator

19. Dodaj do wizualizacji SMC_Visu_Gantry2 i podepnij pod niego zmienną

20. Aby uruchomić symulator, wejdź w menu start-> 3S CODESYS-> CODESYS Softmotion Win v3.

Aby skompilować i uruchomić program, wejdź w zakładkę Device, a następnie kliknij w Scan Network i wybierz dostępne urządzenie. W tym wypadku będzie to nazwa komputera.

Całość należy zatwierdzić przyciskiem OK.

Program należy skompilować i uruchomić. Działającą aplikację można uruchomić np. poprzez przeglądarkę internetową wpisując: http://localhost:8080/webvisu.htm

Czy ten artykuł był dla Ciebie przydatny?

Średnia ocena artykułu: 5 / 5. Ilość ocen: 2

Ten artykuł nie był jeszcze oceniony.

Zadaj pytanie

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

3 odpowiedzi na “Jak sterować ruchem synchronicznym serwonapędów za pomocą G-Code w Codesys cz. 2”

  1. Dziękuję za ciekawy artykuł mam nadzieję , że pojawią się kolejne. Pozdrawiam

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *