华网,国产一级二级在线,华网资讯,国产一级二级视频,华网头条,国产一级二级三级视频,华人网络家园

西門(mén)子mb是什么數(shù)據(jù)類(lèi)型(西門(mén)子mb0指的是什么)

西門(mén)子mb是什么數(shù)據(jù)類(lèi)型(西門(mén)子mb0指的是什么)

第一:S7-SCL簡(jiǎn)介

S7-SCL(Structured Control Language 結(jié)構(gòu)化控制語(yǔ)言) 具有以下特點(diǎn):

是一種類(lèi)似于PASCAL的高級(jí)編程語(yǔ)言,符合國(guó)際標(biāo)準(zhǔn)IEC 61131-3PLCopen基礎(chǔ)級(jí)認(rèn)證適用于 SIMATIC S7-300 (推薦用于CPU314以上CPU), S7-400, C7 and WinACS7-SCL 為 PLC 做了優(yōu)化處理,它不僅僅具有 PLC 典型的元素(例如 輸入/輸出,定時(shí)器,計(jì)數(shù)器,符號(hào)表),而且具有高級(jí)語(yǔ)言的特性, 例如:循環(huán)、選擇、分支、數(shù)組、高級(jí)函數(shù)

S7-SCL 其非常適合于如下任務(wù):

復(fù)雜運(yùn)算功能

復(fù)雜數(shù)學(xué)函數(shù)

數(shù)據(jù)管理

過(guò)程優(yōu)化

第二:S7-SCL 與 STL

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

第三:S7-SCL 的安裝與使用

STEP7 標(biāo)準(zhǔn)版并不包括 S7-SCL 軟件包及授權(quán),需單獨(dú)購(gòu)買(mǎi),STEP7 Professional 版包括了S7-SCL 的軟件包及授權(quán),安裝即可。在 S7 程序中,S7-SCL 塊可以與其它 STEP7 編程語(yǔ)言生成的塊互相調(diào)用。S7-SCL 生成的塊也可以作為庫(kù)文件被其它語(yǔ)言引用。由于 S7-SCL 程序由 ASCII 文本構(gòu)成,所以它非常容易被導(dǎo)入或?qū)С觥?/p>

第四:S7-SCL 軟件兼容性

不同 S7-SCL 軟件版本與 STEP7 及操作系統(tǒng)之間的兼容性:圖中的 X 表示兼容,- 表示不兼容

僅僅 S7-SCL V5.1+SP1或以后版本支持

僅僅 S7-SCL V5.1+SP1或以后版本支持

僅僅 S7-SCL V5.1+SP1或以后版本支持

第五:S7-SCL 簡(jiǎn)單示例

在下面的例子中,編寫(xiě)一個(gè)完成軟件濾波程序的 FB1, 程序每調(diào)用一次 FB1, 其采集一個(gè)新的過(guò)程變量,存儲(chǔ)在 FIFO 堆棧中,共 10 個(gè)周期的采樣值,超過(guò) 10 個(gè)周期的采樣值將被舍棄。程序?qū)⒋?10 個(gè)采樣值中的最大最小值找出,并計(jì)算出除去最大值及最小值之后的平均值。

平均值(濾波輸出)=(10 個(gè)采樣值之和-最大值-最小值)/8 平均值(非濾波輸出)=轉(zhuǎn)換后的實(shí)時(shí)采樣值

新建項(xiàng)目,插入 SCL Source

西門(mén)子mb是什么數(shù)據(jù)類(lèi)型(西門(mén)子mb0指的是什么)

雙擊,SCLSource 打開(kāi) SCL 環(huán)境,并使用 FB 模板

更改 FB編號(hào)

使用參數(shù)模板

編輯 FB參數(shù)

使用調(diào)用功能塊向?qū)?/p>

調(diào)用 FC105

由于在 SCL中調(diào)用了 FC105, 還需在 SIMATIC Manager 將 FC105 添加到項(xiàng)目中

FC105 復(fù)制到當(dāng)前項(xiàng)目中

FB1 參數(shù)定義

FC105調(diào)用

下面的程序中使用了判斷條件,在此使用 IF 模板

使用 IF, FOR-NEXT等高級(jí)語(yǔ)言的方式,很容易就可編寫(xiě)出濾波程序

在菜單 Option-Customize中選擇生成調(diào)試信息

在菜單的 File-Compile編譯沒(méi)有錯(cuò)誤后,就可以生成 FB1 了,在 OB35 中可以調(diào)用 FB1,下載整個(gè)項(xiàng)目后監(jiān)控 OB35:

輸出參數(shù) SCALED_VAL 為實(shí)時(shí)的采樣值

