西門子mb是什么數據類型(西門子mb0指的是什么)

首頁 > 汽車 > 汽車資訊 > 正文

西門子mb是什么數據類型(西門子mb0指的是什么)

第一:S7-SCL簡介

S7-SCL(Structured Control Language 結構化控制語言) 具有以下特點:

是一種類似于PASCAL的高級編程語言,符合國際標準IEC 61131-3PLCopen基礎級認證適用于 SIMATIC S7-300 (推薦用于CPU314以上CPU), S7-400, C7 and WinACS7-SCL 為 PLC 做了優化處理,它不僅僅具有 PLC 典型的元素(例如 輸入/輸出,定時器,計數器,符號表),而且具有高級語言的特性, 例如:循環、選擇、分支、數組、高級函數

S7-SCL 其非常適合于如下任務:

復雜運算功能

復雜數學函數

數據管理

過程優化

第二:S7-SCL 與 STL

S7-SCL 可以編譯成 STL, 雖然其代碼量相對于 STL 編程有所增加,但我們更關心的是程序結構和程序的總體效率。類似于計算機行業的發展,匯編語言已經被舍棄,取而代之的是 C/C++等高級語言。S7-SCL 對工程設計人員要求較高,需要其具有一定的計算機高級語言的知識和編程技巧。

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

STEP7 標準版并不包括 S7-SCL 軟件包及授權,需單獨購買,STEP7 Professional 版包括了S7-SCL 的軟件包及授權,安裝即可。在 S7 程序中,S7-SCL 塊可以與其它 STEP7 編程語言生成的塊互相調用。S7-SCL 生成的塊也可以作為庫文件被其它語言引用。由于 S7-SCL 程序由 ASCII 文本構成,所以它非常容易被導入或導出。

第四:S7-SCL 軟件兼容性

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

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

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

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

第五:S7-SCL 簡單示例

在下面的例子中,編寫一個完成軟件濾波程序的 FB1, 程序每調用一次 FB1, 其采集一個新的過程變量,存儲在 FIFO 堆棧中,共 10 個周期的采樣值,超過 10 個周期的采樣值將被舍棄。程序將此 10 個采樣值中的最大最小值找出,并計算出除去最大值及最小值之后的平均值。

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

新建項目,插入 SCL Source

西門子mb是什么數據類型(西門子mb0指的是什么)

雙擊,SCLSource 打開 SCL 環境,并使用 FB 模板

更改 FB編號

使用參數模板

編輯 FB參數

使用調用功能塊向導

調用 FC105

由于在 SCL中調用了 FC105, 還需在 SIMATIC Manager 將 FC105 添加到項目中

FC105 復制到當前項目中

FB1 參數定義

FC105調用

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

使用 IF, FOR-NEXT等高級語言的方式,很容易就可編寫出濾波程序

在菜單 Option-Customize中選擇生成調試信息

在菜單的 File-Compile編譯沒有錯誤后,就可以生成 FB1 了,在 OB35 中可以調用 FB1,下載整個項目后監控 OB35:

輸出參數 SCALED_VAL 為實時的采樣值

輸出參數 SCALED_FILTED 為濾波后的采樣值

假設OB35的執行周期為T, 如果某時刻采樣值發生變化,那么此數值將不同于以前的多個采樣值,此數值可能被認定為最大值或最小值,而最大值或最小值將被忽略,這樣就實現了濾波的效果。當采樣值發生變化,并維持了大于等于2T的時間,此時的輸入值的兩次采樣值會被濾掉一個采樣值,而另一個采樣值將參與平均值的運算。

可以在高級語言界面下監控 FB1

至此,一個簡單的 S7-SCL 程序示例就結束了,本文中僅是對其非常簡單的作了介紹。任何編程語言都有其復雜性,并非一朝一夕就可掌握。

第六:S7-SCL 常見問題

問題:S7-SCL 支持哪些 STEP7 塊,與其它語言有什么關系?

