Skip to main content

7

FUN 22 P BREAK PĘTLA BREAK FROM FOR iNEXT(BREAK) FUN22 P BREAK

image.png

 

●         Jeżeli „EN”=1 lub zmieni się z 0→1(instrukcja P), nastąpi zakończenie pętli programu FOR iNEXT

●         Program w pętli FOR-NEXT jest wykonywany N-krotnie (wartość N określana jest argumentem instrukcji FOR). W razie potrzeby zakończenia pętli w cyklu wcześniejszym niż N-ty, należy zastosować instrukcję BREAK

●         Instrukcja BREAK musi znajdować się wewnątrz pętli FOR-NEXT

 

image.png

 

Opis:

Operacja zliczania pętli wykorzystywana do realizowania pętli programu FOR-NEXT wyznaczana jest przez rejestr D10. Program w pętli FOR-NEXT, przeznaczony jest do wyszukiwania identycznych danych zapisanych w D100, jak dane w tabeli rejestrów rozpoczynającej się od R0. W przypadku znalezienia takich danych, pętla wyszukiwania zostanie zakończona, a wykonywanie programu będzie kontynuowane za instrukcją NEXT. Jeżeli dane nie zostaną znalezione, pętla zostanie zrealizowana N-krotnie (wartość N zapisana jest w D10) i dopiero wówczas, wykonywanie programu będzie kontynuowane za instrukcją NEXT

FUN 23 P DIV48 DZIELENIE 48-BITOWE FUN 23 P DIV48

image.png

 

 Opis

l  Jeżeli “EN”=1 lub zmieni się z 0→1 (instrukcja P), to nastąpi 48-bitowa operacja dzielenia. Dzielna i dzielnik tworzone są przez trzy kolejne rejestry, poczynając odpowiednio od Sa i Sb. Jeżeli wynikiem będzie zero, to wyjście 'D=0' zostanie ustawione na 1. Jeżeli dzielnik będzie zerem, to 'ERR' zostanie ustawiony na 1, a wynikowy rejestr pozostanie niezmieniony.

l  Wszystkie argumenty związane z tą funkcją są 48-bitowe, dlatego też Sa, Sb i D składają się z 3 kolejnych rejestrów. 

Przykład: dzielenie 48-bitowe

 

 W przykładzie tym, dzielna tworzona przez rejestry R2, R1, R0 zostanie podzielona przez dzielnik tworzony przez rejestry R5, R4, R3. Iloraz zostanie zapisany w rejestrze R8, R7 i R6

 

image.png

 

 

 

image.png


FUN 24 DP SUM

SUM  (Sumowanie danych )

FUN 24 DP SUM

image.png

 

 Opis

 

l Jeżeli “EN”=1 lub zmieni się z 0→1 (instrukcja P), to nastąpi dodanie kolejnych N jednostek rejestrów 16-bitowych lub 32-bitowych (instrukcja P) i zapisanie wyników w rejestrze opisanym literą D.

l Jeżeli wartość N jest równa 0 lub jest większa od 511, to operacja nie zostanie przeprowadzona.

l Port komunikacyjny 1~4 może być wykorzystywany jako interfejs komunikacyjny ASCII ogólnego zastosowania. Jeżeli metodą wykrywania błędów danych jest suma kontrolna, to instrukcja ta może być wykorzystana do wygenerowania sumy dla wysyłanych danych lub do sprawdzenia, czy otrzymane dane są błędne.

 

 Przykład 1 Kiedy M1 zmieni stan zWYŁ→WŁ, instrukcja wykona obliczenie sumydanych 16-bitowych

 

image.png

 

 Przykład 2 Kiedy M1 jest w stanieWŁ, następuje sumowanie danych 32-bitowych.

 

 

image.png


FUN 25 DP MEAN

ŚREDNIA (Obliczenie średniej)

FUN 25 DP MEAN

image.png

 Opis


 

l Jeżeli “EN”=1 lub zmieni się z 0→1 (instrukcja P), to nastąpi dodanie kolejnych N wartości numerycznych 16-bitowych lub 32-bitowych (instrukcja P) rozpoczynających się od S i podzielenie ich przez wartość N. Następnie, wartość średnia (zaokrąglona) zostanie zapisana w rejestrze opisanym literą D.

l Jeżeli wartosć N nie mieści się w zakresie od 2 do 256, stan błędu zakresu N "ERR" zostanie ustawiony na 1. W takim przypadku funkcja nie zostanie zrealizowana.

 

image.png


FUN 26 DP SQRT Pierwiastek kwadratowy FUN 26 DP SQRT

image.png

 

 

l Jeżeli “EN”=1 lub zmieni się z 0→1 (instrukcja P), to nastąpi obliczenie pierwiastka kwadratowego(z zaokrągleniem) z danych wymienionych w polu oznaczonym S i zapisanie wyniku w rejestrze D.

l Ponieważ wartość S pochodzi z zawartości rejestru, to jeżeli będzie ona ujemna, stan błędu zakresu S "ERR" zostanie ustawiony na 1. W takim przypadku operacja nie zostanie zrealizowana.

 

image.png


FUN 27 DP NEG

NEGACJA (obliczenie wartości ujemnej)

FUN 27 DP NEG

image.png

 

 Opis

l  Jeżeli “EN”=1 lub zmieni się z 0→1 (instrukcja P), to nastąpi zanegowanie (tzn. zostanie obliczona negacja z uzupełnieniem do dwóch) wartości w rejestrze oznaczonym literą D i ponowne zapisanie wyniku w tym rejestrze.

l  Jeżeli wartość rejestru D będzie ujemna, to operacja negacji sprawi, że wartość ta stanie się dodatnia.

 

 

image.png


FUN 28 DP ABS

WARTOŚĆ BEZWZGLĘDNA

(obliczenie wartości bezwzględnej)

FUN 28 DP ABS

image.png

 

 Opis

l  Jeżeli “EN”=1 lub zmieni się z 0→1 (instrukcja P), to nastąpi obliczenie wartości bezwzględnej zwartości rejestru oznaczonego literą D i ponowne zapisanie wyniku w tym rejestrze.

image.png


FUN 29 DP EXT ROZSZERZENIE ZNAKOWE FUN 29 DP EXT

image.png

 

 Opis

l  Jeżeli “EN”=1 lub zmieni się z 0→1 (instrukcja P), to instrukcja ta zrealizuje rozszerzenie znakowe wartości 16-bitowej oznaczonej literą D do wartości 32-bitowej i zapisze nową wartość w rejestrze 32-bitowym składającym się z dwóch kolejnych słów, D + 1 i D.

l  Instrukcja ta rozszerza wartość numeryczną rejestru 16-bitowego do odpowiedniej wartości numerycznej rejestru 32-bitowego (na przykład przekształca 33FFH na 000033FFH). Instrukcja wykorzystywana jest głównie w operacjach numerycznych (+,-,*,/,CMP......), w których można przyjąć 16 i 32-bitowe wartości numeryczne jako argumenty. Przed rozpoczęciem operacji, wszystkie argumenty powinny zostać ustawione na taką samą długość.

 

image.png


FUN 30 PID

OPERACJA PID OGÓLNEGO ZASTOSOWANIA

(Krótki opis)

FUN 30 PID

image.png

Opis

 

l  Funkcja PID (FUN 30) przeprowadza obliczenia oparte na wzorze PID na podstawie aktualnej wartości zmiennej procesowej (PV) wyznaczonej z zewnętrznego sygnału analogowego oraz nastaw (SP) procesu. Wynikiem obliczeń jest wyjściowy sygnał sterujący dla sterowanego procesu, który może zostać podany bezpośrednio do modułu analogowego lub innego interfejsu wyjściowego lub też pozostawiony do realizacji kolejnego procesu. Prawidłowe wykorzystanie sterowania PID w procesie umożliwia otrzymanie szybkiego i dokładnego wyniku PV podążającego za zmianą SP oraz uodparnia proces na zakłócenia.