輸出參數(shù) SCALED_FILTED 為濾波后的采樣值

假設(shè)OB35的執(zhí)行周期為T(mén), 如果某時(shí)刻采樣值發(fā)生變化,那么此數(shù)值將不同于以前的多個(gè)采樣值,此數(shù)值可能被認(rèn)定為最大值或最小值,而最大值或最小值將被忽略,這樣就實(shí)現(xiàn)了濾波的效果。當(dāng)采樣值發(fā)生變化,并維持了大于等于2T的時(shí)間,此時(shí)的輸入值的兩次采樣值會(huì)被濾掉一個(gè)采樣值,而另一個(gè)采樣值將參與平均值的運(yùn)算。

可以在高級(jí)語(yǔ)言界面下監(jiān)控 FB1

至此,一個(gè)簡(jiǎn)單的 S7-SCL 程序示例就結(jié)束了,本文中僅是對(duì)其非常簡(jiǎn)單的作了介紹。任何編程語(yǔ)言都有其復(fù)雜性,并非一朝一夕就可掌握。

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

問(wèn)題: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>

問(wèn)題:如何規(guī)范地的開(kāi)發(fā)一個(gè) S7-SCL 程序?

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

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

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

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

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

定義符號(hào)表

編譯檢查

下載調(diào)試

問(wèn)題:如何加密我的 S7-SCL 程序?

解答:S7-SCL 程序加密與 STL 程序加密方法幾乎一樣,用戶(hù)可以在程序中加入關(guān)鍵字:

KNOW_HOW_PROTECT,再進(jìn)行編譯即可,下圖中的 FC1 在編譯后,即出現(xiàn)了加鎖保護(hù)的圖標(biāo) 。注意:提供給最終用戶(hù)的項(xiàng)目中應(yīng)當(dāng)刪除 S7-SCL 源代碼,否則用戶(hù)在雙擊加密的塊后(例如下圖中的 FC1),依然可以關(guān)聯(lián)打開(kāi) S7-SCL 源代碼。

問(wèn)題:為什么雙擊打開(kāi) S7-SCL 類(lèi)型的程序后,顯示的格式卻是 STL 格式?

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

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

問(wèn)題:什么是 OK Flag?

解答:在 S7-SCL 程序中,OK 是一個(gè)布爾類(lèi)型的特殊本地變量。它用來(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í),用戶(hù)通過(guò)程序?qū)?OK 標(biāo)志改寫(xiě)為 FALSE,此數(shù)值將被存儲(chǔ)在輸出參數(shù) ENO 當(dāng)中。OK 標(biāo)志是一個(gè)系統(tǒng)變量,不需要定義,如果用戶(hù)希望在程序中使用此標(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 // 除法操作正常

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

ELSE //除法操作不正常;// : END_IF;

問(wèn)題:在 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 類(lèi)型的臨時(shí)變量。此區(qū)域與 OB 塊的臨時(shí)變量區(qū)域是相對(duì)應(yīng)的,但由于沒(méi)有變量名稱(chēng)標(biāo)識(shí),并且數(shù)據(jù)類(lèi)型也不相同,所以用戶(hù)使用起來(lái)非常不方便。如果用戶(hù)想要使用S7-SCL 格式的 OB 塊內(nèi)的特有變量,請(qǐng)按下列步驟進(jìn)行:

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

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

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

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

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

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

問(wèn)題:如何理解 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 在線(xiàn)幫助中提供有更多關(guān)于系統(tǒng)功能和輸出參數(shù) RET_VAL 的信息。通過(guò)在 SIMATIC 管理器中選中 SFC 然后按“F1”鍵可以獲取相關(guān)的在線(xiàn)幫助信息。

同樣,一個(gè) FC 也可以返回一個(gè)結(jié)果,下面給出了一些例子,說(shuō)明了如何在 S7-SCL 中調(diào)用帶有返回值 (RET_VAL) 的功能 (FC 或 SFC)。

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

調(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ù))。

問(wèn)題:在 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ò)誤)

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ō)明。

問(wèn)題:為什么用戶(hù)人工輸入的程序在編譯時(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ū)В脩?hù)可以通過(guò)使用此向?qū)В岣咻斎胄省@缭谙聢D中指出了兩個(gè)常見(jiàn)錯(cuò)誤,用戶(hù)如果使用向?qū)В筒蝗菀壮鲥e(cuò)誤:

S7-SCL 常見(jiàn)的錄入格式錯(cuò)誤

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

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

DAT1 : REAL := 100.5; A1 : INT := 10 ;

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

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

問(wèn)題:什么是“AT”指令,如何使用?

