小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

SCL與STL的區(qū)別是什么?16個(gè)SCL常見(jiàn)問(wèn)題及解答

 反恐精英禿鷲 2021-09-20

    SCL  與 與 STL :

    S7-SCL 可以編譯成 STL, 雖然其代碼量相對(duì)于 STL 編程有所增加,但我們更關(guān)心的是程序結(jié)構(gòu)和程序的總體效率。類似于計(jì)算機(jī)行業(yè)的發(fā)展,匯編語(yǔ)言已經(jīng)被舍棄,取而代之的是 C/C++等高級(jí)語(yǔ)言。S7-SCL 對(duì)工程設(shè)計(jì)人員要求較高,需要其具有一定的計(jì)算機(jī)高級(jí)語(yǔ)言的知識(shí)和編程技巧。

    S7-SCL  常見(jiàn)問(wèn)題:

    1、如何規(guī)范地的開(kāi)發(fā)一個(gè) S7-SCL 程序?

    解答:開(kāi)發(fā)一個(gè) S7-SCL 程序,應(yīng)當(dāng)遵循如下流程:

    ·  規(guī)劃需要的塊類型,即程序的整體結(jié)構(gòu)。如:是否僅僅一個(gè) FC 就可滿足要求,還是需要生成其它 OB, FB 等

    ·  規(guī)劃子任務(wù)(FB,FC 等等)

    ·  定義各個(gè)子任務(wù)的之間輸入/輸出接口

    ·  定義各個(gè)子任務(wù)在原文件中的順序及調(diào)用關(guān)系

    ·  定義符號(hào)表

    ·  編譯檢查

    ·  下載調(diào)試

    2、S7-SCL 支持哪些 STEP7 塊,與其它語(yǔ)言有什么關(guān)系?

    解答:S7-SCL 支持如下 STEP7 的塊:OB,FC,FB,DB,UDT。在 S7 程序中,S7-SCL 塊可以與其它STEP7 編程語(yǔ)言生成的塊互相調(diào)用。S7-SCL 可以被編譯成 STL, S7-SCL 生成的塊也可以作為庫(kù)文件被其它語(yǔ)言引用。由于 S7-SCL 程序由 ASCII 文本構(gòu)成,所以它非常容易被導(dǎo)入或?qū)С觥?/p>

    3、為什么雙擊打開(kāi) S7-SCL 類型的程序后,顯示的格式卻是 STL 格式?

    解答:S7-SCL 程序編譯后生成的執(zhí)行代碼實(shí)際上為 STL 格式,如下圖中的 FC1, 雖然其標(biāo)示為 SCL格式,但如果用戶將 Source 目錄中的 FC1 的源文件刪除后,再雙擊打開(kāi) FC1 后,顯示的將為 STL格式。

Image

    4、什么是 OK Flag?

    解答:在 S7-SCL 程序中,OK 是一個(gè)布爾類型的特殊本地變量。它用來(lái)顯示塊執(zhí)行是否正確。OK 標(biāo)志的使用與 STL 編程中對(duì)于 FC/FB 的 ENO 處理(STL 是用狀態(tài)字的 BR 位來(lái)保存狀態(tài))非常相似。在程序的開(kāi)始,可以將 OK 標(biāo)志賦值為 TURE,如果程序執(zhí)行有錯(cuò)誤(例如 0 作為除數(shù)),則當(dāng)程序退出時(shí),用戶通過(guò)程序?qū)?OK 標(biāo)志改寫(xiě)為 FALSE,此數(shù)值將被存儲(chǔ)在輸出參數(shù) ENO 當(dāng)中。OK 標(biāo)志是一個(gè)系統(tǒng)變量,不需要定義,如果用戶希望在程序中使用此標(biāo)志,可以在 S7-SCL編程菜單 Options>Customize>Compiler 中,應(yīng)當(dāng)選擇 Set OK flag.項(xiàng)。否則 ENO 將無(wú)法被評(píng)估。

    OK 標(biāo)志使用的例子:

    OK:= TRUE;

    Division:= 1 / IN;

    IF OK THEN // 除法操作正常

    ;// 此處可以添加在除法操作正常情況下,其它的用戶程序

    ELSE //除法操作不正常

    ;// :

    END_IF;

    5、在 STL 中可以讀取一個(gè)組織塊的信息 (例如 OB1 中的循環(huán)時(shí)間),在 S7-SCL 中是否存在同樣的可能?

    解答:STEP7 中的任意 OB 塊在生成之后,其內(nèi)部都自動(dòng)生成一些特有的臨時(shí)變量,例如 OB1 中的變量OB1_PREV_CYCLE 即為CPU 上個(gè)掃描周期所用的時(shí)間。在 S7-SCL 編輯器中,通過(guò)“Insert> Block Template > OB”創(chuàng)建一個(gè) OB 模板。在缺省情況下,此模板的臨時(shí)變量區(qū)域?qū)?chuàng)建一個(gè)ARRAY OF BYTE 類型的臨時(shí)變量。此區(qū)域與 OB 塊的臨時(shí)變量區(qū)域是相對(duì)應(yīng)的,但由于沒(méi)有變量名稱標(biāo)識(shí),并且數(shù)據(jù)類型也不相同,所以用戶使用起來(lái)非常不方便。如果用戶想要使用 S7-SCL格式的 OB 塊內(nèi)的特有變量,請(qǐng)按下列步驟進(jìn)行:

    ·  在路徑 STEP7 的安裝路徑 \Step7\S7DATA\S7wiz 下,包含所有 OB 塊的 STL 格式模板,可以使用寫(xiě)字板打開(kāi)這些模板 (例如 OB31.awl), 并復(fù)制相應(yīng)變量定義。

    ·  創(chuàng)建一個(gè)新的 S7-SCL 源文件并插入剛才復(fù)制的變量定義。

    ·  調(diào)整 S7-SCL 源文件中的語(yǔ)法結(jié)構(gòu)

    ·  在這個(gè)程序的開(kāi)始部分, 可以設(shè)置 'Title' 和'Version' , 例如 Title=' ' 和 Version= '0.1'

    ·  在 BEGIN 語(yǔ)句后面插入一個(gè)分號(hào),至此,即完成格式修改。

