PAiRAII Instr 2008 lab7

background image

Laboratorium Podstaw Automatyki i Regulacji Automatycznej II

1

7

Programowanie w języku Instruction List

Informacje wst

ę

pne:

JĘZYK LISTY INSTRUKCJI (INSTRUCTION LIST) DLA PLC

J

ę

zyk programowania Instruction List jest j

ę

zykiem opartym na akumulatorze. Przy wykonywaniu funkcji

binarnych akumulator jest typu BOOL.

Format rozkazu:

<etykieta:> operator <argument> ‘komentarz


Funkcje binarne

Operator

Argument

Opis

LD_BOOL

zmienna

akumulator := argument

LDN_BOOL

zmienna

akumulator := NOT argument

ST_BOOL

zmienna

argument := akumulator

warto

ść

akumulatora nie ulega zmianie

STN_BOOL

zmienna

argument := NOT akumulator

warto

ść

akumulatora nie ulega zmianie

S

zmienna

argument SET := akumulator

warto

ść

akumulatora nie ulega zmianie

R

zmienna

argument RESET := akumulator

warto

ść

akumulatora nie ulega zmianie

PT

zmienna

argument uaktywniany zboczem narastaj

ą

cym := akumulator

warto

ść

akumulatora nie ulega zmianie

NT

zmienna

argument uaktywniany zboczem opadaj

ą

cym := akumulator

warto

ść

akumulatora nie ulega zmianie

NOT

akumulator := NOT akumulator

AND

zmienna

akumulator := akumulator AND argument

ANDN

zmienna

akumulator := akumulator AND NOT argument

