- PLC編程入門及工程實(shí)例
- 張應(yīng)龍
- 15389字
- 2019-01-03 00:13:18
第2章 PLC的指令系統(tǒng)
2.1 西門子的指令系統(tǒng)
2.1.1 數(shù)據(jù)類型及尋址方式
(1)數(shù)據(jù)類型
在PLC程序中,為了進(jìn)行數(shù)學(xué)運(yùn)算、設(shè)定定時器時間、設(shè)定計(jì)數(shù)器計(jì)數(shù)值等,需要使用各種數(shù)據(jù)。
程序中的各種數(shù)據(jù)(如常數(shù)、十六進(jìn)制數(shù)、浮點(diǎn)數(shù)、時間、數(shù)組等)都必須是PLC所允許的類型與可識別的格式,即:PLC對數(shù)據(jù)有“類型”與“格式”兩方面的要求。
西門子S7系列PLC根據(jù)數(shù)據(jù)的字長,允許使用的類型有基本數(shù)據(jù)、復(fù)合數(shù)據(jù)、參數(shù)三大類。
①基本數(shù)據(jù) 基本數(shù)據(jù)是指字長在2個字(32位)以下的數(shù)據(jù),包括二進(jìn)制位(bit)、字節(jié)(Byte)、字(Word)、雙字(Double Word),ASCII字符、整數(shù)(Integer)、雙字長整數(shù)(Double Integer)等,這些數(shù)據(jù)符合IEC 1131-3的規(guī)定。
基本數(shù)據(jù)在PLC存儲器中有固定的長度。如:二進(jìn)制位為1位,字節(jié)為8位,字為16位,雙字為32位等。
當(dāng)PLC使用符號地址時,在符號表或地址聲明表的“類型(Type)”欄必須填寫數(shù)據(jù)的“類型代號”,以明確所使用數(shù)據(jù)的格式與所占的字長。
在S7系列PLC中,基本數(shù)據(jù)的數(shù)據(jù)類型代號與輸入范圍如表2-1所示。
表2-1 S7基本數(shù)據(jù)的類型

表中所說的ASCII(American Standard Code for Information Interchange,美國標(biāo)準(zhǔn)信息交換編碼)是利用7位二進(jìn)制(00~7F)來代表1個字符的最普遍的編碼方式,常用于串行通信。7位二進(jìn)制(00~7F)與字符的對應(yīng)關(guān)系見表2-2。S7可以使用的代碼范圍為31~7E,“DEL”(代碼7F)不可以使用。
表2-2 ASCII代碼表

注:表中水平方向?yàn)楦呶唬怪狈较驗(yàn)榈臀唬绶枴皁ne”對應(yīng)的ASCⅡ代碼為“6F 6E 65”等。
②復(fù)合數(shù)據(jù) 復(fù)合數(shù)據(jù)是指字長大于2個字(32位)的數(shù)據(jù),數(shù)據(jù)可以通過基本數(shù)據(jù)組合而成。S7可以使用的復(fù)合數(shù)據(jù)包括以下幾類。
數(shù)組:所謂數(shù)組(類型代號ARRAY),是將同類型的基本數(shù)據(jù)進(jìn)行組合而形成的單元數(shù)據(jù),如表格數(shù)據(jù)等。
結(jié)構(gòu):所謂結(jié)構(gòu)(STRUCT),是將不同類型的基本數(shù)據(jù)進(jìn)行組合而形成的單元數(shù)據(jù)。
字符串:所謂字符串(STRING),是多個相同或不同字符(如ASCII碼)的組合。字符串的默認(rèn)長度為256字節(jié),其中2字節(jié)用于存放字頭,實(shí)際字符最大可以到254個。
日期與時間:日期與時間(DATE-AND-TIME)用于存儲實(shí)時時間,格式為年-月-日-時:分:秒,占用4個字長(8個字節(jié)),使用BCD碼。其中,年、月、日、時、分、秒各為2位(占1個字節(jié)),毫秒為3位(占1.5個字節(jié))。
例如,2006年11月15日8點(diǎn)30分58秒的存儲格式為:06-11-15-08:30:58.000。
用戶定義數(shù)據(jù):編程人員可以將S7的以上各種數(shù)據(jù)類型進(jìn)行重新組合,生成新的數(shù)據(jù)類型,這一數(shù)據(jù)類型稱為“用戶定義數(shù)據(jù)(User Defined Data Types)”,數(shù)據(jù)類型代號為UDT。
③參數(shù) 在SIEMENS公司的S7系列PLC中,在邏輯塊之間進(jìn)行相互傳遞的數(shù)據(jù)稱為參數(shù)。S7的參數(shù)分為“形式參數(shù)”與“實(shí)際參數(shù)”兩類。
在結(jié)構(gòu)化編程時,為了使得某功能塊能夠成為可以在同一PLC循環(huán)內(nèi)多次調(diào)用的通用功能塊,功能塊中所使用的信號與數(shù)據(jù)不可以是“絕對地址”或“絕對數(shù)值”,它們只能以“符號地址”或“符號數(shù)據(jù)”的形式出現(xiàn)。調(diào)用通用功能塊時,可以通過對這些“符號地址”或“符號數(shù)據(jù)”的不同賦值,在每次調(diào)用同一功能塊時,得到不同的結(jié)果。
被調(diào)用的功能塊中所使用的“符號”稱為形式參數(shù)(Format Parameter),而在調(diào)用塊中對“符號”所賦予的實(shí)際地址或?qū)嶋H數(shù)值稱為實(shí)際參數(shù)(Actual Parameter)。
如圖2-1所示,圖中的start、stop、run為形式參數(shù),而I0.1、I0.2、Q0.1則為實(shí)際參數(shù)。

圖2-1 形式參數(shù)與實(shí)際參數(shù)
在每次調(diào)用功能塊前,必須用實(shí)際參數(shù)對塊中所使用的形式參數(shù)賦值。實(shí)際參數(shù)與形式參數(shù)的數(shù)據(jù)類型必須一致,例如,當(dāng)功能塊中的形式參數(shù)定義的數(shù)據(jù)類型為“字(Word)”時,則賦值的實(shí)際參數(shù)必須為字格式,如MW0、IW0、QW0等,而不能用M0.1、I0.1、Q0.1或MB0、IB0、QB0等進(jìn)行賦值。
S7中可以使用的參數(shù)類型有表2-3所示的幾種。
表2-3 S7中可以使用的參數(shù)類型

(2)尋址方式
所謂尋址方式就是產(chǎn)生有效地址的方法,尋址方式是指令系統(tǒng)的一部分,它與PLC的硬件結(jié)構(gòu)緊密相關(guān)。
西門子S7-200PLC的尋址方式有立即尋址、直接尋址和間接尋址三種。
①立即尋址 指令直接給出操作數(shù),操作數(shù)緊跟著操作碼,在取出指令的同時也就取出了操作數(shù),這種方式稱為立即尋址。立即尋址方式可用來提供常數(shù)、設(shè)置初始值等。指令中常常使用常數(shù),常數(shù)值可分為字節(jié)、字、雙字型等數(shù)據(jù)。CPU以二進(jìn)制形式存儲所有常數(shù),指令中可用十進(jìn)制、十六進(jìn)制、ASCII碼或浮點(diǎn)數(shù)形式來表示。
②直接尋址 指令直接給出操作數(shù)的地址的尋址方式稱為直接尋址。由于直接在指令中使用存儲器或寄存器的元件名稱和地址編號,根據(jù)這個地址就可以立即找到該數(shù)據(jù);必須注意的是操作數(shù)的地址應(yīng)按規(guī)定的格式表示。指令中,數(shù)據(jù)類型應(yīng)與指令標(biāo)識符相匹配。
不同數(shù)據(jù)長度的尋址指令舉例如下。
位尋址:AND Q5.5。
字節(jié)尋址:ORB VB33,LB21。
字尋址:MOVW AC0,AQW2。
雙字尋址:MOVD AC1,VD200。
③間接尋址 間接尋址方式是數(shù)據(jù)存放在存儲器或寄存器中,在指令中只出現(xiàn)所需數(shù)據(jù)所在單元的內(nèi)存地址的地址。存儲單元地址的地址又稱為地址指針,這種間接尋址方式與計(jì)算機(jī)的間接尋址方式相同。間接尋址在處理內(nèi)存連續(xù)地址中的數(shù)據(jù)時非常方便,而且可以縮短程序所生成的代碼長度,使編程更加靈活。S7-200CPU以變量存儲器(V)、局部存儲器(L)或累加器(AC)的內(nèi)容值為地址進(jìn)行間接尋址。可間接尋址的存儲器區(qū)域有I、Q、V、M、S、T(僅當(dāng)前值)、C(僅當(dāng)前值)。不可以對獨(dú)立的位(bit)值或模擬量進(jìn)行間接尋址。
間接尋址前,應(yīng)先建立指針,指針為雙字長,指針中存放存儲單元的32位物理地址,以指針中的內(nèi)容值為地址就可以進(jìn)行間接尋址了。只能使用變量存儲器(V)、局部存儲器(L)或累加器(AC1、AC2、AC3)作為指針,AC0不能用作間接尋址的指針。建立指針時,將存儲器的某個地址移入另一存儲器或累加器中作為指針。建立指針后,就可把從指針處取出的數(shù)值傳送到指令輸出操作數(shù)指定的位置。例如,執(zhí)行指令MOVD&VB200,AC1,把地址“VB200”送入AC1,建立指針。這里地址“VB200”要用32位表示,它只是一個直接地址編號,指針中的內(nèi)容為雙字型數(shù)據(jù),因而必須使用雙字傳送指令(MOVD)。指令操作數(shù)“&VB200”中的“&”符號與單元編號組合表示所對應(yīng)單元的32位物理地址,不是存儲器的內(nèi)容。
依據(jù)指針中的內(nèi)容值作為地址存取數(shù)據(jù)。使用指針可存取字節(jié)、字、雙字型的數(shù)據(jù),執(zhí)行指令MOVW *AC1,AC0,把指針中的內(nèi)容值(VB200)作為地址,由于指令MOVW的標(biāo)識符是“W”,因而指令操作數(shù)的數(shù)據(jù)長度應(yīng)是字型,把地址VB200、VB201處2B的內(nèi)容(1234)傳送到AC0。指針處的值(即1234)為字型數(shù)據(jù),如圖2-2所示。操作數(shù)(AC1)前面的“*”號表示該操作數(shù)(AC1)為指針。