解答:S7-SCL 支持如下 STEP7 的塊:OB,FC,FB,DB,UDT。在 S7 程序中,S7-SCL 塊可以與其它STEP7 編程語言生成的塊互相調用。S7-SCL 可以被編譯成 STL, S7-SCL 生成的塊也可以作為庫文件被其它語言引用。由于 S7-SCL 程序由 ASCII 文本構成,所以它非常容易被導入或導出。

問題:如何規范地的開發一個 S7-SCL 程序?

解答:開發一個 S7-SCL 程序,應當遵循如下流程:

規劃需要的塊類型,即程序的整體結構。如:是否僅僅一個 FC就可滿足要求,還是需要生成其它 OB, FB 等

規劃子任務(FB,FC等等)

定義各個子任務的之間輸入/輸出接口

定義各個子任務在原文件中的順序及調用關系

定義符號表

編譯檢查

下載調試

問題:如何加密我的 S7-SCL 程序?

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

KNOW_HOW_PROTECT,再進行編譯即可,下圖中的 FC1 在編譯后,即出現了加鎖保護的圖標 。注意:提供給最終用戶的項目中應當刪除 S7-SCL 源代碼,否則用戶在雙擊加密的塊后(例如下圖中的 FC1),依然可以關聯打開 S7-SCL 源代碼。

問題:為什么雙擊打開 S7-SCL 類型的程序后,顯示的格式卻是 STL 格式?

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

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

問題:什么是 OK Flag?

解答:在 S7-SCL 程序中,OK 是一個布爾類型的特殊本地變量。它用來顯示塊執行是否正確。

OK 標志的使用與 STL 編程中對于 FC/FB 的 ENO 處理(STL 是用狀態字的 BR 位來保存狀態)非常相似。在程序的開始,可以將 OK 標志賦值為 TURE,如果程序執行有錯誤(例如 0 作為除數),則當程序退出時,用戶通過程序將 OK 標志改寫為 FALSE,此數值將被存儲在輸出參數 ENO 當中。OK 標志是一個系統變量,不需要定義,如果用戶希望在程序中使用此標志,可以在 S7-SCL 編程菜單 Options>Customize>Compiler 中,應當選擇 Set OK flag.項。否則 ENO 將無法被評估。

OK 標志使用的例子:

OK:= TRUE;

Division:= 1 / IN;

IF OK THEN // 除法操作正常

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

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

問題:在 STL 中可以讀取一個組織塊的信息 (例如 OB1 中的循環時間),在 S7-SCL 中是否存在同樣的可能?

解答:STEP7 中的任意 OB 塊在生成之后,其內部都自動生成一些特有的臨時變量,例如 OB1 中的變量 OB1_PREV_CYCLE 即為 CPU 上個掃描周期所用的時間。在 S7-SCL 編輯器中,通過“Insert > Block Template > OB”創建一個 OB 模板。在缺省情況下,此模板的臨時變量區域將創建一個 ARRAY OF BYTE 類型的臨時變量。此區域與 OB 塊的臨時變量區域是相對應的,但由于沒有變量名稱標識,并且數據類型也不相同,所以用戶使用起來非常不方便。如果用戶想要使用S7-SCL 格式的 OB 塊內的特有變量,請按下列步驟進行:

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

2.創建一個新的 S7-SCL源文件并插入剛才復制的變量定義。

3.調整 S7-SCL源文件中的語法結構

4.在這個程序的開始部分,可以設置 "Title" 和"Version" , 例如 Title=" " 和 Version= '0.1'

5.在 BEGIN語句后面插入一個分號,至此,即完成格式修改。

另外,也可以打開本文中的 S7-SCL 例子目錄中的 OB_Templ 項目,其中包括了 44 個 S7-SCL 源文件格式的組織塊。

問題:如何理解 FC/SFC 的輸出參數 RET_VAL(返回值)?