解答: AT 指令是 S7-SCL 中特有的一個(gè)指令,初學(xué)者可能會(huì)忽略此指令,或者對(duì)其理解不夠深刻。AT 指令在 S7-SCL 中有著非常重要的地位,很多應(yīng)用程序都必須使用此指令。下面將對(duì)此指令進(jìn)行詳細(xì)講解。

AT 指令可以使用戶(hù)能夠以不同的數(shù)據(jù)類(lèi)型來(lái)訪(fǎng)問(wèn)一個(gè)已經(jīng)聲明的變量。此指令類(lèi)似于高

級(jí)編程語(yǔ)言中的“繼承”概念。此指令有如下特點(diǎn):

特點(diǎn)一:定義僅在塊內(nèi)有效,在接口參數(shù)中不出現(xiàn)

特點(diǎn)二:在塊中可以使用其它數(shù)據(jù)類(lèi)型的視圖

特點(diǎn)三:它只是讓另外一些變量繼承了某個(gè)變量的特性,僅僅數(shù)據(jù)類(lèi)型是新的,其它特性相同。

下面將通過(guò)具體程序?qū)σ陨先齻€(gè)特點(diǎn)進(jìn)行說(shuō)明,首先定義 UDT100,UDT200,大小都為 12 個(gè)字節(jié), 但結(jié)構(gòu)不同。UDT100 包括一個(gè) DATE_AND_TIME 數(shù)據(jù)類(lèi)型(8 個(gè)字節(jié)),還包括一個(gè)實(shí)數(shù)(4 個(gè)字節(jié));UDT200 包括 6 個(gè)字(12 個(gè)字節(jié));在 FC2 定義輸入?yún)?shù) Buffer, Frame1,Frame2:

特點(diǎn)一:定義僅在塊內(nèi)有效,在接口參數(shù)中不出現(xiàn)。塊內(nèi)定以的輸入?yún)?shù)有 3 個(gè),但僅在塊內(nèi)有效,在接口參數(shù)僅出現(xiàn) Buffer 輸入?yún)?shù)

AT 指令特點(diǎn)說(shuō)明(a)

AT 指 令 特 點(diǎn) 說(shuō) 明 (b)

AT 指令應(yīng)用例子 1:在 STL 中,用戶(hù)如果希望取得 MB0 的某一位的數(shù)值是非常容易的,例如第 3 位,直接尋址 M0.2 就可以了。而在 S7-SCL 中,由于其具備高級(jí)語(yǔ)言的特點(diǎn),所以定義的變量的絕對(duì)地址一般是不顯現(xiàn)的。因此在 STL 中簡(jiǎn)單的操作,在 S7-SCL 中卻復(fù)雜起來(lái)。但是通過(guò)使用AT 指令即可解決這個(gè)問(wèn)題。下圖中的例子中,當(dāng)輸入的某個(gè)字節(jié),其輸出依次為此字節(jié)的 8 個(gè)位。

AT 指令應(yīng)用例子 2:在 S7-SCL 中,ANY 數(shù)據(jù)類(lèi)型的使用,經(jīng)常會(huì)伴隨著 AT 指令的使用,下面的例子演示了如何拆分改寫(xiě) ANY 數(shù)據(jù)類(lèi)型中的內(nèi)容。程序執(zhí)行結(jié)果相當(dāng)于:

CALL "BLKMOV"

SRCBLK :=P#DB1.DBX 0.0 BYTE 10 RET_VAL:=MW0

DSTBLK :=P#DB1.DBX 0.0 BYTE 10

AT 指令在使用當(dāng)中,還有如意事項(xiàng):

AT指令用于對(duì)某個(gè)變量進(jìn)行其它數(shù)據(jù)類(lèi)型的聲明時(shí),必須放在此變量的聲明語(yǔ)句后面

AT指令生成的變量不可以初始化

AT指令用于對(duì)某個(gè)變量其它數(shù)據(jù)類(lèi)型的聲明時(shí),占用內(nèi)存大小要小于等于此變量的長(zhǎng)度

AT指令用于對(duì)某個(gè)變量其它數(shù)據(jù)類(lèi)型的聲明時(shí),如下的組合是允許的

AT 指令使用限制

AT 指令用于 ANY 類(lèi)型在 VAR_OUT 中是不允許的

Elementary (基本數(shù)據(jù)類(lèi)型包括) :BOOL, BYTE, WORD, DWORD, INT, DINT, DATE, TIME, S5TIME, CHAR

Complex (復(fù)雜數(shù)據(jù)類(lèi)型包括) :ARRAY, STRUCT, DATE_AND_TIME, STRING

問(wèn)題:S7-SCL 程序中如何使用多重背景?

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

