功能指令及應(yīng)用_第1頁
功能指令及應(yīng)用_第2頁
功能指令及應(yīng)用_第3頁
功能指令及應(yīng)用_第4頁
功能指令及應(yīng)用_第5頁
已閱讀5頁,還剩205頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第6章可編程序控制器的功能指令

6.1S7-200的指令規(guī)約與數(shù)據(jù)類型檢查

6.2程序控制指令

6.3局部變量表與子程序

6.4數(shù)據(jù)處理指令

6.5數(shù)學運算指令

6.6中斷程序與中斷指令

6.7高速計數(shù)器與高速脈沖輸出指令

返回

6.1S7-200的指令規(guī)約

6.1.1使能輸入與使能輸出6.1.2梯形圖中的網(wǎng)絡(luò)與指令6.1.3其他規(guī)約返回后一頁前一頁1.EN與ENO

在梯形圖中,用方框表示功能指令,在SIMATIC指令系統(tǒng)中將這些方框稱為“盒子”(Box),在IECll31-3指令系統(tǒng)中將它們稱為“功能塊”。功能塊的輸入端均在左邊,輸出端均在右邊(見圖6-1)。梯形圖中有一條提供“能流”的左側(cè)垂直母線,圖中I2.4的常開觸點接通時,能流流到功能塊DEC_B的數(shù)字量輸入端EN(EnableIN,使能輸入),該輸入端有能流時,功能指令DEC_B才能被執(zhí)行。返回后一頁前一頁

如果功能塊在EN處有能流而且執(zhí)行時無錯誤,則ENO(EnableOUT,使能輸出)將能流傳遞給下一元件。如果執(zhí)行過程中有錯誤,能流在出現(xiàn)錯誤的功能塊終止。

ENO可作為下一功能塊的EN輸入,即幾個功能塊可以串聯(lián)在一行中(見圖6-1),只有前一功能塊被正確執(zhí)行,后一功能塊才能被執(zhí)行。EN和ENO的操作數(shù)均為能流,數(shù)據(jù)類型為BOOL(布爾)型。圖中的功能塊DEC_B表示將字節(jié)變量VB0的值減1,并將結(jié)果送回VB0,該功能塊的輸入和輸出可以是不同的變量。返回后一頁前一頁語句表(STL)中沒有EN輸入,對于要執(zhí)行的STL指令,棧頂?shù)闹当仨殲?,指令才能執(zhí)行。與梯形圖中的ENO相對應(yīng),語句表設(shè)置了ENO位,可用AENO(AndENO)指令存取ENO位,AENO用來產(chǎn)生與功能塊的ENO相同的效果。圖6-1中的梯形圖對應(yīng)的語句表為:LDI2.4DEC_BVB0AENOMOV_BVB0,VB2

返回后一頁前一頁S7-200系統(tǒng)手冊的指令部分給出了指令的描述,使ENO=0的錯誤條件、受影響的SM位、該指令支持的CPU型號和操作數(shù)表,該表中給出了每個操作數(shù)允許的存儲器區(qū)、尋址方和數(shù)據(jù)類型。2.網(wǎng)絡(luò)在梯形圖中,程序被劃分為稱為網(wǎng)絡(luò)(Network)的獨立的段,網(wǎng)絡(luò)由觸點、線圈和功能塊組成。在梯形圖中給出了網(wǎng)絡(luò)的編號,如網(wǎng)絡(luò)2。能流只能從左往右流動,網(wǎng)絡(luò)中不能有斷路、開路和反方向的能流。允許以網(wǎng)絡(luò)為單位給梯形圖程序加注釋。返回

STL程序不使用網(wǎng)絡(luò),如果用Network這個關(guān)鍵詞對程序分段,可以將STL程序轉(zhuǎn)換為梯形圖程序。返回

返回3.指令的輸入與輸出必須有能流輸入才能執(zhí)行的功能塊或線圈指令稱為條件輸入指令,它們不能直接連接到左側(cè)母線上,如果需要無條件執(zhí)行這些指令,可以用接在左側(cè)母線上的SM0.0(該位始終為1)的常開觸點來驅(qū)動它們。有的線圈或功能塊的執(zhí)行與能流無關(guān),如標號指令LBL和順序控制指令SCR等,稱為無條件輸入指令,應(yīng)將它們直接接在左側(cè)母線上。不能級連的指令塊ENO沒有輸出端和能流流出。JMP、CRET、LBL、NEXT、SCR和SCRE等屬于這類指令。返回返回

觸點比較指令沒有能流輸入時,輸出為0,有能流輸入時,輸出與比較結(jié)果有關(guān)。4、其他規(guī)約SIMATIC程序編輯器中的直接地址由存儲器區(qū)和地址組成,如I0.0。IEC程序編輯器用%表示直接地址,如%I0.0“INPUT1”為全局符號名,符號“#INPUT1”中的“#”號表示該符號是局部變量。梯形圖中的規(guī)約:“”是一個開路符號,或需要能流連接。返回

“|”表示輸出是一個可選的能流,用于指令的級連。符號“<<”或“>>”表示有一個值或能流可以使用。返回6.2程序控制指令

表6-11是程序控制指令的列表。下面對各種程序控制指令分別加以說明。6.2.1循環(huán)指令在控制系統(tǒng)中經(jīng)常遇到需要重復(fù)執(zhí)行若干次同樣的任務(wù)的情況,這時可以使用循環(huán)指令。名

稱循環(huán)開始循環(huán)結(jié)束指令FORNEXT指令表格式FORINDX,INIT,F(xiàn)INALNEXT梯形圖格式FOR指令表示循環(huán)的開始,NEXT指令表示循環(huán)的結(jié)束,并將堆棧的棧頂值設(shè)為1。驅(qū)動FOR指令的邏輯條件滿足時,反復(fù)執(zhí)行FOR與NEXT之間的指令。在FOR指令中,需要設(shè)置指針或當前循環(huán)次數(shù)計數(shù)器(1NDX)、起始值(1NIT)和結(jié)束值(FINAL)。返回后一頁前一頁假設(shè)INIT等于1,F(xiàn)INAL等于10,每次執(zhí)行FOR與NEXT之間的指令后,INDX的值加1,并將結(jié)果與結(jié)束值比較。如果INDX大于結(jié)束值,則循環(huán)終止,F(xiàn)OR與NEXT之間的指令將被執(zhí)行10次。如果起始值大于結(jié)束值,則不執(zhí)行循環(huán)。

令輸入/輸出操作數(shù)數(shù)據(jù)類型FORINDXVW、IW、QW、MW、SW、SMW、LW、T,C,AC,*VD,*AC,*LDINTINITVW、IW、QW、MW、SW、SMW、LW、T,C,AIW,AC,常數(shù),*VD,*AC,*LDINTFINALVW、IW、QW、MW、SW、SMW、LW、T,C,AIW,AC,常數(shù),*VD,*AC,*LDINT返回后一頁前一頁FORENENOINDXINITFINALFORENENOINDXINITFINAL21(NEXT)

(NEXT)

返回(2)再次啟動循環(huán)時,它將初始值INIT傳送到指針I(yè)NDX中。