圖2-2 使用指針間接尋址
處理連續(xù)存儲數(shù)據(jù)時,可以通過修改指針很容易地存取其他緊挨的數(shù)據(jù)。簡單的數(shù)學(xué)運(yùn)算指令,如加法、減法、自增和自減等指令可以用來修改指針。在S7-200PLC中,指針中的內(nèi)容為雙字型數(shù)據(jù),應(yīng)使用雙字指令來修改指針值。如圖2-3所示,用兩次自增指令I(lǐng)NCD AC1,將AC1指針中的值(VB200)修改為VB202后,指針即指向新地址VB202。執(zhí)行指令MOVW *AC1,AC0,可在變量存儲器(V)中連續(xù)地存取數(shù)據(jù),將VB202、VB203 2B的數(shù)據(jù)(5678)傳送到AC0。

圖2-3 存取字?jǐn)?shù)據(jù)值時指針的修改
修改指針值時,應(yīng)根據(jù)存取的數(shù)據(jù)長度來進(jìn)行調(diào)整。若對字節(jié)進(jìn)行存取,指針值加1(或減1);若對字進(jìn)行存取,或?qū)Χ〞r器、計(jì)數(shù)器的當(dāng)前值進(jìn)行存取,指針值加2(或減2);若對雙字進(jìn)行存取,指針值加4(或減4)。圖2-3中,存取的數(shù)據(jù)長度是字型數(shù)據(jù),因而指針值加2。
2.1.2 常用基本指令
S7-200 PLC的基本指令多用于開關(guān)量邏輯控制,基本指令包括位操作類指令,主要是位操作及位運(yùn)算指令;運(yùn)算指令,包括常用的算術(shù)運(yùn)算和邏輯運(yùn)算指令;其他數(shù)據(jù)處理類指令,包括數(shù)據(jù)的傳送、移位、填充和交換等指令;表功能指令,包括對表的存取和查找指令;轉(zhuǎn)換指令,包括數(shù)據(jù)類型轉(zhuǎn)換、碼轉(zhuǎn)換和字符轉(zhuǎn)換指令。上述內(nèi)容中的后4條都是對數(shù)據(jù)進(jìn)行運(yùn)算和處理的指令,掌握PLC的基本指令才能編程。
2.1.2.1 位邏輯指令
位邏輯指令是PLC應(yīng)用領(lǐng)域最具代表性的指令應(yīng)用,是所有其他指令的基礎(chǔ)。位邏輯指令屬于基本邏輯指令,是專門針對位邏輯量進(jìn)行處理的指令,與使用繼電器進(jìn)行邏輯控制十分相似。S7-200 PLC共有27條邏輯指令,現(xiàn)按用途分類如下。
(1)邏輯取及線圈驅(qū)動指令
邏輯取及線圈驅(qū)動指令為LD(Load)、LDN(Load Not)、=(Out)。
LD(Load):取指令。當(dāng)LAD開始的觸點(diǎn)為常開觸點(diǎn)時,使用該指令。
LDN(Load Not):取反指令。當(dāng)LAD開始的觸點(diǎn)為常閉觸點(diǎn)時,使用該指令。
=(Out):線圈驅(qū)動指令。
上述指令的使用如圖2-4所示。

圖2-4 LD、LDN、“=”指令的使用
圖2-4中,當(dāng)I0.0閉合時,輸出線圈Q0.0接通;當(dāng)I0.1斷開時,輸出線圈Q0.1和內(nèi)部輔助線圈M0.0接通。
LD、LDN、“=”指令使用說明如下。
①LD、LDN指令用于與輸入公共線(輸入母線)相連的觸點(diǎn),在分支電路塊的開始處也要使用LD、LDN指令,與后面的OLD、ALD指令配合完成電路塊的編程。
②“=”指令用于輸出繼電器、輔助繼電器、定時器及計(jì)數(shù)器等,但不能用于輸入繼電器。
③并聯(lián)的“=”指令可以連續(xù)使用任意次。
④在同一程序中不要使用雙線圈輸出,即同一個元器件在同一程序中只使用一次“=”指令。
⑤LD、LDN指令的操作數(shù)為I、Q、M、SM、T、C、V和S。“=”指令的操作數(shù)為Q、M、SM、V和S。
(2)觸點(diǎn)串聯(lián)指令
觸點(diǎn)串聯(lián)指令為A(And)、AN(And Not)。
A(And):與指令。用于單個常開觸點(diǎn)串聯(lián)連接。
AN(And Not):與反指令。用于單個常閉觸點(diǎn)串聯(lián)連接。
觸點(diǎn)串聯(lián)指令的使用如圖2-5所示。

圖2-5 串聯(lián)指令的使用
圖2-5中,I0.0與I0.1執(zhí)行相“與”的邏輯運(yùn)算。在I0.0與I0.1均閉合時,線圈Q0.0接通;I0.0與I0.1中只要有一個不閉合,線圈Q0.0不能接通。I0.2與常閉觸點(diǎn)I0.3執(zhí)行相“與”的邏輯運(yùn)算。在I0.2閉合、I0.3斷開時,線圈Q0.1接通;若I0.2斷開或I0.3閉合,則線圈Q0.1不能接通。
A、AN指令使用說明如下。
①A、AN指令是單個觸點(diǎn)串聯(lián)連接指令,可連續(xù)使用。但在用梯形圖編程時會受到打印寬度和屏幕顯示的限制,S7-200 PLC的編程軟件中規(guī)定的串聯(lián)觸點(diǎn)使用上限為11個。
②若要串聯(lián)多個觸點(diǎn)組合回路時,需采用后面說明的ALD指令。
③A、AN指令的操作數(shù)為I、Q、M、SM、T、C、V和S。
④在使用“=”指令進(jìn)行線圈驅(qū)動后,仍然可以使用A、AN指令,然后再次使用“=”指令,如圖2-6所示。
圖2-6所示程序的上下次序不能隨意改變,否則A、AN指令與“=”指令不能多次連續(xù)使用。

圖2-6 A、AN指令與“=”指令的多次連續(xù)使用
(3)觸點(diǎn)并聯(lián)指令
觸點(diǎn)并聯(lián)指令為O(Or)、ON(Or Not)。
O(Or):或指令。用于單個常開觸點(diǎn)并聯(lián)連接。
ON(Or Not):或反指令。用于單個常閉觸點(diǎn)并聯(lián)連接。
圖2-7所示梯形圖表示了O及ON指令的用法。

圖2-7 O及ON指令的使用
圖2-7中,I0.0與I0.1執(zhí)行相“或”的邏輯操作。當(dāng)I0.0與I0.1任意一個閉合時,線圈Q0.0接通;當(dāng)I0.0與I0.1均不閉合時,線圈Q0.0不能接通。
O、ON指令可作為一個觸點(diǎn)的并聯(lián)連接指令,緊接在LD、LDN指令之后使用,即對其前面LD、LDN指令所規(guī)定的觸點(diǎn)再并聯(lián)一個觸點(diǎn),可以連續(xù)使用。
(4)置位/復(fù)位指令
①置位指令 將位存儲區(qū)的從指定位(bit)開始的N個同類存儲器位置位。
用法:S bit,N,如S Q0.0,1。
②復(fù)位指令 將從位存儲區(qū)的指定位(bit)開始的N個同類存儲器位復(fù)位。當(dāng)用復(fù)位指令時,如果是對定時器T位或計(jì)數(shù)器C位進(jìn)行復(fù)位,則定時器位或計(jì)數(shù)器位被復(fù)位;同時,定時器或計(jì)數(shù)器的當(dāng)前值被清0。
用法:R bit,N,如R Q0.2,3。
置位即置1,復(fù)位即置0。置位和復(fù)位指令可以將位存儲區(qū)的某一位開始的一個或多個(最多可達(dá)255個)同類存儲器位置1或置0。這兩條指令在使用時需指明三點(diǎn):操作性質(zhì)、開始位和位的數(shù)量。各操作數(shù)類型及范圍見表2-4。
表2-4 操作數(shù)類型及范圍