l  Wzór PID w formie cyfrowej:

Mn =       [(D4005/Pb) x En] +   + Bias

Mn          : Wyjście sterujące w czasie ”n”

D4005  : Stała wzmocnienia; wartością domyślną jest 1000. Można ją ustawić w zakresie 1~5000.

Pb           : Pasmo proporcjonalne ( zakres : 2~5000, jednostka 0.1%. Kc (wzmocnienie) =1000/ Pb )

Ti            : Całkująca stała czasowa ( zakres : 0~9999 odpowiada 0.00~99.99 powtórzeniom/minutę )

Td           : Różniczkująca stała czasowa ( zakres : 0~9999 odpowiada 0.00~99.99 minutom )

PVn           : Wartość procesowa w czasie ”n”

PVn-1      : Wartość procesowa w czasie ”n-1”

En              :Błąd w czasie ”n” =nastawa ( SP) -wartość procesowa w czasie ”n” (PVn)

Ts               : Przedział czasowy obliczeń PID ( zakres: 1~3000, jednostka : 0.01 s )

Bias        : Offset wyjścia sterującego ( zakres: 0~16380 )

FUN 31 P CRC16

OBLICZANIE CRC16(CRC16)

FUN 31 P CRC16

image.png

 Opis

 

 

●          Jeżeli “EN”=1 lub zmieni się z 0→1 (instrukcja P), to instrukcja rozpocznie obliczanie CRC16 od młodszego bajtuS przez długość N. Wynik obliczeń zostanie zapisany w rejestrze D i D+1.

●          Wskaźnik wyjściowy "D=0" będzie włączony jeżeli wynik obliczeń będzie równy 0.

●          W przypadku nieprawidłowej długości, instrukcja nie przeprowadzi obliczeń i włączy się błąd na wyjściu "ERR".

●          Przy komunikacji z inteligentnym urządzeniem peryferyjnym w binarnym formacie danych, bardzo często wykorzystywana jest funkcja CRC16. Metoda ta wykorzystywana jest przez dobrze znany protokół komunikacyjny Modbus RTU.

●          CRC16 jest wartością kontrolną przesyłanej ramki danych.

●          Po przeprowadzeniu obliczeń CRC16 na podstawie danych otrzymanych w komunikacie oraz wartości kontrolnej, wynik musi wynosić 0. Oznacza to brak błędu w tej ramce wiadomości.

 

 

image.png


FUN 32 ADCNV

KONWERSJA WARTOŚCI WEJŚCIA ANALOGOWEGO 4~20MA(ADCNV)

FUN 32 ADCNV

image.png

 

 Opis

 

 

●          Jeżeli jednym z wejść analogowych jest 2~10mA/ 4~20mA/1~5V/2~10V, to sposobem do uzyskania odpowiedniej wartości dla tego sygnału jest analogowy moduł wejściowy. Zakres wejściowy modułu wynosi0~10mA/0~5V (Ustawienie przy 5V, polaryzacja unipolarna) lub 0~20mA/0~10V(Ustawienie przy 10V, polaryzacja unipolarna). W takim przypadku wystąpi przesunięcie wartości odczytu. Instrukcja ta stosowana jest w celu eliminacji przesunięcia i konwersji wartości odczytu na wartość w zakresie 0~4095(12-bitów) lub 0~16383(14-bitów).

●      Jeżeli "EN"=1, nastąpi konwersja rozpoczynająca się od S, na długości N. Wynik zostanie zapisany w rejestrze D.

●          Jeżeli "F/T"=0, wybrana zostanie 12-bitowa rozdzielczość analogowego modułuwejściowego. Jeżeli "F/T"=1, nastąpi przypisanie 14-bitowej rozdzielczości.

●          Instrukcja ta nie będzie działać w przypadku nieprawidłowej wartości N. 

●          Wartość odczytu na wejściu analogowym musi być w formacie -2048~2047 lub -8192~8191, aby konwersja była zgodna. W innym wypadku, jeżeli wartość odczytu będzie w formacie 0~4095 lub 0~16383, konwersja będzie niezgodna.

 

Przykład 

image.png

Opis: Przy włączonym M0 i wyłączonym M1, przeprowadzona zostanie 6-punktowa konwersja rozpoczynająca się od R3840, podczas której wyeliminowane zostanie przesunięcie wartości odczytu 4~20mA, a odpowiednia wartość 0~4095 zostanie zapisana w R500~R505.

image.png

 

Przy włączonych M0 i M1, przeprowadzona zostanie 6-punktowa konwersja rozpoczynająca się od R3840, podczas której wyeliminowane zostanie przesunięcie wartości odczytu 4~20mA, a odpowiednia wartość 0~16383 zostanie zapisana w R500~R505. 

image.png

 

FUN 33 P LCNV

Konwersja liniowa(LCNV)

FUN 33 P LCNV

image.png

 

 

●          W przypadku, gdy do pomiaru analogowego wykorzystywany jest analogowy moduł wejściowy, wartość odczytana na wejściu analogowym może być przy użyciu tej instrukcji przekonwertowana na zakres jednostek inżynierskich, w celu ich wyświetlenia lub przeprowadzenia operacji sterowania.

●          W przypadku kalibracji pomiarowej można zastosować konwersję liniową zmiennej, dzięki czemu zmierzona wartość z PLC może być skorygowana wartością z urządzenia pomiarowego.

●          Jeżeli „EN"=1 lub zmieni się z 0→1( instrukcja P), instrukcja przeprowadzi operację konwersji liniowej zgodną z wybranym trybem, gdzie S jest początkowym adresem danych źródłowych, Ts jest początkowym adresem tabeli parametrów konwersji, D jest początkowym adresem do zapisywania przekonwertowanych wyników, a L jest liczbą kolejno konwertowanych adresów źródłowych.

●          Istnieją dwa sposoby określania konwersji liniowej:

 

 Sposób 1: Metoda kalibracji dwupunktowej

 

 Wypełnij tabelę parametrów do konwersji wpisując dolną wartość pomiarową (VML), górną wartość pomiarową (VMH) oraz odpowiadające im wartości standardowe – dolną (VSL) i górną (VSH). Wynik po konwersji (Dn) wygenerowany zostanie z danych źródłowych (Sn) za pomocą poniższego równania:

 

image.png


Sposób 2: Mnożnik + metoda przesunięcia

Wypełnij tabelę parametrów do konwersji wpisując wartości mnożnika(A), dzielnika(B) i przesunięcia(C). Wynik po konwersji (Dn) wygenerowany zostanie z danych źródłowych (Sn) za pomocą poniższego równania:

 

                                                   image.png image.png

 

Opis trybu roboczego:

 

  1. Kiedy Md = 0, konwersja liniowa przeprowadzana jest sposobem 1 określania konwersji, a wszystkie dane źródłowe charakteryzują się tymi samymi parametrami do konwersji VML, VMH, VSL i VSH.

  2.  Kiedy Md = 1, konwersja liniowa przeprowadzana jest sposobem 1 określania konwersji, a dane źródłowe charakteryzują się niezależnymi parametrami do konwersji VML, VMH, VSL, VSH. W przypadku N danych źródłowych, tabela parametrów konwersji powinna zawierać N grup parametrów VML, VMH, VSL, VSH ,tj. N×4 rejestrów.

  3.  Kiedy Md = 2, konwersja liniowa przeprowadzana jest sposobem 2 określania konwersji, a wszystkie dane źródłowe charakteryzują się tymi samymi parametrami do konwersji A, B i C.

  4.  Kiedy Md = 3, konwersja liniowa przeprowadzana jest sposobem 2 określania konwersji, a dane źródłowe charakteryzują się niezależnymi parametrami do konwersji A, B, C. W przypadku N danych źródłowych, tabela parametrów do konwersji powinna zawierać N grup parametrów A, B, C, tj. N×3 rejestrów.

 

