Az s40 PLC Programozasi Nyelv Elemkeszletenek Ismertetese PDF

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 159

Forrs: http://www.doksi.

hu

Az S40 PLC-programozsi nyelv


(IEC1131-3 kompatibilis)
elemkszletnek ismertetse

programstruktra
adattpusok, vltozk deklarlsa
utastskszlet
fggvnyek
funkciblokkok
Forrs: http://www.doksi.hu

Tartalomjegyzk

1. A kziknyvrl............................................................................................. 5
2. A Sucosoft programstruktrja ................................................................ 5
3. Adattpusok, vltozk deklarlsa ............................................................ 6
Elemi adattpusok felsorolsa ........................................................................................... 6
Adattpusok felosztsa ..................................................................................................... 7
Szrmaztatott adattpusok ................................................................................................. 8
Vltoz fajtk ................................................................................................... 12
Vltoz tpusok ................................................................................................... 14
4. POU-k programutastsi rsze................................................................. 17
Utastskszlet ................................................................................................... 17
Fggvnyek ................................................................................................... 19
Funkciblokkok ................................................................................................... 20
5. Fggvnyek ................................................................................................ 23
Adattpusokat konvertl fggvnyek ............................................................................ 25
Numerikus fggvnyek................................................................................................... 27
Aritmetikai fggvnyek .................................................................................................. 27
llapotbit vizsgl fggvnyek ...................................................................................... 28
Bit mozgatsok ................................................................................................... 30
Logikai fggvnyek ................................................................................................... 31
sszehasonltsi fggvnyek.......................................................................................... 31
Opercis rendszer-fggvnyek ..................................................................................... 31
Megszaktst tilt / engedlyez fggvnyek................................................................. 32
Karakterlnccal kapcsolatos fggvnyek........................................................................ 34
Kivlasztsi fggvnyek ................................................................................................. 37
6. Funkciblokkok......................................................................................... 40
_16BitBinaryToBCD 16-bit binris kdols szm -> decimliss alaktsa ............. 43
_16Bit_Compare ................................................................................................... 45
_16BitCounter 16-bites elre- /htraszmll ................................................... 46
ADRtoSTR vett adatbjtok STRING tpus vltozv alaktsa ................. 48
BCDTo16BitBinary Decimlis kdols szm -> 16-bit binriss alaktsa ............ 49
BlockCompare adatblokkok sszehasonltsa, adott adat keresse a
blokkban (cmvltozk alkalmazsval)................................... 50
BlockTransfer adatblokk msolsa, inicializlsa (cmvltozk
alkalmazsval)......................................................................... 55
CompareArray adatblokkok sszehasonltsa, adott adat keresse a
blokkban.................................................................................... 58
COMtoSTR vett adatbjtok STRING tpus vltozv alaktsa ................. 62
CounterAlarm szmll megszaktskezels .................................................... 64
DATconcat dtum s id (DATE_AND_TIME) tpus vltoz
sszelltsa egyedi UINT tpus adatokbl............................. 68
DateConcat dtum (DATE) tpus vltoz sszelltsa egyedi UINT
tpus adatokbl ........................................................................ 70
DateSplit dtum (DATE) tpus vltoz sztvlasztsa egyedi UINT
tpus adatokra .......................................................................... 71

3
Forrs: http://www.doksi.hu

DATsplit dtum s id (DATE_AND_TIME) tpus vltoz


sztvlasztsa egyedi UINT tpus adatokra ............................ 72
DE4netK DF4 frekvenciavltk kommunikcis modulja ....................... 74
Deserialize tmbbl tetszleges formtum adatok kivlasztsa ................ 77
EdgeAlarm vltozsfigyels megszaktskezels......................................... 79
FifoBx 8-bites cstr regiszter .............................................................. 83
FifoWx 16-bites cstr regiszter ............................................................ 86
GetRealTimeClock Vals idej ra kiolvassa......................................................... 89
LifoBx 8-bites veremtr regiszter.......................................................... 90
LifoWx 16-bites veremtr regiszter........................................................ 92
MI4netK MI4 kijelzk kommunikcis modulja ..................................... 94
MS_TimeFalling Elejtsre ksleltetett idzt (milliszekundumos
megadssal)............................................................................... 95
MS_TimeRising Meghzsra ksleltetett idzt (milliszekundum
megadssal)............................................................................... 97
ReadMC adatok olvassa a flash-memribl ......................................... 99
ReloadData adatok olvassa a flash-memribl (cmvltozk
alkalmazsval)....................................................................... 102
RealTimeClock vals idej ra sszehasonltsa egyedi bemeneti
adatokkal ................................................................................. 104
RTC vals idej ra lltsa............................................................. 108
S_TimeFalling Elejtsre ksleltetett idzt (szekundumos megadssal) ....... 109
S_TimeRising Meghzsra ksleltetett idzt (szekundum megadssal) ..... 111
SaveData adatok rsa a flash-memriba (cmvltozk
alkalmazsval)....................................................................... 113
SCO transzparens soros vonali kommunikci ............................... 115
Serialize tetszleges adatstruktra bjtos tmbbe val msolsa ......... 125
SetRealTimeClock Vals idej ra llts.............................................................. 128
SR_x bites lptet regiszter .............................................................. 130
SRB_x bjtos lpet regiszter.............................................................. 133
SRW_x szavas lpet regiszter............................................................. 136
STRtoADR STRING tpus vltoz adott cmterletre msolsa.............. 139
STRtoCOM STRING tpus vltoz adott cmterletre msolsa.............. 140
TimeConcat id (TIME) tpus vltoz sszelltsa egyedi UINT
tpus adatokbl ...................................................................... 141
TimeGenerator temad impulzusgenertor .................................................... 143
TimePulse impulzuskpz ........................................................................ 145
TimerAlarm idztses megszaktskezels................................................. 147
TimeSplit id (TIME) tpus vltoz sztvlasztsa egyedi UINT
tpus adatokra ........................................................................ 150
TODconcat napi id (TOD) tpus vltoz sszelltsa egyedi UINT
tpus adatokbl ...................................................................... 152
TODsplit id (TIME_OF_DAY) tpus vltoz sztvlasztsa
egyedi UINT tpus adatokra.................................................. 153
TransferArray adatblokk msolsa, inicializlsa .......................................... 154
WriteMC adatok rsa a flash-memriba............................................... 156
7. Sucosoft hatrrtkek ............................................................................. 159

4
Forrs: http://www.doksi.hu

A Sucosoft programstrukturja

1. A kziknyvrl
Ezen dokumentci az AWB2700-1306 szm dokumentci szerkesztett fordtsa, mely az
alapvet ismereteket s az ltalunk legfontosabb utastsok, fggvnyek, funkciblokkok
fordtst tartalmazza a kompakt PLC-kre (PS4-200, PS4-300) vonatkozan.
Az egyes programnyelvi kifejezsek az sszes PLC tpusra (PS4, PS416) azonosak. A
klnbsgek csak az egyes PLC-k memrianagysgban, a tmogatott adattpusokban illetve
a klnbz perifrikbl addhatnak. Ezen esetekben kln hivatkozunk az adott tpusokra.
A PS4-200 jells a PS4-141/-151-MM1 valamint a PS4-201/-271-MM1, a PS4-300 jells a
PS4-341-MM1 kompakt PLC-kre, a PS416 jells pedig az sszes modulris CPU tpusra
(CPU-200, CPU-300, CPU-400) vonatkozik.
Megjegyzsek nlkli lers rszek minden PLC tpusra rvnyes.

2. A Sucosoft programstruktrja
A Sucosoft ltal hasznlt programnyelvek megfelelnek az IEC1131-3 szabvnynak.
A klnbz felhasznli programok strukturlt kialaktshoz hrom porgramorganizcis
egysg (tovbbiakban POU) ll rendelkezsre.
PROGRAM (fprogram)
FUNCTION (fggvnyek, tovbbiakban FU)
FUNCTIONBLOCK (funkciblokkok, tovbbiakban FB)
A gyakran fellp feladatok megknnytsre a Sucosoft a standard fggvnyek s
funkciblokkok sorozatt kinlja fel.

A Sucosoft mind az IEC1131-3 ltal, mind a Moeller Electric ltal definilt


gyrt-definilt fggvnyeket s a funkciblokkokat tartalmaz. (A fordts
csak a Moeller Electric ltal definilt gyrts pecifikus programelemeket
ismerteti.)
Az eredeti kziknyvben az egyes fggvnyek, funkciblokkok eredetk
szerint IEC vagy KM jellssel tallhatk meg.
A strukturlt program feldolgozst a hv POU (fggvny, funkciblokk) megszaktja, s a
meghvott POU-ban trtnik tovbb a programfeldolgozs. A hvs lehet kzvetlen vagy (az
elz programrsz eredmnytl fgg) felttelhez kttt.
Minden POU egy deklarcis rszbl s egy utastsrszbl ll. Az sszes adatelemet, mely
az utastsrszben felhasznlsra kerl, deklarlni ktelez.
A program kommentrokat is tartalmazhat. A kommentrokat (* .. *) jelek kz kell
elhelyezni. A kommnetrok egymsba gyazhatk, ezltal egyes programrszek egyszeren
kizrhatk 8kikommentrozhatk) a programfutsbl.
Egy-egy POU tartalma adott kulcsszavakkal hatroldik el egymstl, melyet a POU-editor (a
programszerkeszt automatikusan generl.
PROGRAM. END_PROGRAM;
FUNCTION END_FUNCTION;
FUNCTION_BLOCKEND_ FUNCTION_BLOCK;

5
Forrs: http://www.doksi.hu

Adattpusok

3. Adattpusok, vltozk deklarlsa


Az IEC1131-3 elemi s szrmaztatott adattpusokat deklarl. A kulcsszavak kis s
nagybetvel egyarnt rhatk.

Elemi adattpusok felsorolsa


Az elemi adattpusokat az adott kulcsszavak egyrtelmen meghatrozzk. A kezdeti rtkek
a := hozzrendelsi opertorral adhatk meg. Amennyiben nincs (kezdeti (inicializlsi) rtk
a vltozhoz hozzrendelve, akkor a vltozk a default rtkeket veszik fel.
Kulcssz adattpus bitfoglals default rtk
BOOL ktrtk binris szm, 1 0
rtke: 1(igaz) vagy 0,(hamis)
SINT short integer; rvid egsz szm 8 0
rtke: -128.+127
INT integer; egsz szm 16 0
rtke: -32 768.+32 767
DINT 1) double integer; dupla egsz szm 32 0
rtke:-2 147 483 648..+2 147 483 647
USINT unsigned short integer; eljel nlkli 8 0
rvid egsz szm, rtke: 0255
UINT unsigned integer; eljel nlkli egsz 16 0
szm, rtke 065 535
UDINT 1) unsigned double integer; eljel nlkli 32 0
dupla egsz szm,
rtke: 04 294 967 295
REAL 1) real; vals szm, rtke: +/-3,4 E+/-38 32 0
TIME idtartam; megadsa T#0s
nap, ra, perc, sec., msec.
rtktart.: -129d+1ms+128d-1ms;
PS4-200 esetn: -65d+1ms..-64d-1ms
matematikai mv. esetn:0..64d-1ms
DATE dtum formtum; YYYY-MM-TT D#1900-01-01
TIME_OF_DAY idpont formtum: HH:MM:SS TOD#00:00:00
DATE_AND_TIME dtum s id DT 1900-01-01-
00:00:00
2)
STRING vltoz hosszsg karakterlnc (szkz)
BYTE bitsorozat 8bit szlessgben 8 0
WORD bitsorozat 16bit szlessgben 16 0
DWORD* bitsorozat 32bit szlessgben 32 0
1) csak a PS4-300 s Ps416 esetn

6
Forrs: http://www.doksi.hu

Adattpusok
2) A karakterlnc hossznak default rtke 32jel. Amennyiben ms rtkre van szksg,
akkor azt a deklarls sorn kell kerek zrjelek kztt megadni.
pl. Text : STRING(12) := ABC;
maximlis STRING hossz PS4-200 esetn: 253jel,
PS4-300 s PS416 esetn: 1024jel

BOOL R_EDGE s BOOL F_EDGE adattpusok (csak PS4-200 s PS4-300 esetn)


A BOOL R_EDGE (felfut l) s a BOOL F_EDGE (lefut l) adattpusok az elemi tpusok
kztt szerepelnek. A jelvltozst kirtkel adattpusok csak vltoz bemenetknt
(VAR_INPUT) hasznlhatk felhasznl ltal definilt funkciblokkok bemenetein.
Ha a bemeneteken egy felfut vagy lefut lvltozs trtnt, akkor a R_EDGE vagy a
F_EDGE-nek deklarlt bemenetek az ezt kvet hvskor logikai 1 rtket vesznek fel.

Adattpusok felosztsa
ANY

ANY_ ANY_NUM ANY_BIT ANY_DATE ANY_STRING TIME szrm. adattp. ADDRESS#


FUNCTION_
BLOCK

ANY_REAL ANY_INT

REAL
REAL* SINT
SINT BOOL
BOOL DATE
DATE
INT
INT BYTE
BYTE TIME_OF_DATE
TIME_OF_DAY (TOD) TIME
(TOD)
DINT
DINT* WORD
WORD DATE_AND_TIME(DAT)
DATE_AND_TIME (DAT)
USINT
USINT DWORD
DWORD*
UINT
UINT
UDINT
UDINT*

felsorols ANY_ARRAY STRUCT

ARRAY[..]

# az j fejlesztsek esetn nem ajnlott!


* csak aPS4-300 illetve PS416 estn

7
Forrs: http://www.doksi.hu

Adattpusok
Az ADDRESS adattpus s az ANY kategriajellsek csak mint ltalnos adattpus
jellsek a standard funkcik s funkciblokkok bemeneti s kimeneti paramtereinl
hasznlatosak.

Szrmaztatott adattpusok
A szrmaztatott adattpusokat az elemi adat adattpusokbl lehet j, a felhasznl ltal adott
kulcsszval ellltani. A deklarls a TYPEEND_TYPE kulcsszavakkal trtnik.
A szrmaztatott adattpusok definilsval a VAREND_VAR kulcsszavak kz egyedi
adattpus vltozkat tud bevezetni.
plda:
TYPE
Analogertek : INT ;
END_TYPE
VAR
Ertek1 : Analogertek ;
END_VAR
A szrmaztatott adattpusok csak abban a POU-ban rvnyesek, ahol a hozztartoz
tpusdefinils megtrtnt.
Projekt globlis szrmaztatott adattpusokat a usertype.typ fjlban tetszleges
szvegszerkesztvel lehet a TYPEEND_TYPE kulcsszavakkal definilni. (Lsd rszletesen
az AWB2700-1306 kziknyvet.)

Lehetsges szrmaztatott adattpusok:


vltozk korltozott rtktartomnnyal: alkalmazsval lehetsgess vlik az elemi
adattpusok rtktartomnyt az jabb adattpus bevezetsvel bekorltozni.
TYPE
analogertek_1 : INT (-128..128) ; Az als fels hatrrtkeket kt ponttal szkz
feszultseg : INT (0..150) ; nlkl kell megadni. A pozitv rtkek el
nem kell eljelet tenni!
temperatur : INT(-10..10) ;
END_TYPE

VAR
Meresi_Ertek1 : analogertek_1 ;
Meresi_Ertek2 : feszultseg ;
Kazan_Temp : temperatur ;
END_VAR

8
Forrs: http://www.doksi.hu

Adattpusok
felsorols adattpusok: A felsorols adattpus definilsval egy listt adunk meg,
amilyen rtkeket a vltoz a ksbbiek folyamn felvehet. A tpus definilsakor a nv
megadst kveten kerek zrjelben, egymstl vesszvel elvlasztva adjuk meg a
vltoz rtkeket. A befejez zrjelet kveten lehet a kezdeti rtket megadni.
Amennyiben nincs kezdeti rtkads, akkor az els programfeldolgozskor a vltozlista
els eleme kerl felhasznlsra.
plda: tpus-inicializls
Az adattpus Kozl_Lampa hrom rtket (piros, sarga, zold) vehet fel. A vltoz sarga
kezdeti rtkkel indul. Ha hinyozna az inicializls, akkor a vltoz a pirost, mint az
els rtket venn fel.
TYPE Kozl_Lampa :
(piros,
sarga,
zold) :=sarga ;
END_TYPE
VAR
K_Lampa1 : Kozl_lampa ;
K_Lampa2 : Kozl_lampa ;
K_Lampa3 : Kozl_lampa ;
Auto_Allj :BOOL ;
END_VAR
A program utastsrszben az egyes definilt rtkek kzvetlenl is felhasznlhatk.
LD K_Lampa1
EQ piros
St Auto_Allj

tmb tpus adatok: Tbb azonos tpus adatot egy vltozba is ssze lehet foglalni. Ezt
az adattpust tmbnek nevezzk. Egy tmb tartalmazhat mind elemi mind szrmaztatott
adattpust. A definils az ARRAY kulcsszval s az adatelemek szmnak megadsval
trtnik.
A tmbvltozk kzvetlen cmekkel is sszekapcsolhat az AT kulcssz felhasznlsval.
plda: Tmbvltoz deklarlsa
A tomb1 telem INT tpus, a tomb2 egy hromdimenzis 24 elem vltozt jelent.
A 17-es kezdeti rtk tmbelemet a program 5-re trja.
PROGRAM tomb
TYPE
tomb_5_INT : ARRAY [1..5] of INT :=[1,13,5,34,2] ;
tomb_24_INT : ARRAY [1..2,1..3,1..4] of INT
:=[[[3,7,2,9],[2,8,6,1],[5,7,2,17],
[[2,3,0,5],[6,1,2,4],[3,0,1,4]]];

9
Forrs: http://www.doksi.hu

Adattpusok

END_TYPE
VAR
tomb1 : tomb_5_int ;
tomb2 :tomb_24_int ;
END_VAR
.
.
LD 5
ST tomb2[1,3,4]
.
END_PROGRAM
Struktra adattpus definilsa: (csak a PS4-300 s a PS416 estn)
Klnbz tpus adatelemek egy adattpusba val sszerendelsre szolgl az
adatstruktra. Az adatstruktra tartalmazhat elemi vagy szrmaztatott adattpusokat is. A
deklarlshoz a STRUCT kulcsszt kell megadni, majd ezt kveti az egyes elemek
felsorolsa tpus megadsukkal egytt.
Egy struktraelem megszltsa a struktra vltoz nvmegadssal majd ponttal
elvlasztva a struktraelem nevvel trtnik.
plda: kezdeti rtkads a deklarls sorn
PROGRAM struktur
TYPE
Berendezes_Adatok :
STRUCT
meres1: BOOL := 1 ;
meres2: INT := -15 ;
meres3: UINT := 100;
meres4: REAL := 10.2;
END_STRUCT
END_TYPE

VAR
allomas1 : Berendezes_Adatok ;
allomas2 : Berendezes_Adatok ;
END_VAR

LD allomas1. meres3
.

10
Forrs: http://www.doksi.hu

Adattpusok
END_PROGRAM
plda: kezdeti rtkads a deklarls utn
PROGRAM struktur
TYPE
Berendezes_Adatok :
STRUCT
meres1: BOOL ;
meres2: INT ;
meres3: UINT ;
meres4: REAL ;
END_STRUCT := (meres1 :=1,
meres2 := -15,
meres3 := 100,
meres4 : =10.2) ;
END_TYPE

VAR
allomas1 : Berendezes_Adatok ;
allomas2 : Berendezes_Adatok ;
END_VAR

A Berendezes_Adatok tpus bevezetsvel s az allomas1 s az allomas2 vltozkhoz


val hozzrendelssel az allomas1 s allomas2 vltozk mindegyike tartalmaz egy-egy
BOOL, INT, UINT s REAL adattpust.

Amennyiben a szrmaztatott adattpusok tpusdeklarcijban nem trtnik


kezdeti rtkads, akkor az egyedi adatelemek kezdeti rtkknt a default
rtkket veszik fel.

11
Forrs: http://www.doksi.hu

Vltozk

Vltoz fajtk
A PLC-ben alkalmazott adatelemeket vltozknak nevezzk.
A vltozk csoportostsa:
vltozk, melyek a kzbens bels adattrolsra szolglnak
kzvetlen cmzs vltozk, melyek a bemenetekhez, kimenetekhez, vagy meghatrozott
memriaterlethez illetve a PLC kommunikcis memriaterlethez kapcsoldnak.
A vltozkat jellel, nvvel lehet azonostani. A nevek betvel vagy alhzsjellel (_)
kezddhetnek, s egybknt kis- s nagybetk, szmok, alhzsok sorozatbl ll.

Szkzket, kezetes betket a nv nem tartalmazhat. A kulcsszavakat


szintn nem lehet vltoznvknt hasznlni.
A vltoznevek maximlis hossza 64 karakter. A kis s nagybets jeleknek
nincs megklnbztet jelentsge.

Kzvetlenl brzolhat vltozk


A fizikai PLC cmek (be-/kimenetek, memriaterletek) kzvetlenl is megszlthatk. A
direkt brzols vltozkat is ktelez deklarlni, azonban a direkt cmekhez szimbolikus
nevek hozzrendelse is megengedett. Direkt cmzs esetn az operandusokat %-jellel s a
fizikai cmkkel lehet megszltani. A deklarcis rszben a fizikai cmet (szkzzel
elvlasztva) AT kulcsszval kell megadni.
plda:
Program poe4
VAR
AT AT %I0.0.0.0.0 : BOOL ;
Bemenet1 AT %I0.0.0.0.1 : BOOL ;
Eredmeny : BOOL ;
END_VAR
LD Bemenet1
AND %I0.0.0.0.0
ST Eredmeny
Ajnlatos a szimbolikus nevek hasznlata a direkt cmzs vltozk esetn is, mert
hasznlatuk esetn a cmvltoztatst egyszerbb tvezetni. Ebben az esetben elegend ugyanis
a deklarcis rszben a szimbolikus nv s a direkt vltoz hozzrendelst javtani, az
utastsrsz vltozatlan maradhat. (Ellenkez esetben minden egyes direkt vltoz helyn el
kell vgezni a mdostst.)

Kzvetlenl cmzs vltozkat csak a fprogramban


(PROGRAM nev POU) lehet deklarlni.

Igny esetn egy tmbhz is lehet kzvetlenl cmeket hozzrendelni, de csak az azonos
tpus cmzseket (BOOL, BYTE, SINT, USINT, WORD, INT stb.) lehet sszefogni egy
tmbbe. A PS4-200 s PS4-300 estn a bitvltozkat csak a 8 egszszm tbbszrseknt

12
Forrs: http://www.doksi.hu

Vltozk
lehet sszefogni.
A PROGRAM POU-ban deklarlt globlis direkt cmzs vltozkat a funkciblokkokban,
mint kls (EXTERNAL) deklarlt vltozkknt lehet felhasznlni. Egy msik, gyorsabb
lehetsg a funkciblokkok esetn a vltozk paramter tadsa a VAR_IN_OUT tpusokon
keresztl. Ez a lehetsg azonban csak az rhat vltozkra (PLC kimenetekre,
memriahelyekre, kommunikcis adatokra) vonatkozik.
A Sucosoft a kvetkez fizikai cmeket ismeri:
I: digitlis bemenet
Q: digitlis kimenet
M: memriaterlet
IA: analg bemenet
QA: analg kimenet
IC: szmll bemenet
IS: status informcis bemenet (diagnosztika)
SD: intelligens Suconet K rsztvevnek kldend adat
RD: intelligens Suconet K rsztvevtl fogadott adat

A kvetkez fizikai cmek a kzvetlen perifria hozzfrshez hasznlhatk:


IP: digitlis bemenet (PS4-200/-300)
QP: digitlis kimenet (PS4-200/-300)
IPA: analg bemenet (PS4-300)
QPA: analg kimenet (PS4-300)
IPC: szmll bemenet (PS4-300)
A rendelkezsre ll konfigurlt hardver hatrozza meg, hogy milyen cmek llnak
rendelkezsre.
Az egyes adatok nagysgt a kvetkez szimblumokkal jelljk:
szimblum jelentse nagysg plda
- bit 1 bit %I0.0.0.0.0
B bjt 8 bit %IB0.0.0.0
W sz 16bit %IW0.0.0.0
D duppla sz 32bit %ID0.0.0.4
A direkt cm vltozk memriabeli szervezse a kvetkez kimeneti vltozn (Q) lthat:
QD0.0.0.0 QD0.0.0.4

QW0.0.0.0 QW0.0.0.2 QW0.0.0.4 QW0.0.0.6

QB0.0.0.0 QB0.0.0.1 QB0.0.0.2 QB0.0.0.2 QB0.0.0.4 QB0.0.0.5 QB0.0.0.6 QB0.0.0.7

Q0.0.0.0.0 Q0.0.0.1.0 Q0.0.0.2.0 Q0.0.0.2.0 Q0.0.0.4.0 Q0.0.0.5.0 Q0.0.0.6.0 Q0.0.0.7.0

Q0.0.0.0.7 Q0.0.0.1.7 Q0.0.0.2.7 Q0.0.0.2.7 Q0.0.0.4.7 Q0.0.0.5.7 Q0.0.0.6.7 Q0.0.0.7.7

13
Forrs: http://www.doksi.hu

Vltozk
Vltoz tpusok
A programozsi egysg deklarcis rszben minden felhasznlsra kerl vltozt definilni
kell. A klnbz vltoztpusokat a megfelel kulcsszavakkal lehet jellemezni. A
kvetkezkben sszefoglalva lthat a klnbz vltoztpusok s jellemzsk.
Kulcssz Felhasznls
VAR loklis vltozk; rvnyessgi krk csak az adott POU-ra,
ahol definilsra kerltek, vonatkozik.
VAR_GLOBAL A globlisknt deklarlt vltoz rvnyessgi terlete a
teljes programra vonatkozik, azaz egy a PROGRAM POU-
ban globlisan deklarlt vltoz brmelyik programbeli
funkciblokkban (FB-ben) is elhvhat. Az FB-ben, ahol
egy globlisan deklarlt vltoz felhasznlsra kerl, a
vltozt azonos nvvel, mint VAR_EXTERNAL tpusknt
kell deklarlni.
VAR_EXTERNAL Ha egy FB-ben egy globlisan deklarlt vltoz kerl
felhasznlsra, akkor az azonos nvvel s
VAR_EXTERNAL tpusknt kell deklarlni.
VAR_INPUT Egy vltoz bemeneti vltozknt kerlhet definilsra egy
POU-ban (FU (= fggvny), FB), ha ebben a programozsi
egysgben a vltozt csak olvassk, vagy csak
paramtertadsra hasznljk, vagyis a vltoz rtkt nem
szabad megvltoztatni.
VAR_OUTPUT Egy FB kimeneti vltozjaknt definilt vltozt az FB a
hvs folyamn kpes rni, azaz azt megvltoztatni.
VAR_IN_OUT Az IN_OUT tpus vltozt az FB kpes meghvni, s
ugyanazon a nven mdostott rtket adni. Mivel a az FB.n
bell rtkads trtnhet, rsvdett vltozt (pl.
CONSTANT) a VAR_IN_OUT-knt nem lehet hasznlni.
TYPE A TYPE kulcssz a szrmaztatott adattpusok jellsre
szolgl.

Minden egyes adatblokkot az END_VAR, vagy END_TYPE kulcsszavakkal kell lezrni.

A VAR_IN_OUT vltoz mutat (pointer), amely az adott tpus deklarlt vltozra mutat. A
vltoz csak FB-ben alkalmazhat, s az FB hvsa eltt mr rvnyes rtkkel kell
rendelkeznie.

A nem inicializlt VAR_IN_OUT vltozk a fordts sorn szintaktikai hibt okoznak. A


mutatt az FB hvsa eltt akkor is inicializlni kell, ha az FB-ben a hvs sorn kzvetlenl
nem kerl felhasznlsra. A mutatkat az FB hvsakor kerek zrjelben kell megadni.

Plda: Mutat egy 201szavas tmbvltozra

A demo nev FB-ben alkalmazott w_array VAR_IN_OUT tpus vltoz nem 201
szt tartalmaz tmb, hanem egy mutat, mely erre a tmbre mutat. A demo FB-ben a
word_array globlis tmbre trtnik a hivatkozs.

14
Forrs: http://www.doksi.hu

Vltozk
A mutatk alkalmazsa a kvetkez elnyket nyjtja:

A demo hvsakor nem kell a tmbt tmsolni (idnyeresg), s a VAR_IN_OUT


vltozra val hivatkozs mind az rst, mind az olvasst biztostja.

A funkciblokk gy neutrlis maradhat, mivel az EXTERNAL deklarci is elmarad,


mely egybknt adott globlis vltozkhoz kapcsoldna.
PROGRAM user
VAR_GLOBAL
word_array : array[0..200] of word ;
END_VAR
VAR
my_function_block : demo ;
END_VAR
cal my_function_block(w_array :=word_array)
END_PROGRAM
FUCTION_BLOCK demo
VAR_IN_OUT
w_array : array[0..200] of word ;
END_VAR
VAR
seged1 : word ;
seged2 : word ;
END_VAR
ld w_array[100]
st seged1
ld seged2
st w_array[200]
END_FUNCTION_BLOCK
A loklis s globlis vltozk tovbbi tulajdonsgokkal is kiegszthet.
Kulcssz Felhasznls
RETAIN A RETAIN kulcsszval az adott vltozt remanensnek
definilhatjuk, azaz meleg start esetn a vltoz megtartja
utols kikapcsols eltti rtkt. A RETAIN kulcssz a VAR
vagy a VAR_GLOBAL utn szkzzel rand.
CONSTANT Amennyiben egy adatelem konstansknt, azaz rtke
llandknt definiland, akkor a CONSTANT attribtum
hasznlhat. A CONSTANT kulcssz a VAR vagy a
VAR_GLOBAL utn szkzzel rand.
AT Ha egy vltozhoz fizikai cmet kvn hozzrendelni, akkor
ehhez az AT kulcssz hasznlhat.

PS4-200 esetn a memriavltozkat nem lehet a RETAIN kulcsszval


remanens tenni. Ebben az esetben egy sszefgg memriaterletet kell
kijellni, melyet a kd lllts -> Opcik -> PS-opcik -> Compiler
menpont alatt lehet kijellni.

15
Forrs: http://www.doksi.hu

Vltozk

PS4-300 esetn a memriavltozkat mind a RETAIN kulcsszval, mind a


remanens memriaterlet kijellsvel (kd lllts -> Opcik -> PS-
opcik -> Compiler) remanens lehet tenni.

A PS4-200 esetn egy funkciblokk egyes vltozit remanenss belltani nem lehet. Ebben
az esetben az egsz funkciblokkot kell remanensknt deklarlni.
Vltoztpusok FU FB PRG
felhasznlsa
VAR_INPUT
VAR_OUTPUT
VAR_IN_OUT
VAR_GLOBAL
VAR_EXTERNAL
VAR
TYPE * * *

tbbszrs felhasznls lehetsges


* loklisan egy POU-n bell, vagy globlisan a
usertype.typ fjl megfelel szerkesztsvel!

Funkciblokkok helyfoglalsa
A funkciblokkot abban a POU-ban (PROGRAM vagy egy msik FB), ahol meghvsra
kerl, kln deklarlni szksges. A definils ebben az esetben szintn egy egyedi
nvadssal s a tpus (funkciblokk prototpusnak) megadsval trtnik. Pl.
szamlalo : CTU ;
azaz a funkciblokk egy egyedi, szamlalo nvvel elltva, s CTU tpusknt kerl meghvsra.
A bemeneti vltozkat a meghvs eltt kell paramterezni, a kimeneteket vagy eltte, vagy a
meghvs utn lehet tovbbi vltozkhoz hozzrendelni.
A fggvnyektl eltren csak azokat a bemeneti vltozkat kell paramterezni, amelyek
lnyegesek a funkciblokk hvsa esetn. Kivtelek a VAR_IN_OUT tpus vltozk,
melyeket minden hvskor paramterezni kell, klnben szintaktikai hiba lp fel a fordts
sorn.

16
Forrs: http://www.doksi.hu

Utastskszlet

4. POU-k programutastsi rsze

Utastskszlet

Opertor Operandus Jelents


LD ANY az operandus bemsolsa a z akkumultorba
LDN ANY_BIT a neglt operandus bemsolsa a z akkumultorba
ST ANY az akkumultor trolsa az operandusba
STN ANY_BIT az akku neglt rtknek trolsa az operandusba
S BOOL az operandus = 1, ha az akku rtke 1
R BOOL az operandus = 0, ha az akku rtke 1
AND(N) 1) ANY_BIT logikai S kapcsolat (eredmny neglva)
&(N) 1) ANY_BIT logikai S kapcsolat (eredmny neglva)
OR(N) 1) ANY_BIT logikai VAGY kapcsolat (eredmny neglva)
XOR(N) 1) ANY_BIT logikai kizr VAGY kapcsolat (eredmny neglva)
ADD 1) ANY_INT sszeads
SUB 1) ANY_INT kivons
1)
MUL ANY_INT szorzs
1)
DIV ANY_INT oszts
1)
GT ANY_INT sszehasonlts: nagyobb; akku = 1, ha igaz
1)
GE ANY_INT sszehasonlts: nagyobb/egyenl; akku = 1, ha igaz
1)
EQ ANY_INT sszehasonlts: egyenl; akku = 1, ha igaz
1)
NE ANY_INT sszehasonlts: nem egyenl; akku = 1, ha igaz
1)
LE ANY_INT sszehasonlts: kisebb/egyenl; akku = 1, ha igaz
1)
LT ANY_INT sszehasonlts: kisebb; akku = 1, ha igaz
JMP cmke felttel nlkli ugrs; ugrs helye a cmke
JMPC(N) cmke feltteles ugrs; felttel (nem) igaz, ha az akku = 1
CAL FB-nv felttel nlkli hvs; adott nev FB hvsa
CALC(N) FB-nv feltteles hvs; felttel (nem) igaz, ha az akku = 1
RET - felttel nlkli visszaugrs az adott nev FB-bl
RETC(N) - feltteles visszaugrs; felttel (nem) igaz,
ha az akku = 1
1) Az utasts zrjelekkel egytt is hasznlhat. Az utasts a zrjelben megadott
kifejezs eredmnyre vonatkozik. A zrjelek tbb szinten egymsba is
gyazhatk.