圖2-8為置位/復(fù)位指令的使用。S、R指令中的2表示從指定的Q0.0開始的兩個觸點(diǎn),即Q0.0與Q0.1。在檢測到I0.0閉合的上升沿時,輸出線圈Q0.0、Q0.1被置位為1,并保持,而不論I0.0為何種狀態(tài)。在檢測到I0.1閉合的上升沿時,輸出線圈Q0.0、Q0.1被復(fù)位為0,并保持,而不論I0.1為何種狀態(tài)。

圖2-8 置位/復(fù)位指令的使用
指定觸點(diǎn)一旦被置位,則保持接通狀態(tài),直到對其進(jìn)行復(fù)位操作;而指定觸點(diǎn)一旦被復(fù)位,則變?yōu)閿嚅_狀態(tài),直到對其進(jìn)行置位操作。
如果對定時器和計(jì)數(shù)器進(jìn)行復(fù)位操作,則被指定的T或C的位被復(fù)位,同時其當(dāng)前值被清0。
S、R指令可多次使用相同編號的各類觸點(diǎn),使用次數(shù)不限,如圖2-9所示。若幾個觸發(fā)信號同時閉合,則Network1中Q0.0的狀態(tài)為接通,Network3中Q0.0的狀態(tài)為斷開,Network6中Q0.0的狀態(tài)為接通,Network9中Q0.0的狀態(tài)為斷開。

圖2-9 S、R指令對同一線圈的多次設(shè)置
(5)RS觸發(fā)器和SR觸發(fā)器
置位優(yōu)先觸發(fā)器(SR):當(dāng)置位端(S1)和復(fù)位端(R)均為“1”時,輸出位為“1”。
復(fù)位優(yōu)先觸發(fā)器(RS):當(dāng)置位端(S)和復(fù)位端(R1)均為“1”時,輸出位為“0”。
對RS觸發(fā)器和SR觸發(fā)器,當(dāng)置位端為“1”、復(fù)位端為“0”時,輸出位為“1”;當(dāng)置位端為“0”、復(fù)位端為“1”時,輸出位為“0”;當(dāng)置位端、復(fù)位端均為“0”時,輸出位保持原狀態(tài)不變。
在實(shí)際的程序設(shè)計(jì)中,RS或SR觸發(fā)器通常由置位、復(fù)位指令實(shí)現(xiàn)。RS、SR指令的使用如圖2-10所示。
梯形圖對應(yīng)的指令表如下:
Network1
LD I0.0
LD I0.1
NOT
LPS
A Q0.0
= Q0.0
LPP
ALD
O Q0.0
= Q0.0
Network2
LD I0.0
LD I0.1
NOT
A Q0.1
OLD
= Q0.1
圖2-10中,RS、SR指令均為鎖存器,一個復(fù)位優(yōu)先,一個置位優(yōu)先。S連接置位輸入,R連接復(fù)位輸入,一旦輸出線圈被置位,則保持置位狀態(tài)直到復(fù)位輸入接通。置位、復(fù)位輸入均以高電平狀態(tài)有效。

圖2-10 RS、SR指令的使用
(6)串聯(lián)電路塊的并聯(lián)和并聯(lián)電路塊的串聯(lián)指令
串聯(lián)電路塊的并聯(lián)指令為OLD(Or Load),用于實(shí)現(xiàn)多個電路塊的“與”運(yùn)算;并聯(lián)電路塊的串聯(lián)指令為ALD(And Load),用于實(shí)現(xiàn)多個電路塊的“或”運(yùn)算。ALD、OLD指令的使用如圖2-11所示。
圖2-11中,Network1中的I0.0和I0.1組成一個“或”塊,I0.2和I0.3組成一個“或”塊,然后兩個“或”塊串聯(lián),執(zhí)行“與”運(yùn)算,當(dāng)I0.0或I0.1閉合且I0.2或I0.3閉合時,Q0.0接通;Network2中的I0.4和I0.5組成一個“與”塊,I0.6和I0.7組成一個“與”塊,然后兩個“與”塊并聯(lián),執(zhí)行“或”運(yùn)算,當(dāng)I0.4與I0.5均閉合或I0.6與I0.7均閉合時,Q0.1接通。

圖2-11 ALD、OLD指令的使用
幾個串聯(lián)支路并聯(lián)時,其支路的起點(diǎn)以LD、LDN開始,支路終點(diǎn)用OLD指令,如需將多個支路并聯(lián),從第二條支路開始,在每一條支路后面加OLD指令;幾個并聯(lián)支路串聯(lián)時,其支路的起點(diǎn)也以LD、LDN開始,支路終點(diǎn)用ALD指令,如果有多個并聯(lián)支路串聯(lián),順次以ALD指令與前面支路連接。兩種指令的支路數(shù)均沒有限制。
OLD、ALD指令無操作數(shù)。
(7)邊沿脈沖指令
邊沿脈沖指令為EU/ED(Edge Up/Edge Down),其指令格式為:EU(Edge Up)正跳變,無操作元件;ED(Edge Down)負(fù)跳變,無操作元件。
邊沿觸發(fā)是指用邊沿觸發(fā)信號產(chǎn)生一個機(jī)器周期的掃描脈沖,通常用作脈沖整形。邊沿觸發(fā)指令分為正跳變觸發(fā)(上升沿)和負(fù)跳變觸發(fā)(下降沿)兩大類。正跳變觸發(fā)指輸入脈沖的上升沿,使觸點(diǎn)接通一個掃描周期;負(fù)跳變觸發(fā)指輸入脈沖的下降沿,使觸點(diǎn)接通一個掃描周期。EU/ED指令的使用如圖2-12所示。

圖2-12 EU/ED指令的使用
圖2-12中,當(dāng)I0.0閉合時,正跳變觸點(diǎn)接通一個掃描周期,使Q0.0有一個掃描周期輸出;當(dāng)I0.1斷開時,負(fù)跳變觸點(diǎn)接通一個掃描周期,使Q0.1有一個掃描周期輸出。
(8)立即指令
①立即觸點(diǎn)指令 在每個標(biāo)準(zhǔn)觸點(diǎn)指令的后面加“I”。指令執(zhí)行時,立即讀取物理輸入點(diǎn)的值,但是不刷新對應(yīng)映像寄存器的值。這類指令包括LDI、LDNI、AI、ANI、OI和ONI。
用法:LDI bit,bit只能是I類型。
②立即輸出指令 執(zhí)行指令時,新值被寫入實(shí)際輸出和對應(yīng)的過程映像寄存器位置。這與非立即輸出不同,非立即輸出指令僅將新值寫入過程映像寄存器。用立即輸出指令訪問輸出點(diǎn)時,相應(yīng)的輸出映像寄存器的內(nèi)容也被刷新。
用法:=I bit,bit只能是Q類型。
③SI,立即置位指令 用立即置位指令訪問輸出點(diǎn)時,從指令所指出的位(bit)開始的N個(最多為128個)物理輸出點(diǎn)被立即置位,同時,相應(yīng)的輸出映像寄存器的內(nèi)容也被刷新。
用法:SI bit,N,如SI Q0.0,2。
④RI,立即復(fù)位指令 用立即復(fù)位指令訪問輸出點(diǎn)時,從指令所指出的位(bit)開始的N個(最多為128個)物理輸出點(diǎn)被立即復(fù)位,同時,相應(yīng)的輸出映像寄存器的內(nèi)容也被刷新。
用法:RI bit,N,如RI Q0.0,1。
注意:bit只能是Q類型。
立即指令的使用如圖2-13所示。圖中,Q0.0、Q0.1和Q0.2的輸入邏輯是I0.0的普通常開觸點(diǎn)。Q0.0為普通輸出,當(dāng)程序執(zhí)行到它時,它的映像寄存器的狀態(tài)會隨著本次掃描周期采集到的I0.0的狀態(tài)而改變,而它的物理觸點(diǎn)要等到本次掃描周期的輸出刷新階段才改變。Q0.1、Q0.2為立即輸出,當(dāng)程序執(zhí)行到它們時,它們的物理觸點(diǎn)和輸出映像寄存器同時改變。對Q0.3而言,它的輸入邏輯是I0.0的立即觸點(diǎn),所以在程序執(zhí)行到它時,Q0.3的映像寄存器的狀態(tài)隨著I0.0即時狀態(tài)的改變而立即改變,而它的物理觸點(diǎn)要等到本次掃描周期的輸出刷新階段才改變。