Przykład programu 1 : Konwersja liniowa w trybie 0

 

image.png

 

Opis:  

Kiedy M0=1, konwersja liniowa zostanie zrealizowana w trybie 0, gdzie R100 jest początkowym adresem danych źródłowych, R1000 jest początkowym adresem tabeli parametrów konwersji VML, VMH, VSL, VSH, liczba kolejno konwertowanych wartości wynosi 6, a przekonwertowane wyniki zapisywane będą w R2000~R2005

 

 

image.png

Przykład programu 2 : Konwersja liniowa w trybie 1

image.png

 

Opis: 

Kiedy M0=1, konwersja liniowa zostanie zrealizowana w trybie 1, gdzie R100 jest początkowym adresem danych źródłowych, R1000 jest początkowym adresem tabeli parametrów konwersji VML, VMH, VSL, VSH, liczba kolejno konwertowanych wartości wynosi 3, a przekonwertowane wyniki zapisywane będą w R2000~R2002.

 

image.png

 

Przykład programu 3 : Konwersja liniowa w trybie 2

image.png

 

Opis:

Kiedy M0=1, konwersja liniowa zostanie zrealizowana w trybie 2, gdzie R100 jest początkowym adresem danych źródłowych, R1000 jest początkowym adresem tabeli parametrów konwersji A, B, C, liczba kolejno konwertowanych wartości wynosi 6, a przekonwertowane wyniki zapisywane będą w R2000~R2005.

 

image.png

 

Przykład programu 4: Konwersja liniowa w trybie 3

image.png

Opis:

Kiedy M0=1, konwersja liniowa zostanie zrealizowana w trybie 3, gdzie R100 jest początkowym adresem danych źródłowych, R1000 jest początkowym adresem tabeli parametrów konwersji A, B, C, liczba kolejno konwertowanych wartości wynosi 4, a przekonwertowane wyniki zapisywane będą w R2000~R2003

image.png

 

FUN 34 P MLC

Multi-liniowa konwersja(MLC)

FUN 34 P MLC


image.png

 

 

●          W przypadku, gdy do pomiaru analogowego wykorzystywany jest analogowy moduł wejściowy, wartość odczytana na wejściu analogowym może być przy użyciu tej instrukcji przekonwertowana na zakres jednostek inżynierskich, w celu ich wyświetlenia lub przeprowadzenia operacji sterowania.

●          W przypadku kalibracji pomiarowej można zastosować multi-liniową konwersję zmiennej, dzięki czemu zmierzona wartość z PLC może być skorygowana wartością z urządzenia pomiarowego.

●          Jeżeli „EN"=1 lub zmieni się z 0→1 (instrukcja P), instrukcja przeprowadzi operację multi-liniowej konwersji, w sposób zależny od stanu wejścia X / Y, gdzie Rs jest początkowym adresem danych źródłowych, SI jest liczbą kolejno konwertowanych adresów źródłowych, Tx jest początkowym adresem tabeli wartości na osi rzędnych X, Ty jest początkowym adresem tabeli wartości na osi odciętych Y, TI określa rozmiar tabela X / Y, a D jest początkowym adresem do zapisywania wyników konwersji.

●          Jeżeli podczas wykonywania instrukcji stan wejścia X / Y = 0, nastąpi porównanie danych źródłowych z wpisami w tabeli Tx w celu odnalezienia odpowiedniej lokalizacji w tej tabeli (wpisy  w tabeli Tx muszą być uszeregowane od najmniejszej do największej), a następnie zostanie przeprowadzona konwersja liniowa zgodna ze zlokalizowaną częścią tabel Tx i Ty.
Jeżeli podczas wykonywania instrukcji stan wejścia X / Y = 1, nastąpi porównanie danych źródłowych z wpisami w tabeli Ty w celu odnalezienia odpowiedniej lokalizacji w tej tabeli (wpisy w tabeli Ty muszą być uszeregowane od najmniejszej do największej, lub odwrotnie), a następnie zostanie przeprowadzona konwersja liniowa zgodna ze zlokalizowaną części tabel Ty i Tx.    

●          W przypadku, gdy wartości danych źródłowych nie zawierają się w zakresie wartości wpisów w tabeli Tx (gdy X / Y = 0) lub Ty (gdy X / Y = 1), wyjście OVR=1.

●          W przypadku nieprawidłowej wartości SI lub TI, instrukcja nie zostanie zrealizowana.

 Wyrażenie:

Aby konwersja liniowa przebiegła prawidłowo, wpisy w tabeli wartości X (Tx) muszą być uporządkowane w kolejności od najmniejszej do największej (gdy X / Y = 0); wpisy w tabeli konwertowanych wartości Y (Ty) mogą być natomiast uporządkowane w kolejności od najmniejszej do największej lub odwrotnie (gdy X / Y = 1). Przy wykonaniu tej instrukcji, nastąpi wyszukanie odpowiedniego fragmentu, poprzez porównanie wpisów tabeli z danymi źródłowymi, a następnie przeprowadzona zostanie konwersja liniowa według następującego równania:

 

Vy = (Vx-Tx_n) × (Ty_n+1-Ty_n/Tx_n+1-Tx_n) + Ty_n jeżeli X/Y=0

Vx = (Vy-Ty_n) × (Tx_n+1-Tx_n/Ty_n+1-Ty_n) + Tx_n jeżeli X/Y=1

 

Schemat multi-liniowy konwersji:

 

image.png

 

Przykład 1:

image.png

 

opis:

 Kiedy M10=1 i M11=0, a R0 jest początkowym adresem danych do przekonwertowania, R99 jest liczbą kolejnych danych źródłowych do przekonwertowania, R1000 jest początkowym adresem tabeli wartości X (Tx), R2000 jest początkowym adresem tabeli wartości Y (Ty), R199 jest rozmiarem tabel Tx/Ty, dane źródłowe R0~R5 będą poddane konwersji liniowej według tabel Tx i Ty, a wyniki zostaną zapisane w D0~D5.

 

 

image.png

 

 

image.png

 

 Przykład 2

 

image.png

 

 opis:

 

 Kiedy M10=1 i M11=0, a R0 jest początkowym adresem danych do przekonwertowania, R99 jest liczbą kolejnych danych źródłowych do przekonwertowania, R1000 jest początkowym adresem tabeli wartości X (Tx), R2000 jest początkowym adresem tabeli wartości Y (Ty), R199 jest rozmiarem tabel Tx/Ty, dane źródłowe R0~R5 będą poddane konwersji liniowej według tabeli Tx i Ty, a wyniki zostaną zapisane w D0~D5. Jeżeli dane źródłowe ≦ 2000, wartość wynikowa wynosi 280; jeżeli dane źródłowe ≧ 8000, wartość wynikowa wynosi 970

 

 

image.png

 

 

image.png

 

Przykład 3 

image.png

 

Opis:

Kiedy M10=1 i M11=0, a R0 jest początkowym adresem danych do przekonwertowania, R99 jest liczbą kolejnych danych źródłowych do przekonwertowania, R1000 jest początkowym adresem tabeli wartości X (Tx), R2000 jest początkowym adresem tabeli wartości Y (Ty), R199 jest rozmiarem tabel Tx/Ty, dane źródłowe R0~R5 będą poddane konwersji liniowej według tabeli Tx i Ty, a wyniki zostaną zapisane w D0~D5. Jeżeli dane źródłowe ≦ -8000, wartość wynikowa wynosi -100; jeżeli dane źródłowe ≧ 8000, wartość wynikowa wynosi 2000

 