FOR指令必須與NEXT指令配套使用。允許循環(huán)嵌套,即FOR/NEXT循環(huán)在另一個FOR/NEXT循環(huán)之中,最多可嵌套8層。下面是使用FOR/NEXT循環(huán)的注意事項:(1)如果啟動了FOR/NEXT循環(huán),除非在循環(huán)內(nèi)部修改了結(jié)束值,否則循環(huán)就一直進行,直到循環(huán)結(jié)束。在循環(huán)的執(zhí)行過程中,可以改變循環(huán)的參數(shù)。解讀下列梯形圖程序功能返回6.2.2跳轉(zhuǎn)與標號指令條件滿足(棧頂?shù)闹禐?)時,跳轉(zhuǎn)指令JMP(Jump)使程序流程轉(zhuǎn)到對應(yīng)的標號LBL(1abel)處,標號指令用來指示跳轉(zhuǎn)指令的目的位置。JMP與LBL指令中的操作數(shù)n為常數(shù)0~255,JMP和對應(yīng)的LBL指令必須在同一程序塊中。名

稱跳

轉(zhuǎn)標

號指令JMPLBL指令表格式JMPNLBLN梯形圖格式(1)JMP和LBL指令必須成對使用于主程序、子程序或中斷程序中。主程序、子程序或中斷程序之間不允許相互跳轉(zhuǎn)。若在步進程序中使用跳轉(zhuǎn)指令,則必須使JMP和LBL指令在同一個SCR段中。(2)多條跳轉(zhuǎn)指令可對應(yīng)同一標號,但不允許一個跳轉(zhuǎn)指令對應(yīng)多個相同標號,即在程序中不能出現(xiàn)兩個相同的標號。(3)執(zhí)行跳轉(zhuǎn)指令時,跳過的程序段中各元件的狀態(tài)如下。①各輸出線圈保持跳轉(zhuǎn)前的狀態(tài)。②計數(shù)器停止計數(shù),當前值保持跳轉(zhuǎn)之前的計數(shù)值。③1ms、10ms定時器保持跳轉(zhuǎn)之前的工作狀態(tài),原來工作的繼續(xù)工作,到設(shè)置值后可以正常動作,當前值要累計到32767才停止。100ms定時器在跳轉(zhuǎn)時停止工作,但不會復(fù)位,當前值保持不變,跳轉(zhuǎn)結(jié)束后若條件允許可繼續(xù)計時,但已不能準確計時了。(4)標號指令LBL一般放置在JMP指令之后,以減少程序執(zhí)行時間。若要放置在JMP指令之前,則必須嚴格控制跳轉(zhuǎn)指令的運行時間,否則會引起運行瓶頸,導致掃描周期過長。跳轉(zhuǎn)、標號指令使用注意事項(1)CRET多用于子程序內(nèi)部,在條件滿足時起結(jié)束子程序的作用。在子程序的最后,編程軟件將自動添加子程序無條件結(jié)束指令RET。(2)子程序可以嵌套運行,即在子程序內(nèi)部又對另一子程序進行調(diào)用。子程序的嵌套深度最多為8層。在中斷程序中僅能有一次子程序調(diào)用??梢赃M行子程序自身的遞歸調(diào)用,但使用時要慎重。子程序指令使用注意事項

(3)當一個子程序被調(diào)用時,系統(tǒng)自動保存當前的堆棧數(shù)據(jù),并把棧頂值置1,堆棧中的其他值為0,子程序完全占有控制權(quán)。子程序執(zhí)行結(jié)束時,通過子程序結(jié)束指令自動恢復(fù)原來的邏輯堆棧值,調(diào)用程序重新取得控制權(quán)。

(4)累加器AC可以在調(diào)用程序和被調(diào)子程序之間自由傳遞數(shù)據(jù),所以累加器的值在子程序調(diào)用時既不保存又不恢復(fù)。

5)帶參數(shù)的子程序調(diào)用可以帶參數(shù)調(diào)用子程序,這種方式擴大了子程序的使用范圍,增加了調(diào)用的靈活性。返回后一頁前一頁6.2.3停止指令停止指令STOP使可編程序控制器從運行模式進入停止模式,立即終止程序的執(zhí)行。如果在中斷程序中執(zhí)行停止指令,中斷程序立即終止,并忽略全部等待執(zhí)行的中斷,繼續(xù)執(zhí)行主程序的剩余部分,并在主程序的結(jié)束處,完成從運行方式至停止方式的轉(zhuǎn)換。

返回后一頁前一頁6.2.4監(jiān)控定時器復(fù)位指令監(jiān)控定時器(Watchdog)又稱看門狗,它的定時時間為300ms,每次掃描它都被自動復(fù)位一次,正常工作時如果掃描周期小于300ms,監(jiān)控定時器不起作用。如果強烈的外部干擾使可編程序控制器偏離正常的程序執(zhí)行路線,監(jiān)控定時器不再被周期性地復(fù)位,定時時間到時,可編程序控制器將停止運行。在以下情況下掃描周期可能大于300ms,監(jiān)控定時器會停止執(zhí)行用戶程序:(1)用戶程序很長。(2)出現(xiàn)中斷事件時,執(zhí)行中斷程序的時間較長。返回(3)循環(huán)指令使掃描時間延長。為了防止在正常情況下監(jiān)控定時器動作,可將監(jiān)控定時器復(fù)位(WDR)指令插入到程序中適當?shù)牡胤?,使監(jiān)控定時器復(fù)位。如果FOR/NEXT循環(huán)程序的執(zhí)行時間可能超過監(jiān)控定時器的定時時間,可將WDR指令插入到循環(huán)程序中。條件跳轉(zhuǎn)指令JMP若在它對應(yīng)的標號之后(即程序往回跳),可能因連續(xù)反復(fù)跳步使它們之間的程序被反復(fù)執(zhí)行,總的執(zhí)行時間超過監(jiān)控定時器的定時時間。為了避免出現(xiàn)這樣的情況,可在JMP指令和對應(yīng)的標號之間插入WDR指令。使用WDR指令后,在終止本次掃描之前,下列操作將被禁止:返回后一頁前一頁(1)通信(自由口模式除外)(2)I/O更新(立即I/O除外)(3)強制更新。(4)SM位更新(不能更新SM0)(5)運行時間診斷。(6)在中斷程序中的STOP指令(7)如果掃描時間超過25s,10ms定時器和100ms定時器不能正確累計時間。如果將CPU的方式開關(guān)切換到STOP位置,1.4s內(nèi)CPU轉(zhuǎn)到停止模式。返回后一頁前一頁6.3局部變量表與子程序