圖2-13 立即指令的使用
(9)堆棧操作指令
S7-200 PLC使用一個9層堆棧來處理所有邏輯操作。堆棧是一組能夠存儲和取出數(shù)據(jù)的暫存單元,其特點(diǎn)是“先進(jìn)后出”。西門子公司將ALD、OLD、LPS、LRD、LPP和LDS等指令都?xì)w納為堆棧操作指令。
PLC執(zhí)行ALD指令時,將堆棧中的第一級和第二級的值進(jìn)行邏輯“與”操作,結(jié)果置于棧頂(堆棧第一級),并將堆棧中的第三~九級的值依次上彈一級。
PLC執(zhí)行OLD指令時,將堆棧中的第一級和第二級的值進(jìn)行邏輯“或”操作,結(jié)果置于棧頂,并將堆棧中其余各級的內(nèi)容依次上彈一級。
棧裝載“與”和棧裝載“或”指令的操作過程如圖2-14所示。

圖2-14 棧裝載“與”和棧裝載“或”指令的操作過程
LPS(Logic Push):邏輯入棧指令。復(fù)制棧頂?shù)闹挡⑦@個值推入棧頂,原堆棧中各級棧會依次下壓一級,棧底值丟失。
LRD(Logic Read):邏輯讀棧指令。把堆棧中第二級的值復(fù)制到棧頂,堆棧沒有推入棧或彈出棧操作,但原棧頂值被新的復(fù)制值取代。
LPP(Logic POP):邏輯出棧指令。堆棧作彈出棧操作,將棧頂?shù)闹祻棾觯褩8骷墬V狄来紊蠌椧患墸褩5诙壍闹党蔀樾碌臈m斨怠?/p>
注意:LPS與LPP必須配對使用。
LDS(Load Stack):裝入堆棧指令。復(fù)制堆棧中的第n個值到棧頂,棧底值丟失。例如,LDS 5,是將堆棧中的第5個值復(fù)制到棧頂,并進(jìn)行入棧操作,n的取值范圍為0~8。
LPS、LRD、LPP、LDS指令的堆棧操作過程如圖2-15所示。邏輯堆棧指令的編程實(shí)例如圖2-16所示。

圖2-15 LPS、LRD、LPP、LDS指令的堆棧操作過程

圖2-16 邏輯堆棧指令的編程實(shí)例
堆棧指令使用說明如下。
①堆棧指令主要用于組織復(fù)雜的邏輯關(guān)系,無操作數(shù)。
②由于堆棧空間有限(9層),所以LPS和LPP指令的連續(xù)使用不得超過9次。
③LPS與LPP成對使用,在它們之間可以多次使用LRD指令,如圖2-17所示。

圖2-17 多層堆棧的使用
(10)NOT和NOP指令
NOT為“非”運(yùn)算指令,可將該指令處的運(yùn)算結(jié)果取反,無操作數(shù);空操作(NOP N)指令不影響程序的執(zhí)行,該指令很少被使用。NOT指令的使用如圖2-18所示。

圖2-18 NOT指令的使用
2.1.2.2 定時器指令
定時器指令在編程中首先要設(shè)置預(yù)置值,用以確定定時時間。在程序的運(yùn)行過程中,定時器不斷累計(jì)時間。當(dāng)累計(jì)的時間與設(shè)置時間相等時,定時器發(fā)生動作,以實(shí)現(xiàn)各種定時邏輯控制工作。
S7-200 PLC的定時器為增量型定時器,用于實(shí)現(xiàn)時間控制,可以按照工作方式和時間基準(zhǔn)(時基)分類,時間基準(zhǔn)又稱為定時精度和分辨率。
(1)工作方式
按照工作方式,定時器可分為通電延時型(TON)、保持型(又稱有記憶的通電延時型)(TONR)、斷電延時型(TOF)三種類型。
(2)時基標(biāo)準(zhǔn)
按照時基標(biāo)準(zhǔn),定時器又分為1ms、10ms、100ms三種類型,不同的時基標(biāo)準(zhǔn),定時精度、定時范圍和定時器的刷新方式不同。
①定時精度 定時器的工作原理是定時器使能輸入有效后,當(dāng)前值寄存器對PLC內(nèi)部的時基脈沖增1計(jì)數(shù),最小計(jì)時單位為時基脈沖的寬度。
②定時范圍 定時器使能輸入有效后,當(dāng)前值寄存器對時基脈沖遞增計(jì)數(shù),當(dāng)計(jì)數(shù)值大于或等于定時器的設(shè)定值后,狀態(tài)位置1。從定時器輸入有效,到狀態(tài)位輸出有效經(jīng)過的時間為定時時間。定時時間T等于時基乘設(shè)定值,時基越大,定時時間越長,但精度越差。
③定時器的刷新方式 1ms定時器每隔1ms定時器刷新一次,定時器刷新與掃描周期和程序處理無關(guān)。掃描周期較長時,定時器一個周期內(nèi)可能多次被刷新(多次改變當(dāng)前值)。
10ms定時器在每個掃描周期開始時刷新。每個掃描周期之內(nèi),當(dāng)前值不變。
100ms定時器是定時器指令執(zhí)行時被刷新,下一條執(zhí)行的指令即可使用刷新后的結(jié)果,但應(yīng)當(dāng)注意,如果該定時器的指令不是每個周期都執(zhí)行(比如條件跳轉(zhuǎn)時),定時器就不能及時刷新,可能會導(dǎo)致出錯。
CPU22X系列PLC的256個定時器分屬TON(TOF)和TONR工作方式,以及三種時基標(biāo)準(zhǔn),TOF與TON共享同一組定時器,不能重復(fù)使用。詳細(xì)分類方法及定時范圍見表2-5。
表2-5 定時器工作方式及類型

使用定時器時應(yīng)參照表2-5的時基標(biāo)準(zhǔn)和工作方式合理選擇定時器編號,同時要考慮刷新方式對程序執(zhí)行的影響。
(3)定時器指令格式
S7-200 PLC提供了三種類型的定時器,即通電延時型、有記憶通電延時型和斷電延時型,定時器指令格式如表2-6所示。
表2-6 定時器指令格式

IN是使能輸入端,編程范圍T0~T255;PT是設(shè)定值輸入端,最大預(yù)置值32 767;PT數(shù)據(jù)類型為INT。
①通電延時型(TON) 當(dāng)使能端(IN)輸入有效時,定時器開始計(jì)時,當(dāng)前值從0開始遞增,大于或等于設(shè)定值(PT)時,定時器輸出狀態(tài)位置為1(輸出觸點(diǎn)有效),當(dāng)前值的最大值為32 767。使能端無效(斷開)時,定時器復(fù)位(當(dāng)前值清零,輸出狀態(tài)位置為0)。通電延時型定時器應(yīng)用程序如圖2-19所示。

圖2-19 通電延時型定時器應(yīng)用程序
②有記憶通電延時型(TONR) 使能端(IN)輸入有效時(接通),定時器開始計(jì)時,當(dāng)前值遞增,當(dāng)前值大于或等于設(shè)定值(PT)時,輸出狀態(tài)位置為1,使能端輸入無效(斷開)時,當(dāng)前值保持(記憶),使能端(IN)再次接通有效時,在原記憶值的基礎(chǔ)上遞增計(jì)時。有記憶通電延時型(TONR)定時器采用線圈的復(fù)位指令(R)進(jìn)行復(fù)位操作,當(dāng)復(fù)位線圈有效時,定時器當(dāng)前值清零,輸出狀態(tài)位置為0。
保持型(有記憶通電延時型定時器)應(yīng)用程序如圖2-20所示。

圖2-20 有記憶通電延時型定時器應(yīng)用程序段
③斷電延時型(TOF) 使能端(IN)輸入有效時,定時器輸出狀態(tài)位立即置1,當(dāng)前值復(fù)位(為0)。使能端(IN)斷開時,開始計(jì)時,當(dāng)前值從0遞增,當(dāng)前值達(dá)到預(yù)置值時,定時器狀態(tài)位復(fù)位置0,并停止計(jì)時,當(dāng)前值保持。
斷電延時型定時器應(yīng)用程序如圖2-21所示。

圖2-21 斷電延時型定時器應(yīng)用程序段
2.1.2.3 計(jì)數(shù)器指令
S7-200系列PLC有加計(jì)數(shù)器(CTU)、加/減計(jì)數(shù)器(CTUD)、減計(jì)數(shù)器(CTD)等三種計(jì)數(shù)指令。計(jì)數(shù)器的使用方法和基本結(jié)構(gòu)與定時器基本相同,主要由設(shè)定值寄存器、當(dāng)前值寄存器、狀態(tài)位等組成。
(1)指令格式
計(jì)數(shù)器的梯形圖指令符號為指令盒形式,指令格式見表2-7。
表2-7 計(jì)數(shù)器指令格式