Supply1 : FB10; //將 Supply1 定義為 FB10 類(lèi)型

Supply2,Supply3,Supply4 : FB100; //將 Supply2,Supply3,Supply4 定義為 FB100 類(lèi)型

問(wèn)題:如何在 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]; //位間接尋址,用戶(hù)改變 WNO,BITNO 數(shù)值即可STATUS_1:= Database1.DW[COUNTER]; // Database1 為 DB 類(lèi)型的本地變量STATUS_2:= Database2.DX[WNO, BITNO];

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

//INDEX 被定義為 BLOCK_DB 數(shù)據(jù)類(lèi)型,COUNTER 為整數(shù)數(shù)據(jù)類(lèi)型,這樣可以實(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;

問(wèn)題:在 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。下圖的程序說(shuō)明了兩者的區(qū)別:

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

解答:為了將 S7-SCL 中的位數(shù)據(jù)類(lèi)型(BYTE, WORD 或 DWORD)轉(zhuǎn)換到數(shù)字?jǐn)?shù)據(jù)類(lèi)型“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):用戶(hù)在將 BYTE, WORD 或 DWORD 數(shù)據(jù)類(lèi)型轉(zhuǎn)換到 “REAL” 數(shù)據(jù)類(lèi)型時(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)。

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

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

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

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

問(wèn)題:如何訪(fǎng)問(wèn)一個(gè)字符串中的單個(gè)字符?

解答:對(duì)于字符串中的單個(gè)字符,使用如下的訪(fǎng)問(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)));

問(wèn)題:如何在訪(fǎng)問(wèn)結(jié)構(gòu)時(shí)優(yōu)化運(yùn)行時(shí)間?

解答:如果需要多次訪(fǎng)問(wèn)一個(gè)結(jié)構(gòu),可在 S7-SCL 代碼中也創(chuàng)建一個(gè)同樣類(lèi)型的臨時(shí)變量來(lái)優(yōu)化運(yùn)行時(shí)間。用戶(hù)可在臨時(shí)變量聲明中生成此變量,并在程序中多次使用它。假設(shè)用戶(hù)希望完成如下操作:

DB4.Field.Value:= DB4.Field.Value1*DB4.Field.Value2*DB4.Field.Value3;

可見(jiàn)以上操作數(shù)都存在于 DB 的結(jié)構(gòu)當(dāng)中,在不進(jìn)行優(yōu)化的情況下,這段程序在運(yùn)行時(shí),將多次打開(kāi)數(shù)據(jù)塊,進(jìn)行多次讀取操作,程序運(yùn)行所需時(shí)間較多。

定義數(shù)據(jù)塊

解決方法:在 FC4 中聲明一個(gè)與 DB4 中“field”變量結(jié)構(gòu)相同的臨時(shí)變量(例如“Temp”)。然后使用如下語(yǔ)句從 DB4 中將數(shù)據(jù)拷貝到臨時(shí)存儲(chǔ)區(qū)內(nèi):

Temp:=field;

對(duì)以上所描述的語(yǔ)句,可將 DB 變量“DB4.Field”替代為臨時(shí)變量“Temp”:

field.Value:=Temp.Value1*Temp.Value2*Temp.Value3;

此時(shí)數(shù)據(jù)塊中的數(shù)值被復(fù)制到 CPU 的 L 堆棧當(dāng)中,在后續(xù)程序中,可以使用這些 L 堆棧中的臨時(shí)變量替代原來(lái)數(shù)據(jù)塊中的變量,由于 CPU 對(duì) L 堆棧的訪(fǎng)問(wèn)速度遠(yuǎn)快于對(duì)數(shù)據(jù)塊的訪(fǎng)問(wèn)速度,這樣就實(shí)現(xiàn)了數(shù)據(jù)訪(fǎng)問(wèn)的優(yōu)化。

e

優(yōu)化數(shù)據(jù)塊訪(fǎng)問(wèn)

注意事項(xiàng):變量聲明“VAR_TEMP”存儲(chǔ)在 CPU 的堆棧中。這可能會(huì)在小型 CPU 模塊中導(dǎo)致堆棧溢出。因此使用臨時(shí)變量要慎重。

問(wèn)題:如何用布爾型變量?jī)?yōu)化 IF 語(yǔ)句來(lái)縮短循環(huán)時(shí)間?

解答:在優(yōu)化 IF 語(yǔ)句后,S7-SCL 代碼將變得更為緊湊,這樣代碼序列的處理就更快。程序計(jì)算的布爾類(lèi)型數(shù)據(jù)相同,優(yōu)化后事件僅分配給一個(gè)變量。相對(duì)于簡(jiǎn)化格式,IF 語(yǔ)句完整格式編程時(shí)需要加載另一個(gè)跳轉(zhuǎn)和一個(gè)常量 (TRUE 或 FALSE) 。