6.3.1局部變量表1.局部變量與全局變量程序中的每個POU(ProgramOrganizationalUnit,程序組織單元)均有自己的由64字節(jié)L儲器組成的局部變量表。它們用來定義有范圍限制的變量,局部變量只在它被創(chuàng)建的POU中有效。與之相反,全局符號在各POU中均有效,只能在符號表/全局變量表中定義。全局符號與局部變量名稱相同時,在定義局部變量的POU中,該局部變量的定義優(yōu)先,該全局定義則在其它POU中使用。返回局部變量適用于以下兩種情況:(1)在子程序中只用局部變量,不用絕對地址或全局符號,子程序可移植到別的項目去。(2)如果使用臨時變量(TEMP),同一片物理存儲器可在不同的程序中重復(fù)使用。如果不是上述兩種情況,不需要使用局部變量。通過在符號表(SIMATIC)或全局變量表(IEC)中進行定義,可使符號成為全局變量。2.局部變量的類型TEMP(臨時變量):暫時保存在局部數(shù)據(jù)區(qū)中的變量。只有在執(zhí)行該POU時,定義的臨時變量才被使用,POU執(zhí)行完后,不再使用臨時變量的數(shù)值。返回在主程序或中斷程序中,局部變量表只包含TEMP變量。子程序中的局部變量表還有下面的3種變量:IN(輸入變量):由調(diào)用它的POU提供的輸人參數(shù)。OUT(輸出變量):返回給調(diào)用它的POU的輸出參數(shù)。IN_OUT(輸入/輸出變量):其初始值由調(diào)用它的POU提供,被子程序修改后返回給調(diào)用它的POU。3.局部變量的賦值在局部變量表中賦值時,只需指定聲明局部變量的類型(TEMP,IN,IN_OUT或OUT)和數(shù)據(jù)類型(參見SIMATIC和IEC1131—3的數(shù)據(jù)類型),但不指定存儲器地址,程序編輯器自在L存儲區(qū)中為所有局部變量指定存儲器位置。返回4.在局部變量表中增加新的變量對于主程序與中斷程序,局部變量表顯示一組已被預(yù)先定義為TEMP(臨時)變量的行。表中增加行,只需用右鍵單擊表中的某一行,選擇“插入一行”指令,在所選行的上部插入行,選擇“插入一行下”指令,在所選行的下部插入新的行。對于子程序,局部變量表顯示數(shù)據(jù)類型被預(yù)先定義為IN、IN_OUT、OUT和TEMP的一行,不能改變它們的順序。如果要增加新的局部變量,必須用鼠標右鍵單擊已有的行,并出菜單在所擊行的上下插入相同類型的另一局部變量。返回5.局部變量數(shù)據(jù)類型檢查局部變量作為參數(shù)向子程序傳遞時,在該子程序的局部變量表中指定的數(shù)據(jù)類型必須與調(diào)用POU中的數(shù)據(jù)類型值匹配。例如從主程序OB1調(diào)用子程序SBR0,使用名為INPUT1的全局符號作為子程序的輸人參數(shù)。在SBR0的局部變量表中,已經(jīng)定義了一個名為FIRST的局部變量作為該輸入?yún)?shù)。當OB1調(diào)用SBR0時,INPUT1的數(shù)值被傳入FIRST,INPUT1和FIRST的數(shù)據(jù)類型必須匹配。

返回6.顯示或隱藏局部變量表將水平分裂條拉至程序編輯器視窗的頂部,則不再顯示局部變量表,但它仍然存在。將分裂條下拉,將再次顯示局部變量表。

7.在局部變量表中進行賦值在程序中使用符號名時,程序編輯器首先檢查有關(guān)POU的局部變量表,然后檢查符號表/全局變量表。如果某符號名在兩處都沒有定義,程序編輯器則將其視為全局符號,程序編輯器指定一條綠色波浪狀下畫線,并將名稱括在雙引號中,例如“UndefinedLocalVar'’(未定義的局部變量)。如果后來對該符號名賦了值,程序編輯器不會自動再次讀取局部變量表并修改它。返回為了將該符號名作為局部變量使用,必須手工刪除程序代碼中的引號,并在符號名前插入#號,例如改為#UndefinedLocalVar。各子程序最多可調(diào)用16個輸入/輸出參數(shù),如果超出16個,將返回錯誤。選擇希望的變量類型所在的行,并在名稱域中鍵入變量名稱,在數(shù)據(jù)類型域中鍵入數(shù)據(jù)類型。不需在局部變量表中的變量名稱前加#號,#號只在程序代碼中的局部變量名之前使用。局部變量名可包含數(shù)字、字母和下畫號(“-”),也可以包含擴展字符(ASCll128—ASCll255)。第一個字符必須是字母或擴展字符,關(guān)鍵字不能作為符號名。返回局部變量表中的變量名被下載和存儲在CPU存儲器中,使用較長的變量名將占用較多的存儲空間。6.3.2子程序的編寫與調(diào)用

S7-200CPU的控制程序由主程序、子程序和中斷程序組成。STEP7—Micro/WIN32在程序編輯器窗口里為每個POU(程序組織單元)提供一個獨立的頁。主程序總是第1頁,后面是子程序或中斷程序。因為各個程序在編輯器窗口里被分開,編譯時在程序結(jié)束的地方自動加入無條件結(jié)束指令END、MEND、RET或RETI。如果在程序里加了這些指令,編譯時反而會出錯。名

稱子程序調(diào)用子程序結(jié)束指令CALLCRET指令表格式CALLSBR_NCRET梯形圖格式CALL子程序調(diào)用指令,當EN端口執(zhí)行條件存在時,將主程序轉(zhuǎn)到子程序入口開始執(zhí)行子程序。SBR_N是子程序名,標志子程序入口地址。在編輯軟件中,SBR_N隨著子程序名稱的修改而自動改變。

CRET有條件子程序返回指令,在其邏輯條件成立時,結(jié)束子程序執(zhí)行,返回主程序中的子程序調(diào)用處繼續(xù)向下執(zhí)行。返回1.子程序的作用子程序常用于需要多次反復(fù)執(zhí)行相同任務(wù)的地方,只需要寫一次子程序,別的程序在需要子程序的時候調(diào)用它,而無需重寫該程序。子程序的調(diào)用是有條件的,未調(diào)用它時不會執(zhí)行子程序中的指令,因此使用子程序可以減少掃描時間。使用子程序可以將程序分成容易管理的小塊,使程序結(jié)構(gòu)簡單清晰,易于查錯和維護。如果子程序中只引用參數(shù)和局部變量,可以將子程序移植到其他項目。為了移植子程序,應(yīng)避免使用全局符號和變量,如I、Q、M、SM、AI、AQ、V、T、C、S、AC等存儲器中的絕對地址。正確使用子程序指令返回2.子程序的創(chuàng)建可采用下列方法創(chuàng)建子程序:在“編輯”菜單中選擇“插入一子程序”;在程序編輯器視窗中按鼠標右鍵,從彈出菜單中選擇“插入一子程序”。程序編輯器將從原來的POU顯示進入新的子程序,程序編輯器底部將出現(xiàn)標志新的子程序的新標簽,在程序編輯器窗口中可以對新的子程序編程。可以使用該子程序的局部變量表定義參數(shù),各子程序最多可以定義16個IN、OUT參數(shù)。用右鍵雙擊指令樹中的子程序或中斷程序的圖標,在彈出的窗口中選擇“重新命名”,可修改它們的名稱。返回假設(shè)創(chuàng)建了一個名為CULCU的子程序,首先在該子程序的局部變量表中,定義一個名為“輸入”的雙字IN(輸人)變量、一個名為“輸出”的雙字OUT(輸出)變量和一個名為TMP1的雙字TEMP(臨時)變量(見圖6-5)。在圖6-6的子程序中,輸入變量被乘以12000,再除以13257,運算結(jié)果作為子程序的輸出。返回3.子程序的調(diào)用可以在主程序、另一子程序或中斷程序中調(diào)用子程序,但是不能在子程序中調(diào)用自己(即不允許遞歸調(diào)用)。調(diào)用子程序時將執(zhí)行子程序的全部指令,直至子程序結(jié)束,然后返回調(diào)用程序中子程序調(diào)用指令的下一條指令之處。返回

在梯形圖程序中插入子程序調(diào)用指令時,首先打開程序編輯器視窗中需要調(diào)用子程序的POU,找到需要調(diào)用子程序的地方。在指令樹的最下面用左鍵打開子程序文件夾,將需要調(diào)用的子程序圖標從指令樹拖到程序編輯器中的正確位置?;?qū)⒐鈽酥糜诔绦蚓庉嬈饕暣爸?,然后雙擊指令樹中的調(diào)用指令。應(yīng)為子程序調(diào)用指令的各參數(shù)指定有效的操作數(shù),有效操作數(shù)為存儲器地址、常量、全局符號和調(diào)用指令所在的POU中的局部變量(不是被調(diào)用子程序中的局部變量)。

