西門子發布《指南》的目的旨在幫助開發者能夠按照統一的編程風格、思路、習慣去設計和開發程序。從而提高程序的可讀性,促進項目的標準化。《指南》也是順應標準化的趨勢,為還沒有自己的開發規范,或者規范比較簡單的團隊指引了一個方向。并不是說《指南》中所有的規范都必須遵守,但是至少《指南》中列舉出的都是很有參考價值的,值得加以重視的內容。
此外《指南》也是西門子標準化體系的一個重要組成部分。畢竟是和編寫代碼息息相關,作為開發者也需要深入了解,做好標準化知識的儲備。
《指南》將提出的要求分為規則和建議兩類:
規則:有一定約束力,一般都需要遵守,對于可復用編程是必**的,如有違背需要記錄在案。
建議:要求比規則低一些,建議遵守。
通過這些規則與建議的執行,能夠有效地將項目規范化,有助于統一您和您的團隊編程風格,便于前期的項目管理以及后期的開發維護工作。
下面將簡單介紹《指南》中部分規則內容,以便大家有個基本的了解。
2 記錄開發人員信息
通常,開發工程師會在網絡段或者SCL的語句前面增加相關段落的說明,這個肯定是必***少的。但還有一個重要的注釋,需要工程師們注意。那就是每個塊的標題欄,開發過程中最重要信息必須記錄在這里。為什么這么說呢?
一般塊分成兩類,第一類是標準塊,也就是通用功能塊,都是用來直接調用的。第二類是用來關聯、調用各種標準塊的塊。
前者雖然是標準塊,但也難免有程序優化、功能升級、增加報警等后期改動。那這種版本變更、人員信息的內容一定要記錄清晰。還有功能介紹、調用環境、CPU要求等,也需要記錄,避免出現錯誤調用。
后者就是在調試過程中需要頻繁更改的塊,同樣也需要記錄修改原因、開發人員等信息。這樣有助于更好地溯源,以及為今后的開發提供參考。為此,《指南》中提供了相關的模板用于編輯和保存這些內容。如圖1所示。

圖 1. SCL信息模板
當然,和其他編程語言有所不同,因為SCL模板是寫在語句中,所以在塊進行專有技術保護時無法顯示。因此,可以把模板的內容填寫到如圖2所示的“塊屬性>信息"中,這樣在不輸入密碼的情況下就可以看到塊的各種信息,如圖3所示。

圖2. 塊屬性信息填寫
圖3. SCL加密塊屬性查看
3 使用庫進行版本控制
前面說到標準塊,在后期可能會有程序優化、功能升級、增加報警等改動,也就是版本升級。如果只是單純的修改程序替換程序,還不能起到版本管理,版本控制的功能。如需實現版本管理和控制,建議使用庫的類型功能。
庫的類型功能,可對標準塊,包括FB、FC、PLC數據類型(UDT)等進行版本控制。使用庫的類型功能在每次程序變更時,能夠實現對版本號的更新,支持編輯作者、注釋等信息。如圖4所示。

圖4. 發布類型版本
注意:在程序塊加入庫的類型之前,建議將需要設置的仿真功能激活、自動編號功能、專有技術保護等設置完畢。因為一旦塊加入庫中,這些功能無法再次設置。
對于版本號,一般有以下要求供參考:
版本號格式為 x.y.z
起始版本為 1.0.0
“z" 表示修復錯誤,功能不做修改
“y" 表示功能進行擴展,變更時,同時對“z" 清零
“x" 是重大變更或對以前版本不兼容的更改,變更時,同時對“y" 和 “z" 清零
“x"、“y" 、 “z" 位于 0 - 999 之間
具體版本號變更示例,請參考下表。

有了這個功能,就可以方便地在項目中進行版本管理,更進一步還可以做成企業庫甚至網絡庫進行全局共享,方便項目統*籌劃。
4 處理 ENO
如果說編一些報警程序,想必每個開發者或者公司都有相關經驗,方法也是五花八門。但如果只是指令的一些報警,這個可能大家就不是很熟悉了。這里就介紹一個小技巧,可以在處理指令報警時達到事半功倍的效果。
可能大家都注意到了,很多指令,例如數學運算、轉換等,或者FC、FB中都會在右邊輸出端有個ENO。一般都空在那里,也沒有什么影響,要不就是后面串聯其他的塊,*此而已。
其實不然,之所以感覺不到它有什么作用,是因為這個功能默認不激活,也就是ENO一直為True。但實際上我們可以激活這個功能,讓ENO去判斷指令或塊是否執行異常。這時計算正常ENO輸出True,計算異常ENO輸出False。
像指令中的計算超限、或者轉換出錯等都可以判斷出來。此外還可以在自定義塊中對ENO賦值,自行給出或判斷ENO狀態。
那怎么能使得指令、塊的 ENO 激活呢?
非常簡單,對于LAD/FBD中調用的基本指令,可以直接在指令的右鍵菜單中生成ENO,即激活ENO。如圖5所示。

圖5. 生成 ENO
如果是SCL塊,或者是LAD/FBD塊中SCL段調用基本指令激活ENO,則不能像圖5中的方式。需要在所在塊屬性中激活設置,如圖6所示的紅框。

當然如果是系統指令塊或者是用戶塊的話,只要是塊內部有對ENO 進行修改,那么在調用該塊的時候就可能會出現ENO = False的情況。
下面我們看一個SCL中ENO的使用例子,如圖7所示。看了這個例子您應該對ENO就有了更深一步的認識了。
圖7.ENO 示例
上面的例子中,因為DINT的范圍比INT要大,轉換是可能會失敗的,一旦變量num的范圍超過了INT的范圍,那ENO必然會輸出False。
所以利用ENO的功能,可以優化程序。
5 基于 PLCopen 模板進行編程
前文提到《指南》的目的旨在幫助開發者能夠統一編程風格,促進項目的標準化。針對標準化編程,西門子除了提供了一些規則建議以外,還提供了非常好用的編程模板。這個模板就是個編程框架,有了框架只需往里面增加工藝邏輯內容就好了。
西門子提供的符合PLCopen標準的基于SCL編程語言的模板是通用函數庫(LGF)。基于通用函數庫(LGF),可以很輕松地編寫出風格統一,易于閱讀的FC、FB程序。通用函數庫