You are on page 1of 23

KYÕ THUAÄT LAÄP TRÌNH

Chöông trình ngöôøi duøng thöôøng ñöôïc chia nhoû thaønh töøng
khoái logic theo kieåu chöông trình caáu truùc, giuùp cho vieäc laäp trình
vaø söõa loãi thuaän tieän. Coù nhieàu loaïi khoái logic:

• Khoái toå chöùc OB (Organization blocks)


• Khoái haøm heä thoáng SFB (System function blocks) vaø haøm heä
thoáng SFC (system functions) tích hôïp trong PLC
• Khoái haøm FB (Function blocks) trong thö vieän hay ngöôøi duøng
töï vieát
• Haøm FC (Functions) trong thö vieän hay ngöôøi duøng töï vieát
• Khoái döõ lieäu Instance (Instance Data Blocks ) lieân keát vôùi
FB/SFB
• Khoái döõ lieäu chia xeû (Shared Data Blocks )
Khoái toå chöùc OB laø giao dieän giöõa chöông trình ngöôøi duøng vaø
heä ñieàu haømh cuûa PLC. OB ñöôïc goïi bôûi heä ñieàu haønh theo chu
kyø hay khi coù ngaét, coù söï coá hay khi khôûi ñoäng PLC. Coù nhieàu
khoái OB vaø coù öu tieân khaùc nhau, khoái OB coù soá öu tieân cao hôn
coù theå ngaét khoái OB soá öu tieân thaáp hôn. Tuyø theo loaïi CPU, soá
löôïng khoái OB söû duïng ñöôïc seõ khaùc nhau, baûng sau lieät keâ caùc
loaïi OB

Loaïi OB YÙ nghóa Öu tieân


OB1 Ñöôïc goïi khi keát thuùc khôûi 1
ñoäng hay keát thuùc OB1, thöïc
hieän theo chu kyø
OB10, OB11, OB12, Ngaét theo thôøi gian trong ngaøy, 2
OB13 thaùng, naêm
OB14, OB15, OB16,
OB17
OB20 Ngaét trì hoaõn 3
OB21 4
OB22 5
OB23 6
OB30 Ngaét chu kyø (maëc ñònh 5s) 7
OB31 Ngaét chu kyø (maëc ñònh 2s) 8
OB32 Ngaét chu kyø (maëc ñònh 1s) 9
OB33 Ngaét chu kyø (maëc ñònh 500ms) 10
OB34 Ngaét chu kyø (maëc ñònh 200ms) 11
OB35 Ngaét chu kyø (maëc ñònh 100ms) 12
OB36 Ngaét chu kyø (maëc ñònh 50ms) 13
OB37 Ngaét chu kyø (maëc ñònh 20ms) 14
OB38 Ngaét chu kyø (maëc ñònh 10ms) 15
OB40 Ngaét cöùng 16
OB41 17
OB42 18
OB43 19
OB44 20
OB45 21
OB46 22
OB47 23

OB60 Goïi bôûi SFC35 "MP_ALM" 25


OB70 Loãi I/O redundancy ( H CPU) 25
OB72 Loãi CPU redundancy (H CPU) 28
OB 73 Loãi Communication redundancy (H 25
CPU)
OB80 Söï coá chu kyø queùt 26, 28
OB81 Loãi nguoàn
OB82 Ngaét chaån ñoaùn
OB83 Ngaét do theâm bôùt module
OB84 Loãi phaàn cöùng CPU
OB85 Loãi chöông trình
OB86 Loãi module môû roäng
OB87 Loãi truyeàn thoâng
OB90 Warm or cold restart or delete a 29, 0
block being
executed in OB90 or load an OB90
on the
CPU or terminate OB90

OB100 Khôûi ñoäng aám 27


OB101 Khôûi ñoäng noùng
OB102 Khôûi ñoäng laïnh

OB121 Sai laäp trình Öu tieân


OB122 Sai I/O cuûa taùc
nhaân gaây
ra söï coá

1/ Khoái OB1
OB1 ñöôïc goïi sau khi keát thuùc quaù trình khôûi ñoäng vaø sau
khi keát thuùc chính noù, moïi OB tröø OB90 coù theå ngaét OB1. Khi OB1
ñaõ ñöôïc thöïc hieän, heä ñieàu haønh gôûi ñi döõ lieäu toaøn cuïc.
Tröôùc khi goïi laïi OB1, heä ñieàu haønh chuyeån boä nhôù ñeäm ra
module xuaát , caäp nhaät boä ñeäm nhaäp vaø nhaän döõ lieäu toaøn
cuïc. Khi thöïc hieän OB1, chöông trình trong khoái ñöôïc thöïc hieän, döõ
lieäu xuaát ra module xuaát ñöôïc caáp taïm trong boä nhôù. Chöông trình
trong OB1 coù theå goïi caùc haøm hay khoái haøm.
Thôøi gian thöïc hieän OB1 goïi laø thôøi gian queùt, heä ñieàu
haønh aán ñònh thôøi gian queùt toái ña (150ms) vaø toái thieåu, coù
theå caøi ñaët baèng Step 7. Neáu chu kyø queùt keùo daøi thì goïi OB80
hay chuyeån sang STOP, neáu chu kyø queùt ngaén quaù thì theâm trì
hoaõn hay goïi OB90.
OB1 goàm phaàn maõ chöông trình, do ngöôøi duøng vieát; baûng
bieán cuïc boä (local block) coøn goïi laø baûng khai baùo bieán (variable
declaration table) goàm 20 byte