如果在使用子程序調(diào)用指令后修改該子程序中的局部變量表,調(diào)用指令將變?yōu)闊o效。必須刪除無效調(diào)用,并用能反映正確參數(shù)的新的調(diào)用指令代替。返回在語句表程序中調(diào)用子程序時使用調(diào)用指令“SBRn”。在調(diào)用子程序時,CPU保存整個邏輯堆棧后,將棧頂值置為1,堆棧中的其他值清0,控制轉(zhuǎn)移至被調(diào)用的子程序。子程序執(zhí)行完成時,用調(diào)用時保存的數(shù)據(jù)恢復(fù)堆棧,控制返回調(diào)用程序。子程序和調(diào)用程序共用累加器,不會因使用子程序自動保存或恢復(fù)累加器。4.調(diào)用帶參數(shù)的子程序調(diào)用帶參數(shù)的子程序時需要設(shè)置調(diào)用的參數(shù),參數(shù)在子程序的局部變量表中定義,最多可傳遞16個參數(shù)。局部變量(L)地址變量名(Name)參數(shù)類型(Var.Type)數(shù)據(jù)類型(DataType)說明(Comments)無ENINBOOL指令使能輸入?yún)?shù)LB0INPUT1INBYTEL1.0INPUT2INBOOLLD2INPUT3INDWORDLW6TRANSIN_OUTWORDLD8OUTPUT1OUTDWORDLD12OUTPUT2OUTDWORD返回IN(輸入)是傳入子程序的輸入?yún)?shù)。如果參數(shù)是直接尋址,如VBl0,指定地址的值被傳入子程序。如果參數(shù)是間接尋址,如*AC1,指針指定地址的值被傳入子程序。如果參數(shù)是常數(shù)(例如DW#12345)或地址(如&VBl00),它們的值被傳給子程序,“#”為常數(shù)描述符。

OUT(輸出)是子程序的執(zhí)行結(jié)果,它被返回給調(diào)用它的POU。常數(shù)和地址(如&VBl00)不能作輸出量。IN_OUT(輸入/輸出)將參數(shù)的初始值傳給予程序,子程序的執(zhí)行結(jié)果返回給同一地址。常數(shù)和地址不能作輸入/輸出參數(shù)。在子程序中可以使用參數(shù)IN、IN_OUT和OUT。返回TEMP是局部存儲變量,不能用來傳遞參數(shù),它們只能在子程序中使用。子程序傳遞的參數(shù)放在子程序的局部變量表中,局部變量表最左邊的一列是每個被傳遞的參數(shù)的局部存儲器地址。調(diào)用子程序時,輸入?yún)?shù)被拷貝到子程序的局部存儲器,子程序執(zhí)行完后,從局部存儲器區(qū)拷貝輸出參數(shù)到指定的輸出參數(shù)地址。數(shù)據(jù)單元的大小和類型用參數(shù)的代碼表示。在子程序中局部參數(shù)存儲器的參數(shù)值分配如下:(1)按子程序指令的調(diào)用順序,給參數(shù)值分配局部存儲器,起始地址是L0。返回(2)1~8個連續(xù)的位參數(shù)分配一個字節(jié),字節(jié)中的位地址為Lx.0~Lx.7。

(3)字節(jié)、字和雙字值在局部存儲器中按字節(jié)順序分配,如LBx,LWx或LDx。在帶參數(shù)調(diào)用子程序指令中,參數(shù)必須按一定的順序排列,輸入?yún)?shù)在最前面,其次是輸入/輸出參數(shù),最后是輸出參數(shù)。如果用語句表編程,子程序調(diào)用指令的格式為:

CALL子程序號,參數(shù)1,參數(shù)2,……參數(shù)nn:0~16。帶參數(shù)調(diào)用子程序使ENO:0的錯誤條件:SM4.3(運行時間),0008(子程序嵌套超界)。返回[例6-2]子程序調(diào)用舉例(見圖6-7)

//主程序

LD10.0CALL10,I0.1,VBl0,I1.0,&VBl00,*AC1,VD200….//子程序10….LDI2.1CRET…..I1.0VD200VB10*AC1

I0.0SBR10EN

IN1OUTIN2IN3IN4IN/OUT&VB100I0.1I2.1RET返回5.子程序的嵌套調(diào)用程序中最多可創(chuàng)建64個子程序。子程序可以嵌套調(diào)用(在子程序中調(diào)用別的子程序),最大嵌套深度為8。6.程序的有條件返回

在子程序中用觸點電路控制RET(從子程序有條件返回)指令,觸點電路接通時條件滿足,子程序被終止。編程軟件自動地為主程序和子程序添加無條件返回指令。類似地,可以在主程序中用觸點電路驅(qū)動END(有條件結(jié)束)返回6.4數(shù)據(jù)處理指令

6.4.1SIMATIC比較指令

比較指令用于將兩個操作數(shù)按指定條件進行比較,當條件成立時,觸點閉合。所以比較指令也是一種位控制指令,對其可以進行LD、A和O編程。比較指令可以應(yīng)用于字節(jié)、整數(shù)、雙字整數(shù)和實數(shù)比較。其中,字節(jié)比較是無符號的,整數(shù)、雙字整數(shù)和實數(shù)比較是有符號的。其比較的關(guān)系運算符有6種:=、>、>=、<、<=和<>。

返回IN2IN1>=BIN2IN1<=DIN2IN1==IIN2IN1<>R比較方式輸

入操

數(shù)數(shù)據(jù)類型字節(jié)比較IN1、IN2VB,IB,QB,MB,SMB,LB,SB,AC,常數(shù),*VD,*AC,*LDBYTE整數(shù)比較IN1、IN2IW,QW,MW,SW,SMW,VW,LW。AIW,T,C,AC,常數(shù),*VD,*AC,*LDINT雙字整數(shù)比較IN1、IN2ID,QD,MD,SD,SMD,VD,LD,HC,AC,常數(shù),*VD,*AC,*LDDINT實數(shù)比較IN1、IN2ID,QD,MD,SD,SMD,VD,LD,AC,常數(shù),*VD,*AC,*LDREAL返回6.4.2SIMATIC數(shù)據(jù)傳送指令

SIMATIC功能指令助記符中最后的B、W、DW(或D)和R分別表示操作數(shù)為字節(jié)(Byte)、字(Word)、雙字(DoubleWord)和實數(shù)(Real)。名

稱字節(jié)傳送字傳送雙字傳送實數(shù)傳送指令MOVBMOVWMOVDMOVR指令表格式MOVBIN,OUTMOVWIN,OUTMOVDIN,OUTMOVRIN,OUT梯形圖格式指

令I(lǐng)N/OUT操

數(shù)數(shù)據(jù)類型MOVBINVB,IB,QB,MB,SB,SMB,LB,AC,常數(shù),*VD,*AC,*LDBYTEOUTVB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LDBYTEMOVWINVW,IW,QW,MW,SW,SMW,LW,T,C,AIW,常數(shù),AC,*VD,*AC,*LDWORD,INTOUTVW,IW,QW,MW,SW,SMW,LW,AQW,AC,*VD,*AC,*LDWORD,INTMOVBEN端口執(zhí)行條件存在時,把IN所指的字節(jié)原值傳送到OUT所指字節(jié)存儲單元。

MOVWEN端口執(zhí)行條件存在時,把IN所指的字原值傳送到OUT所指字存儲單元。

MOVDEN端口執(zhí)行條件存在時,把IN所指的雙字原值傳送到OUT所指雙字存儲單元。