解答:對于此問題,如果讀者對 PASCAL 語言或者高級編程語言非常熟悉,可能此問題就非常容易解釋。許多 SFC (系統功能) 都有輸出參數 RET_VAL (返回值) ,它提供一個可供評估的錯誤代碼。STEP 7 在線幫助中提供有更多關于系統功能和輸出參數 RET_VAL 的信息。通過在 SIMATIC 管理器中選中 SFC 然后按“F1”鍵可以獲取相關的在線幫助信息。

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

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

調用一個系統功能 (SFC24):當調用系統功能 SFC 24“TEST_DB”(測試數據塊) 時,得到關于 CPU主內存中一個數據塊的信息。SFC24 確定指定 DB 的數據字節數,并檢查該 DB 是否受到寫保護。

選定 DB 所包含的數據字節數通過參數“DB_LENGTH”輸出,參數“WRITE_PROT”包含關于選定 DB 的寫保護 ID 的信息 (FALSE 表示沒有寫保護)。

問題:在 S7-SCL 程序中,PLC 中的地址標識與 STL/LAD 中的地址標識有何區別,使用中有何注意事項?

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

圖中一些格式有些特殊,實際上,下面的格式在 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;

所以說,在一般情況下,編程人員依舊可以 STL 的標識方式用于 S7-SCL。

注意:如果數據塊編號及地址都使用了間接尋址方式,則必須使用 S7-SCL 特定的標識方式,例如

如下語句:

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

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

S7-SCL 中的 PLC 地址格式

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

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

對于其它 FB,OB,DB, T,C 等等的標識格式,S7-SCL 格式基本與 STL 格式相同,此處不做說明。

問題:為什么用戶人工輸入的程序在編譯時經常提示語法錯誤?

解答:S7-SCL 程序和所有的高級語言一樣,有著自己特定的語法,而很多編程人員容易在人工輸入程序時忽視語法格式,這樣就造成編譯錯誤。因此強烈建議編程人員使用 S7-SCL 的模板向導。

在菜單 Insert 中,提供了 Block Call, Block Template, Control Structure, 三個向導,用戶可以通過使用此向導,提高輸入效率。例如在下圖中指出了兩個常見錯誤,用戶如果使用向導,就不容易出錯誤:

S7-SCL 常見的錄入格式錯誤

問題:如何對 S7-SCL 程序中的數據塊及靜態變量初始化?

解答:S7-SCL 程序中對數據塊及靜態變量初始化和 STL 語言格式類似,下面的程序列出了正確格式:

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

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

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

問題:什么是“AT”指令,如何使用?

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

AT 指令可以使用戶能夠以不同的數據類型來訪問一個已經聲明的變量。此指令類似于高

級編程語言中的“繼承”概念。此指令有如下特點:

特點一:定義僅在塊內有效,在接口參數中不出現

特點二:在塊中可以使用其它數據類型的視圖

特點三:它只是讓另外一些變量繼承了某個變量的特性,僅僅數據類型是新的,其它特性相同。

下面將通過具體程序對以上三個特點進行說明,首先定義 UDT100,UDT200,大小都為 12 個字節, 但結構不同。UDT100 包括一個 DATE_AND_TIME 數據類型(8 個字節),還包括一個實數(4 個字節);UDT200 包括 6 個字(12 個字節);在 FC2 定義輸入參數 Buffer, Frame1,Frame2:

特點一:定義僅在塊內有效,在接口參數中不出現。塊內定以的輸入參數有 3 個,但僅在塊內有效,在接口參數僅出現 Buffer 輸入參數

AT 指令特點說明(a)

AT 指 令 特 點 說 明 (b)

AT 指令應用例子 1:在 STL 中,用戶如果希望取得 MB0 的某一位的數值是非常容易的,例如第 3 位,直接尋址 M0.2 就可以了。而在 S7-SCL 中,由于其具備高級語言的特點,所以定義的變量的絕對地址一般是不顯現的。因此在 STL 中簡單的操作,在 S7-SCL 中卻復雜起來。但是通過使用AT 指令即可解決這個問題。下圖中的例子中,當輸入的某個字節,其輸出依次為此字節的 8 個位。

