PC在編碼規(guī)范方面比PLC要好很多。既然它們都是編程語言,那么PC方面的規(guī)范是否可以用與PLC呢?答案是肯定的,但需要作取舍。下面規(guī)范中的大部分可以用于一般PLC,其中有些只是針對西門子博途,使用時需注意。 變量命名 目前PLC中的變量命名沒有統(tǒng)一的規(guī)則,這方面我們可以參考PC編程,在PC的編程中有如下規(guī)則: - camelCase,又叫駱駝命名法,變量中第一單詞首字母小寫,后面單詞的首字母大寫,就像camelCase名稱一樣。Java、C++等高級語言中普遍使用。
- snake_case,又叫蛇蛇命名法,單詞都小寫,單詞與單詞間用下劃線隔開。是Python推薦的命名風格
- PascalCase,帕斯卡命名法,源自于Pascal語言。和camelCase相似,不過首字母也大寫。幾乎在所有的高級語言中,用來命名類名。
- Hungarian,有匈牙利人發(fā)明,所以也叫匈牙利命名法。微軟早期推薦的風格?,F(xiàn)在也基本沒人使用。
結論:推薦普通變量,全局變量,共享DB,F(xiàn)C函數(shù)用camelCase。而FB用PascalCase,相應的背景數(shù)據(jù)塊則在后面加DB。對于常量用全大寫的SNAKE_CASE。有些名字如果傳統(tǒng)就是大寫,就不要改小寫,比如HMI,F(xiàn)C,F(xiàn)B,SV,PV等。在SCL中,建議關鍵詞用小寫,系統(tǒng)自帶的函數(shù)用大寫,以區(qū)分用戶的函數(shù),這個TIA Portal會自動完成。 變量取名 寫程序最頭痛的事不是組織邏輯關系,而是變量的命名。一個有意義的名字會讓程序清晰不少。 - 對于Q輸出,都是完成某一動作,最好用動詞+名詞,或名詞+動詞。
- 對于I輸入,按鈕啟動電機(push button),可以寫成pbStartMotor, 旋轉(zhuǎn)開關(switch button)切換自動手動,可以寫成sbAutoMan,限位開關(limit switch)可以寫成lsCylinderOut。如果反應一個位置狀態(tài),那么就寫成名詞+形容詞或名詞+方位。比如lsCylinderOut,vehicleOnLeft等等。最好固定一類詞。這次小車叫vehicle,那么下次就不要叫dolly。
- 對于某些bool型變量,很難歸類,比如想表達“是否完成”等判斷概念,寫成hasDone,isGood會比較好。
- 對于M,如果是完成動作,和Q一致,如果是表示狀態(tài),和I一致。
- 對于定時器和計數(shù)器較難命名,但可以寫成以ton或ctu開頭的,以區(qū)分一般變量。
- 在SCL中,對于循環(huán)變量,習慣用i,j,k來表示。
- 對于FC和FB比較麻煩,如果是完成動作,用動詞+名詞。如果是組織程序,用工位號來代替。
變量的取名很難,這里就不一一列舉。 數(shù)組 - 西門子的數(shù)組起始索引可以是負的,建議始終從1開始,以配合SCL中的循環(huán)。SCL中循環(huán)起始和結束都是閉區(qū)間。這個概念不是很好講清楚,自己體會吧。
變量的使用 - 對于M全局變量,僅在OB中使用,用來在FC或FB之間傳輸數(shù)據(jù)用,限制性的使用M。另外傳輸數(shù)據(jù)用共享DB也很好。TIA Portal中有組的概念,把共享DB和相關的FC,F(xiàn)B放在同一組中。
- 對于定時器和計數(shù)器
由于傳統(tǒng)的定時器和計數(shù)器是全局的,我們限制性使用。對于FC,可以在同組的共享DB塊中聲明,對于FB可以在static中聲明。如果FB中的計數(shù)器和定時器外部需要訪問,可以用output傳出,不要直接讀背景數(shù)據(jù)塊,背景數(shù)據(jù)塊是供FB使用的。 - 對于HMI訪問的變量,可以建一個FC和一個共享DB,作為接口使用。在命名上可以寫成interfaceHMI+編號,每個HMI各搞一個接口,方便管理,寫界面的和寫程序的可以分開了。
程序邏輯 - 在開始寫程序時,首先要建模,從大局入手,切不可一上來就寫程序,通過建模,你可以更清晰了解工藝流程,修改模型也比較方便,方便工程師之間溝通。PC編程有UML建模語言,狀態(tài)機就屬于其中的一種。Matlab的狀態(tài)機最為強大。當然PLC也有自己的工具,SFC。建模完成后,可以根據(jù)模型轉(zhuǎn)換為LAD和SCL,或直接生成PLC程序。如何轉(zhuǎn)換可以參考我的技術博客。
- 程序中注釋,過去一直認為越詳細越好,不過世道變了,現(xiàn)在推薦代碼自我注釋,也就是說,清晰的代碼不要注釋也很容易理解,而凌亂的代碼即使有注釋也不大理解。注釋不要去解釋某條語句或指令,要寫出代碼的意圖。對于FC,F(xiàn)B,接口參數(shù)必需要注釋。
- 代碼重構。通用編程有專門討論重構的書。對于一個控制要求,當你第一遍寫時,由于對問題理解的不夠深刻,寫出的代碼很凌亂,變量的命名亦很隨意,當寫完第一遍,程序可以正常運行,但信心不足,此時你再在以前代碼的基礎上又寫了一遍,發(fā)現(xiàn)你對的控制程序更有信心了,這個過程叫重構,有時候這個過程會重復好幾遍。好的程序是反復推敲出來的。如果有需求,你可以寫成FC或FB,作為庫反復使用。
- 盡量使用常開觸點。其實我們大部分人都習慣常開。但極限限位一般都是常閉接法。另外自動手動可以分別寫成兩個觸點,都用常開表示。
程序組織 - 組織程序,其實用FB塊比較好,這樣可以用它的靜態(tài)變量來來作為程序間的通訊。當然用FC也可以,指定一個共享DB塊作為程序間通信用。
- 手動和自動程序可以分別寫一個塊,然后分別輸出到中間變量 ,可以是DB或M區(qū)。再新建一個塊,把這些中間變量組合在一起控制Q輸出,可以添加一些互鎖條件,命名為outAssignment。
- 老的編程軟件中,我們把相同工位號的塊命名成“工位號+功能”,博途有個組的功能,可以添加一個新組,命名位相關工位號,然后把工位相關的程序放在其中。此時可以精簡塊的工位號,但“組織”塊不宜精簡掉,它需要在OB塊中調(diào)用。
今天寫到這里,謝謝。 非常歡迎大家反饋,后期會修改
|