18
Makra
Ten rozdział opisuje składnię, metody programowania i użycie poleceń w makrach..
Przegląd
Makra udostępniają dodatkową funkcjonalność, której może potrzebować aplikacja. Pozwalają na korzystanie z zautomatyzowane sekwencji poleceń wykonywanych w czasie rzeczywistym. Dodatkowo umożliwiają wykonywanie zadań takich jak złożone operacje skalowania, obsługi ciągów znaków I zdefiniowanie interakcje użytkownika z projektem. Ten rozdział opisuje składnię, użycie i metody programowania przy wykorzystaniu komend w makrach.
Instrukcje dotyczące korzystania z edytora makr
Edytor makr udostępnia następujące funkcje:
Wyświetlanie numeru linii
Cofnij / Ponów
Wytnik / Kopiuj / Wklej
Zaznacz wszystko
Przełącz zaznaczenie/następne zaznaczenie/poprzednie zaznaczenie/usuń wszystkie zaznaczenia
Skomentuj/usuń komentarz
Ochrona -> Stosuj warunek wywołania
Wykonywanie cykliczne
Wykonaj jednokrotnie, po uruchomieniu panela
Poniżej opisano sposób korzystania z powyższych funkcji.
Należy otworzyć edytor makr; po lewej stronie obszaru edycji będą widoczne numery linii.
Kliknij prawym przyciskiem w obszarze edycji, aby otworzyć rozwijaną listę jak pokazano poniżej. Opcje niedostępne zaznaczone są kolorem szarym, co oznacza, że nie można używać ich w danej chwili. Na przykład należy zaznaczyć tekst, aby mieć możliwość kopiowania, w przeciwnym wypadku jest ona wyszarzona. Dostępne są również skróty klawiaturowe.
Na pasku narzędzi dostępne są funkcje: cofnij, ponów, wytnij, kopiuj, wklej, przełącz zaznaczenie, następne zaznaczenie, poprzednie zaznaczenie, usuń wszystkie zaznaczenia.
Można cofnąć każdą wprowadzoną funkcję. Funkcja ponów jest dostępna po użyciu funkcji cofnij. Aby wykonać opcję cofnij / ponów, kliknij prawym klawiszem myszy, aby wybrać opcję lub użyj skrótów klawiaturowych. (Cofnij: Ctrl+Z, Ponów: Ctrl+Y).
Zaznacz słowo w edytorze, aby kopiować lub wyciąć. Po wykonaniu polecenia kopiuj lub wytnij włączona zostaje funkcja wklej.
Użyj opcji zaznacz wszystko, aby zaznaczyć całą treść w obszarze edycji.
Jeśli makro jest zbyt długie, użyj zaznaczeń do łatwej edycji i czytania kodu. Poniższe ilustracje przedstawią sposób działania.
Przesuń kursor na pozycję w obszarze edycji, gdzie chcesz umieścić zaznaczenie. Kliknij prawym przyciskiem myszy, wybierz polecenie Przełącz zaznaczenie. Pojawi się niebieski kwadrat, który przedstawia znacznik po lewej stronie obszaru edycji.
Jeśli w wskazanym miejscu istnieje już zaznaczenie, wybierz opcję przełącz zaznaczenie, aby je zamknąć.
Kliknij prawym przyciskiem myszy i wybierz następne zaznaczenie, kursor zostanie przeniesiony do miejsca, gdzie znajduje się następny znacznik. Wybór opcji poprzednie zaznaczenie spowoduje przesunięcie kursora do poprzedniego znacznika.
群組 1129, Obiekt zgrupowany
Opcja usuń wszystkie zaznaczenia spowoduje usunięcie wszystkich znaczników.
Edytor Makr umożliwia zarysowanie (lub składanie) kodu. Opcja ta pozwana na ukrycie kodu makro, który należy do tego samego bloku i wyświetli je jak pokazano poniżej. Po lewej stronie obszaru edycji pojawi się schemat drzewa. Klikając w minus, można ukryć blok. Aby otworzyć blok należy kliknąć w znak plus.
群組 1133, Obiekt zgrupowany
Aby rozwinąć wszystkie zwinięte kody można nacisnąć prawym przyciskiem i wybrać opcję rozwiń wszystkie zwinięcia.
群組 1136, Obiekt zgrupowany
Fragment kodu zawarty pomiędzy następującymi słowami kluczowymi nazywane są "blokiem" kodu makr:
Blok kodu: sub – end sub
Pętle:
for – next
while – wend
Wyrażenia logiczne:
if – end if
Opcje wyboru: select case – end select
Edytor makr nie jest oknem z wyłącznością. Pozwala na powrót z niego do ekranu głównego i edytowanie projektu przy otwartym oknie roboczym makra.
Edytor makro pozwala na wykorzystanie funkcji znajdź i zamień.
Gdy zaznaczone jest opcja wykonywanie cykliczne, makro jest uruchomiane okresowo.
Wybierz opcję w polu ochrona » stosuj warunek wywołania » ustawienia, aby wybrać jedno z następujących:
Wyłącz, gdy bit jest w stanie ON.
Wyłącz, gdy bit jest w stanie OFF.
群組 1144, Obiekt zgrupowany
Jeśli wybrano opcję wykonaj jednokrotnie, po uruchomieniu panela, po włączeniu panela HMI makro wykona się jeden raz.
Konfiguracja
W programie makro wykorzystujemy deklaracje. Zawierają się w nich stałe, zmienne i operacje. Umieszczane są one w określonym porządku, co pozwala na zdefiniowanie pożądanego wyjścia. Makro ma następującą strukturę:
矩形 1148, Pole tekstowe
W programie makro można zdefiniować tylko jeden główny program, która jest punktem wyjścia dla wykonania makra. Format to:
macro_command main()
end macro_command
Lokalne zmienne są używane w głównym programie marko lub w zdefiniowanym bloku funkcyjnym. Wartość tych zmiennych pozostaje ważna tylko w konkretnym bloku.
Zmienne globalne są zadeklarowane przed dowolnymi blokami funkcyjnymi i są ważne dla wszystkich funkcji w makrze. Kiedy lokalne zmienne i zmienne globalne mają tę samą deklarację nazwy, tylko lokalne zmienne działają poprawnie.
Poniższy przykład przedstawia proste makro zawierające deklaracje zmiennych i wywołanie funkcji.
macro_command main()
short pressure = 10 // zmienna lokalna declaration
SetData(pressure, "Allen-Bradley DF1", N7, 0, 1) // wywołanie funkcji
end macro_command
Składnia
Stałe i zmienne
Stałe
Stałe są wartościami stałymi i mogą być bezpośrednio zapisywane w instrukcjach. Dostępne są następujące formaty:
Typ | Uwaga | Przykład |
|---|---|---|
Dziesiętne | 345, -234, 0, 23456 | |
Hexadecymalne | Musi rozpoczynać się od przedrostka 0x | 0x3b, 0xffff, 0x237 |
ASCII | Pojedynczy znak musi być umieszczony w apostrofach, a ciąg znaków musi być umieczony pomiędzy cudzysłowami. | 'a', "data", "name" |
Dyskretne | prawda, fałsz |
Poniżej przykład wykorzystania stałych:
macro_command main()
short A, B // A i B są zmiennymi
A = 1234
B = 0x12 // 1234 i 0x12 są stałymi
end macro_command
Zmienne
Zmienne to nazwy reprezentujące wartości. Wartości można zmieniać, gdy zmienna jest modyfikowana przez instrukcje.
Zasady nazewnictwa dla zmiennych
Nazwa zmiennej musi zaczynać się od litery.
Niedozwolone są nazwy zamiennych dłuższe niż 32 znaki
Istnieją zarezerwowane słowa, które nie mogą być użyte jako nazwy zmiennych.
Istnieje 8 różnych typów zmiennych, 5 dla danych ze znakiem oraz 3 typy dla zmiennych bez znaku:
Typ | opis | Wartości |
|---|---|---|
bool (boolean) | 1 bit (dyskretna) | 0, 1 |
char (character) | 8 bits (bajt) | +127 to -128 |
short (short integer) | 16 bits (słowo) | +32767 to -32768 |
int (integer) | 32 bits (podwójne słowo) | +2147483647to -2147483648 |
float (floating point) | 32 bits (podwójne słowo) | |
unsigned char | 8 bits (bajt) | 0 to 255 |
unsigned short | 16 bits (słowo) | 0 to 65535 |
unsigned int | 32 bits (podwójne słowo) | 0 to 4,294,967,295 |
Deklaracja zmiennych
Zmienne muszą być zadeklarowane przed ich użyciem w programie makro. Aby zadeklarować zmienną, należy podać typ przed nazwą zmiennej.
Przykład:
int a
short b, przełącznik
float ciśnienie
unsigned short c
Deklaracja tablicy
Makra obsługują tablice jednowymiarowe (z indeksem zerowy). Aby zadeklarować tablicę zmiennych, należy podać typ i nazwę zmiennej, a następnie liczbę zmiennych w tablicy w nawiasie "[]". Długość tablicy może wynosić od 1 do 4096. (Makra obsługują maksymalnie 4096 zmiennych w programie makro).
Przykład:
int a[10]
short b[20], przełącznik [30]
float ciśnienie [15]
Najniższy indeks tablicy to 0, a najwyższy = rozmiar tablicy – 1.
Przykład:
char data [100] // rozmiar tablicy 100
W tym przypadku najniższy indeks to 0 a najwyższy to 99 (=100-1)
Inicjalizacja zmiennej i tablicy
Istnieją dwa sposoby inicjowania zmiennych:
Przez deklarację za pomocą operatora przypisania (=)
Przykład:
int a
float b[3]
a = 10
b[0] = 1
Podczas deklarowania zmiennej
char a = '5', b = 9
Deklaracja tablic jest szczególnym przypadkiem. Całą tablicę można zainicjować podczas deklaracji, zamykając oddzielone przecinkami wartości wewnątrz nawiasów klamrowych "{}". Przykład:
float data[4] = {11, 22, 33, 44} // wartość w indeksie[0] to 11, w indeksie[1] to 22….
Operatory
Operatory służą do określania sposobu obliczania wartości zmiennych.
Operator | Opis | Przykład |
|---|---|---|
= | Operator przypisania | ciśnienie = 10 |
Operacja matematyczna | Opis | Przykład |
|---|---|---|
+ | Dodawanie | A = B + C |
- | Odejmowanie | A = B – C |
* | Mnożenie | A = B * C |
/ | Dzielenie | A = B / C |
% | Modulo (reszta z dzielenia) | A = B % 5 |
Domyślnie uważa się, że liczby całkowite (1, 2,3..etc) mają typ danych całkowitych; dlatego też, gdy dzielenie odbywa się z udziałem dwóch liczb całkowitych, w których wynik powinien mieć punkt dziesiętny, część dziesiętna zostanie usunięta. Aby temu zapobiec, dodaj przecinek lub kropkę do wartości zmiennoprzecinkowej, 0. (1.0, 2.0, 3.0 ... itd.)..
Przykład:
A = 3 / 2 = 1 » 3 i 2 są liczbami całkowitymi, dlatego wynik również jest liczą całkowitą.
B = 3 / 2.0 = 1.5 » 3 jest liczbą całkowitą 2.0 jest liczbą zmiennoprzecinkową, dlatego wynik jest również wartością zmiennoprzecinkową.
C = 3.0 / 2 = 1.5 » 3.0 jest liczbą zmiennoprzecinkową, 2 jest liczbą całkowitą, wynik jest również wartością zmiennoprzecinkową.
Operatory porównań | Opis | Przykład |
|---|---|---|
< | Mniejższe niż | if A < 10 then B = 5 |
<= | Mniejsze, bądź równe | if A <= 10 then B = 5 |
> | Większe niż | if A > 10 then B = 5 |
>= | Większe, bądź równe | if A >= 10 then B = 5 |
== | Równe | if A == 10 then B = 5 |
<> | Różne | if A <> 10 then B = 5 |
Operacje logiczne | Opis | Przykład |
|---|---|---|
and | Logiczny AND | if A < 10 and B > 5 then C = 10 |
or | Logiczny OR | if A >= 10 or B > 5 then C = 10 |
xor | Logiczny Exclusive OR | if f A xor 256 then B = 5 |
not | Logiczny NOT | if not A then B = 5 |
Operatory przesunięcia i operacje na bitach są używane do manipulowania bitami zmiennych całkowitych ze znakiem i bez znaku. Operatory te działają na bitach zaczynając od lewej do prawej strony..
Operacje przesunięcia | Description | Example |
|---|---|---|
<< | Przesuwa bity z wskazanego słowa B o określoną liczbę bitów (8) w lewą stronę i zapisuje do A | A = B << 8 |
>> | Przesuwa bity z wskazanego słowa B o określoną liczbę bitów (8) w prawą stronę i zapisuje do A | A = B >> 8 |
Operatory bitowe | Opis | Przykład |
|---|---|---|
& | Operator bitowy AND | A = B & 0xf |
| | Operator bitowy OR | A = B | C |
^ | Operator bitowy XOR | A = B ^ C |
~ | Kod uzupełnień do jedności | A = ~B |
Priorytety wszystkich operatorów
Priorytet wykonywania wszystkich jest następujący:
Operacje w nawiasie są przeprowadzane najpierw
Operacje arytmetyczne
Operacje przesynięcia, lub operacje z operatorami bitowymi
Porównania
Logiczne operacje
Przypisanie
Zarezerwowane słowa kluczowe
Następujące słowa kluczowe są zarezerwowane dla systemu. Te słowa nie mogą być użyte jako zmienna, tablica lub nazwy funkcji.
+, -, *, /, %, >=, >, <=, <, <>, ==, and, or, xor, not, <<, >>,=, &, |, ^, ~
exit, macro_command, for, to, down, step, next, return, bool, short, int, char, float, void, if, then, else, break, continue, set, sub, end, while, wend, prawda, fałsz
SQRT, CUBERT, LOG, LOG10, SIN, COS, TAN, COT, SEC, CSC, ASIN, ACOS, ATAN, BIN2BCD, BCD2BIN, DEC2ASCII, FLOAT2ASCII, HEX2ASCII, ASCII2DEC, ASCII2FLOAT, ASCII2HEX, FILL, RAND, DELAY, SWAPB, SWAPW, LOBYTE, HIBYTE, LOWORD, HIWORD, GETBIT, SETBITON, SETBITOFF, INVBIT, ADDSUM, XORSUM, CRC, INPORT, OUTPORT, POW, GetCnvTagArrayIndex, GetError, GetData, GetDataEx, SetData, SetDataEx, SetRTS, GetCTS, Beep, SYNC_TRIG_MACRO, ASYNC_TRIG_MACRO, TRACE, FindDataSamplingDate, FindDataSamplingIndex, FindEventLogDate, FindEventLogIndex
StringGet, StringGetEx, StringSet, StringSetEx, StringCopy, StringMid, StringDecAsc2Bin, StringBin2DecAsc, StringDecAsc2Float, StringFloat2DecAsc, StringHexAsc2Bin, StringBin2HexAsc, StringLength, StringCat, StringCompare, StringCompareNoCase, StringFind, StringReverseFind, StringFindOneOf, StringIncluding, StringExcluding, StringToUpper, StringToLower, StringToReverse, StringTrimLeft, StringTrimRight, StringInsert, String2Unicode
Wyrażenia
Definicja zmiennych
Definicja zmiennych i tablic - składnia jest następująca:
矩形 1149, Pole tekstowe
Określa zmienną o nazwie "nazwa" i typie "typ".
Przykład:
int A // definicja zmiennej integer o nazwie A
矩形 1150, Pole tekstowe
Określa tablicę o nazwie "nazwa" i rozmiarze określoną przez "stałą" i typu "typ".
Przykład:
int B[10] // definicja jednowymiarowej tablicy integer-ów B rozmiarze 10
Przypisania
Instrukcjea przypisania używa operatora przypisania do przenoszenia danych z wyrażenia po prawej stronie operatora do zmiennej po jego lewej stronie. Wyrażenie to kombinacja zmiennych, stałych i operatorów, które pozwalają na uzyskania danej wartości.
矩形 1151, Pole tekstowe
Przykład
A = 2 gdzie do zmiennej A zostaje przypisana wartość 2
Pętle logiczne
Pętle logiczne wykonują akcje w zależności od warunku wyrażenia logicznego
Składnia wygląda następująco:
Format jednoliniowy
矩形 1152, Pole tekstowe
Przykład:
if a == 2 then
b = 1
else
b = 2
end if
Format blokowy
矩形 1153, Pole tekstowe
Przykład:
if a == 2 then
b = 1
else if a == 3 then
b = 2
else
b = 3
end if
Opis składni
if | Musi być użyty do rozpoczęcia pętli. |
|---|---|
<Warunek> | Wymagany. Jeśli jest spełniony zostaje wykonane wyrażenie |
then | Poprzedza instrukcje do wykonania, jeśli <Warunek> zostanie spełniony. |
[Wyrażenie] | Jest opcjonalny w formacie blokowym, ale konieczny w formacie jednoliniowym, bez opcji użycia opcji else. Wyrażenie zostanie wykonana, gdy <Warunek> jest spełniony. |
else if | Opcjonalny. Instrukcja else if zostanie wykonana, gdy <Warunek-n> zostanie spełniony. |
<Wyrażenie-n> | Opcjonalny. Działa na tej samej zasadzie co <Wyrażenie> |
else | Opcjonalny. Wyrażenie występujące po else zostanie wykonane, gdy <Warunek> i < Warunek -n> nie zostaną spełnione. |
end if | Musi być użyty do zakończenia pętli. |
Pętle wyboru
Pętla select-case może być używana na tej samej zasadzie jak użycie wielu instrukcji if-else i wykonywać wybrane akcje w zależności od wartości danej zmiennej. Po znalezieniu dopasowanej wartości wszystkie wyrażenia zostaną wykonane, dopóki nie zostanie spełniona instrukcja break. Składnia jest następująca:
Format bez domyślnego przypadku
矩形 1154, Pole tekstowe
Przykład:
Select Case A
Case 1
b=1
break
end Select
Format z domyślnym przypadkiem (Case else)
矩形 1155, Pole tekstowe
Przykład:
Select Case A
Case 1
b=1
break
Case else
b=0
break
end Select
Wiele przypadków w tym samym bloku
矩形 1156, Pole tekstowe
Przykład:
Select Case A
Case 1
break
Case 2
b=2
break
Case 3
b=3
break
end Select
Opis składni
Select Case | Musi być użyty do rozpoczęcia pętli. |
|---|---|
[zmienna] | Wymagany. Wartość tej zmiennej zostanie porównana z wartością każdego przypadku. |
Case else | Opcjonalny. Reprezentuje domyślny przypadek. Jeśli żaden z wcześniejszych przypadków nie zostanie spełniony, zostanie wykonane wyrażenie z domyślnego przypadku. Jeśli nie ma domyślnego przypadku i żaden inny przypadek nie zostanie spełniony program przejdzie bezpośrednio do końca pętli select-case. |
break | Opcjonalny. Pętla będzie wykonywana, dopóki nie zostanie osiągnięte polecenie przerwania. Jeśli polecenie przerwania nie jest używane, program kontynuuje wykonywanie następnego wyrażanie, aż do osiągnięcia polecenia końcowego. |
end Select | Musi być użyty do zakończenia pętli. |
Pętle wielokrotne
Iteracyjne pętle i powtarzające zadania w zależności od stanu. Istnieją dwa rodzaje instrukcji iteracyjnych.
Pętla for-next
Pętla for-next jest uruchamiana dla określonej liczby iteracji. Zmienna jest używana jako licznik wykonania pętli i sprawdzania warunków końcowych. Można ją wykorzystać w celu wykonywania stałej liczby pętli. Składnia jest następująca:
矩形 1157, Pole tekstowe
Or
矩形 1158, Pole tekstowe
Przykład:
for a = 0 to 10 step 2
b = a
next a
Opis składni
for | Musi być użyty do rozpoczęcia pętli |
|---|---|
[licznik] | Wymagany. Wartość zmiennej jest wykorzystywana do porównania, czy pętla została wykonana daną ilość pętli. |
<wartość_startowa> | Wymagany. Wartość początkowa [icznika |
to/down | Wymagany. Określa, czy wartość określona w polu <krok> zwiększa lub zmniejsza wartość licznika. "to" zwiększa wartość licznika, a "down" zmniejsza wartość licznika o wartość kroku. |
<wartość_końcowa> | Wymagany. Wykorzystywany do porównywania z wartością licznika, jeśli jego wartość jest większa od wartości końcowej program makra wychodzi z pętli. |
step | Opcjonalny. Pozwala na określenie więcej niż jednej wartości kroku. |
[krok] | Opcjonalny. Krok służy do zwiększania / zmniejszania wartości licznika. Można go pominąć, wtedy wartość domyślna kroku wynosi 1. |
[wyrażenie] | Opcjonalny. Wyrażenie wykonywane, gdy warunek dla petli jest spełniony. Można używać zagnieżdżonych pętli. |
next | Wymagany. |
[licznik] | Opcjonalny. Jest używany podczas zagnieżdżania kolejnych pętli. |
Pętla while-wend
Pętla while-wend nie ma określonej liczby iteracji. Zmienna jest używana do sprawdzania warunków końcowych. Gdy warunek jest spełniony, pętla jest wykonywana, do momentu, gdy warunek przestanie być spełniany. Składnia jest następująca.
矩形 1159, Pole tekstowe
Przykład:
while a < 10
a = a + 10
wend
Opis składni
while | Musi być użyty do rozpoczęcia pętli. |
|---|---|
continue | Wymagany. Warunek sprawdzający. Gdy jest spełniony, pętla będzie wykonywana. Kiedy przestanie być spełniany, pętla zakończy wykonywanie. |
return [wartość] | Wyrażenie do wykonania, gdy warunek jest spełniony. |
wend | Musi być użyty do zakończenia pętli. |
Inne komendy sterujące
break | Używane w pętlach for-next i while-wend. Instrukcja powoduje natychmiastowe przejście do końca pętli iteracyjnej. |
|---|---|
continue | Używane w pętlach for-next i while-wend. Kończy bieżącą iterację pętli i rozpoczyna następną. |
return | Polecenie return wewnątrz głównego bloku makra powoduje zatrzymanie się wykonywanie programu w dowolnym miejscu. Program przechodzi natychmiast do końca głównego bloku. |
Bloki funkcyjne
Bloki funkcyjne są wykorzystywane do redukcji powtarzających się fragmentów kodów. Muszą one być zdefiniowane przed wykorzystaniem w programie, obsługują każdy typ zmiennej i instrukcji. Blok funkcyjny można wywołać, umieszczając jego nazwę, a następnie parametry w nawiasach. Po wykonaniu bloku funkcyjnego zwraca on wartość do funkcji wywołującej, w której jest używana jako wartość lub warunek. Nie jest wymagane, aby blok funkcyjny zwracał wartość. Parametry mogą być również pomijane w definicji funkcji funkcja nie musi pobierać żadnych parametrów od programu wywołującego blok. Składnia jest następująca:
Definicja funkcji z zwracaniem wartości
矩形 1160, Pole tekstowe
Przykład:
sub int Add(int x, int y)
int result
result = x +y
return result
end sub
macro_command main()
int a = 10, b = 20, sum
sum = Add(a, b)
end macro_command
lub:
sub int Add()
int result, x=10, y=20
result = x +y
return result
end sub
macro_command main()
int sum
sum = Add()
end macro_command
Definicja funkcji bez zwracania wartości
矩形 1161, Pole tekstowe
Przykład:
sub Add(int x, int y)
int result
result = x +y
end sub
macro_command main()
int a = 10, b = 20
Add(a, b)
end macro_command
lub:
sub Add()
int result, x=10, y=20
result = x +y
end sub
macro_command main()
Add()
end macro_command
Opis składni
sub | Musi być użyty jako rozpoczęcia bloku funkcyjnego |
|---|---|
type | Opcjonalny. Jest to typ danych zwracanych przez funkcję. Blok funkcyjny nie zawsze musi zwracać wartość. |
(parametry) | Opcjonalny. Parametry zawierają wartości, które są przekazywane do funkcji. Przekazane parametry muszą mieć zadeklarowany typ w polu parametrów i przypisaną nazwę zmiennej. Na przykład: sub int Moja_funkcja (int x, int y). x i y będą liczbami całkowitymi przekazanymi do funkcji. Funkcję tą można wywołać na przykład: ret = Moja_funkcja (456, ciśnienie) gdzie "ciśnienie" musi być liczbą całkowitą zgodnie z definicją funkcji. Należy zauważyć, że funkcja wywołująca może przekazywać zmienne do funkcji. Po wykonaniu tej funkcji wartości całkowite zostają przypisane do zmiennej "ret". |
Deklaracja zmiennych lokalnych | Zmienne, które są używane w bloku funkcyjnym, muszą być zadeklarowane jako pierwsze. Są to dodatkowe zmienne. W powyższym przykładzie x i y są dodatkowymi zmiennymi, z których można korzystać. Zmienne globalne są również dostępne w bloku funkcyjnym. |
[Wyrażenie] | Funkcja, która ma zostać wykonana. |
[return [wartość]] | Opcjonalny. Służy do zwracania wartości do instrukcji wywołującej. Wartość może być stałą lub zmienną. Zwrócenie wartości również kończy działanie bloku funkcyjnego. Blok funkcyjny nie musi zwracać wartości, ale gdy korzystamy z składni funkcji z zwracaniem wartości, wyrażenie to jest niezbędne. |
end sub | Wykorzystywany do zakończenia bloku funkcyjnego. |
Zaimplementowane bloki funkcyjne
EasyBuilder Pro ma wiele wbudowanych funkcji, które można wykorzystać w programie makra.
Funkcje matematyczne
Nazwa | SQRT |
|---|---|
Składnia | SQRT(zrodlo, wynik) |
Opis | Oblicza pierwiastek kwadratowy ze źródła i zapisuje otrzymaną wartość do wyniku. Źródło może być stałą lub zmienną. Wynik musi być zmienną. Źródło musi być wartością nieujemną. |
Przykład | macro_command main() float zrodlo, wynik SQRT(15, wynik) zrodlo = 9.0 SQRT(zrodlo, wynik)// wynik wynosi 3.0 end macro_command |
Nazwa | CUBERT |
|---|---|
Składnia | CUBERT(zrodlo, wynik) |
Opis | Oblicza pierwiastek sześcienny ze źródła i zapisuje otrzymaną wartość do wyniku. Źródło może być stałą lub zmienną. Wynik musi być zmienną. Źródło musi być wartością nieujemną. |
Przykład | macro_command main() float zrodlo, wynik CUBERT (27, wynik) // wynik wynosi 3.0 zrodlo = 27.0 CUBERT(zrodlo, wynik)// wynik wynosi 3.0 end macro_command |
Nazwa | POW |
|---|---|
Składnia | POW(zrodlo1, zrodlo2, wynik) |
Opis | Oblicza potęgę liczby zrodlo1 o wykładniku zrodlo2. zrodlo1 i zrodlo2 mogą być zmiennymi lub stałymi wartościami nieujemnymi. wynik musi być zmienną. |
Przykład | macro_command main() float y, wynik y = 0.5 POW (25, y, wynik) // wynik = 5 end macro_command |
Nazwa | SIN |
|---|---|
Składnia | SIN(zrodlo, wynik) |
Opis | Oblicza sinus wartości określonej w zmiennej zrodlo wyrażonej w stopniach. Źródło może być stałą lub zmienną. Wynik musi być zmienną |
Przykład | macro_command main() float zrodlo, wynik SIN(90, wynik)// wynik = 1 zrodlo = 30 SIN(zrodlo, wynik)// wynik =s 0.5 end macro_command |
Nazwa | COS |
|---|---|
Składnia | COS(zrodlo, wynik) |
Opis | Oblicza cosinus wartości określonej w zmiennej zrodlo wyrażonej w stopniach. Źródło może być stałą lub zmienną. Wynik musi być zmienną |
Przykład | macro_command main() float zrodlo, wynik COS(90, wynik)// wynik = 0 zrodlo = 60 GetData(zrodlo, "Local HMI", LW, 0, 1) COS(zrodlo, wynik)// wynik = 0.5 end macro_command |
Nazwa | TAN |
|---|---|
Składnia | TAN(zrodlo, wynik) |
Opis | Oblicza tangens wartości określonej w zmiennej zrodlo wyrażonej w stopniach. Źródło może być stałą lub zmienną. Wynik musi być zmienną. |
Przykład | macro_command main() float zrodlo, result TAN(45, wynik)// wynik = 1 zrodlo = 60 TAN(zrodlo, wynik)// wynik = 1.732 end macro_command |
Nazwa | COT |
|---|---|
Składnia | COT(zrodlo, wynik) |
Opis | Oblicza cotangens (kotangens) wartości określonej w zmiennej zrodlo wyrażonej w stopniach. Źródło może być stałą lub zmienną. Wynik musi być zmienną. |
Przykład | macro_command main() float zrodlo, wynik COT(45, wynik)// wynik = 1 zrodlo = 60 COT(zrodlo, wynik)// wynik = 0.5774 end macro_command |
Nazwa | SEC |
|---|---|
Składnia | SEC(zrodlo, wynik) |
Opis | Oblicza secans (sekans) wartości określonej w zmiennej zrodlo wyrażonej w stopniach. Źródło może być stałą lub zmienną. Wynik musi być zmienną. |
Przykład | macro_command main() float zrodlo, wynik SEC(45, wynik)// wynik = 1.414 zrodlo = 60 SEC(zrodlo, wynik)// jeśli źródło wynosi 60, wynik = 2 end macro_command |
Nazwa | CSC |
|---|---|
Składnia | CSC(zrodlo, result) |
Opis | Oblicza cosecans (kosekans) wartości określonej w zmiennej zrodlo wyrażonej w stopniach. Źródło może być stałą lub zmienną. Wynik musi być zmienną. |
Przykład | macro_command main() float zrodlo, wynik CSC(45, wynik)// wynik = 1.414 zrodlo = 30 CSC(zrodlo, wynik)// wynik = 2 end macro_command |
Nazwa | ASIN |
|---|---|
Składnia | ASIN(zrodlo, wynik) |
Opis | Oblicza arcus sinus wartości określonej w zmiennej zrodlo wyrażonej w stopniach. Źródło może być stałą lub zmienną. Wynik musi być zmienną. |
Przykład | macro_command main() float zrodlo, wynik ASIN(0.8660, zrodlo)// wynik = 60 zrodlo = 0.5 ASIN(zrodlo, wynik)// wynik = 30 end macro_command |
Nazwa | ACOS |
|---|---|
Składnia | ACOS(zrodlo, wynik) |
Opis | Oblicza arcus cosinus wartości określonej w zmiennej zrodlo wyrażonej w stopniach. Źródło może być stałą lub zmienną. Wynik musi być zmienną. |
Przykład | macro_command main() float zrodlo, wynik ACOS(0.8660, wynik)// wynik = 30 zrodlo = 0.5 ACOS(zrodlo, wynik)// wynik = 60 end macro_command |
Nazwa | ATAN |
|---|---|
Składnia | ATAN(zrodlo, wynik) |
Opis | Oblicza arcus tanges wartości określonej w zmiennej zrodlo wyrażonej w stopniach. Źródło może być stałą lub zmienną. Wynik musi być zmienną. |
Przykład | macro_command main() float zrodlo, wynik ATAN(1, wynik)// wynik = 45 zrodlo = 1.732 ATAN(zrodlo, wynik)// wynik = 60 end macro_command |
Nazwa | LOG |
|---|---|
Składnia | LOG (zrodlo, wynik) |
Opis | Oblicza logarytm naturalny z liczby źródłowej. źródłem może być zmienna lub stała. wynik musi być zmienną. |
Przykład | macro_command main() float zrodlo = 100, wynik LOG (zrodlo, wynik)// wynik wynosi w przybliżeniu 4.6052 end macro_command |
Nazwa | LOG10 |
|---|---|
Składnia | LOG10(zrodlo, wynik) |
Opis | Logarytm dziesiętny (briggsowski) z liczby źródłowej. źródłem może być zmienna lub stała. wynik musi być zmienną. |
Przykład | macro_command main() float zrodlo = 100, wynik LOG10 (zrodlo, wynik) // wynik = 2 end macro_command |
Nazwa | RAND |
|---|---|
Składnia | RAND(wynik) |
Opis | Oblicza losową liczbę całkowitą i zapisuje do wyniku. wynik musi być zmienną. |
Przykład | macro_command main() short wynik RAND (wynik) // wynik nie jest stałą wartością, zmienia się z każdym wykonaniem makra. end macro_command |
Konwersja formatu danych
Nazwa | BIN2BCD |
|---|---|
Składnia | BIN2BCD(zrodlo, wynik) |
Opis | Konwertuje wartość z formatu binarnego (źródło) do formatu BCD (wynik). źródło może być stałą lub zmienną. wynik musi być zmienną. |
Przykład | macro_command main() short zrodlo, wynik BIN2BCD(1234, wynik)// wynik = 0x1234 zrodlo = 5678 BIN2BCD(zrodlo, wynik)// wynik = 0x5678 end macro_command |
Nazwa | BCD2BIN |
|---|---|
Składnia | BCD2BIN(zrodlo, wynik) |
Opis | Konwertuje wartość z formatu BCD (źródło) do formatu binarnego (wynik). źródło może być stałą lub zmienną. wynik musi być zmienną. |
Przykład | macro_command main() short zrodlo, wynik BCD2BIN(0x1234, wynik)// result is 1234 zrodlo = 0x5678 BCD2BIN(zrodlo, wynik)// result is 5678 end macro_command |
Nazwa | DEC2ASCII |
|---|---|
Składnia | DEC2ASCII(zrodlo, wynik [start], dlugosc) |
Opis | Konwertuje wartość dziesiętną (źródło) w ciąg znaków ASCII i zapisuje go w tablicy (wynik). „Dlugosc" reprezentuje długość ciągu znaków, a jednostka długości zależy od formatu wyniku, tzn. jeśli wyniku ma format "char" (rozmiar to bajt), a długość ciągu wynosi (bajt * dlugosc). Jeśli typem wyniku jest "short" (rozmiar jest słowem), długość łańcucha znaków wynosi (słowo * dlugosc) i tak dalej. Pierwszy znak jest wstawiany do tabeli o adresie: wynik[start], drugi znak do [start + 1], a ostatni znak do wyniku [start + (dlugosc -1)]. Zrodlo i dlugosc mogą być stałą lub zmienną. Wynik musi być zmienną, a start musi być stałą. |
Przykład | macro_command main() short zrodlo char wynik1[4] short wynik2[4] char wynik3[6] zrodlo= 5678 DEC2ASCII(zrodlo, wynik1[0], 4) // wynik1[0] = '5', wynik1[1] = '6', wynik1[2] = '7', wynik1[3] = '8' // długość łańcucha znaków(wynik1) to 4 bajty (= 1 * 4) DEC2ASCII(zrodlo, wynik2[0], 4) // wynik2[0] = '5', wynik2 [1] = '6', wynik2 [2] = '7', wynik2 [3] = '8' // długość łańcucha znaków (wynik2) wynosi 8 bajtów (= 2 * 4) zrodlo =-123 DEC2ASCII(zrodlo, wynik3[0], 6) // wynik3[0] = '-', wynik3[1] = '0', wynik3[2] = '0', wynik3[3] = '1' // wynik3[4] = '2', wynik3[5] = '3' // długość łańcucha znaków (wynik3) to 6 bajtów (= 1 * 6) end macro_command |
Nazwa | HEX2ASCII |
|---|---|
Składnia | HEX2ASCII(zrodlo, wynik [start], dlugosc) |
Opis | Przekształca wartość heksadecymalną (zrodlo) na ciąg znaków ASCII zapisany w tablicy (wynik). „Dlugosc" reprezentuje długość ciągu znaków, a jednostka długości zależy od formatu wyniku, tzn. jeśli wyniku ma format "char" (rozmiar to bajt), a długość ciągu wynosi (bajt * dlugosc). Jeśli typem wyniku jest "short" (rozmiar jest słowem), długość łańcucha znaków wynosi (słowo * dlugosc) i tak dalej. Pierwszy znak jest wstawiany do tabeli o adresie: wynik[start], drugi znak do [start + 1], a ostatni znak do wyniku [start + (dlugosc -1)]. Zrodlo i dlugosc mogą być stałą lub zmienną. Wynik musi być zmienną, a start musi być stałą. |
Przykład | macro_command main() short zrodlo char wynik [4] zrodlo = 0x5678 HEX2ASCII (zrodlo, wynik [0], 4) // wynik [0] = '5', wynik [1] = '6', wynik [2] = '7', wynik [3] = '8' end macro_command |
Nazwa | FLOAT2ASCII |
|---|---|
Składnia | FLOAT2ASCII(zrodlo, wynik [start], dlugosc) |
Opis | Przekształca wartość zmiennoprzecinkową (zrodlo) na ciąg znaków ASCII zapisany w tablicy (wynik). „Dlugosc" reprezentuje długość ciągu znaków, a jednostka długości zależy od formatu wyniku, tzn. jeśli wyniku ma format "char" (rozmiar to bajt), a długość ciągu wynosi (bajt * dlugosc). Jeśli typem wyniku jest "short" (rozmiar jest słowem), długość łańcucha znaków wynosi (słowo * dlugosc) i tak dalej. Pierwszy znak jest wstawiany do tabeli o adresie: wynik[start], drugi znak do [start + 1], a ostatni znak do wyniku [start + (dlugosc -1)]. Zrodlo i dlugosc mogą być stałą lub zmienną. Wynik musi być zmienną, a start musi być stałą. |
Przykład | macro_command main() float zrodlo char wynik [4] zrodlo = 56.8 FLOAT2ASCII (zrodlo, wynik [0], 4) // wynik [0] = '5', wynik [1] = '6', wynik [2] = '.', wynik [3] = '8' end macro_command |
Nazwa | ASCII2DEC |
|---|---|
Składnia | ASCII2DEC(zrodlo[start], wynik, dlugosc) |
Opis | Przekształca ciąg znaków (źródło) w wartość dziesiętną zapisaną w zmiennej (wynik). Długość ciągu znaków określa zmienia „dlugosc". Pierwszy znak ciągu to zrodlo[start]. Zrodlo i dlugosc mogą być stałą lub zmienną. Wynik musi być zmienną, a start musi być stałą |
Przykład | macro_command main() char zrodlo [4] short wynik zrodlo [0] = '5' zrodlo [1] = '6' zrodlo [2] = '7' zrodlo [3] = '8' ASCII2DEC(zrodlo [0], wynik, 4) // wynik = 5678 end macro_command |
Nazwa | ASCII2HEX |
|---|---|
Składnia | ASCII2HEX (zrodlo[start], wynik, dlugosc) |
Opis | Przekształca ciąg znaków (źródło) w wartość heksadecymalną zapisaną w zmiennej (wynik). Długość ciągu znaków określa zmienia „dlugosc". Pierwszy znak ciągu to zrodlo[start]. Zrodlo i dlugosc mogą być stałą lub zmienną. Wynik musi być zmienną, a start musi być stałą. |
Przykład | macro_command main() char zrodlo [4] short result zrodlo [0] = '5' zrodlo [1] = '6' zrodlo [2] = '7' zrodlo [3] = '8' ASCII2HEX (zrodlo [0], wynik, 4) // wynik = 0x5678 end macro_command |
Nazwa | ASCII2FLOAT |
|---|---|
Składnia | ASCII2FLOAT(zrodlo[start], wynik, dlugosc) |
Opis | Przekształca ciąg znaków (źródło) w wartość zmiennoprzecinkową zapisaną w zmiennej (wynik). Długość ciągu znaków określa zmienia „dlugosc". Pierwszy znak ciągu to zrodlo[start]. Zrodlo i dlugosc mogą być stałą lub zmienną. Wynik musi być zmienną, a start musi być stałą. |
Przykład | macro_command main() char zrodlo [4] float result zrodlo [0] = '5' zrodlo [1] = '6' zrodlo [2] = '.' zrodlo [3] = '8' ASCII2FLOAT (zrodlo [0], wynik, 4) // wynik = 56.8 end macro_command |
Operacje na zmiennych
Nazwa | FILL |
|---|---|
Składnia | FILL(wynik [start], zadana, ilość) |
Opis | Ustawia określona ilość pierwszych elementy licząc do wartości start tablicy (wynik) na określoną wartość (zadana). Zrodlo i start musi być zmienną, a zadana może być stałą lub zmienną. |
Przykład | macro_command main() char wynik [4] char zadana FILL(wynik [0], 0x30, 4) // wynik [0] = 0x30, wynik [1] = 0x30, , wynik [2] = 0x30, , wynik [3] = 0x30 zadana = 0x31 FILL(wynik[0], zadana, 2) // wynik [0] = 0x31, wynik [1] = 0x31 end macro_command |
Nazwa | SWAPB |
|---|---|
Składnia | SWAPB(zrodlo, wynik) |
Opis | Zamienia pozycję w zmiennej zrodlo starszego bajtu i młodszego bajtu i zapisuje jako wynik 16-bitowy. Źródło może być stałą lub zmienną. Wynik musi być zmienną. |
Przykład | macro_command main() short zrodlo, wynik SWAPB(0x5678, wynik)// wynik = 0x7856 zrodlo = 0x123 SWAPB(zrodlo, wynik)// wynik = 0x2301 end macro_command |
Nazwa | SWAPW |
|---|---|
Składnia | SWAPW(zrodlo, wynik) |
Opis | Zamienia pozycję starszego i młodszego słowa w rejestrze 32-bitowym i zapisuje jako wynik 32-bitowy. Źródło może być stałą lub zmienną. Wynik musi być zmienną. |
Przykład | macro_command main() int zrodlo, wynik SWAPW (0x12345678, wynik)// wynik = 0x56781234 zrodlo = 0x12345 SWAPW (zrodlo, wynik)// wynik = 0x23450001 end macro_command |
Nazwa | LOBYTE |
|---|---|
Składnia | LOBYTE(zrodlo, wynik) |
Opis | Pobiera młodszy bajt 16-bitowej zmiennej zrodlo i zapisuje do zmiennej wynik. Źródło może być stałą lub zmienną. Wynik musi być zmienną. |
Przykład | macro_command main() short zrodlo, wynik LOBYTE(0x1234, wynik)// wynik = 0x34 zrodlo = 0x123 LOBYTE(zrodlo, wynik)// wynik = 0x23 end macro_command |
Nazwa | HIBYTE |
|---|---|
Składnia | HIBYTE(zrodlo, wynik) |
Opis | Pobiera starszy bajt 16-bitowej zmiennej zrodlo i zapisuje do zmiennej wynik. Źródło może być stałą lub zmienną. Wynik musi być zmienną. |
Przykład | macro_command main() short zrodlo, wynik HIBYTE(0x1234, wynik)// wynik = 0x12 zrodlo = 0x123 HIBYTE(zrodlo, wynik)// wynik = 0x01 end macro_command |
Nazwa | LOWORD |
|---|---|
Składnia | LOWORD(zrodlo, wynik) |
Opis | Pobiera młodsze słowo z 32-bitowej zmiennej zrodlo i zapisuje do zmiennej wynik. Źródło może być stałą lub zmienną. Wynik musi być zmienną. |
Przykład | macro_command main() int zrodlo, wynik LOWORD(0x12345678, wynik)// wynik = 0x5678 zrodlo = 0x12345 LOWORD(zrodlo, wynik)// wynik = 0x2345 end macro_command |
Nazwa | HIWORD |
|---|---|
Składnia | HIWORD(zrodlo, wynik) |
Opis | Pobiera starsze słowo z 32-bitowej zmiennej zrodlo i zapisuje do zmiennej wynik. Źródło może być stałą lub zmienną. Wynik musi być zmienną. |
Przykład | macro_command main() int zrodlo, wynik HIWORD(0x12345678, wynik)// wynik = 0x1234 zrodlo = 0x12345 HIWORD(zrodlo, wynik)// wynik = 0x0001 end macro_command |
Operacje na bitach
Nazwa | GETBIT |
|---|---|
Składnia | GETBIT(zrodlo, wynik, poz_bitu) |
Opis | Pobiera stan bitu z wyznaczonej pozycji (poz_bitu) w zmiennej (zrodlo) i zapisuje do zmiennej wynik. Wartość wyniku będzie wynosić 0 lub 1. Zrodlo i poz_bitu mogą być stałą lub zmienną. Wynik musi być zmienną. |
Przykład | macro_command main() int zrodlo, wynik short poz_bitu GETBIT(9, wynik, 3)// wynik = 1 zrodlo = 4 poz_bitu = 2 GETBIT(zrodlo, wynik, poz_bitu)// wynik = 1 end macro_command |
Nazwa | SETBITON |
|---|---|
Składnia | SETBITON(zrodlo, wynik, poz_bitu) |
Opis | Ustawia stan bitu z wyznaczonej pozycji (poz_bitu) w zmiennej (zrodlo) w stan ON i zapisuje zmienioną wartość do zmiennej wynik. Zrodlo i poz_bitu mogą być stałą lub zmienną. Wynik musi być zmienną.. |
Przykład | macro_command main() int zrodlo, wynik short poz_bitu SETBITON(1, wynik, 3)// wynik = 9 zrodlo = 0 poz_bitu = 2 SETBITON (zrodlo, wynik, poz_bitu)// wynik = 4 end macro_command |
Nazwa | SETBITOFF |
|---|---|
Składnia | SETBITOFF(zrodlo, wynik, poz_bitu) |
Opis | Ustawia stan bitu z wyznaczonej pozycji (poz_bitu) w zmiennej (zrodlo) w stan OFF i zapisuje zmienioną wartość do zmiennej wynik. Zrodlo i poz_bitu mogą być stałą lub zmienną. Wynik musi być zmienną. |
Przykład | macro_command main() int zrodlo, wynik short poz_bitu SETBITOFF(9, wynik, 3)// wynik is 1 zrodlo = 4 poz_bitu = 2 SETBITOFF(zrodlo, wynik, poz_bitu)// wynik is 0 end macro_command |
Nazwa | INVBIT |
|---|---|
Składnia | INVBIT(zrodlo, wynik, poz_bitu) |
Opis | Zmienia stan bitu z wyznaczonej pozycji (poz_bitu) w zmiennej (zrodlo) w stan przeciwny i zapisuje zmienioną wartość do zmiennej wynik. Zrodlo i poz_bitu mogą być stałą lub zmienną. Wynik musi być zmienną. |
Przykład | macro_command main() int zrodlo, wynik short poz_bitu INVBIT(4, wynik, 1)// wynik = 6 zrodlo = 6 poz_bitu = 1 INVBIT(zrodlo, wynik, poz_bitu)// wynik = 4 end macro_command |
Komunikacja
Nazwa | DELAY |
|---|---|
Składnia | DELAY(czas) |
Opis | Wstrzymuje wykonywanie bieżącego makra przez określony czas. Jednostka czasu (zmiennej czas) to milisekunda. Czas może być stałą lub zmienną. |
Przykład | macro_command main() int czas == 500 DELAY(100)// opóźnienie to 100 ms DELAY(czas)// opóźnienie to 500 ms end macro_command |
Nazwa | ADDSUM |
|---|---|
Składnia | ADDSUM(zrodlo[start], wynik, liczba) |
Opis | Dodaje elementy tablicy (zrodlo) począwszy od elementu o numerze start do elementu o numerze start+liczba-1, aby wygenerować sumę kontrolną. Wprowadza sumę kontrolną do wyniku. Wynik musi być zmienną. Liczba jest ilością zgromadzonych elementów i może być stałą lub zmienną. |
Przykład | macro_command main() char zrodlo[5] short wynik data[0] = 0x1 data[1] = 0x2 data[2] = 0x3 data[3] = 0x4 data[4] = 0x5 ADDSUM(zrodlo[0], wynik, 5)// wynik to 0xf end macro_command |
Nazwa | XORSUM |
|---|---|
Składnia | XORSUM(zrodlo[start], wynik, liczba) |
Opis | Używa metody wykluczania do obliczania sumy kontrolnej z tablicy (zrodlo) począwszy od elementu o numerze start do elementu o numerze start+liczba-1. Wprowadza sumę kontrolną do wyniku. Wynik musi być zmienną. Liczba jest ilością zgromadzonych elementów i może być stałą lub zmienną. |
Przykład | macro_command main() char zrodlo [5] = {0x1, 0x2, 0x3, 0x4, 0x5} short wynik XORSUM(zrodlo [0], wynik, 5)// wynik = 0x1 end macro_command |
Nazwa | BCC |
|---|---|
Składnia | BCC(zrodlo[start], wynik, liczba) |
Opis | Używa metody alternatywy wykluczającej (XOR) do obliczania sumy kontrolnej z tablicy (zrodlo) począwszy od elementu o numerze start do elementu o numerze start+liczba-1. Wprowadza sumę kontrolną do wyniku. Wynik musi być zmienną. Liczba jest ilością zgromadzonych elementów i może być stałą lub zmienną. |
Przykład | macro_command main() char zrodlo [5] = {0x1, 0x2, 0x3, 0x4, 0x5} char wynik BCC(zrodlo [0], wynik, 5) // wynik = 0x1 end macro_command |
Nazwa | CRC |
|---|---|
Składnia | CRC(zrodlo[start], 16bit_CRC*, liczba*) |
Opis | Oblicza 16-bitową wartość CRC zmiennych z tablicy (zrodlo) począwszy od elementu o numerze start do elementu o numerze start+liczba-1. Wstawia 16-bitowy CRC do zmiennej 16bit_CRC. Wynik musi być zmienną. Liczba jest ilością zgromadzonych elementów i może być stałą lub zmienną. |
Przykład | macro_command main() char zrodlo [5] = {0x1, 0x2, 0x3, 0x4, 0x5} short 16bit_CRC CRC(zrodlo [0], 16bit_CRC, 5)// 16bit_CRC = 0xbb2a end macro_command |
Nazwa | OUTPORT |
|---|---|
Składnia | OUTPORT(zrodlo[start], nazwa_urzadzenia, liczba) |
Opis | Wysyła określone dane począwszy od zrodlo[start] do zrodlo[start + liczba -1] do PLC przez port COM lub Ethernet. nazwa_urzadzenia jest nazwą urządzenia zdefiniowanego w tabeli urządzeń, a urządzenie musi być urządzeniem typu "Free Protocol". liczba to ilość wysłanych danych i może być stała lub zmienna. |
Przykład | Aby użyć funkcji OUTPORT, najpierw należy utworzyć urządzenie "Free Protocol" w następujący sposób: |
Składnia | INPORT2(odpowiedz[start], nazwa_urzadzenia, liczba, czas) |
|---|---|
Opis | Odczytuje dane z portu komunikacyjnego (port COM lub port Ethernet). Odczytane dane zostaną zapisane w zmiennej odpowiedz. Nazwa_urzadzenia jest tak samo definiowana jak w funkcji OUTPORT. Liczba przechowuje informację na temat długość otrzymanego wektora danych, musi to być zmienna. Długość całkowita zmiennej liczba nie może przekraczać rozmiaru odpowiedzi. Czas (w milisekundach) może być stałą lub zmienną. Po odczytaniu danych, jeśli nie ma nadchodzących danych w wyznaczonym przedziale czasu, funkcja zwraca wartość. |
Przykład | macro_command main() short odpowiedz[6], liczba, czas=20 INPORT2(odpowiedz [0], "Free Protocol", liczba, czas) // czas wyrażony w milisekundach if liczba > 0 then SetData(odpowiedz[0], "Local HMI", LW, 0, 6) // funkcja wysyła odpowiedź do LW 0end if end macro_command |
Nazwa | INPORT3 |
|---|---|
Składnia | INPORT3(odpowiedz[start], nazwa_urzadzenia, dlugosc_odpowiedzi, liczba) |
Opis | Odczytuje dane z portu komunikacyjnego (port COM lub port Ethernet). Odczytane dane zostaną zapisane w zmiennej odpowiedz. Można określić ilość danych do odczytania. Dane, które nie są jeszcze odczytywane, będą przechowywane w pamięci buforowej HMI dla następnej operacji odczytu, aby zapobiec utracie danych. Nazwa_urzadzenia jest tak samo definiowana jak w funkcji OUTPORT. read_count przechowuje długość danych odczytanych za każdym razem.Liczba przechowuje informację na temat długość otrzymanego wektora danych, musi to być zmienna. Długość całkowita zmiennej liczba nie może przekraczać rozmiaru odpowiedzi |
Przykład | macro_command main() short odpowiedz[6], dlugosc_odpowiedzi INPORT3(odpowiedz [0], "Free Protocol", 6, dlugosc_odpowiedzi) // odczyt 6 słów if dlugosc_odpowiedzi >= 6 then SetData(odpowiedz [0], "Local HMI", LW, 0, 6) // przypisanie wartości z zmiennej odpowiedz do wektora 6 zmiennych począwszy od LW0 end if end macro_command |