MOVREN端口執(zhí)行條件存在時,把IN所指的32位實數(shù)原值傳送到OUT所指雙字長的存儲單元。MOVDINVD,ID,QD,MD,SD,SMD,LD,HC,&VB,&IB,&QB,&MB,&SB,&T,&C,AC,常數(shù),*VD,*AC,*LDDWORD,DINTOUTVD,ID,QD,MD,SD,SMD,LD,AC,*VD,*AC,*LDDWORD,DINTMOVRINVD,ID,QD,MD,SD,SMD,LD,AC,常數(shù),*VD,*AC,*LDREALOUTVD,ID,QD,MD,SD,SMD,LD,AC,*VD,*AC,*LDREAL2.字節(jié)、字、雙字的塊傳送指令塊傳送指令將從輸入地址(1N)開始的N個數(shù)據(jù)傳送到輸出地址(OUT)開始的N個單元,N:1~255,N為字節(jié)變量名

稱字節(jié)塊傳送字塊傳送雙字塊傳送指令BMBBMWBMD指令表格式BMBIN,OUT,NBMWIN,OUT,NBMDIN,OUT,N梯形圖格式指

令操

數(shù)數(shù)據(jù)類型BMBIN/OUTVB,IB,QB,MB,SB,SMB,LB,*VD,*AC,*LDBYTENVB,IB,QB,MB,SB,SMB,LB,AC,常數(shù),*VD,*AC,*LDBYTEBMWINVW,IW,QW,MW,SW,SMW,LW,T,C,AIW,*VD,*AC,*LDWORDOUTVW,IW,QW,MW,SW,SMW,LW,T,C,AQW,*VD,*AC,*LDWORDNVB,IB,QB,MB,SB,SMB,LB,AC,常數(shù),*VD,*AC,*LDBYTEBMDIN/OUTVD,ID,QD,MD,SD,SMD,LD,*VD,*AC,*LDDWORDNVB,IB,QB,MB,SB,SMB,LB,AC,常數(shù),*VD,*AC,*LDBYTE3.字節(jié)交換指令字節(jié)交換SWAP(SwapBytes)指令交換輸入字(1N)的高字節(jié)與低字節(jié)。名

稱高低字節(jié)交換指令SWAP指令表格式SWAPIN梯形圖格式指

令輸

入操

數(shù)

數(shù)據(jù)類型SWAPINVW,IW,QW,MW,SW,SMW,LW,T,C,AC,*VD,*AC,*LDWORDSWAP指令使用舉例4.字節(jié)立即讀寫指令字節(jié)立即讀MOV_BIR(MoveBytelmmediateRead)指令讀取IN輸入端給出的1個字節(jié)的物理輸入點(1B),并將結(jié)果寫入OUT。字節(jié)立即寫MOV_BIW(MoveBytelmmediateWrite)指令將輸入(1N)給出的1字節(jié)數(shù)值寫入OUT端給出的物理輸出點(QB)。兩條指令的IN和OUT都是字節(jié)變量。MOV-BIRENINOUTENOMOV-BIWENINOUTENO指

令I(lǐng)N/OUT操

數(shù)數(shù)據(jù)類型BIRINIBBYTEOUTVB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LDBYTEBIWINVB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LD,常數(shù)BYTEOUTQBBYTE返回6.4.3移位與循環(huán)移位指令

1.字節(jié)、字、雙字右移位和左移位指令字節(jié)向右移位指令SHR—B與字節(jié)向左移位指令SHL_B將輸入(1N)的無符號數(shù)字節(jié)中的各位向右或向左移動N位后,送給輸出字節(jié)(OUT)。移位指令對移出位補0,如果移動的位數(shù)N〉8,最多移位8次,所有的循環(huán)和移位指令中的N均為字節(jié)變量。SHR-BENINOUTENONSHR-WENINOUTENONSHR-DWENINOUTENONSLBOUT,NSLWOUT,NSLDOUT,N字向右移位指令SHlW與字向左移位指令SHlW將輸入(1N)的無符號數(shù)字中的各位向右或向左移動N位后,送給輸出字(OUT)。移位指令對移出位補0,如果移動的位數(shù)N)16,最多移位16次。雙字向右移位指令SHlDW與雙字向左移位指令SHLDW將輸入(1N)的無符號雙字中的各位向右或向左移動N位后,送給輸出雙字(OUT)。移位指令對移出位補0,如果移動的位數(shù)N)32,最多移位32次。SHL-BENINOUTENONSHL-WENINOUTENONSHL-DWENINOUTENONSRBOUT,NSRWOUT,NSRDOUT,N指

令輸入/輸出操

數(shù)數(shù)據(jù)類型SRBSLBINVB,IB,QB,MB,SMB,LB,SB,AC,常數(shù),*VD,*AC,*LDBYTEOUTVB,IB,QB,MB,SMB,LB,SB,AC,*VD,*AC,*LDBYTENVB,IB,QB,MB,SMB,LB,SB,AC,常數(shù),*VD,*AC,*LDBYTESRWSLWINVW,IW,QW,MW,SW,SMW,LW,AIW,T,C,AC,常數(shù),*VD,*AC,*LDWORDOUTVW,IW,QW,MW,SW,SMW,LW,T,C,AC,*VD,*AC,*LDWORDNVB,IB,QB,MB,SMB,LB,SB,AC,常數(shù),*VD,*AC,*LDBYTE指

令輸入/輸出操

數(shù)數(shù)據(jù)類型SRDSLDINVD、ID、QD、MD、SD、SMD、LD、AC,HC、常數(shù),*VD,*AC,*LDDWORDOUTVD、ID、QD、MD、SD、SMD、LD、AC,*VD,*AC,*LDDWORDNVB,IB,QB,MB,SMB,LB,SB,AC,常數(shù),*VD,*AC,*LDBYTE返回如果移位次數(shù)大于0,“溢出”存儲器位(SMl.1)保存最后一次被移出的位的值。如果移位結(jié)果為0,零標志位(SMl.0)置1。上述6條指令使ENO=0的錯誤條件:0006(間接地址),SM4.3(運行時間)。2.字節(jié)、字、雙字循環(huán)右移位和循環(huán)左移位指令字節(jié)循環(huán)右移指令ROlB和字節(jié)循環(huán)左移指令ROL-B將輸入字節(jié)(1N)的數(shù)值向右或向左循環(huán)移位N位,并將結(jié)果裝入輸出字節(jié)(OUT)。移位次數(shù)N為字節(jié)變量,如果N大于8,執(zhí)行循環(huán)之前先對N進行模8操作(N除以8后取余數(shù)),因此實際移位次數(shù)在0—7之間。如果N為8的整倍數(shù),則不進行移位操作。返回

字循環(huán)右移指令ROR_W和字循環(huán)左移指令ROL_W將輸入字(1N)的數(shù)值向右或向左循環(huán)移位N位,并將結(jié)果裝入輸出字(OUT)。如果移位次數(shù)N大于16,執(zhí)行循環(huán)之前先對N進行模16操作(N除以16后取余數(shù)),因此實際移位次數(shù)在0—15之間。如果N為16的整倍數(shù),則不進行循環(huán)移位操作。雙字循環(huán)右移指令ROlDW和雙宇循環(huán)左移指令ROL_DW將輸入雙字(1N)的數(shù)值向右或向左循環(huán)移位N位,并將結(jié)果裝入輸出雙字(OUT)。如果移位次數(shù)N大于32,執(zhí)行循環(huán)之前先對N進行模32操作(N除以32后取余數(shù)),因此實際移位次數(shù)在0—31之間。如果N為32的整倍數(shù),則不進行循環(huán)移位操作。返回ROR-BENINOUTENONROR-WENINOUTENONROR-DWENINOUTENONROL-BENINOUTENONROL-WENINOUTENONROL-DWENINOUTENONRLBOUT,NRLWOUT,NRLDOUT,NRRBOUT,NRRWOUT,NRRDOUT,NROR-BENINOUTENONSHL-BENINOUTENON3VB20AC0AC0VB20AC04I2.11110010010011100111001010101000010返回3.移位寄存器指令