AND(

zagnie

ż

d

ż

one

wyra

ż

enie

logiczne

akumulator := akumulator AND zagnie

ż

d

ż

one wyra

ż

enie logiczne

otwarcie nawiasu powoduje zło

ż

enie bie

żą

cej funkcji na stosie, zamkni

ę

cie

nawiasu powoduje pobranie ze stosu i wykonanie funkcji z aktualnym
stanem akumulatora

ANDN(

zagnie

ż

d

ż

one

wyra

ż

enie

logiczne

akumulator := akumulator AND NOT zagnie

ż

d

ż

one wyra

ż

enie logiczne

otwarcie nawiasu powoduje zło

ż

enie bie

żą

cej funkcji na stosie, zamkni

ę

cie

nawiasu powoduje pobranie ze stosu i wykonanie funkcji z aktualnym
stanem akumulatora

OR

zmienna

akumulator := akumulator OR argument

ORN

zmienna

akumulator := akumulator OR NOT argument

OR(

zagnie

ż

d

ż

one

wyra

ż

enie

logiczne

akumulator := akumulator OR zagnie

ż

d

ż

one wyra

ż

enie logiczne

otwarcie nawiasu powoduje zło

ż

enie bie

żą

cej funkcji na stosie, zamkni

ę

cie

nawiasu powoduje pobranie ze stosu i wykonanie funkcji z aktualnym
stanem akumulatora

background image

Programowanie w j

ę

zyku Instruction List

2

Laboratorium Podstaw Automatyki i Regulacji Automatycznej II

ORN(

zagnie

ż

d

ż

one

wyra

ż

enie

logiczne

akumulator := akumulator OR NOT zagnie

ż

d

ż

one wyra

ż

enie logiczne

otwarcie nawiasu powoduje zło

ż

enie bie

żą

cej funkcji na stosie, zamkni

ę

cie

nawiasu powoduje pobranie ze stosu i wykonanie funkcji z aktualnym
stanem akumulatora

XOR

zmienna

akumulator := akumulator XOR argument

XORN

zmienna

akumulator := akumulator XOR NOT argument

XOR(

zagnie

ż

d

ż

one

wyra

ż

enie

logiczne

akumulator := akumulator XOR zagnie

ż

d

ż

one wyra

ż

enie logiczne

otwarcie nawiasu powoduje zło

ż

enie bie

żą

cej funkcji na stosie, zamkni

ę

cie

nawiasu powoduje pobranie ze stosu i wykonanie funkcji z aktualnym
stanem akumulatora

XORN(

zagnie

ż

d

ż

one

wyra

ż

enie

logiczne

akumulator := akumulator XOR NOT zagnie

ż

d

ż

one wyra

ż

enie logiczne

otwarcie nawiasu powoduje zło

ż

enie bie

żą

cej funkcji na stosie, zamkni

ę

cie

nawiasu powoduje pobranie ze stosu i wykonanie funkcji z aktualnym
stanem akumulatora

Je

ż

eli wyra

ż

enie logiczne zaczyna si

ę

od operatora:

AND(

ANDN(

OR(

ORN(

XOR(

XORN(

to nast

ę

pn

ą

instrukcj

ą

musi by

ć

operator LD_BOOL lub LDN_BOOL.

Wyra

ż

enia logiczne mo

ż

na zagnie

ż

d

ż

a

ć

do 8 poziomów.

Przykład 1.

Napisz w j

ę

zyku Instruction List podprogram steruj

ą

cy dla czterech wej

ść

dwustanowych W1, W2, W3 i W4

realizuj

ą

cy nast

ę

puj

ą

c

ą

funkcj

ę

logiczn

ą

:

W4)

(W3

W2)

(W1

+

+

Wynik operacji ma sterowa

ć

wyj

ś

ciem o nazwie Z.

Rozwi

ą

zanie

W tym celu nale

ż

y zało

ż

y

ć

blok podprogramu, który zostanie napisany w j

ę

zyku

Instruction List oraz

zadeklarowa

ć

akumulator. Na akumulator potrzeba 8 referencji binarnych i 2 referencje o organizacji słowowej

nigdzie nie u

ż

ywane w programie.

background image

Programowanie w j

ę

zyku Instruction List

Laboratorium Podstaw Automatyki i Regulacji Automatycznej

3

Nast

ę

pnie nale

ż

y umie

ś

ci

ć

w bloku _MAIN wywołanie podprogramu (CALL) i przej

ść

do edycji podprogramu.

Prawym klawiszem myszy wprowadzamy słowo kluczowe,

a nast

ę

pnie równie

ż

prawym klawiszem myszy deklarujemy zmienn

ą

:

background image

Programowanie w j

ę

zyku Instruction List

4

Laboratorium Podstaw Automatyki i Regulacji Automatycznej II

Tak b

ę

dzie wygl

ą

da

ć

gotowy podprogram:

Przykład 2.

Napisa

ć

podprogram w j

ę

zyku IL realizuj

ą

cy funkcj

ę

XOR (eXclusive-OR)

WEJ2

WEJ1

WYJ2

¨’

=

Rozwi

ą

zanie I

Rozwi

ą

zanie II

Przykład 3.

Napisz program w j

ę

zyku IL dla trzech wej

ść

dwustanowych WEJ1, WEJ2 i WEJ3 realizuj

ą

cy nast

ę

puj

ą

c

ą

funkcj

ę

logiczn

ą

:

WEJ3)

(WEJ2

WEJ1

+

Wynik operacji ma sterowa

ć

wyj

ś

ciem WYJ1.

Rozwi

ą

zanie I


Rozwi

ą

zanie II (korzystaj

ą

c z prawa de Morgana)

background image

Programowanie w j

ę

zyku Instruction List

Laboratorium Podstaw Automatyki i Regulacji Automatycznej

5

Przykład 4.

Napisz program do przeł

ą

czania kierunku wirowania osi silnika. Przyciski niestabilne P_PRAWO i P_LEWO

słu

żą

do wyboru kierunku wirowania osi silnika, czyli wł

ą

czania wyj

ść

S_PRAWO i S_LEWO. Przycisk

rozwierny STOP zatrzymuje ruch silnika.

P_PRAWO

P_LEWO

STOP

S_PRAWO

S_LEWO

Rozwi

ą

zanie

Przykład 5.

Napisz program steruj

ą

cy dla PLC, który b

ę

dzie powodował mruganie lampki podł

ą

czonej do wyj

ś

cia

dwustanowego o nazwie LAMPKA z cz

ę

stotliwo

ś

ci

ą

1 Hz. Lampka ma mruga

ć

od momentu naci

ś

ni

ę

cia przez

operatora przycisku niestabilnego START do momentu naci

ś

ni

ę

cia przycisku rozwiernego STOP.

START

STOP

LAMPKA

Rozwi

ą

zanie

Przykład 6.

Napisz program sterowania wyj

ś

ciem WYJ1 zgodnie z poni

ż

szym przebiegiem czasowym:

WEJ1

WEJ2

WYJ1

background image

Programowanie w j

ę

zyku Instruction List

6

Laboratorium Podstaw Automatyki i Regulacji Automatycznej II

Rozwi

ą

zanie

Funkcje matematyczne

W programowaniu sterowników PLC za pomoc

ą

j

ę

zyka listy instrukcji wykorzystuje si

ę

funkcje podobne do

asemblerowych, które korzystaj

ą

z akumulatora oraz modyfikuj

ą

jego zawarto

ść

, a tak

ż

e instrukcje b

ę

d

ą

ce

wywołaniem bloków funkcyjnych.

Operator

Argument

Opis

LD_INT

zmienna lub stała

akumulator := argument

LD_ENO

brak

akumulator := Enable Output

ST_INT

zmienna

argument := akumulator

ST_DINT

zmienna

argument := akumulator

ST_REAL

zmienna

argument := akumulator

ADD

zmienna lub stała

akumulator := akumulator + argument

akumulator typu INT

SUB

zmienna lub stała

akumulator := akumulatorargument

akumulator typu INT

MUL

zmienna lub stała

akumulator := akumulator * argument

akumulator typu INT

DIV

zmienna lub stała

akumulator := akumulator / argument

akumulator typu INT

MOD

zmienna lub stała

akumulator := akumulator modulo argument (funkcja modulo czyli
reszta z dzielenia całkowitoliczbowego)

akumulator typu INT

Bloki funkcyjne z grupy Math

Blok funkcyjny

Typ argumentów

ENO

Opis

ADD_INT(

in1, in2)

ADD_DINT(

in1, in2)

ADD_REAL(

in1, in2)

in1: INT, DINT lub REAL
in2: INT, DINT lub REAL
akumulator: INT, DINT lub REAL

tak

akumulator:= in1 + in2

SUB_INT(

in1, in2)

SUB_DINT(

in1, in2)

SUB_REAL(

in1, in2)

in1: INT, DINT lub REAL
in2: INT, DINT lub REAL
akumulator: INT, DINT lub REAL

tak

akumulator:= in1 - in2

MUL_INT(

in1, in2)

MUL_DINT(

in1, in2)

MUL_REAL(

in1, in2)

in1: INT, DINT lub REAL
in2: INT, DINT lub REAL
akumulator: INT, DINT lub REAL

tak

akumulator:= in1 * in2

DIV_INT(

in1, in2)

DIV_DINT(

in1, in2)

DIV_REAL(

in1, in2)

in1: INT, DINT lub REAL
in2: INT, DINT lub REAL
akumulator: INT, DINT lub REAL

tak

akumulator:= in1 / in2

MOD_INT(

in1, in2)

MOD_DINT(

in1, in2)

in1: INT lub DINT
in2: INT lub DINT
akumulator: INT lub DINT

tak

akumulator:= in1 modulo in2

(funkcja modulo czyli reszta
z dzielenia
całkowitoliczbowego)

background image

Programowanie w j

ę

zyku Instruction List

Laboratorium Podstaw Automatyki i Regulacji Automatycznej

7

SCALE_INT(

ihi, ilo, ohi, olo, in)

SCALE_WORD(

ihi, ilo, ohi, olo, in)

ihi: INT lub WORD
ilo: INT lub WORD
ohi: INT lub WORD
olo: INT lub WORD
in: INT lub WORD

akumulator: INT lub WORD

tak

akumulator:= warto

ść

po

przeskalowaniu

Przykład 7.

Zakładamy,

ż

e do 4 rejestrów o nazwach POMIAR1, POMIAR2, POMIAR3 i POMIAR4 s

ą

przekazywane

odczyty czterech temperatur mierzonych w zakresie 0-1000

°

C. Napisa

ć

program obliczaj

ą

cy

ś

redni

ą

arytmetyczn

ą

z czterech temperatur z dokładno

ś

ci

ą

do 1°C. Obliczona

ś

rednia ma by

ć

przechowywana w

rejestrze o nazwie SREDNIA. Zmiana któregokolwiek pomiaru ma powodowa

ć

od razu uaktualnienie

obliczanej

ś

redniej.

Rozwi

ą

zanie I

Rozwi

ą

zanie II

Funkcje steruj

ą

ce

Operator

Argument

Opis

JMP

etykieta

bezwarunkowy skok do etykiety

JMPC

etykieta

skok do etykiety, je

ż

eli akumulator=1

JMPCN

etykieta

skok do etykiety, je

ż

eli akumulator=0

CAL

nazwa podprogramu

bezwarunkowe wywołanie podprogramu

CALC

nazwa podprogramu

wywołanie podprogramu, je

ż

eli akumulator=1

CALCN

nazwa podprogramu

wywołanie podprogramu, je

ż

eli akumulator=0

RET

brak

bezwarunkowy powrót z podprogramu

RETC

brak

powrót z podprogramu, je

ż

eli akumulator=1

RETCN

brak

powrót z podprogramu, je

ż

eli akumulator=0

background image

Programowanie w j

ę

zyku Instruction List

8

Laboratorium Podstaw Automatyki i Regulacji Automatycznej II

W j

ę

zyku

Instruction List mo

ż

na pisa

ć

nie tylko podprogramy

, ale równie

ż

blok _MAIN. W tym celu nale

ż

y

usun

ąć

blok _MAIN, a nast

ę

pnie zało

ż

y

ć

blok typu IL nadaj

ą

c mu nazw

ę

_MAIN. Je

ż

eli w bloku _MAIN

u

ż

ywamy funkcji powrotu z podprogramu RET, RETC, RETCN, to spowoduje ona powrót do pocz

ą

tku bloku

_MAIN.

Przykład 8.

Napisa

ć

program w j

ę

zyki IL b

ę

d

ą

cy odpowiednikiem nast

ę

puj

ą

cego programu w j

ę

zyku LD:

Rozwi

ą

zanie z wykorzystaniem bloków funkcyjnych:

Rozwi

ą

zanie oparte na funkcjach asemblerowych

Bloki czasowe

Blok funkcyjny

Typ argumentów

ENO

Opis

TMR_TENTHS(

address, PV)

TMR_HUNDS(

address, PV)

TMR_THOUS(

address, PV)

address: array 3 WORD
PV: INT
akumulator: BOOL

tak

akumulator = true, to zwi

ę

ksza

CV

akumulator = false, to zeruje CV

ustawia

akumulator:= true, gdy

CV

PV

ONDTR_TENTHS(

address, R, PV)

ONDTR_HUNDS(

address, R, PV)

ONDTR_THOUS(

address, R, PV)

address: array 3 WORD
R: BOOL
PV: INT
akumulator: BOOL

tak

akumulator = true, to zwi

ę

ksza

CV

akumulator = false, to pami

ę

ta

ostatnie

CV

ustawia

akumulator:= true, gdy

CV

PV

OFDT_TENTHS(

address, PV)

OFDT_HUNDS(

address, PV)

OFDT_THOUS(

address, PV)

address: array 3 WORD
PV: INT
akumulator: BOOL

tak

akumulator = true, to zeruje CV

akumulator = false, to zwi

ę

ksza

CV,

a

ż

CV=PV

ustawia

akumulator:= true, gdy

CV<PV

background image

Programowanie w j

ę

zyku Instruction List

Laboratorium Podstaw Automatyki i Regulacji Automatycznej

9

Przykład 9.

Po naci

ś

ni

ę

ciu niestabilnego przycisku PLUCZ, uruchamiana jest pompa powoduj

ą

ca przepłukanie instalacji.

Prac

ą

pompy steruje wyj

ś

cie dwustanowe o nazwie POMPA. Płukanie powinno trwa

ć

10 s, po czym pompa

powinna samoczynnie si

ę

wył

ą

czy

ć

.

PLUCZ

POMPA

10 s

Rozwi

ą

zanie I

Rozwi

ą

zanie II

Bloki liczników

Blok funkcyjny

Typ argumentów ENO

Opis

UPCTR(

address, r, PV)

address: WORD
r: BOOL
PV: INT
akumulator: BOOL

tak

Enable 0

1, to zwi

ę

ksza

CV

r=1, to zeruje CV
ustawia

akumulator:= true, gdy CV

PV

DNCTR(

address, r, PV)

address: WORD
r: BOOL
PV: INT
akumulator: BOOL

tak

Enable 0

1, to zmniejsza

CV

r=1, to ustawia CV:=PV
ustawia

akumulator:= true, gdy CV

0

Funkcje relacji

Operator

Argument

Opis

EQ

zmienna lub stała

akumulator := (akumulator = argument)
akumulator
typu BOOL

NE

zmienna lub stała

akumulator := (akumulator

argument)

akumulator typu BOOL

GT

zmienna lub stała

akumulator := (akumulator > argument)
akumulator typu
BOOL

background image

Programowanie w j

ę

zyku Instruction List

10

Laboratorium Podstaw Automatyki i Regulacji Automatycznej II

GE

zmienna lub stała

akumulator := (akumulator

argument)

akumulator typu BOOL

LT

zmienna lub stała

akumulator := (akumulator < argument)
akumulator typu BOOL

LE

zmienna lub stała

akumulator := (akumulator

argument)

akumulator typu BOOL

Bloki funkcyjne z grupy Relational

Przykład 10.

Napisa

ć

program w j

ę

zyku IL sygnalizuj

ą

cy na wyj

ś

ciu BUCZEK przekroczenie górne i dolne sygnału

na wej

ś

ciu analogowym o nazwie TEMPERATURA. Próg górny wynosi 10000, a dolny 2000. Program ma

wykorzystywa

ć

funkcje asemblerowe, a nie bloki funkcyjne.

Rozwi

ą

zanie

Blok funkcyjny

Typ argumentów

ENO

Opis

EQ_INT(

in1, in2)

EQ_DINT(

in1, in2)

EQ_REAL(

in1, in2)

in1: INT, DINT lub REAL
in2: INT, DINT lub REAL
akumulator: BOOL

nie

akumulator:= (in1 = in2)

NE_INT(

in1, in2)

NE_DINT(

in1, in2)

NE_REAL(

in1, in2)

in1: INT, DINT lub REAL
in2: INT, DINT lub REAL
akumulator: BOOL

nie

akumulator:= (in1

in2)

GT_INT(

in1, in2)

GT_DINT(

in1, in2)

GT_REAL(

in1, in2)

in1: INT, DINT lub REAL
in2: INT, DINT lub REAL
akumulator: BOOL

nie

akumulator:= (in1 > in2)

GE_INT(

in1, in2)

GE_DINT(

in1, in2)

GE_REAL(

in1, in2)

in1: INT, DINT lub REAL
in2: INT, DINT lub REAL
akumulator: BOOL

nie

akumulator:= (in1

in2)

LT_INT(

in1, in2)

LT_DINT(

in1, in2)

LT_REAL(

in1, in2)

in1: INT, DINT lub REAL
in2: INT, DINT lub REAL
akumulator: BOOL

nie

akumulator:= (in1 < in2)

LE_INT(

in1, in2)

LE_DINT(

in1, in2)

LE_REAL(

in1, in2)

in1: INT, DINT lub REAL
in2: INT, DINT lub REAL
akumulator: BOOL

nie

akumulator:= (in1

in2)

RANGE_INT(

i1, i2, in)

RANGE_DINT(

i1, i2, in)

RANGE_WORD(

i1, i2, in)

i1: INT, DINT lub WORD
i2: INT, DINT lub WORD
in: INT, DINT lub WORD
akumulator: BOOL

nie

akumulator:= (i1

in

i2)

lub

akumulator:= (i2

in

i1)

background image

Programowanie w j

ę

zyku Instruction List

Laboratorium Podstaw Automatyki i Regulacji Automatycznej

11

Bloki przesyłania danych

Blok funkcyjny

Typ argumentów

ENO

Opis

BLK_CLR_WORD(

in, length)

in: WORD
length: 0-256

tak

zerowanie bloku referencji
zaczynaj

ą

cego si

ę

od parametru

in i składaj

ą

cego si

ę

z tylu

WORD, ile wynosi

length

MOVE_INT(

in, length, q)

MOVE_WORD(

in, length, q)

MOVE_BOOL(in,

length, q)

MOVE_REAL(

in, length, q)

in: INT, WORD, BOOL lub REAL
length: 0-256
q: INT, WORD, BOOL lub REAL

tak

kopiowanie bloku referencji
zaczynaj

ą

cego si

ę

od

in

i składaj

ą

cego si

ę

z tylu INT,

WORD, BOOL lub REAL ile
wynosi

length, do obszaru

referencji zaczynaj

ą

cego si

ę

od

q

BLKMOV_INT(

in1, in2, in3, in4,

in5, in6, in7,q)
BLKMOV_WORD(

in1, in2, in3,

in4, in5, in6, in7,q)
BLKMOV_REAL(

in1, in2, in3,

in4, in5, in6, in7,q)

in1: INT, WORD lub REAL
in2: INT, WORD lub REAL
in3: INT, WORD lub REAL
in4: INT, WORD lub REAL
in5: INT, WORD lub REAL
in6: INT, WORD lub REAL
in7: INT, WORD lub REAL
q: INT, WORD lub REAL

tak

wpis 7 stałych

in1-in7 do bloku

referencji zaczynaj

ą

cego si

ę

od

q

SHFR_WORD(

r, in, st, length, q)

SHFR_BIT(

r, in, st, length, q)

r: BOOL
in: WORD lub BOOL
st: WORD lub BOOL
length: 0-256
q: WORD lub BOOL

tak

wstawia

in do obszaru referencji

zaczynaj

ą

cego si

ę

od

st

i składaj

ą

cego si

ę

z tylu WORD

lub BOOL, ile wynosi

length;

przesuwa dane w bloku
referencji oraz wysuwa ostatni

ą

dan

ą

do

q; r=1 - zeruje blok

referencji zdefiniowany przez

st

i

length

Bloki działa

ń

binarnych

Blok funkcyjny

Typ argumentów

ENO

Opis

AND_WORD(

in1, in2)

in1: WORD
in2: WORD
akumulator: INT

tak

akumulator:= in1 AND in2

OR_WORD(

in1, in2)

in1: WORD
in2: WORD
akumulator: INT

tak

akumulator:= in1 OR in2

XOR_WORD(

in1, in2)

in1: WORD
in2: WORD
akumulator: INT

tak

akumulator:= in1 XOR in2

NOT_WORD(

in)

in: WORD
akumulator: INT

tak

akumulator:= NOT in

ROL_WORD(

in, n, length, q)

in: WORD
n: INT
length: 1-256
q: WORD

tak

Powoduje rotacj

ę

o

n bitów w lewo

ci

ą

gu bitów, którego pocz

ą

tek okre

ś

la

in i składa si

ę

z tylu WORD, ile wynosi

length. Wynik po rotacji
przechowywany jest w obszarze,
którego pocz

ą

tek okre

ś

la

q.

ROR_WORD(

in, n, length, q)

in: WORD
n: INT
length: 1-256
q: WORD

tak

Powoduje rotacj

ę

o

n bitów w prawo

ci

ą

gu bitów, którego pocz

ą

tek okre

ś

la

in i składa si

ę

z tylu WORD, ile wynosi

length. Wynik po rotacji
przechowywany jest w obszarze,
którego pocz

ą

tek okre

ś

la

q.

background image

Programowanie w j

ę

zyku Instruction List

12

Laboratorium Podstaw Automatyki i Regulacji Automatycznej II

SHIFTL_WORD(

in, n, length, b1 q)

in: WORD
n: INT
length: 1-256
b1: BOOL
q: WORD

tak

Powoduje przesuni

ę

cie o

n bitów

w lewo ci

ą

gu bitów, którego pocz

ą

tek

okre

ś

la

in i składa si

ę

z tylu WORD, ile

wynosi

length. Wynik po przesuni

ę

ciu

przechowywany jest w obszarze,
którego pocz

ą

tek okre

ś

la

q. b1 – bit

wsuwany..

SHIFTR_WORD(

in, n, length, b1 q)

in: WORD
n: INT
length: 1-256
b1: BOOL
q: WORD

tak

Powoduje przesuni

ę

cie o

n bitów

w prawo ci

ą

gu bitów, którego pocz

ą

tek

okre

ś

la

in i składa si

ę

z tylu WORD, ile

wynosi

length. Wynik po przesuni

ę

ciu

przechowywany jest w obszarze,
którego pocz

ą

tek okre

ś

la

q. b1 – bit

wsuwany.

BIT_SET_WORD(

in, bit, length)

in: WORD
bit: INT
length: 1-256

tak

Ustawia dokładnie jeden bit o numerze
bit w ci

ą

gu bitów, którego pocz

ą

tek

okre

ś

la

in i składa si

ę

z tylu WORD, ile

wynosi

length (bity s

ą

numerowane od

1).

BIT_CLR_WORD(

in, bit, length)

in: WORD
bit: INT
length: 1-256

tak

Zeruje dokładnie jeden bit o numerze
bit w ci

ą

gu bitów, którego pocz

ą

tek

okre

ś

la

in i składa si

ę

z tylu WORD, ile

wynosi length (bity s

ą

numerowane od

1).

BIT_TEST_WORD(

in, bit, length)

in: WORD
bit: INT
length: 0-256
akumulator: BOOL

tak

Testuje stan bitu o numerze

bit w ci

ą

gu

bitów, którego pocz

ą

tek okre

ś

la

in

i składa si

ę

z tylu WORD, ile wynosi

length.

akumulator:= stan testowanego bitu

BIT_POS_WORD(

in, length)

in: WORD
length: 0-256
akumulator: INT

tak

Przeszukuje ci

ą

g bitów, którego

pocz

ą

tek okre

ś

la

in i składa si

ę

z tylu

WORD, ile wynosi

length, w celu

znalezienia pierwszej jedynki.
akumulator:= nr bitu, gdzie znalazł
pierwsz

ą

jedynk

ę

BIT_SEQ(

address, r, dir, n, st, length)

r: BOOL
dir: BOOL
n: INT
st: BYTE
length: 0-256
address: 3 WORD
akumulator: INT

tak

Zbocze narastaj

ą

ce na wej

ś

ciu

Enable

powoduje przesuni

ę

cie jedynki w ci

ą

gu

bitów, którego pocz

ą

tek okre

ś

la

st i

składa si

ę

z tylu bitów, ile wynosi

length.
dir - kierunek przesuni

ę

cia.

r=1 zeruje obszar okre

ś

lony przez

st i

length oraz ustawia jedynk

ę

na bicie o

numerze okre

ś

lonym przez

n. Dopóki

r=1, Enable nie reaguje na zbocza
narastaj

ą

ce.

akumulator:= warto

ść

ostatniej

sekwencji

MASK_COMP_WORD(

in1, in2, m, bit,

length, q, bn)
MASK_COMP_DWORD(

in1, in2, m,

bit, length, q, bn)

in1: WORD lub
DWORD
in2: WORD lub
DWORD
m: WORD lub
DWORD
bit: INT
length: 1-4096
q: WORD lub
DWORD
bn: INT

tak

Porównuje dwa ci

ą

gi bitów, których

pocz

ą

tki okre

ś

laj

ą

in1 i in2 i które

składaj

ą

si

ę

z tylu WORD lub DWORD,

ile wynosi

length. Porównywanie

odbywa si

ę

z mask

ą

m, tzn. sprawdza

tylko te bity, które maska ma
wyzerowane.
bit– nr bitu, od którego zaczyna
porównywa

ć

(bity s

ą

numerowane od

0).
mc =1 – znalazł ró

ż

nic

ę

.

q – wynik porównania
bn – nr bitu, na którym wyst

ą

piła

ż

nica (bity s

ą

numerowane od 1)

background image

Programowanie w j

ę

zyku Instruction List

Laboratorium Podstaw Automatyki i Regulacji Automatycznej

13

Operacje na tablicach danych

Blok funkcyjny

Typ argumentów

ENO

Opis

ARRAY_MOVE_INT(

sr, snx,

dnx, n, length, ds)

ARRAY_MOVE_DINT(

sr,

snx, dnx, n, length, ds)
ARRAY_MOVE_WORD(

sr,

snx, dnx, n, length, ds)
ARRAY_MOVE_BYTE(

sr,

snx, dnx, n, length, ds)
ARRAY_MOVE_BOOL(

sr,

snx, dnx, n, length, ds)

sr: INT, DINT, WORD, BYTE,
BOOL
snx: UINT
dnx: UINT
n: UINT
ds: INT, DINT, WORD, BYTE
lub BOOL
length: 32767

tak

Kopiuje n elementów z tablicy

ź

ródłowej zdefiniowanej przez sr

i length pocz

ą

wszy od elementu o

numerze snx do tablicy
przeznaczenia zdefiniowanej przez
ds i length pocz

ą

wszy od elementu o

numerze dnx. Elementami tablic s

ą

INT, DINT, WORD, BYTE lub BOOL
liczone od 1.

SEARCH_EQ_INT(

ar, inx, in,

length, onx)
SEARCH_EQ_DINT(

ar, inx,

in, length, onx)
SEARCH_EQ_WORD(

ar,

inx, in, length, onx)
SEARCH_EQ_BYTE(

ar, inx,

in, length, onx)

ar: INT, DINT, WORD, BYTE
inx: UINT
onx: UINT
in: INT, DINT, WORD, BYTE
length: 32767

tak

Przeszukuje tablic

ę

zdefiniowan

ą

przez ar i length pocz

ą

wszy od

elementu inx w celu znalezienia
elementów równych wzorcowi in.
Je

ż

eli wynik przeszukiwania b

ę

dzie

pozytywny, to onx = numer
znalezionego elementu tablicy.
Elementami tablicy s

ą

INT, DINT,

WORD lub BYTE, 0

inx

length-1,

1

onx

length.

SEARCH_NE_INT(

ar, inx, in,

length, onx)
SEARCH_NE_DINT(

ar, inx,

in, length, onx)
SEARCH_NE_WORD(

ar,

inx, in, length, onx)
SEARCH_NE_BYTE(

ar, inx,

in, length, onx)

ar: INT, DINT, WORD, BYTE
inx: UINT
onx: UINT
in: INT, DINT, WORD, BYTE
length: 32767

tak

Przeszukuje tablic

ę

zdefiniowan

ą

przez ar i length pocz

ą

wszy od

elementu inx w celu znalezienia
elementów ró

ż

nych od wzorca in.

Je

ż

eli wynik przeszukiwania b

ę

dzie

pozytywny, to onx = numer
znalezionego elementu tablicy.
Elementami tablicy s

ą

INT, DINT,

WORD lub BYTE, 0

inx

length-1,

1

onx

length.

SEARCH_GT_INT(

ar, inx, in,

length, onx)
SEARCH_GT_DINT(

ar, inx,

in, length, onx)
SEARCH_GT_WORD(

ar,

inx, in, length, onx)
SEARCH_GT_BYTE(

ar, inx,

in, length, onx)

ar: INT, DINT, WORD, BYTE
inx: UINT
onx: UINT
in: INT, DINT, WORD, BYTE
length: 32767

tak

Przeszukuje tablic

ę

zdefiniowan

ą

przez ar i length pocz

ą

wszy od

elementu inx w celu znalezienia
elementów wi

ę

kszych od wzorca in.

Je

ż

eli wynik przeszukiwania b

ę

dzie

pozytywny, to onx = numer
znalezionego elementu tablicy.
Elementami tablicy s

ą

INT, DINT,

WORD lub BYTE, 0

inx

length-1,

1

onx

length.

SEARCH_GE_INT(

ar, inx, in,

length, onx)
SEARCH_GE_DINT(

ar, inx,

in, length, onx)
SEARCH_GE_WORD(

ar,

inx, in, length, onx)
SEARCH_GE_BYTE(

ar, inx,

in, length, onx)

ar: INT, DINT, WORD, BYTE
inx: UINT
onx: UINT
in: INT, DINT, WORD, BYTE
length: 32767

tak

Przeszukuje tablic

ę

zdefiniowan

ą

przez ar i length pocz

ą

wszy od

elementu inx w celu znalezienia
elementów wi

ę

kszych lub równych

wzorcowi in. Je

ż

eli wynik

przeszukiwania b

ę

dzie pozytywny, to

onx = numer znalezionego elementu
tablicy. Elementami tablicy s

ą

INT,

DINT, WORD lub BYTE,
0

inx

length-1, 1

onx

length.

SEARCH_LT_INT(

ar, inx, in,

length, onx)
SEARCH_LT_DINT(

ar, inx,

in, length, onx)
SEARCH_LT_WORD(

ar, inx,

in, length, onx)
SEARCH_LT_BYTE(

ar, inx,

in, length, onx)

ar: INT, DINT, WORD, BYTE
inx: UINT
onx: UINT
in: INT, DINT, WORD, BYTE
length: 32767

tak

Przeszukuje tablic

ę

zdefiniowan

ą

przez ar i length pocz

ą

wszy od

elementu inx w celu znalezienia
elementów mniejszych od wzorca in.
Je

ż

eli wynik przeszukiwania b

ę

dzie

pozytywny, to onx = numer
znalezionego elementu tablicy.
Elementami tablicy s

ą

INT, DINT,

WORD lub BYTE, 0

inx

length-1,

1

onx

length.

background image

Programowanie w j

ę

zyku Instruction List

14

Laboratorium Podstaw Automatyki i Regulacji Automatycznej II

SEARCH_LE_INT(

ar, inx, in,

length, onx)
SEARCH_LE_DINT(

ar, inx,

in, length, onx)
SEARCH_LE_WORD(

ar, inx,

in, length, onx)
SEARCH_LE_BYTE(

ar, inx,

in, length, onx)

ar: INT, DINT, WORD, BYTE
inx: UINT
onx: UINT
in: INT, DINT, WORD, BYTE
length: 32767

Przeszukuje tablic

ę

zdefiniowan

ą

przez ar i length pocz

ą

wszy od

elementu inx w celu znalezienia
elementów mniejszych lub równych
wzorcowi in. Je

ż

eli wynik

przeszukiwania b

ę

dzie pozytywny, to

onx = numer znalezionego elementu
tablicy. Elementami tablicy s

ą

INT,

DINT, WORD lub BYTE,
0

inx

length-1, 1

onx

length.

Program

ć

wiczenia:

Zad. 1.

Napisa

ć

w j

ę

zyku

Instruction List dla PLC podprogram wykonywany bezwarunkowo, równowa

ż

ny poni

ż

szemu

schematowi drabinkowemu. Napisa

ć

tablic

ę

prawdy i sprawdzi

ć

działanie podprogramu wykorzystuj

ą

c tablic

ę

Data Watch.

Zad. 2.

Napisa

ć

w j

ę

zyku

Instruction List dla PLC wykonywany bezwarunkowo podprogram obliczaj

ą

cy nast

ę

puj

ą

c

ą

warto

ść

bezwzgl

ę

dn

ą

:

(REJ1

REJ2) – REJ3

Wynik ma by

ć

przechowywany w rejestrze o nazwie WYNIK. Zakładamy,

ż

e warto

ś

ci w rejestrach s

ą

z przedziału [-100, +100], czyli wystarczy format INT.

Zad. 3.

W zakładzie produkuj

ą

cym wózki akumulatorowe znajduje si

ę

magazyn wyrobów gotowych wyposa

ż

ony

w czujnik wjazdu wózka do magazynu CZ_WE i czujnik wyjazdu wózka z magazynu CZ_WY. Napisz program,
którego zadaniem jest zliczanie liczby wózków w magazynie w rejestrze o nazwie MAGAZYN. Pojemno

ść

magazynu wynosi 20 wózków. Je

ś

li magazyn jest pełny (MAGAZYN=20), to nale

ż

y wł

ą

czy

ć

blokad

ę

wjazdu

wózków do magazynu (wyj

ś

cie ZAPORA=1). Wówczas czujnik wjazdu nie powinien działa

ć

.

Napisa

ć

program

w j

ę

zyku

Instruction List dla PLC.

Zad. 4.

Czujnik z przetwornikiem mierzy temperatur

ę

w zakresie 100-500

°

C i daje sygnał napi

ę

ciowy w zakresie

0-10 V. Napisz program sterowania sygnalizacj

ą

przekroczenia górnego. Je

ś

li temperatura przekroczy 300

°

C,

nale

ż

y wł

ą

czy

ć

sygnalizator LAMPKA mrugaj

ą

cy z cz

ę

stotliwo

ś

ci

ą

1 Hz (alarm

ż

ółty). Wył

ą

czenie

sygnalizatora LAMPKA nast

ą

pi po skasowaniu alarmu przyciskiem niestabilnym KASUJ (o ile temperatura

spadnie poni

ż

ej poziomu alarmu

ż

ółtego). Je

ż

eli temperatura przekroczy 350

°

C, nale

ż

y wł

ą

czy

ć

sygnalizator

d

ź

wi

ę

kowy BUCZEK (alarm czerwony). Wył

ą

czenie sygnalizacji d

ź

wi

ę

kowej nast

ą

pi po obni

ż

eniu temperatury

poni

ż

ej poziomu alarmu czerwonego z histerez

ą

10

°

C. Napisa

ć

w j

ę

zyku

Instruction List program

wykorzystuj

ą

c funkcje asemblerowe (nie bloki funkcyjne). Program nie wymaga wy

ś

wietlania temperatury

po przeskalowaniu.

Zad. dod. 1.

Naci

ś

ni

ę

cie niestabilnego przycisku START powoduje zał

ą

czenie jednego agregatu (wyj

ś

cie o nazwie

AGREGAT1). Ponowne naci

ś

ni

ę

cie tego samego przycisku powoduje zał

ą

czenie drugiego agregatu (wyj

ś

cie

o nazwie AGREGAT2). Dalsze naciskanie przycisku START niczego ju

ż

nie zmienia. Rozwierny niestabilny

przycisk STOP wył

ą

cza pracuj

ą

ce agregaty. Napisa

ć

program w j

ę

zyku

Instruction List dla PLC.

background image

Programowanie w j

ę

zyku Instruction List

Laboratorium Podstaw Automatyki i Regulacji Automatycznej

15

Zad. dod. 2.

Napisa

ć

w j

ę

zyku

Instruction List program archiwizuj

ą

cy produkcj

ę

wody mineralnej. Zakład pracuje na dwie

zmiany. O tym, która zmiana aktualnie pracuje decyduje przeł

ą

cznik ZMIANA. Równolegle pracuj

ą

trzy linie

napojów. O wyprodukowaniu butelki z wod

ą

na linii informuje nas fotokomórka sygnałem impulsowym

(fotokomórki F1, F2, F3). System powinien monitorowa

ć

liczb

ę

wyprodukowanych skrzynek na ka

ż

dej linii

i zapami

ę

tywa

ć

w rejestrach o nazwach LINIA1, LINIA2, LINIA3. Skrzynka zawiera 12 butelek. System

powinien przechowywa

ć

w pami

ę

ci produkcj

ę

dwóch poprzednich zmian (rejestry o nazwach PRODUKCJA1,

PRODUKCJA2) oraz generowa

ć

raport dzienny sumuj

ą

cy produkcj

ę

pierwszej i drugiej zmiany (rejestr

RAPORT).

Zad. dod. 3.

Napisz program w j

ę

zyku

Instruction List dla PLC obliczaj

ą

cy warto

ść

nast

ę

puj

ą

cego wyra

ż

enia:

REJ3

REJ2

-

REJ1

z kontrol

ą

mo

ż

liwo

ś

ci wykonania oblicze

ń

w rejestrze o nazwie STATUS. Wynik oblicze

ń

ma znale

źć

si

ę

w rejestrze o nazwie WYNIK.

Znaczenie bitów w rejestrze STATUS:

Bit 1 = 1 - przekroczenie zakresu,
Bit 2 = 1 - próba dzielenia przez zero,
Bit 3 = 1 - próba obliczania pierwiastka kwadratowego z liczby ujemnej.

Wymagana wiedza:

-

prawa algebry Boole’a,

-

skalowanie sygnałów analogowych, liczniki, działania arytmetyczne, porównania,

-

metody programowania sterowników PLC (norma IEC61131-3) – j

ę

zyk listy instrukcji,

-

podstawy obsługi oprogramowania narz

ę

dziowego Proficy ME Logic Developer PLC,

Warunek zaliczenia:

-

obecno

ść

na zaj

ę

ciach,

-

wykazanie si

ę

wymagan

ą

wiedz

ą

w trakcie

ć

wicze

ń

,

-

wykonanie zada

ń

według instrukcji. Ka

ż

dy program powinien znajdowa

ć

si

ę

w oddzielnym projekcie

o nazwie: T7_X_ZZ (X – nr zadania, ZZ – nr sekcji). Wszystkie projekty powinny zawiera

ć

konfiguracj

ę

zgodn

ą

ze sprz

ę

tem znajduj

ą

cym si

ę

na stanowisku, nazwy zmiennych zgodne z tre

ś

ci

ą

zadania

i komentarze. Do projektu dla zad. 1 nale

ż

y doł

ą

czy

ć

tablic

ę

prawdy. Konfiguracja sterownika powinna

posiada

ć

adresy referencji dwustanowych zaczynaj

ą

ce si

ę

od numeru referencji wyliczanego ze wzoru:

nr sekcji * 8 – 7

oraz adresy referencji analogowych zaczynaj

ą

ce si

ę

od numeru sekcji. W komentarzu powinny znale

źć

si

ę

nazwiska członków sekcji oraz opis programu.

-

przesłanie backup’ow projektów w terminie podanym w systemie e-learning’u,

-

pozytywne zaliczenie projektów,

-

uzyskanie pozytywnej oceny z ustnej lub pisemnej odpowiedzi na pytania kontrolne.

-

zadania dodatkowe nale

ż

y przysyła

ć

w systemie e-learning’u w projektach o nazwach T7_X_nazwisko.

Nie s

ą

one wymagane do zaliczenia, natomiast prawidłowo rozwi

ą

zane przez pierwsz

ą

osob

ę

w grupie s

ą

premiowane ocen

ą

bardzo dobr

ą

.

Literatura:

[1] Oprogramowanie Proficy Machine Edition. Logic Developer PLC - pakiet do programowania sterowników

GE Fanuc. Pierwsze kroki. Astor Kraków.

[2] VersaPro. Podr

ę

cznik u

ż

ytkownika. Astor, Kraków 1999.

[3] PN-EN 61131-3: 1998 Sterowniki programowalne. J

ę

zyki programowania.


Wyszukiwarka

Podobne podstrony:
PAiRAII Instr 2008 lab4
PAiRAII Instr 2008 lab4
PAiRAII Instr 2008 lab5 id 3455 Nieznany
PAiRAII Instr 2008 lab3 id 3455 Nieznany
PAiRAII Instr 2008 lab6a
PAiRAII Instr 2007 lab2 id 3455 Nieznany
PAiRAII Instr 2007 lab1
Arch.Mich.Nowe Instr.I, sztuki plastyczne, Archanioł Michał - Nowe Instrukcje. Przekazy 2008.zbiór
Ubytki,niepr,poch poł(16 01 2008)
2008 XIIbid 26568 ppt

więcej podobnych podstron