示例 1:

當(dāng)一個(gè)模擬量值(REAL 變量)超過(guò)限定(此處是 100)時(shí)設(shè)置一個(gè)比特位。

函數(shù)“IF_Test”包含了查詢(xún)限定值的 IF 語(yǔ)句。整個(gè) IF 語(yǔ)句可用以下語(yǔ)句代替:

IF_Test:= (100 < value) 。

IF 語(yǔ)句不同格式(a)

示例 2:

查詢(xún)?cè)谝粋€(gè) WORD 變量中指定比特位 X 是否置位。

這里函數(shù) BitX 的 IF 語(yǔ)句由以下語(yǔ)句代替:BitX:= status = 16#0004。

IF 語(yǔ)句不同格式(b)

注意事項(xiàng):緊湊的 IF 語(yǔ)句加快了程序處理速度,但是優(yōu)化處理可能使得程序變得不夠清晰和難于理解。

問(wèn)題:為什么我的 S7-SCL 程序在自己的計(jì)算機(jī)上編譯正常,在別人的計(jì)算機(jī)上卻打不開(kāi)或無(wú)法編譯?

解答:應(yīng)當(dāng)確認(rèn)其它計(jì)算機(jī)是否安裝了 S7-SCL 環(huán)境,而且要檢查 S7-SCL 環(huán)境版本,例如:S7-SCL V5.3 SP1 提供了新的函數(shù)(SEL,MAX,MIN,LIMIT,MUX,BYTE_TO_INT,INT_TO_BYTE 等等),舊

版本無(wú)法識(shí)別這些函數(shù)。如果用戶(hù)程序中使用了這些函數(shù),在舊版本的 S7-SCL 環(huán)境下無(wú)法通過(guò)編譯。

問(wèn)題:為什么我的程序與別人的程序完全一致,卻通不過(guò)編譯?

解答:除了前面問(wèn)題所需注意的事項(xiàng)外,符號(hào)表是初學(xué)者經(jīng)常忽略的因素,這里額外單獨(dú)強(qiáng)調(diào)一下。用戶(hù)在編寫(xiě) S7-SCL 程序源代碼時(shí),對(duì)符號(hào)進(jìn)行良好的定義,可以使編程清晰易懂。而初學(xué)者經(jīng)常僅僅復(fù)制其他人的源代碼,卻忘記復(fù)制符號(hào)表,以至于在 S7-SCL 程序中經(jīng)常出現(xiàn)不清楚的名稱(chēng)定義,從而導(dǎo)致編譯錯(cuò)誤。

問(wèn)題:為什么包含比較類(lèi)型為 WORD/DWORD 的變量的 IF 語(yǔ)句不能被編譯通過(guò)?

解答:當(dāng)在 IF 指令內(nèi)比較操作數(shù)時(shí),如果變量聲明為 WORD 和 DWORD 類(lèi)型,S7-SCL 僅允許比較操作“=”和“<>”,而不允許比較操作“>”和“<”。作為一種補(bǔ)救措施,建議將變量類(lèi)型聲 明為 DINT。如果變量的類(lèi)型不能聲明為 DINT,在此比較之前則必須首先進(jìn)行類(lèi)型轉(zhuǎn)換。

問(wèn)題:當(dāng)給一個(gè)雙字類(lèi)型變量分配了一個(gè)實(shí)型數(shù)值時(shí),出現(xiàn)非法數(shù)據(jù)類(lèi)型錯(cuò)誤

解答:當(dāng)給一個(gè)雙字類(lèi)型變量分配了一個(gè)實(shí)型數(shù)值時(shí),出現(xiàn)"Invalid data type"消息,是由于數(shù)據(jù)類(lèi)型不匹配造成的。注意僅當(dāng)數(shù)據(jù)類(lèi)型為 BOOL, BYTE, WORD 和 DWORD 時(shí),允許對(duì) DB 塊的絕對(duì)地址訪(fǎng)問(wèn)。下圖舉例說(shuō)明何時(shí)數(shù)據(jù)類(lèi)型必須轉(zhuǎn)換.

問(wèn)題:在輸出窗口中的錯(cuò)誤消息與程序行數(shù)字不符

解答:當(dāng) S7-SCL 程序行數(shù)超過(guò) 65535, S7-SCL 編譯器把行計(jì)數(shù)器重新從 1 開(kāi)始計(jì)數(shù)。例如,在 S7-SCL 源程序中,一個(gè)編程錯(cuò)誤出現(xiàn)在第 65537 行, 以下行數(shù)字將被輸出:"F: L 00001 error xyz”, 而不是 "F: L 65537 error xyz"