稱移位寄存器指令SHRB指令表格式SHRBDATA,S_BIT,N梯形圖格式SHRB位移位寄存指令,S_BIT和N共同確定要移位的寄存器,S_BIT指定該寄存器的最低位,N指定移位寄存器的長度,其最大長度為64;N值可正可負,用于決定移位的方向(正向移位=N,反向移位=-N);DATA端指定移入位的狀態(tài)(0或1),它的輸入應(yīng)為位操作數(shù)。當EN端口執(zhí)行條件存在時,每一個掃描周期SHRB指令使指定寄存器的內(nèi)容移動一位,把DATA端指定移入位的狀態(tài)移入寄存器,最高位則移出到溢出位SM1.1中。返回6.4.4數(shù)據(jù)轉(zhuǎn)換指令

1.BCD碼與整數(shù)的轉(zhuǎn)換

BCD_I指令將輸入的整數(shù)(1N)轉(zhuǎn)換為BCD碼,并將結(jié)果送人OUT指定的變量中。IN的范圍是整數(shù)0-9999。使ENO=0的錯誤條件:0006(間接地址),SM1.6(BCD錯誤),SM4.3(運行時間)。這些指令影響SM1.6(非法BCD)。BCD-IENINOUTENOBCDIOUTIBCDOUTI-BCDENINOUTENO指

令輸入/輸出操作數(shù)數(shù)據(jù)類型BCD_II_BCDINVW,IW,QW,MW,SW,SMW,LW,AC,AIW,T,C,常數(shù),*VD,*AC,*LDWORDOUTVW,IW,QW,MW,SW,SMW,LW,AC,*VD,*AC,*LDWORD2.雙字整數(shù)轉(zhuǎn)換為實數(shù)DTR(Dl-R)指令將32位有符號整數(shù)(1N)轉(zhuǎn)換成32位實數(shù),并將結(jié)果送人OUT指定的變量中。使ENO:0的錯誤條件:0006(間接地址),SM4.3(運行時間)。DI-RENINOUTENODTRIN,OUT返回指

令輸入/輸出操作數(shù)數(shù)據(jù)類型DI_RINVD,ID,QD,MD,SD,SMD,LD,AC,HC,常數(shù),*VD,*AC,*LDDINTOUTVD,ID,QD,MD,SD,SMD,LD,AC,*VD,*AC,*LDREAL值得注意的是:沒有直接由整數(shù)轉(zhuǎn)換為實數(shù)的指令,只能通過整數(shù)轉(zhuǎn)換為雙整數(shù),再轉(zhuǎn)換為實數(shù)。返回3.四舍五入取整指令

ROUND指令將實數(shù)(IN)轉(zhuǎn)換成雙字整數(shù)后送入OUT指定的變量中。如果小數(shù)部分大于等于0.5,整數(shù)部分加1。使ENO=0的錯誤條件:0006(間接地址),SM1.1(溢出),SM4.3(運行時間)。該指令影響SM1.1(溢出)。ROUNDENINOUTENOROUNDIN,OUT返回4.截位取整指令

TRUNC指令將32位實數(shù)(IN)轉(zhuǎn)換成32位帶符號整數(shù)后送入OUT指定的變量中。只有實數(shù)的整數(shù)部分被轉(zhuǎn)換,小數(shù)部分被舍去。

使ENO=0的錯誤條件:0006(間接地址),SMl.1(溢出),SM4.3(運行時間)。該指令影響SMl.1(溢出)。TRUNCIN,OUTTRUNCENINOUTENO指

令輸入/輸出操作數(shù)數(shù)據(jù)類型ROUNDTRUNCINVD,ID,QD,MD,SD,SMD,LD,AC,HC,常數(shù),*VD,*AC,*LDREALOUTVD,ID,QD,MD,SD,SMD,LD,AC,*VD,*AC,*LDDINT返回5.整數(shù)與雙整數(shù)的轉(zhuǎn)換

DI-I指令將雙整數(shù)(IN)轉(zhuǎn)換成整數(shù)后送人OUT指定的變量中。如果要轉(zhuǎn)換的數(shù)值過大,超過整數(shù)表達范圍,輸出無法表示,則置溢出位SMl.1為1,輸出不受影響。使ENO=0的錯誤條件:0006(間接地址),SM1.1(溢出),SM4.3(運行時間)。DI-IENINOUTENODTIIN,OUT返回整數(shù)轉(zhuǎn)換為雙整數(shù)指令I(lǐng)-DI將整數(shù)(IN)轉(zhuǎn)換成雙整數(shù)后送入OUT指定的變量中符號被擴展。使ENO=0的錯誤條件:0006(間接地址),SM4.3(運行時間)。這兩條指令影響特殊存儲器位SM1.1(溢出)。I_DIENINOUTENOITDIN,OUT返回6.字節(jié)與整數(shù)的轉(zhuǎn)換指令BTI(B_I)指令將字節(jié)數(shù)(IN)轉(zhuǎn)換成整數(shù),并將結(jié)果存入OUT指定的變量中。因為字節(jié)是無符號的,所以沒有擴展符號。使ENO=0的錯誤條件:0006(間接地址),SM4.3(運行時間)。影響特殊存儲器位SMl.1(溢出)。B-IENINOUTENOBTIIN,OUT指

令輸入/輸出操

數(shù)數(shù)據(jù)類型B_IINVB,IB,QB,MB,SB,SMB,LB,AC,常數(shù),*VD,*AC,*LDBYTEOUTVW,IW,QW,MW,SW,SMW,LW,T,C,AC,*VD,*AC,*LDINTI_BINVW,IW,QW,MW,SW,SMW,LW,T,C,AC,AIW,*VD,常數(shù),*AC,*LDINTOUTVB,IB,QB,MB,SB,SMB,LB,AC,*VD,*AC,*LDBYTE名

稱字節(jié)到整數(shù)轉(zhuǎn)換整數(shù)到字節(jié)轉(zhuǎn)換指令B_II_B指令表格式BTIIN,OUTITBIN,OUT梯形圖格式以下為一個長度轉(zhuǎn)換應(yīng)用程序,實現(xiàn)英寸×2.54=厘米。厘米值需要四舍五入取整。返回7.譯碼指令譯碼(Decode)指令DECO根據(jù)輸入字節(jié)(1N)的低4位表示的位號,將輸出字(OUT)相應(yīng)的位置1,輸出字的其他位均為0。使ENO=0的錯誤條件:0006(間接地址),SM4.3(運行時間)。DECOENINOUTENODECOIN,OUT返回8.編碼指令編碼(Encode)指令ENCO將輸入字(IN)的最低有效位(其值為1)的位數(shù)寫入輸出字節(jié)(OUT)的最低4位。使ENO=0的錯誤條件:0006(間接地址),SM4.3(運行時間)。ENCOENINOUTENOENCOIN,OUT指

令輸入/輸出操