另外,也可以打開(kāi)本文中的 S7-SCL 例子目錄中的 OB_Templ 項(xiàng)目,其中包括了 44 個(gè) S7-SCL 源文件格式的組織塊。

    6、如何理解 FC/SFC 的輸出參數(shù) RET_VAL(返回值)?

    解答:對(duì)于此問(wèn)題,如果讀者對(duì) PASCAL 語(yǔ)言或者高級(jí)編程語(yǔ)言非常熟悉,可能此問(wèn)題就非常容易解釋。許多 SFC (系統(tǒng)功能) 都有輸出參數(shù) RET_VAL (返回值) ,它提供一個(gè)可供評(píng)估的錯(cuò)誤代碼。STEP 7 在線幫助中提供有更多關(guān)于系統(tǒng)功能和輸出參數(shù) RET_VAL 的信息。通過(guò)在 SIMATIC管理器中選中 SFC 然后按“F1”鍵可以獲取相關(guān)的在線幫助信息。同樣,一個(gè) FC 也可以返回一個(gè)結(jié)果,下面給出了一些例子,說(shuō)明了如何在 S7-SCL 中調(diào)用帶有返回值 (RET_VAL) 的功能 (FC 或 SFC)。

定義 FC1, 函數(shù)類型為 INT (返回值)

Image

    調(diào)用 FC1,得到返回值:

Image

    調(diào)用一個(gè)系統(tǒng)功能 (SFC24):當(dāng)調(diào)用系統(tǒng)功能 SFC 24 “TEST_DB”(測(cè)試數(shù)據(jù)塊) 時(shí),得到關(guān)于 CPU主內(nèi)存中一個(gè)數(shù)據(jù)塊的信息。SFC24 確定指定 DB 的數(shù)據(jù)字節(jié)數(shù),并檢查該 DB 是否受到寫(xiě)保護(hù)。選定 DB 所包含的數(shù)據(jù)字節(jié)數(shù)通過(guò)參數(shù)“DB_LENGTH”輸出,參數(shù)“WRITE_PROT”包含關(guān)于選定 DB 的寫(xiě)保護(hù) ID 的信息 (FALSE 表示沒(méi)有寫(xiě)保護(hù))。

Image

    7、在 S7-SCL 程序中,PLC 中的地址標(biāo)識(shí)與 STL/LAD 中的地址標(biāo)識(shí)有何區(qū)別,使用中有何注意事項(xiàng)?

    解答:在 S7-SCL 程序中,PLC 中的地址標(biāo)識(shí)與 STL/LAD 中的地址標(biāo)識(shí)基本相同,方便了編程人員快速掌握 S7-SCL 語(yǔ)言。下圖為 PLC 中的 S7-SCL  程序地址標(biāo)識(shí)格式:

    圖中一些格式有些特殊,實(shí)際上,下面的格式在 S7-SCL 中都是正確的。

    DB1.D0.0:=DB1.DBX0.1;

    DB1.DB1:=DB1.DBB1;

    DB1.DW2:=DB1.DBW2;

    DB1.DD4:=DB1.DBD4;

    QX0.0:=Q0.0;

    IX0.0:=I0.0;

    MX0.0:=M0.0;

    所以說(shuō),在一般情況下,編程人員依舊可以 STL 的標(biāo)識(shí)方式用于 S7-SCL。

    注意:如果數(shù)據(jù)塊編號(hào)及地址都使用了間接尋址方式,則必須使用 S7-SCL特定的標(biāo)識(shí)方式,例如如下語(yǔ)句:

    STATUS_1:=WORD_TO_BLOCK (INDEX).DW [COUNTER]; (此格式正確)

    STATUS_1:=WORD_TO_BLOCK (INDEX).DBW [COUNTER]; (此格式錯(cuò)誤)