解決方法:雙擊 S7-SCL 編譯器輸出窗口中的錯(cuò)誤消息,光標(biāo)將跳至不正確的行。如果編程錯(cuò)誤不在所指示的行,你可以使用菜單命令"Edit > Go To > Line..."然后輸入" 65536 + 顯示錯(cuò)誤數(shù)字"跳至有錯(cuò)誤語(yǔ)句的行。

問(wèn)題:"The FB is not available or the instance declaration is missing"

解答:此消息出現(xiàn)在當(dāng)一個(gè) FC/FB/SFB/SFC 塊在程序中被調(diào)用時(shí),該塊卻不包含在塊文件夾下。

解決方法 1:手動(dòng)復(fù)制相關(guān)的程序塊到 BLOCK 文件夾中然后重新編譯 S7-SCL。

解決方法 2:調(diào)用 FC/FB/SFB/SFC 時(shí),使用 S7-SCL 菜單中的 Insert>Block Call 向?qū)В琒7-SCL 將會(huì)自動(dòng)將此 FC/FB/SFB/SFC 復(fù)制到當(dāng)前的 BLOCK 目錄中,從而避免以上情況出現(xiàn)。

問(wèn)題:"Character strings have different lengths"

解答:示例中包含 FC1 和 FC2 帶有字符串變量"name_1" 與"name_2", 當(dāng) FC1 被編譯時(shí),得到警告"Character strings have different lengths"。在運(yùn)行期間,在賦值的右側(cè)("name_1")可能是一個(gè)比左側(cè)所允許的 STRING 變量("name_2")具有更長(zhǎng)長(zhǎng)度的 STRING 字符串。

解決方法:我們建議予左側(cè)的變量"name_2"聲明一個(gè)長(zhǎng)度為 254 字符的 STRING 字符串。如果你編譯具有這種聲明的功能 FC2,上述警告將不會(huì)出現(xiàn)。

注意:如果你聲明長(zhǎng)達(dá) 254 字符的 STRING 字符串,將會(huì)需要更大的本地裝載存儲(chǔ)空間

問(wèn)題:CPU 消息"STOP due to unknown OP code"

解答:當(dāng)你在 S7-SCL 中使用轉(zhuǎn)換功能"WORD_TO_BLOCK_DB(...)",并且編輯以下語(yǔ)句時(shí)該消息會(huì)被發(fā)出:

Display: = WORD_TO_INT (BYTE_TO_WORD (WORD_TO_BLOCK_DB (DBNo).DB [DBIndex]));

解決方法:我們建議以以下給出的兩行語(yǔ)句來(lái)替代上面的語(yǔ)句:

tmp := WORD_TO_BLOCK_DB (DBNo).DB[DBIndex];

Display := WORD_TO_INT (BYTE_TO_WORD (tmp));

問(wèn)題:在編譯 UDT 時(shí)出現(xiàn)"Syntax error with UNLINKED"

解答:如果一個(gè) UDT 在用"UNLINKED"聲明之前已標(biāo)識(shí),該 UDT 不會(huì)被編譯通過(guò)。"UNLINKED"屬性不可用于 UDT。編譯將會(huì)以錯(cuò)誤消息"Syntax error with UNLINKED"結(jié)束。該規(guī)則也應(yīng)用于 STL 源程序聲明。UDT 通常不裝載到 S7 CPU 中,而總是存儲(chǔ)于"離線(xiàn)"的 S7 用戶(hù)程序。

相關(guān)知識(shí):對(duì)于"UNLINKED"數(shù)據(jù)塊屬性,意味著 DB 塊有以下特性:

僅僅存儲(chǔ)于裝載存儲(chǔ)器中

不占據(jù)任何 RAM空間。

"UNLINKED"屬性聲明在數(shù)據(jù)塊的頭部

與程序沒(méi)有關(guān)聯(lián)關(guān)系

數(shù)據(jù)塊的 UNLINKIF 屬性

問(wèn)題:在編譯 DB 時(shí)出現(xiàn)"Syntax error with 2#1100_1100"

解答:如果你賦一個(gè)二進(jìn)制數(shù)字作為初始值給一個(gè)數(shù)據(jù)塊中 BYTE 類(lèi)型的變量,編譯 S7-SCL 源程序時(shí)將出現(xiàn)錯(cuò)誤消息"Syntax error with 2#..."

例如:Var1: BYTE:= b#2#1100_1100;

