1.程序家族有哪些成員?
PLC的控制程序一般由主程序、子程序和中斷程序組成。西門子的S7-300/400將子程序分為功能(Function,或稱為函數(shù))和功能塊(Function Block)。
在每一個(gè)掃描循環(huán)周期,CPU都要調(diào)用一次主程序,用戶程序必須有一個(gè)并且只能有一個(gè)主程序。小型控制系統(tǒng)可以只有主程序。
中斷程序用于快速響應(yīng)中斷事件。在中斷事件發(fā)生時(shí),CPU將停止執(zhí)行當(dāng)時(shí)正在處理的程序或任務(wù),去執(zhí)行用戶編寫的中斷程序。執(zhí)行完中斷程序后,繼續(xù)執(zhí)行被暫停執(zhí)行的程序或任務(wù)。
2.哪些情況需要使用子程序?
當(dāng)系統(tǒng)規(guī)模很大、控制要求復(fù)雜時(shí),如果將全部控制任務(wù)放在主程序中,主程序?qū)?huì)非常復(fù)雜,既難以調(diào)試,也難以閱讀。使用子程序可以將程序分成容易管理的小塊,使程序結(jié)構(gòu)簡(jiǎn)單清晰,易于調(diào)試、查錯(cuò)和維護(hù)。
子程序也可以用于需要多次反復(fù)執(zhí)行相同任務(wù)的地方,只需要編寫一次子程序,別的程序在需要的時(shí)候多次調(diào)用它,而無需重寫該程序。
3.怎樣調(diào)用子程序?
主程序可以調(diào)用子程序,子程序也可以嵌套調(diào)用別的子程序。嵌套調(diào)用的層數(shù)是有限制的,例如S7-200的最大嵌套深度為8級(jí)。
執(zhí)行完子程序后,返回調(diào)用它的程序中的調(diào)用指令的下一條指令。
4.每個(gè)掃描周期都會(huì)執(zhí)行子程序嗎?
子程序的調(diào)用可以是有條件的,在被調(diào)用期間,每個(gè)掃描周期都要執(zhí)行一次被調(diào)用的子程序。調(diào)用條件不滿足時(shí)不會(huì)執(zhí)行子程序中的指令,因此使用子程序可以減少掃描循環(huán)時(shí)間。
5.停止調(diào)用子程序后,子程序中的線圈處于什么狀態(tài)?
停止調(diào)用子程序后,不再執(zhí)行子程序中的指令。子程序中線圈對(duì)應(yīng)的編程元件如果沒有受到別的程序的控制,將保持子程序最后一次執(zhí)行后的狀態(tài)不變。即使控制這些線圈的觸點(diǎn)的狀態(tài)變化,該線圈對(duì)應(yīng)的元件的狀態(tài)也不會(huì)變化,因?yàn)檫@時(shí)根本就沒有執(zhí)行子程序中的指令。
6.怎樣實(shí)現(xiàn)子程序的無條件調(diào)用?
有的PLC的子程序調(diào)用指令不能直接接到左側(cè)的垂直“電源”線上,需要通過觸點(diǎn)電路來控制是否調(diào)用子程序,即子程序的調(diào)用是有條件的??梢杂靡恢睘镺N的特殊位元件(例如S7-200的SM0.0或FX系列的M8000)的常開觸點(diǎn)來實(shí)現(xiàn)子程序的無條件調(diào)用。
不同品牌的PLC的子程序大致可以分為兩種,一種子程序沒有輸入、輸出參數(shù)和局部變量,另一種則有。
1.什么是全局變量和局部變量?
以西門子的S7-200為例,輸入I、輸出Q、變量存儲(chǔ)器V、內(nèi)部存儲(chǔ)器位M、定時(shí)器T、計(jì)數(shù)器C等屬于全局變量,可以在符號(hào)表中為全局變量定義符號(hào)名。
程序組織單元(Program Organizational Unit)簡(jiǎn)稱為POU,包括主程序、子程序和中斷程序。每個(gè)POU均有自己的64字節(jié)局部變量,局部變量用L(Local)來表示,局部變量只能在它所在的POU中使用。與此相反,全局變量可以在各POU中使用。
2.局部變量有哪些類型?
子程序可以使用下列局部變量:
1) TEMP (臨時(shí)變量)是暫時(shí)保存在局部數(shù)據(jù)區(qū)中的變量。只有在執(zhí)行該P(yáng)OU時(shí),定義的臨時(shí)變量才被使用,POU執(zhí)行完后,不再保存臨時(shí)變量的數(shù)值。主程序和中斷程序的局部變量表中只有TEMP變量。
2) IN(輸入?yún)?shù))由調(diào)用它的POU提供的傳入子程序的輸入?yún)?shù)。
3) OUT(輸出參數(shù))是子程序的執(zhí)行結(jié)果,它被返回給調(diào)用它的POU。
4) IN_OUT(輸入_輸出參數(shù))的初始值由調(diào)用它的POU傳送給子程序,并用同一變量將子程序的執(zhí)行結(jié)果返回給調(diào)用它的POU。
主程序和中斷程序的局部變量表中只有臨時(shí)變量TEMP。
3.子程序的輸入、輸出參數(shù)有什么作用?
具有輸入、輸出參數(shù)和局部變量的子程序易于實(shí)現(xiàn)結(jié)構(gòu)化編程,對(duì)于長(zhǎng)期生產(chǎn)同類設(shè)備或生產(chǎn)線的廠家尤為有用。編程人員為設(shè)備的各部件或工藝功能編寫了大量的通用的子程序。即使不知道子程序的內(nèi)部代碼,只要知道子程序的功能和輸入、輸出參數(shù)的意義,就可以用它們快速“組裝”出滿足不同的用戶要求的控制程序。就好像可以用數(shù)字集成電路芯片組成復(fù)雜的數(shù)字電路一樣。
如果子程序沒有輸入、輸出參數(shù),這種子程序沒有明確的軟件接口,使用起來很不方便。
4.局部變量有什么優(yōu)點(diǎn)?
1) 子程序如果沒有局部變量,它和調(diào)用它的程序之間只能通過全局變量來交換數(shù)據(jù),子程序內(nèi)部也只能使用全局變量。將它移植到別的項(xiàng)目時(shí),需要對(duì)各POU使用的全局變量作統(tǒng)一安排,以保證不會(huì)出現(xiàn)地址沖突。當(dāng)程序很復(fù)雜,子程序很多時(shí),這種地址分配是很花時(shí)間的。
如果子程序有局部變量,并且在子程序中只使用局部變量,不使用全局變量,因?yàn)榕c其他POU沒有地址沖突,不作任何改動(dòng),就可以將子程序移植到別的項(xiàng)目中去。
為了減少移植子程序的工作量,在子程序中應(yīng)盡量避免使用全局變量和全局符號(hào)。
2) 如果使用局部變量表中的臨時(shí)變量(TEMP),同一片物理存儲(chǔ)器可以在不同的程序中重復(fù)使用。
下面以S7-200為例,介紹子程序的編程和調(diào)用的過程。
1.創(chuàng)建子程序
生成項(xiàng)目時(shí),自動(dòng)生成一個(gè)子程序。打開程序編輯器,執(zhí)行“編輯”菜單中的命令“插入”→“子程序”,將自動(dòng)生成和打開新的子程序。
2.生成局部變量
名為“模擬量計(jì)算”的子程序如下圖所示,在該子程序的局部變量表中,定義了3個(gè)輸入(IN)參數(shù),一個(gè)輸出(OUT)參數(shù),和名為“暫存1”的臨時(shí)(TEMP)變量。局部變量表最左邊的一列是自動(dòng)分配的每個(gè)變量在局部存儲(chǔ)器(L)中的地址。
3.編寫子程序的梯形圖
局部變量表的下面是程序區(qū)(見上圖),輸入?yún)?shù)“轉(zhuǎn)換值”是來自模擬量輸入模塊的與模擬量成正比的轉(zhuǎn)換值,輸出參數(shù)“模擬值”是計(jì)算出的對(duì)應(yīng)的模擬量(例如壓力、溫度等)的工程值。子程序中變量名稱前的“#”表示該變量是局部變量,它是編程軟件自動(dòng)添加的,輸入局部變量時(shí)不用輸入“#”號(hào)。特殊存儲(chǔ)器位SM0.0的常開觸點(diǎn)總是閉合。
4.子程序的調(diào)用
可以在主程序、其他子程序或中斷程序中調(diào)用子程序,調(diào)用子程序時(shí)將執(zhí)行子程序中的指令,直至子程序結(jié)束,然后返回調(diào)用它的程序中該子程序調(diào)用指令的下一條指令之處。
創(chuàng)建子程序后,在上圖左邊指令樹最下面的“調(diào)用子程序”文件夾中自動(dòng)生成剛創(chuàng)建的子程序“模擬量計(jì)算”對(duì)應(yīng)的圖標(biāo)。
在梯形圖程序中插入子程序調(diào)用指令時(shí),首先打開主程序,顯示出需要調(diào)用子程序的網(wǎng)絡(luò)。打開指令樹最下面的“調(diào)用子程序”文件夾,用鼠標(biāo)左鍵按住需要調(diào)用的子程序圖標(biāo),將它“拖”到程序編輯器中需要的位置。放開左鍵,子程序塊便被放置在該位置。
子程序方框中左邊的“轉(zhuǎn)換值”等是在子程序“模擬量計(jì)算”的變量聲明表中定義的輸入?yún)?shù),右邊的“模擬值”是輸出參數(shù)。它們被稱為子程序的形式參數(shù),簡(jiǎn)稱為形參,形參在子程序內(nèi)部的程序中使用。調(diào)用子程序時(shí),需要為每個(gè)形參指定實(shí)際的參數(shù)(簡(jiǎn)稱為實(shí)參),例如為形參“轉(zhuǎn)換值”指定的實(shí)參為模擬量輸入字AIW2(見上圖)。
子程序調(diào)用指令中的實(shí)參的有效操作數(shù)為存儲(chǔ)器地址、常量、全局符號(hào)和調(diào)用指令所在的POU中的局部變量,不能指定被調(diào)用子程序中的局部變量。
CPU調(diào)用子程序時(shí),輸入?yún)?shù)被復(fù)制到子程序的局部存儲(chǔ)器,子程序執(zhí)行完后,從局部存儲(chǔ)器復(fù)制輸出參數(shù)到指定的輸出參數(shù)地址。
故障安全 SIMATIC S7-1200 控制器基于 S7-1200 標(biāo)準(zhǔn) CPU 并提供了其它安全相關(guān)功能。
它們可用于符合 IEC 61508 的 SIL 3 以及 ISO 13849-1 的 PL e 的安全任務(wù)。
安全相關(guān)程序是在 TIA 博途中創(chuàng)建的。STEP 7 Safety 組態(tài)工具為用 LAD 和 FBD 語(yǔ)言編寫的安全相關(guān)程序提供了命令、操作和塊。為此,我們提供了一個(gè)經(jīng) TüV 認(rèn)同的預(yù)組態(tài)塊庫(kù)以提供安全功能。
特性 |
CPU 1214 FC |
CPU 1215 FC |
---|---|---|
類型 |
DC/DC/DC、DC/DC/繼電器 |
DC/DC/DC、DC/DC/繼電器 |
主存儲(chǔ)器,集成式 |
125 KB |
150 KB |
裝載存儲(chǔ)器,集成式 |
4 MB |
4 MB |
存儲(chǔ)卡 |
SIMATIC 存儲(chǔ)卡(可選) |
SIMATIC 存儲(chǔ)卡(可選) |
標(biāo)準(zhǔn)數(shù)字量輸入/輸出,集成式 |
14/10 |
14/10 |
標(biāo)準(zhǔn)模擬量輸入,集成式 |
2 |
2 |
標(biāo)準(zhǔn)模擬量輸出,集成式 |
- |
2 |
過程映像 |
1024 字節(jié)用于輸入/1024 字節(jié)用于輸出 |
1024 字節(jié)用于輸入/1024 字節(jié)用于輸出 |
通過信號(hào)板進(jìn)行擴(kuò)展 |
最多 1 個(gè) |
最多 1 個(gè) |
通過信號(hào)模塊進(jìn)行擴(kuò)展 |
最多 8 個(gè) |
最多 8 個(gè) |
通過通信模塊進(jìn)行擴(kuò)展 |
最多 3 個(gè) |
最多 3 個(gè) |
SIMATIC S7-1200 是用于本地和分布式自動(dòng)化解決方案的理想控制器,可滿足中央系統(tǒng)中的安全要求。
通過工程組態(tài),故障安全 SIMATIC S7-1200 可提供預(yù)組裝、經(jīng)過測(cè)試和 TüV 認(rèn)證的塊,可用于實(shí)現(xiàn)所有常見安全功能,如急?;驇Щ虿粠Щユi功能的保護(hù)門監(jiān)控。
機(jī)械特性
S7-200PLC中斷指令介紹
中斷指令有4條,包括開、關(guān)中斷指令,中斷連接、分離指令。指令格式如表1所示。
開中斷(ENI)指令全局性允許所有中斷事件。關(guān)中斷(DISI)指令全局性禁止所有中斷事件,中斷事件的每次出現(xiàn)均被排隊(duì)等候,直至使用全局開中斷指令重新啟用中斷。
PLC轉(zhuǎn)換到RUN(運(yùn)行)模式時(shí),中斷開始時(shí)被禁用,可以通過執(zhí)行開中斷指令,允許所有中斷事件。執(zhí)行關(guān)中斷指令會(huì)禁止處理中斷,但是現(xiàn)用中斷事件將繼續(xù)排隊(duì)等候。
中斷連接指令(ATCH)指令將中斷事件(EVNT)與中斷程序號(hào)碼(INT)相連接,并啟用中斷事件。
分離中斷(DTCH)指令取消某中斷事件(EVNT)與所有中斷程序之間的連接,并禁用該中斷事件。
注意:一個(gè)中斷事件只能連接一個(gè)中斷程序,但多個(gè)中斷事件可以調(diào)用一個(gè)中斷程序。
表1 中斷指令格式
LAD
STL
ENI
DISI
ATCH INT,EVNT
DTCH EVNT
操作數(shù)及數(shù)據(jù)類型
無
無
INT:常量 0-127
EVNT:常量,CPU 224: 0-23; 27-33
INT/EVNT數(shù)據(jù)類型:字節(jié)
EVNT:常量, CPU 224: 0-23; 27-33
數(shù)據(jù)類型:字節(jié)
1. 開、關(guān)中斷指令
2. 中斷連接、分離指令
S7-200 CPU22X 系列PLC I/O 點(diǎn)數(shù)擴(kuò)展和編址
S7-200 CPU22X 系列的每種主機(jī)所提供的本機(jī)I/O點(diǎn)的I/O地址是固定的,進(jìn)行擴(kuò)展時(shí),可以在CPU右邊連接多個(gè)擴(kuò)展模塊。如圖所示,每個(gè)擴(kuò)展模塊的組態(tài)地址編號(hào)取決于各模塊的類型和該模塊在I/O鏈中所處的位置。輸入與輸出模塊的地址不會(huì)沖突,模擬量控制模塊地址也不會(huì)影響數(shù)字量。
編址方法是同樣類型輸入或輸出點(diǎn)的模塊在鏈中按所處的位置而遞增,這種遞增是按字節(jié)進(jìn)行的,如果CPU或模塊在為物理I/0點(diǎn)分配地址時(shí)未用完一個(gè)字節(jié),那些未用的位也不能分配給I/O鏈中的后續(xù)模塊。
例如,某一控制系統(tǒng)選用CPU224,系統(tǒng)所需的輸入/輸出點(diǎn)數(shù)為:數(shù)字量輸入24點(diǎn)、數(shù)字量輸出20點(diǎn)、模擬量輸入6點(diǎn)和模擬量輸出2點(diǎn)。
本系統(tǒng)可有多種不同模塊的選取組合,并且各模塊在I/O鏈中的位置排列方式也可能有多種,圖2所示為其中的一種模塊連接形式。表1所示為其對(duì)應(yīng)的各模塊的編址情況。
圖2 模塊連接形式 |
表1 各模塊的編址
主機(jī) |
模塊 1 |
模塊 2 I/O |
模塊 3 |
模塊 4 |
模塊 5 |
I0.0 Q0.0 |
I2.0
|
Q2.0
|
AIW0 AQW0
|
I3.0 Q3.0
|
AIW8 AQW4
AIW10
|
● 同類型輸入或輸出的模塊按順序進(jìn)行編制。
● 數(shù)字量模塊總是保留以8位(1個(gè)字節(jié))遞增的過程映象寄存器空間。如果模塊沒有給保留字節(jié)中每一位提供相應(yīng)的物理點(diǎn),那些未用位不能分配給I/O鏈中的后續(xù)模塊。對(duì)于輸入模塊,這些保留字節(jié)中未使用的位會(huì)在每個(gè)輸入刷新周期中被清零。
● 模擬量I/O點(diǎn)總是以兩點(diǎn)遞增的方式來分配空間。如果模塊沒有給每個(gè)點(diǎn)分配相應(yīng)的物理點(diǎn),則這些I/O點(diǎn)會(huì)消失并且不能夠分配給I/O鏈中的后續(xù)模塊。
可編程控制器梯形圖設(shè)計(jì)規(guī)則
1.觸點(diǎn)的安排
梯形圖的觸點(diǎn)應(yīng)畫在水平線上,不能畫在垂直分支上。
2.串、并聯(lián)的處理
在有幾個(gè)串聯(lián)回路相并聯(lián)時(shí),應(yīng)將觸點(diǎn)最多的那個(gè)串聯(lián)回路放在梯形圖最上面。在有幾個(gè)并聯(lián)回路相串聯(lián)時(shí),應(yīng)將觸點(diǎn)最多的并聯(lián)回路放在梯形圖的最左面。
3.線圈的安排
不能將觸點(diǎn)畫在線圈右邊,只能在觸點(diǎn)的右邊接線圈。
4.不準(zhǔn)雙線圈輸出
如果在同一程序中同一元件的線圈使用兩次或多次,則稱為雙線圈輸出。這時(shí)前面的輸出無效,只有最后一次才有效,所以不應(yīng)出現(xiàn)雙線圈輸出。
5.重新編排電路
如果電路結(jié)構(gòu)比較復(fù)雜,可重復(fù)使用一些觸點(diǎn)畫出它的等效電路,然后再進(jìn)行編程就比較容易。
6.編程順序
對(duì)復(fù)雜的程序可先將程序分成幾個(gè)簡(jiǎn)單的程序段,每一段從最左邊觸點(diǎn)開始,由上之下向右進(jìn)行編程,再把程序逐段連接起來。