梯形圖指令符號中CU為增1計(jì)數(shù)脈沖輸入端;CD為減1計(jì)數(shù)脈沖輸入端;R為復(fù)位脈沖輸入端;LD為減計(jì)數(shù)器的復(fù)位脈沖輸入端。編程范圍C0~C255;PV設(shè)定值最大范圍32767;PV數(shù)據(jù)類型為INT。
(2)工作原理
①加計(jì)數(shù)指令(CTU) 加計(jì)數(shù)器在CU端輸入脈沖上升沿,計(jì)數(shù)器的當(dāng)前值增1計(jì)數(shù)。
當(dāng)前值大于或等于設(shè)定值(PV)時,計(jì)數(shù)器狀態(tài)位置1。當(dāng)前值累加的最大值為32767。復(fù)位輸入(R)有效時,計(jì)數(shù)器狀態(tài)位復(fù)位(置0),當(dāng)前計(jì)數(shù)值清零。加計(jì)數(shù)器的應(yīng)用如圖2-22所示。

圖2-22 加計(jì)數(shù)器程序及時序
②加/減計(jì)數(shù)器(CTUD) 加/減計(jì)數(shù)器有兩個脈沖輸入端,其中CU端用于加計(jì)數(shù),CD端用于減計(jì)數(shù),執(zhí)行加/減計(jì)數(shù)時,CU/CD端的計(jì)數(shù)脈沖上升沿加1/減1計(jì)數(shù)。當(dāng)前值大于或等于計(jì)數(shù)器設(shè)定值(PV)時,計(jì)數(shù)器狀態(tài)位置位。復(fù)位輸入(R)有效或執(zhí)行復(fù)位指令時,計(jì)數(shù)器狀態(tài)位復(fù)位,當(dāng)前值清零。達(dá)到計(jì)數(shù)最大值32767后,下一個CU輸入上升沿將使計(jì)數(shù)值變?yōu)樽钚≈担?32768)。同樣,達(dá)到最小值(-32768)后,下一個CD輸入上升沿將使計(jì)數(shù)值變?yōu)樽畲笾担?2767)。加/減計(jì)數(shù)器應(yīng)用程序如圖2-23所示。

圖2-23 加/減計(jì)數(shù)器應(yīng)用程序及時序
③減計(jì)數(shù)指令(CTD) 復(fù)位輸入(LD)有效時,計(jì)數(shù)器把預(yù)置值(PV)裝入當(dāng)前值存儲器,計(jì)數(shù)器狀態(tài)位復(fù)位(置0)。CD端每一個輸入脈沖上升沿,減計(jì)數(shù)器的當(dāng)前值從預(yù)置值開始遞減計(jì)數(shù),當(dāng)前值等于0時,計(jì)數(shù)器狀態(tài)位置位(置1),停止計(jì)數(shù)。
減計(jì)數(shù)指令應(yīng)用程序如圖2-24所示。

圖2-24 減計(jì)數(shù)器程序及時序
減計(jì)數(shù)器在計(jì)數(shù)脈沖I3.0的上升沿減1計(jì)數(shù),當(dāng)前值從預(yù)置值開始減至0時,定時器輸出狀態(tài)位置1,Q0.0通電(置1),在復(fù)位脈沖I1.0的上升沿,定時器狀態(tài)位置0(復(fù)位),當(dāng)前值等于預(yù)置值,為下次計(jì)數(shù)工作做好準(zhǔn)備。
2.1.2.4 移位寄存器指令
移位寄存器指令可用來進(jìn)行順序控制、步進(jìn)及數(shù)據(jù)流控制。在梯形圖中,該指令以功能框形式編程。
移位寄存器指令SHRB把輸入端(DATA)的數(shù)值移入移位寄存器,并進(jìn)行移位。該移位寄存器是由S?BIT和N決定的,其中S?BIT指定移位寄存器的最低有效位,N指定移位寄存器的長度。N為正數(shù)表示正向移位,N為負(fù)數(shù)表示反向移位。移位寄存器指令編程及時序如圖2-25所示。

圖2-25 移位寄存器指令編程及時序
由移位寄存器的最低有效位(S?BIT)和移位寄存器的長度(N)可計(jì)算出移位寄存器的最高有效位(MSB.b)的地址。計(jì)算公式為
MSB.b=[S?BIT的字節(jié)號+(N-1+S?BIT的位號)÷8].(被8除所得余數(shù))
例如,如果S?BIT為V22.5,N為8,那么MSB.b為V23.4。具體計(jì)算如下:
MSB.b=V22+(8-1+5)÷8=V22+12÷8=V22+1(余數(shù)為4)=V23.4
當(dāng)允許輸入端(EN)有效時,移位寄存器指令使移位寄存器各位在每個掃描周期都移動一位,且在EN端的每個上升沿時刻對DATA端采樣一次,把輸入端(DATA)的數(shù)值移入移位寄存器。當(dāng)正向移位時,輸入數(shù)據(jù)從移位寄存器的最低有效位移入,從最高有效位移出;當(dāng)反向移位時,輸入數(shù)據(jù)從移位寄存器的最高有效位移入,從最低有效位移出。移出的數(shù)據(jù)送入溢出存儲器位(SM1.1)。N為字節(jié)型數(shù)據(jù)類型,移位寄存器的最大長度為64位。操作數(shù)DATA、S?BIT為BOOL型數(shù)據(jù)類型。
如圖2-26所示,利用移位寄存器指令控制16個彩燈的順序點(diǎn)亮:啟動后最左端兩個燈先亮,然后從左到右以1s的速度依次移動點(diǎn)亮,且同一時刻只能有兩個相鄰的燈亮,當(dāng)最右端兩個燈亮后再從右到左以1s的速度移動,如此循環(huán)顯示。

圖2-26 彩燈控制
本例利用輸出的狀態(tài)作為移位寄存器指令的執(zhí)行控制,利用兩個移位寄存器指令分別來完成彩燈的左、右移動控制。因?yàn)椴薀羰敲棵胍苿右淮危钥刹捎锰厥饧拇嫫鱏M0.5作為移動控制觸點(diǎn),控制移位寄存器指令每秒執(zhí)行一次,其梯形圖程序如圖2-27所示。

圖2-27 彩燈控制程序
2.1.2.5 比較觸點(diǎn)指令
(1)字節(jié)比較
字節(jié)比較用于比較兩個字節(jié)型整數(shù)值IN1和IN2的大小,字節(jié)比較是無符號的。比較式可以是LDB、AB或OB后直接加比較運(yùn)算符構(gòu)成,如LDB=、AB<>、OB>=等。
整數(shù)IN1和IN2的尋址范圍:VB、IB、QB、MB、SB、SMB、LB、*VD、*AC、*LD和常數(shù)。
指令格式如下:
LDB= VB10,VB12
AB<> MB0,MB1
OB<= AC1,116
(2)整數(shù)比較
整數(shù)比較用于比較兩個一字長整數(shù)值IN1和IN2的大小,整數(shù)比較是有符號的,整數(shù)范圍為16#8000~16#7FFF。比較式可以是LDW、AW或OW后直接加比較運(yùn)算符構(gòu)成,如LDW=、AW<>、OW>=等。
整數(shù)IN1和IN2的尋址范圍:VW、IW、QW、MW、SW、SMW、LW、AIW、T、C、AC、*VD、*AC、*LD和常數(shù)。
指令格式如下:
LDW= VW10,VW12
AW<> MW0, MW4
OW<= AC2, 1160
(3)雙字整數(shù)比較
雙字整數(shù)比較用于比較兩個雙字長整數(shù)值IN1和IN2的大小,雙字整數(shù)比較是有符號的,雙字整數(shù)范圍為16#80000000~16#7FFFFFFF。
指令格式如下:
LDD= VD10,VD14
AD<> MD0,MD8
OD<= AC0,1160000
LDD>= HC0,*AC0
(4)實(shí)數(shù)比較
實(shí)數(shù)比較用于比較兩個雙字長實(shí)數(shù)值IN1和IN2的大小,實(shí)數(shù)比較是有符號的,負(fù)實(shí)數(shù)范圍為-1.175495E-38~-3.402823E+38,正實(shí)數(shù)范圍為+1.175495E-38~+3.402823E+38。比較式可以是LDR、AR或OR后直接加比較運(yùn)算符構(gòu)成。
指令格式如下:
LDR= VD10, VD18
AR<> MD0, MD12
OR<= AC1, 1160.478
AR> *AC1, VD100
圖2-28為比較指令的一個使用實(shí)例,圖中,當(dāng)輸入I2.0為“1”(上升沿)時,比較IW10與MW20的大小。如果IW10=MW20,標(biāo)志位M10.0為“1”;IW10>MW20,M10.1為“1”;IW10<MW20,M10.2為“1”。同時M10.0~M10.2的狀態(tài)在I2.0為“0”后仍然能夠保持。

圖2-28 比較指令的使用
2.1.2.6 順序控制指令
在S7-200 PLC中規(guī)定只能用狀態(tài)寄存器來表示順序控制步,每個步由一個狀態(tài)寄存器位表示。步進(jìn)控制指令包括步的開始、步的結(jié)束和步的轉(zhuǎn)移指令。順序控制指令的梯形圖指令框形式如圖2-29所示。