在 S7-SCL, 數(shù)據(jù)塊由 AWL 編譯器生成。如果你在數(shù)據(jù)塊準(zhǔn)備部分和賦值部分同時(shí)初始化變量,你必須使用 AWL 專(zhuān)用符號(hào)。因此在示例中的 BYTE 類(lèi)型的變量,僅允許指定十六進(jìn)制數(shù)字作為初始值。S7-SCL 符號(hào) (例如 B#2#1100_1100) 只可用在代碼區(qū),因?yàn)?S7-SCL 編譯器只在代碼區(qū)被使用。解決方法:將二進(jìn)制數(shù)字改為十六進(jìn)制數(shù)字作為初始值,

例如:Var1: BYTE: = b#16#cc;

問(wèn)題:為什么我的程序編譯通過(guò),但無(wú)法運(yùn)行?

解答:當(dāng)使用 S7-SCL 語(yǔ)言時(shí),建議使用的 CPU 類(lèi)型 最低為 CPU314。即便如此,用戶(hù)也應(yīng)當(dāng)注意系統(tǒng)資源的限制。例如:當(dāng)定義臨時(shí)變量的時(shí)候,不要超過(guò)所用 CPU 技術(shù)參數(shù)中的本地?cái)?shù)據(jù)大小的限制。否則可能導(dǎo)致程序無(wú)法運(yùn)行。

問(wèn)題:為什么我的程序無(wú)法被監(jiān)控?

解答:為了程序可以被監(jiān)控,在編譯 S7-SCL 程序時(shí),在菜單 Options>Customize>Compiler 中, 應(yīng)當(dāng)選擇 Create debug info 項(xiàng)。注意:Create object code 項(xiàng)也應(yīng)當(dāng)被選擇,否則程序編譯時(shí)僅僅作語(yǔ)法檢查,而不生成可執(zhí)行程序。Optimize object code 項(xiàng)也應(yīng)當(dāng)被選擇,此選項(xiàng)將優(yōu)化程序代碼。

問(wèn)題:在 S7-SCL 哪些變量在監(jiān)控時(shí)無(wú)法被顯示?解答:在監(jiān)控時(shí),如下變量無(wú)法被顯示:

復(fù)雜數(shù)據(jù)類(lèi)型不被顯示,但復(fù)雜數(shù)據(jù)類(lèi)型中的基本數(shù)據(jù)類(lèi)型可以被顯示(例如字節(jié)數(shù)組中的某個(gè)字節(jié))

DATE_AND_TIME、STRING、BLOCK_FB、BLOCK_FC、BLOCK_DB、BLOCK_SDB、TIMER、

COUNTER 不被顯示

以符號(hào)格式訪(fǎng)問(wèn)的數(shù)據(jù)塊不被顯示,例如:"myDB".DW0, "myDB" 為某個(gè)數(shù)據(jù)塊的符號(hào)名注意:有時(shí)候監(jiān)控變量的數(shù)據(jù)超出了 CPU 能夠提供的資源數(shù)量,也將出現(xiàn)部分無(wú)法顯示的情況。

熱點(diǎn)圖片