AT 指令應用例子 2:在 S7-SCL 中,ANY 數據類型的使用,經常會伴隨著 AT 指令的使用,下面的例子演示了如何拆分改寫 ANY 數據類型中的內容。程序執行結果相當于:

CALL "BLKMOV"

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

DSTBLK :=P#DB1.DBX 0.0 BYTE 10

AT 指令在使用當中,還有如意事項:

AT指令用于對某個變量進行其它數據類型的聲明時,必須放在此變量的聲明語句后面

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

AT指令用于對某個變量其它數據類型的聲明時,占用內存大小要小于等于此變量的長度

AT指令用于對某個變量其它數據類型的聲明時,如下的組合是允許的

AT 指令使用限制

AT 指令用于 ANY 類型在 VAR_OUT 中是不允許的

Elementary (基本數據類型包括) :BOOL, BYTE, WORD, DWORD, INT, DINT, DATE, TIME, S5TIME, CHAR

Complex (復雜數據類型包括) :ARRAY, STRUCT, DATE_AND_TIME, STRING

問題:S7-SCL 程序中如何使用多重背景?

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

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

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

問題:如何在 S7-SCL 程序中實現數據塊間接尋址?

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

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

STATUS_2:= DB12.DX[WNO, BITNO]; //位間接尋址,用戶改變 WNO,BITNO 數值即可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 數據類型,COUNTER 為整數數據類型,這樣可以實現/數據塊編號, 字節地址同時間接尋址,此功能是一種功能很強間接尋址方式。

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

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

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;

問題:在 S7-SCL 程序中調用 FC/FB 與在 STL/LAD 中調用 FB/FC 有何區別?

解答:在 STL/LAD 程序中調用 FB 可以不把參數填寫完整,但在 S7-SCL 程序中調用 FB 時,必須把FB 參數填寫完整;對于FC 的調用S7-SCL 與STL/LAD 區別不大。強烈建議編程人員使用S7-SCL 的模板向導調用 FB。下圖的程序說明了兩者的區別:

問題:為了將 S7-SCL 中的位數據類型(BYTE, WORD 或 DWORD)轉換到“REAL”數據類型時, 需要使用哪種數據類型轉換程序?

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

從 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))”

注意事項:用戶在將 BYTE, WORD 或 DWORD 數據類型轉換到 “REAL” 數據類型時,S7-SCL 中常見的錯誤可以參考下例:

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

如果執行了這一轉換,會得到錯誤的結果。

原因:DINT_TO_REAL 函數將把源數據轉換并按照 IEEE REAL 的格式存儲到目的變量,而

DWORD_TO_REAL 僅僅是從源數據拷貝位串至目的變量。

因此,為了獲得正確的“ REAL ”數,必須總是通過中間步驟“ DWORD_TO_DINT ”和“DINT_TO_REAL”實現。

問題:在 S7-SCL 中如何區分某個變量名是本地變量,還是符號名?

解答:S7-SCL 中本地變量與符號名的引用有如下區別:

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

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

問題:如何訪問一個字符串中的單個字符?

解答:對于字符串中的單個字符,使用如下的訪問格式,是錯誤的:

MB10 := str[5] 這樣的表達式無法實現將字符串的第 5 個字符送至 MB10 中。方法:可以使用 IEC 函數 MID 來得到字符串的某個部分,例子如下:

VAR

str : STRING[20];

END_VAR

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

問題:如何在訪問結構時優化運行時間?

解答:如果需要多次訪問一個結構,可在 S7-SCL 代碼中也創建一個同樣類型的臨時變量來優化運行時間。用戶可在臨時變量聲明中生成此變量,并在程序中多次使用它。假設用戶希望完成如下操作:

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