數(shù)數(shù)據(jù)類型ENCOINVW,IW,QW,MW,SMW,LW,SW,AIW,T,C,常數(shù),*VD,*AC,*LDWORDOUTVB,IB,QB,MB,SMB,LB,SB,AC,*VD,*AC,*LDBYTEDECOINVB,IB,QB,MB,SMB,LB,SB,AC,常數(shù),*VD,*AC,*LDBYTEOUTVW,IW,QW,MW,SMW,LW,SW,AQW,T,C,AC,*VD,*AC,*LDWORD返回9.段譯碼指令段(Segment)譯碼指令SEG根據(jù)輸入字節(jié)(IN)低4位確定的十六進制數(shù)(16#0—F)產(chǎn)生點亮7段顯示器各段的代碼,并送到輸出字節(jié)OUT。使ENO=0的錯誤條件:0006(間接地址),SM4.3(運行時間)。SEGENINOUTENOSEGIN,OUT指

令輸入/輸出操作數(shù)數(shù)據(jù)類型SEGINVB,IB,QB,MB,SMB,LB,SB,常數(shù),*VD,*AC,*LDBYTEOUTVB,IB,QB,MB,SMB,LB,SB,AC,*VD,*AC,*LDBYTE待變換數(shù)據(jù)7段顯示的組成用于7段顯示的8位數(shù)據(jù)7段顯示十六進制二進制/gfedcba16#02#00000011111116#12#00010000011016#22#00100101101116#32#00110110111116#42#01000110011016#52#01010110110116#62#01100111110116#72#01110010011116#82#10000111111116#92#10010110111116#A2#10100111011116#B2#10110111110016#C2#11000011100116#D2#11010101111016#E2#11100111100116#F2#111101110001返回10.ASCll碼與十六進制數(shù)的轉(zhuǎn)換指令

ASCII碼轉(zhuǎn)換為十六進制數(shù)(HEX)指令A(yù)TH將長度為LEN、從IN開始的ASCII字符串轉(zhuǎn)換成從OUT開始的十六進制數(shù)。ASCII字符串的最大長度為255個字符,各變量的數(shù)據(jù)類型均為BYTE。使ENO=0的錯誤條件:0006(間接地址),0091(操作數(shù)超出范圍),SMl.7(非法ASCII),SM4.3(運行時間)。ATHENINOUTENOATHIN,OUT返回HTA指令將從IN開始,長度為LEN的十六進制數(shù)轉(zhuǎn)換成從OUT開始的ASCII字符串。最多可轉(zhuǎn)換255個十六進制數(shù),合法的ASCII字符的十六進制數(shù)值在30~39和41~46之間,各變量的數(shù)據(jù)類型均為BYTE。使ENO:0的錯誤條件:0006(間接地址),0091(操作數(shù)超出范圍),SM4.3(運行時間)。這兩條指令影響SMl.7(非法的ASCII碼)。假設(shè)VB30~VB32中存放了3個ASCII碼33、45和41,用指令"ATHVB30,VB40.3”將它們轉(zhuǎn)換為16#3E和16#Ax,分別存放在VB40和VB41中,“x”表示VB41低4位的數(shù)不變。HTAENINOUTENOHTAIN,OUT11.ITA、DTA、RTA指令

稱整數(shù)到ASCII碼轉(zhuǎn)換雙整數(shù)到ASCII碼轉(zhuǎn)換實數(shù)到ASCII碼轉(zhuǎn)換指令I(lǐng)TADTARTA指令表格式ITAIN,OUT,F(xiàn)MTDTAIN,OUT,F(xiàn)MTRTAIN,OUT,F(xiàn)MT梯形圖格式指

令輸入/輸出操

數(shù)數(shù)據(jù)類型ITAINVW,IW,QW,MW,SW,SMW,LW,AIW,T,C,AC,常數(shù),*VD,*AC,*LDINTOUTVB,IB,QB,MB,SMB,LB,SB,*VD,*AC,*LDBYTEFMTVB,IB,QB,MB,SMB,LB,SB,AC,常數(shù),*VD,*AC,*LDBYTEDTAINVD、ID、QD、MD、SD、SMD、LD、HC、AC,常數(shù),*VD,*AC,*LDDINTOUTVB,IB,QB,MB,SMB,LB,SB,*VD,*AC,*LDBYTEFMTVB,IB,QB,MB,SMB,LB,SB,AC,常數(shù),*VD,*AC,*LDBYTERTAINVD、ID、QD、MD、SD、SMD、LD、AC,*VD,*AC,*LDREALOUTVB,IB,QB,MB,SMB,LB,SB,*VD,*AC,*LDBYTEFMTVB,IB,QB,MB,SMB,LB,SB,AC,常數(shù),*VD,*AC,*LDBYTE指

令輸入/輸出操

數(shù)數(shù)據(jù)類型ITAEN端口執(zhí)行條件存在時,將IN端口指定的整數(shù)根據(jù)格式FMT要求轉(zhuǎn)換為ASCII碼,輸出到OUT端口指定字節(jié)開始的8個連續(xù)字節(jié)中。

DTAEN端口執(zhí)行條件存在時,將IN端口指定的雙整數(shù)根據(jù)格式FMT要求轉(zhuǎn)換為ASCII碼,輸出到OUT端口指定字節(jié)開始的12個連續(xù)字節(jié)中。

RTAEN端口執(zhí)行條件存在時,將IN端口指定的實數(shù)根據(jù)格式FMT要求轉(zhuǎn)換為ASCII碼,輸出到OUT端口指定字節(jié)開始的3~15個連續(xù)字節(jié)中。

ITA、DTA、RTA指令中都有一個格式FMT,它決定了指令轉(zhuǎn)換的具體格式。FMT是一個字節(jié),用于指定小數(shù)點右側(cè)的轉(zhuǎn)換精度,以及將小數(shù)點表示為逗號還是點號。

ITA、DTA指令的FMT格式如下。765432100000cnnn

nnn表示輸出緩沖器內(nèi)小數(shù)點右側(cè)的位數(shù),nnn的有效范圍是0~5。如果nnn=2#000,則轉(zhuǎn)換后無小數(shù)點;如果nnn大于5,則輸出緩沖區(qū)用ASCII碼的空格填充。

c指定小數(shù)點的標點符號,c=1是使用逗號為整數(shù)和小數(shù)部分的分隔符;c=0是使用點號為整數(shù)和小數(shù)部分的分隔符。

FMT字節(jié)的高4位必須為0。

RTA指令的FMT格式如下。76543210ssSscnnnssss指定輸出緩沖區(qū)的長度,ssss的有效范圍是3~12,當取0、1、2時無效。②輸出緩沖區(qū)格式化規(guī)則為正值不帶符號寫入輸出緩沖區(qū);負值帶負號寫入輸出緩沖區(qū);小數(shù)點左側(cè)的起首0(與小數(shù)點相鄰的數(shù)字0除外)將被省略;輸出緩沖區(qū)中的數(shù)值采用右對齊。

對于RTA指令,還有如下規(guī)則:轉(zhuǎn)換后小數(shù)點右側(cè)的數(shù)值進行四舍五入來滿足由FMT指定的小數(shù)點右側(cè)的位數(shù);輸出緩沖區(qū)的大小必須不小于3個字節(jié),且要大于nnn指定的小數(shù)點右側(cè)的位數(shù)。③對于ITA、DTA指令,其FMT格式的不同只有輸出緩沖區(qū)的大小不同。ITA指令為8字節(jié)的緩沖區(qū),DTA指令為12字節(jié)的緩沖區(qū)。

指令FMTINOUT(字節(jié))+1+2+3+4+5+6+7+8+9+10+11ITA2#00000011120.0122#00000011-12345-12.345DTA2#00000100-12-0.00122#000001001234567123.4567RTA2#011000011234.51234.52#01100001-3.67526-3.72#11000100123.85186123.8519指令FMTINOUT(字節(jié))+1+2+3+4+5+6+7+8+9+10+11

表功能指令是指定存儲器區(qū)域中的數(shù)據(jù)管理指令??山⒁粋€不大于100個字的數(shù)據(jù)表,依次向數(shù)據(jù)區(qū)填入或取出數(shù)據(jù),并可在數(shù)據(jù)區(qū)查找符合設(shè)置條件的數(shù)據(jù),以對數(shù)據(jù)區(qū)內(nèi)的數(shù)據(jù)進行統(tǒng)計、排序、比較等處理。表功能指令包括填表指令、查表指令,先進先出指令、后進先出指令及填充指令。1)ATT、FND指令

