哎, 現在真是,有心學習,卻沒有時間啊..........本來昨天打算弄這個的,結果沒有時間啊
感謝管理員沒有刪除前面的那篇文章。 因此為了兌現我的承諾,繼續SCL的旅程.....
在此聲明一點: 本系列——即西門子SCL應用——文章,歡迎轉載和指正,但是請務應用於任何商業目的。在部落格園寫
文章,是為了分享和交流,不是為了商業目的。 所以請務將本系列的文章用於任何商業目的。
不閑扯了,下面開始這一次的SCL旅程:
上次課程說到了塊的開始和結束的定義, 同時也說到了塊開始的定義部分,今天繼續將塊的有關內容:
4.4.1 塊名
如系列1的文章描述的,xx_name當做塊名, 參照以下文法:
塊關鍵字 數字
DB FB FC OB UDT n
標識符
符號
數字可以是0到65535之間的值, 但是資料區塊標識符DB0 被保留,使用者不能定義和使用
若使用符號名,必須為在Step7中為塊定義一個標識符或符號名
Exp:
函數塊
FUNCTION_BLOCK FB10 //利用塊關鍵字定義
...
END_FUNCTION_BLOCK
FUNCTION_BLOCK Cotroll_Block //利用標識符進行定義
...
END_FUNCTION_BLOCK
FUNCTION_BLOCK "Control block" //利用全域符號進行定義
...
END_FUNCTION_BLOCK
這裡需要說明一點: 利用塊關鍵字和全域符號定義的塊全域可見。
4.4.2 塊的屬性
塊的屬性即能有的塊特性, 塊的屬性有:
1)塊的類型
2)塊的版本
3)塊的保護特性
4)塊的作者
5)塊名
6)塊的系列名稱:通常用於快速尋找
如下所列:
關鍵字 作用 執行個體
TITLE='可列印字元' 塊的標題 TITLE='SORT'
通常用來說明塊功能
VERSION:'數字.數字' 指定塊的版本號碼 VERSION:'3.01'
Tip: 資料區塊的版本屬性不 //DB
需要在引號中限定 VERSION:3.01
KNOW_HOW_PROTECT 塊保護屬性;帶此選項的塊如 KNOW_HOW_PROTECT
編譯成STL語句並將原始碼刪除
後將不能被Step 7的LAD編輯器
開啟
AUTHOR 作者的名字,主要用來反映一 AUTHOR:Siemens
些作者的相關資訊
NAME 塊名,用來指定開的名稱 NAME:PID
FAMILY 塊系列的名稱,如馬達,用於 FAMILY:volcanol
將塊分類儲存。
使用塊屬性的規則:
1、在塊的定義開始後,用關鍵字直接定義塊屬性
2、標識符最多8個字元
Exp:
FUNCTION_BLOCK "Start_Motor"
TITLE=電機啟動控制功能塊' //這個標題會出現在Step 7的資源管理其的注釋列
VERSION='0.01'
KNOW_HOW_PROTECT
AUTHOR:volcnol
NAME:StartM
FAMILY:
4.4.3 塊的注釋
西門子SCL的的注釋相容Object Pascal的注釋,同時利用TITLE定義的屬性會在LAD
編輯器中出現在塊的注釋中。
用:
// 表示注釋
如上面:
//這個標題會出現在Step 7的資源管理員的注釋列
TITLE='電機啟動控制功能塊'
4.4.4 聲明部分
既然SCL和Pascal語言類似,並且FC本來就是Function函數塊, 那麼函數的聲明
部分在SCL中也是一樣存在的。
塊的聲明部分用來聲明本地(局部)變數、參數、常量和標號
聲明部分遵循以下幾個規則:
1)在邏輯塊的聲明部分定義的本地變數、參數、常量和標號的範圍僅在塊內部有效。
2)要定義全域有效變數或儲存區需要在資料區塊DB中定義
3)UDT只是提供一個符合的資料類型,如果不用UDT定義使用者變數則UDT不可用
聲明部分的結構:
聲明部分通過不同的關鍵字定義不同的子區,每個子區包含同類型的變數或資料的聲明,子區
順序不定義,可自由排列。
1) 常量聲明地區
關鍵字:
CONST
聲明列表
END_CONST
常量區用來聲明常量,相當於C語言中的const變數。
Exp:
CONST
Number := 10 ;
TIMEOFDAY1 := TIME#1D_1H_10M_22S_2MS ;
NAME := 'SIEMENS' ;
NUMBER2 := 2 * 5 + 10 * 4 ;
NUMBER3 := 3 + NUMBER2 ;
END_CONST
編譯器根據資料類型自動檢測常量的資料類型。
2)標號
標號用來標識GOTO語句的目標,在邏輯塊的聲明部分用符號名聲明
關鍵字:
LABEL
LAB1,LAB2,LAB3;
END_LABEL
Exp:
LABEL
ERR;
END_LABEL
在代碼部分
if devsion=0 then
goto err;
end if
3)零時變數
臨時變數相當於C語言中的局部變數
關鍵字:
VAR_TEMP
....
END_VAR
Exp:
VAR_TEMP
Add:INT;
Factor:Real;
END_VAR
4:靜態變數
靜態變數是本地變數,其值貫穿所有塊迴圈一直保留。用來存貯功能塊的值,存貯在執行個體資料區塊中。
這個地方定義的變數相當於C語言中的Static變數。在FC定義的靜態變數不具有靜態屬性,這也是FB
和FC間最大的區別。
關鍵字:
VAR
....
END_VAR
Tip:
在函數FC中聲明的聲明的靜態變數,在編譯時間會儲存在VAR_TEMP地區。
Exp:
VAR
Count:INT;
END_VAR
5、輸入參數
輸入參數相當於C語言中的形式參數,也相當於Pascal中的形式參數
關鍵字:
VAR_INPUT
...
END_VAR
Exp:
VAR_INPUT
Estop:BOOL;
END_VAR;
Tip:
在DB塊的聲明中和UDT的聲明中,VAR和END_VAR結構被STRUCT和END_STRUCT代替
5:輸出參數
輸出參數就是FC、FB塊用來輸出的資料介面區
關鍵字:
VAR_OUTPUT
...
END_VAR
輸出參數在目前的程式設計語言中算是非常獨特的了, 它可以將FC和FB的計算結果
輸出到一個別的儲存位置。
6:輸入/輸出參數
輸入輸出參數相當於指標結構, 可以接受實參,並且在經過FC和FB的處理後,其
實參值會被改變。
關鍵字:
VAR_IN_OUT
....
END_VAR
4.4.5 語句部分
語句部分是FB、FC、OB塊的核心部分,通過語句部分實現函數、函數塊和組織塊的功能。
資料區塊的語句部分包含初始設定變數的語句。
語句規則:
1)在FC、FB和OB塊中可以使用BEGIN標識語句的開始,也可以不使用。
2)資料區塊初始設定變數的語句必須用BEGIN標識其開始。
3)語句的結束部分用塊結束關鍵字標識結束
4)每個語句必須用分號;標識結束
5)語句部分使用的標識符必須聲明過
6)在語句部分可以使用已經定義的標號LABEL
Exp:
BEGIN // 利用Begin表示語句開始
INITIAL_VALUE:=0;
FINAL_VALUE:=200; //語句結束用:分號表示單個語句的結束
SORTE: //使用標號
RESUALT:=SETPOINT;
END_FUNCTION_BLOCK //快結束標識符、關鍵字
1)語句的定義
語句是使用者程式的最小邏輯結構,描述一個執行指定操作的處理器(CPU)指令
2)語句的類型
指派陳述式: 指定數值給一個變數
控制語句: 控制語句的執行流程
調用語句: 調用特定的函數和函數塊(FC、FB塊)
Exp:
// 指派陳述式的例子
iLength:= 0 ;
// 子程式調用的例子
FB1.DB1 (Temprature:= 10) ; //需要注意FB塊的調用規則
//FC可能有傳回值, 傳回值的調用同Pascal語言函
//數的調用規則
// 控制語句的例子
WHILE iCounter < MAX DO..
......
END_WHILE;
不知道園子裡面的朋友對自動化和工業控制有什麼認識,下面給兩個連結,
大家如果閑著沒事的話可以看看
第一個連結:
5軸聯動一次成型的數控機床:
連結為:http://v.youku.com/v_show/id_XMjM2OTQzMjQw.html
目前中國在數控機床方面的落後是在是太大了, 在瀋陽有個研究中心、華中數控數控床在國內算是一流的了,
但是和視頻展現的來比的話,差距太大了。 如果做過數控的話,應該知道全自由度的數控難度有多大,一般國外
進口的三軸聯動的機器價格均在1000w以上,華中的數控的大型加工中心價格也在1000w左右。
其他連結:
卷取機視頻:http://v.youku.com/v_show/id_XNDYzOTY3OTY=.html
軋機視頻 http://v.youku.com/v_show/id_XMjY2ODkzOTgw.html
http://v.youku.com/v_show/id_XMjE4OTg4MzM2.html
http://v.youku.com/v_show/id_XNzcwMzc1OTI=.html