可見以上操作數都存在于 DB 的結構當中,在不進行優化的情況下,這段程序在運行時,將多次打開數據塊,進行多次讀取操作,程序運行所需時間較多。

定義數據塊

解決方法:在 FC4 中聲明一個與 DB4 中“field”變量結構相同的臨時變量(例如“Temp”)。然后使用如下語句從 DB4 中將數據拷貝到臨時存儲區內:

Temp:=field;

對以上所描述的語句,可將 DB 變量“DB4.Field”替代為臨時變量“Temp”:

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

此時數據塊中的數值被復制到 CPU 的 L 堆棧當中,在后續程序中,可以使用這些 L 堆棧中的臨時變量替代原來數據塊中的變量,由于 CPU 對 L 堆棧的訪問速度遠快于對數據塊的訪問速度,這樣就實現了數據訪問的優化。

e

優化數據塊訪問

注意事項:變量聲明“VAR_TEMP”存儲在 CPU 的堆棧中。這可能會在小型 CPU 模塊中導致堆棧溢出。因此使用臨時變量要慎重。

問題:如何用布爾型變量優化 IF 語句來縮短循環時間?

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

示例 1:

當一個模擬量值(REAL 變量)超過限定(此處是 100)時設置一個比特位。

函數“IF_Test”包含了查詢限定值的 IF 語句。整個 IF 語句可用以下語句代替:

IF_Test:= (100 < value) 。

IF 語句不同格式(a)

示例 2:

查詢在一個 WORD 變量中指定比特位 X 是否置位。

這里函數 BitX 的 IF 語句由以下語句代替:BitX:= status = 16#0004。

IF 語句不同格式(b)

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

問題:為什么我的 S7-SCL 程序在自己的計算機上編譯正常,在別人的計算機上卻打不開或無法編譯?

解答:應當確認其它計算機是否安裝了 S7-SCL 環境,而且要檢查 S7-SCL 環境版本,例如:S7-SCL V5.3 SP1 提供了新的函數(SEL,MAX,MIN,LIMIT,MUX,BYTE_TO_INT,INT_TO_BYTE 等等),舊

版本無法識別這些函數。如果用戶程序中使用了這些函數,在舊版本的 S7-SCL 環境下無法通過編譯。

問題:為什么我的程序與別人的程序完全一致,卻通不過編譯?

解答:除了前面問題所需注意的事項外,符號表是初學者經常忽略的因素,這里額外單獨強調一下。用戶在編寫 S7-SCL 程序源代碼時,對符號進行良好的定義,可以使編程清晰易懂。而初學者經常僅僅復制其他人的源代碼,卻忘記復制符號表,以至于在 S7-SCL 程序中經常出現不清楚的名稱定義,從而導致編譯錯誤。

問題:為什么包含比較類型為 WORD/DWORD 的變量的 IF 語句不能被編譯通過?

解答:當在 IF 指令內比較操作數時,如果變量聲明為 WORD 和 DWORD 類型,S7-SCL 僅允許比較操作“=”和“<>”,而不允許比較操作“>”和“<”。作為一種補救措施,建議將變量類型聲 明為 DINT。如果變量的類型不能聲明為 DINT,在此比較之前則必須首先進行類型轉換。

問題:當給一個雙字類型變量分配了一個實型數值時,出現非法數據類型錯誤

解答:當給一個雙字類型變量分配了一個實型數值時,出現"Invalid data type"消息,是由于數據類型不匹配造成的。注意僅當數據類型為 BOOL, BYTE, WORD 和 DWORD 時,允許對 DB 塊的絕對地址訪問。下圖舉例說明何時數據類型必須轉換.

問題:在輸出窗口中的錯誤消息與程序行數字不符

解答:當 S7-SCL 程序行數超過 65535, S7-SCL 編譯器把行計數器重新從 1 開始計數。例如,在 S7-SCL 源程序中,一個編程錯誤出現在第 65537 行, 以下行數字將被輸出:"F: L 00001 error xyz”, 而不是 "F: L 65537 error xyz"

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