備案號(hào):贛ICP備2022005379號(hào)
華網(wǎng)(http://www.cdxdyzl.com) 版權(quán)所有未經(jīng)同意不得復(fù)制或鏡像

QQ:51985809郵箱:51985809@qq.com

主站蜘蛛池模板: 深圳社区邦家政公司-保姆_月嫂_育儿嫂 _早教育婴师_家政钟点工_家政培训_家政加盟- 社区邦优质生活服务 专业、标准化、便捷、安心,一站式家庭服务平台,服务专业有保障 ! | 铜陵耐火砖|铜陵耐火浇注料|铜陵耐火材料|铜陵市金钟物资经营部【官网】 | 新硕考研_新硕寄宿考研-升学路上的规划师【官网】 | 热水工程|太阳能热水工程|空气能热水工程|太阳能集热工程 | 长沙物流公司|湖南货物运输公司|长沙第三方物流公司-国联物流 湖南第三方物流专家 | 永磁电机,防爆电机,调速电机,永磁同步电机_河南华信电机股份有限公司 | 皮带输送机-宁津县浩发链条有限公司| 妙手官网—商品管理、批量修改、订单处理、营销水印 | 企业微信服务商-企业微信crm营销|认证-[朝阳企客通]一款企微管家服务型产品 | 金酱酒_金酱酒代理加盟招商_OEM贴牌企业定制! – 金酱酒代理加盟!茅台镇较早的酿酒烧坊,年产优质酱香白酒5000余吨,仁怀市十强白酒企业,主营主品:金酱酒、金酱陈香酒、酱香老酒等系列品牌产品 | 激光切割加工,佛山激光切割加工,钣金加工,机加工-佛山市华锐达金属制品有限公司 | 正大制管-优质钢管制造商和服务商 | 郑州环球重工机械有限公司建筑垃圾处理专题网站 | 模压机|硫化机|平板硫化机生产厂家-南通海利特橡塑机械有限公司 模压化粪池_三格式化粪池_玻璃钢化粪池厂家 | 中国(北京)国际园林绿化设备展览会 | 液晶拼接屏_三星46寸/55寸/LG液晶拼接屏_深圳拼接墙厂家_电视大屏幕液晶拼接_高清工业级液晶监视器 | 节能设备|余热回收|蒸汽压缩机|脱硝-河北耀一节能设备制造有限责任公司 | 康复器材_常州市友邦医疗康复器材有限公司官网 | 专题秀_汇聚网络热门专题_实时报道各类新闻专题资讯 | 友信京泰-操作台-调度台-控制台-监控台定制厂家 | 助乐邦轮椅,北京轮椅置换,电动轮椅置换,轮椅回收北京,轮椅送货上门服务 | 呼吸家官网|肺功能检测仪生产厂家|国产肺功能仪知名品牌|肺功能检测仪|肺功能测试仪|婴幼儿肺功能仪|弥散残气肺功能仪|肺功能测试系统|广州红象医疗科技有限公司|便携式肺功能仪|大肺功能仪|呼吸康复一体机|儿童肺功能仪|肺活量计|医用简易肺功能仪|呼吸康复系统|肺功能仪|弥散肺功能仪(大肺)|便携式肺功能检测仪|肺康复|呼吸肌力测定肺功能仪|肺功能测定仪|呼吸神经肌肉刺激仪|便携式肺功能 | 四川迪瑞机电设备有限公司-容积式换热器|半容积式换热器|容积式换热机组|半容积式水加热器|换热器在线除垢防垢器|迪瑞机电 | 阴_阳离子聚丙烯酰胺价格_聚合氯化铝厂家_聚合硫酸铁-巩义市亿洋水处理材料有限公司 | 松下PLC经销商-松下传感器-放大器-电磁阀-光电开关-金器[东莞均钛]品牌气动元件及工控产品一站式供应商 | 西安汉信丨条码打印机,条码扫码枪,条码标签,条码仓库管理系统专业供应商 | 四边封包装机_蒸汽眼罩机_暖宝宝/足贴/热灸贴生产设备_浙江硕源机械有限公司 | 山东胜王水处理设备有限公司,反渗透设备,纯净水设备,污水处理设备,SWS系列全自动钠离子交换器,纯净水设备报价,活性碳过滤器,多介质过滤器 | 消防改造安装,消防维修检测,消防工程安装,气体灭火施工安装,火灾烟感探测器清洗 | 图页网-无线压力电容变送器_激光测厚传感器_电磁流量计_温控调节仪 | 太阳能光伏发电_太阳能热水器_空气能热水器_直饮净水器_深圳市大兴节能环保科技有限公司 | 消防工程公司,消防工程承接公司-亿杰(北京)工程安装有限公司 | 泰州阳光会计服务有限公司官网-泰州公司注册|泰州代理记账 | 中国江苏国际经济技术合作集团有限公司-致力于做大做强国际工程、国内工程、国际贸易和城镇投资 中国建材信息总网-中国建材行业权威的信息资讯平台 | 尾矿干排_机制砂尾矿干排_带式压滤机|山东森鹏环保科技有限公司 潍坊卓瑞机械有限公司,输送设备,石灰消化设备,餐厨垃圾设备,化机浆设备,污泥脱水 | 现代卓越官网-专注于pmp培训证书-pmp考试报名时间-pmp认证-项目管理pmp-ACP敏捷管理-NPDP认证 | 武汉防雷检测_防雷工程设计施工_防雷设备材料_湖北普天科技有限公司 | 上海前 傲信息技术有限公司-企业信息化建设及品牌推广服务商 | 阻垢剂|缓蚀剂|杀菌剂|分散剂|水处理剂|印染助剂|水处理药剂|造纸助剂|膜阻垢剂|缓蚀剂|HEDP|ATMP|螯合剂-山东凯瑞化学有限公司 水处理药剂生产厂家 | 潍坊亿宏重工机械有限公司,破碎机,高性能立磨机,颚式破碎机,锤式破碎机反击式破碎机,重锤式破碎机,高性能反击式破碎机,圆锥式破碎机,给料机系列,链板给料机系列,简易给料机系列,振动给料机 | 天津市力豹润滑科技有限公司 |