Image

    上圖為S7-SCL 中的 PLC 地址格式。

    x 可以為 0 至 65535 之間的數(shù)字(絕對(duì)地址)

    y 可以為 0 至 7 之間的數(shù)字(位地址)

    對(duì)于其它 FB,OB,DB, T,C 等等的標(biāo)識(shí)格式,S7-SCL 格式基本與 STL 格式相同,此處不做說(shuō)明。

    8、為什么用戶人工輸入的程序在編譯時(shí)經(jīng)常提示語(yǔ)法錯(cuò)誤?

    解答:S7-SCL 程序和所有的高級(jí)語(yǔ)言一樣,有著自己特定的語(yǔ)法,而很多編程人員容易在人工輸入程序時(shí)忽視語(yǔ)法格式,這樣就造成編譯錯(cuò)誤。因此強(qiáng)烈建議編程人員使用 S7-SCL 的模板向?qū)А?/p>

在菜單 Insert 中,提供了 Block Call, Block Template, Control Structure, 三個(gè)向?qū)?,用戶可以通過(guò)使用此向?qū)?,提高輸入效率。例如在下圖中指出了兩個(gè)常見(jiàn)錯(cuò)誤,用戶如果使用向?qū)?,就不容易出錯(cuò)誤:

Image

    9、S7-SCL 程序中如何使用多重背景?

    解答:S7-SCL 程序中可以使用多重背景,下面的程序列出了正確格式,聲明完成后,在程序中即可調(diào)用:

Supply1 : FB10;  //將 Supply1 定義為 FB10 類型

Supply2,Supply3,Supply4 : FB100;  //將 Supply2,Supply3,Supply4 定義為 FB100 類型

    10、如何在 S7-SCL 程序中實(shí)現(xiàn)數(shù)據(jù)塊間接尋址?

    解答:S7-SCL 程序中對(duì)數(shù)據(jù)塊間接尋址提供了良好的支持,編程也很簡(jiǎn)單。下面的程序列出了正確格式:

    STATUS_1:= DB11.DW[COUNTER];  //字節(jié)間接尋址

    STATUS_2:= DB12.DX[WNO, BITNO];  //位間接尋址,用戶改變 WNO,BITNO 數(shù)值即可

    STATUS_1:= Database1.DW[COUNTER];  // Database1 為 DB 類型的本地變量

    STATUS_2:= Database2.DX[WNO, BITNO];

    STATUS_1:= WORD_TO_BLOCK_DB(INDEX).DW[COUNTER];

    //INDEX 被定義為  BLOCK_DB 數(shù)據(jù)類型,COUNTER 為整數(shù)數(shù)據(jù)類型,這樣可以實(shí)現(xiàn)/數(shù)據(jù)塊編號(hào),字節(jié)地址同時(shí)間接尋址,此功能是一種功能很強(qiáng)間接尋址方式。

    //以下是數(shù)據(jù)塊直接尋址方式格式,僅供參考。

    STATUSBYTE :=DB101.DB10;  //字節(jié)直接尋址格式

    STATUS_3 :=DB30.D1.1; //位直接尋址格式

    MEASVAL :=DB25.DW20; //字直接尋址格式

    STATUSBYTE :=Status_data.DB10;

    STATUS_3 :='New data'.D1.1;

    MEASVAL :=Measdata.DW20;

    STATUS_1 :=WORD_TO_BLOCK_DB (INDEX).DW10;

    11、在 S7-SCL 程序中調(diào)用 FC/FB 與在 STL/LAD 中調(diào)用 FB/FC 有何區(qū)別?

    解答:在 STL/LAD 程序中調(diào)用 FB 可以不把參數(shù)填寫(xiě)完整,但在 S7-SCL 程序中調(diào)用 FB 時(shí),必須把FB參數(shù)填寫(xiě)完整;對(duì)于FC的調(diào)用S7-SCL與STL/LAD區(qū)別不大。強(qiáng)烈建議編程人員使用S7-SCL的模板向?qū)д{(diào)用 FB。

    12、為了將 S7-SCL 中的位數(shù)據(jù)類型(BYTE, WORD 或 DWORD)轉(zhuǎn)換到“REAL”數(shù)據(jù)類型時(shí),需要使用哪種數(shù)據(jù)類型轉(zhuǎn)換程序?

    解答:為了將 S7-SCL 中的位數(shù)據(jù)類型(BYTE, WORD 或 DWORD)轉(zhuǎn)換到數(shù)字?jǐn)?shù)據(jù)類型“REAL”時(shí),需要使用以下指令:

·  從 BYTE 到 REAL:“DINT_TO_REAL(DWORD_TO_DINT(BYTE_TO_DWORD(value))”

·  從 WORD 到 REAL:

“DINT_TO_REAL(DWORD_TO_DINT(WORD_TO_DWORD(value))”

·  從 DWORD 到 REAL:

“DINT_TO_REAL(DWORD_TO_DINT(value))”

    注意事項(xiàng):用戶在將 BYTE, WORD 或 DWORD 數(shù)據(jù)類型轉(zhuǎn)換到 “REAL” 數(shù)據(jù)類型時(shí),S7-SCL中常見(jiàn)的錯(cuò)誤可以參考下例:

從 WORD 到 REAL:“DWORD_TO_REAL(WORD_TO_DWORD(value))”(錯(cuò)誤程序)。

    如果執(zhí)行了這一轉(zhuǎn)換,會(huì)得到錯(cuò)誤的結(jié)果。

    原因:DINT_TO_REAL 函數(shù)將把源數(shù)據(jù)轉(zhuǎn)換并按照 IEEE REAL 的格式存儲(chǔ)到目的變量,而DWORD_TO_REAL 僅僅是從源數(shù)據(jù)拷貝位串至目的變量。

因此,為了獲得正確的“REAL”數(shù),必須總是通過(guò)中間步驟“DWORD_TO_DINT”和“DINT_TO_REAL”實(shí)現(xiàn)。

    13、在 S7-SCL 中如何區(qū)分某個(gè)變量名是本地變量,還是符號(hào)名?

    解答:S7-SCL 中本地變量與符號(hào)名的引用有如下區(qū)別:

·  如果引用中只有變量名,則此變量為本地變量,如:Motor_Status:= Motor_1

·  如果引用中變量名稱上包括“”,則此變量為符號(hào)名,如:Motor_Status:= “Motor_1”

    14、如何訪問(wèn)一個(gè)字符串中的單個(gè)字符?

    解答:對(duì)于字符串中的單個(gè)字符,使用如下的訪問(wèn)格式,是錯(cuò)誤的:

MB10 := str[5] 這樣的表達(dá)式無(wú)法實(shí)現(xiàn)將字符串的第 5 個(gè)字符送至 MB10 中。

方法:可以使用 IEC 函數(shù) MID 來(lái)得到字符串的某個(gè)部分,例子如下:

VAR

str : STRING[20];

END_VAR

MB10:=CHAR_TO_BYTE(STRING_TO_CHAR(MID(IN:=str,L:=1,P:=5)));

    15、如何加密我的 S7-SCL 程序?

    解答:S7-SCL 程序加密與 STL 程序加密方法幾乎一樣,用戶可以在程序中加入關(guān)鍵字:KNOW_HOW_PROTECT,再進(jìn)行編譯即可,下圖中的 FC1 在編譯后,即出現(xiàn)了加鎖保護(hù)的圖標(biāo) 。

注意:提供給最終用戶的項(xiàng)目中應(yīng)當(dāng)刪除 S7-SCL 源代碼,否則用戶在雙擊加密的塊后(例如下圖中的 FC1),依然可以關(guān)聯(lián)打開(kāi) S7-SCL 源代碼。

Image

    注意:提供給最終用戶的項(xiàng)目中如果刪除 S7-SCL 源代碼,用戶將只能看到 STL 格式的程序,稍微復(fù)雜些的 S7-SCL 程序在 STL 格式下幾乎是無(wú)法閱讀的。此方法類似于加密的效果。

    16、如何對(duì) S7-SCL 程序中的數(shù)據(jù)塊及靜態(tài)變量初始化?

解答:S7-SCL 程序中對(duì)數(shù)據(jù)塊及靜態(tài)變量初始化和 STL 語(yǔ)言格式類似,下面的程序列出了正確格式:

DAT1 : REAL := 100.5;

A1 : INT := 10 ;

A2 : STRING[6] := 'FACTOR';

A3 : ARRAY[1..12] OF REAL := 0.0, 10(100.0), 1.0;

眾成PLC編程
眾成PLC編程
西門(mén)子PLC編程,三菱PLC編程,專注PLC編程技術(shù),免費(fèi)PLC編程資料分享,PLC視頻教程.
237篇原創(chuàng)內(nèi)容
Official Account
關(guān)注本號(hào)學(xué)習(xí)更多PLC編程知識(shí)!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多