問題:"The FB is not available or the instance declaration is missing"

解答:此消息出現在當一個 FC/FB/SFB/SFC 塊在程序中被調用時,該塊卻不包含在塊文件夾下。

解決方法 1:手動復制相關的程序塊到 BLOCK 文件夾中然后重新編譯 S7-SCL。

解決方法 2:調用 FC/FB/SFB/SFC 時,使用 S7-SCL 菜單中的 Insert>Block Call 向導,S7-SCL 將會自動將此 FC/FB/SFB/SFC 復制到當前的 BLOCK 目錄中,從而避免以上情況出現。

問題:"Character strings have different lengths"

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

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

注意:如果你聲明長達 254 字符的 STRING 字符串,將會需要更大的本地裝載存儲空間

問題:CPU 消息"STOP due to unknown OP code"

解答:當你在 S7-SCL 中使用轉換功能"WORD_TO_BLOCK_DB(...)",并且編輯以下語句時該消息會被發出:

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

解決方法:我們建議以以下給出的兩行語句來替代上面的語句:

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

Display := WORD_TO_INT (BYTE_TO_WORD (tmp));

問題:在編譯 UDT 時出現"Syntax error with UNLINKED"

解答:如果一個 UDT 在用"UNLINKED"聲明之前已標識,該 UDT 不會被編譯通過。"UNLINKED"屬性不可用于 UDT。編譯將會以錯誤消息"Syntax error with UNLINKED"結束。該規則也應用于 STL 源程序聲明。UDT 通常不裝載到 S7 CPU 中,而總是存儲于"離線"的 S7 用戶程序。

相關知識:對于"UNLINKED"數據塊屬性,意味著 DB 塊有以下特性:

僅僅存儲于裝載存儲器中

不占據任何 RAM空間。

"UNLINKED"屬性聲明在數據塊的頭部

與程序沒有關聯關系

數據塊的 UNLINKIF 屬性

問題:在編譯 DB 時出現"Syntax error with 2#1100_1100"

解答:如果你賦一個二進制數字作為初始值給一個數據塊中 BYTE 類型的變量,編譯 S7-SCL 源程序時將出現錯誤消息"Syntax error with 2#..."

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

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

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

問題:為什么我的程序編譯通過,但無法運行?

解答:當使用 S7-SCL 語言時,建議使用的 CPU 類型 最低為 CPU314。即便如此,用戶也應當注意系統資源的限制。例如:當定義臨時變量的時候,不要超過所用 CPU 技術參數中的本地數據大小的限制。否則可能導致程序無法運行。

問題:為什么我的程序無法被監控?

解答:為了程序可以被監控,在編譯 S7-SCL 程序時,在菜單 Options>Customize>Compiler 中, 應當選擇 Create debug info 項。注意:Create object code 項也應當被選擇,否則程序編譯時僅僅作語法檢查,而不生成可執行程序。Optimize object code 項也應當被選擇,此選項將優化程序代碼。

問題:在 S7-SCL 哪些變量在監控時無法被顯示?解答:在監控時,如下變量無法被顯示:

復雜數據類型不被顯示,但復雜數據類型中的基本數據類型可以被顯示(例如字節數組中的某個字節)

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

COUNTER 不被顯示

以符號格式訪問的數據塊不被顯示,例如:"myDB".DW0, "myDB" 為某個數據塊的符號名注意:有時候監控變量的數據超出了 CPU 能夠提供的資源數量,也將出現部分無法顯示的情況。

備案號:贛ICP備2022005379號
華網(http://www.prospectspotlight.com) 版權所有未經同意不得復制或鏡像

QQ:51985809郵箱:51985809@qq.com

A级国产乱理论片在线观看|欧美片在线观看|farre性欧美护士tv|国产精品资源在线|久久水蜜桃网国产免费网站