圖2-29 順序控制指令
順序控制指令的STL指令如下:
LSCR Sn.x:步開始,其操作數(shù)Sn.x為狀態(tài)寄存器Sn中的一個位,稱為該SCR步標(biāo)志位,當(dāng)其為“1”時,允許該SCR步工作。
SCRT Sm.y:步轉(zhuǎn)移,其操作數(shù)Sm.y為狀態(tài)寄存器Sm中的一個位,當(dāng)其為“1”時,程序轉(zhuǎn)移至由Sm.y表示的SCR段,同時自動停止當(dāng)前SCR步的工作。
SCRE:步結(jié)束,順序控制步無條件結(jié)束。
每個順序控制步必須有LSCR和SCRE指令。
順序控制指令可以將程序功能流程圖轉(zhuǎn)換成梯形圖程序。
指令使用說明如下:
(1)每一個SCR程序段中均包含三個要素
①輸出對象:在這一步序中應(yīng)完成的動作。
②轉(zhuǎn)換條件:滿足轉(zhuǎn)換條件后,實(shí)現(xiàn)SCR段的轉(zhuǎn)換。
③轉(zhuǎn)換目標(biāo):轉(zhuǎn)換到下一個步序。
(2)使用SCR指令注意事項(xiàng)
①SCR指令的操作數(shù)(或編程元件)只能是狀態(tài)寄存器Sx.y;反之,狀態(tài)寄存器Sx.y可應(yīng)用的指令并不僅限于SCR,它還可以應(yīng)用LD、LDN、A、AN、O、ON、=、S、R等指令。
②一個狀態(tài)寄存器Sx.y作為SCR段標(biāo)志位,可以用于主程序、子程序或中斷程序中,但是只能使用一次,不能重復(fù)使用。
③在一個SCR段中,禁止使用循環(huán)指令FOR/NEXT、跳轉(zhuǎn)指令JMP/LBL和條件結(jié)束指令END。
圖2-30所示為采用程序順序控制指令控制紅、綠、黃三色燈的參考梯形圖:紅燈先亮,3s后綠燈亮,再過5s后黃燈亮。當(dāng)紅、綠、黃燈全亮2min后,全部熄滅。

圖2-30 三色燈控制程序
2.1.3 常用功能指令
PLC為了實(shí)現(xiàn)模擬控制功能,除了基本操作指令外,還具有功能指令,功能指令實(shí)質(zhì)上就是一些功能不同的子程序,合理、正確地使用功能指令,對優(yōu)化程序結(jié)構(gòu),提高應(yīng)用系統(tǒng)的功能,簡化對一些復(fù)雜問題的處理有著重要的作用。
2.1.3.1 數(shù)據(jù)傳送指令
數(shù)據(jù)傳送指令可實(shí)現(xiàn)將數(shù)據(jù)輸入IN(常數(shù)或某存儲器中的數(shù)據(jù))傳送到輸出OUT(存儲器)中的功能,傳送過程中不改變數(shù)據(jù)的數(shù)值。
數(shù)據(jù)傳送指令包含單一數(shù)據(jù)傳送及一次性傳送多個連續(xù)字塊的傳送,每種又可依據(jù)傳送數(shù)據(jù)的類型分為字節(jié)、字、雙字或者實(shí)數(shù)等幾種情況。傳送指令用于機(jī)內(nèi)數(shù)據(jù)的流轉(zhuǎn)與生成,可用于存儲單元的清零、程序初始化等場合。
(1)單一數(shù)據(jù)傳送指令
單一數(shù)據(jù)傳送指令用于傳送一個數(shù)據(jù),其功能是在EN端有輸入(即EN=1)時,將IN端指定單元中的數(shù)據(jù)送入OUT端指定的單元中。
當(dāng)EN端有效時,指令才被執(zhí)行,分別將一個字節(jié)、字、雙字或?qū)崝?shù)從IN傳送到OUT所指的存儲單元中。在傳送過程中數(shù)據(jù)的大小不被改變。傳送后,輸入存儲器IN中的內(nèi)容也不改變。當(dāng)指令正確執(zhí)行之后,則ENO為1。
單一數(shù)據(jù)傳送指令功能說明如表2-8所示。
表2-8 單一數(shù)據(jù)傳送指令功能說明

(2)數(shù)據(jù)塊傳送指令
數(shù)據(jù)塊傳送指令的功能是在EN端(使能端)有輸入時,將IN端指定首地址的N個單元中的數(shù)據(jù)送入OUT端指定首地址的N個單元中。數(shù)據(jù)塊傳送指令可分為字節(jié)塊、字塊及雙字塊傳送指令。
數(shù)據(jù)塊傳送指令功能說明如表2-9所示。
表2-9 數(shù)據(jù)塊傳送指令功能說明

(3)字節(jié)立即傳送指令
字節(jié)立即傳送指令的功能是在EN端(使能端)有輸入時,在物理I/O端和存儲器之間立即傳送一個字節(jié)數(shù)據(jù)。字節(jié)立即傳送指令可分為字節(jié)立即讀指令和字節(jié)立即寫指令,它們不能訪問擴(kuò)展模塊。
字節(jié)立即傳送指令功能說明如表2-10所示。
表2-10 字節(jié)立即傳送指令功能說明

2.1.3.2 字節(jié)交換指令
字節(jié)交換指令SWAP,把輸入端(IN)指定的高字節(jié)內(nèi)容與低字節(jié)內(nèi)容相互交換,交換結(jié)果仍然存放在輸入端(IN)指定的地址。字節(jié)交換指令操作數(shù)的數(shù)據(jù)類型為無符號整數(shù)(WORD)。
字節(jié)交換指令功能說明如表2-11所示。
表2-11 字節(jié)交換指令功能說明

2.1.3.3 比較指令
比較指令又稱比較觸點(diǎn)指令,用來將兩個操作數(shù)(IN1、IN2)按指定的比較關(guān)系作比較,比較關(guān)系成立時則比較觸點(diǎn)閉合,因此比較指令實(shí)際上也是一種位指令。比較指令只是作為條件來使用,并不對存儲器中的具體單元進(jìn)行操作。在實(shí)際應(yīng)用中,使用比較指令為上下限控制以及數(shù)值條件判斷提供了方便。
(1)比較指令格式
比較指令格式如圖2-31所示。

圖2-31 比較指令格式
(2)比較指令說明
比較指令包括數(shù)值比較和字符串比較兩類。
數(shù)值比較指令中被比較的數(shù)據(jù)可以是字節(jié)、整數(shù)、雙字及實(shí)數(shù),其中字節(jié)比較是無符號的,而整數(shù)、雙字、實(shí)數(shù)的比較是有符號的。IN1、IN2的數(shù)據(jù)類型要匹配。
字符串比較指令用于比較兩個ASCII碼字符串。
數(shù)值比較指令的運(yùn)算符有=(等于)、>=(大于等于)、<=(小于等于)、>(大于)、<(小于)和<>(不等于)6種,而字符串比較指令只有=(等于)和<>(不等于)兩種。
對梯形圖指令來說,如果比較為真,比較觸點(diǎn)閉合,使能流通過,允許其后續(xù)指令執(zhí)行,否則比較觸點(diǎn)斷開,切斷能流。對語句表語言來說,就是根據(jù)條件對棧頂實(shí)施置1或置0的操作。
由于比較指令是以觸點(diǎn)形式出現(xiàn)在梯形圖及指令表中,因此有“LD”(裝載)、“A”(與)、“O”(或)三種基本形式。
(3)編程示例
當(dāng)比較數(shù)1和比較數(shù)2的關(guān)系符合比較的條件時,比較觸點(diǎn)閉合,后面的電路被接通。否則比較觸點(diǎn)斷開,后面的電路不接通。換句話說,比較觸點(diǎn)相當(dāng)于一個有條件的動合觸點(diǎn),當(dāng)比較關(guān)系成立時,觸點(diǎn)閉合;不成立時,觸點(diǎn)斷開。比較指令具體應(yīng)用如圖2-32所示。

圖2-32 比較指令的應(yīng)用
2.1.3.4 移位和循環(huán)移位指令
移位指令分為左、右移位和循環(huán)左、右移位兩大類。移位和循環(huán)移位指令均為無符號數(shù)操作。
(1)右移位指令
右移位指令把輸入端(IN)指定的數(shù)據(jù)右移N位,結(jié)果存放到輸出端(OUT)指定的存儲單元中。右移位指令按操作數(shù)的數(shù)據(jù)類型可分為字節(jié)、字、雙字右移位指令,如圖2-33所示。

圖2-33 右移位指令
(2)左移位指令
左移位指令把輸入端(IN)指定的數(shù)據(jù)左移N位,結(jié)果存放到輸出端(OUT)指定的存儲單元中。左移位指令按操作數(shù)的數(shù)據(jù)類型可分為字節(jié)、字、雙字左移位指令,如圖2-34所示。