Coät thöù nhaát laø ñòa chæ trong vuøng bieán cuïc boä, coät thöù
hai khai baùo loaïi bieán, temp nghóa laø taïm thôøi, giaù trò cuûa bieán
thay ñoåi sau moãi voøng queùt cuûa OB, coät thöù ba laø caùc teân cuûa
döõ lieäu, coù yù nghóa nhö sau (giaûi thích trong coät chuù thích 6):
OB1_EV_CLASS: giaù trò B#16#11 coù nghóa OB1 tích cöïc
OB1_SCAN_1: B#16#01: hoaøn taát warm restart
B#16#02: hoaøn taát hot restart
B#16#03: hoaøn taát chu kyø
B#16#04: hoaøn taát cold restart
OB1_PRIORITY: giaù trò 1
OB1_OB_NUMBR: soá OB laø 1
OB1_RESERVED_1: döï tröõ
OB1_RESERVED_2: döï tröõ
OB1_PREV_CYCLE: thôøi gian voøng queùt tröôùc (ms)
OB1_MIN_CYCLE: thôøi gian voøng queùt ngaén nhaát
OB1_MAX_CYCLE: thôøi gian voøng queùt daøi nhaát
OB1_DATE_TIME: ngaøy giôø OB1 baét ñaàu thöïc hieän (8 byte)
Caùc giaù trò treân ngöôøi duøng khoâng thay ñoåi ñöôïc, ngöôøi
duøng coù theå theâm caùc bieán vaøo töø ñòa chæ 20.0 trôû ñi, caùc
bieán naøy laø bieán taïm, thay ñoåi sau moãi voøng queùt. Caùc bieán
theâm vaøo söû duïng cho vieäc goïi caùc chöông trình con FC, SFC, FB,
SFB.
Chöông trình STEP 7 duøng ñeå laäp trình cho PLC S7-300, S7-400.
Chöông trình naøy coù version 5.0 duøng cho Win 98, Version 5.1 vaø 5.3
duøng cho Win XP. Khi kích chuoät vaøo bieåu töôïng Simatic Manager
seõ xuaát hieän cöûa soå Hình , baám Next ñeå choïn loaïi CPU
Baám tieáp Next ñeå choïn caùc khoái OB, baét buoäc laø OB1, caùc OB
khaùc coù theå theâm vaøo sau.
Choïn caùch laäp trình STL, LAD hay FBD, trong luùc laäp trình coù theå
tuyø yù thay ñoåi. Baám tieáp Next ñaët teân cho Project, sau ñoù baám
Finish, xuaát hieän cöûa soå laäp trình
Nöûa cöûa soå beân traùi saép xeáp daïng thö muïc, kích chuoât
vaøo ñoù ñeå môû ra caùc muïc con. Baám vaøo doøng SIMATIC 300
STATION beân traùi roài baáâm tieáp vaøo Hardware beân phaûi ñeå ñaët
caáu hình phaàn cöùng cuûa PLC (coâng vieäc naøy cuõng coù theå thöïc
hieän sau)
Gæa söû caáu hình ñôn giaûn goàm caùc moduke DI/DO, AI/AO, ta
kích chuoät vaøo doøng SIMATIC 300, SM- 300 , choïn caùc module phuø
hôïp, duøng chuoät keùo vaøo caùc slot cuûa Station töø soá 4 trôû ñi,
(slot 3 duøng cho module IM), sau ñoù vaøo menu Station – Save roài
Close. Ta seõ trôû laïi vaán ñeà caáu hình ôû muïc