image.png

 

 

 

image.png

 

 opis:

Kiedy M10=1 i M11=0, a R0 jest początkowym adresem danych do przekonwertowania, R99 jest liczbą kolejnych danych źródłowych do przekonwertowania, R1000 jest początkowym adresem tabeli wartości X (Tx), R2000 jest początkowym adresem tabeli wartości Y (Ty), R199 jest rozmiarem tabel Tx/Ty, dane źródłowe R0~R5 będą poddane konwersji liniowej według tabeli Tx i Ty, a wyniki zostaną zapisane w D0~D5. Jeżeli dane źródłowe ≦ 3276, wartość wynikowa wynosi 0; jeżeli dane źródłowe ≧ 16000, wartość wynikowa wynosi 5000

 

 

image.png

FUN 35 D P XOR XOR FUN 35 D P XOR

image.png

 

 

l   Jeżeli „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi realizacja operacji logicznej XOR na danych Sa i Sb. Zadaniem  tej operacji jest porównanie odpowiednich bitów Sa i Sb (B0~B15 lub B0~B31)  i jeżeli bity na tych samych pozycjach mają różne stany, wtedy bit na tej pozycji w rejestrze wyniku D ustawiany jest w stan 1, w przeciwnym wypadku w stan 0.

l  Po zakończeniu operacji, jeżeli wszystkie bity w rejestrze D będą miały stan 0, znacznik „D = 0” zostanie ustawiony w stan 1.

 

image.png


FUN 36 XNR XNOR FUN 36 XNR

image.png

 

 

l   Jeżeli „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi realizacja operacji logicznej XNR na danych Sa i Sb. Zadaniem tej operacji jest porównanie odpowiednich bitów Sa i Sb (B0~B15 lub B0~B31) i jeżeli bity na tych samych pozycjach mają te same stany, wtedy bit na tej pozycji w rejestrze wyniku D ustawiany jest w stan 1, w przeciwnym wypadku w stan 0.

●       Po zakończeniu operacji, jeżeli wszystkie bity w rejestrze D będą miały stan  0, znacznik „D = 0”  zostanie ustawiony w stan 1.

 

image.png

 

FUN 37 D P ZNCMP

Komparator strefy (ZONE COMPARE)

FUN 37 D P ZNCMP

image.png

 

 

l   Jeżeli „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi porównanie wartości S z górną wartością graniczną SU i dolną wartością graniczną SL. W przypadku, gdy wartość S będzie mieścić się pomiędzy górną i dolną wartością graniczną(SL ≦ S ≦ SU), wówczas znacznik „wewnątrz strefy” „INZ” zostanie ustawiony na 1. Jeżeli wartość S będzie wyższa niż górna wartość graniczna SU, znacznik przekroczenia górnej wartości granicznej „S > U” zostanie ustawiony na 1. Jeżeli wartość S będzie niższa niż dolna wartość graniczna SL, znacznik przekroczenia dolnej wartości granicznej „S < L” zostanie ustawiony na 1

l   Górna wartość graniczna SU powinna być większa niż dolna wartość graniczna SL. Jeżeli SU < SL, znacznik błędu wartości granicznej „ERR” zostanie ustawiony na 1, a instrukcja nie zostanie wykonana.

image.png

 

FUN 40 D P BITRD

ODCZYTAJ BIT (BIT READ)

FUN 40 D P BITRD

image.png

 

 

l   Jeżeli wejście sterujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi odczytanie stanu N-tego bitu z rejestru danych S i przypisanie go stanowi wyjścia OTB.

l   Jeżeli wejście sterujące „EN" = 0, stan wyjścia OTB może: zachowywać stan poprzedniego wywołania ( jeżeli M1919=0 ) lub być ustawiane w stan niski ( jeżeli M1919=1 ).

l   Jeżeli argument jest 16-bitowy, prawidłowym zakresem dla N jest 0~15. Dla argumentu 32-bitowego (instrukcja D), prawidłowym zakresem dla N jest 0~31. Jeżeli N znajdzie się poza zakresem, to znacznik błędu wartości N („ERR”) zostanie ustawiony na 1, a instrukcja nie zostanie wykonana.

 

image.png

 

FUN 41 D P BITWR

ZAPISZ BIT (BIT WRITE)

FUN 41 D P BITWR

image.png

 

 

l  Jeżeli wejście sterujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi ustawienie N-tego bitu w rejestrze D na stan bitu wejściowego (INB).

l  Jeżeli argument jest 16-bitowy, prawidłowym zakresem dla N jest 0~15. Dla argumentu 32-bitowego (instrukcja D), prawidłowym zakresem dla N jest 0~31. Jeżeli N znajdzie się poza zakresem, to znacznik błędu wartości N („ERR”) zostanie ustawiony na 1, a instrukcja nie zostanie wykonana.

 

image.png


FUN 42 D P BITMV

PRZENIEŚ BIT (BIT MOVE)

FUN 42 D P BITMV


image.png


 

l Jeżeli wejście sterujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi przeniesienie stanu Ns-tego bitu z rejestru S na stan Nd-tego bitu w rejestrze D.

l Jeżeli argument jest 16-bitowy, prawidłowym zakresem dla N jest 0~15. Dla argumentu 32-bitowego (instrukcja D

image.png

), prawidłowym zakresem dla N jest 0~31. Jeżeli N znajdzie się poza zakresem, to znacznik błędu wartości N ( „ERR”) zostanie ustawiony na 1, a instrukcja nie zostanie wykonana.

FUN 43 D P NBMV

PRZENIEŚ PÓŁBAJT (NIBBLE MOVE)

FUN 43 D P NBMV

image.png

 

 

l Jeżeli wejście sterujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi przeniesienie Ns-tego półbajtu z rejestru S na Nd-ty półbajt w rejestrze D. (Półbajt skalda się z 4 bitów. Rozpoczynając od najniższego bitu w rejestrze B0, każde kolejne 4 bity tworzą półbajt, czyli B0~B3 tworzą półbajt 0, B4~B7 tworzą półbajt 1, itd.)

l Jeżeli argument jest 16-bitowy, prawidłowym zakresem dla Ns i Nd jest 0~3. Dla argumentu 32-bitowego (instrukcja D), prawidłowym zakresem dla Ns i Nd jest 0~7. Jeżeli N znajdzie się poza zakresem, to znacznik błędu wartości N („ERR”) zostanie ustawiony na 1, a instrukcja nie zostanie wykonana.

 

 

 

image.png


FUN 44 D P BYMV

PRZENIEŚ BAJT (BYTE MOVE)

FUN 44 D P BYMV

image.png

 

 

l Jeżeli wejście sterujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi przeniesienie Ns-tego bajtu z rejestru S na Nd-ty bajt w rejestrze D. (Bajt skalda się z 8 bitów. Rozpoczynając od najniższego bitu w rejestrze B0, każde kolejne 8 bitów tworzy bajt, czyli bity B0~B7 tworzą bajt 0, B8~B15 tworzą bajt 1, itd.)

l Jeżeli argument jest 16-bitowy, prawidłowym zakresem dla Ns i Nd jest 0~1. Dla argumentu 32-bitowego (instrukcja D), prawidłowym zakresem dla Ns i Nd jest 0~3. Jeżeli N znajdzie się poza zakresem, to znacznik błędu wartości N („ERR”) zostanie ustawiony na 1, a instrukcja nie zostanie wykonana.

 

 