圖2-34 左移位指令
字節(jié)、字、雙字移位指令的實(shí)際最大可移位數(shù)分別為8、16、32。右移位和左移位指令,對移位后的空位自動補(bǔ)零,移位后溢出位(SM1.1)的值就是最后一次移出的位值。如果移位的結(jié)果為0,零存儲器位(SM1.0)置位。
S7-200 PLC的移位一般分為以下兩步執(zhí)行。
①利用傳送指令(MOV)將需要移位的數(shù)據(jù)移動到結(jié)果存儲器中,如果僅需要對指定存儲器內(nèi)容移位,且執(zhí)行結(jié)果仍然保存在原存儲器中,則不需要執(zhí)行本步。
②對結(jié)果存儲器進(jìn)行移位。
如果移位位數(shù)N超過數(shù)據(jù)本身的長度,則需要進(jìn)行“取余”處理,例如,對字節(jié)數(shù)據(jù)指定移動12位時,實(shí)際移動為4位(12除以8后余數(shù)為4);當(dāng)N為0時,不進(jìn)行移位操作,同時系統(tǒng)標(biāo)志寄存器SM1.0被置為“1”狀態(tài)。
左、右移位指令的梯形圖編程格式如圖2-35所示。

圖2-35 移位指令編程格式
(3)循環(huán)右移指令
循環(huán)右移指令把輸入端(IN)指定的數(shù)據(jù)循環(huán)右移N位,結(jié)果存放到輸出端(OUT)指定的存儲單元中。循環(huán)右移指令按操作數(shù)的數(shù)據(jù)類型可分為字節(jié)、字、雙字循環(huán)右移指令,如圖2-36所示。

圖2-36 循環(huán)右移指令
(4)循環(huán)左移指令
循環(huán)左移指令把輸入端(IN)指定的數(shù)據(jù)循環(huán)左移N位,結(jié)果存放到輸出端(OUT)指定的存儲單元中。循環(huán)左移指令按操作數(shù)的數(shù)據(jù)類型可分為字節(jié)、字、雙字循環(huán)左移指令,如圖2-37所示。

圖2-37 循環(huán)左移指令
對于字節(jié)、字、雙字循環(huán)移位指令,如果所需移位的位數(shù)N大于或等于8、16、32,那么在執(zhí)行循環(huán)移位前,先對N取以8、16、32為底的模,其結(jié)果0~7、0~15、0~31為實(shí)際移動位數(shù)。
執(zhí)行循環(huán)移位后溢出位(SM1.1)的值就是最后一次循環(huán)移出位的值。如果移位的結(jié)果為0,零存儲器位(SM1.0)置位。移位和循環(huán)移位指令影響的特殊存儲器位:SM1.0(零)、SM1.1(溢出)。移位和循環(huán)移位指令編程舉例如圖2-38所示。

圖2-38 移位和循環(huán)移位指令編程
2.1.3.5 運(yùn)算指令
運(yùn)算指令包括算術(shù)運(yùn)算和邏輯運(yùn)算兩大類指令。算術(shù)運(yùn)算指令有加法、減法、乘法、除法和數(shù)學(xué)函數(shù)、加1、減1指令。邏輯運(yùn)算指令有邏輯與、或、非、異或指令。數(shù)據(jù)類型為字節(jié)、字、雙字。
(1)加法指令
加法指令把兩個輸入端(IN1、IN2)指定的數(shù)相加,結(jié)果送到輸出端(OUT)指定的存儲單元中。
加法指令可分為整數(shù)、雙整數(shù)、實(shí)數(shù)加法指令,如圖2-39所示。它們對應(yīng)的操作數(shù)數(shù)據(jù)類型分別為有符號整數(shù)(INT)、有符號雙整數(shù)(DINT)、實(shí)數(shù)(REAL)。

圖2-39 加法指令
①整數(shù)加法指令 整數(shù)加法指令為+I。梯形圖的指令格式如圖2-40所示。當(dāng)使能輸入有效時,將兩個單字長(16位)的有符號整數(shù)INl和IN2相加,產(chǎn)生一個16位整數(shù)結(jié)果OUT。

圖2-40 整數(shù)加法指令
②雙整數(shù)加法指令 雙整數(shù)加法指令為+D。當(dāng)使能輸入有效時,將兩個雙字長(32位)的有符號雙整數(shù)IN1和IN2相加,產(chǎn)生一個32位雙整數(shù)結(jié)果OUT。
在LAD和FBD中,以指令框形式編程,執(zhí)行結(jié)果為IN1+IN2=OUT。在STL中,執(zhí)行結(jié)果為INl+OUT=OUT。
OUT的尋址范圍:VD、ID、QD、MD、SD、SMD、LD、AC、*VD、*AC、*LD。
指令格式:+D IN1,OUT
如:+D VD0,VD4
雙整數(shù)加法指令示例如圖2-41所示。

圖2-41 雙整數(shù)加法指令
③實(shí)數(shù)加法指令 實(shí)數(shù)加法指令為+R。當(dāng)使能輸入有效時,將兩個雙字長(32位)的實(shí)數(shù)IN1和IN2相加,產(chǎn)生一個32位實(shí)數(shù)結(jié)果OUT。
在LAD和FBD中,以指令框形式編程,執(zhí)行結(jié)果為IN1+IN2=OUT。
OUT的尋址范圍:VD、ID、QD、MD、SD、SMD、LD、AC、*VD、*AC、*LD。
本指令影響的特殊存儲器位:SM1.0(零)、SM1.1(溢出)、SM1.2(負(fù))。
實(shí)數(shù)加法指令示例如圖2-42所示。

圖2-42 實(shí)數(shù)加法指令
(2)減法指令
減法指令把兩個輸入端(IN1、IN2)指定的數(shù)相減,結(jié)果送到輸出端(OUT)指定的存儲單元中。
減法指令可分為整數(shù)、雙整數(shù)、實(shí)數(shù)減法指令,如圖2-43所示。它們對應(yīng)的操作數(shù)數(shù)據(jù)類型分別為有符號整數(shù)(INT)、有符號雙整數(shù)(DINT)、實(shí)數(shù)(REAL)。

圖2-43 減法指令
執(zhí)行減法操作時,將操作數(shù)IN1與OUT共用一個地址單元,因而語句表中
OUT-IN2=OUT
指令格式如下:
-I IN2,OUT(整數(shù)減法)
-D IN2,OUT(雙整數(shù)減法)
-R IN2,OUT(實(shí)數(shù)減法)
整數(shù)減法指令示例如圖2-44所示。

圖2-44 整數(shù)減法指令
(3)乘法指令
乘法指令把兩個輸入端(IN1、IN2)指定的數(shù)相乘,結(jié)果送到輸出端(OUT)指定的存儲單元中。
乘法指令可分為整數(shù)、雙整數(shù)、實(shí)數(shù)乘法指令和整數(shù)完全乘法指令,如圖2-45所示。

圖2-45 乘法指令
①整數(shù)乘法 整數(shù)乘法指令為*I。當(dāng)使能輸入有效時,將兩個單字長(16位)的有符號整數(shù)IN1和IN2相乘,產(chǎn)生一個16位整數(shù)結(jié)果OUT。
指令格式:*I IN1,OUT
如: *I VW40,AC0
整數(shù)乘法指令示例如圖2-46所示。

圖2-46 整數(shù)乘法指令
②整數(shù)完全乘法 整數(shù)完全乘法指令為MUL。當(dāng)使能輸入有效時,將兩個單字長(16位)的有符號整數(shù)IN1和IN2相乘,產(chǎn)生一個32位雙整數(shù)結(jié)果OUT。
在LAD和FBD中,以指令框形式編程,執(zhí)行結(jié)果為:IN1*IN2=OUT。
OUT的尋址范圍:VD、ID、QD、MD、SD、SMD、LD、AC、*VD、*AC、*LD。
本指令影響的特殊存儲器位:SM1.0(零)、SM1.1(溢出)、SM1.2(負(fù))、SM1.3(被0除)。
指令格式:MUL IN1,OUT
如: MUL AC0,VD100
整數(shù)完全乘法指令示例如圖2-47所示。

圖2-47 整數(shù)完全乘法指令
③雙整數(shù)乘法 雙整數(shù)乘法指令為*D。當(dāng)使能輸入有效時,將兩個雙字長(32位)的有符號整數(shù)IN1和IN2相乘,產(chǎn)生一個32位雙整數(shù)結(jié)果OUT。在STL中,執(zhí)行結(jié)果為:IN1*OUT=OUT。
IN1和IN2的尋址范圍:VD、ID、QD、MD、SD、SMD、LD、AC、*VD、*AC、*LD和常數(shù)。
OUT的尋址范圍:VD、ID、QD、MD、SD、SMD、LD、AC、*VD、*AC、*LD。
本指令影響的特殊存儲器位:SM1.0(零)、SM1.1(溢出)、SM1.2(負(fù))、SM1.3(被0除)。
指令格式:*D IN1,OUT
如: *D VD10,AC0
雙整數(shù)乘法指令示例如圖2-48所示。