Trôû laïi Project, baám vaøo muïc Blocks, ta thaáy xuaát hieän OB1,
baám vaøo OB1 neáu laäp trình tuyeán tính, nghóa laø khoâng duøng caùc
khoái logic FC, FB töï taïo
Baám vaøo menu View, choïn STL, LAD, FBD choïn caùch laäp trình.
Khi laäp trình ta coù theå duøng ñòa chæ tuyeät ñoái ( I0.0, MW2, T5…)
hay ñòa chæ kyù hieäu (Start, Speed, Delay…). Ñòa chæ kyù hieäu giuùp
chöông trình deã hieåu hôn. Coù hai loaïi laø kyù hieäu cuïc boä vaø kyù
hieäu toaøn cuïc (hay chia xeû) , kyù hieäu cuïc boä khai baùo trong
baûng khai baùo bieán cuûa khoái vaø chæ coù yù nghóa trong phaïm vi
khoái ñoù, kyù hieäu toaøn cuïc khai baùo trong baûng kyù hieäu Symbols,
coù yù nghóa trong toaøn boä caùc khoái cuûa project. Vieäc khai baùo
kyù hieäu toaøn cuïc thöïc hieän tröôùc hay sau khi vieát maõ. Khoái logíc
coù theå coù toái ña 999 network, moãi network coù toái ña 2000 haøng ,
moãi haøng goàm nhaõn , leänh, ñòa chæ vaø chuù thích (sau //)
Thuû tuïc laäp kyù hieäu toaøn cuïc nhö sau: baám chuoät vaøo ñoái
töôïng Symbols (Xem hình ).

Caùc bieán kyù hieäu ñöôïc ñöa vaøo töøng doøng moät, daøi toái
ña 24 kyù tuï chöõ soá, kyù töï ñaëc bieät, tröø daáu nhaùy “ , khoâng
phaân bieät chöõ hoa vaø chöõ thöôøng. Baûng kyù hieäu chöùa toái ña
16380 kyù hieäu. Sau khi ñaõ bieân taäp xong, vaøo menu Symbol Table-
Save ñeå löu baûng. Vaøo cöûa soå bieân taäp cuûa khoái choïn View-
Display with - Symbolic Representation ñeå nhìn thaáy ñòa chæ kyù hieäu
trong chöông trình, kyù hieäu tuyeät ñoái ñöôïc ñoùng khung baèng daáu
“, coøn kyù hieäu cuïc boä coù daáu # ñöùng tröôùc.
Ví dụ lập trình cho ñeøn boä haønh, bình thöôøng khi khoâng coù
yeâu caàu qua ñöôøng (I0.0, I0.1), ñeøn xanh xe (Q0.7) vaø ñeøn ñoû boä
haønh (Q0.0) saùng. Khi coù yeâu caàu ñeøn vaøng xe (Q0.6) saùng trong
3s , sau ñoù ñeøn ñoû xe (Q0.5) saùng vaø ñeøn xanh boä haønh (Q0.1)
saùng trong 10s, heát thôøi gian naøy ñeøn ñoû boä haønh vaø ñoû xe
cuøng saùng, sau 6s ñeøn vaøng xe vaø ñoû xe cuøng saùng vaø sau 3 s
ñeøn xanh xe saùng , xoùa yeâu caàu qua ñöôøng

A( A Q 0.5
A( L S5T#10S
O I 0.0 // Coù yeâu caàu qua ñöôøng cuûa SD T 3
khaùch boä haønh A Q 0.5
O I 0.1 AN T 3
) = Q 0.1 //Baät ñeøn xanh boä haønh, thôøi
A T 6 gian 10s
O M 0.0
) A M 0.0
AN T 5 //xoùa yeâu caàu A T 3
= M 0.0 // ghi nhaän yeâu caàu L S5T#6S
SD T 4 //Thôøi gian 6 s ñoû xe vaø ñoû boä
AN M 0.0 // neáu khoâng coù yeâu haønh cuøng saùng
caàu thì A M 0.0
= Q 0.7 // ñeøn xanh xe saùng A(
ON T 2
A M 0.0 O T 3
L S5T#3S )
SD T 2 ON M 0.0
A M 0.0 = Q 0.0 // Baät ñeøn ñoû boä haønh
A(
ON T 2 A M 0.0 //Baät ñeøn ñoû vaø vaøng xe
O T 4 A T 4
) L S5T#3S
= Q 0.6 //Ñeøn vaøng xe 3s SD T 5 //Chuyeån sang xanh xe sau 3s
A M 0.0
A T 2 A Q 0.7
= Q 0.5 //Ñeøn ñoû xe sau 3s L S5T#1S
SD T 6 //Thôøi gian trì hoaõn 1s ñeå nhaän
yeâu caàu khi xanh xe vöøa saùng
Sau ñoù laäp baûng kyù hieäu:

A( A "Pedestrian_light"
A( A "Car_orange_phase"
O "Switch_right" = "Car_red"
O "Switch_left" A "Car_red"
) L S5T#10S
A "Ped_delay_green" SD "Ped_green_phase"
O "Pedestrian_light" A "Car_red"
) AN "Ped_green_phase"
AN "Car_red_orange_phase" = "Ped_green"
= "Pedestrian_light" A "Pedestrian_light"
AN "Pedestrian_light" A "Ped_green_phase"
= "Car_green" L S5T#6S
A "Pedestrian_light" SD "Car_delay_red"
L S5T#3S A "Pedestrian_light"
SD "Car_orange_phase" A(
A "Pedestrian_light" ON "Car_orange_phase"
A( O "Ped_green_phase"
ON "Car_orange_phase" )
O "Car_delay_red" ON "Pedestrian_light"
) = "Ped_red"
= "Car_orange" A "Pedestrian_light"
A "Pedestrian_light" A "Car_delay_red"
A( L S5T#3S
ON "Car_orange_phase" SD "Car_red_orange_phase"
O "Car_delay_red" A "Car_green"
) L S5T#1S
= "Car_orange" SD "Ped_delay_green"

Sau khi bieân soaïn chöông trình ta coù theå chaïy moâ phoûng
khoâng caàn PLC nhôø phaàn meàm S7 PLC Sim theo caùc böôùc sau:
- Vaøo menu Simatic Manager- Options- choïn Simulate Modules.
Cöûa soå sau xuaát hieän

- Vaøo menu PLC- Download ñeå naïp khoái chöông trình xuoáng
PLC moâ phoûng
- Vaøo cöûa soå S7-PLCSIM menu Insert choïn caùc vuøng nhôù
muoán quan saùt
- Vaøo menu PLC- choïn Power On, vaøo menu Execute choïn
Scan Mode – Continuous Scan.
- Choïn RUN hay RUN –P
- Taùc ñoäâng vaøo caùc bit I 0.0, I0.1 ñeå xem hoaït ñoäng cuûa
chöông trình.
- Trôû laïi Simatic Manager, choïn View- Online, môû khoái logic
muoán quan saùt (OB1), baám Debug- Monitor
Trong tröôøng hôïp muoán taäp trung caùc bieán vaøo moät choã
ñeå deã quan saùt, ta duøng baûng khai baùo bieán VAT (Variable Table).
Trong cöûa soå Manager vaøo menu Insert- S7 Block- Variable Table (hay
baám chuoät phaûi – Insert New Object- Variable Table) ta ñöôïc khoái
VAT1, môû khoái naøy ra vaø theâm vaøo caùc ñòa chæ vuøng nhôù
muoán quan saùt.

Tröôøng hôïp coù saün PLC, ñaàu tieân ta phaûi keát noái maùy tính
vôùi PLC thoâng qua caùp noái thích hôïp, vaøo menu PLC- Display
Accessible Nodes, sau ñoù PLC- Operating mode choïn cheá ñoä PLC laø
Stop, PLC- Download naïp chöông trình xuoáng PLC.
2/ Caùc khoái ngaét
Khoái OB1 ñöôïc thöïc hieän theo chu kyø, vaø coù theå bò ngaét
bôûi caùc söï kieän khi ta caøi ñaët theâm caùc khoái OB khaùc vaøo
Project hoaëc khi xaûy ra caùc söï coá. Caùc khoái OB phuø hôïp ñöôïc goïi
ñeå xöû lyù ngaét nhôø caùc chöông trình con ñöôïc caøi ñaët. Khoái OB
öu tieân cao coù theå ngaét khoái coù öu tieân thaáp hôn. Ta coù theå
thay ñoåi öu tieân cuûa OB trong S7-400 vaø S7-300-CPU318. Theâm OB b
aèng caùch baám chuoät phaûi trong cöûa soå Project- Insert New
Object- Organization block, choïn soá OB, sau ñoù môû khoái OB vaø laäp
trình
3 Taïo caùc khoái logic
Caùc chöông trình lôùn thöôøng ñöôïc vieát daïng caáu truùc, goàm
khoái OB1, caùc khoái chöông trình FC, FB, caùc khoái chöông trình heä
thoáng SFC, SFB. Söû duïng laäp trình caáu truùc giuùp chöông trình deã
quaûn lyù vaø söûa loãi, thuaän tieän cho vieäc laäp trình theo nhoùm.
Khoái OB1 vaø caùc khoái FC, FB coù theå goïi FC, FB, SFC, SFB

Laáy ví duï laäp trình cho heä thoáng troän hai chaát loûng A vaø B
(H ), ta chia quaù trình thaønh nhieàu khoái nhoû (H ) : bôm chaát A, bôm
chaát B, boàn troän vaø van xaû. Ta nhaän thaáy hai khoái bôm laäp trình
gioáng nhau, chæ khaùc ôû caùc ngoõ vaøo/ra. Tröôùc khi laäp trình ta
phaûi coù moâ taû kyõ thuaät cho hoaït ñoäng cuûa caùc khoái.
Khoái A/B goàm coù bôm vaø van vaøo, van ra
- Bôm coù coâng suaát 100KW, voøng quay 1200 rpm, löu löôïng
400l/phuùt. Bôm ñöôïc ñieàu khieån bôûi nuùt Start/Stop treân
baûng ñieàu khieån, soá laàn start ñöôïc hieån thò ñeå tieän baûo
trì. Bôm ñöôïc pheùp hoaït ñoäng khi:
o boàn khoâng ñaày,
o van xaû ñoùng,
o nuùt emergency khoâng taùc ñoäng.
Bôm taét khi caûm bieán löu löôïng baùo khoâng coù doøng chaûy
sau 7 s keå töø khi khôûi ñoâng bôm hay khi caûm bieán löu löôïng
baùo ñaõ ngöøng chaûy.
- Van ñöôïc ñieàu khieån bôûi solenoid, môû khi coù ñieän vaøo
van. Van phaûi môû ít nhaát 1s sau khi bôm chaïy.
Khoái boàn troän coù ñoäng cô troän, caùc caûm bieán möùc. coù
coâng suaát 100KW, voøng quay 1200 rpm, löu löôïng 400l/phuùt. Ñoäng
cô ñöôïc ñieàu khieån bôûi nuùt Start/Stop treân baûng ñieàu khieån, soá
laàn start ñöôïc hieån thò ñeå tieän baûo trì. Ñoäng cô ñöôïc pheùp chaïy
khi:
o Möùc chaát loûng treân möùc toái thieåu ,
o Van xaû ñoùng
o Nuùt Emergency khoâng taùc ñoäng
Ñoäng cô ñöôïc taét khi vaän toác khoâng ñaït ñònh möùc sau khi
khôûi ñoäng 10s. Coù ba caûm bieán möùc daïng contact . Caûm bieán
ñaày thöôøng ñoùng, khi boàn ñaày thì hôû ra. Caûm bieán möùc toái
thieåu thöôøng hôû , khi möïc chaát loûng thaáp thì ñoùng laïi. Caûm
bieán caïn, hôû neáu boàn caïn
Van xaû ñöôïc ñieàu khieån töø baûng ñieàu khieån. Van xaû ñöôïc
hoaït ñoäng neáu ñoäng cô troän ngöøng, caûm bieán möùc baùo boàn
chöa caïn, nuùt emergency khoâng taùc ñoäng. Van xaû ñoùng neáu caûm
bieán möùc baùo boàn caïn.
Baûng ñieàu khieån duøng ñeå ñieàu khieån vaø baùo traïng thaùi
caùc ñoäng cô, van xaû, baùo möùc boàn, baùo baûo trì vaø döøng khaån
caáp.
Coù ba ñoäng cô coù theå laäp trình baèng khoái logic chung (Hình)
. Saùu ngoõ vaøo laø hai nuùt nhaán Sart/Stop, nuùt nhaán Reset_Maint
xoùa ñeøn baûo trì, tín hieäu baùo ñoäng cô chaïy, ngöøng (Response)
soá hieäu Timer (Timer No) vaø thôøi gian timer (Response_Time). Boán
ngoõ ra laø baùo loãi (Fault), ñeøn baùo ñoäng cô chaïy, ngöøng
(Start_Dsp, Stop_Dsp), baùo baûo trì (Maint), Tín hieäu vaøo/ra laø ñieàu
khieån Motor. Khoái logic naøy laäp trình döôùi daïng khoái haøm FB vì
caàn löu tröõ giaù trò bieán.
Caùc van cuõng ñöôïc ñieàu khieån baèng khoái logic FC (Hình) .
Hai tín hieäu vaøo laø nuùt nhaán môû /ñoùng van (Open/ Close) Tín hieäu
ra laø ñeøn baùo traïng thaùi van ( Dsp_Open, Dsp_Closed). Tín hieäu
vaøo/ ra ñieàu khieån van (Valve). Khoái naøy khoâng coù löu bieán vaø
thöïc hieän baèng FC.
Caáu truùc chöông trình nhö Hình . Chöông trình chính OB1 goïi
haøm FB1 ñieàu khieån ñoäng cô, coù ba ñoäng cô öùng vôùi ba khoái
döõ lieäu DB1, DB2, DB3. Haøm FC1 ñöôïc OB1 goïi khi ñieàu khieån van.
Caùc khoái FB vaø FC phaûi ñöôïc laäp trình tröôùc khoái OB. Vaøo cöûa
soå Project –Symbols laäp baûng kyù hieäu cho caùc bieán (Baûng )
Symbolic Name Address Data Type Description
Feed_pump_A_start I0.0 BOOL Starts the feed pump for ingredient A
Feed_pump_A_stop I0.1 BOOL Stops the feed pump for ingredient A
Flow_A I0.2 BOOL Ingredient A flowing
Inlet_valve_A Q4.0 BOOL Activates the inlet valve for ingredient A
Feed_valve_A Q4.1 BOOL Activates the feed valve for ingredient A
Feed_pump_A_on Q4.2 BOOL Lamp for ”feed pump ingredient A running"
Feed_pump_A_off Q4.3 BOOL Lamp for ”feed pump ingredient A not running"
Feed_pump_A Q4.4 BOOL Activates the feed pump for ingredient A
Feed_pump_A_fault Q4.5 BOOL Lamp for ”feed pump A fault"
Feed_pump_A_maint Q4.6 BOOL Lamp for ”feed pump A maintenance"
Feed_pump_B_start I0.3 BOOL Starts the feed pump for ingredient B
Feed_pump_B_stop I0.4 BOOL Stops the feed pump for ingredient B
Flow_B I0.5 BOOL Ingredient B flowing
Inlet_valve_B Q5.0 BOOL Activates the inlet valve for ingredient A
Feed_valve_B Q5.1 BOOL Activates the feed valve for ingredient B
Feed_pump_B_on Q5.2 BOOL Lamp for ”feed pump ingredient B running"
Feed_pump_B_off Q5.3 BOOL Lamp for ”feed pump ingredient B not running"
Feed_pump_B Q5.4 BOOL Activates the feed pump for ingredient B
Feed_pump_B_fault Q5.5 BOOL Lamp for ”feed pump B fault"
Feed_pump_B_maint Q5.6 BOOL Lamp for ”feed pump B maintenance"
Agitator_running I1.0 BOOL Response signal of the agitator motor
Agitator_start I1.1 BOOL Agitator start button
Agitator_stop I1.2 BOOL Agitator stop button
Agitator Q8.0 BOOL Activates the agitator
Agitator_on Q8.1 BOOL Lamp for "agitator running"
Agitator_off Q8.2 BOOL Lamp for "agitator not running"
Agitator_fault Q8.3 BOOL Lamp for ”agitator motor fault"
Agitator_maint Q8.4 BOOL Lamp for ”agitator motor maintenance"
Tank_below_max I1.3 BOOL Sensor ”mixing tank not full"
Tank_above_min I1.4 BOOL Sensor ”mixing tank above minimum level"
Tank_not_empty I1.5 BOOL Sensor ”mixing tank not empty"
Tank_max_disp Q9.0 BOOL Lamp for "mixing tank full"
Tank_min_disp Q9.1 BOOL Lamp for "mixing tank below minimum level"
Tank_empty_disp Q9.2 BOOL Lamp for "mixing tank empty"
Drain_open I0.6 BOOL Button for opening the drain valve
Drain_closed I0.7 BOOL Button for closing the drain valve
Drain Q9.5 BOOL Activates the drain valve
Drain_open_disp Q9.6 BOOL Lamp for "drain valve open"
Drain_closed_disp Q9.7 BOOL Lamp for "drain valve closed"
EMER_STOP_off I1.6 BOOL EMERGENCY STOP switch
Reset_maint I1.7 BOOL Reset switch for the maintenance lamps on all
motors
Motor_block FB1 FB1 FB for controlling pumps and motor
Valve_block FC1 FC1 FC for controlling the valves
DB_feed_pump_A DB1 FB1 Instance DB for controlling feed pump A
DB_feed_pump_B DB2 FB1 Instance DB for controlling feed pump B
DB_agitator DB3 FB1 Instance DB for controlling the agitator motor

3.1 Laäp trình khoái FB


FB laø khoái logíc vôùi caùc bieán in, out, in_out, static vaø temp,
ñöôïc taïo ra trong baûng bieán ñòa phöông ñi keøm. Caùc bieán in, out,
in- out laø caùc tham soá hìmh thöùc coù ñòa chæ cuï theå do chöông
trình goïi truyeàn ñeán, bieán static laø bieán trong chöông trình FB ñöôïc
löu laïi khi ra khoûi khoái FB, bieán temp maát giaù trò khi ra khoûi khoái
FB. Keøm vôùi FB laø khoái döõ lieäu data block chöùa caùc bieán in, out,
in- out vaø static. Coù theå coù nhieàu data block cho moät FB khi moät
FB duøng cho caùc nhieäm vuï khaùc nhau, goïi laø instance data block.
Khi chöông trình goïi FB caàn phaûi keøm theo instance data block töông
öùng. Ta vaøo cöûa soå Project baám chuoät phaûi - Insert New Object –
Function block theâm vaøo khoái FB1. Baám chuoät vaøo khoái FB1 ñeå
soaïn chöông trình cho khoái. Ta vaøo baûng khai baùo bieán ñeå khai
baùo caùc bieán hình thöùc cho khoái theo thöù töï in, out, in_out, static
vaø temp. Vôùi ví duï ôû treân, baûng bieán cuûa FB1 “Motor_Block” nhö
sau:
Address Declaration Name Type Initial Value
0.0 IN Start BOOL FALSE
0.1 IN Stop BOOL FALSE
0.2 IN Response BOOL FALSE
0.3 IN Reset_Maint BOOL FALSE
2.0 IN Timer_No TIMER
4.0 IN Response_Time S5TIME S5T#0MS
6.0 OUT Fault BOOL FALSE
6.1 OUT Start_Dsp BOOL FALSE
6.2 OUT Stop_Dsp BOOL FALSE
6.3 OUT Maint BOOL FALSE
8.0 IN_OUT Motor BOOL FALSE
10.0 STAT Time_bin WORD W#16#0
12.0 STAT Time_BCD WORD W#16#0
14.0 STAT Starts INT 0
16.0 STAT Start_Edge BOOL FALSE
Caùc bieán STAT Time_ bin vaø Time_BCD lö u thôøi gian timer,
Starts löu soá laàn khôûi ñoäng motor, Start_ Edge phuïc vuï cho leänh
laáy caïnh leân

Network 1 Start/stop and latching Network 4 Stop lamp


A( AN #Response
O #Start = #Stop_Dsp
O #Motor Network 5 Counting the starts
) A #Motor
AN #Stop FP #Start_Edge
= #Motor JCN lab1
Network 2 Startup monitoring L #Starts
A #Motor +1
L #Response_Time T #Starts
SD #Timer_No lab1: NOP 0
AN #Motor Network 6 Maintenance lamp
R #Timer_No L #Starts
L #Timer_No L 50
T #Timer_bin >=I
LC #Timer_No = #Maint
T #Timer_BCD Network 7 Reset counter for number of starts
A #Timer_No A #Reset_Maint
AN #Response A #Maint
S #Fault JCN END
R #Motor L0
Network 3 Start lamp and fault reset T #Starts
A #Response END: NOP 0
= #Start_Dsp
R #Fault
Theâm khoái DB project vôùi caùc teân DB1, DB2, DB3 loaïi Instance
DB vaø thuoäc FB1

Caùc bieán trong DB1 seõ töï taïo ra theo baûng khai baùo bieán cuûa
khoái FB1, töông töï cho caùc DB2 vaø DB3.

3.2 Laäp trình khoái FC


Khoái FC coù caùc bieán hình thöùc in, out vaø in_ out do chöông
trình goïi cung caáp caùc ñòa chæ cuï theå, ngoaøi ra coøn coù bieán
temp söû duïng noäi boä. Khoái FC khoâng coù boä nhôù neân döõ lieäu
maát ñi khi ra khoûi khoái. Ta theâm vaøo project khoái FC1 vaø khai baùo
caùc bieán trong baûng khai baùo bieán keøm theo. Sau ñoù laäp trình
cho FC1

Address Declaration Name Type Initial Value


0.0 IN Open BOOL FALSE
0.1 IN Close BOOL FALSE
2.0 OUT Dsp_Open BOOL FALSE
2.1 OUT Dsp_Closed BOOL FALSE
4.0 IN_OUT Valve BOOL FALSE

Network 1 Open/close and latching


A(
O #Open
O #Valve
)
AN #Close
= #Valve
Network 2 Display "valve open"
A #Valve
= #Dsp_Open
Network 3 Display "valve closed"
AN#Valve
= #Dsp_Closed

Böôùc tieáp theo laø laäp trình cho OB1, ta khai baùo caùc bieán cho
OB1
Address Declaration Name Type
0.0 TEMP OB1_EV_CLASS BYTE
1.0 TEMP OB1_SCAN1 BYTE
2.0 TEMP OB1_PRIORITY BYTE
3.0 TEMP OB1_OB_NUMBR BYTE
4.0 TEMP OB1_RESERVED_1 BYTE
5.0 TEMP OB1_RESERVED_2 BYTE
6.0 TEMP OB1_PREV_CYCLE INT
8.0 TEMP OB1_MIN_CYCLE INT
10.0 TEMP OB1_MAX_CYCLE INT
12.0 TEMP OB1_DATE_TIME DATE_AND_TIME
20.0 TEMP Enable_motor BOOL
20.1 TEMP Enable_valve BOOL
20.2 TEMP Start_fulfilled BOOL
20.3 TEMP Stop_fulfilled BOOL
20.4 TEMP Inlet_valve_A_open BOOL
20.5 TEMP Inlet_valve_A_closed BOOL
Chöông trình OB1
Network 1 Interlocks for feed pump A Network 8 Delaying the valve enable ingredient B
A "EMER_STOP_off" A "Feed_pump_B"
A "Tank_below_max" L S5T#1S
AN "Drain" SD T 15
= #Enable_Motor AN "Feed_pump_B"
Network 2 Calling FB Motor for ingredient A R T 15
A "Feed_pump_A_start" A T 15
A #Enable_Motor = #Enable_Valve
= #Start_Fulfilled Network 9 Inlet valve control for ingredient B
A( AN "Flow_B"
O "Feed_pump_A_stop" AN "Feed_pump_B"
ON #Enable_Motor = #Close_Valve_Fulfilled
) CALL "Valve_block"
= #Stop_Fulfilled Open :=#Enable_Valve
CALL "Motor_block", "DB_feed_pump_A" Close :=#Close_Valve_Fulfilled
Start :=#Start_Fulfilled Dsp_Open :=#Inlet_Valve_B_Open
Stop :=#Stop_Fullfilled Dsp_Closed:=#Inlet_Valve_B_Closed
Response :="Flow_A" Valve :="Inlet_Valve_B"
Reset_Maint :="Reset_maint"
Timer_No :=T12 Network 10 Feed valve control for ingredient B
Reponse_Time:=S5T#7S AN "Flow_B"
Fault :="Feed_pump_A_fault" AN "Feed_pump_B"
Start_Dsp :="Feed_pump_A_on" = #Close_Valve_Fulfilled
Stop_Dsp :="Feed_pump_A_off" CALL "Valve_block"
Maint :="Feed_pump_A_maint" Open :=#Enable_Valve
Motor :="Feed_pump_A" Close :=#Close_Valve_Fulfilled
Network 3 Delaying the valve enable ingredient A Dsp_Open :=#Feed_Valve_B_Open
A "Feed_pump_A" Dsp_Closed:=#Feed_Valve_B_Closed
L S5T#1S Valve :="Feed_Valve_B"
SD T 13 Network 11 Interlocks for agitator
AN "Feed_pump_A" A "EMER_STOP_off"
R T 13 A "Tank_above_min"
A T 13 AN "Drain"
= #Enable_Valve = #Enable_Motor
Network 4 Inlet valve control for ingredient A Network 12 Calling FB Motor for agitator
AN "Flow_A" A "Agitator_start"
AN "Feed_pump_A" A #Enable_Motor
= #Close_Valve_Fulfilled = #Start_Fulfilled
CALL "Valve_block" A(
Open :=#Enable_Valve O "Agitator_stop"
Close :=#Close_Valve_Fulfilled ON #Enable_Motor
Dsp_Open :=#Inlet_Valve_A_Open )
Dsp_Closed:=#Inlet_Valve_A_Closed = #Stop_Fulfilled
Valve :="Inlet_Valve_A" CALL "Motor_block", "DB_Agitator"
Network 5 Feed valve control for ingredient A Start :=#Start_Fulfilled
AN"Flow_A" Stop :=#Stop_Fullfilled
AN"Feed_pump_A" Response :="Agitator_running"
=#Close_Valve_Fulfilled Reset_Maint :="Reset_maint"
CALL"Valve_block" Timer_No :=T16
Open:=#Enable_Valve Reponse_Time:=S5T#10S
Close:=#Close_Valve_Fulfilled Fault :="Agitator_fault"
Dsp_Open:=#Feed_Valve_A_Open Start_Dsp :="Agitator_on"
Dsp_Closed:=#Feed_Valve_A_Closed Stop_Dsp :="Agitator_off"
Valve :="Feed_Valve_A" Maint :="Agitator_maint"
Network 6 Interlocks for feed pump B Motor :="Agitator"
A "EMER_STOP_off" Network 13 Interlocks for drain valve
A "Tank_below_max" A"EMER_STOP_off"
AN "Drain" A"Tank_not_empty"
= "Enable_Motor AN"Agitator"
Network 7 Calling FB Motor for ingredient B = "Enable_Valve
A "Feed_pump_B_start" Network 14 Drain valve control
A #Enable_Motor A "Drain_open"
= #Start_Fulfilled A #Enable_Valve
A( = #Open_Drain
O "Feed_pump_B_stop" A(
ON #Enable_Motor O "Drain_closed"
) ON #Enable_Valve
= #Stop_Fulfilled )
CALL "Motor_block", "DB_feed_pump_B" = #Close_Drain
Start :=#Start_Fulfilled CALL "Valve_block"
Stop :=#Stop_Fullfilled Open :=#Open_Drain
Response :="Flow_B" Close :=#Close_Drain
Reset_Maint :="Reset_maint" Dsp_Open :="Drain_open_disp"
Timer_No :=T14 Dsp_Closed :="Drain_closed_disp"
Reponse_Time:=S5T#7S Valve :="Drain"
Fault :="Feed_pump_B_fault" Network 15 Tank level display
Start_Dsp :="Feed_pump_B_on" AN"Tank_below_max"
Stop_Dsp :="Feed_pump_B_off" ="Tank_max_disp"
Maint :="Feed_pump_B_maint" AN"Tank_above_min"
Motor :="Feed_pump_B" ="Tank_min_disp"
AN"Tank_not_empty"
= "Tank_empty_disp"

4. Sử dụng hàm thư viện


Caùc haøm thö vieän do Siemens vieát saün thuoäc caùc loaïi FC,
FB, SFC,SFB giuùp ngöôøi duøng thuaän tieän trong laäp trình. Muoán
duøng caùc haøm thö vieän trong khoái logic naøo thì ta môû khoái logic
ñoù ra, kích chuoät vaøo choã leänh CALL goïi haøm thö vieän, vaøo menu
Insert- Program Elements- Libraries choïn caùc haøm thö vieän phuø hôïp
roài baám chuoät keùp vaøo ñoù, hoaëc goõ CALL teân haøm thö vieän.
Caùc haøm thö vieän caàn chuyeån giaù trò cho caùc bieán hình thöùc
vaø ta phaûi cung caáp cho haøm goïi theo qui ñònh cuûa haøm thö vieän.

You might also like