GC_READ_LINE (173)
GC_READ_LINE (173)
ID 173
Zastosowanie: |
PLC |
Grupa: MOTION
Opis skrótowy:
Funkcja odczytująca wybraną linię z pliku G-Kodów z Karty SD lub z pamięci RAM
Wejścia (5 sztuk):
nr |
typ |
impuls |
oznaczenie |
Uwagi |
1 |
B |
tak ( 0->1 ) |
Table |
Zmiana z 0 na 1 – odczytanie danych z tabeli GCodeTable |
2 |
I |
- |
Table_Line_No |
Nr linii G-kodów jako indeks tabeli GCodeLineAddress, w której są wskaźniki do początków linii w tabeli GCodeTable |
3 |
B |
tak ( 0->1 ) |
OperTable |
Zmiana z 0 na 1 – odczytanie danych z tabeli GCodeOperTable |
4 |
I |
- |
Oper_Line_No |
Nr linii G-kodów jako indeks tabeli GCodeOperLineAddress, w której są wskaźniki do początków linii w tabeli GCodeOperTable |
5 |
I |
- |
Oper_No |
Numer pliku operacji |
Wyjścia (3 sztuki) :
nr |
typ |
impuls |
oznaczenie |
Uwagi |
1 |
B |
tak ( 0->1->0 ) |
Done |
Sygnalizacja odczytania linii włączana na jeden cykl programu |
2 |
B |
nie |
Error |
Sygnalizacja błędu |
3 |
I |
- |
Error_ID |
|
Err_id |
Opis |
0 | Brak błędu |
1 | nieznany błąd |
2 | - |
3 | pliki na karcie sd są niepoprawne |
4 | brak plików z gkodami |
5 | błąd odczytu plików z karty SD |
6 | - |
7 | - |
8 | - |
9 | zadana linia jest nieprawidłowa |
10 | zadany gkod jest nieprawidłowy |
11 | nieprawidłowy numer tablicy operacyjnej |
Działanie funkcji:
Po zmianie sygnału na jednym z wejść (Table lub OperTable) funkcja rozpoczyna pobieranie danych z odpowiedniej tabeli (GCodeTable lub GCodeOperTable1 do GCodeOperTable10) w zależności od aktywowanego wejścia. Odczytywana jest linia o numerze wskazanym przez odpowiednie wejście. Wartości z wejść Table_Line_No i Oper_Line_No są indeksami do tabel (GCodeLineAddress lub GCodeOperLineAddress), w których znajdują się adresy kolejnych linii G-kodów. Na wejścia Table_Line_No i Oper_Line_No należy podac numer linii G-kodów plików źródłowych, czyli zazwyczaj po każdym wykonanym G-kodzie numer ten zwiększa się o 1. Numeracja linii zaczyna się od zera.
informacja o poprzednio wykonywanym typie G-kodu jest przekazywana do odpowiednich rejestrów wg tabeli poniżej [SB: dodano 2017-09-25]
rejestr źródłowy | rejestr docelowy |
R3071 ( _G_Code_G) | R3098 (_Last_G) |
R3091 ( _G_Code_MG) | R3099 (_Last_MG) |
Dane odczytane z G-kodów są wstawiane do odpowiednich rejestrów specjalnych (podpunkt 4.6.5 - wstawić link). Użytkownik nie ma bezpośredniego dostępu do tabel GCodeTable, GCodeLineAddress, GCodeOperTable oraz GCodeOperLineAddress. W jednym cyklu pobierana jest jedna linia pliku źródłowego, czyli pobierane są G-kody do momentu natrafienia na kod 13 (przejście do kolejnej linii).
Jeżeli M1008=1 to: Funkcja sprawdza także kolejny G-kod i jeżeli jest to G-kod G1 (ruch typu VECTOR), G2 (ruch po okręgu zgodnie z kierunkiem ruchu wskazówek zegara) lub G3 (ruch po okręgu przeciwnie do kierunku ruchu wskazówek zegara) to przekazuje dane kolejnego ruchu do odpowiednich rejestrów wg tabeli poniżej: [SB: dodano 2017-09-25]
rejestr zapisywany | Wstawiane do rejestrów dla G-kodu |
R3092 (_G_Code_Next_X) | G1, G2, G3 |
R3093 (_G_Code_Next_Y) | G1, G2, G3 |
R3094 (_G_Code_Next_Z) | G1, G2, G3 |
R3095 (_G_Code_Next_I) | G2, G3 |
R3096 (_G_Code_Next_J) | G2, G3 |
R3097 (_Next_G) | G1, G2, G3 |
Należy zadbać o to, aby sygnały aktywności na wejściach binarnych nie pojawiły się jednocześnie w jednym cyklu programu.
Po odczytaniu linii G-kodu załączany jest sygnał na wyjściu Done na jeden cykl programu sterownika.
Używane rejestry R i znaczniki M:
Numer |
nazwa |
opis |
R-read, W-write |
R3065 |
_G_Code_A |
wartości pobrane z G-kodów |
W |
R3066 |
_G_Code_B |
wartości pobrane z G-kodów |
W |
R3067 |
_G_Code_C |
wartości pobrane z G-kodów |
W |
R3068 |
_G_Code_D |
wartości pobrane z G-kodów |
W |
R3069 |
_G_Code_E |
wartości pobrane z G-kodów |
W |
R3070 |
_G_Code_F |
wartości pobrane z G-kodów |
W |
R3071 |
_G_Code_G |
wartości pobrane z G-kodów |
W |
R3072 |
_G_Code_H |
wartości pobrane z G-kodów |
W |
R3073 |
_G_Code_I |
wartości pobrane z G-kodów |
W |
R3074 |
_G_Code_J |
wartości pobrane z G-kodów |
W |
R3075 |
_G_Code_K |
wartości pobrane z G-kodów |
W |
R3076 |
_G_Code_L |
wartości pobrane z G-kodów |
W |
R3077 |
_G_Code_M |
wartości pobrane z G-kodów |
W |
R3078 |
_G_Code_N |
wartości pobrane z G-kodów |
W |
R3079 |
_G_Code_O |
wartości pobrane z G-kodów |
W |
R3080 |
_G_Code_P |
wartości pobrane z G-kodów |
W |
R3081 |
_G_Code_Q |
wartości pobrane z G-kodów |
W |
R3082 |
_G_Code_R |
wartości pobrane z G-kodów |
W |
R3083 |
_G_Code_S |
wartości pobrane z G-kodów |
W |
R3084 |
_G_Code_T |
wartości pobrane z G-kodów |
W |
R3085 |
_G_Code_U |
wartości pobrane z G-kodów |
W |
R3086 |
_G_Code_V |
wartości pobrane z G-kodów |
W |
R3087 |
_G_Code_W |
wartości pobrane z G-kodów |
W |
R3088 |
_G_Code_X |
wartości pobrane z G-kodów |
W |
R3089 |
_G_Code_Y |
wartości pobrane z G-kodów |
W |
R3090 |
_G_Code_Z |
wartości pobrane z G-kodów |
W |
R3091 |
_G_Code_MG |
1=G, 2=M |
W |
R3092 | _G_Code_Next_X | współrzędna X kolejnej pozycji w ruchu z G-kodów | W |
R3093 | _G_Code_Next_Y | współrzędna Y kolejnej pozycji w ruchu z G-kodów | W |
R3094 | _G_Code_Next_Z | współrzędna Z kolejnej pozycji w ruchu z G-kodów | W |
R3095 | _G_Code_Next_I | współrzędna I kolejnej pozycji w ruchu z G-kodów | W |
R3096 | _G_Code_Next_J | współrzędna J kolejnej pozycji w ruchu z G-kodów | W |
R3097 | _Next_G | oznaczenie kolejengo G-kodu, jeżeli jest to ruch typu G1, G2 lub G3. W przeciwnym wypadku R3097=0 | W |
R3098 | _Last_G | zmienna zapamiętująca wartość ostatniego G-kodu G, modyfikowana z bloku GC_READ_LINE, R3098=1 gdy G1, R3098=2 gdy G2, R3098=3 gdy G3, R3098=0 dla innych wartości G lub M | W |
R3099 | _Last_MG | zmienna zapamiętująca czy ostatni G-kod to M czy G, modyfikowana z bloku GC_READ_LINE | W |
M1005 |
_YZ_circle |
Płaszczyzna wykonywania okręgu YZ |
W |
M1006 |
_XZ_circle |
Płaszczyzna wykonywania okręgu XZ |
W |
M1007 |
_XY_circle |
Płaszczyzna wykonywania okręgu XY |
W |
M1008 | _Smooth_Mode | 1 – załączanie wygładzania trajektorii ruchu, 0 – wylączenie wygładzania trajektorii | W |
Uwagai.
- Gkody operacyjne zapisywane są do pamięci wewnętrznej sterownika i z niej są również odczytywane przez blok GC_READ_LINE.
- Gkody użytkownika przechowywane są na karcie SD
- Podczas pierwszego włączenia bloku GC_READ_LINE dochodzi do zapełnienia buforów co może powodować kilka cykli opóźnienia w stosunku do włączenia bloku
- nie zaleca się zmiany numeru linii gkodu o wartość przekraczającą bufor, może to spowodować błędne działanie sterownika
- bufor sterownika w wersji 4s2a wynosi 16384 gkodów
- wersja sterownika 4s2a obsługuje jeden gkod użytkownika oraz 10 gkodów operacyjnych
- zaleca się sformatowanie karty SD do systemy plików FAT32 o dowolnym rozmiarze alokacji
- maksymalna liczba linii w gkodzie użytkownika wynosi 268 000 000
- maksymalna liczba gkodów użytkownika wynosi 536 000 000 - liczba linii
zmiany:
SB, 2017-09-16: usunąłem wejścia sterujące odczytywaniem danych z tabeli po optymalizacji. tabela ta została zlikwidowana.
SB, 2017-09-24: dodałem R3092, R3093, R3094 i M1009 do funkcjonalności bloku
BB, 2017-09-24: dodałem opisy błędów