圖2-48 雙整數(shù)乘法指令
④實(shí)數(shù)乘法 實(shí)數(shù)乘法指令為*R。當(dāng)使能輸入有效時,將兩個雙字長(32位)的實(shí)數(shù)IN1和IN2相乘,產(chǎn)生一個32位實(shí)數(shù)結(jié)果OUT。
在LAD和FBD中,以指令框形式編程,執(zhí)行結(jié)果為IN1*IN2=OUT。
在STL中,執(zhí)行結(jié)果為IN1*OUT=OUT。
IN1和IN2的尋址范圍:VD、ID、QD、MD、SD、SMD、LD、AC、*VD、*AC、*LD和常數(shù)。
OUT的尋址范圍:VD、ID、QD、MD、SD、SMD、LD、AC、*VD、*AC、*LD。
本指令影響的特殊存儲器位:SM1.0(零)、SM1.1(溢出)、SM1.2(負(fù))、SM1.3(被0除)。
指令格式:*R IN1,OUT
如: *R VD10,AC0
實(shí)數(shù)乘法指令示例如圖2-49所示。

圖2-49 實(shí)數(shù)乘法指令
(4)除法指令
除法指令把兩個輸入端(IN1、IN2)指定的數(shù)相除,結(jié)果送到輸出端(OUT)指定的存儲單元中。
除法指令可分為整數(shù)、雙整數(shù)、實(shí)數(shù)除法指令和整數(shù)完全除法指令,如圖2-50所示。

圖2-50 除法指令
指令格式如下:
/I IN2,OUT(整數(shù)除法)
DIV IN2,OUT(整數(shù)完全除法)
/D IN2,OUT(雙整數(shù)除法)
/R IN2,OUT(實(shí)數(shù)除法)
如:DIV VW10,VD100
/I VW20,VW200
整數(shù)完全除法指令把輸入端(IN1、IN2)指定的兩個16位整數(shù)相除,產(chǎn)生一個32位雙整數(shù)結(jié)果,并送到輸出端(OUT)指定的存儲單元中,其中高16位是余數(shù),低16位是商。
執(zhí)行除法操作時,將操作數(shù)IN1與OUT共用一個地址單元(整數(shù)完全除法指令的IN1與OUT的低16位用的是同地址單元),因而語句表中OUT/IN2=OUT。除法指令影響的特殊存儲器位:SM1.0(零)、SM1.1(溢出)、SM1.2(負(fù))、SM1.3(除數(shù)為0)。
整數(shù)除法指令示例如圖2-51所示,整數(shù)完全除法指令示例如圖2-52所示。

圖2-51 整數(shù)除法指令

圖2-52 整數(shù)完全除法指令
四則運(yùn)算指令編程舉例如圖2-53所示。

圖2-53 四則運(yùn)算指令編程舉例(LAD、STL)
圖2-53中,實(shí)數(shù)除法指令中IN1(VD300)與OUT(VD400)用的不是同一地址單元。操作時,先用MOV?R指令將IN1(VD300)傳送到OUT(VD400),然后再執(zhí)行除法操作。事實(shí)上,加法、減法、乘法等指令遇到上述情況,也可作類似的處理。
(5)加1和減1指令
加1和減1指令把輸入端(IN)數(shù)據(jù)加1或減1,并把結(jié)果存放到輸出端(OUT)指定的存儲單元中,加1和減1指令按操作數(shù)的數(shù)據(jù)類型可分為字節(jié)、字、雙字加1/減1指令,如圖2-54所示。

圖2-54 加1、減1指令
執(zhí)行加1和減1指令操作時,將操作數(shù)IN和OUT共用一個地址單元,因而在語句表中OUT+1=OUT,OUT-1=OUT。
字節(jié)加1和減1指令的操作數(shù)數(shù)據(jù)類型為無符號字節(jié)(BYTE)型,指令影響的特殊存儲器位:SM1.0(零)、SM1.1(溢出)。
字、雙字加1和減1指令的操作數(shù)數(shù)據(jù)類型分別為有符號整數(shù)(INT)、有符號雙整數(shù)(DINT),指令影響的特殊存儲器位:SM1.0(零)、SM1.1(溢出)、SM1.2(負(fù))。
(6)數(shù)學(xué)函數(shù)指令
數(shù)學(xué)函數(shù)指令包括平方根、自然對數(shù)、自然指數(shù)、三角函數(shù)指令,如圖2-55所示。數(shù)學(xué)函數(shù)指令的操作數(shù)均為實(shí)數(shù)(REAL)。

圖2-55 數(shù)學(xué)函數(shù)指令
①平方根(Square Root)指令 實(shí)數(shù)的平方根指令(SQRT),將輸入端(IN)的32位實(shí)數(shù)開方,得到32位實(shí)數(shù)結(jié)果,并把結(jié)果存放到輸出端(OUT)指定的存儲單元中。
②自然對數(shù)(Natural Logarithm)指令 自然對數(shù)指令(LN),將輸入端(IN)的32位實(shí)數(shù)取自然對數(shù),結(jié)果存放到輸出端(OUT)指定的存儲單元中。
求常用對數(shù)(lgx)時,只要將其對應(yīng)的自然對數(shù)(lnx)除以2.302585即可。求常用對數(shù)示例如圖2-56所示。

圖2-56 求常用對數(shù)
③自然指數(shù)(Natural Exponential)指令 自然指數(shù)指令(Exp),將輸入端(IN)的32位實(shí)數(shù)取以e為底的指數(shù),結(jié)果存放到輸出端(OUT)指定的存儲單元中。
自然指數(shù)指令與自然對數(shù)指令相配合,即可完成以任意實(shí)數(shù)為底的指數(shù)運(yùn)算。
④正弦、余弦、正切指令 正弦、余弦、正切指令,對輸入端(IN)指定的32位實(shí)數(shù)的弧度值取正弦、余弦、正切,結(jié)果存放到輸出端(OUT)指定的存儲單元中。
如果輸入值為角度值,應(yīng)將該角度值轉(zhuǎn)換為弧度值。
數(shù)學(xué)函數(shù)指令影響的特殊存儲器位:SM1.0(零)、SM1.1(溢出)、SM1.2(負(fù))。
求正弦函數(shù)示例如圖2-57所示。

圖2-57 求正弦函數(shù)
(7)邏輯運(yùn)算指令
邏輯運(yùn)算是對無符號數(shù)進(jìn)行的邏輯處理,主要包括邏輯“與”、邏輯“或”、邏輯“異或”和取反等指令。
①邏輯“與”指令 邏輯“與”指令對兩個輸入端(IN1、IN2)的數(shù)據(jù)按位“與”,結(jié)果存放到輸出端(OUT)指定的存儲單元中。
邏輯“與”指令按操作數(shù)的數(shù)據(jù)類型可分為字節(jié)“與”、字“與”、雙字“與”指令,如圖2-58所示。

圖2-58 邏輯“與”指令
②邏輯“或”指令 邏輯“或”指令對兩個輸入端(IN1、IN2)的數(shù)據(jù)按位“或”,結(jié)果存放到輸出端(OUT)指定的存儲單元中。
邏輯“或”指令按操作數(shù)的數(shù)據(jù)類型可分為字節(jié)“或”、字“或”、雙字“或”指令,如圖2-59所示。

圖2-59 邏輯“或”指令
③邏輯“異或”指令 邏輯“異或”指令對兩個輸入端(IN1、IN2)的數(shù)據(jù)按位“異或”,結(jié)果存放到輸出端(OUT)指定的存儲單元中。
邏輯“異或”指令按操作數(shù)的數(shù)據(jù)類型可分為字節(jié)“異或”、字“異或”、雙字“異或”指令,如圖2-60所示。

圖2-60 邏輯“異或”指令
④取反指令 取反指令對輸入端(IN)指定的數(shù)據(jù)按位取反,結(jié)果存放到輸出端(OUT)指定的存儲單元中。
取反指令按操作數(shù)的數(shù)據(jù)類型可分為字節(jié)、字、雙字取反指令,如圖2-61所示。

圖2-61 取反指令
邏輯運(yùn)算指令的操作如圖2-62所示,圖中,指令A(yù)NDW AC1,AC0的結(jié)果存放在AC0中。

圖2-62 邏輯運(yùn)算指令的操作
邏輯運(yùn)算指令影響的特殊存儲器位:SM1.0(零)。
字“或”/雙字“異或”/字取反/字節(jié)“與”操作如圖2-63所示。

圖2-63 字“或”/雙字“異或”/字取反/字節(jié)“與”操作
- 嵌入式軟件系統(tǒng)測試:基于形式化方法的自動化測試解決方案
- 零基礎(chǔ)入門學(xué)習(xí)Python(第2版)
- 區(qū)塊鏈技術(shù)與應(yīng)用
- Swift 4從零到精通iOS開發(fā)
- 零基礎(chǔ)學(xué)C語言(第4版)
- WildFly Cookbook
- Android移動應(yīng)用項(xiàng)目化教程
- UML軟件建模
- PowerDesigner 16 從入門到精通
- Visual Basic程序設(shè)計(jì)基礎(chǔ)
- 趣學(xué)數(shù)據(jù)結(jié)構(gòu)
- MATLAB計(jì)算機(jī)視覺實(shí)戰(zhàn)
- 鋁合金陽極氧化與表面處理技術(shù)(第三版)
- 開發(fā)者測試
- Learning Google Apps Script