17
Forrs: http://www.doksi.hu

Utastskszlet
Programrsi szablyok
Egy utasts szekvencia mindig LD(N) utastssal kezddik. A szekvencit az operandus rsi
utastsok (ST(N), S,R), valamint a feltteles ugrsok, hvsok s visszatrsi utastsok
zrjk le. Kivtelt kpeznek a felttel nlkli ugrsok s hvsok, valamint ta visszatrsi
utastsok.
Ugrsi cmkket az utastsi sor elejre kell rni s kettsponttal kell lezrni. Ugrsi clknt
csak a szekvencia kezdett lehet megadni.
Fontos kvetelmny: Az utastsokat csak azonos tpus adatokkal lehet vgrehajtani.
A Sucosoftban termszetesen konstansokkal is lehet dolgozni. Lehet adatelemeket
CONSTANT attribtummal elltva s a kvnt kezdeti rtkkel inicializlva deklarlni. Msik
lehetsg a programvgrehajts sorn direkt rtkads alkalmazsa nvvel elltott adatelem
felhasznlsa nlkl.
A konstansok klnbz adattpusaihoz elrt helyesrsi konvenci tartozik. A konstanson
bell szkzk alkalmazsa helyett trelvlasztnak az alhzs jel megengedett. (A
szkzk csak a SRTING vltozkban hasznlhatk!)
Konstansok ttekintse
Konstansok Plda Jelents
INT -13 egsz szm; -13
45165 vagy 45_165 egsz szm; 45 165
+125 egsz szm; 125
REAL 1) 13.12 vals szm: 13,12
123.45 vals szm: 123,45
0.123 vals szm: 0,123
1.23E-3 vals szm:0,00123
binris szm 2#0111_111 vagy 126 126 decimlisan
hexadecimlis szm 16#123 vagy 291 291 decimlisan
STRING ABC karakterlnc ABC
TIME T#12.3ms vagy 12,3ms idtartam
TIME#12.3ms
DATE DATE#1995-12-24 vagy dtum: 1995 12. 24.
D#1995-12-24
TIME_OF_DAY TOD#12:05:14.56 vagy idpont: 12ra 5perc, 14,56msodp.
TIME_of_DAY#12:05:14.56
DATE_AND_TIME DT#1995-12-24-12:05:14.56 v. drum s id egytt:
DATE_AND_TIME#1995- 1995 12. 24
12-24212:05:14.56 12ra 5perc, 14,56msodperc
1) csak a PS4-300 s Ps416 esetn

A PROGRAM a Sucosoft legfels strukturlis szintje. Ebben a POU-ban clszer az alapvet


vezrlsi utastsokon tl a tbbi strukturlt POU-t (fggvnyek, funkciblokkok) meghvni.
A fggvnyek hvsa a fggvny nevnek bersval, a funkciblokkok hvsa a Cal
utastssal trtnik.

18
Forrs: http://www.doksi.hu

Utastskszlet

Fggvnyek
Rendszeresen ismtld feladatokhoz clszer fggvnyeket alkalmazni. A fggvny tbb
bellthat indul paramtert tartalmazhat, a vgrehajts eredmnye pedig egyetlen kimeneti
adatban helyezkedik el, mely lehet egyetlen, de akr tbbelem, tmb tpus is.
A fggvnyek rvnyessgi terlete globlis, azaz minden POU rszre rendelkezsre ll, s
nem kell kln a hv POU-ban deklarlni.
A fggvny hvsa a fggvny nevnek megadsval s a bemeneti adatok teljes
paramtertadsval trtnik.
A fggvny els paramtert bemenetknt az akkumultoron keresztl, a tovbbi
paramtereket egymstl vesszvel elvlasztva (a fggvnynevet szkzzel kveten) a
fggvny argumentumaknt kell megadni.
A fggvny az eredmnyt a fggvny nevnek megadsval az akkumultoron keresztl adja
vissza a meghv POU-nak. A fggvnyek nem kpesek az eredmnyek trolsra.
A fggvny a loklis paramtereket minden fggvnyhvskor az adattpusuknak megfelelen
(lsd az elemi adattpusokat felsorol tblzatot az elz fejezetben) inicializlja. Ha a hvs
az eredmny lltsa nlkl fejezdik be, akkor a fggvny automatikusan visszalltja a
loklis vltozk tpusnak megfelel kezdeti rtkt.
Plda: sszeadsi fggvny
FUNCTION szumma : INT
VAR_INPUT
A : INT ; (* deklarcis rsz *)
B : INT ;
C : INT ;
END_VAR
LD A (* utastsrsz *)
ADD B
ADD C
ST szumma
PROGRAM pr_sum
VAR
tenyezo1 : INT := 1 ;
tenyezo2 : INT := 2 ;
tenyezo3 : INT := 3 ;
eredmeny : INT ;
END_VAR
LD tenyezo1
Szumma tenyezo2, tenyezo3
ST eredmeny
END_PROGRAM
Egy fggvnyen bell tovbbi fggvnyek is hvhatk Viszont egy fggvnybe nem lehet
funkciblokkot begyazni, tovbb nem lehet funkciblokk nevet bemeneti paramterknt
felhasznlni.

19
Forrs: http://www.doksi.hu

Utastskszlet
A Sucosoft a gyakori feladatok szmra nagyszm gyrt specifikus fggvnyt ajnl fel.

Online vltoztats vagy llapotkijelzs, mint a PROGRAM vagy


a FB esetn, a fggvnyeken bell nem lehetsges.
A felhasznli fggvnyek algoritmusnak tesztelsre ezrt
clszer FB-t kialaktani, majd ksbb a leellenrztt
funkciblokkot fggvnny talaktani.
A PS4-200 esetn a felhasznl ltal megrhat fggvnyeket a
Sucosoft egyelre nem tmogatja.

Funkciblokkok
A gyakran elfordul feladatokhoz a fggvnyeken kvl funkciblokkokat is lehet hasznlni.
A funkciblokkok ellenttben a fggvnyekkel tbb kimeneti paramterrel is
rendelkezhetnek. A funkciblokk a vltozit megrzi a kvetkez hvsig, melyek gy tovbb
feldolgozsra kzvetlenl felhasznlhatk.
Egy funkciblokk tovbbi FB-ket hvhat. A kvetkez tblzat mutatja a funkciblokk be-
/kimeneti vltozinak megengedett hasznlatt:
Hasznlat funkciblokkon bell funkciblokkon kivl
bemenet olvassa LD IN1 LD FBx.IN1
AND IN2 ST %QW0.0.0.2
ST Q1
bemenet rsa nem megengedett! LD Start
ST FBx.IN1
CAL FBx
kimenet olvassa LD OUT1 CAL FBx(IN1 := Be, )
AND IN2 LD FBx.OUT1
ST OUT1 ST %QW0.0.0.2
kimenet rsa LD 100 nem megengedett!
ST OUT1
Ha a bemeneti operandust, mint l figyelst kell alkalmazni, akkor a vltozt ennek
megfelelen (pl. start : BOOL_R_EDGE ;) kell deklarlni! A l figyels vltozk hasznlata
csak a PS4-200 s a PS4-300 csaldban lehetsges.
Az IEC szabvny kt azonos eredmnnyel jr eljrst engedlyez a funkciblokkok
paramtertadsra. A kvetkez pldban (a feladat tbbszrs kzprtkkpzs) kt
hvssal mutatjuk be a kt eljrst.

20
Forrs: http://www.doksi.hu

Utastskszlet
A kzprtkkpzst vgz funkciblokk prototpusa a kvetkez:
FUNCTION_BLOCK kozepertek
VAR_INPUT
Reset : BOOL ;
Bem1 : USINT ;
Bem2 : USINT ;
END_VAR
VAR_OUTPUT
atlag : USINT ;
END_VAR
LD Bem1
ADD Bem2
DIV 2
St atlag
END_FUNCTION_BLOCK
Az FB-t hv program felptse: A kozepertek FB a programban klnbz nevekkel
ktszer kerl meghvsra (instanclsra).
PROGRAM poe3
VAR
Instanz1_nev : kozepertek ;
Instanz2_nev : kozepertek ;
ertek1 AT %IB0.0.0.0 : USINT ;
ertek2 AT %IB0.0.0.1 : USINT ;
eredmeny1 AT %QB0.0.0.0 : USINT ;
eredmeny2 AT %QB0.0.0.1 : USINT ;
torles AT %I0.0.0.2.0 : BOOL ;
END_VAR
(* FU hvs - 1. eljrs *)
Cal Instanz1_nev (Reset := torles,
Bem1 := ertek1,
Bem2 := ertek2)
LD Instanz1_nev.atlag
St eredmeny1
(* FU hvs - 2. eljrs *)
LD torles
St torles
LD ertek1
ST Instanz2_nev.bem1
LD ertek2
ST Instanz2_nev.bem2
Cal Instanz2_nev
LD Instanz2_nev.atlag
St eredmeny2
END_PROGRAM
A csak egyszer kialaktott FB szksg szerint tbbszr is (ms-ms nevekkel) meghvhat.

21
Forrs: http://www.doksi.hu

Utastskszlet
A neveket a flrendelt hv POU-ban kell deklarlni. A deklarls sorn az egyedi
neveket (itt: Instanz1_nev, Instanz2_nev) s a funkciblokk prototpust (itt: kozepertek)
is meg kell adni.
A Sucosoft a szksges memriaterletet az instanclt FB-hez hozzrendeli, azaz a
funkciblokk minden egyes alkalmazsnl a bels adatok is letrolsra kerlnek.
A funkciblokk hvsakor (Cal Instanz1_nev) a trtnik meg a tulajdonkppeni
paramterezs, azaz ekkor rendeldnek hozz a funkciblokk bemeneti paramtereihez az
adott specifikus vltozk. Az egyes operandusokat kerek zrjelben egymstl vesszvel
elvlasztva kell megadni. A funkciblokk kimeneti paramtereit direkt hozzrendelssel
lehet tadni ms vltozknak:
LD Instanz1_nev.atlag
ST eredmeny1
A msodik eljrs esetn a funkciblokk hvsa eltt az egyes instanz-specifikus
vltozkat, az akkumultor segtsgvel, tadjuk a funkciblokk bemeneti
paramtereinek. Maga a funkciblokk hvs nem tartalmaz semmilyen paramter tadst.
A funkciblokk eredmnyek hasonl mdon letroldnak, s az LD utastssal
megszlthatk.
Tovbb gynevezett Moeller-specifikus funkciblokk hvs is realizlhat. Ekkor a be-
/kimeneti paramtertads egymstl elvlasztva a |-jellel egyszerre trtnik.
Plda:
Cal Instanz3_nev (Reset := torles,
Bem1 := ertek1,
Bem2 := ertek2
|
eredmeny := atlag)

Termszetesen a hrom eljrs egymssal keverve is hasznlhat, azaz lehet egyes


rtkeket akkumultoron t paramterezni, s a tbbi szksgeset pedig a CAL hvssal
egytt!

22
Forrs: http://www.doksi.hu

Fggvnyek

5. Fggvnyek
A Sucosoft S40 a fggvnyek nagy vlasztkt nyjtja a programozs rszfeladatainak
megknnytsre.
Az IEC 1131-3 ltal definilt fggvnyeken kvl a Moeller Electric a PLC-khez tovbbi
gyrt specifikus fggvnyeket is ksztett, melyek kihasznljk a PLC egyedi adottsgait.
Ezek hasznlata tovbb knnytheti az egyes felhasznli alkalmazsok elksztst.
Az albbiakban csoportostva felsoroljuk a fontosabb fggvnyeket:

Fggvnyek Jelentsk
Adattpusokat konvertl fggvnyek ...................................................................... 25
*_TO_** tpuskonverzik elemi adattpusok kztt
TRUNC REAL szm egszt adja ANY_INT adattpusban
Numerikus fggvnyek............................................................................................... 27
ABS abszolt rtkkpzs
NEG 2-es komplemens kpzs
Aritmetikai fggvnyek .............................................................................................. 27
ADD sszeads
MUL szorzs
SUB kivons
DIV egsz szm oszts
MOD maradkrtket ad oszts
llapotbit vizsgl fggvnyek .................................................................................. 28
IsCarry aritmetikai mveletet kveten tvitel bit = ?
IsZero aritmetikai mveletet kveten eredmny nulla bit = ?
IsOverflow aritmetikai mveletet kveten tlcsorduls = ?
ISPositive aritmetikai mveletet kveten eredmny pozitv = ?
IsBitTrue akkumultor adott bit = ?
GetCarryRegister tvitelregisztert az akkumultorba felhozni
Bit mozgatsok ............................................................................................................ 30
SHL bitmintt adott rtkkel balra tolni
SHR bitmintt adott rtkkel jobbra tolni
ShiftLeftCarry bitmintt - carry biten - t adott rtkkel balra tolni
ShiftRightCarry bitmintt - carry biten - t adott rtkkel jobbra tolni
ROL bitmintt adott rtkkel balra forgatni
ROR bitmintt adott rtkkel jobbra forgatni

23
Forrs: http://www.doksi.hu

Fggvnyek
Logikai fggvnyek..................................................................................................... 31
AND, & logikai S kapcsolat
OR logikai VAGY kapcsolat
XOR logikai KIZR VAGY kapcsolat
NOT bitminta bitenknti neglsa
sszehasonltsi fggvnyek...................................................................................... 31
GT NAGYOBB, MINT sszehasonlts
GE NAGYOBB, EGYENL sszehasonlts
EQ EGYENL sszehasonlts
LE KISEBB, EGYENL sszehasonlts
NT KISEBB, MINT sszehasonlts
NE NEM EGYENL sszehasonlts
Opercis rendszer-fggvnyek ................................................................................ 31
PLC_Message rendszerdiagnosztikai status-bjt/sz kiolvassa
PLC_ReadCLock valsidej ra egyedi elemeinek kiolvassa
Megszaktskrst tilt / engedlyez fggvnyek................................................... 32
Disable_Interrupt megszaktskrs tilts
Enable_Interrupt megszaktskrs engedlyezs
Karakterlnccal kapcsolatos fggvnyek ................................................................. 34
LEN adott karakterlnc hosszt megllaptani
CONCAT karakterlncokat egybefzni
DELETE karakterlncbl adott karaktereket trlni
FIND karakterlncban adott karaktersorozatot megtallni
INSERT karakterlncba vlaszthat hosszsg karaktereket befzni
LEFT karakterlncbl balrl vlaszthat hosszsg karakterek kivlasztsa
MID karakterlnc belsejbl vlaszthat hosszsg karakterek kivlasztsa
REPLACE karakterlncban vlaszthat helyen adott karaktersorozat behelyettestse
RIGHT karakterlnc jobbrl vlaszthat hosszsg karakterek kivlasztsa
Kivlasztsi fggvnyek ............................................................................................. 37
LIMIT rtkkorltozs
MAX maximumrtk keress
MIN minimumrtk keress
MUX multiplexer
SEL feltteles operandus kivlaszts

24
Forrs: http://www.doksi.hu

Fggvnyek

Adattpusokat konvertl fggvnyek


*_TO_** tpuskonverzik elemi adattpusok kztt
Az IEC programnyelv elrsai alapjn a szoftver csak azonos adattpus operandusok kztti
mveleteket enged meg. Pldul ha egy (FB, FU) bemeneti vltozjnak BYTE adattpusnak
kell lenni, akkor az tadand vltozt, mely trtnetesen USINT adattpussal rendelkezik,
tads eltt az USINT_TO_BYTE konverzis fggvnnyel t kell alaktani.
A konverzi mindig az akkumultorban lev adatra vonatkozik, a fggvny eredmnye is az
akkumultorban kpzdik.

A numerikus adatok konverzija sorn gyeljen arra, hogy a cl


adattpus a megengedett rtket ne lpje tl. Ha a bemeneti
operandus tl nagy, akkor a kimeneti operandus a rendelkezsre ll
bithosszsgra redukldik, mely hibs rtket eredmnyezhet!

A Sucosoft az albbi konverzis fggvnyeket biztostja az elemi adattpusok kztt

kimenet

DWORD 1)

STRING 1)
UDINT 1)

REAL 1)

WORD
DINT1)

USINT

BOOL

DATE
BYTE
UINT
SINT

TOD

BCD
bemenet
INT

SINT X X X X X X X X X X X
INT X X X X X X X X X X X
1)
DINT X X X X X X X X X X X
USINT X X X X X X X X X X X
UINT X X X X X X X X X X X X
1)
UDINT X X X X X X X X X X X
REAL 1) X X X X X X
BOOL X X X X X X X X X
BYTE X X X X X X X X X
WORD X X X X X X X X X
DWORD 1) X X X X X X X X X
DATE_AND_TIME X X
TIME X X
BCD X X X X X X
STRING 1) X
ADDRESS 2) X

1) csak a PS4-300 s PS416 esetn


2) csak a PS4-200 s PS4-300 esetn

25
Forrs: http://www.doksi.hu

Fggvnyek
Megjegyzsek:
1. Az eljeles numerikus rtkek bitsorozatt val talaktsa sorn a fggvny
figyelembe veszi az eljelet.
High Low
pl. 0010_0101 0000_0000 0010_0101
SINT talaktsa WORD tpuss, illetve

pl. 1010_0101 1111_1111 0010_0101


SINT talaktsa WORD tpuss
2. A BYTE tpus adat legfelsbb bitje nincs kirtkelve, ha az UINT/INT talaktsra
kerl. A BYTE rtke a Low-bjtba kerl, mg a fels(High)-bjt o-val tltdik fel.
High Low
pl. 0010_0101 0000_0000 0010_0101
BYTE talaktsa UINT tpuss, illetve

pl. 1010_0101 0000_0000 1010_0101


BYTE talaktsa UINT tpuss
3. REAL_TO_ANY_INT talakts sorn a tizedesvessz utni szm az egszszm
kerekts szablyai szerint trtnik. Ha a tizedesvessz utni szm = 0,5, akkor a
kerekts a kzelebb lev pros szmra trtnik.
Egyszerbb megolds a TRUNC fggvny, mely a REAL adattpust ANY_INT
tpuss alaktja, mikzben csak az egszrszt veszi figyelembe. (A TRUNC csak a
PS4-300 s a PS416-ra van rtelmezve.)
pl.: 1.4 1
1.4 -1
1.6 2
1.6 -2
1.5 2
2.5 2
0.5 0
3.5 4
Ha a cl adattpus rtktartomnyt az talaktott eredmny tllpi, akkor a
rendelkezsre ll bithossz redukldik.
pl. REAL_TO_SINT esetn
2049.1 1
2178.0 -126
4. A TIME_TO_UINT s a TIME_TO_USINT fggvnyek esetn a 65535, illetve 255-
nl nagyobb eredmnyek rvnytelenek. Az eredmny helyessge az IsOverflow
fggvnnyel krdezhet le.
5. A STRING_TO_UINT fggvny csak a string vltoz baloldali kt karaktert
dolgozza fel.
A high-bjtban az els, a low-bjtban a msodik karakter rtke jelenik
Egy karakter esetn a jel rtke a low-bjtban helyezkedik el.

26
Forrs: http://www.doksi.hu

Fggvnyek

Numerikus fggvnyek
ABS A fggvny a bemenetre adott ANY_NUM abszolt rtkt adja vissza. Az adattpus
az talakts sorn nem vltozik.
Vigyzat: A legkisebb SINT (-128) s a INT (-32768) rtkeket a fggvny nem
vltoztatja meg, mivel a 128 s 128, illetve a 32768 s 32768 binris rtke azonos.
Ha ilyen rtkek lpnek fel az ABS fggvnyben, akkor hiba generls nem trtnik.
NEG A fggvny ANY_NUM adattpusokra vonatkozik. Az adattpus az talakts sorn
nem vltozik.
Eljeles szmok esetn a fggvny kimenet = (-1)*bemenet, azonban eljel nlkli
szmok esetn a fggvny eredmnye egy msik szm!

Aritmetikai fggvnyek
Numerikus rtkek adattpusokkal val mveletek szablyai:
Numerikus rtkek (ANY_NUM) kztti mveletek esetn a be- illetve kimeneti
operandusoknak azonos tpusak kell lenni.
ADD ADD, SUB, esetn, ha az eredmny tllpi az adattpusra megengedett tartomnyt,
SUB akkor a tlcsorduls llapot bit bebillen, mely az IsOverFlow fggvnnyel
krdezhet le.
MUL MUL esetn, ha az eredmny tllpi az adattpusra megengedett tartomnyt, akkor a
tlcsordult rtk az tvitel regiszterbe (melynek mrete mindig megegyezik a
bemeneti operandusok mretvel) kerl. rtke a GetCarryRegister fggvnnyel
DIV krdezhet le.
DIV mvelet esetn az egsz oszts maradka az tvitel regiszterbe (melynek mrete
mindig megegyezik a bemeneti operandusok mretvel) kerl. rtke a
GetCarryRegister fggvnnyel krdezhet le.
Idtartam illetve dtum s ra adattpusokkal val mveletek szablyai:
ADD ADD esetn a msodik operandus csak TIME tpus lehet, amit az elsknt megadott
SUB TIME, TIME_OF_DATE, DATE_AND_TIME1) tpushoz lehet hozzadni. A
kimenet adattpus megegyezik az els operandus adattpusval.

SUB esetn az albbi tblzat szerinti vltozatok lehetsgesek:


bemenet1 bemenet2 = Klnbsg (kimenet)
TIME TIME TIME
DATE1) DATE TIME
TIME_OF_DAY TIME TIME_OF_DAY
TIME_OF_DAY TIME_OF_DAY TIME
1)
DATE_AND_TIME TIME DATE_AND_TIME
DATE_AND_TIME1) DATE_AND_TIME TIME

1) csak a PS4-300 s a PS416 esetn

Csak a PS4-200-ra vonatkozan: A TIME adattpus csak pozitv


tartomnyban ad helyes eredmnyt!

MUL A MUL s DIV esetn az els operandus lehet TIME adattpus, mg a msodik csak
DIV ANY_NUM adattpust vehet fel.

27
Forrs: http://www.doksi.hu

Fggvnyek
Cm (ADDRESS) adattpusokkal val mveletek szablyai:
A cmekkel kapcsolatos mind a ngy alapmvelet megengedett, de csak a PS4-200 s
a PS4-300 esetn lehetsges!
Az albbi tblzat szerinti vltozatok lehetsgesek:
bemenet1 bemenet2 kimenet
ADDRESS ANY_INT ADDRESS
ADDRESS ADDRESS ADDRESS

MOD A fggvny ANY_NUM adattpusokra vonatkozik. Az adattpus az talakts sorn


nem vltozik.
A fggvny az egszszm oszts maradkt helyezi el a kimeneten
(akkumultorban)
Csak aPS4-300 s a PS416 esetn rtelmezett fggvny!

llapotbit vizsgl fggvnyek


A vizsgl fggvnyek kivlan alkalmasak feltteles ugrsok, hvsok feltteleinek
meghatrozshoz.
IsOverflow, IsPositive, IsZero: Az llapotbit vizsgl fggvnyek kzvetlenl az aritmetikai
mveletek utn hasznlva adja a megfelel eredmnyt BOOL adattpusban.
IsOverflow: aritmetikai mvelet sorn trtnt-e tlcsorduls? (igen = 1; nem = 0)
IsPositive: aritmetikai mvelet eredmnye 0, vagy pozitvszm? (igen = 1; nem = 0)
IsZero: aritmetikai mvelet eredmnye 0? (igen = 1; nem = 0)
PROGRAM overflow
VAR
Edge : R_TRIG; (* felfut vizsglatt vgz FB *)
Signal : AT %I0.0.0.0.0 : BOOL;
Pulse : BOOL;
Number1 : SINT := 127;
END_VAR

LD Number1
ADD 12
IsOverflow
CALC Edge (CLK := Signal)
LD Edge.Q
ST Pulse
END_PROGRAM

IsCarry: A fggvnnyel, a bitmozgatsi fggvnyeket kveten, az tviteli bit rtkelhet ki.


Bemenete ANY_INT, kimenete BOOL.
PROGRAM carrybit
VAR
Edge : R_TRIG;
Signal : AT %I0.0.0.0.0 : BOOL;
Pulse : BOOL;
Byte1 : BYTE := 2#11110000;
END_VAR

28
Forrs: http://www.doksi.hu

Fggvnyek
LD Byte1
SHL 3
BYTE_TO_USINT
IsCarry (* Carry regiszter = 1 *)
CALC Edge (CLK := Signal)
LD Edge.Q
ST Pulse
END_PROGRAM

IsBitTrue: az akkumultorba elhelyezett bitminta (ANY_BIT) tetszleges bitjnek


vizsglatra alkalmas.
PROGRAM bittest
VAR
BitPattern : BYTE := 2#11010011
Position :UINT := 4;
BitValue : BOOL;
END_VAR
LD BitPattern
IsBitTrue Position
ST BitValue (* bit rtke: 1 *)
.
.
END_PROGRAM

GetCarryRegister A fggvny a ANY_INT adatokon vgzett MUL esetn elfordul


tlcsorduls, valamint a DIV esetn a maradk megjelentsre szolgl.
USINT, SINT, UDINT, DINT adattpusok esetn a tlcsordulsrl nem generldik
jelzs. A compiler ennek megfelel hibajelzst ad.

PROGRAM remainder
VAR
Number: INT := 127;
Result_integ : INT;
ResultRemainder : INT;
END_VAR
LD Number
DIV 4
ST Result_integ (* oszts eredmnye : 31, egsz *)
GetCarryRegister
ST ResultRemainder (* maradk : 3 *)
.
.
END_PROGRAM

29
Forrs: http://www.doksi.hu

Fggvnyek

Bit mozgatsok
SHL a Az akkumultorban lev ANY_BIT tpus bitmintt a fggvny
SHR operandusaknt megadott rtkkel (ANY_INT) balra/balra tolja. A tolskor
felszabadul helyek 0-val tltdnek fel. Az eredmny az akkumultorban a bemeneti
bitmintval azonos adattpusban ll rendelkezsre.
PROGRAM rot_bal

VAR
BitPattern : BYTE := 2#01110001;
Places : INT := 3;
NewBitPattern: BYTE;
END_VAR
LD BitPattern
ROL Places
ST NewBitPattern (* j bitminta: 2#10001011 *)
END_PROGRAM
ShiftLeftCarry, ShiftRightCarray: A fggvnyek egy hellyel balra illetve jobbra tolja
bemenetknt megadott bitmintt.
Pldul BYTE adattpus esetn:
j tviteli bit bitminta rgi tviteli bit
ShiftLeftCarry: C 7 0 C

ShiftRightCarry: C 7 0 C

PROGRAM shi_jobb
VAR
BitPattern : BYTE := 2#01011100;
NewBitPattern : BYTE;
END_VAR
LD BitPattern
ShiftRightCarry
ST NewBitPattern (* j bitminta: x0101110 ahol "x" *)
(* a 7. bitpozicban az tvitelbit rgi rtke *)
.
.
END_PROGRAM
ROL A fggvnyek az akkumultor tartalmt (ANY_BIT) a fggvny paramtereknt
ROR megadott rtkkel (ANY_INT) balra vagy jobbra forgatja, azaz a kitolt biteket a msik
oldalon visszatlti. Az j bitminta az akkumultorban ll rendelkezsre.
PROGRAM rot_le
VAR
BitPattern : BYTE := 2#01110001;
Places : INT := 3;
NewBitPattern: BYTE;
END_VAR

30
Forrs: http://www.doksi.hu

Fggvnyek
LD BitPattern
ROL Places
ST NewBitPattern (* az j bitminta: 2#10001011 *)
END_PROGRAM

Logikai fggvnyek
A fggvnyek a szoksos logikai fggvnyek (rsze a Sucosoft utastskszletnek),
melyek csak azonos adattpusokon (ANY_BIT) vgezhet el. Az eredmny a
bemenetekkel azonos tpus, s az akkumultorban kpzdik.

sszehasonltsi fggvnyek
A fggvnyek a szoksos logikai fggvnyek (rsze a Sucosoft utastskszletnek),
melyek csak azonos adattpusokon (ANY_INT) vgezhet el. Az eredmny BOOL
tpus, s az akkumultorban kpzdik.

Opercis rendszer-fggvnyek
PLC_Message: A fggvnnyel a bemenetre adott felsorols tpus vltoz egyik elemnek
rtke hatrozhat meg. A bemenet MESSAGE_TYPE (Moeller ltal definilt, csak
olvashat rendszerdiagnosztikai) vltoz, a kimenet BOOL tpus.
A MESSAGE_TYPE vltoz az egyes PLC tpusok esetn a kvetkez elemeket
tartalmazza (minden tpusra a standard bellts az ISA):
PS4-200 esetn:
TYPE
MESSAGE_TYPE
(ISA, (* start utni els programciklus *)
IRE, (* RESET nyomgomb mkdtetve *)
IFO, (* RUN zemmdban a FORCE aktv *)
REC, (* jraindts esetn a maradk-ciklus fut *)
ICS, (* a vezrls hidegen indtva *)
NKD_1, (* az SBI1-en (SBI -= Suconet K busz) friss adatok vannak *)
NKD_2, (* az SBI2-en (SBI -= Suconet K busz) friss adatok vannak *)
NKD_3 (* az SBI3-en (SBI -= Suconet K busz) friss adatok vannak *)
) := ISA ;
END_TYPE
PS4-300 esetn:
TYPE
MESSAGE_TYPE
(ISA, (* =0: start utni els programciklus *)
IRE, (* =1: RESET nyomgomb mkdtetve *)
IFO, (* =2: RUN zemmdban a FORCE aktv *)
REC, (* =3: jraindts esetn a maradk-ciklus fut *)
ICS, (* =4: a vezrls hidegen indtva *)
NKD_1, (* =5: az SBI1-en (SBI -= Suconet K busz) friss adatok vannak *)
NKD_2, (* =6: az SBI2-en (SBI -= Suconet K busz) friss adatok vannak *)
NKD_3, (* =7: az SBI3-en (SBI -= Suconet K busz) friss adatok vannak *)
ICT, (* =8: ECT az els programciklusban *)
IAH, (* =9: EAH az els programciklusban *)
IRT, (* =10: ERT az els programciklusban *)
) := ISA ;
END_TYPE

31
Forrs: http://www.doksi.hu

Fggvnyek
PS416 esetn:
TYPE
MESSAGE_TYPE
(ICS (* =0: start utni els programciklus hideg indtssal*)
ISA, (* =1: start utni els programciklus *)
RTW, (* =2: run time warning -figyelmeztets *)
REC, (* =3: jraindts esetn a maradk-ciklus fut )
DAKE, (* =4: AK-Error, az egysg nem szlthat meg, esetleg nincs bent )
KOM, (* =5: a kommunikcis partner nem vlaszol *)
) := ISA ;
END_TYPE
Plda: Rendszerdiagnosztikai tvirat kirtkelse
LD ISA
PLC_Message
JMPCN No_new_start
PLC_ReadClock: A fggvnnyel a bemenetre adott felsorols tpus vltoz egyik elemnek
rtke hatrozhat meg. A bemenet PLC_Clock (Moeller ltal definilt, csak
olvashat) vltoz, a kimenet USINT tpus.
A PLC_Clock standard belltsa a CK_YEAR):
PLC_CLOCK:
CK_YEAR, (* vek szma *)
CK_MONTH, (* hnap *)
CK_DAY, (* nap *)
CK_WEEKDAY, (*htnap sorszm; 0 = vasrnap *)
CK_HOURS, (* rk *)
CK_MINUTES, (* percek *)
CK_SECONDS (* msodpercek *)
) := CK_YEAR;
END_TYPE
PROGRAM RD_Clock
VAR
Hours : USINT ;
END_VAR
LD CK_HOURS
PLC_ReadClock
ST Hours
END_PROGRAM

