18

  1. Makra

Ten rozdział opisuje składnię, metody programowania i użycie poleceń w makrach..




  1. 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.


  1. 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.

  1. Należy otworzyć edytor makr; po lewej stronie obszaru edycji będą widoczne numery linii.


  1. 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.


  1. 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.


  1. 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).



  1. Zaznacz słowo w edytorze, aby kopiować lub wyciąć. Po wykonaniu polecenia kopiuj lub wytnij włączona zostaje funkcja wklej.


  1. Użyj opcji  zaznacz wszystko, aby zaznaczyć całą treść w obszarze edycji.


  1. 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

群組 1129, Obiekt zgrupowany


  • Opcja usuń wszystkie zaznaczenia spowoduje usunięcie wszystkich znaczników.

  1. 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

    群組 1133, Obiekt zgrupowany


  2. Aby rozwinąć wszystkie zwinięte kody można nacisnąć prawym przyciskiem i wybrać opcję rozwiń wszystkie zwinięcia.

群組 1136, Obiekt zgrupowany

群組 1136, Obiekt zgrupowany



  1. Fragment kodu zawarty pomiędzy następującymi słowami kluczowymi nazywane są "blokiem" kodu makr:

  • Blok kodu: sub – end sub

  • Pętle:

  1. for – next

  2. while – wend

  • Wyrażenia logiczne:

  1. if – end if

  • Opcje wyboru: select case – end select

  1. 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.



  1. Edytor makro pozwala na wykorzystanie funkcji znajdź i zamień.


  1. Gdy zaznaczone jest opcja wykonywanie cykliczne, makro jest  uruchomiane okresowo.



  1. 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

群組 1144, Obiekt zgrupowany


  1. Jeśli wybrano opcję wykonaj jednokrotnie, po uruchomieniu panela, po włączeniu panela HMI makro wykona się jeden raz.


  1. 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

矩形 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

  1. Składnia

  2. Stałe i zmienne

  3. 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

  1. 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….

  1. 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:

  1. Operacje w nawiasie są przeprowadzane najpierw

  2. Operacje arytmetyczne

  3. Operacje przesynięcia, lub operacje z operatorami bitowymi

  4. Porównania

  5. Logiczne operacje

  6. 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

  1. Wyrażenia

  2. Definicja zmiennych

Definicja zmiennych i tablic - składnia jest następująca:

矩形 1149, Pole tekstowe

矩形 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

矩形 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

  1. 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

矩形 1151, Pole tekstowe


Przykład

A = 2 gdzie do zmiennej A zostaje przypisana wartość 2

  1. 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

矩形 1152, Pole tekstowe



Przykład:

if a == 2 then

b = 1

else

b = 2

end if


Format blokowy

矩形 1153, Pole tekstowe

矩形 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.

  1. 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

矩形 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

矩形 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

矩形 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.

  1. Pętle wielokrotne

Iteracyjne pętle i powtarzające zadania w zależności od stanu. Istnieją dwa rodzaje instrukcji iteracyjnych.

  1. 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

矩形 1157, Pole tekstowe


Or

矩形 1158, Pole tekstowe

矩形 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.

  1. 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

矩形 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.

  1. 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.

  1. 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

矩形 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

矩形 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.

  1. Zaimplementowane bloki funkcyjne

EasyBuilder Pro ma wiele wbudowanych funkcji, które można wykorzystać w programie makra.

  1. 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 zrodlo2zrodlo1 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

  1. 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



  1. 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

  1. 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

  1. 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: 

 Urządzenie nosi nazwę "Modbus". Parametry portu zależą od ustawień dla tego urządzenia. (obecne ustawienie to "19200, E, 8, 1") Poniżej znajduje się przykład wykonania akcji zapisywania pojedynczej zmiennej bitowej (SET ON) na urządzeniu Modbus.  macro_command main()   char komenda[32] short adres, suma_kontrolna  FILL(komenda[0], 0, 32)//  inicjalizacja komend  command[0] = 0x1//  numer stacji command[1] = 0x5//  kod funkcji : Write Single Coil  adres = 0 HIBYTE(adres, komenda[2]) LOBYTE(adres, komenda[3])  komenda [4] = 0xff//  wymuszenie ustawienia bitu w stan ON komenda [5] = 0  CRC(komenda [0], suma_kontrolna, 6)   LOBYTE(suma_kontrolna, komenda[6]) HIBYTE(suma_kontrolna, komenda[7])  //  wysłanie komendy "Write Single Coil"  OUTPORT(komenda[0], "MODBUS", 8)  end macro_command


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