image.png


FUN 45 D P XCHG

ZAMIEŃ (EXCHANGE)

FUN 45 D P XCHG

image.png


l Jeżeli wejście sterujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi zamiana wartości rejestru Da z wartością rejestru Db w formacie 16 lub 32-bitowym (instrukcja D).

image.png


FUN 46 P SWAP

ZAMIEŃ BAJTY (BYTE SWAP)

FUN 46 P SWAP

image.png

 

 

l Jeżeli wejście sterujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi zamiana danych młodszego bajtu 0 (B0~B7) ze starszym bajtem 1 (B8~B15) w 16-bitowym rejestrze D.

 

image.png


FUN 47 P UNIT

POŁĄCZ PÓŁBAJTY (NIBBLE UNITE)

FUN 47 P UNIT

image.png

 

l Jeżeli wejście sterujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), najmłodsze półbajty (NB0) z N kolejnych adresów rejestrów rozpoczynając od S, zostaną przeniesione do NB0, NB1, .....NBn-1 w rejestrze D, w kolejności od najmłodszego do najstarszego. Półbajty nieprzenoszone do rejestru D (w przypadku N<4), uzupełniane są stanami 0. (Półbajt skalda się z 4 bitów. Rozpoczynając od najniższego bitu w rejestrze B0, każde kolejne 4 bity tworzą półbajt, czyli B0~B3 tworzą półbajt 0, B4~B7 tworzą półbajt 1, itd.)

l Instrukcja ta obsługuje tylko argumenty typu WORD (16-bitowe). Dlatego też, w operacji uczestniczą maksymalnie 4 półbajty, a co za tym idzie, prawidłowym zakresem dla N jest 1~4. Liczba N wychodząca poza ten zakres spowoduje ustawienie znacznika błędu wartości N („ERR”) na 1, a instrukcja nie zostanie wykonana.

 

image.png


FUN 48 P DIST

ROZPORWADŹ PÓŁBAJTY (NIBBLE DISTRIBUTE)

FUN 48 P DIST

l Jeżeli wejście sterujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), N kolejnych półbajtów rozpoczynając od najmłodszego półbajtu NB0 w rejestrze S, zostanie rozprowadzone, w kolejności od najmłodszego do najstarszego, na 0-owe półbajty (NB0) w N kolejnych rejestrach rozpoczynając od D. Pozostałe pólbajty (inne niż NB0), w każdym z rejestrów D, ustawiane są na zera. (Półbajt skalda się z 4 bitów. Rozpoczynając od najniższego bitu w rejestrze B0, każde kolejne 4 bity tworzą półbajt, czyli B0~B3 tworzą półbajt 0, B4~B7 tworzą półbajt 1, itd.).

l Instrukcja ta obsługuje tylko argumenty typu WORD (16-bitowe). Dlatego też, w operacji uczestniczą maksymalnie 4 półbajty, a co za tym idzie, prawidłowym zakresem dla N jest 1~4. Liczba N wychodząca poza ten zakres spowoduje ustawienie znacznika błędu wartości N („ERR”) na 1, a instrukcja nie zostanie wykonana.

 

image.png


FUN 49 BUNIT

POŁĄCZ BAJTY (BYTE UNITE)

FUN 49 BUNIT

image.png

 

 

●         Jeżeli wejście sterujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi połączenie młodszych bajtów, pochodzących z N kolejnych rejestrów rozpoczynających się od S. Wyniki połączenia zostaną zapisane w rejestrach D.

●         Jeżeli liczba łączonych bajtów będzie nieprawidłowa, instrukcja nie zostanie wykonana.

●     Przy komunikacji z inteligentnymi urządzeniami peryferyjnymi, z użyciem binarnego formatu danych, instrukcja ta może być wykorzystana do połączenia bajtów pochodzących z kolejnych przesłanych słów.

 

 

 Przykład :

 

image.png

 

Opis:

Gdy status M2 zmienia się z 0→1, nastąpi połączenie młodszych bajtów rejestrów rozpoczynających się od R1500; liczba łączonych bajtów określona jest przez R999. Wyniki zapisane zostaną w rejestrach rozpoczynających się od R2500.
Jeżeli R999=10, wyniki zostaną zapisane w rejestrach R2500
~R2504.

image.png

FUN 50 BDIST

ROZPROWADŹ BAJTY (BYTE DISTRIBUTE)

FUN 50 BDIST

image.png

 

 

●         Jeżeli wejście sterujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi rozprowadzenie N bajtów , pochodzących z kolejnych rejestrów rozpoczynających się od S. Wyniki zostaną zapisane na młodszych bajtach rejestrów D (starsze bajty zostaną uzupełnione zerami).

●         Jeżeli liczba rozprowadzanych bajtów będzie nieprawidłowa, instrukcja nie zostanie wykonana.

●     Przy komunikacji z inteligentnymi urządzeniami peryferyjnymi, z użyciem binarnego formatu danych, instrukcja ta może być zastosowana do rozdziału słów na bajty przed transmisją danych.

 Przykład:

image.png

 

Opis:

Gdy status M2 zmienia się z 0→1, nastąpi rozdział bajtów rozpoczynając od R1000; liczba bajtów określona jest przez R999. Wyniki zapisane zostaną w rejestrach rozpoczynając od R1500.
Jeżeli R999=9, wyniki zostaną zapisane w rejestrach R1500
~R1508

 

 

image.png

FUN 51 D P SHFL

PRZESUŃ BITY W LEWO (SHIFT LEFT)

FUN 51 D P SHFL

image.png

 

 

l  Jeżeli  wejście sterujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi przesunięcie bitów  w rejestrze D w lewo o N kolejnych pozycji  (w kolejności od najmłodszego do najstarszego). Po przesunięciu w lewo najmłodszych bitów, na ich pozycje zostaną wsunięte stany  wejścia INB, a stan wysuniętego najstarszego bitu 15tego lub 31ego (instrukcja D), pojawi się na wyjściu OTB.

l  Jeżeli argument jest 16-bitowy, prawidłowym zakresem  dla N jest 1~16. Dla argumentu 32-bitowego (instrukcja D), poprawnym  zakresem  dla N jest 1~32. Jeżeli N znajdzie się poza zakresem, to znacznik błędu wartości N („ERR”) zostanie ustawiony na 1, a instrukcja nie zostanie wykonana.

 

image.png


FUN 52 D P SHFR

PRZESUŃ BITY W PRAWO (SHIFT RIGHT)

FUN 52 D P SHFR


image.png

 

l  Jeżeli wejście sterujące  „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi przesunięcie bitów  w rejestrze D w prawo o N kolejnych pozycji (w kolejności od najstarszego do najmłodszego). Po przesunięciu w prawo najstarszych bitów, na ich pozycje zostaną wsunięte stany wejścia INB, a stan wysuniętego najmłodszego bitu pojawi się na wyjściu OTB.

l  Jeżeli argument jest 16-bitowy, prawidłowym zakresem  dla N jest 1~16. Dla argumentu 32-bitowego (instrukcja D), poprawnym  zakresem  dla N jest 1~32. Jeżeli N znajdzie się poza zakresem, to znacznik błędu wartości N („ERR”) zostanie ustawiony na 1, a instrukcja nie zostanie wykonana.

 

 

image.png


FUN 53 D P ROTL

OBRÓĆ BITY W LEWO

(ROTATE LEFT)

FUN 53 D P ROTL

image.png


 

l  Jeżeli wejście sterujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi obrót bitów w rejestrze D w lewo o N kolejnych pozycji (w kolejności od najmłodszego do najstarszego, tj. w przypadku 16-bitowej instrukcji, B0→B1, B1→B2, .... , B14→B15, B15→B0. W przypadku 32-bitowej instrukcji, B0→B1, B1→B2, .... , B30→B31, B31→B0). Stan, jako ostatni wsuniętego bitu na B0, pojawia się wyjściu OTB.

