




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第七章
S7-1200PLC基本指令(SCL)第七章S7-1200PLC基本指令(SCL)
位邏輯運(yùn)算1
定時器操作2
計數(shù)器操作3
比較操作4-2-
數(shù)學(xué)函數(shù)5
移動操作6
轉(zhuǎn)換操作7
字邏輯運(yùn)算8
移位和循環(huán)9理論課程電動機(jī)正反轉(zhuǎn)連續(xù)運(yùn)行控制1三相異步電動機(jī)Y-△降壓啟動控制2車庫出入口閘機(jī)控制3十字路口交通燈控制4數(shù)學(xué)運(yùn)算指令的綜合應(yīng)用5一個數(shù)碼管顯示9秒的倒計時控制6深度測量傳感器模擬量控制7圓盤工件箱捷徑傳送控制8八層霓虹燈塔控制9第七章S7-1200PLC基本指令(SCL)實踐操作7.1位邏輯運(yùn)算R_TRIG經(jīng)常用于啟動僅需執(zhí)行一次的操作,例如計數(shù)器的加一操作、觸發(fā)一個短暫的動作、或者啟動一個只需要在特定條件變化時觸發(fā)的過程。1、指令添加步驟(1)將系統(tǒng)默認(rèn)的OB1刪除,新建SCL的OB塊,如圖7-1所示。圖7-1新建SCL的OB塊7.1位邏輯運(yùn)算(2)進(jìn)入OB塊后,在右側(cè)指令欄-基本指令-位邏輯運(yùn)算中找到“R_TRIG”指令,雙擊。(3)在彈出的調(diào)用選項中默認(rèn)單個實例,對其數(shù)據(jù)塊命名和編號,如圖7-2所示。圖7-2配置R_TRIG指令的背景數(shù)據(jù)塊7.1位邏輯運(yùn)算加入完成后,可以在左側(cè)項目工程系統(tǒng)塊中看到自動生成的R_TRIG[FB1001]塊和R_TRIG_DB[DB1]塊。程序段中出現(xiàn)了R_TRIG指令的SCL程序。輸入變量的上一個狀態(tài)即存儲在R_TRIG_DB[DB1]塊中,如圖7-3所示。圖7-3系統(tǒng)生成的R_TRIG和F_TRIG程序塊7.1位邏輯運(yùn)算2、指令參數(shù)說明R_TRIG用于檢測輸入信號的上升沿,即從0變到1的瞬間,CLK中變量的上一個狀態(tài)存儲在“R_TRIG_DB”變量中。當(dāng)R_TRIG檢測到其輸入?yún)?shù)的上升沿時,它會在一個掃描周期內(nèi)將其輸出Q設(shè)置為1。在下一個掃描周期開始時,輸出會自動重置為0。在其它任何情況下,該指令輸出的信號狀態(tài)均為“0”。該指令的參數(shù)表如表7-1所示。表7-1上升沿指令的參數(shù)情況功能框SCL參數(shù)數(shù)據(jù)類型"R_TRIG_DB"(CLK:=_bool_in_,Q=>_bool_out_);
CLKBOOLQBOOL7.1位邏輯運(yùn)算CLK(輸入):控制輸入端子,BOOL量,通常連接到I、Q、M、D、L中任一存儲區(qū)變量或硬件輸入。當(dāng)這個輸入從0變?yōu)?時,上升沿被激活。Q(輸出):輸出信號端子,BOOL量,通常連接到I、Q、M、D、L中任一存儲區(qū)變量或硬件輸出。當(dāng)檢測到輸入的上升沿時,在一個PLC掃描周期中,這個輸出會被設(shè)置為1。3、注意事項(1)使用R_TRIG時,需要注意PLC的掃描周期,因為輸出Q只在一個掃描周期內(nèi)為1。(2)R_TRIG適合用于檢測短暫事件,因為它僅在檢測到上升沿的那個掃描周期內(nèi)激活輸出。7.1位邏輯運(yùn)算該指令主要用于檢測一個信號的下降沿,即從邏輯“1”(高電平)到邏輯“0”(低電平)的轉(zhuǎn)變。F_TRIG在自動化領(lǐng)域內(nèi)廣泛應(yīng)用于各種場景,比如捕捉按鈕的釋放、監(jiān)測傳感器的狀態(tài)變化等。1、指令添加步驟(1)將系統(tǒng)默認(rèn)的OB1刪除,新建SCL的OB塊;(2)進(jìn)入OB塊后,在右側(cè)指令欄-基本指令-位邏輯運(yùn)算中找到“F_TRIG”指令,雙擊。(3)在彈出的調(diào)用選項中默認(rèn)單個實例,對其數(shù)據(jù)塊命名和編號,如圖7-4所示。7.1位邏輯運(yùn)算加入完成后,可以在左側(cè)項目工程系統(tǒng)塊中看到自動生成的F_TRIG[FB1002]塊和F_TRIG_DB[DB1]塊。程序段中出現(xiàn)了F_TRIG指令的SCL程序。輸入變量的上一個狀態(tài)即存儲F_TRIG_DB[DB1]塊中,如圖7-3所示。圖7-4配置F_TRIG指令背景數(shù)據(jù)塊7.1位邏輯運(yùn)算2、指令參數(shù)說明F_TRIG用于檢測輸入信號的下降沿,即從1變到0的瞬間,CLK中變量的上一個狀態(tài)存儲在“F_TRIG_DB”變量中。當(dāng)F_TRIG檢測到其輸入?yún)?shù)的下降沿時,它會在一個掃描周期內(nèi)將其輸出Q設(shè)置為1。在下一個掃描周期開始時,輸出會自動重置為0。在其它任何情況下,該指令輸出的信號狀態(tài)均為“0”。該指令的參數(shù)表如表7-2所示。表72下降沿指令的參數(shù)情況功能框SCL參數(shù)數(shù)據(jù)類型"F_TRIG_DB"(CLK:=_bool_in_,Q=>_bool_out_);
CLKBOOLQBOOL7.1位邏輯運(yùn)算CLK(輸入):控制輸入,BOOL量,通常連接到I、Q、M、D、L中任一存儲區(qū)變量或硬件輸入。當(dāng)這個輸入從1變?yōu)?時,觸發(fā)器被激活。Q(輸出):輸出信號,BOOL量,通常連接到I、Q、M、D、L中任一存儲區(qū)變量或硬件輸出。當(dāng)檢測到輸入的下降沿時,在一個PLC掃描周期中,這個輸出會被設(shè)置為1。3、注意事項(1)使用F_TRIG時,需要注意PLC的掃描周期,因為輸出Q只在一個掃描周期內(nèi)為1。(2)該指令特別適用于需要捕捉設(shè)備狀態(tài)變化的場合,比如按鈕釋放或傳感器從觸發(fā)狀態(tài)到非觸發(fā)狀態(tài)的轉(zhuǎn)變。7.1.3實操案例15:電動機(jī)正反轉(zhuǎn)連續(xù)運(yùn)行控制任務(wù):使用S7-1200PLC實現(xiàn)電動機(jī)正反轉(zhuǎn)連續(xù)運(yùn)行控制??刂埔螅?.按下正向啟動按鈕SB1,交流接觸器KM1得電,控制電動機(jī)正轉(zhuǎn);按下停止按鈕SB3,電動機(jī)停止轉(zhuǎn)動;按下反向啟動按鈕SB2,交流接觸器KM2得電,控制電動機(jī)反轉(zhuǎn)。2.若電動機(jī)正轉(zhuǎn)運(yùn)行時,按下反轉(zhuǎn)啟動按鈕SB2,電動機(jī)將變成反轉(zhuǎn)運(yùn)行;若電動機(jī)反轉(zhuǎn)運(yùn)行時,按下正轉(zhuǎn)啟動按鈕SB1,電動機(jī)將變成正轉(zhuǎn)運(yùn)行。注意:電動機(jī)任何時候不能同時正轉(zhuǎn)和反轉(zhuǎn),否則會造成短路現(xiàn)象。7.1.3實操案例15:電動機(jī)正反轉(zhuǎn)連續(xù)運(yùn)行控制步驟:1.I/O分配表(見章節(jié)4.1.6)2.PLC外部接線圖(見章節(jié)4.1.6)3.編寫程序圖7-5PLC變量7.1.3實操案例15:電動機(jī)正反轉(zhuǎn)連續(xù)運(yùn)行控制圖7-6電動機(jī)正反轉(zhuǎn)連續(xù)運(yùn)行控制SCL程序7.1.3實操案例15:電動機(jī)正反轉(zhuǎn)連續(xù)運(yùn)行控制4.調(diào)試程序單擊程序編輯器工具欄上的按鈕,程序狀態(tài)進(jìn)入監(jiān)視運(yùn)行,該狀態(tài)可以顯示程序中操作數(shù)和網(wǎng)絡(luò)的邏輯運(yùn)行結(jié)果(RLO),同時可以查看用戶程序中某些變量值的變化。按下正向啟動按鈕SB1,觀察電動機(jī)是否正轉(zhuǎn),再按下反向啟動按鈕SB2,觀察電動機(jī)能否反轉(zhuǎn)。同時按下正反轉(zhuǎn)啟動按鈕,看看電動機(jī)是否運(yùn)行工作。7.2定時器操作本節(jié)我們來學(xué)習(xí)定時器對應(yīng)的SCL編程方法,我們不僅要學(xué)習(xí)脈沖定時器(TP)、接通延時定時器(TON)、關(guān)斷延時定時器(TOF)、保持型接通延時定時器(TONR)四個指令之外,還要學(xué)習(xí)到復(fù)位定時器(RESET_TIMER)和加載持續(xù)時間(PRESET_TIMER)兩個指令。命名規(guī)則:1.IEC定時器是一個IEC_TIMER或TP_TIME數(shù)據(jù)類型的結(jié)構(gòu),可如下聲明:聲明為一個系統(tǒng)數(shù)據(jù)類型為IEC_TIMER的背景數(shù)據(jù)塊(例如,“IEC_TIMER_DB”)7.2定時器操作2.聲明為程序塊的“Static”中數(shù)據(jù)類型為TP_TIME的局部變量(例如,#IEC_TIMER_Instance)3.IEC定時器作為系統(tǒng)數(shù)據(jù)類型為IEC_<定時器>的背景數(shù)據(jù)塊(共享DB)您可以按如下所示將IEC定時器聲明為數(shù)據(jù)塊:<IEC_Timer_DB>.TP();4.IEC定時器作為塊接口的局部變量(多重實例)您可以按如下所示將IEC定時器聲明為局部變量:#My_Timer();7.2定時器操作脈沖定時器(TP)的指令對照表和參數(shù)表,見表7-3所示。表7-3脈沖定時器(TP)指令對照表和參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型"TP_DB".TP(IN:="Tag_Start",PT:="Tag_PresetTime",Q=>"Tag_Status",ET=>"Tag_ElapsedTime");
INBoolQBoolPTTimeETTimea)脈沖定時器LAD程序7.2定時器操作脈沖定時器的應(yīng)用如圖7-7所示。圖7-7a為LAD程序,圖7-7b為SCL程序,其功能效果是一樣的,同學(xué)們可以通過第四章的學(xué)習(xí)來驗證SCL的程序運(yùn)行過程。圖7-7c為SCL監(jiān)控,可以清晰的顯示出IN和Q的狀態(tài)(True為1,F(xiàn)alse為0),ET“Tag_2”的值默認(rèn)顯示十六進(jìn)制,我們可以修改為十進(jìn)制,在十進(jìn)制中它是以ms為單位顯示內(nèi)容。若在SCL程序中刪除第5行代碼,則監(jiān)控區(qū)域里不會顯示“Tag_2”的監(jiān)控值。b)脈沖定時器SCL程序 c)脈沖定時器SCL監(jiān)控圖7-7關(guān)斷延時定時器的應(yīng)用7.2定時器操作接通延時定時器(TON)的指令對照表和參數(shù)表,見表7-4所示。表7-4
接通延時定時器(TON)指令對照表和參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型"TON_DB".TON(IN:="Tag_Start",PT:="Tag_PresetTime",Q=>"Tag_Status",ET=>"Tag_ElapsedTime");
INBoolQBoolPTTimeETTimea)接通延時定時器LAD程序7.2定時器操作接通延時定時器的應(yīng)用如圖7-8所示。圖7-8a為LAD程序,圖7-8b為SCL程序,其功能效果是一樣的,圖7-8c為SCL監(jiān)控。b)脈沖定時器SCL程序 c)脈沖定時器SCL監(jiān)控圖7-8接通延時定時器的應(yīng)用7.2定時器操作【例7-1】兩臺電機(jī)的控制,當(dāng)工作人員按下I0.0啟動按鈕,M1電機(jī)啟動運(yùn)行8秒后M2電機(jī)再自動運(yùn)行,當(dāng)按下I0.1兩臺電機(jī)同時停止工作。LAD程序請查閱【例4-2】,SCL程序如圖7-9所示。圖7-9【例7-1】SCL程序使用脈沖定時器7.2定時器操作關(guān)斷延時定時器(TOF)的指令對照表和參數(shù)表,見表7-5所示。表7-5
關(guān)斷延時定時器(TOF)指令對照表和參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型"TOF_DB".TOF(IN:="Tag_Start",PT:="Tag_PresetTime",Q=>"Tag_Status",ET=>"Tag_ElapsedTime");INBoolQBoolPTTimeETTimea)關(guān)斷延時定時器LAD程序7.2定時器操作關(guān)斷延時定時器的應(yīng)用如圖7-10所示。圖7-10a為LAD程序,圖7-10b為SCL程序,其功能效果是一樣的,圖7-10c為SCL監(jiān)控。b)關(guān)斷延時定時器SCL程序 c)關(guān)斷延時定時器SCL監(jiān)控圖7-10關(guān)斷延時定時器的應(yīng)用b)
7.2定時器操作【例7-2】設(shè)備風(fēng)扇電機(jī)延時控制,當(dāng)工作人員按下I0.0啟動按鈕,M1主電機(jī)和M2風(fēng)扇電機(jī)同時啟動運(yùn)行,當(dāng)按下I0.1停止按鈕后,主軸電機(jī)停止工作,風(fēng)扇電機(jī)1分鐘后停止工作。LAD程序請查閱【例4-3】,SCL程序如圖7-11所示。圖7-11【例7-2】SCL程序使用脈沖定時器7.2定時器操作累加型定時器(TONR)的指令對照表和參數(shù)表,見表7-6所示。表7-6累加型定時器(TONR)指令對照表和參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型"TONR_DB".TONR(IN:="Tag_Start",R:="Tag_Reset",PT:="Tag_PresetTime",Q=>"Tag_Status",ET=>"Tag_Time");INBoolQBoolRBoolPTTimeETTimea)累加型定時器LAD程序7.2定時器操作關(guān)斷延時定時器的應(yīng)用如圖7-10所示。圖7-10a為LAD程序,圖7-10b為SCL程序,其功能效果是一樣的,圖7-10c為SCL監(jiān)控。b)累加型定時器SCL程序 c)累加型定時器器SCL監(jiān)控圖7-12累加型定時器的應(yīng)用
7.2定時器操作使用RESET_TIMER“復(fù)位定時器”指令,可將IEC定時器復(fù)位為“0”。將指定數(shù)據(jù)塊中定時器的結(jié)構(gòu)組件復(fù)位為“0”。該指令不會影響RLO。在TIMER參數(shù)中,將“復(fù)位定時器”指令分配給程序中所聲明的IEC定時器。該指令必須在IF指令中編程。示例:IF#Started=FalseTHEN"TON_DB".TON(IN:="Tag_Start",PT:="Tag_PresetTime",Q=>"Tag_Status",ET=>"Tag_ElapsedTime");#Started:=True;END_IF;IF"TON_DB".ET<T#25sTHENRESET_TIMER(TIMER:="TON_DB");#Started:=False;END_IF;7.2定時器操作【例7-3】游樂場設(shè)備,當(dāng)工作人員按下I0.0啟動按鈕,設(shè)備Q0.0運(yùn)行8分鐘后自動停止工作。若中途有游客感到不適,工作人員可按下I0.1停止按鈕讓其停止工作。LAD程序請查閱【例4-1】,SCL程序如圖7-13所示。圖7-13【例7-3】SCL程序7.2定時器操作可以使用PRESET_TIMER“加載持續(xù)時間”指令為IEC定時器設(shè)置時間。如果該指令輸入邏輯運(yùn)算結(jié)果(RLO)的信號狀態(tài)為“1”,則每個周期都執(zhí)行該指令??梢詫⒃诔绦蛑新暶鞯腎EC定時器賦給“加載持續(xù)時間”指令。該指令將指定時間寫入指定IEC定時器的結(jié)構(gòu)中。該指令不會影響RLO。如果在指令執(zhí)行時指定IEC定時器正在計時,指令將覆蓋該指定IEC定時器的當(dāng)前值。這將更改IEC定時器的定時器狀態(tài)。示例:7.2定時器操作IF#Started=FalseTHEN"TON_DB".TON(IN:="Tag_Start",PT:="Tag_PresetTime",Q=>"Tag_Status",ET=>"Tag_ElapsedTime");#Started:=True;#Preset=TrueEND_IF;IF"TON_DB".ET<T#10sAND#Preset=TrueTHENPRESET_TIMER(PT:=T#25s,TIMER:="TON_DB");#Preset:=False;END_IF;7.2.7實操案例16:三相異步電動機(jī)Y-△降壓啟動控制任務(wù):使用S7-1200PLC實現(xiàn)機(jī)床主軸降壓啟動控制,降壓運(yùn)行5秒后轉(zhuǎn)至全壓運(yùn)行。為了保護(hù)機(jī)床加工車削,主軸電機(jī)啟動的同時冷卻液電機(jī)一同工作,主軸電機(jī)停止后,冷卻液電機(jī)繼續(xù)工作6秒后自動停止工作。步驟:1.I/O分配表(見章節(jié)4.2.5)2.PLC外部接線圖(見章節(jié)4.2.5)3.編寫程序7.2.7實操案例16:三相異步電動機(jī)Y-△降壓啟動控制圖7-15PLC變量圖7-16IEC_TIMER_DB全局變量7.2.7實操案例16:三相異步電動機(jī)Y-△降壓啟動控制圖7-17三相異步電動機(jī)Y-△降壓啟動控制SCL程序7.3計數(shù)器操作本節(jié)我們來學(xué)習(xí)定計數(shù)器對應(yīng)的SCL編程方法,我們將分別學(xué)習(xí)加計數(shù)器(CTU)、減計數(shù)器(CTD)、加減計數(shù)器(CTUD)三個SCL指令。
CTU:加計數(shù)器的指令對照表和參數(shù)表,見表7-7所示。表7-7加計數(shù)器(CTU)指令對照表和參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型"IEC_Counter_0_DB".CTU(CU:=_bool_in_,R:=_bool_in_,PV:=_int_in_,Q=>_bool_out_,CV=>_int_out_);CUBOOLRBOOLPV整數(shù)QBOOLCV整數(shù)、CHAR、WCHAR、DATE7.3計數(shù)器操作b)加計數(shù)器SCL監(jiān)控a)加計數(shù)器SCL程序圖7-18SCL加計數(shù)器指令7.3計數(shù)器操作SCL的加計數(shù)器指令如圖7-18所示。圖7-18a為SCL程序,圖7-18b為SCL監(jiān)控。數(shù)據(jù)塊_1中的Button_1變量由0變1,CU端會產(chǎn)生一個上身沿,計數(shù)器Number_1計數(shù)1次,直到最大值32767;PV值設(shè)置為5,計數(shù)器計數(shù)到大于等于5時,計數(shù)器輸出Q信號為“1”,數(shù)據(jù)塊_1中的Out_1變?yōu)?;當(dāng)Reset_1為1時,計數(shù)器數(shù)值復(fù)位,清零。計數(shù)器復(fù)位Q端子,Out_1變量值變?yōu)?。7.3計數(shù)器操作減計數(shù)器(CTD)的指令對照表和參數(shù)表,見表7-8所示表7-8減計數(shù)器(CTD)指令對照表和參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型"IEC_Counter_0_DB".CTD(CD:=_bool_in_,LD:=_bool_in_,PV:=_int_in_,Q=>_bool_out_,CV=>_int_out_);CDBOOLLDBOOLPV整數(shù)QBOOLCV整數(shù)、CHAR、WCHAR、DATE7.3計數(shù)器操作b)減計數(shù)器SCL監(jiān)控a)減計數(shù)器SCL程序圖7-20SCL減計數(shù)器指令7.3計數(shù)器操作SCL減計數(shù)器如圖7-20所示。圖7-20a為SCL程序,圖7-20b為SCL監(jiān)控。當(dāng)變量Load_1的信號狀態(tài)變?yōu)椤?”時,參數(shù)CV的值會設(shè)置為參數(shù)PV的值。只要變量Load_1的信號狀態(tài)為“1”,變量Button_1的信號狀態(tài)就不會影響該指令。讓數(shù)據(jù)塊中的load_1變?yōu)?,且每一次Button_1由0變1,CD端會產(chǎn)生一個上升沿,計數(shù)器減1。當(dāng)計數(shù)器減至0時,計數(shù)停止,計數(shù)器輸出Q信號為“1”,Out_1輸出1。7.3計數(shù)器操作加減計數(shù)器(CTUD)的指令對照表和參數(shù)表,見表7-9所示。表7-9加減計數(shù)器(CTUD)指令對照表和參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型"IEC_Counter_0_DB".CTUD(CU:=_bool_in_,CD:=_bool_in_,R:=_bool_in_LD:=_bool_in_,PV:=_int_in_,QU=>_bool_out_,QD=>_bool_out_,CV=>_int_out_);CUBOOLCDBOOLRBOOLLDBOOLPVINTQUBOOL7.3計數(shù)器操作b)加減計數(shù)器SCL監(jiān)控a)加減計數(shù)器SCL程序圖7-20SCL加減計數(shù)器指令7.3計數(shù)器操作b)加減計數(shù)器SCL監(jiān)控7.3計數(shù)器操作b)加減計數(shù)器SCL監(jiān)控b)加減計數(shù)器SCL監(jiān)控7.3計數(shù)器操作SCL加減計數(shù)器指令如圖7-21所示。圖7-21a為SCL程序,圖7-21b為SCL監(jiān)控。UpButton_1變量每由0變1一次,CU端會產(chǎn)生一個上升沿,計數(shù)器計數(shù)1次,直到最大值32767;Down_1變量每由0變1一次,CD端會產(chǎn)生一個上升沿,計數(shù)器減數(shù)1次,直到-32768;Load_1變?yōu)?后,PV值設(shè)置為5,計數(shù)器計數(shù)到大于等于5時,計數(shù)器輸出QU信號為“1”,Up_Out輸出1;4)Reset_1置1后,計數(shù)器數(shù)值復(fù)位,清零。計數(shù)器復(fù)位Up_Out,Down_out置1。7.3.4實操案例17:車庫出入口閘機(jī)控制任務(wù):使用S7-1200PLC實現(xiàn)地下車庫車位數(shù)量的顯示??刂埔笕缦拢?.要求分別用紅、綠、黃燈表示地下車庫車位數(shù)的顯示,本車庫共有20個車位。2.系統(tǒng)工作時,若空余車位大于10個亮綠燈,空余車位在1~10個亮黃燈,無空余車位亮紅燈。3.車庫有閘機(jī)入口攝像頭控制閘機(jī)入口電機(jī)和閘機(jī)出口攝像頭控制閘機(jī)出口電機(jī)的車輛進(jìn)出。當(dāng)綠燈和黃燈亮?xí)r,汽車進(jìn)入閘機(jī)可開啟,當(dāng)紅燈亮起時入口閘機(jī)禁止抬起。(這里攝像頭控制閥門我們模擬用I0.0和I0.1來代替)7.3.4實操案例17:車庫出入口閘機(jī)控制4.控制室里有兩個按鈕,一個是計數(shù)清零按鈕,另一個是計數(shù)調(diào)節(jié)按鈕。5.當(dāng)工作人員按下計數(shù)清零按鈕時,計數(shù)器清空里面的數(shù)值,此時所有車輛無法進(jìn)入。6.當(dāng)工作人員按下計數(shù)調(diào)節(jié)按鈕N次,3秒后計數(shù)值當(dāng)前值為N次,1-20循環(huán),即按22次為2次。步驟:1.I/O分配表(見章節(jié)4.3.4)2.PLC外部接線圖(見章節(jié)4.3.4)3.編寫程序7.3.4實操案例17:車庫出入口閘機(jī)控制圖7-22PLC變量7.3.4實操案例17:車庫出入口閘機(jī)控制圖7-23車庫出入口閘機(jī)控制PLC程序7.3.4實操案例17:車庫出入口閘機(jī)控制圖7-23車庫出入口閘機(jī)控制PLC程序7.4比較操作LAD中的大部分比較指令在SCL中基本消失在博圖軟件中的指令欄了,那是因為比較指令大部分是源比較數(shù)據(jù)與目標(biāo)比較數(shù)據(jù)進(jìn)行相比,他們一般比較的狀態(tài)為大于、小于、等于、不等于、大于等于、小于等于之類的比較,我們在SCL中往往用>、<、=、<>、>=、<=,所以本小節(jié)主要是講Type的檢查與判斷。7.4比較操作可以使用TypeOf“檢查VARIANT變量的數(shù)據(jù)類型”指令查詢塊接口中定義的VARIANT形參變量所指向的實參變量的數(shù)據(jù)類型。使用IF語句可以將VARIANT變量與所指向的變量數(shù)據(jù)類型或直接數(shù)據(jù)類型進(jìn)行比較,以確定它們是“相等”還是“不相等”。TypeOf指令沒有對應(yīng)的LAD指令。比較操作數(shù)可以是表7-10所示的數(shù)據(jù)類型。表7-10Typeof指令參數(shù)表參數(shù)聲明數(shù)據(jù)類型存儲區(qū)說明<操作數(shù)>Input二進(jìn)制數(shù)、整數(shù)、浮點數(shù)、時間、日期和時間、字符串、VARIANTL(可在塊接口的“Input”、“InOut”和“Temp”部分進(jìn)行聲明。)用于查詢的操作數(shù)7.4比較操作可以使用TypeOfElements“檢查VARIANT變量的ARRAY元素的數(shù)據(jù)類型”指令查詢塊接口界面形參VARIANT變量所指向的實參ARRAY元素的數(shù)據(jù)類型。用IF語句可以比較實參數(shù)組元素的數(shù)據(jù)類型與在塊接口中聲明的形參變量的數(shù)據(jù)類型,確定形參和實參的數(shù)據(jù)類型是否相等。TypeOfElements指令沒有對應(yīng)的LAD指令。,具體參數(shù)表見表7-11所示。表7-11TypeOfElements指令參數(shù)表參數(shù)聲明數(shù)據(jù)類型存儲區(qū)說明<操作數(shù)>InputVARIANT(可在塊接口的“Input”、“InOut”和“Temp”部分進(jìn)行聲明。)用于查詢的操作數(shù)7.4比較操作可以使用“IS_ARRAY”指令查詢VARIANT是否指向ARRAY數(shù)據(jù)類型的變量?!癐S_ARRAY”需配合IF語句使用?!癐S_ARRAY”指令其參數(shù)見表7-12所示。表7-12IS_ARRAY指令參數(shù)表參數(shù)聲明數(shù)據(jù)類型存儲區(qū)說明<操作數(shù)>InputVARIANTL(可在塊接口的“Input”、“InOut”和“Temp”部分進(jìn)行聲明。)用于查詢的操作數(shù)函數(shù)值UDINTI、Q、M、D、L指令返回結(jié)果7.4.4實操案例18:十字路口交通燈控制任務(wù):使用S7-1200PLC實現(xiàn)十字路口交通燈控制系統(tǒng)??刂埔笕缦拢?.東西方向紅、綠、黃聯(lián)控、南北方向紅、綠、黃聯(lián)控。2.東西方向:先綠燈亮20秒(后3秒以1Hz閃爍),再黃燈常亮3秒,最后紅燈亮,當(dāng)東西方向的紅燈亮?xí)r,南北方向由紅燈切換為綠燈亮(工作),待南北方向由黃燈切換為紅燈時,回到綠燈亮,如此循環(huán)。3.南北方向:先紅燈亮,等待東西方向的紅燈亮?xí)r,綠燈亮30秒(后3秒以1Hz閃爍),再黃燈常量3秒,回到紅燈亮?xí)r東西方向紅燈切換為綠燈亮(工作)如此循環(huán)。4.四個方向不能同時出現(xiàn)紅燈、綠燈、黃燈亮的情況。7.4.4實操案例18:十字路口交通燈控制步驟:1.I/O分配表(見章4.4.4)2.PLC外部接線圖(見章節(jié)4.4.4)3.編寫程序圖7-36PLC變量7.4.4實操案例18:十字路口交通燈控制圖7-37十字路口交通燈控制PLC程序7.5數(shù)學(xué)函數(shù)數(shù)學(xué)函數(shù)指令用來完成數(shù)學(xué)運(yùn)算。在SCL中,加、減、乘、除、取余數(shù)和冪運(yùn)算可以通過+、-、*、/、MOD、**等運(yùn)算符完成,其他更復(fù)雜的數(shù)學(xué)運(yùn)算需要通過數(shù)學(xué)函數(shù)指令完成。ABS:計算絕對值使用“計算絕對值”指令可計算參數(shù)IN的有符號整數(shù)或?qū)崝?shù)的絕對值并將結(jié)果存儲在參數(shù)OUT中。參數(shù)IN和OUT的數(shù)據(jù)類型必須相同。表7-13ABS指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型
OUT:=ABS(IN);
INSInt,Int,DInt,Real,LRealOUTSInt,Int,DInt,Real,LReal7.5數(shù)學(xué)函數(shù)【例7-9】求-130的絕對值。圖7-38ABS指令的SCL應(yīng)用7.5數(shù)學(xué)函數(shù)MIN指令用于比較兩個參數(shù)IN1和IN2的值并將最小值賦值給參數(shù)OUT。MIN指令的IN1、IN2和OUT三個參數(shù)的數(shù)據(jù)類型必須相同,輸入最多32個參數(shù)。表7-14MIN指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型
OUT:=MIN(in1:=_variant_in_,in2:=_variant_in_[,..in32]);
IN1IN2..IN32SInt,Int,DInt,USInt,UInt,UDInt,Real,LReal,Time,Date,TOD,常數(shù)OUTSInt,Int,DInt,USInt,UInt,UDInt,Real,LReal,Time,Date,TOD7.5數(shù)學(xué)函數(shù)【例7-10】求100、150、200的最小值。圖7-39MIN指令的SCL應(yīng)用7.5數(shù)學(xué)函數(shù)MAX指令用于比較兩個參數(shù)IN1和IN2的值并將最大值賦值給參數(shù)OUT。MAX指令的IN1、IN2和OUT三個參數(shù)的數(shù)據(jù)類型必須相同,輸入最多32個參數(shù)。表7-15MAX指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型
out:=MAX(in1:=_variant_in_,in2:=_variant_in_[,..in32]);
IN1IN2..IN32SInt,Int,DInt,USInt,UInt,UDInt,Real,LReal,Time,Date,TOD,常數(shù)OUTSInt,Int,DInt,USInt,UInt,UDInt,Real,LReal,Time,Date,TOD7.5數(shù)學(xué)函數(shù)【例7-11】求100、150、200的最大值。圖7-40MAX指令的SCL應(yīng)用7.5數(shù)學(xué)函數(shù)LIMIT指令用于將輸入?yún)?shù)IN的值限制在輸入下限MN和輸入上限MX之間。如果IN的值滿足條件MN≤IN≤MX,則OUT以IN的值輸出。如果IN值小于MN值則OUT值為參數(shù)MN的值。如果IN值大于MAX值則OUT值為MX的值。參數(shù)MN的值不能大于參數(shù)MX的值。參數(shù)MN、IN、MX和OUT的數(shù)據(jù)類型必須相同。表7-16LIMIT指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型
OUT:=LIMIT(MN:=_variant_in_,IN:=_variant_in_,MX:=_variant_in_);
MN、IN和MXSInt,Int,DInt,USInt,UInt,UDInt,Real,LReal,Time,Date,TOD,常數(shù)OUTSInt,Int,DInt,USInt,UInt,UDInt,Real,LReal,Time,Date,TOD7.5數(shù)學(xué)函數(shù)7.5數(shù)學(xué)函數(shù)使用SQR“計算平方”指令,可以計算輸入值IN的平方值,并將結(jié)果保存到指定的操作數(shù)OUT中。表7-17SQR指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型
OUT:=SQR(IN);或OUT:=IN*IN;
IN浮點數(shù)OUT浮點數(shù)7.5數(shù)學(xué)函數(shù)【例7-13】SQR計算平方的用法。圖7-42SQR指令的SCL應(yīng)用7.5數(shù)學(xué)函數(shù)使用SQRT“計算平方根”指令,可以計算輸入值IN的平方根,并將結(jié)果保存到指定的操作數(shù)OUT中。如果輸入值大于零,則該指令的結(jié)果為正數(shù)。如果輸入值小于零,則該指令返回一個無效浮點數(shù)。如果輸入值為“0”,則結(jié)果也是“0”。表7-18SQRT指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型
OUT:=SQRT(IN);
IN浮點數(shù)OUT浮點數(shù)7.5數(shù)學(xué)函數(shù)【例7-14】SQRT計算平方根的用法。圖7-43SQRT指令的SCL應(yīng)用7.5數(shù)學(xué)函數(shù)使用LN“計算自然對數(shù)”指令,可以計算輸入值的以e(e=2.718282)為底的自然對數(shù)。如果輸入值大于零,則該指令的結(jié)果為正數(shù)。如果輸入值小于零,則該指令返回一個無效浮點數(shù)。表7-19LN指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型
OUT:=LN(IN);
IN浮點數(shù)OUT浮點數(shù)7.5數(shù)學(xué)函數(shù)【例7-15】LN計算自然對數(shù)的用法。圖7-44LN指令的SCL應(yīng)用7.5數(shù)學(xué)函數(shù)使用EXP“計算指數(shù)值”指令,可通過底數(shù)(e=2.718282)及輸入值IN來計算指數(shù),并將結(jié)果保存在指定的操作數(shù)OUT中。表7-20EXP指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型
OUT:=EXP(IN);
IN浮點數(shù)OUT浮點數(shù)7.5數(shù)學(xué)函數(shù)【例7-16】EXP計算指數(shù)值指令的用法。圖7-45EXP指令的SCL應(yīng)用7.5數(shù)學(xué)函數(shù)使用SIN“計算正弦值”指令,可以計算輸入值的正弦值。輸入值采用弧度形式的角度值。表7-21SIN指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型
OUT:=SIN(IN);
IN浮點數(shù)OUT浮點數(shù)7.5數(shù)學(xué)函數(shù)【例7-17】計算+0.52359878(即π/6)的sin值。圖7-46SIN指令的SCL應(yīng)用7.5數(shù)學(xué)函數(shù)使用COS“計算余弦值”指令,可以計算輸入值的余弦值。輸入值采用弧度形式的角度值。表7-22COS指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型
OUT:=COS(IN);
IN浮點數(shù)OUT浮點數(shù)7.5數(shù)學(xué)函數(shù)【例7-18】計算0的cos值。圖7-47COS指令的SCL應(yīng)用7.5數(shù)學(xué)函數(shù)使用TAN“計算正切值”指令,可以計算輸入值的正切值。輸入值采用弧度形式的角度值。表7-23TAN指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型
OUT:=TAN(IN);
IN浮點數(shù)OUT浮點數(shù)7.5數(shù)學(xué)函數(shù)【例7-19】計算0.785的TAN值。圖7-48TAN指令的SCL應(yīng)用7.5數(shù)學(xué)函數(shù)使用ASIN“計算反正弦值”指令,可以計算正弦值所對應(yīng)的角度值。輸入值只能是-1到+1范圍內(nèi)的有效浮點數(shù)。計算出的角度值以弧度為單位,范圍在-π/2到+π/2之間。表7-24ASIN指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型
OUT:=ASIN(IN);
IN浮點數(shù)OUT浮點數(shù)7.5數(shù)學(xué)函數(shù)【例7-20】計算0.5的ASIN值。圖7-49ASIN指令的SCL應(yīng)用7.5數(shù)學(xué)函數(shù)使用ACOS“計算反余弦值”指令,可以計算余弦值所對應(yīng)的角度值。輸入值只能是-1到+1范圍內(nèi)的有效浮點數(shù)。計算出的角度值以弧度為單位,范圍在0到+π之間。表7-25ACOS指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型
OUT:=ACOS(IN);
IN浮點數(shù)OUT浮點數(shù)7.5數(shù)學(xué)函數(shù)【例7-21】計算0的ACOS值。圖7-50ACOS指令的SCL應(yīng)用7.5數(shù)學(xué)函數(shù)使用ATAN“計算反正切值”指令,可以計算正切值所對應(yīng)的角度值。輸入值只能是有效的浮點數(shù)(或-NaN/+NaN)。計算出的角度值以弧度為單位,范圍在-π/2到+π/2之間。表7-26ATAN指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型
OUT:=ATAN(IN);
IN浮點數(shù)OUT浮點數(shù)7.5數(shù)學(xué)函數(shù)【例7-22】計算1.0的ATAN值。圖7-51ATAN指令的SCL應(yīng)用7.5數(shù)學(xué)函數(shù)使用FRAC“返回小數(shù)”指令的結(jié)果將返回數(shù)值的小數(shù)位。例如,輸入值123.4567時,將返回值0.4567。使用以下語法更改指令的數(shù)據(jù)類型:FRAC_<datatype>();表7-27FRAC指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型
OUT:=FRAC(IN);
IN浮點數(shù)OUT浮點數(shù)7.5數(shù)學(xué)函數(shù)【例7-23】計算123.456的FRAC值。圖7-52FRAC指令的SCL應(yīng)用7.5.16實操案例19:數(shù)學(xué)運(yùn)算指令的綜合應(yīng)用任務(wù):編程實現(xiàn){[(13+14+24)-40]×49÷17.5}4的運(yùn)算結(jié)果,結(jié)果保存在MD200中。圖7-53數(shù)學(xué)運(yùn)算指令的綜合應(yīng)用SCL程序7.6
移動操作使用“Serialize”指令將多個PLC數(shù)據(jù)類型(UDT)轉(zhuǎn)換成按順序表達(dá)的版本,并且不丟失結(jié)構(gòu)??梢允褂迷撝噶钆R時將用戶程序的多個結(jié)構(gòu)化數(shù)據(jù)項保存到緩沖區(qū)中(最好位于全局?jǐn)?shù)據(jù)塊中),并發(fā)送到其它CPU。用于保存轉(zhuǎn)換后數(shù)據(jù)的存儲區(qū)的數(shù)據(jù)類型必需為ARRAYofBYTE或ARRAYofCHAR。表7-28Serialize指令對照及參數(shù)表表7-28Serialize指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型
ret_val:=Serialize(SRC_VARIABLE=>_variant_in_,DEST_ARRAY:=_variant_out_,POS:=_dint_inout_);SRC_VARIABLE所有數(shù)據(jù)類型DEST_ARRAYARRAYofBYTE或ARRAYofCHARPOSDINT函數(shù)值INT7.6
移動操作可以使用“Deserialize”指令將PLC數(shù)據(jù)類型(UDT)塊的順序表示轉(zhuǎn)換回PLC數(shù)據(jù)類型并填充所有內(nèi)容。該指令可以將多個按順序表示的已轉(zhuǎn)換PLC數(shù)據(jù)類型重新轉(zhuǎn)換回之前的原始數(shù)據(jù)類型。表7-29Deserialize指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型
ret_val:=Deserialize(SRC_ARRAY:=_variant_in_,DEST_VARIABLE=>_variant_out_,POS:=_dint_inout_);SRC_ARRAYARRAYofBYTE或ARRAYofCHARDEST_VARIABLE所有數(shù)據(jù)類型POSDINT函數(shù)值INT7.6
移動操作MOVE_BLK可以使用“移動塊”(Moveblock)指令將一個存儲區(qū)(源范圍)的數(shù)據(jù)移動到另一個存儲區(qū)(目標(biāo)范圍)中。使用參數(shù)COUNT可以指定將移動到目標(biāo)范圍中的元素個數(shù)。待移動元素的寬度由源區(qū)域中第一個元素的寬度決定。在S7-1200中,MOVE_BLK只適合實現(xiàn)對數(shù)據(jù)塊中的數(shù)組進(jìn)行移動,不能實現(xiàn)對不是數(shù)據(jù)塊的存儲器進(jìn)行塊移動。僅當(dāng)源范圍和目標(biāo)范圍的數(shù)據(jù)類型相同時,才能執(zhí)行該指令。表7-29Deserialize指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型
MOVE_BLK(IN:=_byte_in_,COUNT:=_uint_in_,OUT=>_byte_out_);IN二進(jìn)制數(shù)、整數(shù)、浮點數(shù)、定時器、DATE、CHAR、WCHAR、TODCOUNTUSINT、UINT、UDINTOUT二進(jìn)制數(shù)、整數(shù)、浮點數(shù)、定時器、DATE、CHAR、WCHAR、TOD7.6
移動操作【例7-25】使用MOVE_BLK:移動塊指令對數(shù)據(jù)塊DB1中的班級1數(shù)據(jù)移動到數(shù)據(jù)塊DB1中的班級2。具體操作方法:在DB1中建立兩個數(shù)組,進(jìn)行數(shù)據(jù)傳輸。a)SCL程序7.6
移動操作b)程序運(yùn)行監(jiān)控
圖7-55MOVE_BLK指令的應(yīng)用7.6
移動操作MOVE_BLK_VARIANT可以使用“移動塊”(Moveblock)指令將一個存儲區(qū)(源范圍)的數(shù)據(jù)移動到另一個存儲區(qū)(目標(biāo)范圍)中??梢詫⒁粋€完整的ARRAY或ARRAY的元素復(fù)制到另一個相同數(shù)據(jù)類型的ARRAY中。源ARRAY和目標(biāo)ARRAY的大?。ㄔ貍€數(shù))可能會不同??梢詮?fù)制一個ARRAY內(nèi)的多個或單個元素。要復(fù)制的元素數(shù)量不得超過所選源范圍或目標(biāo)范圍。7.6
移動操作表7-31MOVE_BLK_VARIANT指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型MOVE_BLK(in:=_variant_in,count:=_uint_in,out=>_variant_out);
SRCVARIANT(指向一個ARRAY或一個ARRAY元素),ARRAYof<數(shù)據(jù)類型>,不為BOOL和BOOL型ARRAYCOUNTUDINTSRC_INDEXDINTDEST_INDEXDINTDESTVARIANTRET_VALINT7.6
移動操作【例7-26】使用MOVE_BLK_VARIANT:移動塊指令對數(shù)據(jù)塊DB1中的班級1數(shù)據(jù)移動到數(shù)據(jù)塊DB1中的班級2。具體操作方法:在DB1中建立兩個數(shù)組,進(jìn)行數(shù)據(jù)傳輸。a)SCL程序7.6
移動操作b)程序運(yùn)行監(jiān)控圖7-56MOVE_BLK_VARIANT指令的應(yīng)用7.6
移動操作UMOVE_BLK指令與MOVE_BLK指令的功能一致,區(qū)別在于UMOVE_BLK指令在執(zhí)行的時候不可以被中斷,也就是此時CPU不會響應(yīng)其他中斷,得UMOVE_BLK指令執(zhí)行完之后再響應(yīng),因此UMOVE_BLK指令需謹(jǐn)慎使用。當(dāng)需要連續(xù)執(zhí)行移動操作且要求不被中斷,可以使用UMOVE_BLK指令。僅當(dāng)源范圍和目標(biāo)范圍的數(shù)據(jù)類型相同時,才能執(zhí)行該指令。表7-32UMOVE_BLK指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型UMOVE_BLK(IN:=_byte_in_,COUNT:=_uint_in_,OUT=>_byte_out_);IN二進(jìn)制數(shù)、整數(shù)、浮點數(shù)、定時器、DATE、CHAR、WCHAR、TODCOUNTUSINT、UINT、UDINTOUT二進(jìn)制數(shù)、整數(shù)、浮點數(shù)、定時器、DATE、CHAR、WCHAR、TOD7.6
移動操作a)SCL程序b)程序運(yùn)行監(jiān)控圖7-57UMOVE_BLK指令的應(yīng)用從圖7-57b監(jiān)控中我們發(fā)現(xiàn),當(dāng)變量Start_1為0時,數(shù)組數(shù)據(jù)不發(fā)生移動。當(dāng)Start_1為1時,執(zhí)行UMOVE_BLK指令,將數(shù)組A_1[1]開始的2個元素移動到以數(shù)組元素B_1[0]開始的2個元素中。7.6
移動操作可以使用“FILL_BLK:填充塊”指令,用參數(shù)IN的值填充一個存儲區(qū)域(目標(biāo)范圍)。從輸出OUT指定的地址開始填充目標(biāo)范圍。可以使用參數(shù)COUNT指定復(fù)制操作的重復(fù)次數(shù)。執(zhí)行該指令時,輸入IN中的值將移動到目標(biāo)范圍,重復(fù)次數(shù)由參數(shù)COUNT的值指定。僅當(dāng)源范圍和目標(biāo)范圍的數(shù)據(jù)類型相同時,才能執(zhí)行該指令。復(fù)制操作的最大重復(fù)次數(shù)為ARRAY或結(jié)構(gòu)中的元素個數(shù)。表7-33FILL_BLK指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型FILL_BLK(IN:=_byte_in_,COUNT:=_uint_in_,OUT=>_byte_out_);IN二進(jìn)制數(shù)、整數(shù)、浮點數(shù)、定時器、DATE、CHAR、WCHAR、TODCOUNTUSINT、UINT、UDINTOUT二進(jìn)制數(shù)、整數(shù)、浮點數(shù)、定時器、DATE、CHAR、WCHAR、TOD7.6
移動操作
圖7-58FILL_BLK指令的應(yīng)用b)程序運(yùn)行監(jiān)控
a)SCL程序從圖7-58b監(jiān)控中我們發(fā)現(xiàn),當(dāng)變量Start_1為0時,不發(fā)生復(fù)制。當(dāng)Start_1為1時,執(zhí)行FILL_BLK指令,將浮點型數(shù)值1.1復(fù)制到數(shù)組B_1[0]開始的2個元素中。7.6
移動操作可以使用“不可中斷的存儲區(qū)填充”(Fillblockuninterruptible)指令,將參數(shù)IN輸入的值填充一個存儲區(qū)域,存儲區(qū)域變量的值都將被賦值為參數(shù)IN的值。該指令與FILL_BLK指令的功能一致,區(qū)別在于UFILL_BLK指令在執(zhí)行的時候不可以被中斷,也就是此時CPU不會響應(yīng)其他中斷,得UFILL_BLK指令執(zhí)行完之后再響應(yīng),因此UMOVE_BLK指令需謹(jǐn)慎使用。該指令不可中斷。從輸出OUT指定的地址開始填充目標(biāo)范圍。可以使用參數(shù)COUNT指定復(fù)制操作的重復(fù)次數(shù)。執(zhí)行該指令時,輸入IN中的值將移動到目標(biāo)范圍,重復(fù)次數(shù)由參數(shù)COUNT的值指定。僅當(dāng)源范圍和目標(biāo)范圍的數(shù)據(jù)類型相同時,才能執(zhí)行該指令。復(fù)制操作的最大重復(fù)次數(shù)為ARRAY或結(jié)構(gòu)中的元素個數(shù)。表7-34UFILL_BLK指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型UFILL_BLK(in:=_variant_in,count:=int,out=>_variant_out);IN二進(jìn)制數(shù)、整數(shù)、浮點數(shù)、定時器、DATE、CHAR、WCHAR、TODCOUNTUSINT、UINT、UDINTOUT二進(jìn)制數(shù)、整數(shù)、浮點數(shù)、定時器、DATE、CHAR、WCHAR、TOD7.6
移動操作
圖7-59UFILL_BLK指令的應(yīng)用b)程序運(yùn)行監(jiān)控
a)SCL程序從圖7-59b監(jiān)控中我們發(fā)現(xiàn),當(dāng)變量Start_1為0時,不發(fā)生復(fù)制。當(dāng)Start_1為1時,執(zhí)行UFILL_BLK指令,將浮點型數(shù)值1.1復(fù)制到數(shù)組B_1[1]開始的2個元素中。7.6
移動操作SCATTER指令的功能是將一個word、Byte、Dword的數(shù)據(jù)類型轉(zhuǎn)換為單個的位。并保存在ARRAYofBOOL、匿名STRUCT或僅包含有布爾型元素的PLC數(shù)據(jù)類型中。ARRAY、STRUCT或PLC數(shù)據(jù)類型中包含的元素數(shù)目必須恰好等于位序列指定的數(shù)量。當(dāng)輸入數(shù)據(jù)類型為BYTE,則輸出的目標(biāo)ARRAY、STRUCT或PLC數(shù)據(jù)類型中必須恰好包含8個元素;當(dāng)輸入數(shù)據(jù)類型為WORD,則輸出的目標(biāo)ARRAY、STRUCT或PLC數(shù)據(jù)類型中必須恰好包含16個元素;當(dāng)輸入數(shù)據(jù)類型DWORD,則輸出的目標(biāo)數(shù)據(jù)類型中必須恰好包含32個元素;LWORD則為64個元素。表7-35SCATTER指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型SCATTER(IN:=_byte_in_,OUT=>_bool_out_);IN二進(jìn)制數(shù)、整數(shù)、浮點數(shù)、定時器、DATE、CHAR、WCHAR、TODOUT二進(jìn)制數(shù)、整數(shù)、浮點數(shù)、定時器、DATE、CHAR、WCHAR、TOD7.6
移動操作
圖7-60SCATTER指令的應(yīng)用b)程序運(yùn)行監(jiān)控
a)SCL程序從圖7-60b監(jiān)控中我們發(fā)現(xiàn),當(dāng)變量Start_1為0時,不發(fā)生解析。當(dāng)Start_1為1時,執(zhí)行SCATTER指令,將十六進(jìn)制的Byte數(shù)值A(chǔ)轉(zhuǎn)換為八位二進(jìn)制的位數(shù)值分布在八位數(shù)組元素B_1[0]—B_1[7]中。解析轉(zhuǎn)換完畢后,數(shù)組元素B_1[2]數(shù)值為0,Result_1變量為FALSE。數(shù)組元素B_1[3]數(shù)值為1,Result_2變量為TRUE。7.6
移動操作SCATTER_BLK指令用于將BYTE、WORD、DWORD或LWORD數(shù)據(jù)類型的ARRAY分解為單個位,并保存在元素類型僅為布爾型的ARRAYofBOOL、匿名STRUCT或PLC數(shù)據(jù)類型中。在COUNT參數(shù)中,可指定待解析源ARRAY中的元素數(shù)目。從分配給參數(shù)OUT指定的元素開始,將參數(shù)IN數(shù)組下限元素開始的第COUNT個BYTE、WORD、DWORD或LWORD解析為單個的位。要保存解析后的各個位,OUT參數(shù)中必須包含足夠的元素數(shù)量。但這可能會增加目標(biāo)存儲區(qū)空間。表7-36SCATTER_BLK指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型SCATTER_BLK(IN:=_byte_in_,COUNT_IN:=_uint_in_,OUT=>_bool_out_);INARRAY[*]of<位序列>的元素COUNT_INUSINT,UINT,UDINTOUTARRAY[*]ofBOOL、STRUCT或PLC數(shù)據(jù)類型的元素7.6
移動操作
圖7-61SCATTER_BLK指令的應(yīng)用b)程序運(yùn)行監(jiān)控
a)SCL程序從圖7-61b監(jiān)控中我們發(fā)現(xiàn),當(dāng)變量Start_1為0時,不發(fā)生解析。當(dāng)Start_1為1時,執(zhí)行SCATTER_BLK指令,將Input_1數(shù)組中的Input_1[2]、十六進(jìn)制的Byte數(shù)值07轉(zhuǎn)換為八位二進(jìn)制的位數(shù)值分布在八位數(shù)組元素B_1[0]—B_1[7]中。解析轉(zhuǎn)換完畢后,數(shù)組元素B_1[2]數(shù)值為1,Result_1變量為TRUE。數(shù)組元素B_1[3]數(shù)值為0,Result_2變量為FALSE。7.6
移動操作GATHER指令“將各個位組合為位序列”用于將僅包含布爾型元素的ARRAYofBOOL、STRUCT或PLC數(shù)據(jù)類型中的各個位組合為一個位序列。組合后的位序列,保存在一個變量中,變量數(shù)據(jù)類型為BYTE、WORD、DWORD或LWORD。ARRAY、STRUCT或PLC數(shù)據(jù)類型中包含的元素數(shù)目必須恰好等于位序列對應(yīng)的數(shù)量。當(dāng)輸出數(shù)據(jù)類型為BYTE,則輸入的目標(biāo)ARRAY、STRUCT或PLC數(shù)據(jù)類型中必須恰好包含8個元素;當(dāng)輸出數(shù)據(jù)類型為WORD,則輸入的目標(biāo)ARRAY、STRUCT或PLC數(shù)據(jù)類型中必須恰好包含16個元素;當(dāng)輸出數(shù)據(jù)類型DWORD,則輸入的目標(biāo)數(shù)據(jù)類型中必須恰好包含32個元素;LWORD則為64個元素。表7-37GATHER指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型GATHER(IN:=_bool_in_,OUT=>_byte_out_);INARRAY[*]ofBOOL、STRUCT或PLC數(shù)據(jù)類型*:8、16、32或64個元素OUTBYTE、WORD、DWORD7.6
移動操作
圖7-62GATHER指令的應(yīng)用b)程序運(yùn)行監(jiān)控
a)SCL程序從圖7-62b監(jiān)控中我們發(fā)現(xiàn),當(dāng)變量Start_1為0時,不發(fā)生組合。當(dāng)Start_1為1時,執(zhí)行GATHER指令,將Input_1數(shù)組中的八位二進(jìn)制的數(shù)組元素的值轉(zhuǎn)換為十六進(jìn)制數(shù)保存在Byte型變量B_1中。7.6
移動操作GATHER_BLK指令“將各個位組合為ARRAYof<位序列>的多個元素”用于將僅包含布爾型元素的ARRAY數(shù)組、STRUCT或PLC數(shù)據(jù)類型中的各個位組合為ARRAYof<位序列>中的一個或多個元素??梢栽贑OUNT_OUT參數(shù)中指定要寫入的目標(biāo)ARRAY元素數(shù)量。OUT參數(shù)中目標(biāo)ARRAY的元素數(shù)量必須包含足夠的元素數(shù)目。表7-38GATHER_BLK指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型GATHER_BLK(IN:=_bool_in_,COUNT_OUT:=_uint_in_,OUT=>_byte_out_);INARRAY[]ofBOOL、STRUCT或PLC數(shù)據(jù)類型COUNT_OUTUSINT,UINT,UDINTOUTARRAY[]of<位序列>的數(shù)組元素7.6
移動操作
圖7-63GATHER_BLK指令的應(yīng)用b)程序運(yùn)行監(jiān)控
a)SCL程序從圖7-63b監(jiān)控中我們發(fā)現(xiàn),當(dāng)變量Start_1為0時,不發(fā)生組合。當(dāng)Start_1為1時,執(zhí)行GATHER_BLK指令,對輸入的數(shù)組元素A_1[2]開始的2個Byte數(shù)量即16位的二進(jìn)制元素串轉(zhuǎn)換為2個十六進(jìn)制數(shù)值,然后保存在輸出數(shù)組元素B_1[1]開始的2個數(shù)組元素中。7.6
移動操作SWAP交換指令可以更改輸入?yún)?shù)IN中字節(jié)的排列順序,并將結(jié)果保存在指定的操作數(shù)OUT中。在SCL中,該指令是一個表達(dá)式,指令結(jié)果作為函數(shù)值返回,因此需要定義變量接收該函數(shù)返回值。表7-39SWAP:交換指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型OUT:=SWAP(IN);<表達(dá)式>WORD,DWORD函數(shù)值WORD,DWORD7.6
移動操作
圖7-64GATHER_BLK指令的應(yīng)用b)程序運(yùn)行監(jiān)控
a)SCL程序從圖7-62b監(jiān)控中我們發(fā)現(xiàn),從圖7-64b監(jiān)控中我們發(fā)現(xiàn),當(dāng)變量Start_1為0時,不發(fā)生變換。當(dāng)Start_1為1時,執(zhí)行SWAP交換指令,對輸入變量A_1的十六進(jìn)制數(shù)值A(chǔ)1B2C3D4交換順序變成十六進(jìn)制數(shù)值D4C3B2A1,數(shù)值D4C3B2A1以函數(shù)值返回賦值給了變量B_1。7.6.13實操案例20:一個數(shù)碼管顯示9秒的倒計時控制任務(wù):使用S7-1200PLC實現(xiàn)一個數(shù)碼管顯示9秒的倒計時控制??刂埔笫钱?dāng)按鈕I0.0按下后,數(shù)碼管顯示9、8、7、6、5、4、3、2、1、0,熄滅。數(shù)字切換間隔1秒。步驟:I/O分配表(見章節(jié)4.6.8)2.PLC外部接線圖(見章節(jié)4.6.8)3.編寫程序(見章節(jié)7.6.13)7.6.13實操案例20:一個數(shù)碼管顯示9秒的倒計時控制
思考一下,數(shù)碼顯示輸出部分是否可以優(yōu)化程序?或者用其他指令來做。CASE語句。7.7轉(zhuǎn)換操作使用該指令時,“轉(zhuǎn)換”(CONVERT)對話框首先彈出。需先在此對話框中指定轉(zhuǎn)換的源數(shù)據(jù)類型和目標(biāo)數(shù)據(jù)類型。該指令將讀取源值并將其轉(zhuǎn)換為指定的目標(biāo)數(shù)據(jù)類型。參數(shù)IN的存儲區(qū)有I、Q、M、D、L、P或常量,參數(shù)OUT的存儲區(qū)有I、Q、M、D、L、P或常量。在SCL中,該指令是一個表達(dá)式,指令結(jié)果作為函數(shù)值返回,因此需要定義變量接收該函數(shù)返回值。表7-40CONVERT:轉(zhuǎn)換值指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型OUT:=<datatypein>_TO_<datatypeout>(byte_in);源類型(要轉(zhuǎn)換的值)二進(jìn)制數(shù)、整數(shù)、浮點數(shù)、時間、日期和時間、字符串、BCD16和BCD32目標(biāo)類型(轉(zhuǎn)換結(jié)果)二進(jìn)制數(shù)、整數(shù)、浮點數(shù)、時間、日期和時間、字符串、BCD16和BCD327.7轉(zhuǎn)換操作
圖7-66CONVERT指令的應(yīng)用b)程序運(yùn)行監(jiān)控
a)SCL程序從圖7-66b監(jiān)控中我們發(fā)現(xiàn),當(dāng)Start_1為1時,執(zhí)行第一條CONVERT轉(zhuǎn)換值指令REAL_TO_INT,對輸入變量Input_1的浮點型數(shù)值3.5按照四舍五入的原則轉(zhuǎn)變成整型數(shù)值4并以函數(shù)值返回賦值給了變量Result_1。然后執(zhí)行第二條CONVERT轉(zhuǎn)換值指令I(lǐng)NT_TO_REAL,對輸入變量Input_2的整型數(shù)值4轉(zhuǎn)變成浮點型數(shù)值4.0并以函數(shù)值返回賦值給了變量Result_2。7.7轉(zhuǎn)換操作ROUND“取整”指令用于將輸入IN的值取整為最接近的整數(shù)。該指令將輸入IN的值解釋為浮點數(shù),并將其轉(zhuǎn)換為一個整數(shù)或浮點數(shù)。如果輸入值恰好是在一個偶數(shù)和一個奇數(shù)之間,則選擇偶數(shù)。在SCL中,該指令是一個表達(dá)式,指令結(jié)果作為函數(shù)值返回,因此需要定義變量接收該函數(shù)返回值。表7-41ROUND:取整指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型OUT:=ROUND(IN);IN浮點數(shù)OUT整數(shù)、浮點數(shù)7.7轉(zhuǎn)換操作
圖7-67ROUND指令的應(yīng)用b)程序運(yùn)行監(jiān)控
a)SCL程序從圖7-67b監(jiān)控中我們發(fā)現(xiàn),當(dāng)Start_1為1時,依次執(zhí)行四條ROUND取整指令,對輸入的四個浮點型數(shù)值3.49、3.5、-3.49和-3.5分別取整為最接近的整數(shù)3、4、-3和-4,以函數(shù)值返回賦值給變量Result_1。7.7轉(zhuǎn)換操作使用CEIL“浮點數(shù)向上取整”指令將值取整為最近接的整數(shù)。該指令將輸入值解釋為浮點數(shù),并將其轉(zhuǎn)換為緊鄰的較大整數(shù)。函數(shù)值可以大于或等于輸入值。若需更改數(shù)據(jù)類型,在CEIL后輸入英文狀態(tài)下的_符號則彈出數(shù)據(jù)類型選擇框進(jìn)行選擇。在SCL中,該指令是一個表達(dá)式,指令結(jié)果作為函數(shù)值返回,因此需要定義變量接收該函數(shù)返回值。表7-42CEIL:浮點數(shù)向上取整指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型OUT:=CEIL(IN);<表達(dá)式>浮點數(shù)<數(shù)據(jù)類型>整數(shù)、浮點數(shù)默認(rèn):DINT函數(shù)值整數(shù)、浮點數(shù)7.7轉(zhuǎn)換操作
圖7-68CEIL指令的應(yīng)用b)程序運(yùn)行監(jiān)控
a)SCL程序從圖7-68b監(jiān)控中我們發(fā)現(xiàn),當(dāng)Start_1為1時,首先執(zhí)行第一條指令CEIL,對輸入變量Input_1的浮點型數(shù)值3.5向上取整為4以函數(shù)返回值賦值給變量Result_1。接著執(zhí)行第二條指令CEIL,對輸入變量Input_2的浮點型數(shù)值-3.5向上取整為-3以函數(shù)返回值賦值給變量Result_2。然后執(zhí)行第三條指令CEIL_REAL對輸入變量Input_3的浮點型數(shù)值-3.5向上取浮點數(shù)為-3.0以函數(shù)返回值賦值給變量Result_3。最后執(zhí)行第四條指令CEIL_REAL對輸入變量Input_4的浮點型數(shù)值-3.5向上取整再變浮點數(shù)為-3.0以函數(shù)返回值賦值給變量Result_4。7.7轉(zhuǎn)換操作該指令將輸入值解釋為浮點數(shù),并將其轉(zhuǎn)換為緊鄰的較小整數(shù)。函數(shù)值可等于或小于輸入值。若需更改數(shù)據(jù)類型,在FLOOR后輸入英文狀態(tài)下的_符號則彈出數(shù)據(jù)類型選擇框進(jìn)行選擇。在SCL中,該指令是一個表達(dá)式,指令結(jié)果作為函數(shù)值返回,因此需要定義變量接收該函數(shù)返回值。表7-43FLOOR:浮點數(shù)向下取整指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型OUT:=FLOOR(IN);<表達(dá)式>浮點數(shù)<數(shù)據(jù)類型>整數(shù)、浮點數(shù)默認(rèn):DINT函數(shù)值整數(shù)、浮點數(shù)7.7轉(zhuǎn)換操作
圖7-69FLOOR指令的應(yīng)用b)程序運(yùn)行監(jiān)控
a)SCL程序從圖7-69b監(jiān)控中我們發(fā)現(xiàn),當(dāng)Start_1為1時,首先執(zhí)行第一條指令FLOOR,對輸入變量Input_1的浮點型數(shù)值3.5向下取整為3以函數(shù)返回值賦值給變量Result_1。接著執(zhí)行第二條指令FLOOR,對輸入變量Input_2的浮點型數(shù)值-3.5向下取整為-4以函數(shù)返回值賦值給變量Result_2。然后執(zhí)行第三條指令FLOOR_REAL對輸入變量Input_3的浮點型數(shù)值3.5向下取整再變浮點數(shù)為3.0以函數(shù)返回值賦值給變量Result_3。最后執(zhí)行第四條指令FLOOR_REAL對輸入變量Input_4的浮點型數(shù)值-3.5向下取整再變浮點數(shù)為-4.0以函數(shù)返回值賦值給變量Result_4。7.7轉(zhuǎn)換操作TRUNC“截尾取整”指令用于截取輸入值的整數(shù)部分,并將整數(shù)部分(不含小數(shù)位)作為函數(shù)值返回。若需更改數(shù)據(jù)類型,在TRUNC后輸入英文狀態(tài)下的_符號則彈出數(shù)據(jù)類型選擇框進(jìn)行選擇。在SCL中,該指令是一個表達(dá)式,指令結(jié)果作為函數(shù)值返回,因此需要定義變量接收該函數(shù)返回值。表7-44TRUNC:截尾取整指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型OUT:=TRUNC(IN);IN浮點數(shù)OUT整數(shù)、浮點數(shù)7.7轉(zhuǎn)換操作
圖7-70TRUNC指令的應(yīng)用b)程序運(yùn)行監(jiān)控
a)SCL程序當(dāng)Start_1為1時,首先執(zhí)行第一條指令TRUNC,對輸入變量Input_1的浮點型數(shù)值3.15取整為3以函數(shù)返回值賦值給變量Result_1。接著執(zhí)行第二條指令TRUNC_REAL,對輸入變量Input_2的浮點型數(shù)值3.15取整后再變?yōu)楦↑c數(shù)3.0以函數(shù)返回值賦值給變量Result_2。然后執(zhí)行第三條指令TRUNC_REAL對輸入變量Input_3的浮點型數(shù)值-3.15取整為3.0以函數(shù)返回值賦值給變量Result_3。最后執(zhí)行第四條指令FLOOR_REAL對輸入變量Input_4的浮點型數(shù)值-3.15取整再變浮點數(shù)為-3.0以函數(shù)返回值賦值給變量Result_4。7.7轉(zhuǎn)換操作NORM_X為標(biāo)準(zhǔn)化/歸一化指令,通過將輸入VALUE中變量的值按照相對于最大值最小值之間的比例縮放到[0,1]之間,對其進(jìn)行歸一化后以O(shè)UT輸出。參數(shù)MIN、MAX和OUT的數(shù)據(jù)類型必須相同。若需更改其他數(shù)據(jù)類型,則需在NORM_X后面輸入英文狀態(tài)下的_符號彈出數(shù)據(jù)類型選擇框進(jìn)行選擇。輸出OUT中的數(shù)據(jù)類型為浮點數(shù),OUT輸出的計算公式為:OUT=(VALUE–MIN)/(MAX–MIN);參數(shù)MIN、VALUE、MAX的存儲區(qū)均為I、Q、M、D、L表7-45
NORM_X:縮放指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型OUT:=NORM_X(min:=_in_,value:=_in_,max:=_in_);MINSInt,Int,DInt,USInt,UInt,UDInt,Real,LRealVALUESInt,Int,DInt,USInt,UInt,UDInt,Real,LRealMAXSInt,Int,DInt,USInt,UInt,UDInt,Real,LRealOUTReal,LReal7.7轉(zhuǎn)換操作
圖7-72NORM_X:標(biāo)準(zhǔn)化指令的用法從圖7-72監(jiān)控中我們發(fā)現(xiàn),對輸入變量數(shù)據(jù)塊_1.VALUE的值12345在區(qū)間[0,27648]之間做歸一化處理,歸一化后值為(12345-0)/(27648-0)=0.4465061賦值給數(shù)據(jù)塊_1.OUT圖7-71NORM_X:標(biāo)準(zhǔn)化7.7轉(zhuǎn)換操作使用SCALE_X:縮放“縮放”指令可以將0-1之間的浮點數(shù)按照指定的取值范圍來進(jìn)行縮小或放大??s放后的取值范圍為參數(shù)MIN至參數(shù)MAX之間的數(shù)值,縮放后結(jié)果為整數(shù)。若需更改其他數(shù)據(jù)類型,則需在SCALE_X后面輸入英文狀態(tài)下的_符號彈出數(shù)據(jù)類型選擇框進(jìn)行選擇。Result將按以下公式進(jìn)行計算:OUT=VALUE*(MAX–MIN)+MIN;表7-46SCALE_X:縮放指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型OUT:=SCALE_X(MIN:=_int_in_,VALUE:=_real_in_,MAX:=_int_in_);MINSInt,Int,DInt,USInt,UInt,UDInt,Real,LRealVALUEReal,LRealMAXSInt,Int,DInt,USInt,UInt,UDInt,Real,LRealOUTSInt,Int,DInt,USInt,UInt,UDInt,Real,LReal7.7轉(zhuǎn)換操作
圖7-74SCALE_X:縮放指令的用法從圖7-74監(jiān)控中我們發(fā)現(xiàn),對輸入變量數(shù)據(jù)塊_1.VALUE的值0.4465061在區(qū)間[0,27648]之間做放大,放大后后值為0.4465061*(27648-0)=12345賦值給數(shù)據(jù)塊_1.OUT??梢钥闯鯯CALE_X指令是NORM_X指令的逆運(yùn)算。圖7-73SCALE_X:縮放7.7.8實操案例21:深度測量傳感器模擬量控制任務(wù):使用S7-1200PLC實現(xiàn)一個深度測量傳感器模擬量控制??刂埔螅荷疃葴y量傳感器可以0-10cm的深度,其電流信號為0~20mA,通過PLC獲取信號模擬量并進(jìn)行轉(zhuǎn)換深度值。步驟:1.I/O分配表(見章節(jié)4.7.8)2.PLC外部接線圖(見章節(jié)4.7.8)3.編寫程序圖7-75PLC變量圖7-76深度測量傳感器模擬量控制SCL程序7.8字邏輯運(yùn)算DECO解碼指令用于在輸出值中將輸入值所指定的位號的位置1,其余位全部賦值為0,輸出值中被置1的位號就是輸入IN的值,位號從左到右為從高到低排布,最右邊是第0位,從最右邊作為第0位往高位數(shù),第幾位那么位號就是幾。輸出值的數(shù)據(jù)類型可以為字節(jié)、字、雙字。若需更改數(shù)據(jù)類型,在DECO后輸入英文狀態(tài)下的_符號則彈出數(shù)據(jù)類型選擇框選擇,如DECO_BYTE(_uint_in_)。表7-47DECO:解碼指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型OUT:=DECO(_in_);INUINT<數(shù)據(jù)類型>位字符串默認(rèn):DWORD函數(shù)值位字符串7.8字邏輯運(yùn)算
圖7-77DECO指令的應(yīng)用b)程序運(yùn)行監(jiān)控
a)SCL程序從圖7-77b監(jiān)控中我們發(fā)現(xiàn),當(dāng)Start_1為1時,首先執(zhí)行第一條指令DECO,在輸出值中將第0位置1,其他位置0,因此可以看出輸出值最低位為第0位,以函數(shù)返回值賦值給變量Result_1。接著執(zhí)行第二條指令DECO,在輸出值中將第15位置1,其他位置0,因此可以看出輸出值中含有16個數(shù)但最高位為第15位,以函數(shù)返回值賦值給變量Result_2。然后執(zhí)行第三條指令DECO,在輸出值中將第1位置1,其他位置0,以函數(shù)返回值賦值給變量Result_3。最后執(zhí)行執(zhí)行第四條指令DECO,在輸出值中將第3位置1(取35除以32的余數(shù)3),其他位置0,函數(shù)返回值賦值給變量Result_4。7.8字邏輯運(yùn)算使用“編碼”(ENCO)指令查找輸入值中所有位號中值為1的最低位的位號,并將此編號作為結(jié)果返回。和DECO解碼指令一樣,也是最右邊位為第0位,位編號從右往左依次增大。若需更改數(shù)據(jù)類型,在新建輸入值變量時選擇相應(yīng)的數(shù)據(jù)類型即可,輸入值支持的數(shù)據(jù)類型有雙字/字/字節(jié)。表7-48ENCO:編碼指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型OUT:=ENCO(_in_);IN位字符串函數(shù)值INT7.8字邏輯運(yùn)算
圖7-78DECO指令的應(yīng)用b)程序運(yùn)行監(jiān)控
a)SCL程序從圖7-78b監(jiān)控中我們發(fā)現(xiàn),當(dāng)Start_1為1時,首先執(zhí)行第一條指令ENCO,查找出輸入值中為1的最低位為第0位,以函數(shù)返回值賦值給變量Result_1。接著執(zhí)行第二條指令ENCO,查找出輸入值中為1的最低位為第15位,以函數(shù)返回值賦值給變量Result_2。然后執(zhí)行第三條指令ENCO,查找出輸入值中為1的最低位為第5位,以函數(shù)返回值賦值給變量Result_3。7.8字邏輯運(yùn)算“選擇”(SEL)指令根據(jù)開關(guān)(參數(shù)G)的情況,選擇輸入IN0或IN1中的一個,并將選擇后的參數(shù)值賦值給輸出參數(shù)OUT。參數(shù)G是一個布爾量,如果參數(shù)G的值為“0”,則復(fù)制輸入IN0的值到OUT。如果參數(shù)G的值為“1”,則復(fù)制參數(shù)IN1的值到OUT。注意該指令只有當(dāng)所有參數(shù)的變量均為同一數(shù)據(jù)類型時,才能執(zhí)行該指令。在SCL中,該指令的輸出結(jié)果作為函數(shù)值返回,因此需要定義變量接收該函數(shù)返回值。表7-49SEL:選擇指令對照及參數(shù)表功能框SCL參數(shù)數(shù)據(jù)類型OUT:=SEL(g:=_bool_in,in0:-_variant_in,in1:=_variant_in);GBOOLIN0INTIN1二進(jìn)制數(shù)、整數(shù)、浮點數(shù)、定時器、字符串、TOD、DATE、DT函數(shù)值二進(jìn)制數(shù)、整數(shù)、浮點數(shù)、定時器、字符串、TOD、DATE、DT7
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2 周末巧安排 教學(xué)設(shè)計-2024-2025學(xué)年道德與法治二年級上冊統(tǒng)編版
- 經(jīng)營權(quán)轉(zhuǎn)讓合同模板
- 合同樣本商業(yè)地產(chǎn)項目投資合作協(xié)議書
- 個人向公司借款合同簡例
- 1-1《子路、曾皙、冉有、公西華侍坐》教學(xué)設(shè)計-2024-2025學(xué)年高一語文下學(xué)期同步教學(xué)設(shè)計(統(tǒng)編版必修下冊)
- Module 3 Unit 9 Great cities of the world(教學(xué)設(shè)計)-2023-2024學(xué)年滬教牛津版(深圳用)英語六年級上冊
- 25《慢性子裁縫和急性子顧客》(教學(xué)設(shè)計)-2023-2024學(xué)年統(tǒng)編版語文三年級下冊
- 豬舍購銷合同范本
- 沉降檢測合同范本
- 毛毛新車網(wǎng)合同范本
- 水力壓裂技術(shù)詳解334頁(PPT 最新技術(shù))_ppt
- 布洛維:拓展個案法
- SolidWorksTopDown設(shè)計方法實際應(yīng)用
- 七年級歷史第5課--安史之亂與唐朝衰亡ppt課件
- 戶外LED顯示屏設(shè)計施工方案.docx
- 上崗證WORD模板
- 凈土資糧——信愿行(05)第三講安住在彌陀大愿之海
- 化工車間開停車風(fēng)險分析
- 市政小三線施工方案(共22頁)
- 靜壓樁機(jī)、鉆孔灌注樁、沉槽機(jī)CAD圖形
- 易經(jīng)(拼音版)
評論
0/150
提交評論