Megszaktst tilt / engedlyez fggvnyek


A fggvnyek bemeneti paramtere a Moeller ltal specifiklt, ALARM_CHANNEL
felsorols tpus vltoz, mely a PLC tpustl fgg:
PS4-200 esetn:
TYPE ALARM_CHANNEL
(CounterAlarm_Channel,
TimerAlarm_Channel,
EdgeAlarm_Channel) := CounterAlarm_Channel ;
END_TYPE

32
Forrs: http://www.doksi.hu

Fggvnyek
PS4-300 esetn:
TYPE ALARM_CHANNEL
(CounterAlarm_Channel, (* 0 *)
TimerAlarm_Channel, (* 1 *)
EdgeAlarm_Channel_1, (* 2 *)
EdgeAlarm_Channel_2 (* 3 *)
) := CounterAlarm_Channel ;
END_TYPE
PS416 esetn:
TYPE ALARM_CHANNEL
(CounterAlarm_Channel1, (* 0 *)
TimerAlarm_Channel, (* 1 *)
EdgeAlarm_Channel_1, (* 2 *)
EdgeAlarm_Channel_2, (* 3 *)
EdgeAlarm_Channel_3, (* 4 *)
EdgeAlarm_Channel_4, (* 5 *)
EdgeAlarm_Channel_5, (* 6 *)
EdgeAlarm_Channel_6, (* 7 *)
EdgeAlarm_Channel_7, (* 8 *)
EdgeAlarm_Channel_8) (* 9 *)
):= CounterAlarm_Channel ;
END_TYPE
Disable_Interrupt: A fggvny hasznlatval egy lehetsges megszaktskrs letiltsra
kerl. gy a fprogrambeli rst, olvasst a megszaktst okoz forrs nem tudja
flbeszaktani, azaz az adatok szinkronizlhatk. (Lehetsges megszaktskr
forrsok a CounterAlarm, EdgeAlarm, s a TimerAlarm (PS4-200, PS4-300 esetn),
illetve a CAlarm, FAlarm, TAlarm (PS416 esetn).)
A fggvnyt nll szekvenciaknt kell alkalmazni. Lsd a kvetkez alkalmazst.
PROGRAM D_Alarm
VAR_GLOBAL
Intermediate_storage: INT ;
Edgealarm : EdgeAlarm ;
I_Routine : AlarmFB ;
END_VAR
LD ICS (*start figyels, mert a megszaktskrst
PLC_Message (*FB-t csak egyszer kell hvni *)
CALC Edgealarm
(EnableDisable := 1,
Number := 0,
RisingEdge := 0,
SetPointValue := 1,
Subroutine := I_Routine)
LD EdgeAlarm_Channel
Disable_Interrupt (* EdgeAlarm megszaktsk. tilts *)
LD 500
ST Intermediate_storage
LD EdgeAlarm_Channel
Enable_Interrupt (* megszaktskrs engedlyezs *)
END_PROGRAM

33
Forrs: http://www.doksi.hu

Fggvnyek
FUNCTION_BLOCK AlarmFB
VAR_EXTERNAL
Intermediate_storage: INT ;
END_VAR
LD 30000
ST Intermediate_storage
END_FUNCTION_BLOCK

Enable_Interrupt: A fggvny hasznlatval egy korbban letiltott megszaktskrst lehet


engedlyezni. (Lehetsges megszaktskr forrsok a CounterAlarm, EdgeAlarm, s a
TimerAlarm (PS4-200, PS4-300 esetn), illetve a CAlarm, FAlarm, TAlarm (PS416 esetn).
A fggvnyt nll szekvenciaknt kell alkalmazni. Pldaknt lsd az elz alkalmazst.

Karakterlnccal kapcsolatos fggvnyek


Az albbi STRING vltozkat kezel fggvnyek csak a PS4-300 s a PS416 vezrlsekre
rvnyesek.
LEN Egy karakterlnc hosszt adja meg INT adattpusban.
PROGRAM how_long
VAR
Text: STRING := 'Term';
TextLength : INT;
END_VAR
LD Text
LEN
ST TextLength (* szveg hossza: 7 *)
END_PROGRAM

CONCAT Tbb karakterlncot fz egy jabb karakterlncba.


PROGRAM n_texts
VAR
Text1 : String := 'ab';
Text2 : STRING := 'cd';
Text3 : STRING := 'ef';
Texts_1_2_3 : STRING;
END_VAR
LD Text1
CONCAT Text2, Text3
ST Texts_1_2_3 (* Texts_1_2_3: 'abcdef' *)
END_PROGRAM

Msik alkalmazsi lehetsg, dtum s id egy vltozba val sszefzse.


PROGRAM deadline
VAR
Date : DATE := D#1997-05-10;
Time : TIME_OF_DAY := T0D#6:35:00.00;
Date_and_Time : DATE_AND_TIME;
END_VAR

34
Forrs: http://www.doksi.hu

Fggvnyek
LD Date
CONCAT Time
ST Date_and_Time (*dtum s id: DT#1997-05-10-6:35 *)
END_PROGRAM
DELETE A megadott karakterlncban az L pozcitl kezdve P szm karaktert letrl. P
s L ANY_INT tpusak. H L = 0, vagy P > mint az eredeti bemeneti karakterlnc
hossza, akkor a karakterlnc vltozatlan marad.
PROGRAM Delete
VAR
Text1 : STRING := 'abABCDcd';
Length : UINT := 3;
Position : UINT := 5;
Text2 : STRING;
END_VAR
LD Text1
DELETE Length, Position
ST Text2 (* Text2: 'abABd' *)
END_PROGRAM
FIND A bemenetknt megadott STRING vltozban keresi az argumentumban megadott
STRING vltozt. Kimenete INT tpus szm, mely megmutatja a keresett vltoz
helyt. Ha nem tallja, akkor a kimenet rtke 0. Ha a vltozs tbbszr is elfordul a
bemenetben, akkor az els elforduls helyt mutatja a kimenet rtke.
PROGRAM find
VAR
Basic_Text : STRING := 'On_condition';
Find_Text : STRING := 'on';
Position : INT;
END_VAR
LD Basic_Text
FIND Find_Text
ST Position (* Position: 5 *)
END_PROGRAM
INSERT A fggvny els argumentumaknt megadott STRING vltozt a msodikknt, P
vltozval (ANY_INT) megadott rtktl kezdve beszrja a bemeneti STRING
vltozba. Ha a P rtke nagyobb mint a bemeneti STRING vltoz hossza, akkor a
bemeneti vltoz vltozatlan marad.
PROGRAM insert
VAR
Text1 : STRING := 'abcd';
Text2 : STRING := 'ABCD';
Position : INT := 2;
NewText : STRING;
END_VAR
LD Text1
INSERT Text2, Position
ST NewText (* NewText: 'abABCDcd' *)
END_PROGRAM

35
Forrs: http://www.doksi.hu

Fggvnyek
LEFT A bemenetknt megadott STRING vltoz bal szls rszt veszi t L (ANY_INT)
rtkben.
PROGRAM li_text
VAR
String : STRING := 'Teststring';
CharNo : INT := 4;
n_left_Chars : STRING;
END_VAR
LD String
LEFT CharNo
ST n_left_Chars (* n_left_Chars: 'Test' *)
END_PROGRAM

MID A bemenetknt megadott STRING vltozbl L szm karaktert metsz ki a P


argumentumtl kezdden. Az L s P a fggvny els s msodik argumentuma, s
ANY_INT tpusak.
PROGRAM parttext
VAR
String : STRING := 'Test_string';
CharNo : INT := 7;
Start : INT := 5;
Text_Section : STRING;
END_VAR
LD String
MID CharNo, Start
ST Text_Section (* Text_Section: 'Characters' *)
END_PROGRAM

Replace A bemenetknt megadott STRING vltozba behelyezi az els argumentumknt


megadott STRING vltozt a harmadik argumentumknt megadott P (ANY_INT)
pozcitl kezdden. Ugyanakkor a P-tl kezdve a msodik argumentumknt
megadott L (ANY_INT) hosszban a bemeneti STRING vltoz karakterei trldnek.
L = 0 megfelel az INSERT fggvnynek. Ha a P nagyobb, mint a bemenetknt
megadott STRING vltoz hossza, akkor a fggvny a bemeneti STRING rtket adja
vissza.
PROGRAM replace
VAR
Old_Text : STRING := 'abbCDEe';
_Characters : STRING := 'cd';
New_Text : STRING;
END_VAR
LD Old_Text
REPLACE New_Characters, 4, 3 (*L=4, P=3*)
ST New _Text (* New _Text: 'abcde *)
END_PROGRAM

36
Forrs: http://www.doksi.hu

Fggvnyek
RIGHT A bemenetknt megadott STRING vltoz jobb szls rszt veszi t L (ANY_INT)
rtkben.
PROGRAM re_text
VAR
String : STRING := 'TestString';
StringNo : INT := 6;
n_right_chars : STRING;
END_VAR
LD String
RIGHT StringNo
ST n_right_chars (*n_right_chars: 'String' *)
END_PROGRAM

Kivlasztsi fggvnyek
Az albbi STRING vltozkat kezel fggvnyek csak a PS4-300 s a PS416 vezrlsekre
rvnyesek.
LIMIT rtkkorltozs
LIMIT

*) MIN *)
*) IN
*) MX

*) a tmogatott adattpusok: ANY_BIT, ANY_INT, ANY_DATE, TIME, STRING(1)


Az sszes adattpusnak azonosnak kell lenni!
MN als hatrrtk
IN korltozand vltoz
MX fels hatrrtk
Az MN s az MX rjk el a az als s fels korltrtket.
Ha az IN-re adott rtk a korltok kztt van, akkor az IN,
ha kisebb, akkor az MN
ha nagyobb, akkor az MX jelenik meg a kimeneten.
PROGRAM limits
VAR
max_value : INT := 124;
min_value : INT := 17;
MeasVal AT %IW0.0.0.10:INT; (*IW0.0.0.10 mostani rtke: 135 *)
Result : INT;
END_VAR
LD min_value
LIMIT MeasVal, max_value
ST Result (* Result: 124 *)
END_PROGRAM

37
Forrs: http://www.doksi.hu

Fggvnyek
MAX Maximum, (minimum) kivlaszts
MIN
MAX (MIN)

*) IN1
*)
*) IN2
. .
*) INn
*) a tmogatott adattpusok: ANY_BIT, ANY_INT, ANY_DATE, TIME, STRING
Az sszes adattpusnak azonosnak kell lenni!
IN1 bemeneti rtkek, melyekbl a legnagyobb kerl kivlasztsra
INn
Az MAX fggvny a bemenetek kzl a legnagyobbat, a MIN fggvny a legkisebbet adja
vissza.
A STRING adattpusok kzl a leghosszabb/legkisebb karakterlnc kerl kivlasztsra. Ha
azonos hosszakat tall a fggvny, akkor az elszr nagyobb/kisebb rtk karakterrel
rendelkez kerl kivlasztsra.
PROGRAM minimum
VAR
Value1 : SINT := 155;
Value2 : SINT := -24;
Value3 : SINT := -3;
Value4 : SINT := 5;
Lowest : SINT;
END_VAR
LD Value1
MIN Value2, Value3, Value4
ST Lowest (*Lowest: -24 *)
END_PROGRAM

MUX Multiplexer
MUX

ANY_INT K
*)
*) IN0
*) IN1
. .
*) IN6

*) a tmogatott adattpusok: ANY_BIT, ANY_INT, ANY_DATE, TIME, STRING


Az IN0IN6 adattpusnak azonosnak kell lenni!

38
Forrs: http://www.doksi.hu

Fggvnyek
K Kivlaszt operandus. Az operandus rtke adja meg, hogy melyik bemenetet
kell a fggvny rtkeknt visszaadni.
rvnyes rtkek, K = 06, ha Kennl nagyobb, akkor a legnagyobb
rvnyes rtket vlasztja ki.
IN0 max. 7 bemeneti rtk, melyekbl a legnagyobb kerl kivlasztsra
IN6
Pldaprogram: kt bemeneti rtk kzli vlaszts
PROGRAM select
VAR
IN_No : USINT := 2;
Numb0 : INT := 15;
Numb1 : INT := -123;
Numb2 : INT := 1;
SelectedNo : INT;
MUX a, b, c, d, e, f, g, h, i, j, K : BYTE;
result : BYTE;
END_VAR
LD IN_Nr
MUX Numb0, Numb1, Numb2
ST SelectedNo (* SelectedNo: 1 *)
END_PROGRAM

SEL feltteles operandus kivlaszts


SEL

BOOL G
*)
*) IN0
*) IN1

*) a tmogatott adattpusok: ANY_BIT, ANY_INT, ANY_DATE, TIME, STRING


Az IN1, IN2 adattpusnak azonosnak kell lenni!
G kivlasztsi felttel
IN0 G = 0 estn kivlasztand operandus
IN1 G = 1 estn kivlasztand operandus
PROGRAM select
VAR
Text1 : STRING := 'ABC';
Text2 : STRING := 'abc';
SelectorSwitch AT %I0.0.0.0.3 : BOOL;
Selected : STRING;
END_VAR
LD SelectorSwitch
SEL Text1, Text2
ST Selected (* a vltoz tartalmt az I0.0.0.0.3 hatrozza meg *)
END_PROGRAM

39
Forrs: http://www.doksi.hu

Funkciblokkok

6. Funkciblokkok
A Sucosoft S40 a funkciblokkok nagy vlasztkt nyjtja a programozs rszfeladatainak
megknnytsre.
Az IEC 1131-3 ltal definilt funkciblokkokon kvl a Moeller Electric a PLC-khez tovbbi
gyrt specifikus funkciblokkokat is ksztett, melyek kihasznljk a PLC egyedi
adottsgait. Ezek hasznlata tovbb knnytheti az egyes felhasznli alkalmazsok
elksztst.
Az albbiakban csoportostva felsoroljuk a fontosabb funkciblokkokat:

A. Idztk
MS_TimeFalling elejtsre ksleltetett idzt (milliszekundumos megadssal)...................... 95
MS_TimeRising meghzsra ksleltetett idzt (milliszekundumos megadssal)................ 97
S_TimeFalling elejtsre ksleltetett idzt (szekundumos megadssal) ........................... 109
S_TimeRising meghzsra ksleltetett idzt (szekundumos megadssal) ..................... 111
TimeGenerator temad impulzusgenertor ....................................................................... 143
TimePulse impulzuskpz............................................................................................ 145
B. Szmllk s sszehasonltsok
16Bit_Compare 16 bites sszehasonltsok............................................................................ 45
_16bitCounter 16-bites elre- / htraszmll ..................................................................... 46
C. Dtum, id mveletek
GetRealTimeClock vals idej ra kiolvassa............................................................................. 89
RealTimeClock vals idej ra sszehasonltsa egyedi bemeneti adatokkal ..................... 104
RTC vals idej ra lltsa................................................................................ 108
SetRealTimeClock vals idej ra lltsa................................................................................ 128
DATconcat dtum s id (DATE_AND_TIME) tpus vltoz sszelltsa
egyedi UINT tpus adatokbl ..................................................................... 68
DATsplit dtum s id (DATE_AND_TIME) tpus vltoz sztvlasztsa
egyedi UINT tpus adatokra ....................................................................... 72
DateConcat dtum (DATE) tpus vltoz sszelltsa
egyedi UINT tpus adatokbl ..................................................................... 70
DateSplit dtum (DATE) tpus vltoz sztvlasztsa
egyedi UINT tpus adatokra ....................................................................... 71
TimeConcat id (TIME) tpus vltoz sszelltsa
egyedi UINT tpus adatokbl ................................................................... 141
TimeSplit id (TIME) tpus vltoz sztvlasztsa
egyedi UINT tpus adatokra ..................................................................... 150
TODconcat napi id (TOD) tpus vltoz sszelltsa
egyedi UINT tpus adatokbl ................................................................... 152

40
Forrs: http://www.doksi.hu

Funkciblokkok
TODsplit napi id (TOD) tpus vltoz sztvlasztsa
egyedi UINT tpus adatokra ..................................................................... 153
D. Regiszter mveletek
SR_x bites lptet regiszter.................................................................................. 130
SRB_x bjtos lpet regiszter................................................................................. 133
SRW_x szavas lpet regiszter................................................................................ 136
LifoBx 8-bites veremtr regiszter ............................................................................. 90
LifoWx 16-bites veremtr regiszter ........................................................................... 92
FifoBx 8-bites cstr regiszter.................................................................................. 83
FifoWx 16-bites cstr regiszter................................................................................ 86
E. Kdkonvertlsok
_16BitBinaryToBCD 16-bit binris kdols szm -> decimliss alaktsa ............................ 43
BCDTo16BitBinary decimlis kdols szm -> 16-bit binriss alaktsa ............................ 49
F. Tmb/adatblokk mveletek
CompareArray adatblokkok sszehasonltsa, adott adat keresse a blokkban.................... 58
TransferArray adatblokk msolsa, inicializlsa ............................................................. 154
Serialize tetszleges adatstruktra bjtos tmbbe val msolsa ............................. 125
Deserialize tmbbl tetszleges formtum adatok kivlasztsa ................................... 77
BlockCompare adatblokkok sszehasonltsa, adott adat keresse a blokkban
(cmvltozk alkalmazsval) ...................................................................... 50
BlockTransfer adatblokk msolsa, inicializlsa (cmvltozk alkalmazsval)............... 55
G. String feldolgozs
ADRtoSTR vett adatbjtok STRING tpus vltozv alaktsa (cmvltozkkal) ........ 48
STRtoADR STRING tpus vltoz adott cmterletre msolsa (cmvltozkkal) .... 139
COMtoSTR vett adatbjtok STRING tpus vltozv alaktsa (tmbvltozkkal)...... 62
STRtoCOM STRING tpus vltoz adott cmterletre msolsa (tmbvltozkkal) .. 140
H. Kommunikci
SCO transzparens soros vonali kommunikci .................................................. 115
DE4netK DF4 frekvenciavltk kommunikcis modulja .......................................... 74
MI4netK MI4 kijelzk kommunikcis modulja ........................................................ 94
I. Memriakrtya rs, olvass
ReadMC adatok olvassa a flash-memribl ............................................................ 99
WriteMC adatok rsa a flash-memriba.................................................................. 156
ReloadData adatok olvassa a flash-memribl (cmvltozk alkalmazsval) ......... 102
SaveData adatok rsa a flash-memriba (cmvltozk alkalmazsval)................. 113

41
Forrs: http://www.doksi.hu

Funkciblokkok

J. Megszakts kezelsek
CounterAlarm szmll megszaktskezels ....................................................................... 64
EdgeAlarm vltozsfigyels megszaktskezels............................................................ 79
TimerAlarm idztses megszaktskezels.................................................................... 147

42
Forrs: http://www.doksi.hu

_16BitBinaryToBCD

_16BitBinaryToBCD 16-bit binris kdols szm -> decimliss alaktsa

_16BitBinaryToBCD

INT BinaryValue Signed BOOL

DecimalHigh UINT

DecimalLow UINT

Az operandusok jelentse:
BinaryValue a binrisan kdolt bemeneti rtk
Signed a BCD szm eljele, (0 = pozitv, 1 = negatv)
DecimalHigh a BCD szm 5. dekdja
DecimalLow a BCD szm 1.- 4. dekdjai
Lers:
16 bites binrisan kdolt szmot talakt 5 deks hosszsg BCD szmm. Az eljel
a Signed kimeneten jelenik meg. ( 0 + , 1 - )
4. dekd 3. dekd 2. dekd 1. dekd
DecimalLow

5. dekd
DecimalHigh

binris szm BCD Signed DecimalHigh DecimalLow


0000 0 0 0 0 0 0 0 0 0 0
0001 1 0 0 0 0 0 0 0 0 1
.. ..
7FFF 32767 0 0 0 0 3 2 7 6 7
8000 -32768 1 0 0 0 3 2 7 6 8
8001 -32767 1 0 0 0 3 2 7 6 7
.. ..
FFFF -1 1 0 0 0 0 0 0 0 1

43
Forrs: http://www.doksi.hu

_16BitBinaryToBCD
Pldaprogram:
PROGRAM du16_bcd

VAR
Converter1 : _16BitBinaryToBCD;
BinaryNumb : INT;
Sign : BOOL;
HighNumber : UINT;
LowNumbers : UINT;
END_VAR

CAL Converter1(BinaryValue := BinaryNumb)

LD Converter1.Signed
ST Sign

LD Converter1.DecimalHigh
ST HighNumber

LD Converter1.DecimalLow
ST LowNumbers

END_PROGRAM

44
Forrs: http://www.doksi.hu

_16Bit_Compare

_16Bit_Compare
_16Bit_Compare

INT InputValue1 Greater BOOL

INT InputValue2 Equal BOOL

Less BOOL

Az operandusok jelentse:
InputValue1 els sszehasonltand szm
InputValue2 msodik sszehasonltand szm
Greater eredmny: els szm nagyobb
Equal eredmny: a kt szm egyenl
Less eredmny: els szm kisebb
Lers:
A funkciblokk a kt bemeneti szm rtkt hasonltja ssze. Az eredmyn hrom
biten jelenik meg.
Less Equal Greater
InputValue1 < InputValue2 1 0 0
InputValue1 = InputValue2 0 1 0
InputValue1 > InputValue2 0 0 1

Pldaprogram:
PROGRAM length

VAR
Compare_length : _16Bit_Compare;
Length1 : INT := 10;
Length2 : INT := 10;
L1_equal_L2 : BOOL;
END_VAR
CAL Compare_length(InputValue1 := Length1,
InputValue2 := Length2)
LD Compare_length.Equal
ST L1_equal_L2
END_PROGRAM

45
Forrs: http://www.doksi.hu

_16BitCounter

_16BitCounter 16-bites elre- /htraszmll


_16BitCounter

BOOL Forward Zero BOOL

BOOL Backward OutputValue UINT

BOOL Set

BOOL ReSet

UINT InputValue

Az operandusok jelentse:
Forward Elreszmlls, felfut l
Backward Visszaszmlls, felfut l
Set rtk bers, felfut l
ReSet Visszallts, trls.
InputValue Berand rtk
Zero Jelzs: szmll llapota=0
OutputValue Szmll aktulis rtke
Lers:
A funkciblokk impulzusok elre- / htraszmllsra szolgl. A Forward bemenetre
jut felfut l eggyel nveli, a Backward bemenetre jut felfut l eggyel cskkenti a
szmll tartalmt. A szmll aktulis rtke az OutputValue kimeneten
leolvashat. A Set bemenetre adott felfut llel lehet az InputValue rtkt a
szmllnak tadni. A ReSet bemenetre adott 1-el a szmll tartalma trlhet,
tarts 1-el pedig a szmll letiltsra kerl.
A szmll rtelmezsi tartomnya: 0..65535. A szmok gyrszeren krbefutjk
a tartomnyt.
Ha szmll nem remanensknt van deklarlva, akkor minden kezdskor 0 rtket
vesz fel, s gy a Zero kimenet 1-t vesz fel. Remanens deklarls esetn a szmll
megtartja eredeti rtkt.

Megjegyzs!
A pulzusok hossznak s a pulzusok kzti sznetidnek legalbb egy-egy ciklusidnl
hosszabbnak kell lennie, hogy a szmll minden szmlland pulzust figyelembe
1
vegyen. a maximlis szmllsi frekvencia: F =
2 * TCiklusid

46
Forrs: http://www.doksi.hu

_16BitCounter
Pldaprogram:
PROGRAM parts_16

VAR RETAIN
Count_parts : _16BitCounter;
END_VAR

VAR
Light_barrier AT %I0.0.0.0.0 : BOOL;
Quantity UINT;
Clear : AT %I0.0.0.0.1 : BOOL;
END_VAR

CAL Count_parts(Forward := Light_barrier,


ReSet := Clear)

LD Count_parts.OutputValue
ST Quantity

END_PROGRAM

47
Forrs: http://www.doksi.hu

ADRtoSTR

ADRtoSTR vett adatbjtok STRING tpus vltozv alaktsa

ADRtoSTR
TextSring TextSring
ANY_STRING

BOOL Enable

UINT StrLen

ADDRESS ReceiveVariable

Az operandusok jelentse:
Enable Az talaktsi folyamat engedlyezse
StrLen Az talaktand jelek szma
ReceiveVariable A memriaterlet kezdcme, ahol az adatok tallhatk
TextSring Karakterlnc, mely a memriaterlet adataibl ltrejtt.
Lers:
A soros vonalon vett s az adott memriaterleten elhelyezett adatokat a
funkciblokk talaktja egy STRING tpus vltozv. Az Enable bemenetre adott 1-
es szinttel indthat az talaktsi mvelet.
Az StrLen bemenetre adott szmmal lehet az talaktand karakterek szmt, azaz az
eredmnyl kapott STRING vltoz hosszt megadni. Amennyiben a deklarls
sorn a STRING vltoz karakterhossza rvidebb a vteli tmbben elhelyezett
adatok szmnl, akkor csak a STRING vltozban definilt hosszsg adatok
kerlnek beolvassra.
Pldaprogram:
PROGRAM Str_Gen

VAR
Marker_to_String : ADRtoSTR;
ReceiveText : STRING(4) := 'HALT';
StartAddress AT %MB0.0.0.100 : ARRAY[1..20] OF BYTE;
ReceiveLength : UINT := 4;
END_VAR

CAL Marker_to_String(Enable := 1,
StrLen := ReceiveLength,
ReceiveVariable := &StartAddress,
TextString := ReceiveText)
(* A karaterlncot a %MB0.0.0.100-tl kezdd adatokkal tlti fel! *)

END_PROGRAM

48
Forrs: http://www.doksi.hu

BCDTo16BitBinary

BCDTo16BitBinary Decimlis kdols szm -> 16-bit binriss alaktsa

BCDTo16BitBinary

BOOL Signed BinaryValue INT

UINT DecimalValue

Az operandusok jelentse:
Signed a BCD szm eljele, (0 = pozitv, 1 = negatv)
DecimalValue a BCD szm (4 dekdban)
BinaryValue a binrisan kdolt kimeneti rtk
Lers:
4 dekdos binrisan kdolt eljeles decimlis szmot talakt eljeles binris
szmm. deks hosszsg BCD szmm. rtktartomny: -9999+9999.
A konvertland 4 dekdos BCD szmok: +11, +9999, -1311, -9999.
Signed DecimalValue BinaryValue BinaryValue
(hexadecimlis) (eljeles,
decimlis)
0 0 0 1 1 B 11
0 9 9 9 9 270F 9999
1 1 2 1 1 FAE1 -1311
1 9 9 9 9 DBF1 -9999

Pldaprogram:
PROGRAM bcd_du16

VAR
Converter3 : BCDTo16BitBinary;
DecimalNumber : UINT := 13;
Sign : BOOL := 0;
BinaryNumber : INT;
END_VAR

CAL Converter3(Signed := Sign,


DecimalValue := DecimalNumber)
LD Converter3.BinaryValue
ST BinaryNumber

END_PROGRAM

49
Forrs: http://www.doksi.hu

Blockcompare

BlockCompare adatblokkok sszehasonltsa, adott adat keresse a


blokkban (cmvltozk alkalmazsval)

BlockCompare

BOOL Mode Greater BOOL

ADDRESS SourceAddress Equal BOOL

ADDRESS DestinationAddress Less BOOL

USINT ElementNumber Output USINT

Error USINT

Az operandusok jelentse:
Mode zemmd: (0 = adatkeress, 1 = blokk sszehasonlts)
SourceAddress a forrstartomny kezdcme
DestinationAddress cltartomny kezdcme
ElementNumber msoland elemek szma
Greater sszehasonlts eredmnye nagyobb jelzs
Equal sszehasonlts eredmnye azonos jelzs
Less sszehasonlts eredmnye kisebb jelzs
Output pozci megadsa, hol van az els eltrs,
vagy a keresett adat helye
Error hibajelzs
Lers:
A funkciblokknak ktfle zemmdja van (adat keress, s adatterletek
sszehasonltsa), Az zemmd vlaszts a Mode bemenetre adott rtkkel trtnhet.

j fejlesztsek esetn a BlockCompare helyett a CompareArray


funkciblokkot ajnlott alkalmazni!