l  Jeżeli argument jest 16-bitowy, prawidłowym zakresem  dla N jest 1~16. Dla argumentu 32-bitowego (instrukcja D), poprawnym  zakresem  dla N jest 1~32. Jeżeli N znajdzie się poza zakresem, to znacznik błędu wartości N („ERR”) zostanie ustawiony na 1, a instrukcja nie zostanie wykonana.

 

image.png


FUN 54 D P ROTR

OBRÓĆ BITY W PRAWO (ROTATE RIGHT)

FUN 54 D P ROTR

image.png

 

l  Jeżeli „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi obrót bitów  w rejestrze D w prawo o N kolejnych pozycji (w kolejności od najstarszego do najmłodszego, tj. w przypadku 16-bitowej instrukcji, B15→B14, B14→B13, .... , B1→B0, B0→B15. W przypadku 32-bitowej instrukcji, B31→B30, B30→B29, .... , B1→B0, B0→B31). Stan, jako ostatni wsuniętego na najstarszą pozycję bitu, pojawia się wyjściu OTB.

l  Jeżeli argument jest 16-bitowy, prawidłowym zakresem  dla N jest 1~16. Dla argumentu 32-bitowego (instrukcja D), poprawnym  zakresem  dla N jest 1~32. Jeżeli N znajdzie się poza zakresem, to znacznik błędu wartości N („ERR”) zostanie ustawiony na 1, a instrukcja nie zostanie wykonana.

 

image.png


FUN 55 D P B → G

KONWERSJA KODU BINARNEGO NA KOD GRAYA

(BINARY-CODE TO GRAY-CODE CONVERSION)

FUN 55 D P B → G

image.png

 

 

●            Jeżeli wejście sterujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi konwersja kodu binarnego na kod Gray’a; gdzie S jest rejestrem źródłowym (kod binarny), a D jest rejestrem docelowym (kod Graya) do zapisu wyniku konwersji.

●            Metoda konwersji przedstawiona została poniżej

 

 

image.png

 

 Przykład 1 : Jeżeli status M0 zmieni się z 0→1, przeprowadzona zostanie 16-bitowa konwersja kodu

 

image.png

 

 Przykład 2 Jeżeli M0 =1, przeprowadzona zostanie 32-bitowa konwersja kodu

 

 

image.png


FUN 56 D P G→B

KONWERSJA KODU GRAYA NA KOD BINARNY

(GRAY-CODE TO BINARY-CODE CONVERSION)

FUN 56 D P G→B

●            Jeżeli wejście sterujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi konwersja kodu Gray’a na kod binarny; gdzie S jest rejestrem źródłowym (kod Graya), a D jest rejestrem docelowym (Kod binarny) do zapisu wyniku konwersji.

●            Metoda konwersji przedstawiona została poniżej:

 

 

image.png

 

 Przykład 1 Jeżeli status M0 zmieni się z 0→1, przeprowadzona zostanie 16-bitowa konwersja kodu

 

image.png

 

 

Przykład 2 Jeżeli M0 =1, przeprowadzona zostanie 32-bitowa konwersja kodu

image.png

 

FUN 57 P DECOD

DEKODER KODU 1 z N (DECODE)

FUN 57 P DECOD

image.png

 

 

●       Instrukcja ustawi status pojedynczego bitu spośród 2NL bitów w rejestrach D na 1, a pozostałe bity ustawi na 0. Numer bitu, który zostanie ustawiony na 1, określany jest przez wartość wynikającą ze stanów bitów BNS~BNS+NL-1 w S(wartość ta jest wartością dekodowaną, BNS jest początkowym bitem wartości dekodowanej a BNS+NL-1 jest bitem ostatnim).

●       Jeżeli wejście sterujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi odczytanie wartości wynikającej ze stanów bitów BNS~BNS+NL-1 w S. Wartość ta określa pozycję bitu w rejestrach D, którego status ustawiony zostanie na 1. Reszta bitów w rejestrach D ustawiona zostanie na 0.

●       Instrukcja obsługuje tylko argumenty 16-bitowe, czyli zakres bitów dla S jest B0~B15. W związku z tym, poprawnym zakresem Ns jest 0~15, a długość dekodowanej wartości NL ograniczona jest do 1~8 bitów. Dlatego ilość bitów dekodowanego wyniku D jest z zakresu 21~8 pozycji = 2~256 pozycji = 1~16 słów (nawet jeżeli wszystkie pozycje słowa nie są wykorzystane (NL =1;2 lub 3), wszystkie 16cie bitów D jest kontrolowane przez tą instrukcję).Jeżeli wartość NS lub NL będzie poza powyższym zakresem, znacznik błędu zakresu „ERR” zostanie ustawiony na 1, a instrukcja nie zostanie wykonana.

●       Jeżeli wartość końcowego bitu przekroczy B15 w S, nastąpi rozszerzenie zakresu w kierunku B0 w S + 1. Jednakże w takim wypadku, S + 1 nie może być rozszerzony na pewne typu argumentów (np. jeżeli S byłoby rejestrem typu D, to S + 1 nie może być rejestrem D3072). W takiej sytuacji, instrukcja zamieni liczbę bitów początkowy na najwyższa graniczną wartość.

 

image.png

 Ponieważ NL=5, szerokość D wynosi 25= 32 punkty = 2 słowa, czyli D składa się z R3 i R2, a dekodowana wartość wynosi 01001=9. W związku z tym, bit B9 (10-ta pozycja) w rejestrze D ustawiany jest na 1, a pozostałe bity na 0. 

FUN 58 P ENCOD

KODER KODU 1 z N (ENCODE)

FUN 58 P ENCOD

image.png

 

 