(1)指令格式及其操作數(shù)。名

稱填表指令查表指令指令A(yù)TTFND指令表格式ATTDATA,TABLEFND=TBL,PATRN,INDXFND<>TBL,PATRN,INDXFND<TBL,PATRN,INDXFND>TBL,PATRN,INDX6.4.5表功能指令梯形圖格式指

令輸入/輸出操作數(shù)數(shù)據(jù)類型ATTDATAVW,IW,QW,MW,SW,SMW,LW,T,C,AIW,AC,常數(shù),*VD,*AC,*LDINTTBLVW,IW,QW,MW,SW,SMW,LW,T,C,*VD,*AC,*LDWORD指

令輸入/輸出操作數(shù)數(shù)據(jù)類型FNDTBLVW,IW,QW,MW,SW,SMW,LW,T,C,*VD,*AC,*LDWORDPTNVW,IW,QW,MW,SW,SMW,LW,AIW,T,C,AC,常數(shù),*VD,*AC,*LDINTINDXVW,IW,QW,MW,SW,SMW,LW,T,C,AC,*VD,*AC,*LDWORDCMD常數(shù)(1~4)BYTE(2)指令功能。

ATTEN端口執(zhí)行條件存在時,用于向TBL指定的數(shù)據(jù)表中填加DATA端的數(shù)據(jù)。

FNDEN端口執(zhí)行條件存在時,從INDX開始搜索表TBL,查找滿足由PTN和CMD設(shè)置條件的數(shù)據(jù)。PTN設(shè)置要查找的具體數(shù)據(jù),CMD設(shè)置查找條件(1~4分別表示=、<>、<、>)。

(3)指令應(yīng)用舉例。

ATT指令應(yīng)用FND指令應(yīng)用2)FIFO、LIFO指令(1)指令格式及其操作數(shù)。名

稱先進先出后進先出指令FIFOLIFO指令表格式FIFOTBL,DATALIFOTBL,DATA梯形圖格式指

令輸入/輸出操作數(shù)數(shù)據(jù)類型FIFO、LIFODATAVW,IW,QW,MW,SW,SMW,LW,AC,AQW,T,C,*VD,*AC,*LDINTTBLVW,IW,QW,MW,SW,SMW,LW,T,C,*VD,*AC,*LDWORD(2)指令功能。

FIFOEN端口執(zhí)行條件存在時,先進先出的表操作指令將表(TBL)中第一個數(shù)據(jù)(最先進入表中的數(shù)據(jù))移出,并輸出到DATA端指定的存儲器單元。表中剩余數(shù)據(jù)依次上移一個位置。該指令每執(zhí)行一次,表中實際填表數(shù)(EC)值減1。

LIFOEN端口執(zhí)行條件存在時,后進先出的表操作指令將表(TBL)中最后一個數(shù)據(jù)(最后進入表中的數(shù)據(jù))移出,并輸出到DATA端指定的存儲器單元。該指令每執(zhí)行一次,表中實際填表數(shù)(EC)值減1。

(3)指令應(yīng)用舉例。3)FILL指令(1)指令格式及其操作數(shù)。名

稱存儲器填充指令指令FILL指令表格式FILLIN,OUT,N梯形圖格式指

令輸入/輸出操作數(shù)數(shù)據(jù)類型FILLINVW,IW,QW,MW,SW,SMW,LW,T,C,AIW,AC,常數(shù),*VD,*AC,*LDWORDOUTVW,IW,QW,MW,SW,SMW,LW,T,C,AQW,*VD,*AC,*LDWORDNVB,IB,QB,MB,SB,SMB,LB,AC,常數(shù),*VD,*AC,*LDBYTE注:常用常數(shù),可取1~255之間的整數(shù)。(2)指令功能。

FILL存儲器填充指令,EN端口執(zhí)行條件存在時,用IN指定的輸入值填充從OUT指定的存儲單元開始的N個字的存儲空間。多用于對空間的清零。6.5.1數(shù)學運算指令6.5數(shù)學運算指令

6.5.2函數(shù)運算指令6.5.3邏輯運算指令

算術(shù)運算指令包括加、減、乘、除及常用函數(shù)指令。在梯形圖編程和指令表編程時對存儲單元的要求是不同的,所以在使用時一定要注意存儲單元的分配。梯形圖編程時,IN2和OUT指定的存儲單元可以相同也可以不同;指令表編程時,IN2和OUT要使用相同的存儲單元。1.算術(shù)運算指令運算形式梯

圖指

表加IN1+IN2=OUTIN1+OUT=OUT減IN1-IN2=OUTOUT-IN1=OUT乘IN1*IN2=OUTIN1*OUT=OUT除IN1/IN2=OUTOUT/IN1=OUT自增1IN+1=OUTOUT+1=OUT自減1IN–1=OUTOUT-1=OUT6.5.1數(shù)學運算指令I(lǐng)N2和OUT一致IN2和OUT不一致指令表LDI0.0+IVW10,VW20LDI0.0MOVWVW10,VW30+IVW20,VW30梯形圖1.ADD_I、ADD_DI、ADD_R指令1)指令格式及操作數(shù)名

稱整數(shù)加法雙整數(shù)加法實數(shù)加法指令A(yù)DD_IADD_DIADD_R指令表格式+IIN1,OUT+DIN1,OUT+RIN1,OUT梯形圖格式指

令輸入/輸出操

數(shù)數(shù)據(jù)類型ADD_IIN1/IN2VW,IW,QW,MW,SW,SMW,LW,AIW,T,C,AC,常數(shù),*VD,*AC,*LDINTOUTVW,IW,QW,MW,SW,SMW,LW,T,C,AC,*VD,*AC,*LDINT指

令輸入/輸出操

數(shù)數(shù)據(jù)類型ADD_DIIN1/IN2VD、ID、QD、MD、SD、SMD、LD、AC,HC、常數(shù),*VD,*AC,*LDDINTOUTVD、ID、QD、MD、SD、SMD、LD、AC,*VD,*AC,*LDDINTADD_RIN1/IN2VD、ID、QD、MD、SD、SMD、LD、AC,HC、常數(shù),*VD,*AC,*LDREALOUTVD、ID、QD、MD、SD、SMD、LD、AC,*VD,*AC,*LDREAL2)指令功能

ADD_I整數(shù)加法指令,當EN端口執(zhí)行條件存在時,將IN1、IN2端口指定的單字長符號整數(shù)相加,產(chǎn)生一個16位整數(shù),輸出到OUT端口指定的字存儲單元。

ADD_DI雙整數(shù)加法指令,當EN端口執(zhí)行條件存在時,將IN1、IN2端口指定的雙字長符號整數(shù)相加,產(chǎn)生一個32位雙整數(shù),輸出到OUT端口指定的雙字存儲單元。

ADD_R實數(shù)加法指令,當EN端口執(zhí)行條件存在時,將IN1、IN2端口指定的雙字長實數(shù)相加,產(chǎn)生一個32

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論