Keressi zemmd
A keress zemmd egy adatterleten elhelyezked egyedi rtk megkeressre
szolgl. A keresend adatot a SourceAddress bemeneten megadott cm vltoz
tartalmazza. Az ellenrizend tartomny kezdcmt a DestinationAddress
bemeneten lev vltoz, a tartomny nagysgt az ElementNumber bemenet adja
meg. (A vltozcmeket a cmvltoz el rt & cmopertor jelzi.
Ha a megadott helytl kezdve (DestinationAddress) tvizsglva, a kijellt terleten
bell (ElementNumber) a funkciblokk megtallja a keresett adatot (SourceAddress),

50
Forrs: http://www.doksi.hu

BlockCompare
akkor a megtallt adat helyzete az Output kimeneten megjelenik, s az Equal
kimenet magasba ( =1 ) kerl. A kimenetek llapota, amikor az rtket megtallta az
albbi:
Output = 0 . (ElementNumber - 1) Equal = 1; Less = Greater = 0

Ha a megadott rtket nem tallja meg a kijellt terleten, akkor az Output kimenet
egyenl az ElementNunber vltozval, az Equal kimenet = 0 lesz, a Less s a
Greater kimenetek pedig az utols adatrtk sszehasonltskor felvett rtkket
tartjk meg. A kimenetek llapota, amikor az rtket nem tallta meg, teht az albbi:
Output = ElementNumber Equal = 0; Less =1, Greater = 0
(Less = 0, Greater = 1)

A kvetkez plda a MB23 merker bjtban trolt "7D" rtket keresi a MB27 s a
MB32 ltal hatrolt adatterleten

Vltozcmek vltoz rtkek

%MB0.0.0.23 7D
%MB0.0.0.24 00
%MB0.0.0.25 00
%MB0.0.0.26 00
%MB0.0.0.27 3D
%MB0.0.0.28 70
%MB0.0.0.29 4D
%MB0.0.0.30 7D
%MB0.0.0.31 7D
%MB0.0.0.32 7D
%MB0.0.0.33 00
Eredmny Output = 3 %MB0.0.0.34 00
Less = 0
Equal= 1 tallatkor abbahagyja a keressi eljrst

Greater = 0

A "7D" rtket a DestinationAddress + (Output rtke) cmen tallta meg. ( Jelen


esetben MB 27 + 3 )

51
Forrs: http://www.doksi.hu

Blockcompare
Pldaprogram:
PROGRAM search

VAR
search_fb : BlockCompare;
SourceAddress AT %MB0.0.0.23 : BYTE := 16#7D;
(* a 23. bjt Marker 7Dhex kezdeti rtkkel van inicializlva *)
DestinationAddress AT %MB0.0.0.27 : BYTE;
Start AT %I0.0.0.0.0 : BOOL; (* keress indtsa *)
Found : USINT;
Result_greater : BOOL;
Result_equal : BOOL;
Result_less : BOOL;
END_VAR

LD Start
CALC search_fb(Mode := 0, (* keressi zemmd! *)
SourceAddress := &SourceAddress,
DestinationAddress := &DestinationAddress,
ElementNumber := 6 (* keressi tartomny: 6 bjt *)
)
LD search_fb.Output
ST Found (* tallati hely, ahol az els azonossg kiderlt *)
(* rtke: "DestinationAddress" + "Output" *)
LD search_fb.Greater
ST Result_greater
LD search_fb.Equal
ST Result_equal
LD search_fb.Less
ST Result_less
END_PROGRAM

sszehasonltsi zemmd
Az adatterlet sszehasonltsi zemmd kt adatterlet tartalmt hasonltja ssze.
Az adatterletek kezdeteit a SourceAddress, s a DestinationAddress bemeneteken,
az sszehasonltand terlet mrett az ElementNumber bemeneten kell megadni. Ha
a kt adatterlet tartalma azonos, akkor az Output kimeneten az ElementNumber
rtke jelenik meg, az Equal kimenet pedig 1-el jelzi az azonossgot. A kimenetek
llapota, amikor az adatterletek azonosak az albbi:
Output = ElementNumber; EQ = 1; LT = 0; GT = 0;

Ha a megadott adatterletek nem azonosak, akkor az Output kimenet jelzi az els


eltr adat helyt. Az Equal = 0 jelzi a klnbsget, a Less s a Greater kimenetek az
eltr adatrtkek sszehasonltskor felvett viszonyt mutatjk. A kimenetek
llapota, amikor az adatterletek nem azonosak az albbi:
Output = 0 . (ElementNumber 1); EQ = 0; Less =1, Greater = 0
(Less = 0, Greater = 1)

52
Forrs: http://www.doksi.hu

BlockCompare
A kvetkez plda a MB23 s MB26 kztti bjtok tartalmt hasonltja ssze az
MB30 s a MB 33 kztti bjtok tartalmval.

Vltozcmek vltoz rtkek

%MB0.0.0.23 7D
%MB0.0.0.24 3B
%MB0.0.0.25 64
%MB0.0.0.26 A6
%MB0.0.0.27 00
%MB0.0.0.28 00
%MB0.0.0.29 00
%MB0.0.0.30 7D
%MB0.0.0.31 3B
%MB0.0.0.32 64
%MB0.0.0.33 A6
Eredmny Output = 4 %MB0.0.0.34 00
Less = 0 sszehasonlts eredmnye

Equal = 1
Greater = 0

A kt adatterlet azonos (Equal = 1 s az Output = ElementNumber).

Pldaprogram:
PROGRAM compare

VAR
compare_fb : BlockCompare;
SourceAddress AT %MB0.0.0.23 : BYTE;
DestinationAddress AT %MB0.0.0.30 : BYTE;
Start AT %I0.0.0.0.0 : BOOL ; (* sszehasonlts indts *)
Discrepancy : USINT;
Result_greater : BOOL;
Result_equal : BOOL;
Result_less : BOOL;
END_VAR

53
Forrs: http://www.doksi.hu

Blockcompare
LD Start
CALC compare_fb(Mode := 1, (* sszehasonltsi zemmd! *)
SourceAddress := &SourceAddress,
DestinationAddress := &DestinationAddress,
ElementNumber := 4) (* sszehasonltand blokkmret: 4*)

LD such_fb.Output
ST Discrepancy (*els pozc, ahol eltrs volt *)
(* DestinationAddress + Output *)
LD such_fb.Greater
ST Result_greater
LD such_fb.Equal
ST Result_equal
LD such_fb.Less
ST Result_less

END_PROGRAM

54
Forrs: http://www.doksi.hu

BlockTransfer

BlockTransfer adatblokk msolsa, inicializlsa


(cmvltozk alkalmazsval)

BlockTransfer

BOOL Mode

ADDRESS SourceAddress

ADDRESS DestinationAddress

USINT ElementNumber Error USINT

Az operandusok jelentse:
Mode zemmd: (0 = inicializls, 1 = blokk msols)
SourceAddress a forrstartomny kezdcme
DestinationAddress cltartomny kezdcme
ElementNumber msoland elemek szma
Error hibajelzs
Lers:
A funkciblokknak ktfle zemmdja van (adatok inicializlsa, s adatterlet
msolsa).
Az zemmd vlaszts a Mode bemenetre adott rtkkel trtnhet.
Az ElementNumber bemenetre adott szm a az adatblokk nagysgt adja meg
bjtban kifejezve.
Az Error kimeneten az esetleges hibakd jelenik meg:
0 nincs hiba,
1 az elemek szma (ElementNumber) nulla.
2 rvnytelen forrscm a SourcsAddresse bemeneten
3 rvnytelen cltartomny cm a SourcsAddresse bemeneten
4 a forrscm azonos a cltartomny cmvel

j fejlesztsek esetn a BlockTransfer helyett a TransferArray


funkciblokkot ajnlott alkalmazni!

Msolsi zemmd
A msols zemmd egy adott adatterleten elhelyezked adatmennyisget visz t
egy msik terletre. A msoland tartomny kezdcmt a SourceAddress bemeneten

55
Forrs: http://www.doksi.hu

BlockTransfer
megadott cm vltoz tartalmazza. A cltartomny kezdcmt a
DestinationAddress bemeneten lev vltoz cme, a tartomny nagysgt az
ElementNumber bemenet adja meg. (A vltozcmeket a cmvltoz el rt &
cmopertor jelzi.
Pldaprogram:
A kvetkez plda a MB23-tl az MB26ig terjed merker bjtban trolt rtket viszi
t az MB30-tl az MB33ig terjed adatterletre.
Vltozcmek vltoz rtkek

%MB0.0.0.23 7D
%MB0.0.0.24 3B
%MB0.0.0.25 64
%MB0.0.0.26 A6
%MB0.0.0.27 00
%MB0.0.0.28 00
%MB0.0.0.29 00
%MB0.0.0.30 7D
%MB0.0.0.31 3B
%MB0.0.0.32 64
%MB0.0.0.33 A6
%MB0.0.0.34 00

PROGRAM copy

VAR
copy_fb : BlockTransfer;
SourceAddress AT %MB0.0.0.23 : BYTE;
DestinationAddress AT %MB0.0.0.30 : BYTE;
Start AT %I0.0.0.0.0 : BOOL; (* msols indtsa*)
END_VAR

LD Start
CALC copy_fb(Mode := 1, (* msols zemmd! *)
SourceAddress := &SourceAddress,
DestinationAddress := &DestinationAddress,
ElementNumber := 4) (* msoland elemek szma konstans *)

END_PROGRAM

56
Forrs: http://www.doksi.hu

BlockTransfer
Inicializlsi zemmd
Az inicializlsi zemmdban egy adott adott rtket r be egy kijellt tartomny
minden vltozjba. A msoland vltoz cmt a SourceAddress bemeneten
megadott cm vltoz tartalmazza. A cltartomny kezdcmt a
DestinationAddress bemeneten lev vltoz cme, a tartomny nagysgt az
ElementNumber bemenet adja meg. (A vltozcmeket a cmvltoz el rt &
cmopertor jelzi.
Pldaprogram:
A kvetkez plda a MB23 merker bjtban trolt "7D" rtket viszi be a MB27 s a
MB32 ltal hatrolt adatterletre

Vltozcmek vltoz rtkek

%MB0.0.0.23 7D
%MB0.0.0.24 00
%MB0.0.0.25 00
%MB0.0.0.26 00
%MB0.0.0.27 7D
%MB0.0.0.28 7D
%MB0.0.0.29 7D
%MB0.0.0.30 7D
%MB0.0.0.31 7D
%MB0.0.0.32 7D
%MB0.0.0.33 00
%MB0.0.0.34 00
PROGRAM init

VAR
init_fb : BlockTransfer;
SourceAddress AT %MB0.0.0.23 : BYTE := 16#7D;
(* MarkerByte 23 initialised with the data value 7D *)
DestinationAddress AT %MB0.0.0.27 : BYTE;
Start AT %I0.0.0.0.0 : BOOL; (* a mvelet indtsa *)
END_VAR

LD Start
CALC init_fb(Mode := 0, (* inicializlsi zemmd! *)
SourceAddress := &SourceAddress,
DestinationAddress := &DestinationAddress,
ElementNumber := 6) (* elemek szma konstans: 6bjt *)
END_PROGRAM

57
Forrs: http://www.doksi.hu

CompareArray

CompareArray adatblokkok sszehasonltsa,


adott adat keresse a blokkban

CompareArray

Source Source
ANY_ARRAY
Destination Destination
ANY_ARRAY
BOOL Mode
UINT SourceOffset Greater BOOL
UINT DestinationOffset Equal BOOL
UINT ElementNumber Less BOOL
Output UINT
Error USINT

Az operandusok jelentse:
Mode zemmd: (0 = adatkeress, 1 = blokk sszehasonlts)
Source a forrstmb
Destination cltmb
SourceOffset a forrstmbbn belli eltols rtke
DestinationOffset a cltmbbn belli eltols rtke
ElementNumber msoland bjtok szma
Greater sszehasonlts eredmnye nagyobb jelzs
Equal sszehasonlts eredmnye azonos jelzs
Less sszehasonlts eredmnye kisebb jelzs
Output pozci megadsa, hol van az els eltrs,
vagy a keresett adat helye
Error hibajelzs
Lers:
A funkciblokknak ktfle zemmdja van (adat keress, s adatterletek
sszehasonltsa), Az zemmd vlaszts a Mode bemenetre adott rtkkel trtnhet.
A forrs s a cl-tmb tetszleges nagysg tmb lehet. A tmb tpusa ANY_INT
vagy ANY_BIT lehet, kivve a BOOL (bites) tmbket.
Az Error kimenet a kvetkez rtkeket veheti fel:
0 nincs hiba,
1 az elemek szma (ElementNumber) nulla.
2 A SourceOffset rtke nagyobb, mint a Source tartomny rtke

58
Forrs: http://www.doksi.hu

CompareArray
3 Az elemek szma tllpi a a forrstartomny rtkt
4 A DestinationOffset rtke nagyobb, mint a Destination tartomny rtke
5 Az elemek szma tllpi a cltartomny rtkt

Keressi zemmd
A keress zemmd egy tmben elhelyezked egyedi rtk megkeressre szolgl. A
keresend adatot a Source bemeneten megadott tmb a SourceOffset ltal megadott
vltozja tartalmazza. Az ellenrizend tartomny kezdett a Destination bemeneten
lev tmb s a DestinationOffset vltoz egyttesen adja meg.
Az tvizsgland blokk hosszt az ElementNumber hatrozza meg.
Ha az tvizsgls sorn a funkciblokk a cltartomny s az elemszm ltal
meghatrozott terleten a keresett adatot megtallja, akkor a megtallt adat helyzete
az Output kimeneten megjelenik, s az Equal kimenet magasba (=1) kerl. A
kimenetek llapota, amikor az rtket megtallta az albbi:
Output = 0 . (ElementNumber - 1) Equal = 1; Less = Greater = 0

Ha a megadott rtket nem tallja meg a kijellt terleten, akkor az Output kimenet
egyenl az ElementNumber vltozval, az Equal kimenet = 0 lesz, a Less s a
Greater kimenetek pedig az utols adatrtk sszehasonltskor felvett rtkket
tartjk meg. A kimenetek llapota, amikor az rtket nem tallta meg, teht az albbi:
Output = ElementNumber Equal = 0; Less =1, Greater = 0
(Less = 0, Greater = 1)

A kvetkez plda a MB23 merker bjtban trolt "7D" rtket keresi a MB27 s a
MB32 ltal hatrolt adatterleten
Pldaprogram:
PROGRAM search

VAR
search_fb : CompareArray;
SourceAddress AT %MB0.0.0.23 : ARRAY [1..1] OF BYTE := [16#7D];
(* Az MB23 7D kezdeti rtket kap *)
DestinationAddress AT %MB0.0.0.27 : ARRAY [1..1] OF BYTE;
Start AT %I0.0.0.0.0 : BOOL;
Found : UINT;
Result_greater : BOOL;
Result_equal : BOOL;
Result_less : BOOL;

END_VAR

59
Forrs: http://www.doksi.hu

CompareArray
LD Start
CALC search_fb(Mode := 0, (* keressi zemmd *)
Source := SourceAddress,
Destination := DestinationAddress,
ElementNumber := 6) (* keressi tartomny hossza: 6 bjt *)

LD search_fb.Output
ST Found (* keresett rtk helye: Destination + Output *)

LD search_fb.Greater
ST Result_greater

LD search_fb.Equal
ST Result_equal

LD search_fb.Less
ST Result_less

END_PROGRAM

sszehasonltsi zemmd
Az adatterlet sszehasonltsi zemmd kt adatterlet tartalmt hasonltja ssze.
Az adatterletek kezdeteit a Source s a SourceOffset, valamint a Destination s a
DestinationOffset bemenetek hatrozzk meg. Az sszehasonltand terlet mrett
az ElementNumber bemeneten kell megadni.
Ha a kt adatterlet tartalma azonos, akkor az Output kimeneten az ElementNumber
rtke jelenik meg, az Equal kimenet pedig 1-el jelzi az azonossgot. A kimenetek
llapota, amikor az adatterletek azonosak az albbi:
Output = ElementNumber; EQ = 1; LT = 0; GT = 0;

Ha a megadott adatterletek nem azonosak, akkor az Output kimenet jelzi az els


eltr adat helyt. Az Equal = 0 jelzi a klnbsget, a Less s a Greater kimenetek az
eltr adatrtkek sszehasonltskor felvett viszonyt mutatjk. A kimenetek
llapota, amikor az adatterletek nem azonosak az albbi:
Output = 0 . (ElementNumber 1); EQ = 0; Less =1, Greater = 0
(Less = 0, Greater = 1)
A kvetkez plda a MB23 s MB26 kztti bjtok tartalmt hasonltja ssze az
MB30 s a MB 33 kztti bjtok tartalmval.
Pldaprogram:
PROGRAM compare

VAR
compare_fb : CompareArray;
SourceAddress AT %MB0.0.0.23 : ARRAY [1..7] OF BYTE := [16#7D];
DestinationAddress AT %MB0.0.0.30 : ARRAY [1..7] OF BYTE := [16#7D];

60
Forrs: http://www.doksi.hu

CompareArray
Start AT %I0.0.0.0.0 : BOOL;
Deviation : USINT;
Result_greater : BOOL;
Result_equal : BOOL;
Result_less : BOOL;

END_VAR

LD Start
CALC compare_fb(Mode := 1, (* sszehasonltsi md*)
Source := SourceAddress,
Destination := DestinationAddress,
ElementNumber := 4) (* sszehasonltsi tartomny: 4bjt *)
LD compare_fb.Output
ST Deviation (* eltrs helye: Destination" + Output *)
LD compare_fb.Greater
ST Result_greater
LD compare_fb.Equal
ST Result_equal
LD compare_fb.Less
ST Result_less

END_PROGRAM

61
Forrs: http://www.doksi.hu

COMtoSTR

COMtoSTR vett adatbjtok STRING tpus vltozv alaktsa

COMtoSTR
ReceiveVariable ReceiveVariable
ANY_ARRAY

TextString TextString
ANY_STRING

UINT StrLen

BOOL Enable

Az operandusok jelentse:
ReceiveVariable A tmb kezdcme, ahol az adatok tallhatk
TextSring Karakterlnc, mely a tmb adataibl ltrejtt.
StrLen Az talaktand jelek szma
Enable Az talaktsi folyamat engedlyezse
Lers:
A soros vonalon vett s az adott tmbterleten elhelyezett adatokat a funkciblokk
talaktja egy STRING tpus vltozv. Az Enable bemenetre adott 1-es szinttel
indthat az talaktsi mvelet.
Az StrLen bemenetre adott szmmal lehet az talaktand karakterek szmt, azaz az
eredmnyl kapott STRING vltoz hosszt megadni. Amennyiben a deklarls
sorn a STRING vltoz karakterhossza rvidebb a tmbben elhelyezett adatok
szmnl, akkor csak a STRING vltozban definilt hosszsg adatok kerlnek
beolvassra.
Pldaprogram:
PROGRAM Str_Gen

VAR
EnableReceive AT%I0.0.0.0.0 : BOOL;
Array_to_String : COMtoSTR;
ReceiveText : STRING(20):
ReceiveArray : ARRAY[1..20] of Byte;
ReceiveLength: UINT;
ReceiveFromSerial : COM ;
END_VAR

(* Vett adatok a soros interfszrl *)


LD EnableReceive
ANDN ReceiveFromSerial.ReceiveActive
ST ReceiveFromSerial.ReceiveStrobe

62
Forrs: http://www.doksi.hu

COMtoSTR
CAL ReceiveFromSerial(Mode := 1;
ReceiveStrobe := ;
SlotNumber := 0; (*PS4-300 esetn mindig 0 *)
ReceiveNumber := 20 ;
ReceiveVariable := ReceiveArray;
|
ReceiveActive := ;
ReceivedBytes := ;
ReceiveError := ;
InterfaceStatus := ;
SlotError := )

(* A karakterlnc msolsa a tmbbe *)


LD EnableReceive
ANDN ReceiveFromSerial.ReceiveActive

ST Array_to_String.Enable
CAL Array_to_String(Enable := ;
StrLen := ReceiveFromSerial.ReceivedBytes;
TextString := ReceiveText,
ReceiveVariable := ReceiveArray)

END_PROGRAM

63
Forrs: http://www.doksi.hu

CounterAlarm

CounterAlarm szmll megszaktskezels

CounterAlarm

BOOL EnableDisable Error USINT

USINT Number CountValue UINT

UINT Predivide CallUpValue UINT

UINT SetpointValue

ANY_FUNCTION_BLOCK SubRoutine

Az operandusok jelentse:
EnableDisable Megszaktskr funkciblokk engedlyezse / tiltsa, felfut lvez.
(engedly=1, tilts=0)
Number megszaktskr csatornaszm (PS4-141/-151/-201/-341 = 0)
Predivide Szmll elosztja
SetpointValue Szmll alapjel
SubRoutine megszaktskrst kiszolgl funkciblokk neve
Error hibajelzs
CountValue aktulis szmllrtk
CallUpValue megszaktskr hvsok szma
Lers:
A funkciblokk az alapkszlk (PS4-150/200/-300) %I0.0.0.0.0 bemenethez van
hozzrendelve.
Az EnableDisable bemenet engedlyezi a szmll mkdst. A szmll indul, ha
a bemeneten pozitv l vlts (0 1) kvetkezik be. A szmll lell, s trldik, ha
ez a bemenet visszakapcsol (1 0).
A CountValue kimeneten a hardverszmll aktulis rtke lthat
A Predivide bemenet (rtktartomnya: 165535) azt hatrozza meg, hogy mennyi
impulzusnak kell a hardver bemenetre rkezni, hogy a szmll tartalma eggyel
nvekedjen. (eloszt funkci)
A SetpointValue bemenet (rtktartomnya: 165535) hatrozza meg, hogy a
szmll mely rtknl kell a megszakts, azaz mikor kell a funkciblokkot
felhvni.

64
Forrs: http://www.doksi.hu

CounterAlarm
A rendszer maximlisan megengedett kiterhelse hrom tnyez egyttestl fgg:
A Predivide, a SetpointValue rtktl s a rkapcsolt jel frekvencijtl. A nevezett
tnyezket gy kell megvlasztani, hogy milliszekundumonknt maximlisan kt
megszakts lpjen csak fel.
Az Error kimenet tartalmazza az esetleges fellp hibk kdjait:
0 nincs hiba
1 alapjel (SetpointValue) = 0
2 eloszt (Predivide) = 0
3 rvnytelen megszaktskr csatornaszm
(csak a PS4-300 estn)
4 megszaktskr csatornaszmot mr felhasznltk
(csak a PS4-300 estn)
5 a szmll csatorna nincs fel- / leszmllknt
paramterezve (csak a PS4-300 estn)
A CounUpValue kimenet (rtktartomny: 065535) jelzi, hogy az alapjel rtket
hnyszor rte el a szmll, azaz hnyszor trtnhetett megszakts.
Az SubRoutine bemenet biztostja az esemnyvezrelt programvezrls beillesztst.
Ennek rdekben ezen a bemeneten lehet a megszaktskrst kiszolgl
funkciblokk nevt megadni. Mikor az esemny bekvetkezik (a CounterValue
szmll eggyel nvekszik) s az alprogram vgrehajtdik. Ha erre a bemenetre
nincs funkciblokk kapcsolva, akkor csak a CounterValue szmll tartalma n, s
nincs megszaktskrs kiszolgls.
A megszaktskrst kiszolgl funkciblokk nem tartalmazhat sem bemen, sem
kimen paramtereket. Egy ilyen funkciblokk csak loklis vltozkat, vagy csak a
fprogramban deklarlt globlis vltozkat, mint kls vltozkat
(VAR_EXTERNAL) tartalmazhat.
Esemnyvezrelt program alkalmazsakor az albbi szempontokat kell figyelembe
venni:
Az esemny bekvetkezte a felhasznli program vgrehajtst megszaktja, a
regiszterek llapott elmenti, s a SubRoutine bemeneten megadott cmre ugorva
vgrehajtja az alprogramot. A megszaktskr funkciblokk nem szakthat meg
egy msik megszaktskr funkciblokkal (az sszes megszaktskr
funkciblokknak azonos a prioritsa).
A felhasznli program 5ms idtartamra (kb. 1000 utastssor vgrehajtsa)
korltozza a megszaktskr funkciblokk vgrehajtsi idejt, mivel a
megszaktskr funkciblokk mkdst a rendszerprogram sem tudja (mg
tpkimaradskor sem) megszaktani. Ha a vgrehajtsi id tllpi ezt a korltot,
akkor a tp kikapcsolsakor EDC hiba keletkezhet.
A megszaktskr funkciblokk vgrehajtsi ideje hozzaddik a felhasznli
program vgrehajtsi idejhez, gy a ciklusid ellenrzsbe is bekerl!
Mivel az esemnyvezrelt program futtatsakor korltozs nlkl elrhetk a
globlis vltozk is, a ciklikus felhasznli program s az esemnyvezrelt
program ltal kzsen irhat /olvashat adatokat reteszels nlkl nem szabad

65
Forrs: http://www.doksi.hu

CounterAlarm
felhasznlni. Pldul a ciklikus felhasznli programban s a megszaktskr
funkciblokkban ugyanabban a bjtban hasznlt bithozzfrst csak a
Disable_Interrupt s a Enable_Interrupt utastsokkal val szinkronizlssal
szabad korrekten vgrehajtani.
A lehet leggyorsabb reagls rdekben a megszaktskr funkciblokkban
clszer a kzvetlen perifria hozzfrst hasznlni, melyek az alapkszlken
llnak rendelkezsre (%QP0.0.0.0.x, %QPB0.0.0.0).
A megszaktskr funkciblokkok az alkalmazi programban elvileg tbbszr is
hasznlhatk, de ezt ltalban kerlni rdemes, mivel a megszaktskr
funkciblokk tpusok ugyanazzal az esemnyforrssal, s gy a programban csak
az utoljra rvnyesl funkciblokk hatrozza meg feldolgozst.
A tbbszri felhasznls azt jelenti, hogy az egyedi funkciblokk-tpus minden
egyes alkalmazshoz kln-kln adatterletet foglal le.

A megszaktskr funkciblokkok bemeneteinek rtkadsa csak a hvskor


trtn zrjeles rtkadssal trtnhet. Kzvetlen paramter hozzrendels a
zrjelen kvl, vagy a hvst kveten nem megengedett!

impulzusok max:
%I0.0.0.0.0 3kHz

Predivide=5
SetpointValue=1
CountValue 0 1 2 3 4 0 1 2 3 4 0 ... 0
CallUpNumber 0 0 0 0 0 1 1 1 1 1 2 ...
Ugrs a funkciblokkra

Predivide =65535
SetpointValue =1
CountValue 0 1 2 3 4 .. .. .. .. 65535
CallUpNumber 0 0 0 0 0 0 0 0 0 0 .. .. 0 1
Ugrs a funkciblokkra

Predivide =3
SetpointValue =2
CountValue 0 1 2 0 1 2 0 1 2 0 1 2 0 1
CallUpNumber 0 0 0 0 0 0 1 1 1 1 1 1 2 2
Ugrs a funkciblokkra

66
Forrs: http://www.doksi.hu

CounterAlarm
Pldaprogram:
PROGRAM calarm

VAR
CountAlarm : CounterAlarm;
Error : USINT;
CountValue : UINT;
END_VAR

(* CounterAlarm funkciblokk hvsa


szmlland impulzusok a %I0.0.0.0.0 bemeneten *)

LD ICS (* Els programciklus vizsglata, *)


PLC_Message (* mert a a megszaktskr FB-t *)
CALC CountAlarm(EnableDisable := 1, (* csak egyszer kell hvni! *)
Number := 0,
Predivide := 100,
SetpointValue := 1)

LD CountAlarm.Error
ST Error

LD CountAlarm.CountValue
ST CountValue (* Mutatja az aktulis rtket *)

END_PROGRAM

67
Forrs: http://www.doksi.hu

DATconcat

DATconcat dtum s id (DATE_AND_TIME) tpus vltoz


sszelltsa egyedi UINT tpus adatokbl

DATconcat

UINT MilliSecond OutputDAT DT

UINT Second Error BOOL

UINT Minute

UINT Hour

UINT Day

UINT Month

UINT Year

Az operandusok jelentse:
MilliSecond dtum id vltoz milliszekundum rsze
Second dtum id vltoz szekundum rsze
Minute dtum id vltoz perc rsze
Hour dtum id vltoz ra rsze
Day dtum id vltoz nap rsze
Month dtum id vltoz hnap rsze
Year dtum id vltoz v rsze
OutputDAT az eredmnyl kapott dtum id vltoz
Error Hibajelzs
Lers:
A bemenetknt UINT formtumban megadott egyedi rtkeket a funkciblokk a
DAT_AND_TIME (DT) formtum vltozv alaktja.
Az egyes bemeneti rtkek a nekik megfelel rtktartomnyt nem lphetik t.
Az v megengedett tartomnya 1993.2092 kztt vltozhat.
Amennyiben a megengedett rtkeket tllpik, akkor az Error kimeneten hiba
jelenik. meg (= 1).

68
Forrs: http://www.doksi.hu

DATconcat
Pldaprogram:
PROGRAM dtgen

VAR
DateTimeConcatenation : DATconcat;
Millisecond : UINT;
Second : UINT;
Minute : UINT;
Hour : UINT;
Day : UINT;
Month : UINT;
Year : UINT;
Error : BOOL;
Date_1 : DATE_AND_TIME;

END_VAR

CAL DateTimeConcatenation(MilliSecond := Millisecond,


Second := Second,
Minute := Minute,
Hour := Hour,
Day := Day,
Month := Month,
Year := Year
|
Date_1 := OutputDAT,
Error := Error)
END_PROGRAM

69
Forrs: http://www.doksi.hu

DateConcat

DateConcat dtum (DATE) tpus vltoz sszelltsa


egyedi UINT tpus adatokbl
DateConcat

UINT Day OutputDate DATE

UINT Month Error BOOL

UINT Year

Az operandusok jelentse:
Day dtum vltoz nap rsze
Month dtum vltoz hnap rsze
Year dtum vltoz v rsze
OutputDAT az eredmnyl kapott dtum vltoz
Error Hibajelzs
Lers:
A bemenetknt UINT formtumban megadott egyedi rtkeket a funkciblokk a
DATE formtum vltozv alaktja.
Az egyes bemeneti rtkek a nekik megfelel rtktartomnyt nem lphetik t.
Az v megengedett tartomnya 1993.2092 kztt vltozhat.
Amennyiben a megengedett rtkeket tllpik, akkor az Error kimeneten hiba
jelenik. meg (= 1).
Pldaprogram:
PROGRAM dategen
VAR
Dateconcaten : DateConcat;
Datum : Date;
Day : UINT;
Month : UINT;
Year : UINT;
Error : BOOL;
END_VAR
CAL Dateconcaten(Day := Day,
Month := Month,
Year := Year
|
Datum := OutputDate,
Error := Error)
END_PROGRAM

70
Forrs: http://www.doksi.hu

DateSplit

DateSplit dtum (DATE) tpus vltoz sztvlasztsa


egyedi UINT tpus adatokra
DateSplit

DATE InputDate Day UINT

Month UINT

Year UINT

Error BOOL

Az operandusok jelentse:
InputDAT a bemeneti dtum vltoz
Day dtum vltoz nap rsze
Month dtum vltoz hnap rsze
Year dtum vltoz v rsze
Error Hibajelzs
Lers:
A bemenetknt DATE formtumban megadott vltozt a funkciblokk UINT
formtum egyedi vltozkk alaktja t.
Az v megengedett tartomnya 1993.2092 kztt vltozhat, amennyiben az
vszm a megengedett rtkeket tllpi, akkor az Error kimeneten hiba jelenik. meg
(= 1).
Pldaprogram:
PROGRAM datetln
VAR
DateElements: DateSplit;
Datum: Date := D#1999-12-24;
Day : UINT;
Month : UINT;
Year : UINT;
Error : BOOL;
END_VAR
CAL DateElements (InputDate := Datum
|
Day := Day,
Month := Month,
Year := Year,
Error := Error)
END_PROGRAM

71
Forrs: http://www.doksi.hu

DATsplit

DATsplit dtum s id (DATE_AND_TIME) tpus vltoz


sztvlasztsa egyedi UINT tpus adatokra

DATsplit

DT InputDAT MilliSecond UINT

Second, UINT

Minute UINT

Hour UINT

Day UINT

Month UINT

Year UINT

Error BOOL

Az operandusok jelentse:
InputDAT a bemeneti DATE_AND_TIME dtum id vltoz
MilliSecond dtum id vltoz milliszekundum rsze
Second dtum id vltoz szekundum rsze
Minute dtum id vltoz perc rsze
Hour dtum id vltoz ra rsze
Day dtum id vltoz nap rsze
Month dtum id vltoz hnap rsze
Year dtum id vltoz v rsze
Error Hibajelzs
Lers:
A bemenetknt DATE_AND_TIME (DT) formtumban megadott vltozt a
funkciblokk UINT formtum egyedi vltozkk alaktja t.
Az v megengedett tartomnya 1993.2092 kztt vltozhat, amennyiben az
vszm a megengedett rtkeket tllpi, akkor az Error kimeneten hiba jelenik. meg
(= 1).

72
Forrs: http://www.doksi.hu

DATsplit
Pldaprogram:
PROGRAM dtspalt

VAR
DT_Elements : DATsplit;
Date_1 : DT := DT#1999-11-20-22:13:2;
Millisecond : UINT;
Second : UINT;
Minute : UINT;
Hour : UINT;
Day : UINT;
Month : UINT;
Year : UINT;
Error : BOOL;
END_VAR

CAL DT_Elements (InputDAT := Date_1


|
Millisecond := MilliSecond,
Second := Second,
Minute := Minute,
Hour := Hour,
Day := Day,
Month := Month,
Year := Year,
Error := Error)

END_PROGRAM

73
Forrs: http://www.doksi.hu

DE4netK

DE4netK DF4 frekvenciavltk kommunikcis modulja


DE4netK

SendData SendData
ARRAY [0..11] OF BYTE
ReadData ReadData
ARRAY [0..11] OF BYTE
BOOL Enable StatusWord WORD
BOOL Start
BOOL Quickstop
BOOL DCBrake
BOOL TripReset
BOOL ParameterSet
BOOL MotorPotUp
BOOL MotorPotDown
BOOL FixedFrequency1
BOOL FixedFrequency2
BOOL FixedFrequency3
BOOL Reversal
BOOL FreezeRamp
INT ReferenceFrequency ActualFrequency INT
BYTE Command EchoCommand BYTE
UINT ParameterNumber EchoParameterNumber UINT
Busy BOOL
UINT TransmitValue ReceiveValue UINT
UINT TransmitValueOffset ReceiveValueOffset UINT
ErrorCode USINT

Az operandusok jelentse:
SendData opertorlista a kld regiszter szmra
ReadData opertorlista a fogad regiszter szmra
Enable 1: frekvenciavlt engedlyezse
0: frekvenciavlt tiltsa
Start 1: motort az alapjelre felfutatni
0: motort megadott lassulssal lelltani
Quickstop 1: motort quick-stop-lassulssal lelltani
DCBrake 1: egyenram fkezst aktivizlni

74
Forrs: http://www.doksi.hu

DE4netK
TripReset 0 -> 1 tmenettel az aktulis hibajel trlhet
ParameterSet 0: 1-es paramterkszlet aktivlsa
1: 2-es paramterkszlet aktivlsa
MotorPotUp 1: motorpoti felfel funkci aktivls
MotorPotDown 1: motorpoti lefel funkci aktivls
FixedFrequency1 1: 1. fix frekvencia kivlaszts, ha FixedFrequency2 s
FixedFrequency3 azonosan 0.
FixedFrequency2 1: 2. fix frekvencia kivlaszts, ha FixedFrequency3 = 0
FixedFrequency3 1: 3. fix frekvencia kivlaszts
Reversal motor forgsirnyvlts
FreezeRamp 0. fordulatszm felfuts engedlyezs
1. fordulatszm felfuts letilts
ReferenceFrequency motorfordulatszm alapjel
Command parancs vgrehajts, (0: nincs parancs,
1: paramter olvass, 2: paramter rs)
ParameterNumber az tveend paramter szma
TransmitValue az tveend paramter rtke
TransmitValueOffset a 65535-nl nagyobb paramterek eltolsi rtke
StatusWord frekvenciavlt status szava
ActualFrequency aktulis frekvencia kijelzs
EchoCommand vgrehajtott parancs, (0: nincs parancs,
1: paramter olvass, 2: paramter rs)
EchoParameterNumber a vgrehajtott parancs szma
Busy 1: a vgrehajts folyamatban jelzs
ReceiveValue kiolvasott parmter rtk
ReceiveValueOffset a 65535-nl nagyobb kiolvasott paramterek eltolsi rtke
ErrorCode hibajelzs
Lers:
A DE4netK funkciblokk kpezi az illeszt felletet az alkalmazi PLC program s
a frekvenciavltt a Suconet K buszra illeszt DE4-NET-K modul kztt.
Miutn a PLC s a DF4 kztt a kapcsolat felplt, minden tovbbi programozsi
rfordts nlkl a folyamatadatok folyamatosan olvashatk. A DF4 paramtereit a
Suconet K-n keresztl lehet megvltoztatni.

A reakciid alacsony rtken tartsa rdekben a


funkciblokkot a be- illetve a kimenetek aktualizlsa
rdekben minden ciklusban csak egyszer rdemes meghvni!

A funkciblokk kvetkez be-/kimenetei (folyamatadatok) minden egyes hvskor

75
Forrs: http://www.doksi.hu

DE4netK
automatikusan rdnak illetve kiolvassra kerlnek:
Bemenetek: Enable, Start, Quickstop, DCBrake, TripReset, ParameterSet,
MotorPotUp, MotorPotDown, FixedFrequency1, FixedFrequency2,
FixedFrequency3, Reversal, FreezeRamp, ReferenceFrequency,
Kimenetek: StatusWord, ActualFrequency
A frekvenciavlt sszes tovbbi paramtert a kivlasztott paramtercsatornn
keresztl lehet rni, olvasni.
A SendData s aReadData opertorokat a mindenkori els adsi illetve vteli
adatbjthoz kell hozzrendelni. Az ezt kvet tovbbi 11bjt automatikusan a
tmbbel deklarlsra kerl.
A rendelkezsre ll paramterekrl, rtelmezsi tartomnyukrl a status szrl a
frekvenciavlt kezelsi utastsa ad felvilgostst.
Paramterek olvassa:
Az aktulis paramter szmt a ParameterNumber mezbe berni.,
Command = 1 belltani.
A Busy automatikusan tvlt 0 -> 1-re .
Vrni, amg a Busy jel visszavlt 0-ba.
ha ErrorCode = 0, akkor a ReceiveValue s az esetleges ReceiveValueOffset rtket
kiolvasni, melyek a krdses paramter rtkt adja vissza.
ha ErrorCode 0, akkor ki kell rtkelni a hibakd rtkt.
Command = 0 parancsot kiadni, s majd a indulhat a kvetkez feladat.
Paramterek rsa:
Az aktulis paramter szmt a ParameterNumber mezbe berni, a
TransmitValue s a TransmitValueOffset mezkbe a kvnt paramter rtkt berni.
Command = 2 belltani.
A Busy automatikusan tvlt 0 -> 1-re .
Vrni, amg a Busy jel visszavlt 0-ba.
ha ErrorCode = 0, a parancs helyesen vgrehajtsra kerlt.
ha ErrorCode 0, a parancs nem lett vgrehajtva, ki kell rtkelni a hibakd rtkt.
Command = 0 parancsot kiadni, s majd a indulhat a kvetkez feladat.
A lehetsges hibakdok:
0 nincs hiba
1 rvnytelen szolgltats
5 rvnytelen paramterszm
6 nem megengedett parancsparamter
10 nincs hozzfrsi jogostvny, illetve rsi ksrlet csak olvashat paramterre
14 hatrrtk tllps
254 id tllps, ha a reakciid egy rsi/olvassi megbzs esetn > 5sec.
255 egyb hiba, a megbzs jelenleg nem hajthat vgre.

76
Forrs: http://www.doksi.hu

Deserialize

Deserialize tmbbl tetszleges formtum adatok kivlasztsa


Deserialize

ANY Destination Destination


ANY_ARRAY Buffer Buffer

UINT BufferOffset DestinationLength UINT


Error USINT

Az operandusok jelentse:
Destination cl vltoz
Buffer forrstartomny
BufferOffset eltols rtke a cltartomnyon bell
DestinationLength a clvltoz hossza bjtban megadva
Error hibajelzs
Lers:
A Deserialize funkciblokk egy tetszleges tpus vltozt vlaszt ki el egy adott
forrstartomnynak egy megadott helyrl. Az elzetesen megadott helyet a Buffer
s a BufferOffset vltozkkal lehet meghatrozni.
A DestinationLength kimeneti vltoz a cladatok hosszt adja meg bjtos mretben.
A Buffer tetszleges mret tmb lehet, tpusa ANY_BIT s ANY_INT rtk lehet,
kivve a BOOL tpust.
Az Error kimenet az albbi rtkeket veheti fel:
0 nincs hiba
1 puffer tllps
2 az Offset a Bufferen kvl helyezkedik el
3 a Destination a Bufferen bell helyezkedik el
4 A DestinationLength rtke 0

A BOOL adattpus, mint forrsvltoz tpus nem tmogatott, s a fordts


sorn (Compiler) megfelel hibajelzs jelentkezik!
Nzd mg a Serialize funkciblokknl megemltetteket is!

A kvetkez plda 20bjt kimsolsa egy 30bjtos tmbbl!

77
Forrs: http://www.doksi.hu

Deserialize
Pldaprogram:
PROGRAM sendstruct

VAR
deserie_fb : Deserialize;
struct_buffer AT %RDB1.1.0.0 : ARRAY [1..30] OF BYTE;
CheckSumOffset : UINT := 0;
CheckSum : UINT;
DTOffset : UINT := 2;
ReceiveDatum : DT; (* vett adatok *)
DataOffset: UINT := 10;
ReceiveData :Array [1..20] OF BYTE; (* falhasznli adatok *)
DeserializedLength : UINT;
Error : USINT;
END_VAR

(* Vett adatok kivlasztsa *)


CAL deserie_fb(Destination := CheckSum,
Buffer := struct_buffer,
BufferOffset := CheckSumOffset,
|
DeserializedLength := DestinationLength)
LD deserie_fb.Error
USINT_TO_BOOL (* trtnt hiba ? *)
JMPC _Fail (* hibakezels *)
CAL deserie_fb(Destination := ReceiveDatum,
Buffer := struct_buffer,
BufferOffset := DTOffset,
|
DeserializedLength := DestinationLength)
LD deserie_fb.Error
USINT_TO_BOOL (* trtnt hiba ? *)
JMPC _Fail (* hibakezels *)
CAL deserie_fb(Destination := ReceiveData,
Buffer := struct_buffer,
BufferOffset := DataOffset,
|
DeserializedLength := DestinationLength)
LD deserie_fb.Error
USINT_TO_BOOL (* trtnt hiba ? *)
JMPC _Fail (* hiba kezels *)

(* vett adatok kivlasztsa befejezdtt *)

_Fail: (* hibakezels *)

78
Forrs: http://www.doksi.hu

EdgeAlarm

EdgeAlarm vltozsfigyels megszaktskezels

EdgeAlarm

BOOL EnableDisable

USINT Number

UINT RisingEdge

UINT SetpointValue Error USINT

ANY_FUNCTION_BLOCK SubRoutine CallUpValue UINT

Az operandusok jelentse:
EnableDisable Megszaktskr funkciblokk engedlyezse / tiltsa, felfut lvez.
(engedly=1, tilts=0)
Number megszaktskr csatornaszm (PS4-141/-151/-201 = 0, PS4-341-
MM1 esetn 0 s 1)
RisingEdge l vlaszts (0 = felfut, 1 = lefut)
SetpointValue Szmll alapjel
SubRoutine megszaktskrst kiszolgl funkciblokk neve
Error hibajelzs
CallUpValue megszaktskr hvsok szma
Lers:
A funkciblokk a PS4-201-MM1 alapkszlk %I0.0.0.0.1 bemenethez van
hozzrendelve. A PS4-141-MM1 s PS4-151-MM1 esetn a hozzrendels a
%I0.0.0.1.0 bemenethez trtnik.
A PS4-341-MM1 kt lvezrelt bemenettel (%I0.0.0.1.0, s %I0.0.0.1.1) rendelkezik
Az EnableDisable bemenet engedlyezi a szmll mkdst. A szmll indul, ha
a bemeneten pozitv lvlts (0 1) kvetkezik be. A szmll lell, s trldik, ha
ez a bemenet visszakapcsol (1 0).
A RisingEdge bemenet adja meg, hogy milyen irny jelvltozst kell feldolgozni.
A SetpointValue bemenet (rtktartomnya: 165535) hatrozza meg, hogy az
elosztott szmll mely rtknl kell a megszakts, azaz mikor kell a
funkciblokkot felhvni.
A rendszer maximlisan megengedett kiterhelse kt tnyez egyttestl fgg:
A SetpointValue rtktl s a rkapcsolt jel frekvencijtl. A nevezett tnyezket
gy kell megvlasztani, hogy milliszekundumonknt maximlisan kt megszakts

79
Forrs: http://www.doksi.hu

EdgeAlarm
lpjen csak fel.
Az Error kimenet tartalmazza az esetleges fellp hibk kdjait:
0 nincs hiba
1 alapjel (SetpointValue) = 0
3 rvnytelen megszaktskr
4 megszaktskr csatornaszmot mr felhasznltk
(csak a PS4-300 estn)
A CallUpNumber kimenet (rtktartomny: 065535) jelzi, hogy az alapjel rtket
hnyszor rte el a szmll, azaz hnyszor trtnhetett megszakts.
Az SubRoutine bemenet biztostja az esemnyvezrelt programvezrls beillesztst.
Ennek rdekben ezen a bemeneten lehet a megszaktskrst kiszolgl
funkciblokk nevt megadni. Mikor az esemny bekvetkezik (a CounterValue
szmll eggyel nvekszik) s az alprogram vgrehajtdik. Ha erre a bemenetre
nincs funkciblokk kapcsolva, akkor csak a CounterValue szmll tartalma n, s
nincs megszaktskrs kiszolgls.
Esemnyvezrelt program alkalmazsakor az albbi szempontokat kell figyelembe
venni:
Az esemny bekvetkezte a felhasznli program vgrehajtst megszaktja, a
regiszterek llapott elmenti, s a SubRoutine bemeneten megadott cmre ugorva
vgrehajtja az alprogramot.
A megszaktskrst kiszolgl funkciblokk nem tartalmazhat sem bemen, sem
kimen paramtereket. Egy ilyen funkciblokk csak loklis vltozkat, vagy kvl
deklarlt globlis vltozkat, mint kls vltozkat (VAR_EXTERNAL)
tartalmazhat.
A megszaktskr funkciblokk nem szakthat meg egy msik megszaktskr
funkciblokkal (az sszes megszaktskr funkciblokknak azonos a prioritsa).
A felhasznli program 5ms idtartamra (kb. 1000 utastssor vgrehajtsa)
korltozza a megszaktskr funkciblokk vgrehajtsi idejt, mivel a
megszaktskr funkciblokk mkdst a rendszerprogram sem tudja (mg
tpkimaradskor sem) megszaktani. Ha a vgrehajtsi id tllpi ezt a korltot,
akkor a tp kikapcsolsakor EDC hiba keletkezhet.
A megszaktskr funkciblokk vgrehajtsi ideje hozzaddik a felhasznli
program vgrehajtsi idejhez, gy a ciklusid ellenrzsbe is bekerl!
Mivel az esemnyvezrelt program futtatsakor korltozs nlkl elrhetk a
globlis vltozk is, a ciklikus felhasznli program s az esemnyvezrelt
program ltal kzsen irhat /olvashat adatokat reteszels nlkl nem szabad
felhasznlni. Pldul a ciklikus felhasznli programban s a megszaktskr
funkciblokkban ugyanabban a bjtban hasznlt bithozzfrst csak a
Disable_Interrupt s a Enable_Interrupt utastsokkal val szinkronizlssal
szabad korrekten vgrehajtani.
A lehet leggyorsabb reagls rdekben a megszaktskr funkciblokkban
clszer a kzvetlen perifria hozzfrst hasznlni, melyek az alapkszlken
llnak rendelkezsre (%QP0.0.0.0.x, %QPB0.0.0.0).
A megszaktskr funkciblokkok az alkalmazi programban elvileg tbbszr is

80
Forrs: http://www.doksi.hu

EdgeAlarm
hasznlhatk, de ezt ltalban kerlni rdemes, mivel a megszaktskr
funkciblokk tpusok ugyanazzal az esemnyforrssal, s gy a programban csak
az utoljra rvnyesl funkciblokk hatrozza meg feldolgozst.
A tbbszrs alkalmazsnak csak akkor van rtelme, ha a funkciblokkot a
kiszolgl rutinon bell jra kell paramterezni, s l-figyelsi reteszelst kell
megoldani.
A tbbszri felhasznls azt jelenti, hogy az egyedi funkciblokk-tpus minden
egyes alkalmazshoz kln-kln adatterletet foglal le.

A megszaktskr funkciblokkok bemeneteinek rtkadsa csak a hvskor


trtn zrjeles rtkadssal trtnhet. Kzvetlen paramter hozzrendels a
zrjelen kvl, vagy a hvst kveten nem megengedett!

RisingEdge=0
SetpointValue=1

CallUpVAlue 0 1 2 3 4 5 6 7 8 9 10 ...
Ugrs a funkciblokkra

RisingEdge =0
SetpointValue =5

CallUpVAlue 0 0 0 0 0 1 1 1 1 1 2 2 2 2
Ugrs a funkciblokkra

81
Forrs: http://www.doksi.hu

EdgeAlarm
Pldaprogram:
PROGRAM alarm

VAR
Flankenalarm : EdgeAlarm;
Error : USINT;
CountValue : UINT;
Pump : reakt_fb; (*Az FB deklarlsa, melyet aktvlni
(* kell, ha az alarm fellp *)
END_VAR

(* Ha egy adott szintet a elr a trolban a vzszint, akkor alarmot kell


kivltani, s mkdtetni a szivattyt.
A jelfeldolgozs pozitv lre trtni. *)

LD ICS (* Els programciklus vizsglata, *)


PLC_Message (* mert a a megszaktskr FB-t *)
CALC Flankenalarm(EnableDisable := 1, (* egyszer kell hvni! *)
Number := 0,
RisingEdge := 0,
SetPointValue := 1,
SubRoutine := Pump)

LD EdgeAlarm.Error
ST Error

LD EdgeAlarm.CallUpNumber
ST CountValue (* Az alarmok szmt jelzi *)

END_PROGRAM

82
Forrs: http://www.doksi.hu

FifoBx

FifoBx 8-bites cstr regiszter

BOOL FillPulse Full BOOL


BOOL ReadOutPulse Empty BOOL
BOOL ReSet DataOutput USINT
USINT DataInput

Az operandusok jelentse:
FillPulse betlt impulzus, felfut l
ReadOutPulse kiolvas impulzus, felfut l
ReSet visszallts, trls
DataInput adatbemenet
Full regiszter tele jelzs
Empty regiszter res jelzs
DataOutput adatkimenet
Lers:
A * helyn az adott prototpus funkciblokk neve rand be.
A lehetsges nevek a kvetkezk: FifoB1, FifoB2, FifoB128, ahol az egyes
szmok a 8-bites regisztermez hosszt adjk meg.
A DataInput bemeneten lev rtk a FillPulse bemeneten megjelen felfut l
hatsra belp az els legmlyebb szabad regiszter helyre. A regisztert FillPulse
impulzussal lehet tlteni, amg a teljes regiszter tele nem lesz. A regiszter tele
llapott a Full kimenet 1 rtkkel jelzi.
ReadOutPulse FillPulse

DataOutput DataInput
7 6 5 4 3 2 1 0
x 019 255 035 095 014

ReadOutPulse FillPulse

DataOutput DataInput
7 6 5 4 3 2 1 0
x 019 255 035 095 014

83
Forrs: http://www.doksi.hu

FifoBx
A ReadOutPulse bemeneten megjelen felfut l hatsra a DataOutput kimeneten
megjelenik az elszr, a legmlyebb szintre bert rtk. Minden tovbbi
ReadOutPulse impulzus hatsra jabb egyre magasabban lev rtkek kerlnek
kiolvassra. Az utols kiolvasst kveten, a regiszter res llapott az Empty
kimenet 1 rtkkel jelzi.

ReadOutPulse FillPulse

DataOutput DataInput
7 6 5 4 3 2 1 0
x 019 255 035 095 x

ReadOutPulse FillPulse

DataOutput DataInput
7 6 5 4 3 2 1 0
019 255 035 095 014 x

A ReSet bemenetre adott logikai 1 szint trli a teljes regisztermezt.

Pldaprogram:
PROGRAM fifo8_1

VAR
Queue_32_byte : FifoB32;
Pulse1 : BOOL;
Pulse2 : BOOL;
Reset : BOOL;
QueueData : USINT;
full : BOOL;
empty : BOOL;
Outputdata : USINT;
END_VAR

CAL Queue_32_byte(FillPulse := Pulse1,


ReadOutPulse := Pulse2,
ReSet := Reset,
DataInput := QueueData)

84
Forrs: http://www.doksi.hu

FifoBx
LD Queue_32_byte.Full
ST full

LD Queue_32_byte.Empty
ST empty

LD Queue_32_byte.DataOutput
ST Outputdata

END_PROGRAM

85
Forrs: http://www.doksi.hu

FifoWx

FifoWx 16-bites cstr regiszter

BOOL FillPulse Full BOOL


BOOL ReadOutPulse Empty BOOL
BOOL ReSet DataOutput UINT
UINT DataInput

Az operandusok jelentse:
FillPulse betlt impulzus, felfut l
ReadOutPulse kiolvas impulzus, felfut l
ReSet visszallts, trls
DataInput adatbemenet
Full regiszter tele jelzs
Empty regiszter res jelzs
DataOutput adatkimenet
Lers:
A * helyn az adott prototpus funkciblokk neve rand be.
A lehetsges nevek a kvetkezk: FifoW1, FifoW2, FifoW128, ahol az egyes
szmok a 16-bites regisztermez hosszt adjk meg.
A DataInput bemeneten lev rtk a FillPulse bemeneten megjelen felfut l
hatsra belp az els legmlyebb szabad regiszter helyre. A regisztert FillPulse
impulzussal lehet tlteni, amg a teljes regiszter tele nem lesz. A regiszter tele
llapott a Full kimenet 1 rtkkel jelzi.
ReadOutPulse FillPulse

DataOutput DataInput
7 6 5 4 3 2 1 0
x 00197 02555 18637 00023 13657

ReadOutPulse FillPulse

DataOutput DataInput
7 6 5 4 3 2 1 0
x 00197 02555 18637 00023 03657

86
Forrs: http://www.doksi.hu

FifoWx
A ReadOutPulse bemeneten megjelen felfut l hatsra a DataOutput kimeneten
megjelenik az elszr, a legmlyebb szintre bert rtk. Minden tovbbi
ReadOutPulse impulzus hatsra jabb egyre magasabban lev rtkek kerlnek
kiolvassra. Az utols kiolvasst kveten, a regiszter res llapott az Empty
kimenet 1 rtkkel jelzi.

ReadOutPulse FillPulse

DataOutput DataInput
7 6 5 4 3 2 1 0
x 00197 02555 18637 00023 x

ReadOutPulse FillPulse

DataOutput DataInput
7 6 5 4 3 2 1 0
00197 02555 18637 00023 x

A ReSet bemenetre adott logikai 1 szint trli a teljes regisztermezt.

Pldaprogram:
PROGRAM fifo16_1

VAR
Queue_16_word : FifoW16;
Pulse1 : BOOL;
Pulse2 : BOOL;
Reset : BOOL;
QueueData : UINT;
full : BOOL;
empty : BOOL;
Outputdata : UINT;
END_VAR

CAL Queue_16_word(FillPulse := Pulse1,


ReadOutPulse := Pulse2,
ReSet := Reset,
DataInput := QueueData)

LD Queue_16_word.Full
ST full

LD Queue_16_word.Empty

87
Forrs: http://www.doksi.hu

FifoWx
ST empty
LD Queue_16_word.DataOutput
ST Outputdata

END_PROGRAM

88
Forrs: http://www.doksi.hu

GetRealTimeClock

GetRealTimeClock Vals idej ra kiolvassa

GetRealTimeClock

Year USINT

Month USINT

Day USINT

Weekday USINT

Hour USINT

Minute USINT

Second USINT

Az operandusok jelentse:
Year az aktulis vszm, ktjegyen
Month hnap
Day nap
Weekday htnap sorszma (0 = vasrnap)
Hour ra
Minute perc
Second msodperc
Lers:
A funkciblokk hvsval a valsidej rbl folyamatosan a kimeneti paramterekre
rdik az aktulis dtum s id rtke. Nincs szksg kln engedlyez jelre, a
hvssal egyidejleg a funkciblokk biztostja az rtkeket.

89
Forrs: http://www.doksi.hu

LifoBx

LifoBx 8-bites veremtr regiszter


*

BOOL FillPulse Full BOOL


BOOL ReadOutPulse Empty BOOL
BOOL ReSet DataOutput USINT
USINT DataInput

Az operandusok jelentse:
FillPulse betlt impulzus, felfut l
ReadOutPulse kiolvas impulzus, felfut l
ReSet visszallts, trls
DataInput adatbemenet
Full regiszter tele jelzs
Empty regiszter res jelzs
DataOutput adatkimenet
Lers:
A * helyn az adott prototpus funkciblokk neve rand be.
A lehetsges nevek a kvetkezk: LifoB1, LifoB2, LifoB128, ahol az egyes
szmok a 8-bites regisztermez hosszt adjk meg.
A DataInput bemeneten lev rtk a FillPulse bemeneten megjelen felfut l
hatsra belp az els legmlyebb szabad regiszter helyre. A zskregisztert FillPulse
impulzussal lehet tlteni, amg a teljes regiszter tele nem lesz. A regiszter tele
llapott a Full kimenet 1 rtkkel jelzi.
FillPulse

DataInput
0 1 2 3 4 5 6 7
255 033 025 047 062

FillPulse

DataInput
0 1 2 3 4 5 6 7
255 033 025 047 062

90
Forrs: http://www.doksi.hu

LifoBx
A ReadOutPulse bemeneten megjelen felfut l hatsra a DataOutput kimeneten
megjelenik az utoljra, a legmagasabb szintre bert rtk. Minden tovbbi
ReadOutPulse impulzus hatsra jabb egyre mlyebben lev rtkek kerlnek
kiolvassra. Az utols kiolvasst kveten, a regiszter res llapott az Empty
kimenet 1 rtkkel jelzi.
ReadOutPulse

DataOutput
0 1 2 3 4 5 6 7
255 033 025 047 062

ReadOutPulse

DataOutput
0 1 2 3 4 5 6 7
255 033 025 047 062

A ReSet bemenetre adott logikai 1 szint trli a teljes regisztermezt.


Pldaprogram:
PROGRAM lifo8_1
VAR
Stackregister_64_byte : LifoB64;
Pulse1 : BOOL;
Pulse2 : BOOL;
Reset : BOOL;
StackData : USINT;
full : BOOL;
empty : BOOL;
Outputdata : USINT;
END_VAR
CAL Stackregister_64_byte (FillPulse := Pulse1,
ReadOutPulse := Pulse2,
ReSet := Reset,
DataInput := StackData)
LD Stackregister_64_byte.Full
ST full
LD Stackregister_64_byte.Empty
ST empty
LD Stackregister_64_byte.DataOutput
ST Outputdata
END_PROGRAM

91
Forrs: http://www.doksi.hu

LifoWx

LifoWx 16-bites veremtr regiszter


*

BOOL FillPulse Full BOOL


BOOL ReadOutPulse Empty BOOL
BOOL ReSet DataOutput UINT
UINT DataInput

Az operandusok jelentse:
FillPulse betlt impulzus, felfut l
ReadOutPulse kiolvas impulzus, felfut l
ReSet visszallts, trls
DataInput adatbemenet
Full regiszter tele jelzs
Empty regiszter res jelzs
DataOutput adatkimenet
Lers:
A * helyn az adott prototpus funkciblokk neve rand be.
A lehetsges nevek a kvetkezk: LifoW1, LifoW2, LifoW128, ahol az egyes
szmok a 16-bites regisztermez hosszt adjk meg.
A DataInput bemeneten lev rtk a FillPulse bemeneten megjelen felfut l
hatsra belp az els legmlyebb szabad regiszter helyre. A zskregisztert FillPulse
impulzussal lehet tlteni, amg a teljes regiszter tele nem lesz. A regiszter tele
llapott a Full kimenet 1 rtkkel jelzi.
FillPulse

DataInput
0 1 2 3 4 5 6 7
12764 00346 01283 00034 02384

FillPulse

DataInput
0 1 2 3 4 5 6 7
12764 00346 01283 00034 02384

92
Forrs: http://www.doksi.hu

LifoWx
A ReadOutPulse bemeneten megjelen felfut l hatsra a DataOutput kimeneten
megjelenik az utoljra, a legmagasabb szintre bert rtk. Minden tovbbi
ReadOutPulse impulzus hatsra jabb egyre mlyebben lev rtkek kerlnek
kiolvassra. Az utols kiolvasst kveten, a regiszter res llapott az Empty
kimenet 1 rtkkel jelzi.
ReadOutPulse

DataOutput
0 1 2 3 4 5 6 7
12764 00346 01283 00034 02384

ReadOutPulse

DataOutput
0 1 2 3 4 5 6 7
12764 00346 01283 00034 02384

A ReSet bemenetre adott logikai 1 szint trli a teljes regisztermezt.


Pldaprogram:
PROGRAM lifo16_1

VAR
Stackregister_32_word : LifoW32;
Pulse1 : BOOL;
Pulse2 : BOOL;
Reset : BOOL;
StackData : UINT;
full : BOOL;
empty : BOOL;
OutputData : UINT;
END_VAR

CAL Stackregister_32_word(FillPulse := Pulse1,


ReadOutPulse := Pulse2,
ReSet := Reset,
DataInput := StackData)
LD Stackregister_32_word.Full
ST full
LD Stackregister_32_word.Empty
ST empty
LD Stackregister_32_word.DataOutput
ST OutputData

END_PROGRAM

93
Forrs: http://www.doksi.hu

MI4netK

MI4netK MI4 kijelzk kommunikcis modulja

MI4netK
RDB_Start
ANY_ARRAY
SDB_Start
ANY_ARRAY
Status BYTE

Az operandusok jelentse:
RDB_Start A Suconet K adattadsi terlet bemeneti puffer (RDB),
pl. ha az MI4-s kijelznek az 1-es vonalon az 1-es cme van, s a
puffer nagysg 20bjt, akkor:
ARRAY [1..20] of BYTE AT %RDB1.1.0.0
SDB_Start A Suconet K adattadsi terlet kimeneti puffer (SDB),
pl. ha az MI4-s kijelznek az 1-es vonalon az 1-es cme van, s a
puffer nagysg 20bjt, akkor:
ARRAY [1..20] of BYTE AT %SDB1.1.0.0
Status MI4 kommunikcis sttusa
Lers:
Az MI4netK a Suconet K hlzaton illeszti az MI4 kszlkcsaldot a PLC-hez.
A Status a kvetkez informcikat s kommunikcis hibajelzseket adja:
01h PLC kld adatcsomagot az MI4-nek
02h PLC fogad adatcsomagot az MI4-tl
04h nincs adatkrs
C0h paramterezsi hiba a bemeneti paramterekben
80h Az MI4 rvnytelen mveleti kdot kldtt / kommunikcis hiba
81h Memriatartomny tllps / tvirathossz hiba a PLC-merkerek olvassa sorn.
82h Memriatartomny tllps / tvirathossz hiba a PLC-merkerek rsa sorn.
A funkciblokk rszletes lersa aKommunikci MI4 <->PLC kziknyvben
tallhat (AWB27-1303).

94
Forrs: http://www.doksi.hu

MS_TimeFalling

MS_TimeFalling Elejtsre ksleltetett idzt (milliszekundumos


megadssal)

MS_TimeFalling

BOOL Set OutputControl BOOL


BOOL ReSet ElapsedTime UINT
BOOL Hold

UINT PresetTime

Az operandusok jelentse:
Set indtsi felttel, pozitv llel
ReSet visszallts
Hold idztsi futs lelltsa
PresetTime Idztsi alapjel milliszekundumban
OutputControl idzt kimenete
ElapsedTime idzts aktulis ideje

Iddiagramok:
(1) (2) (3) (4) (5)

Set

ReSet

Hold
TH TH

OutputControl

T T+TH T+TH T T

95
Forrs: http://www.doksi.hu

MS_TimeFalling
Lers:
Ha a Set bemenetre felfut l jut, akkor a kimenet azonnal magasba vlt. Ha a Set
bemenet alacsonyra vlt, a kimenet T idvel ksbb kveti. (1)
A belltott ksleltetsi idnek a ciklusidnl mindig nagyobbnak kell lenni, hogy
biztostva legyen a ksleltets nyomon kvetse. Az ElapsedTime kimenet a
milliszekundumban mutatja a mg htra lev ksleltetsi idt.
A ksleltetsi id visszaszmllsa felfggeszthet a bemenetre adott magas szinttel.
A ksleltets megn azzal az idvel, amg a Hold bemenet magas, mikzben Set
bemenet mr alacsony. (2), (3)
Az OutputControl kimenet csak akkor kveti a Set bemenetet a belltott idztssel,
ha a Hold bemenet alacsony (4), (5).
Az idzt alaphelyzetbe kerl (kimenetei nullk), ha a ReSet bemenetet logikai 1-re
kapcsoljuk. Ebben az esetben az idzts indtsa nem lehetsges. A Set bemeneten
lev pozitv l vlts csak a ReSet bemenet 1->0 vltsa utn vlik hatsoss. (5).

Pldaprogram:
PROGRAM time4

VAR
Timer4 : MS_TimeFalling;
Start AT %I0.0.0.0.0 : BOOL;
Halt AT %I0.0.0.0.1 : BOOL;
TimeValue4 : UINT := 25; (* TimeValue4 = 25 milliszekundum *)
Output4 AT %Q0.0.0.0.0 : BOOL;
END_VAR

CAL Timer4 (Set := Start,


Hold := Halt,
PresetTime := TimeValue4)

LD Timer4.OutputControl
ST Output4

END_PROGRAM

96
Forrs: http://www.doksi.hu

MS_TimeRising

MS_TimeRising Meghzsra ksleltetett idzt (milliszekundum


megadssal)

MS_TimeRising

BOOL Set OutputControl BOOL

BOOL ReSet ElapsedTime UINT

BOOL Hold

UINT PresetTime

Az operandusok jelentse:
Set indtsi felttel, pozitv llel
ReSet visszallts
Hold idztsi futs lelltsa
PresetTime Idztsi alapjel milliszekundumban
OutputControl idzt kimenete
ElapsedTime idzts aktulis ideje
Iddiagramok:
(1) (2) (3) (4) (5)

Set

ReSet

HOLD

TH

OutputControl

T T+TH T T

97
Forrs: http://www.doksi.hu

MS_TimeRising
Lers:
Ha a Set bemenetre felfut l jut, az OutputControl kimenet T idvel ksbb kveti a
bemenetet (A T ksleltetsi d belltsa a PresetTime bemeneten megadott rtkkel
trtnhet.) A Set bemenet lefut le a kimeneten azonnal rvnyre jut.(1)
A belltott ksleltetsi idnek a ciklusidnl mindig nagyobbnak kell lenni, hogy
biztostott legyen a ksleltets kvetse. Az ElapsedTime kimenet milli-
szekundumban mutatja a htra lev ksleltetsi idt.
A ksleltetsi id visszaszmllsa felfggeszthet a Hold bemenetre adott magas
szinttel. A ksleltets megn azzal az idvel, amg a Hold bemenet magas. (2)
Ha a Hold bemenet magas szinten van, mikzben a Set-en pozitv lvlts trtnik,
akkor az indtsi folyamat a Hold bemenet 1-es szint llapotig ksleltetik. (4).
Amennyiben a ksleltetsi id lefutst kveten a vlt a Set bemeneten a jel 0-ba,
mikzben a Hold bemenet 1-ben van, az OutputControl csak akkor vlt vissza, ha a
Hold bemenet visszavlt 0-ba (3).
Az idzt alaphelyzetbe kerl (kimenetei nullk), ha a ReSet bemenetet logikai 1-re
kapcsoljuk. Ebben az esetben az idzts indtsa nem lehetsges. A Set bemeneten
lev pozitv lvlts csak a ReSet bemenet 1->0 vltsa utn vlik hatsoss. (5).

Pldaprogram:
PROGRAM time3

VAR
Timer3 : MS_TimeRising;
Start AT %I0.0.0.0.0 : BOOL;
Halt AT %I0.0.0.0.1 : BOOL;
Reset AT %I0.0.0.0.2 : BOOL;
TimeValue3: UINT := 7; (* TimeValue= 7 Milliseconds *)
ActTime3 AT %QW0.0.0.2 : BOOL;
Output3 AT %Q0.0.0.0.0 : BOOL;
END_VAR

CAL Timer3 (Set := Start,


ReSet := Reset,
Hold := Halt,
PresetTime := TimeValue3)

LD Timer3.OutputControl
ST Output3

LD Timer3.ElapsedTime
ST ActTime3

END_PROGRAM

98
Forrs: http://www.doksi.hu

ReadMC

ReadMC adatok olvassa a flash-memribl

ReadMC

DestinationAddress DestinationAddress ANY_ARRAY


ANY_ARRAY
BOOL Strobe Active BOOL
UINT SegmentNumber MaxSegmentNumber
UINT
USINT DataLength Error
USINT

Az operandusok jelentse:
DestinationAddress a cltmb a visszaolvasand adatok szmra
Strobe visszaolvassi folyamat indtsa
SegmentNumber a szegmens szma (megengedett: 0n)
DataLength a visszaolvasand adatbjtok szma
MaxSegmentNumber a fjl utols lehetsges szegmensszma
Error hibajelzs
Lers:
A ReadMC funkciblokk segtsgvel a memriamodulbl lehet adatokat a CPU
memriaterletre visszaolvasni.
Ez a funkciblokk a WriteMC blokkal egytt fontos alkalmazsi terlete a remanens
adattrolsnak, receptura-kezelsnek, illetve vltozk letrolsnak egy program
aktualizlst megelzen.

A memriamodult a PLC-be betenni, illetve kivenni csak a PLC feszltsgmentes


llapotban szabad!

A memriamodulban az adatok egyenknt 128bjt hosszsg szegmensre vannak


felosztva.
A szabad adatterlet meghatrozshoz a funkciblokkot DataLength = 0 rtkkel
kell meghvni, melynek hatsra nem indul be az rsi folyamat, ugyanakkor a
MaxSegmentLength visszaadja az utols mg hasznlhat szegmens rtkt.
A funkciblokk a programfutssal aszinkron mdon kerl vgrehajtsra, s tbb
programcikluson keresztl is eltarthat. Ezalatt az id alatt az Active kimenet 1-t ad.
A hibtlan vgrehajtst jelzi az Active kimenet 0-ba trtn visszavltsa, mikzben
az Error kimenet is 0-t ad.
Egyszerre tbb funkciblokk is lehet egyidejleg aktv. az opercis rendszer a
hvsok sorrendjben egyms utn hajtja vgre az rsi mveleteket.

99
Forrs: http://www.doksi.hu

ReadMC
Az Error kimenet a kvetkez llapotokat veheti fel:
0 nincs hiba
1 nincs memriamodul beptve
2 online kapcsolat miatt nem lehetsges a hozzfrs (csak PS4-200 esetn)
3 nem lehetsges a hozzfrs egyidej WriteMC hvs miatt
(csak PS4-200 esetn)
4 rvnytelen SegmentNumber (PS4-200 esetn a megengedett: 0.511; PS4-
300 esetn a modultl fggen: 0.1023)
5 rvnytelen adathossz (megengedett DataLength rtk: 1.128)
6 -
7 nem lehetsges a hozzfrs, mert a memriamodul , mint forrskd httr van
felhasznlva (csak PS4-200 esetn)
8 a memriamodul formzsa nem engedi meg az adattrolsi tartomny
hasznlatt (csak PS4-300 esetn)
Csak a PS4-200 esetn: Az Active kimenet a PS4-150/-200 esetn mindig 0. A
funkciblokk aktulis llapota csak egy ismtelt hvs mellett az Error kimenet
lekrdezsvel oldhat meg. Ha az Error 0-t ad, akkor a mvelet hiba nlkl
vgrehajtdott. Ha a kimenet rtke 3, akkor a funkciblokk mg dolgozik.
Az Error kimenet aktualizlshoz a Strobe bemeneten egy jabb pozitv let kell
generlni.

A ReadData funkciblokk segtsgvel lehet a letrolt adatokat a


memriamodulbl visszaolvasni!

Pldaprogram:
PROGRAM RELOAD

VAR
StrobeReload AT %I0.0.0.0.0 :BOOL;
ActiveReload AT %Q0.0.0.0.0 :BOOL;
ErrorReload : USINT;
FBReloadData : ReadMC;
SegmentNumber : UINT;
DataLength : USINT;
LastSegmentNumber : UINT;
DataArea : ARRAY[0..15] of USINT;
END_VAR

LD 8
ST SegmentNumber
LD 16
ST DataLength

100
Forrs: http://www.doksi.hu

ReadMC
(* 16 bjt olvassa a 8.szegmensbl, cltartomny: DataArea nev tmb *)
CAL FBReloadData(Strobe := StrobeReload,
SegmentNumber := SegmentNumber,
DataLength := DataLength,
DestinationAddress := DataArea
|
ActiveReload := Active,
LastSegmentNumber := MaxSegmentNumber,
ErrorReload := Error)

LD ActiveReload
JMPC CONTINUE

LD ErrorReload
EQ 0
JMPCN ERRORHANDLING
(* az adatfeldolgozs folytatsa *)
JMP CONTINUE

ERRORHANDLING:
(* hibakezelsi rutin *)
CONTINUE:
(* felhasznli program tovbbi rsze *)

END_PROGRAM

101
Forrs: http://www.doksi.hu

ReloadData

ReloadData adatok olvassa a flash-memribl


(cmvltozk alkalmazsval)
ReloadData

BOOL Strobe
ADDRESS DestinationAddress Active BOOL
UINT SegmentNumber MaxSegmentNumber UINT
USINT DataLength Error USINT

Az operandusok jelentse:
Strobe visszatltsi folyamat indtsa
DestinationAddress visszatltend cladatok kezd cme (tpusa ADDRESS)
SegmentNumber szegmensszm (0.n)
DataLength a visszatltend adatmezk szma (1.128)
Active 1, ha a visszatltsi folyamat fut
MaxSegmentNumber a fjl utols lehetsges szegmensszma
Error hibajelzs
Lers:
A ReloadData funkciblokk segtsgvel a memriamodulbl lehet adatokat a CPU
memriaterletre visszatlteni.
A memriamodul logikailag 512, egyenknt 128bjt hosszsg szegmensre van
felosztva. Egyszeri hvssal maximum 128bjt olvashat vissza.
A funkciblokk egyik legfontosabb alkalmazsi terlete a remanens
memriaterletnek (pl. a receptura terletnek), mely a compiler konfigurci sorn a
kdgenerlskor kerl meghatrozsra, kzbens letrolsa s ezen adatok
visszaolvassa egy kszlkkonfigurci megvltoztatsa sorn.
Az Error kimenet a kvetkez llapotokat veheti fel:
0 nincs hiba
1 nincs memriamodul beptve
2 online kapcsolat miatt nem lehetsges a hozzfrs
3 nem lehetsges a hozzfrs egyidej SaveData hvs miatt
4 rvnytelen SegmentNumber (megengedett: 0.511)
5 rvnytelen adathossz (megengedett DataLength rtk: 1.128)
6 a kezdcm rvnytelen
7 csak a PS4-200 esetn: nem lehetsges a hozzfrs, mert a memriamodul ,
mint forrskd httr van felhasznlva

102
Forrs: http://www.doksi.hu

ReloadData
8 csak a PS4-300 esetn: a memriamodul formzsa nem engedi meg az
adattrolsi tartomny hasznlatt
Csak a PS4-200 esetn: Az Active kimenet a PS4-150/-200 esetn mindig 0. A
funkciblokk aktulis llapota csak egy ismtelt hvs mellett az Error kimenet
lekrdezsvel oldhat meg. Ha az Error 0-t ad, akkor a mvelet hiba nlkl
vgrehajtdott. Ha a kimenet rtke 3, akkor a funkciblokk mg dolgozik.
Az Error kimenet aktualizlshoz a Strobe bemeneten egy jabb pozitv let kell
generlni.

A SaveData funkciblokk segtsgvel lehet adatokat a memriamodulra rni!

Pldaprogram:
PROGRAM R_Card

VAR
ReadData : ReloadData;
Start AT %I0.0.0.0.2 : BOOL;
Mem_start AT %MB0.0.0.100 : BYTE;
Segment_NR : UINT;
DataLength : USINT;
ErrorMessage : USINT;
END_VAR

CAL ReadData(Set := Start,


DestinationAddress := &Mem_start,
SegmentNumber := Segment_NR,
DataLength := SegmentLength)

LD ReadData.Error
ST ErrorMessage
NE 0 (* ha nem egyenl 0, akkor hiba! *)
JMPC ErrorEvaluation
(*...*)

ErrorEvaluation: (* hiba kirtkel rutin *)

(*...*)

END_PROGRAM

103
Forrs: http://www.doksi.hu

RealTimeClock

RealTimeClock vals idej ra sszehasonltsa egyedi bemeneti


adatokkal

RealTimeClock

BOOL Set Greater BOOL

TIME_OF_DAY RealTime Equal BOOL

DAY_OF_WEEK WeekDay Less BOOL

DATE RealDate Error BOOL

UINT VariableDate

UINT VariableTime

Az operandusok jelentse:
Set az sszehasonlts engedlyezse
RealTime a valsidej rval sszehasonltand konstans id (ra, perc),
melyet a programozs sorn lehet megadni, s az a programfuts
alatt mr nem vltozik
WeekDay a valsidej rval sszehasonltand konstans htnap sorszm,
melyet a programozs sorn lehet megadni, s az a programfuts
alatt mr nem vltozik
A DAY_OF_WEEK gynevezett Moeller adattpus, melynek
rtelmezse a kvetkez:
TYPE DAY_OF_WEEK:
(Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday):= Monday;
END_TYPE
RealDate a valsidej rval sszehasonltand konstans dtum (nap, hnap,
v), melyet a programozs sorn lehet megadni, s az a
programfuts alatt mr nem vltozik
VariableDate a valsidej rval sszehasonltand vltozrtk (nap s hnap),
ahol a nap a magasabb bjtban, a hnap az alacsonyabb bjtban
kerl kdolsra
VariableTime a valsidej rval sszehasonltand vltozrtk (ra s perc),
ahol az ra a magasabb bjtban, a perc az alacsonyabb bjtban

104
Forrs: http://www.doksi.hu

RealTimeClock
kerl kdolsra idzts aktulis ideje
Greater 1, ha a megadott sszehasonltand rtk nagyobb, mint a
valsidej ra rtke
Equal 1, ha a megadott sszehasonltand rtk azonos a valsidej ra
rtkvel
Less 1, ha a megadott sszehasonltand rtk kisebb, mint a valsidej
ra rtke
Error 1, ha a megadott sszehasonltand rtk rvnytelen
Lers:
A funkciblokk sszehasonltja a valsidej ra rtkt a megadott bemeneti
rtkkel. Az sszehasonlts engedlyezse a Set = 1 bemenet lltsv trtnhet.
Set = 0 esetn az sszehasonlts letiltdik, a kimenetek mindegyike 0-t vesz fel.
Az adatok megadsra kt lehetsg knlkozik
1. A funkciblokk hvsa RealTime, WeekDay, RealDate bemenetek megadsval
Az adatokat programozs sorn kell megadni. Ezek a konstans rtkek
programfutats kzben nem vltoztathatk meg. A funkciblokk a konstans
rtkeket csak akkor veszi figyelembe, ha a VariableDate s a VariableTime
bemenetek nincsenek paramterezve.

A paramterezsi pldk:
RealTime: TOD#20:35:10 WeekDay: - RealDate: -
RealTime: TOD#20:35:10 WeekDay: Monday RealDate: -
RealTime: TOD#20:35:10 WeekDay: - RealDate: D#2000-03-15

Set

Less

Equal

Greater

aktv

2. A funkciblokk hvsa VariableDate, VariableTime bemenetek megadsval


Ha a VariableDate s / vagy a VariableTime bemeneteken van rvnyes rtk,
akkor a RealTime WeekDay RealDate bemenetek nem aktvak..A bersok sz
formtumak. A bers megtrtnhet a funkciblokk behvsval, vagy a
felhasznli programbl.

105
Forrs: http://www.doksi.hu

RealTimeClock

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 1 0 0 0 1 0 0 1 0 0 0 1 1 17 35 VariableTime
ra perc
0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 1 18 3 VariableDate
nap hnap
1 sz

A vltoz szba a szm rtelmezsi tartomnyon bell brmely rtk berhat,


azonban a dtum / id rtelmezsi tartomnyn kvli rtk esetn, pldul 25 ra,
az Error kimenet jelez.

Set
1)
VariableDate, V1 V2
VariableTime

Less

Equal

Greater

aktv aktv

A funkciblokk kimeneteinek llapota:


Ha a belltott id azonos a bels ra rtkvel, az Equal kimenet 1 percen t logikai 1-el
jelzi az azonossgot. Ha belltott rtk nagyobb akkor a Greater, ha kisebb a Less
kimenet ad logikai 1 jelzst.
A jelvlts a "nagyobb, mint" (Greater), s a "kisebb, mint" (Less) kztt a 24. ra
tmenetnl ( 23 0 ) az albbiak szerint vltozik:
RealTime vagy VariableTime minden nap 24 rakor
operandusok esetn
WeekDay operandus esetn vasrnap 24 rakor
RealDate vagy VariableDate minden hnap vgn 24 rakor
operandusok esetn
VariableDate s VariableTime minden v vgn 24 rakor
operandusok esetn

1) Adatcsere a rgi = V1, az j = V2


Az j rtket a Set bemeneten trtnt 0->1 tmenetet kvet feldolgozsi ciklusban veszi
elszr figyelembe a felhasznli program

106
Forrs: http://www.doksi.hu

RealTimeClock
Pldaprogram:
PROGRAM clock

VAR
R_Time : RealTimeClock;
Clock_free : BOOL;
T_Day : TIME_OF_DAY := TOD#12:00:00;
Datum : Date :=D#1999-12-12 ;
Midday AT %Q0.0.0.0.0 : BOOL;
END_VAR

(* id sszehasonlts *)
CAL R_Time (Set := Clock_free,
RealTime := T_Day,
RealDate :=Datum,
WeekDay := Monday)

LD R_Time.Equal
ST Midday

END_PROGRAM

107
Forrs: http://www.doksi.hu

RTC

RTC vals idej ra lltsa

RTC

BOOL EN Q BOOL
DATE_AND_TIME PDT CDT DATE_AND_TIME

Az operandusok jelentse:
EN indtsi felttel, pozitv llel
PDT belltand dtum s id ( rvnyes vszmok: 1993.20092)
Q CDT-n val id helyessgt jelz bit
CDT aktulis dtum s id
Lers:
Az EN-re adott felfut llel lehet a PDT-re adott dtum s id rtket a PLC vals
idej rjba berni. A bert rtk helyessgt a Q jelzi. Az aktulis rtkeket a CDT-
n lehet leolvasni, EN-tl fggetlenl.
Pldaprogram:
PROGRAM clock

VAR
Set_Clock : RTC;
Set_Input AT %I0.0.0.1.3 : BOOL;
Date_and_Time: DATE_AND_TIME := DT#1995-01-01-00:00:00;
Clock_Set : BOOL;
Clock_Status : DATE_AND_TIME;
END_VAR

CAL Set_Clock (IN := Set_Input, PDT := Date_and Time)


LD Set_Clock.Q
ST Clock_Set
LD Set_Clock.CDT
ST Clock_Status

END_PROGRAM

108
Forrs: http://www.doksi.hu

S_TimeFalling

S_TimeFalling Elejtsre ksleltetett idzt (szekundumos megadssal)

S_TimeFalling

BOOL Set OutputControl BOOL


BOOL ReSet ElapsedTime UINT
BOOL Hold

UINT PresetTime

Az operandusok jelentse:
Set indtsi felttel, pozitv llel
ReSet visszallts
Hold idztsi futs lelltsa
PresetTime Idztsi alapjel szekundumban
OutputControl idzt kimenete
ElapsedTime idzts aktulis ideje

Iddiagramok:
(1) (2) (3) (4) (5)

Set

ReSet

Hold
TH TH

OutputControl

T T+TH T+TH T T

109
Forrs: http://www.doksi.hu

S_TimeFalling
Lers:
Ha a Set bemenetre felfut l jut, akkor a kimenet azonnal magasba vlt. Ha a Set
bemenet alacsonyra vlt, a kimenet T idvel ksbb kveti. (1)
A belltott ksleltetsi idnek a ciklusidnl mindig nagyobbnak kell lenni, hogy
biztostva legyen a ksleltets nyomon kvetse. Az ElapsedTime kimenet a
szekundumban mutatja a mg htra lev ksleltetsi idt.
A ksleltetsi id visszaszmllsa felfggeszthet a bemenetre adott magas szinttel.
A ksleltets megn azzal az idvel, amg a Hold bemenet magas, mikzben Set
bemenet mr alacsony. (2), (3)
Az OutputControl kimenet csak akkor kveti a Set bemenetet a belltott idztssel,
ha a Hold bemenet alacsony (4), (5).
Az idzt alaphelyzetbe kerl (kimenetei nullk), ha a ReSet bemenetet logikai 1-re
kapcsoljuk. Ebben az esetben az idzts indtsa nem lehetsges. A Set bemeneten
lev pozitv l vlts csak a ReSet bemenet 1->0 vltsa utn vlik hatsoss. (5).

Pldaprogram:
PROGRAM time4

VAR
Timer2 : S_TimeFalling;
Start AT %I0.0.0.0.0 : BOOL;
Halt AT %I0.0.0.0.1 : BOOL;
TimeValue2 : UINT := 25; (* TimeValue2 = 25 szekundum *)
Output2 AT %Q0.0.0.0.0 : BOOL;
END_VAR

CAL Timer2 (Set := Start,


Hold := Halt,
PresetTime := TimeValue2)

LD Timer2.OutputControl
ST Output2

END_PROGRAM

110
Forrs: http://www.doksi.hu

S_TimeRising

S_TimeRising Meghzsra ksleltetett idzt (szekundum


megadssal)

S_TimeRising

BOOL Set OutputControl BOOL

BOOL ReSet ElapsedTime UINT


BOOL Hold

UINT PresetTime

Az operandusok jelentse:
Set indtsi felttel, pozitv llel
ReSet visszallts
Hold idztsi futs lelltsa
PresetTime Idztsi alapjel milliszekundumban
OutputControl idzt kimenete
ElapsedTime idzts aktulis ideje
Iddiagramok:
(1) (2) (3) (4) (5)

Set

ReSet

HOLD

TH

OutputControl

T T+TH T T

111
Forrs: http://www.doksi.hu

S_TimeRising
Lers
Ha a Set bemenetre felfut l jut, az OutputControl kimenet T idvel ksbb kveti a
bemenetet (A T ksleltetsi d belltsa a PresetTime bemeneten megadott rtkkel
trtnhet.) A Set bemenet lefut le a kimeneten azonnal rvnyre jut.(1)
A belltott ksleltetsi idnek a ciklusidnl mindig nagyobbnak kell lenni, hogy
biztostott legyen a ksleltets kvetse. Az ElapsedTime kimenet msodpercben
mutatja a htra lev ksleltetsi idt.
A ksleltetsi id visszaszmllsa felfggeszthet a Hold bemenetre adott magas
szinttel. A ksleltets megn azzal az idvel, amg a Hold bemenet magas. (2)
Ha a Hold bemenet magas szinten van, mikzben a Set-en pozitv lvlts trtnik,
akkor az indtsi folyamat a Hold bemenet 1-es szint llapotig ksleltetik. (4).
Amennyiben a ksleltetsi id lefutst kveten a vlt a Set bemeneten a jel 0-ba,
mikzben a Hold bemenet 1-ben van, az OutputControl csak akkor vlt vissza, ha a
Hold bemenet visszavlt 0-ba (3).
Az idzt alaphelyzetbe kerl (kimenetei nullk), ha a ReSet bemenetet logikai 1-re
kapcsoljuk. Ebben az esetben az idzts indtsa nem lehetsges. A Set bemeneten
lev pozitv lvlts csak a ReSet bemenet 1->0 vltsa utn vlik hatsoss. (5).

Pldaprogram:
PROGRAM time1

VAR
Timer1 : S_TimeRising;
Start AT %I0.0.0.0.0 : BOOL;
Halt AT %I0.0.0.0.1 : BOOL;
TimeValue1 : UINT := 12; (* TimeValue1 = 12 msodperc *)
Output1 AT %Q0.0.0.0.0 : BOOL;
END_VAR

CAL Timer1 (Set := Start,


Hold := Halt,
PresetTime := TimeValue1)

LD Timer1.OutputControl
ST Output1

END_PROGRAM

112
Forrs: http://www.doksi.hu

SaveData

SaveData adatok rsa a flash-memriba


(cmvltozk alkalmazsval)
SaveData

BOOL Strobe
ADDRESS SourceAddress Active BOOL
UINT SegmentNumber MaxSegmentNumber UINT
USINT DataLength Error USINT

Az operandusok jelentse:
Strobe letroland folyamat indtsa
SourceAddress letroland cladatok kezd cme (tpusa ADDRESS)
SegmentNumber szegmensszm (0.n)
DataLength a letroland adatmezk szma (1.128)
Active 1, ha a letrolsi folyamat fut
MaxSegmentNumber a fjl utols lehetsges szegmensszma
Error hibajelzs
Lers:
A SaveData funkciblokk segtsgvel a memriamodulba lehet adatokat a CPU
memriaterletrl letrolni.
A memriamodul logikailag 512, egyenknt 128bjt hosszsg szegmensre van
felosztva. Egyszeri hvssal maximum 128bjt olvashat vissza.
A funkciblokk egyik legfontosabb alkalmazsi terlete a remanens
memriaterletnek (pl. a receptura terletnek), mely a compiler konfigurci sorn a
kdgenerlskor kerl meghatrozsra, kzbens letrolsa s ezen adatok
visszaolvassa egy kszlkkonfigurci megvltoztatsa sorn.
Az Error kimenet a kvetkez llapotokat veheti fel:
0 nincs hiba
1 nincs memriamodul beptve
2 online kapcsolat miatt nem lehetsges a hozzfrs
3 nem lehetsges a hozzfrs egyidej ReloadData hvs miatt
4 rvnytelen SegmentNumber (PS4-200 esetn a megengedett: 0.511; PS4-
300 esetn a modultl fggen: 0.1023)
5 rvnytelen adathossz (megengedett DataLength rtk: 1.128)
6 a kezdcm rvnytelen
7 csak a PS4-200 esetn: nem lehetsges a hozzfrs, mert a memriamodul ,
mint forrskd httr van felhasznlva

113
Forrs: http://www.doksi.hu

SaveData
8 csak a PS4-300 esetn: a memriamodul formzsa nem engedi meg az
adattrolsi tartomny hasznlatt
Csak a PS4-200 esetn: Az Active kimenet a PS4-150/-200 esetn mindig 0. A
funkciblokk aktulis llapota csak egy ismtelt hvs mellett az Error kimenet
lekrdezsvel oldhat meg. Ha az Error 0-t ad, akkor a mvelet hiba nlkl
vgrehajtdott. Ha a kimenet rtke 3, akkor a funkciblokk mg dolgozik.
Az Error kimenet aktualizlshoz a Strobe bemeneten egy jabb pozitv let kell
generlni.

A ReloadData funkciblokk segtsgvel lehet a letrolt adatokat a


memriamodulbl visszaolvasni!

Pldaprogram:
PROGRAM S_Card

VAR
SendData : SaveData;
Start AT %I0.0.0.0.2 : BOOL;
Mem_start AT %MB0.0.0.100 : BYTE;
Segment_NR : UINT;
DataLength : USINT;
ErrorMessage : USINT;
END_VAR

CAL SendData(Set := Start,


SourceAddress := &Mem_start,
SegmentNumber := Segment_NR,
DataLength := SegmentLength)

LD SendData.Error
ST ErrorMessage
NE 0 (* ha nem egyenl 0, akkor hiba! *)
JMPC ErrorEvaluation
(*...*)

ErrorEvaluation: (* hiba kirtkel rutin *)

(*...*)

END_PROGRAM

114
Forrs: http://www.doksi.hu

SCO

SCO transzparens soros vonali kommunikci

A PLC RS 232, vagy RS 485 interfszein keresztl a kommunikcit az SCO


funkciblokk szervezi. A transzparens ( kpernyn, ember-gp kszlken, vagy
egyb terminlon kivettett, megjelentett, vagy kivlasztott ) adatokat lehet kldeni,
vagy fogadni ezeken az interfszeken
A felhasznli program, s a PLC-hez csatlakoztatott terminl kztt az interfszt ez
a funkciblokk reprezentlja.
A kommunikci az RS 232 interfszen keresztl 9600baud adattviteli
sebessggel, 8 adat bit, 1 stop bit, parits bit nlkl valsul meg. (baud = bit/ sec.)
Az RS 485 interfszen trtn adattvitelkor tbb paramter lltsa lehetsges.
A paramterek a Sucosoft S40 "Topolgia konfigurtor menben llthatk.
A funkciblokkal az RS 232 interfszen keresztl 1 bjttl 63 bjtig, az RS 485
interfszen keresztl 1 bjtl 127 bjtig kldhet t adat.
A funkciblokk vezrli az adatklds, s fogads folyamatt, de nem
prhuzamosan, minthogy az adattvitel fl-duplex mdon trtnik. Az adatklds
feladata magasabb priorits, mint az adatfogads feladata.
Ha mindkt interfszen vltakozva akarunk adatot kldeni, akkor kt SCO
funkciblokk behvsa szksges, egy az RS 232, egy msik az RS 485 interfsz
szmra.

Az interfszekhez clszer sajt funkciblokkot


rendelni!

A funkciblokk rtkrz (remanens) belltsi lehetssggel nem rendelkezik.


CTS/RTS "handshake" (fogadoldali sszektetsi mdszer IEEE 488 szabvny )
nincs.

SCO

BOOL Strobe

USINT Command

USINT CardAdress Busy BOOL

ADDRESS MemoryAddress ElementNumber USINT

USINT DataSize Error USINT

115
Forrs: http://www.doksi.hu

SCO
Az operandusok jelentse:
Strobe engedly (pozitv llel vezrelve)
Command parancs fajtja (14)
CardAddress interfsz vlaszts (0=RS 232, 1=RS 485)
MemoryAddress A vteli ill. az adsi terlet kezdcme
DataSize A vteli ill. az adsi terlet nagysga

Busy funkciblokk llapot


ElementNumber A vteli ill. adsi adatbjtok szma
Error Hibazenetek

A funkciblokk be- /kimenetei


A funkciblokk kimenetei
Stobe: Indts, engedlyezs
A bemenet lvezrelt. A felfut l ( 0 1 ) a "Command" bemeneten korbban
megadott rtk alapjn indtja az elvgzend feladatot. A funkciblokk valamennyi,
a felfut lnl aktulis bemeneti paramtere eltroldik.
A BUSY kimenet magas (1) szintje jelzi a funkciblokk aktv llapott, azaz a Strobe
jel adatklds feladatot, vagy adatfogadsra ksz llapotot kezdemnyezett.
Az adatfogadsra ksz llapot a Strobe bemenet lefut lvel lezrhat.
Command: Parancs
A Command bemenetre adottt rtk lltja be az SCO funkciblokk zemmdjt. Az
zemmd kivlaszts csak a Strobe bemenet felfut lnl aktv. Az RS 232
interfszen keresztl 163 kztti adatbjt, az RS 485 interfszen keresztl 1127
kztti adatbjt kldhet.
1. Ads
Elszr az interfsz inicializldik, majd vgrehajtsra kerl az ads.
2. Vtelkszsg a vteli puffer trlsvel
Elszr inicializldik az RS 232 vagy az RS 485 interfsz, majd a DataSize-on
megadott nagysg puffer terletet kitrli. A fogadott adatbjtok szmt az
ElementNumber kimenet mutatja. Amennyiben a puffer terlet megtelik, a BUSY
kimenet 0-ba vlt.
Egy j l a Strobe bemeneten trli az sszes fogadott adatot.
3. Vtelkszsg a vteli puffer trlse nlkl
A 3. zemmd akkor hasznlhat, ha a kapcsolat az 1., vagy 2. zemmdban mr
ltrejtt, mivel csak ez a kt zemmd kapcsolja t a portot a SUCOM mdbl (a
PLC default kommunikcis protokollja), az SCO funkciblokkon keresztli a
transzparens md soros kommunikcira. Az ElementNumber kimenet mutatja a
vett adatbjtok szmt. A vteli puffer nem trldik ebben az zemmdban. Ha az
elz mveletbl maradt mg adat a trban, akkor az j fogadott adatok a tr
szabad terletre rdnak. Amennyiben a puffer terlet megtelik, a BUSY kimenet

116
Forrs: http://www.doksi.hu

SCO
0-ba vlt.
4. Az SCO funkciblokkon keresztl a soros kommunikci kikapcsolsa (SUCOM
aktivls)

Megjegyzs!
Ha az RS 232 interfszen keresztl tbb, mint 63 adatbjt rkezik, akkor az
automatikusan tkapcsol a SUCOM mdra.

Cardaddress Interfsz kivlaszts


A Cardaddress bemenet jelli ki, hogy melyik interfszen trtnjen a kommunikci.

0: RS 232
1: RS 485

MemoryAddress Kezd cm
Az adsi, illetve a vteli tartomny kezd cmt lehet megadni ezen a bemeneten. A
vett adatok kzvetlenl berdnak a megadott terletre. Az %MB, %SDB, %RDB
tartomnyokat bjt mretben kell megadni.

DataSize Az adsi, s a vteli tartomnyok mrete


Az egyszerre adsra kerl bjtok szmt a DataSize bemeneten kell megadni.
Ha a vteli llapot az aktv, akkor a DataSize bemeneten a puffer terletmrete
definilhat.
Az albbi rtkek engedlyezettek:
RS 232 interfsz: 1... 63
RS 485 interfsz: 1127

A funkciblokk kimenetei
BUSY Az SCO funkciblokk llapota
A funkciblokk visszajelzse:
0: A funkciblokk inaktv
1: A funkciblokk aktv
Ha egy adsi feladat lett indtva, vagy a vtelksz llapot lett aktivlva, akkor a
funkciblokk aktv llapott a BUSY kimenet 1 rtke jelzi.
BUSY = 1.
Az ads vgrehajtsa utn a BUSY kimenet alacsony szintre kapcsol.
BUSY = 0.
Ha a vteli puffer teljesen megtelik, a BUSY kimenet szintn nullra vlt.
BUSY = 0.

117
Forrs: http://www.doksi.hu

SCO
ElementNumber Az adatbjtok szma
A mr elkldtt, vagy a vett adatbjtok szmt jelzi ez a kimenet.

ERR Hiba zenetek


0: Nincs hiba
1: Helytelen paramter a Command bemeneten. A helyes rtkek 1, .., 4
2: Helytelen paramter a CardAddress bemeneten. A helyes rtkek 0, vagy 1.
3: tkzsi konfliktus a SUCOM, vagy a Suconet hasznlatakor.
Lehetsges hiba okok:
RS 232: SUCOM aktv
RS 485: Az SCO funkciblokk paramterei nincsenek belltva (topolgia
konfigurtorban nem lett kivlasztva).
4: A merkercm tl nagy.
A felhasznlt memrinak a CPU definilt memriatartomnyban kell lenni.
(Konfigurcis men: Programcode Generation -> Options -> Compiler -> Aktiv
marker range).
5: Helytelen paramter a DataSize bemeneten.
A helyes rtkek:
RS 232 interfsz: 1... 63
RS 485 interfsz: 1127
6: Helytelen paramter a MemoryAddress bemeneten
A MemoryAddress s a DataSize kombincijbl addan megsrtette a
definilt CPU merkerterletet.
Pl.: Aktv terlet: 120; MemoryAddress (100) + DataSize (40) = 140 => tl nagy!
7: A fogad puffer tlcsordulsa
Tbb mint 63, illetve 127 bjt rkezett.
8: RS 485 parits hiba
Az ad/vteli interfsz paramterei nem egyeznek meg.
9: Az alkalmazi program egyszerre prblt egy adst s egy vteli feladatot
elindtani.
Az SCO funkciblokk hasznlatakor az RS 232, s az RS 485 interfszek az albbi
paramterekkel rendelkeznek:
RS 232
Adat tviteli sebessg: 9600 baud ( baud = bit/ sec. )
Adatbitek szma: 8
Stop bit: 1
Parits vizsglat: nincs

118
Forrs: http://www.doksi.hu

SCO
RS 485
Az RS 485 interfsz paramtereit a Sucosoft S40 "Topolgia konfigurtor" menben
lehet kivlasztani. Vlassza a Topolgia konfigurtorban az Edit -> Set Parameters
-> Bus status (Transparens modus) ->Interface Parameters
A szoftver a nem megengedett kombincikat felismeri, s lehetetlenn teszi a
belltsukat.
Pldk:
Az SCO funkciblokk alkalmazst kt pldn bemutatjuk be.
Adatforgalom (kommunikci) PLC s nyomtat kztt soros vonalon.
Az RS 485, vagy az RS 232 interfszen keresztl a PLC adatot kld a nyomtatnak.
Kszlk csatlakozsok.
Programoz kszlk PLC Nyomtat

RS485
A plda kiprblshoz szksges hardver:
PLC (pl. PS4-201-MM1 a 04 verziszmtl )
Digitlis szimultor
Nyomtat soros vonallal (pl. IPP 144-40E, Metrix)
RS 485 / RS 232 nyomtat kbel
A plda kiprblshoz szksges szoftver:
Sucosoft S40 a 2.0 verzitl
A nyomtat kbel lb ( pin ) kiosztsa
PLC ( RS-485 ) IPP 144-40E
5 plus kerek apa 9 plus SUB-D apa
1 Adatkbel ( T / RB ) 2
3 0V 1
4 Adatkbel ( TA / RA ) 5
PLC ( RS-232 ) IPP 144-40E
9 plus kerek apa 9 plus SUB-D apa
3 0V 5
5 Tx D 2

119
Forrs: http://www.doksi.hu

SCO
A plda kiprblshoz szksges interfszek
Az RS-485 paramterei a Sucosoft S40 "Topolgia konfigurtor" menben
llthatk.
A nyomtat interfsz paramtereinek belltsa megtallhat a nyomtat
gpknyvben, amely tjkoztat az ignyelt specilis karakterekrl is.
Pldaprogram:
A PLC a "Sendchar" program felhasznlsval kld adatot a nyomtatnak.
A " 'Machine 1 ready to start " szveg kldend a PLC-tl a soros nyomtatra. A karakterek a
STRING vltozban vannak letrolva, s a "STRtoCOM" funkciblokk kszti el az SCO
funkciblokkal val kldshez. A szveges vltoz tartalmazza a soremels vezrl karaktert
is, azaz 23 karakterig lehet a nyomtatra adatokat kldeni.
A %I0.0.0.0.7 bemenet vlasztja ki a RS232-es vagy a RS485-as interfszt.
%I0.0.0.0.7 = 0 => RS232
%I0.0.0.0.7 = 1 => RS485
A %I0.0.0.0.0 bemenet felfut le indtja az adsi mveletet. Mivel az ads alatt a Busy
kimenet 1, azaz a %Q0.0.0.0.0 kimenet rvid idre felvillan, a szveg pedig kinyomtatsra
kerl.

PROGRAM Sendchar
VAR
Start AT %I0.0.0.0.0 : BOOL;
Interface AT %I0.0.0.0.7 : BOOL;
Active AT %Q0.0.0.0.0 : BOOL;
Error AT %Q0.0.0.0.3 : BOOL;
SendText : STRING ; (* szveges vltoz a soremels
(*(0Dh) vezrl karakterrel *)
SendBuffer AT %MB0.0.0.100 : BYTE; (* A puffer startcme *)
Convert : STRtoADR; (* Stringet adott memriaterletre
(* tviv FB *)
DataVolume : USINT; (* szveg hossza *)
Send : SCO;
END_VAR

LD 'Machine 1 ready to start$0D' (* szveg trolsa


(* STRING vltozban *)
ST SendText

(* A szveges vltoz tvitele az adott memriaterletre *)

CAL Convert(Enable := 1,
TextString := SendText,
TransmitVariable := &SendBuffer)
LD Convert.StrLen
UINT_TO_USINT (* formtum adaptls az
ST DataVolume (* SCO funkciblokkhoz *)

120
Forrs: http://www.doksi.hu

SCO
(* A szveg kikldse a nyomtatra *)
CAL Send(Strobe := Start,
Command := 1, (* Ads *)
CardAddress := (Interface
BOOL_TO_USINT
),
MemoryAddress := &SendBuffer,
DataSize := DataVolume)
LD Send.Busy
ST Active (*kimenet status a %Q0.0.0.0.0*)
LD Send.Error
NE 0
ST Error (* hibakijelzs *)

END_PROGRAM

Soros vonali adatforgalom (kommunikci) PLC s terminl kztt.


Kszlk csatlakozsok.
Terminl PLC

A plda kiprblshoz szksges hardver:


PLC ( pl. PS4-201-MM1 a 04 verziszmtl felfel)
Digitlis szimultor
ZB 4-303-KB1 kbel
A plda kiprblshoz szksges szoftver:
Sucosoft S40 a 2.0 verziszmtl
Terminl emultor program ( pl.: Telix )

A plda kiprblshoz szksges interfszek


Az RS-232 paramterei: 9600 baud, 8 adatbit, 1 stop bit, nincs parits bit.
A terminl paramterei a terminl emultor programban bellthatk.

121
Forrs: http://www.doksi.hu

SCO
Pldaprogram:
Az adatcsere a vezrl s a terminl kztt a COM9600A program segtsgvel trtnik.
Adsi folyamat
A szveg kldst a terminl fel a %I 0.0.0.0.1 bemeneten megjelen felfut l vltja ki.
A text 1, s a text 2 kztti vlaszts az %I0.0.0.0.0 rtktl fgg:
%I0.0.0.0.0 = 0 : "Start condition 1 fulfilled" (az indtsi felttel teljeslt)
%I0.0.0.0.0 = 1 : "Limit switch 2 activated" (a hatrol kapcsol 2 aktv)
Az elkldend adatok a %MB0.0.0.200 merkerbjttal kezdd terleten tallhatk.
Vtel
A %I0.0.0.0.6 bemenetre adott rtkkel lehet a mode 2 vagy a mode 3 zemmdok kztt
vlasztani.
%I0.0.0.0.6 = 0, mode 2 -- 2. zemmd (vtel puffer trlssel egytt)
A DataSize adja meg a vett adatok rszre lefoglalt puffer mrett.
A %I0.0.0.0.2 bemenetre tett rtk kapcsolja az SCO funkciblokkot vteli llapotba, s a
funkciblokk BUSY kimenet magas szintje jelzi a funkciblokk aktv llapott.
A vett adatok kzvetlenl berdnak a funkciblokk MemoryAddress bemenetn definilt
kezdcmtl (jelen pldban %MB0.0.0.0.400) kezdd memriaterletre.
Az ElementNumber kimenet a mr vett adatok szmt mutatja. A BUSY kimenet nullba vlt,
ha a fogad puffer teljesen betelt (ElementSize = DataSize). Ha a %I0.0.0.0.2 bemenet ismt
aktv, a funkciblokk fogadja az j adatokat. A funkciblokk ElementNumber kimenetn
megjelen 0 jelzi, hogy a vteli puffer trldtt.
%I0.0.0.0.6 = 1 mode 3 -- 3. zemmd (vtel puffer trls nlkl)
Ez a eljrs megegyezik a 2. zemmd eljrsval. Az egyetlen klnbsg az, hogy a fogad
puffer nem trldik. Csak annyi adatbjtot kpes fogadni, amennyit a fogad puffer trolni
kpes. Ha a fogad puffer betelt, ebben az zemmdban tovbbi adat nem fogadhat
mindaddig, amg nem trli a fogad puffer terlett a 2. zemmdban.
Ebben a pldban kt fggetlen funkciblokk vgzi az ads s a vtel mveleteit. A
funkciblokkok egymst klcsnsen reteszelik, gy az egyidej mkds nem lehetsges
(half-duplex zemmd).

PROGRAM COM9600A
VAR
(* Vltozdeklarls az adott fizikai be-/kimenetekhez *)
TextSelection : BOOL AT %I0.0.0.0.0; (* 0 = Text1; 1 = Text2 *)
SendJob : BOOL AT %I0.0.0.0.1;
ReceiveJob : BOOL AT %I0.0.0.0.2;
ReceiveMode : BOOL AT %I0.0.0.0.6;
ReceiveVolume : BYTE AT %QB0.0.0.0;
SendBuffer : BYTE AT %MB0.0.0.200;
ReceiveBuffer : BYTE AT %MB0.0.0.400;

(* loklis vltozk / kzbens bels vltozk *)

122
Forrs: http://www.doksi.hu

SCO
Text1 : STRING;
Text2 : STRING := 'Limit switch 2 activated'; (* Text 2 kezdeti rtkadssal *)
(*kap rtket *)
ReceiveText : STRING;
DataVolume : USINT;
Send_active : BOOL;
Receive2_active : BOOL;
Receive3_active : BOOL;
Error_SD : BYTE;
Error_RD : BYTE;
(* FB-k deklarlsa *)
SendFB : SCO;
ReceiveFB : SCO;
SendConverter : STRtoADR ;
ReceiveConverter : ADRtoSTR ;
END_VAR

LD 'Start condition 1 fulfilled'


ST Text1 (* Text 1 a program sorn ka rtket *)

LD Receive2_active
OR Receive3_active
JMPC Not_send

LD TextSelection
JMPC Second_Text

CAL SendConverter(Enable := 1,
TextString := Text1,
TransmitVariable := &SendBuffer)

LD SendConverter.StrLen
UINT_TO_USINT
ST DataVolume (*formtum adaptls az SCO-hoz *)
(* kzvetlenl is trolhat: ST SendFB.DataSize *)

CAL SendFB(Strobe := (SendJob


ANDN Receive2_active
ANDN Receive3_active
),
Command := 1, (*ads zemmd *)
CardAddress := 0, (*RS232*)
MemoryAddress := &SendBuffer,
DataSize := DataVolume)

LD SendFB.Busy
ST Send_active

123
Forrs: http://www.doksi.hu

SCO
Second_Text:

CAL SendConverter(Enable := 1,
TextString := Text2,
TransmitVariable := &SendBuffer)

LD SendConverter.StrLen
UINT_TO_USINT
ST DataVolume (*formtum adaptls az SCO-hoz *)

CAL SendFB(Strobe := SendJob,


Command := 1, (* ads zemmd *)
CardAddress := 0, (*RS232*)
MemoryAddress := &SendBuffer,
DataSize := DataVolume)

LD SendFB.Busy
ST Send_active

Not_send:
LD Send_active
JMPC Not_Receive

LD ReceiveMode
JMPC ReceiveMode_3

CAL ReceiveFB(Strobe := ReceiveJob,


Command := 2,
CardAddress := 0, (*RS232*)
MemoryAddress := &ReceiveBuffer,
DataSize := 63)

LD ReceiveFB.Busy
ST Receive2_active

ReceiveMode_3:
CAL ReceiveFB(Strobe := ReceiveJob,
Command := 3,
CardAddress := 0, (*RS232*)
MemoryAddress := &ReceiveBuffer,
DataSize := 63)

LD ReceiveFB.Busy
ST Receive3_active
Not_Receive:

END_PROGRAM

124
Forrs: http://www.doksi.hu

Serialize

Serialize tetszleges adatstruktra


bjtos tmbbe val msolsa
Serialize

ANY Source Source


ANY_ARRAY Buffer Buffer

UINT BufferOffset SourceLength UINT


Error USINT

Az operandusok jelentse:
Source forrs vltoz
Buffer cltartomny
BufferOffset eltols rtke a cltartomnyon bell
SourceLength a forrsvltoz hossza bjtban megadva
Error hibajelzs
Lers:
A Serialize funkciblokk egy tetszleges tpus vltozt msol t egy adott
cltartomnyba. Az adott cltartomnyt a Buffer s a BufferOffset vltozkkal lehet
meghatrozni. Az tmsolt akr egymstl is klnbz tpus adatok, mint tmb
ms PLC-be tkldhet, s ott a Deserialize funkciblokkal ismt kicsomagolhat.
A SourceLength kimeneti vltoz a forrsadatok hosszt adja meg bjtos mretben.
A Buffer tetszleges mret tmb lehet, tpusa ANY_BIT s ANY_INT rtk lehet,
kivve a BOOL tpust.
Az Error kimenet az albbi rtkeket veheti fel:
5 nincs hiba
6 puffer tllps
7 az Offset a Bufferen kvl helyezkedik el
8 a Source a Bufferen bell helyezkedik el
9 A SourceLength rtke 0

A BOOL adattpus, mint forrsvltoz tpus nem tmogatott, s a fordts


sorn (Compiler) megfele hibajelzs jelentkezik!

A klnbz memriafoglalsi technikk miatt a Serialize funkciblokk minden


PLC-tpusnl egymstl eltr eredmnyeket ad(pl. a struktrk esete)
Ha PLC-k kztt klnbz tpus adatokat kvn cserlni, akkor csak az elemi
ANY_BIT (kivve a BOOL) s ANY_INT adattpusokat s tmbket msolja t,
hiszen a STRING, ARRAY OF BOOL, mint szrmaztatott adattpusok az egyes

125
Forrs: http://www.doksi.hu

Serialize
PLC-ben klnbzkppen kerlnek brzolsra.
A fenti korltozsok azonos tpus PLC-k kzti adatcserre nem vonatkoznak.

A kvetkez plda 20bjtot msol t egy 30bjtos tmbbe!


Pldaprogram:
PROGRAM sendstruct

VAR
serie_fb : Serialize;
struct_buffer AT %SDB1.1.0.0 : ARRAY [1..30] OF BYTE;
CheckSumOffset : UINT := 0;
CheckSum : UINT;
DTOffset : UINT := 2;
TransDatum : DT; (* adsi dtum *)
DataOffset: UINT := 10;
TransmitData : Array [1..20] OF BYTE; (* felhasznli adatok *)
SerializedLength : UINT;
Error : USINT;
END_VAR

(* adatok elksztse kldsre *)


CAL serie_fb(Source := CheckSum,
Buffer := struct_buffer,
BufferOffset := CheckSumOffset,
|
SerializedLength := SourceLength)

LD serie_fb.Error
USINT_TO_BOOL (* volt-e hiba? *)
JMPC _Fail (* hibakezelsi rutin *)

CAL serie_fb(Source := TransDatum,


Buffer := struct_buffer,
BufferOffset := DTOffset,
|
SerializedLength := SourceLength)

LD serie_fb.Error
USINT_TO_BOOL (* volt-e hiba? *)
JMPC _Fail (* hibakezelsi rutin *)

CAL serie_fb(Source := TransmitData,


Buffer := struct_buffer,
BufferOffset := DataOffset,
|
SerializedLength := SourceLength)

126
Forrs: http://www.doksi.hu

Serialize
LD serie_fb.Error
USINT_TO_BOOL (* volt-e hiba? *))
JMPC _Fail (* hibakezelsi rutin *)

(* az adatstruktra sszellt, el lehet kldeni *)

_Fail: (*hibakezelsi rutin *)

127
Forrs: http://www.doksi.hu

SetRealTimeClock

SetRealTimeClock Vals idej ra llts

SetRealTimeClock

BOOL Set Error USINT


DataAddress DataAddress
ADDRESS

Az operandusok jelentse:
Set engedlyez jel (felfut l) az adatcmek
DataAddress a memriaterlet kezdcme,
ahol a dtum s idrtkek tallhatk
Error hibajelzs
Lers:
A Set bemeneten 0 1 felfut llel lehet a validej ra rtkt trni. Az j rtkek
trsa kzvetett mdon trtnik. A DataAddress ltal meghatrozott memria
kezdcmtl kezdve ht egymst kvet adatbjt tartalmazza a berand j validej
dtum s id rtkeket. A bjtok sorrendje v, hnap, nap, htnap sorszma, ra,
perc, msodperc.
A felfut l hatsra a teljes rtk trdik, azaz a teljes memriaterletnek a helyes
informcit kell tartalmazni. Rszinformcik kln- kln nem kezelhetk.
A deklarlt adattpusok bjt szlessgnek kell lenni, teht BYTE, SIINT, vagy
USINT. Clszer az USINT alkalmazsa.
Hibazenetek
Az ERR kimenet tartalmazza a lehetsges hibk kdjt
1: Helytelen DataAddress paramter
2: Helytelen v paramter ( 0 99 )
3: Helytelen hnap paramter ( 1 12 )
4: Helytelen nap paramter ( 1 31 )
5: Helytelen htnap paramter ( 0 6, 0 = vasrnap )
6: Helytelen ra paramter ( 0 23 )
7: Helytelen perc paramter ( 0 59 )
8: Helytelen msodperc paramter ( 0 59 )

j fejlesztsek esetn az ra lltsra hasznlja inkbb az RTC


funkciblokkot!

128
Forrs: http://www.doksi.hu

SetRealTimeClock
Pldaprogram:
PROGRAM Clock

VAR
Year AT %MB0.0.0.0 : USINT := 97;
Month AT %MB0.0.0.1 : USINT := 1;
Day AT %MB0.0.0.2 : USINT := 1;
Weekday AT %MB0.0.0.3 : USINT := 2; (*2 = kedd*)
Hour AT %MB0.0.0.4 : USINT:= 12;
Minute AT %MB0.0.0.5 : USINT ;
Second AT %MB0.0.0.6 : USINT ;
(* Default rtk kedd, 1.1.1997 12.00h *)
Set_time : SetRealTimeClock; (* FB deklarci*)
Set AT %I0.0.0.0.0 : BOOL ;
END_VAR

LD 98
ST Year (* v bellts: 1998 *)
LD 9
ST Month (* hnap bellts: szeptember *)
LD 12
ST Day (* nap bellts: 12. *)
LD 6
ST Weekday (* htnap sorszm bellts: szombat *)

(* A valsidej ra az FB-hvssal teljesen trdik *)


(* FIGYELEM: 12.00, mint alaprtk ( default) kerl felhasznlsra! *)

CAL Set_time(Set := Set,


DataAddress := &Year)

LD Set_time.Error
NE 0 (* hiba figyels *)
JMPC Hiba_kiertekeles
.
.
.
.END_PROGRAM

129
Forrs: http://www.doksi.hu

SR_x

SR_x bites lptet regiszter

BOOL ForwardPulse Output_1 BOOL


BOOL BackwardPulse Output_2 BOOL
BOOL ReSet . BOOL
BOOL ForwardData . BOOL
BOOL BackwardData Output_n BOOL

Az operandusok jelentse:
ForwardPulse lptet impulzus elre, felfut l
BackwardPulse lptet impulzus vissza, felfut l
ReSet visszallts, trls
ForwardData adatbemenet, elre
BackwardData adatbemenet, vissza
Output_ adatkimenet 1
Output_n utols adatkimenet
Lers:
A * helyn az adott prototpus funkciblokk neve rand be.
A lehetsges nevek a kvetkezk: SR_1, SR_2, SR_128, ahol az egyes szmok az
1-bites regisztermez hosszt adjk meg.
A ForwardData bemeneten lev rtk a ForwardPulse bemeneten megjelen felfut
l hatsra belp az els regiszter helyre. A regiszter eredeti tartalma egy lpssel
elre lp.
BackwardPulse ForwardPulse

BackwardData Outout_8 Output_1 ForwardData


8 7 6 5 4 3 2 1
x 1 1 0 0 1 1 0 1 1

BackwardPulse ForwardPulse
lptets irnya

BackwardData Outout_8 Output_1 ForwardData


8 7 6 5 4 3 2 1
x 1 0 0 1 1 0 1 1

8 bit hossz lptet regiszter a ForwardData bemenet figyelembevtelvel egyet elre lp.

130
Forrs: http://www.doksi.hu

SR_x
A BackwardData bemeneten lev rtk a BackwardPulse bemeneten megjelen
felfut l hatsra belp az utols regiszter helyre. A regiszter eredeti tartalma egy
lpssel vissza lp.
BackwardPulse ForwardPulse

BackwardData Outout_8 Output_1 ForwardData


8 7 6 5 4 3 2 1
0 1 0 0 1 1 0 0 1 x

BackwardPulse ForwardPulse
lptets irnya

BackwardData Outout_8 Output_1 ForwardData


8 7 6 5 4 3 2 1
0 1 0 0 1 1 0 0 x

8 bit hossz lptet regiszter a BackwardData bemenet figyelembevtelvel egyet visszalp.

Az Output_1Output_n kimenetek a regiszter aktulis tartalmt jelenthetik meg.


HA a ReSet trl bemenet logikai 1-t kap, akkor a regiszter tartalma, azaz az sszes
kimenet trldik.
A regisztermez hossza 128 lpsben van korltozva. Tbb lptetregiszter
egymshoz fzhet, s gy 128 lpsnl hosszabb regiszter is kialakthat.
Pldaprogram:
PROGRAM sh_reg1

VAR
Shiftregister_4_bit : SR_4;
Pulse1 : BOOL;
Pulse2 : BOOL;
Reset : BOOL;
Data_bit1 : BOOL;
Data_bit2 : BOOL;
Output1 : BOOL;
Output2 : BOOL;
Output3 : BOOL;
Output4 : BOOL;
END_VAR

131
Forrs: http://www.doksi.hu

SR_x
CAL Shiftregister_4_bit(ForwardPulse := Pulse1,
BackwardPulse := Pulse2,
ReSet := Reset,
ForwardData := Data_bit1,
BackwardData := Data_bit2)

LD Shiftregister_4_bit.Output_1
ST Output1
LD Shiftregister_4_bit.Output_2
ST Output2
LD Shiftregister_4_bit.Output_3
ST Output3
LD Shiftregister_4_bit.Output_4
ST Output4

END_PROGRAM

132
Forrs: http://www.doksi.hu

SRB_x

SRB_x bjtos lpet regiszter

BOOL ForwardPulse Output_1 USINT


BOOL BackwardPulse Output_2 USINT
BOOL ReSet . USINT
USINT ForwardData . USINT
USINT BackwardData Output_n USINT

Az operandusok jelentse:
ForwardPulse lptet impulzus elre, felfut l
BackwardPulse lptet impulzus vissza, felfut l
ReSet visszallts, trls
ForwardData adatbemenet, elre
BackwardData adatbemenet, vissza
Output_ adatkimenet 1
Output_n utols adatkimenet
Lers:
A * helyn az adott prototpus funkciblokk neve rand be.
A lehetsges nevek a kvetkezk: SRB_1, SRB_2, SRB_128, ahol az egyes
szmok a 8-bites regisztermez hosszt adjk meg.
A ForwardData bemeneten lev rtk a ForwardPulse bemeneten megjelen felfut
l hatsra belp az els regiszter helyre. A regiszter eredeti tartalma egy lpssel
elre lp.
BackwardPulse ForwardPulse

BackwardData Outout_8 Output_1 ForwardData


8 7 6 5 4 3 2 1
x 019 255 035 095 122 023 082 003 102

BackwardPulse ForwardPulse
lptets irnya

BackwardData Outout_8 Output_1 ForwardData


8 7 6 5 4 3 2 1
x 255 035 095 122 023 082 003 102

8 bit hossz lptet regiszter a ForwardData bemenet figyelembevtelvel egyet elre lp.

133
Forrs: http://www.doksi.hu

SRB_x
A BackwardData bemeneten lev rtk a BackwardPulse bemeneten megjelen
felfut l hatsra belp az utols regiszter helyre. A regiszter eredeti tartalma egy
lpssel vissza lp.
BackwardPulse ForwardPulse

BackwardData Outout_8 Output_1 ForwardData


8 7 6 5 4 3 2 1
007 019 255 035 095 122 023 082 003 x

BackwardPulse ForwardPulse
lptets irnya

BackwardData Outout_8 Output_1 ForwardData


8 7 6 5 4 3 2 1
007 019 255 035 095 122 023 082 x

8 bit hossz lptet regiszter a BackwardData bemenet figyelembevtelvel egyet vissza lp.

Az Output_1Output_n kimenetek a regiszter aktulis tartalmt jelenthetik meg.


HA a ReSet trl bemenet logikai 1-t kap, akkor a regiszter tartalma, azaz az sszes
kimenet trldik.
A regiszterhossz 128 lpsben van korltozva. Tbb lptetregiszter egymshoz
fzhet, s gy 128 lpsnl hosszabb regiszter is kialakthat.
Pldaprogram:
PROGRAM sch_reg8

VAR
Shiftregister_2_byte : SRB_2;
Pulse1 : BOOL;
Pulse2 : BOOL;
Reset : BOOL;
Data1 : USINT;
Data2 : USINT;
Output1 : USINT;
Output2 : USINT;
END_VAR

134
Forrs: http://www.doksi.hu

SRB_x
CAL Shiftregister_2_byte(ForwardPulse := Pulse1,
BackwardPulse := Pulse2,
ReSet := Reset,
ForwardData := Data1,
BackwardData := Data2)

LD Shiftregister_2_byte.Output_1
ST Output1
LD Shiftregister_2_byte.Output_2
ST Output2

END_PROGRAM

135
Forrs: http://www.doksi.hu

SRW_x

SRW_x szavas lpet regiszter

BOOL ForwardPulse Output_1 UINT


BOOL BackwardPulse Output_2 UINT
BOOL ReSet . UINT
UINT ForwardData . UINT
UINT BackwardData Output_n UINT

Az operandusok jelentse:
ForwardPulse lptet impulzus elre, felfut l
BackwardPulse lptet impulzus vissza, felfut l
ReSet visszallts, trls
ForwardData adatbemenet, elre
BackwardData adatbemenet, vissza
Output_ adatkimenet 1
Output_n utols adatkimenet
Lers:
A * helyn az adott prototpus funkciblokk neve rand be.
A lehetsges nevek a kvetkezk: SRB_1, SRB_2, SRB_128, ahol az egyes
szmok a 16-bites regisztermez hosszt adjk meg.
A ForwardData bemeneten lev rtk a ForwardPulse bemeneten megjelen felfut
l hatsra belp az els regiszter helyre. A regiszter eredeti tartalma egy lpssel
elre lp.
BackwardPulse ForwardPulse

BackwardData Outout_8 Output_1 ForwardData


8 7 6 5 4 3 2 1
x 00197 02555 18637 00023 12987 00292 09688 00023 13657

BackwardPulse ForwardPulse
lptets irnya

BackwardData Outout_8 Output_1 ForwardData


8 7 6 5 4 3 2 1
x 02555 18637 00023 12987 00292 09688 00023 13657

8 bit hossz lptet regiszter a ForwardData bemenet figyelembevtelvel egyet elre lp.

136
Forrs: http://www.doksi.hu

SRW_x
A BackwardData bemeneten lev rtk a BackwardPulse bemeneten megjelen
felfut l hatsra belp az utols regiszter helyre. A regiszter eredeti tartalma egy
lpssel vissza lp.
BackwardPulse ForwardPulse

BackwardData Outout_8 Output_1 ForwardData


8 7 6 5 4 3 2 1
00984 00197 02555 18637 00023 12987 00292 09688 00023 x

BackwardPulse ForwardPulse
lptets irnya

BackwardData Outout_8 Output_1 ForwardData


8 7 6 5 4 3 2 1
00984 00197 02555 18637 00023 12987 00292 09688 x

8 bit hossz lptet regiszter a BackwardData bemenet figyelembevtelvel egyet vissza lp.

Az Output_1Output_n kimenetek a regiszter aktulis tartalmt jelenthetik meg.


HA a ReSet trl bemenet logikai 1-t kap, akkor a regiszter tartalma, azaz az sszes
kimenet trldik.
A regiszterhossz 128 lpsben van korltozva. Tbb lptetregiszter egymshoz
fzhet, s gy 128 lpsnl hosszabb regiszter is kialakthat.
Pldaprogram:
PROGRAM s_reg16

VAR
Shiftregister_2_wort : SRW_2;
Pulse1 : BOOL;
Pulse2 : BOOL;
Reset : BOOL;
Data1 : UINT;
Data2 : UINT;
Output1 : UINT;
Output2 : UINT;
END_VAR

137
Forrs: http://www.doksi.hu

SRW_x
CAL Shiftregister_2_wort(ForwardPulse := Pulse1,
BackwardPulse := Pulse2,
ReSet := Reset,
ForwardData := Data1,
BackwardData := Data2)

LD Shiftregister_2_wort.Output_1
ST Output1
LD Shiftregister_2_wort.Output_2
ST Output2

END_PROGRAM

138
Forrs: http://www.doksi.hu

STRtoADR

STRtoADR STRING tpus vltoz adott cmterletre msolsa

STRtoADR
TextSring TextSring
ANY_STRING

ADDRESS TransmitVariable

BOOL Enable StrLen UINT

Az operandusok jelentse:
TextSring Karakterlnc, melyet a memriaterletre kell bemsolni.
TransmitVariable A memriaterlet kezdcme, ahov az adatok bemsoldnak
Enable Az talaktsi folyamat engedlyezse
StrLen Az talaktott jelek szma
Lers:
A soros vonalra kldend adatokat elzetesen a soros vonali funkciblokk (pl.SCO)
adsi terletre kell bemsolni. Az STRtoADR blokk erre a clra hasznlhat. Az
Enable bemenetre adott 1-es szinttel indthat az talaktsi mvelet.
Az StrLen kimeneten az tmsolt adatok szma olvashat le. Amennyiben a
STRING vltoz karakterhossza hosszabb a letrolsi hely mretnl, akkor a
STRING vltoz vge rtelemszeren lemarad, azaz nem kerl bemsolsra.
Pldaprogram:
PROGRAM Textcopy

VAR
String_to_Marker : STRtoADR;
SendText : STRING := 'Small Example';
StartAddress AT %MB0.0.0.100 : BYTE;
SendLength : UINT;
END_VAR

CAL String_to_Marker (Enable := 1,


TextString := SendText,
TransmitVariable := &StartAddress)

(* A karakterlnc a %MB0.0.0.100-tl kezdden kerl bemsolsra *)

LD String_to_Marker.StrLen
ST SendLength

END_PROGRAM

139
Forrs: http://www.doksi.hu

STRtoCOM

STRtoCOM STRING tpus vltoz adott cmterletre msolsa

STRtoCOM
TextString TextString
ANY_StTRING

TransmitVariaable TransmitVariaable
ANY_ARRAY

BOOL Enable

Az operandusok jelentse:
TextSring Karakterlnc, melyet a tmb adataiba kell bemsolni.
TransmitVariable A tmb, ahov a karakterlncot be kell msolni
Enable Az talaktsi folyamat engedlyezse
StrLen Az talaktand jelek szma

Lers:
A soros vonalra kldend adatokat elzetesen a soros vonali funkciblokk (pl.SCO)
adsi terletre kell bemsolni. Az STRtoCOM blokk erre a clra hasznlhat. Az
Enable bemenetre adott 1-es szinttel indthat az talaktsi mvelet.
Az StrLen kimeneten az tmsolt adatok szma olvashat le. Amennyiben a
STRING vltoz karakterhossza hosszabb a letrolsi hely mretnl, akkor a
STRING vltoz vge rtelemszeren lemarad, azaz nem kerl bemsolsra.
Pldaprogram:
PROGRAM Textsend

VAR
String_to_Array : STRtoCOM;
SendText : STRING := 'Small Example';
SendArray : ARRAY [1..100] OF BYTE;
SendLength : UINT;
END_VAR

CAL String_to_ Array(Enable := 1,


TextString := SendText,
TransmitVariable := SendArray
|
SendLength :=.StrLen)

END_PROGRAM

140
Forrs: http://www.doksi.hu

TimeConcat

TimeConcat id (TIME) tpus vltoz sszelltsa


egyedi UINT tpus adatokbl

TimeConcat

UINT MilliSeconds OutputTime TIME

UINT Seconds Overflow BOOL

UINT Minutes

UINT Hours

UINT Days

UINT Sign

Az operandusok jelentse:
MilliSeconds idtartam vltoz milliszekundum rsze
Seconds idtartam vltoz szekundum rsze
Minutes idtartam vltoz perc rsze
Hours idtartam vltoz ra rsze
Days idtartam vltoz nap rsze
Sign az idtartam eljele
OutputTime az eredmnyl kapott id vltoz
Overflow Tlcsorduls
Lers:
A bemenetknt UINT formtumban megadott egyedi idtartam rtkeket a
funkciblokk a TIME formtum vltozv alaktja.
A funkciblokk az egyes rtkeket tszmtja az idtartam vltoz megfelel
rszeiv, s szksg esetn tlcsordulst kpez.
A bemeneti vltozk minden megengedett UINT tpus rtket felvehetnek, amg az
sszrtk tl nem lpi a T#63d23h59m59s999ms rtket. Amennyiben megtrtnik a
tllps, akkor az Overflow kimeneten tlcsorduls jelzs ( = 1) jelentkezik.
A bemeneti rtkek eljelbitje az eredmnyrtkben is megjelenik. A Sign = 0
pozitv, a Sign = 1 rtk negatv kimeneti operandust eredmnyez.

141
Forrs: http://www.doksi.hu

TimeConcat
Pldaprogram:
PROGRAM time_gen

VAR
TimeConcaten : TimeConcat;
Milliseconds : UINT;
Seconds : UINT;
Minutes : UINT;
Hours : UINT;
Days : UINT;
Sign: BOOL := 0;
TimeStructure : TIME;
Overflow : BOOL;
END_VAR

CAL TimeConcaten (MilliSeconds := Milliseconds,


Seconds := Seconds,
Minutes := Minutes,
Hours := Hours,
Days := Days,
Sign := Sign
|
TimeStructure := OutputTime,
Overflow := Overflow)

END_PROGRAM

142
Forrs: http://www.doksi.hu

TimeGenerator

TimeGenerator temad impulzusgenertor

TimeGenerator

BOOL Set PulseOutput BOOL

UINT Period

Az operandusok jelentse:
Set indtsi felttel, pozitv llel
Period Peridusid milliszekundumban
PulseOutput impulzus kimenete

Iddiagramok:

Set

PulseOutput
T

Lers
Ha a Set bemenet magasba vlt a PulseOutput kimeneten (a Period bemeneten,
milliszekundumban definilt peridusidvel) 1:1 kitltsi tnyezj pulzussorozat
generldik mindaddig, amg az Set bemenet magas.
A peridusidnek mindig nagyobbnak kell lennie a ciklusid ktszeresnl, hogy az
impulzus alacsony, s magas szintje tisztn elklnljenek.
Ha a peridusidt meghatroz Period bemenetre tett rtk vltozik, ez csak akkor
mdostja a peridusidt, ha a Set bemenetre egy felfut l jut.
A megadott peridusid pontossgt az alkalmazi program ciklusideje s az
opercis rendszer futsi ideje befolysolhatja. A funkciblokk programcikluson
belli tbbszri hvsa (klnsen a peridusid s a program ciklusid azonos
nagysgrendbe esse esetn) a pontatlansgot cskkenti.
A peridusid pratlan rtkt a bels szoftver a kvetkez pros rtkre lefel
kerekti.

143
Forrs: http://www.doksi.hu

TimeGenerator
Pldaprogram:
PROGRAM frequency

VAR
ClockGenerator : PulseGenerator;
Start AT %I0.0.0.3.6 : BOOL;
PeriodTime: UINT := 320; (* A peridusid milliszekundumban *)
Clock : BOOL;
END_VAR

CAL ClockGenerator(Set := Start,


Period := PeriodTime)

LD ClockGenerator.PulseOutput
ST Clock

END_PROGRAM

144
Forrs: http://www.doksi.hu

TimePulse

TimePulse impulzuskpz

TimePulse

BOOL Set PulseOutput BOOL

BOOL ReSet ElapsedTime UINT

UINT PresetTime

Az operandusok jelentse:
Set indtsi felttel, pozitv llel
ReSet visszallts, trls
PreSetTime impulzus idrtk milliszekundumban
PulseOutput impulzus kimenete
ElapsedTime tnylegesen eltelt impulzus id milliszekundumban

Iddiagramok:

Set

ReSet

PulseOutput
T T T <T

Lers
A Set bemenet felfut lvel indtva PulseOutput kimenet a PresetTime bemeneten
(milliszekundumban ) definilt idtartamra magas rtket vesz fel. A Set llapottl
fggetlenl az adott hosszsg impulzus a PulseOutput kimeneten fennmarad, s
csak a pulzusid letelte utn lesz ismt alacsony a P kimenet rtke.
Az ElapsedTime kimenet milliszekundumban kijelzi a idszmll aktulis rtkt.
A ReSet bemenet magas szintje, alaphelyzetbe lltja az idtagot. Alaphelyzetben a
kimenetek rtke nulla.

145
Forrs: http://www.doksi.hu

TimePulse

Pldaprogram:
PROGRAM pulse

VAR
Timer1 : TP;
Start AT %I0.0.0.2.6 : BOOL;
PulseDuration: TIME := T#125ms;
OutputPulse : BOOL;
ActualTime : TIME;
END_VAR

CAL Timer1 (IN := Start,


PT := PulseDuration)

LD Timer1.Q
ST OutputPulse

LD Timer1.ET
ST ActualTime

END_PROGRAM

146
Forrs: http://www.doksi.hu

TimerAlarm

TimerAlarm idztses megszaktskezels

TimerAlarm

BOOL EnableDisable

USINT Mode

UINT Predivide

UINT SetpointValue Error USINT

ANY_FUNCTION_BLOCK SubRoutine CallUpValue UINT

Az operandusok jelentse:
EnableDisable Megszaktskr funkciblokk engedlyezse / tiltsa, felfut lvez.
(engedly=1, tilts=0)
Number zemmd (1 = timer funkci, 2 = impulzusgenertor funkci)
RisingEdge eloszt
SetpointValue Impulzusszm alapjel
SubRoutine megszaktskrst kiszolgl funkciblokk neve
Error hibajelzs
CallUpValue megszaktskr hvsok szma
Lers:
A funkciblokk a PS4-201-MM1 alapkszlk %I0.0.0.0.1 bemenethez van
hozzrendelve. A PS4-141-MM1 s PS4-151-MM1 esetn a hozzrendels a
%I0.0.0.1.0 bemenethez trtnik.
A PS4-341-MM1 kt lvezrelt bemenettel (%I0.0.0.1.0, s %I0.0.0.1.1) rendelkezik
Az EnableDisable bemenet engedlyezi a funkciblokk mkdst. Ha a bemeneten
pozitv lvlts (0 1) kvetkezik be, a funkciblokk indul, valamint tveszi
aSubRoutine bemenetre adott megszaktskr funkciblokk nevet, a Predivide s a
SetpointValue bemenetekre adott rtkeket s kzbensleg letrolja azokat. A
CallUpNumber kimenet egyidejleg trldik. A bemenet 1 -> 0 tmenete esetn a
funkciblokk lell, s egyttal trldik is.
A funkciblokk az 1. zemmdban egy idztt valst meg.. Az idalap = (a
Predivide bemeneten lev rtk) s-ban, a megengedett legrvidebb idalap 512s.
Az alaprtk = (a SetpointValue bemeneten lev rtk). Ha az alaprtknek
megfelel szm, egyenknt az idalap hosszsg id teljesen letelt, akkor a

147
Forrs: http://www.doksi.hu

TimerAlarm
CallUpNumber tartalma eggyel n, s ha a SubRoutine bemenet nem res, akkor
behvja a bemeneten feltntetett megszaktst kiszolgl funkciblokkot.
A funkciblokk a 2. zemmd llsban egy jelgenertor valst meg. A jelgenertor
az alapkszlk (PS4-150/-200-/300-MM1) %Q0.0.0.0.0 kimenethez csatlakozik. A
genertor peridus ideje = (a Predivide bemeneten lev rtk) s-ban. A
SetpointValue bemeneten a %Q0.0.0.0.0 kimeneten megjelen sszes le- s felfut l
sszegt kell megadni. Ha a SetpointValue alaprtk felnek megfelel szm,
egyenknt az idalap hossz impulzus teljesen letelt, akkor a CallUpNumber
tartalma eggyel nvekszik.
Az ERR kimenet tartalmazza a hibk kdjait:
0 = nincs hiba
1 = alaprtk (SetpointValue) bemeneten 0 van
2 = eloszt (Predivide) bemeneten az rtk < 512.
3 = a Mode bemeneten nincs megfelel rtk (nem 1, vagy 2)
A SubRoutie bemenet lehetv teszi egy esemnyvezrelt program beillesztst.
Ennek rdekben ezen a bemeneten a kiszolgl funkciblokk cmt kell megadni.
Mikor az esemny bekvetkezik (a CallUpValue szmll eggyel n) a funkciblokk
meghvsra kerl.
Ha ezen a bemeneten nincs cm, akkor csak a CallUpValue szmll tartalma n.
A megszaktskrst kiszolgl funkciblokk nem tartalmazhat sem bemen, sem
kimen paramtereket. Egy ilyen funkciblokk csak loklis vltozkat, vagy csak a
fprogramban deklarlt globlis vltozkat, mint kls vltozkat
(VAR_EXTERNAL) tartalmazhat.
Esemnyvezrelt program alkalmazsakor az albbi szempontokat kell figyelembe
venni:

Az esemny bekvetkezte a ciklikus felhasznli program vgrehajtst


megszaktja, a regiszterek llapott elmenti, s a SubRoutine bemeneten megadott
cmre ugorva vgrehajtja a kiszolgl funkciblokkot. A megszaktskr
funkciblokk nem szakthat meg egy msik megszaktskr funkciblokkal (az
sszes megszaktskr funkciblokknak azonos a prioritsa).
A felhasznli program 5ms idtartamra (kb. 1000 utastssor vgrehajtsa)
korltozza a megszaktskr funkciblokk vgrehajtsi idejt, mivel a
megszaktskr funkciblokk mkdst a rendszerprogram sem tudja (mg
tpkimaradskor sem) megszaktani. Ha a vgrehajtsi id tllpi ezt a korltot,
akkor a tp kikapcsolsakor EDC hiba keletkezhet.
A megszaktskr funkciblokk vgrehajtsi ideje hozzaddik a felhasznli
program vgrehajtsi idejhez, gy a ciklusid ellenrzsbe is bekerl!
Mivel az esemnyvezrelt program futtatsakor korltozs nlkl elrhetk a
globlis vltozk is, a ciklikus felhasznli program s az esemnyvezrelt
program ltal kzsen irhat /olvashat adatokat reteszels nlkl nem szabad
felhasznlni. Pldul a ciklikus felhasznli programban s a megszaktskr
funkciblokkban ugyanabban a bjtban hasznlt bithozzfrst csak a
Disable_Interrupt s a Enable_Interrupt utastsokkal val szinkronizlssal

148
Forrs: http://www.doksi.hu

TimerAlarm
szabad korrekten vgrehajtani.
A lehet leggyorsabb reagls rdekben a megszaktskr funkciblokkban
clszer a kzvetlen perifria hozzfrst hasznlni, melyek az alapkszlken
llnak rendelkezsre (%QP0.0.0.0.x, %QPB0.0.0.0).
A megszaktskr funkciblokkok az alkalmazi programban elvileg tbbszr is
hasznlhatk, de ezt ltalban kerlni rdemes, mivel a megszaktskr
funkciblokk tpusok ugyanazzal az esemnyforrssal, s gy a programban csak
az utoljra rvnyesl funkciblokk hatrozza meg feldolgozst.
A tbbszri felhasznls azt jelenti, hogy az egyedi funkciblokk-tpus minden
egyes alkalmazshoz kln-kln adatterletet foglal le.
A kvetkez pldban aTimerAlarm, mint impulzusgenertor (mode = 2) mkdik.
Az idalap 1ms,( Predivide = 1000). Mivel a SetpointValue = 100, a %Q0.0.0.0.0
kimeneten 50db impulzus jelenik meg 1:1 kitltssel.

A megszaktskr funkciblokkok bemeneteinek rtkadsa csak a hvskor


trtn zrjeles rtkadssal trtnhet. Kzvetlen paramter hozzrendels a
zrjelen kvl, vagy a hvst kveten nem megengedett!

min. 512 1024 t [s]

Predivide=512
Mode=1
SetpointValue=1
CallUpNumber 0 1 2 3 4 5 6 7 8 9 - - 65534 0
Ugrs a funkciblokkra

512 1024

Predivide =512
Mode =1
SetpointValue=3
CallUpNumber 0 0 0 1 1 1 2 2 2 3 3 3 4 4
Ugrs a funkciblokkra

kimenet
512 1024

Predivide =512
Mode =2
SetpointValue=4
CallUpNumber 0 0 0 0 1 1 1 1 2 2 2 2 3 3
Ugrs a funkciblokkra

149
Forrs: http://www.doksi.hu

TimeSplit

TimeSplit id (TIME) tpus vltoz sztvlasztsa


egyedi UINT tpus adatokra

TimeSplit

TIME InputTime MilliSeconds UINT

Seconds UINT

Minutes UINT

Hours UINT

Days UINT

Sign BOOL

Az operandusok jelentse:
InputTime a bemeneti TIME idtartam vltoz
MilliSeconds idtartam vltoz milliszekundum rsze
Seconds idtartam vltoz szekundum rsze
Minutes idtartam vltoz perc rsze
Hours idtartam vltoz ra rsze
Days idtartam vltoz nap rsze
Sign az idtartam eljele
Lers:
A bemenetknt TIME formtumban megadott vltozt a funkciblokk UINT
formtum egyedi vltozkk alaktja t.
A Sign kimenet adja meg az idtartam vltoz eljelt. 0 a pozitv idtartamot, 1 a
negatv idtartamot jelkpezi.
Pldaprogram:
PROGRAM zt_split

VAR
TimeElements : TimeSplit;
Duration : TIME := T#20d22h13m12s800ms;
Milliseconds : UINT;
Seconds : UINT;
Minutes : UINT;
Hours : UINT;
Days : UINT;
Sign : BOOL;
END_VAR

150
Forrs: http://www.doksi.hu

TimeSplit

CAL TimeElements(InputTime := Duration |


Milliseconds := MilliSeconds,
Seconds := Seconds,
Minutes := Minutes,
Hours := Hours,
Days := Days,
Sign := Sign)

END_PROGRAM

151
Forrs: http://www.doksi.hu

TODsplit

TODconcat napi id (TOD) tpus vltoz sszelltsa


egyedi UINT tpus adatokbl
TODconcat

UINT Millisecond OutputTOD TIME_OF_DAY


UINT Second Error BOOL
UINT Minute
UINT Hour

Az operandusok jelentse:
Millisecond id vltoz nap rsze
Second id vltoz hnap rsze
Minute id vltoz v rsze
Hour id vltoz ra rsze
OutputTOD az eredmnyl kapott dtum vltoz
Error Hibajelzs
Lers:
A bemenetknt UINT formtumban megadott egyedi rtkeket a funkciblokk a id
(TIME_OF_DAY) formtum vltozv alaktja.
Az egyes bemeneti rtkek a nekik megfelel rtktartomnyt nem lphetik t.
Amennyiben a megengedett rtkeket tllpik, akkor az Error kimeneten hibajelzs
lp fel (= 1).
Pldaprogram:
PROGRAM time2
VAR
TimeOfDay : TODconcat;
Millisecond : UINT;
Second : UINT;
Minute : UINT;
Hour : UINT;
TODStructure : TIME_OF_DAY;
Error : BOOL;
END_VAR
CAL TimeOfDay(MilliSecond := Millisecond,
Second := Second,
Minute := Minute,
Hour := Hour
|
TODStructure:= OutputTOD,
Error:= Error)
END_PROGRAM

152
Forrs: http://www.doksi.hu

TODsplit

TODsplit id (TIME_OF_DAY) tpus vltoz sztvlasztsa


egyedi UINT tpus adatokra
TODsplit

DT InputTOD MilliSecond UINT


Second, UINT
Minute UINT
Hour UINT

Az operandusok jelentse:
InputTOD a bemeneti TIME id vltoz
MilliSecond id vltoz milliszekundum rsze
Second id vltoz szekundum rsze
Minute id vltoz perc rsze
Hour id vltoz ra rsze
Lers:
A bemenetknt TIME_OF_DAY formtumban megadott vltozt a funkciblokk
UINT formtum egyedi vltozkk alaktja t.
Pldaprogram:
PROGRAM time1
VAR

Split_time : TODsplit;
TimeOfDay : TOD := TOD#12h13m12s800ms;
Milliseconds : UINT;
Seconds : UINT;
Minutes : UINT;
Hours : UINT;

END_VAR

CAL Split_time (InputTOD := TimeOfDay


|
Milliseconds := MilliSecond,
Seconds := Second,
Minutes := Minute,
Hours := Hour)

END_PROGRAM

153
Forrs: http://www.doksi.hu

TransferArray

TransferArray adatblokk msolsa, inicializlsa

TransferArray

Source Source
ANY_ARRAY
Destination Destination
ANY_ARRAY
BOOL Mode
UINT SourceOffset
UINT DestinationOffset
UINT ElementNumber Error USINT

Az operandusok jelentse:
Source a forrstmb
Destination cltartomny
Mode zemmd: (0 = inicializls, 1 = msols)
SourceOffset a forrstmbn belli eltols rtke
DestinationOffset a cltmbn belli eltols rtke
ElementNumber msoland bjtok szma
Error hibajelzs
Lers:
A funkciblokknak ktfle zemmdja van (adatok inicializlsa, s adatterlet
msolsa).
Az zemmd vlaszts a Mode bemenetre adott rtkkel trtnhet.
A forrs s a cl-tmb tetszleges nagysg tmb lehet. A tmb tpusa ANY_INT
vagy ANY_BIT lehet, kivve a BOOL (bites) tmbket.
Az Error kimeneten az esetleges hibakd jelenik meg:
0 nincs hiba,
1 az elemek szma (ElementNumber) nulla.
2 A SourceOffset rtke nagyobb, mint a Source tartomny rtke
3 Az elemek szma tllpi a a forrstartomny rtkt
4 A DestinationOffset rtke nagyobb, mint a Destination tartomny
rtke
5 Az elemek szma tllpi a cltartomny rtkt
6 forrscm s a clcm azonos

154
Forrs: http://www.doksi.hu

TransferArray
Inicializlsi zemmd
Az inicializlsi zemmdban a Source s a SourcsOffset ltal meghatrozott
tmbelemet msol a Destination s a DestinationOffset ltal meghatrozott
tmbterletre. A forrs s a cl egy tmbn bell is lehet.
A fellrt tmbelemek szmt az ElementNumber adja meg.
Msolsi zemmd
A msolsi zemmdban egy tmb, vagy annak egy rsze (Source + SourceOffset)
kerl tmsolsra a (Destination + DestinationOffset) ltal meghatrozott terletre. A
msoland bjtok szmt az ElementNumber hatrozza meg.A forrs s a cl egy
tmbben is elhelyezkedhetnek, azaz blokkeltols is lehetsges.
A TransferArray-re vonatkoz plda a BlockTransfer funkciblokk alatt tallhat,
mivel a kt funkciblokk egymssal azonos, csupn a deklarcis eljrs klnbzik.
(A cl- s forrscmeket a cl- s forrstmb deklarcikkal kell helyettesteni.)

155
Forrs: http://www.doksi.hu

WriteMC

WriteMC adatok rsa a flash-memriba

WriteMC

ANY_ARRAY SourceAddress SourceAddress

BOOL Strobe Active BOOL


UINT SegmentNumber MaxSegmentNumber UINT
USINT DataLength Error USINT

Az operandusok jelentse:
SourceAddress a forrstmb, mely tartalmazza a mentend adatokat
Strobe letrolsi folyamat indtsa
SegmentNumber a szegmens szma (megengedett: 0n)
DataLength a troland adatbjtok szma
MaxSegmentNumber a fjl utols lehetsges szegmensszma
Error hibajelzs
Lers:
A WriteMC funkciblokk segtsgvel a memriamodulba lehet adatokat a CPU
memriaterletrl letrolni.
Ez a funkciblokk a ReadMC blokkal egytt fontos alkalmazsi terlete a remanens
adattrolsnak, receptura-kezelsnek, illetve vltozk letrolsnak egy program
aktualizlst megelzen.

A memriamodult a PLC-be betenni, illetve kivenni csak a PLC feszltsgmentes


llapotban szabad!

A memriamodulban az adatok egyenknt 128bjt hosszsg szegmensre vannak


felosztva.
A szabad adatterlet meghatrozshoz a funkciblokkot DataLength = 0 rtkkel
kell meghvni, melynek hatsra nem indul be az rsi folyamat, ugyanakkor a
MaxSegmentLength visszaadja az utols mg hasznlhat szegmens rtkt.
A funkciblokk a programfutssal aszinkron mdon kerl vgrehajtsra, s tbb
programcikluson keresztl is eltarthat. Ezalatt az id alatt az Active kimenet 1-t ad.
A hibtlan vgrehajtst jelzi az Active kimenet 0-ba trtn visszavltsa, mikzben
az Error kimenet is 0-t ad.
Egyszerre tbb funkciblokk is lehet egyidejleg aktv. az opercis rendszer a
hvsok sorrendjben egyms utn hajtja vgre az rsi mveleteket.

156
Forrs: http://www.doksi.hu

WriteMC
Az Error kimenet a kvetkez llapotokat veheti fel:
0 nincs hiba
1 nincs memriamodul beptve
2 online kapcsolat miatt nem lehetsges a hozzfrs (csak PS4-200 esetn)
3 nem lehetsges a hozzfrs egyidej WriteMC hvs miatt
(csak PS4-200 esetn)
4 rvnytelen SegmentNumber (PS4-200 esetn a megengedett: 0.511; PS4-
300 esetn a modultl fggen: 0.1023)
5 rvnytelen adathossz (megengedett DataLength rtk: 1.128)
6 -
7 nem lehetsges a hozzfrs, mert a memriamodul , mint forrskd httr van
felhasznlva (csak PS4-200 esetn)
8 a memriamodul formzsa nem engedi meg az adattrolsi tartomny
hasznlatt (csak PS4-300 esetn)
Csak a PS4-200 esetn: Az Active kimenet a PS4-150/-200 esetn mindig 0. A
funkciblokk aktulis llapota csak egy ismtelt hvs mellett az Error kimenet
lekrdezsvel oldhat meg. Ha az Error 0-t ad, akkor a mvelet hiba nlkl
vgrehajtdott. Ha a kimenet rtke 3, akkor a funkciblokk mg dolgozik.
Az Error kimenet aktualizlshoz a Strobe bemeneten egy jabb pozitv let kell
generlni.

A ReadData funkciblokk segtsgvel lehet a letrolt adatokat a


memriamodulbl visszaolvasni!

Pldaprogram:
PROGRAM SAVE

VAR
StrobeSave AT %I0.0.0.0.0 : BOOL;
ActiveSave AT %Q0.0.0.0.0 : BOOL;
ErrorSave : USINT;
FBSaveData : WriteMC;
SegmentNumber : UINT;
DataLength : USINT;
LastSegmentNumber : UINT;
DataArea : ARRAY[0..31] of USINT;
END_VAR

LD ActiveSave
JMPCN CONTINUE
(* adatok elksztse a trolsra *)

157
Forrs: http://www.doksi.hu

WriteMC
CONTINUE:

LD 47
ST SegmentNumber
LD 32
ST DataLength

(* A DataArea tmbbl 32 bjt rsa a memriamodul 47-es szegmensbe *)


CAL FBSaveData(Strobe := StrobeSave,
SegmentNumber := SegmentNumber,
DataLength := DataLength,
SourceAddress := DataArea
|
ActiveSave := Active,
LastSegmentNumber := MaxSegmentNumber,
ErrorSave := Error)

LD ErrorSave
EQ 0
JMPC NO_ERROR
(* hiba kezelsi rutin *)

NO_ERROR:
(* tovbbi programrszek *)

END_PROGRAM

158
Forrs: http://www.doksi.hu

Sucosoft hatrrtkek

7. Sucosoft hatrrtkek
PS4-200 PS4-300 PS416
A Project Manager hatrrtkei
a POU-k max. szma egy projektben 256 256 256
a projektnv max. hossza. 32 karakter 32 karakter 32 karakter
a neveknek az els 8 karakterben
klnbzknek kell lenni!
A program szerkeszt (Editor) korltai
a sorok max. szm egy POU-ban 65 535 65 535 65 535
a vltoznevek max. hossza 64 karakter 64 karakter 64 karakter
a POU nv max. hossza 32 karakter 32 karakter 32 karakter
llapotkijelzs (Status Display) hatrrtkei
1)
egyszerre kijelezhet vltozk szma ca. 50 - -
A konfigurtor (Topology Configurator) hatrrtkei
konfigurciban a max. komponensek 175 630 753
szma 2)
az I/O monitorban a kivlaszthat 10 10 10
komponensek max. szma
Korltok a CPU s a fordt (compiler) fggvnyben
max. programmret belertve az sszes FB-t
max. programmret belertve az sszes FB-t 63 kbjt 512 kbjt CPU200: 256kB
(adat + programkd egyttesen) CPU300: 512kB
CPU400:1MB
egy POU max. programkd mrete 56 kbjt 64 kbjt 64 kbjt
az sszes vltoz max mrete 32000 global 16000 global 16000 global
(fprogram + sszes FB) 32000/POUloc. 16kB/POUloc. 16kB/POUloc.
a fastruktra max. mrete (sszekapcsolt 8 16 16
funkciblokkok szma)
a funkciblokkok hvsnak max. mlysge 16 16 16
programonknti instanclsok szma 2) 4000 4000 4000
az AT deklarlsok max szma 2) 16 kbjt 16 kbjt 5450
egy tmb max. mrete 8 kbjt 16 kbjt 16 kbjt
egy tmb max dimenzija 3 4 4
index tartomny megengedett rtke 0...255 -2147483648 -2147483648
.+2147483647 ...+2147483647
felsorols tpus vltozk max. elemszma 255 65000 65000

159
Forrs: http://www.doksi.hu

Sucosoft hatrrtkek

PS4-200 PS4-300 PS416


egy STRING vltoz max. mrete 253 karakter 1024 karakter 1024 karakter
globlis tpus defincik max. szma 1100 1100 1100
TIME adattpus megengedett tartomnya +63/-64 nap, +127/-128nap +127/-128nap
23 h, 59perc, 23 h, 59perc, 23 h, 59perc,
59sec., 999ms. 59sec., 999ms. 59sec., 999ms.
DATE adattpus megengedett tartomnya 1900-1-1 1900-1-1 1900-1-1
2154-12-31 2154-12-31 2154-12-31
maximlisan konfigurlhat ciklusid 255 ms 1000 ms 1000 ms
importlt S30 programok max. mrete 54 kByte nincs korlt nincs korlt
online feldolgozs miatti ajnlott max. POU < 2 kByte < 8 kByte < 8 kByte
mret
1) Az adattpustl fgg. Ha a korltrtket meghaladja, akkor az adott rtkek helyn
krdjel jelenik meg.
2) A korltozs fgg termszetesen a rendelkezsre ll PLC memriaterlettl is.

160

You might also like