●       Jeżeli wejście strujace „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), to wybranych zostanie NL kolejnych bitów z zakresu BNS~BNS+NL-1 (BNS jest pozycją początkową kodowania, której względnym numerem bitu jest b0 w S; BNS+NL-1 jest bitem końcowym kodowania). Kodowanie realizowane jest od lewej do prawej z priorytetem wyszukania wyższego bitu (gdy H/L=1) lub od prawej do lewej z priorytetem wyszukania niższego bitu (gdy H/L=0). (np. wyszukiwany jest pierwszy bit o stanie 1, a wartość wynikająca z pozycji tego bitu jest zapisywana na młodszym bajcie (B0~B7) rejestru D, natomiast starszy bajt rejestru D ustawiany jest na 0.

 

image.png

 

●      Jak pokazano na powyższym schemacie, dla kodowania o priorytecie wyszukiwania wyższych bitów, pierwszym wyszukanym bitem o stanie wysokim jest bH (o względnej pozycji b12), natomiast dla priorytetu wyszukiwania niższych bitów, jest to bit bL (o względnej pozycji b4). Wśród pozycji NL musi znaleźć się co najmniej jeden bit o stanie 1. Jeżeli wszystkie bity będą miały stan 0, instrukcja nie zostanie wykonana, a znacznik „D=0” zostanie ustawiony na 1.

●     Ponieważ S jest 16-bitowym rejestrem, wartość Ns może mieścić się w zakresie 0~15. Wartość ta określa początkowy bit kodowania (b0) w zakresie B0~B15 w rejestrze S. Wartość NL zawiera się w zakresie 2~256 i wykorzystywana jest do identyfikacji bitu końcowego kodowania, tj. wartość ta wyznacza strefę kodowania wybierając NL kolejnych bitów począwszy od bitu początkowego (b0) w lewo (tj. b0~bNL-1). Jeżeli wartość NS lub NL będzie poza powyższym zakresem, znacznik błędu zakresu „ERR” zostanie ustawiony na 1, a instrukcja nie będzie wykonana.

●     Jeżeli punkt końcowy kodowania (bNL-1) będzie większy niż B15 w S, nastąpi kontynuacja rozszerzenia zakresu w kierunku S+1, S+2. Jednakże S + 1 nie może być rozszerzony na pewne typu argumentów – w takim wypadku, instrukcja będzie mogła kodować jedynie punkty pomiędzy b0 a największym punktem granicznym.

 

 

image.png

FUN 59 P → 7SG

KONWERSJA NA KOD 7-SEGMENTOWY

(7-SEGMENT CONVERSION)

FUN 59 P → 7SG

image.png

 

●            Jeżeli wejście sterujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi konwersja N+1 półbajtów (półbajt składa się z 4 kolejnych bitów, czyli bity B0~B3 w S tworzą półbajt 0, a bity B4~B7 tworzą półbajt 1, itp.) w rejestrze S na kod 7-segmentowy. Wyniki zostaną zapisany na młodszych bajach rejestrów D (najstarszy bajt nie ulega zmianie). Segmenty w rejestrze D ustawiane są kolejno, gdzie segment „a” ustawiany jest na B6, segment „b” ustawiany jest na B5, …, segment „g” ustawiany jest na B0. B7 nie jest wykorzystywany i ustawiany jest na 0. Więcej szczegółów znajduje się w tabeli „Znaki kodu 7-segmentowego”.

●            Ponieważ instrukcja ograniczona jest do 16 bitów, a rejestr S zawiera tylko 4 półbajty (NB0~NB3), to poprawnym zakres N jest 0~3. Jeżeli wartość N przekroczy ten zakres, znacznik błędu wartości N („ERR”) zostanie ustawiony na 1.

●            Należy zwrócić uwagę na to, że liczba konwertowanych półbajtów ma wartość N+1. N=0 oznacza jedną cyfrę do konwersji, N=1 oznacza dwie cyfry do konwersji, itd…

●            Przy zastosowaniu modułów rozszerzeń FATEK’a, przeznaczonych do obsługi wyświetlaczy 7-segmentowych (FBs-7SGxx) oraz funkcji FUN84 (7SEG), do zastosowań z kodowaniem i bez kodowania, istnieje możliwość łączenia funkcji FUN59 i FUN84 w celu uproszczenia implementacji programu.

 

Przykład 1 Konwersja kodu szesnastkowego na 7-segmentowy, przy zmianie stanu M1 z 0→1

image.png

 

Przykład  2 Konwersja kodu szesnastkowego na 7-segmentowy przy M1 w stanie 1

 

image.png

Przykład 3 Konwersja kodu szesnastkowego na 7-segmentowy przy M1 w stanie 1

image.png

Przykład 4 Konwersja kodu szesnastkowego na 7-segmentowy przy M1 w stanie 1

 

 

image.png

 

image.png

 

FUN 60 P → ASC

KONWERSJA ASCII (ASCII CONVERSION)

FUN 60 P → ASC

image.png

 

●            Jeżeli wejście sterujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi konwersja liter i cyfr zapisanych w polu S (pole S może zawierać do 12 znaków alfanumerycznych) na kod ASCII i zapisanie wyników w rejestrach rozpoczynając od D. Każde 2 znaki alfanumeryczne zajmują jeden 16-bitowy rejestr.

●            W większości przypadków, instrukcja ta przechowuje alfanumeryczne informacje w programie, odczekuje na pojawienie się określonych okoliczności, konwertuje te informacje na kod ASCII i przenosi je na zewnętrzne urządzenia wyświetlające, które obsługują kodowanie ASCII.image.png


 

FUN 61 P → SEC

KONWERSJA GODZIN:MINUT:SEKUND NA SEKUNDY

(HOUR:MINUTE:SECOND TO SECONDS CONVERSION)

FUN 61 P → SEC

image.png

 

l  Jeżeli wejście sterujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi konwersja danych w formacie godzina: minuta: sekunda zawartych w S~S+2, na równoważną im wartość w sekundach. Wartość ta zostanie zapisana w 32-bitowym rejestrze będącym połączeniem D i D+1. Jeżeli wynik = 0, znacznik „D = 0” zostanie ustawiony na 1.

l  Spośród wszystkich instrukcji FBs-PLC, instrukcjami związanymi z danymi w formacie godzina: minuta: sekunda są FUN61 i 62. Wykorzystują one 3 słowa (rejestry) do zapisywania danych o czasie (patrz schemat poniżej). Pierwsze słowo stanowi rejestr sekund, drugie minut, a trzecie godzin. Spośród 16 bitów w każdym rejestrze, tylko bity B14~B0 wykorzystywane są do wyrażenia wartości czasowej. Bit B15 wykorzystywany jest do określenia tego, czy wartość jest ujemna czy dodatnia. Jeżeli stan B15 jest 0, to wartość jest dodatnia, natomiast jeżeli stan B15 jest 1, wartość jest ujemna. Wartość czasowa B14~B0 wyrażana jest w kodzie binarnym, natomiast jeżeli wartość ta jest ujemna, B14~B0 wyrażana jest przy użyciu uzupełnienia dwójkowego. Liczba sekund, otrzymana po konwersji tą funkcją, jest wynikiem sumy sekund z trzech rejestrów wyrażających godziny: minuty: sekundy.

 

 

image.png

 

 Bity B15 w rejestrach określają znak wartości czasowej (+/-)

l  Poza instrukcjami FUN61 i 62, które traktują rejestry danych w formacie godzina: minuta: sekunda jako zintegrowane dane, pozostałe instrukcje traktują je jako odseparowane wartości rejestrów.

l  Przykładowy program, przedstawiony poniżej, konwertuje dane w formacie godzina: minuta: sekunda tworzone przez R20~R22, na odpowiadającą im wartość w sekundach i zapisuje wynik w 32-bitowym rejestrze tworzonym przez R50~R51. Wyniki przedstawione są poniżej.

 

image.png


FUN 62 P → HMS

KONWERSJA SEKUND→GODZINY:MINUTY:SEKUNDY

(SECOND→HOUR:MINUTE:SECOND)

FUN 62 P → HMS

image.png

 

 

l  Jeżeli wejście sterujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi konwersja wartości sekund z 32-bitowego rejestru S~S+1, na równoważną wartość w formacie godzina: minuta: sekunda. Wynik zostanie zapisany w trzech kolejnych rejestrach D~D+2. Wszystkie dane w tej instrukcji wyrażane są w kodzie binarnym (w przypadku wartości ujemnych, dane wyrażane są za pomocą uzupełnienia dwójkowego).

 

image.png

 

 

l  Jak pokazano na powyższym schemacie, po konwersji na godziny: minuty: sekundy, wartość minut i sekund może być tylko w zakresie od -59 do 59, natomiast wartość godzin, w zakresie -32768 do 32767. Z uwagi na to, minimalnymi i maksymalnymi wartościami graniczną w rejestrze D jest: -32768 dla godzin, -59 dla minut, -59 dla sekund oraz 32767 dla godzin, 59 dla minut i 59 dla sekund. Odpowiadające tym wartością granicznym wartości sekund to odpowiednio -117968399 i 117968399. Jeżeli wartość S przekroczy ten zakres, instrukcja nie zostanie wykonana, a znacznik przekroczenia zakresu „OVR” zostanie ustawiony na 1. Jeżeli S = 0, wynik równy będzie 0, a znacznik D = 0” zostanie ustawiony na 1.

l  Przykładem działania opisywanej instrukcji jest program przedstawiony na poniższym schemacie. Zauważ, że zawartość rejestrów przedstawiona jest w systemie heksadecymalnym, natomiast po prawej, odpowiadające im wartość zapisane zostały w systemie dziesiętnym.

 

image.png


FUN 63 P → HEX

KONWERSJA KODU ASCII NA WARTOŚCI HEKSADECYMALNE

(CONVERSION OF ASCII CODE TO HEXADECIMAL VALUE)

FUN 63 P → HEX

image.png

 

 

l  Jeżeli wejście serujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi konwersja N kolejnych heksadecymalnych znaków zapisanych w kodzie ASCII (‘0’~’9’,’A’~’F’), pochodzących z N kolejnych 16-bitowych rejestrów S (młodszy bajt jest wiążący) na wartości szesnastkowe i zapisanie wyników konwersji w rejestrach rozpoczynając od D. Każde 4 kody ASCII zapisywane są w jednym rejestrze. Półbajty w rejestrze, który nie brał udziału w konwersji kodu ASCII, pozostaną niezmienione.

l  Jeżeli wartość N będzie równa 0 lub większa niż 511, konwersja nie zostanie wykonana.

l  W przypadku wystąpienia błędu kodu ASCII (wartość w rejestrach S spoza zbioru 30H~39H lub 41H~46H), uaktywni się wyjście „ERR”.

l  Najczęstszym wykorzystaniem tej instrukcji jest konwersja ciągów znaków zapisanych w szesnastkowym kodzie ASCII (‘0’~’9’,’A’~’F’), odbieranych przez porty komunikacyjne (port1 ~ port4) z urządzeń peryferyjnych, na wartości szesnastkowe, które mogą być przetwarzane przez CPU bezpośrednio.

Przykład 1: Konwersja kodu ASCII na wartość szesnastkową przy zmianie statusu M1 z 0 na 1.

image.png

 

Przykład 2: Konwersja kodu ASCII na wartość szesnastkową przy M1 w stanie 1Konwersja kodu ASCII na wartość szesnastkową przy M1 w stanie 1

 

image.png

 

Przykład 3: Konwersja kodu ASCII na wartość szesnastkową przy M1 w stanie 1

image.png

 

Przykład 4 Konwersja kodu ASCII na wartość szesnastkową przy M1 w stanie 1

 

image.png


FUN 64 P → ASCII

KONWERSJA WARTOŚCI HEKSADECYMALNYCH NA KOD ASCII

(CONVERSION OF HEXADECIMAL VALUE TO ASCII CODE)

FUN 64 P → ASCII

image.png

 

l   Jeżeli wejście sterujące „EN" = 1 lub zmieni się z 0 na 1 (instrukcja P), nastąpi konwersja N kolejnych półbajtów heksadecymalnych wartości zawartych w rejestrach S, na odpowiadające im kody ASCII, a wyniki konwersji zostaną zapisane na młodszych bajtach (starszy bajt pozostanie niezmieniony) rejestrów rozpoczynających się od D.

l   Jeżeli wartość N będzie równa 0 lub większa niż 511, konwersja nie zostanie wykonana.

l   Najczęstszym wykorzystaniem tej instrukcji jest konwersja danych numerycznych, wypracowanych przez PLC, na ciąg kodów ASCII i przesłanie ich do urządzeń peryferyjnych, obsługujących kod ASCII, przez porty komunikacyjne (port1 ~ port4)

 

Przykład 1 Konwersja wartości szesnastkowej na kody ASCII przy zmianie statusu M1 z 0 na 1

image.png

 

Przykład 2 Konwersja wartości szesnastkowej na kod ASCII przy M1 w stanie 1.

image.png

 

 

Przykład 3 Konwersja wartości szesnastkowej na kod ASCII przy M1 w stanie 1

image.png

 

 

Przykład 4 Konwersja wartości szesnastkowej na kod ASCII przy M1 w stanie 1.

 

image.png

END

KONIEC SKANU (PROGRAM END)

END

image.png

 

l  Jeżeli wejście sterujące „EN” = 1, instrukcja zostanie wywołana. Po wywołaniu instrukcji END, kiedy „EN” = 1, przebieg programu natychmiast powróci do punktu początkowego programu (pierwszej linii programu głównego – 0000M) w celu rozpoczęcia kolejnego skanu programu – oznacza to, że żadne instrukcje programu, znajdujące się poniżej wywołania funkcji END, nie zostaną wykonane. Jeżeli EN = „0”, funkcja zostanie zignorowana, a linie programu znajdujące się poniżej END, będą dalej wykonywane.

l  Funkcja ta może być umieszczona w kilku miejscach programu. Wtedy sygnały „EN” na ich wejściach, sterują punktami końcowymi realizacji programu. Jest to szczególnie przydatne przy debugowaniu (usuwaniu błędów) i testowaniu programu.

l  Użycie funkcji END w programie głównym nie jest konieczne. CPU automatycznie powróci do punktu początkowego, po osiągnięciu ostatniej linii programu głównego.

 

 

image.png


FUN 65 LBL

ETYKIETA (LABEL)

FUN 65 LBL

image.png

 

l  Instrukcja ta służy do wskazywania miejsc w programie, stanowiących punkt docelowy wykonania funkcji JUMP i CALL, oraz do wskazywania procedur obsługi przerwań sprzętowych. Może być ona także wykorzystana do zwiększenia czytelności i łatwości interpretacji programu.

l  Instrukcja ta służy jedynie do oznaczania miejsc w programie w celu sterowania przebiegiem jego wykonania lub zamieszczania adnotacji. Sama instrukcja nie wykonuje żadnych akcji. Obojętnie, czy program będzie zawierać tą funkcję, czy nie -  nie wpłynie to na realizację programu.

l  Etykieta może zawierać 1~6 znaków alfanumerycznych i nie może być zdublowana w programie. Następujące etykiety, identyfikujące procedury przerwań sprzętowych, są zarezerwowane. Te „zarezerwowane słowa” nie mogą być zastosowane do normalnych etykiet programu.

 

Zarezerwowane słowa (etykiety) Opis

X0+I~X15+I(INT0~INT15)

X0-I~X15-I(INT0-~INT15-)

Etykiety procedur obsługi przerwań sprzętowych pochodzących od wejść (X0~X15) HSC0I~HSC7I Etykiety procedur obsługi przerwań sprzętowych pochodzących od szybkich liczników HSC0~HSC7

1MSI(1MS)、2MSI(2MS),3MSI(3MS),

4MSI(4MS),5MSI(5MS),10MSI(10MS),

50MSI(50MS),100MSI(100MS)

Etykiety dla 8miu typów okresowych przerwań sprzętowych, pochodzących od zegara wewnętrznego

 HSTAI(ATMRI),HST0I~HST3I

Etykiety procedur obsługi przerwań sprzętowych pochodzących od stałego szybkiego zegara PSO0I~PSO3I Etykiety procedur obsługi przerwań sprzętowych, wywoływanych po zakończeniu wysyłania impulsów, przy pozycjonowaniu NC

 Tylko procedury obsługi przerwań sprzętowych, mogą wykorzystywać etykiety wymienione powyżej. W przypadku pomyłki użycia zarezerwowanej etykiety dla normalnej podprocedury, może to spowodować niepowodzenie działania CPU lub nieoczekiwaną operację.

 

Etykiety na poniższych schemacie służą jedyne jako przykład (nie są zaimplementowane jako punkty odwołań funkcji CALL ani JUMP). Informacje dotyczące użycia etykiet z instrukcją JUMP, znajdują się w opisie działania instrukcji JMP. Informacje dotyczące użycia etykiet w celu identyfikowania podprocedur, znajdują się w opisie działania instrukcji CALL