C#與西門子博圖15001200PLC的當前認知1—2021.9.17

第一部分:C#面向物件的初步認知

C#是面向物件(OOP)設計的,因此可以將每個物體看成一個物件,但它還不是一個具體的物件,我們可以稱之為資料模板,對應C#的術語就是類。那麼我們建立了這個物體的資料模板後,它裡面就需要放這個物體的特徵,對應C#的術語就是欄位,屬性和方法。欄位就是這個物體的私有的,用private(修飾符)來限制外界對它直接訪問。而屬性的作用就是來訪問欄位的,也可以說成是屬性是欄位的方法,因此,屬性裡面有2個訪問器,分別是get{}和set{},它們來定義這個欄位是否可讀,是否可寫,這樣就方便人們對欄位的訪問;get{}一定要返回一個值,否則報錯;set{}可以對屬性進行保護,防止錯誤的屬性被賦值,例如人的年齡不可能是負數,那麼在set{}訪問器內,可以加入判斷語句,當輸入的值為負數時,就提示輸出錯誤。方法其實就是這個物體能實現的功能。

例如:我們把人這個物體建立成資料模板,就是建立一個類(class Humen),然後將人的特徵,比如姓名(name)、年齡(age)和性別(gender)用欄位和屬性建立好,這樣我們就建立好了人這個物件類模板。然後我們再將這個模板套到具體的人物上面,但是在套之前先要宣告這個確實存在這個人物,那麼我們要這麼做:public Humen humen1=new Humen(),這個實際的人物用C#的術語說法就是建立了一個Humen的例項物件humen1。如果有多個人,那麼可以繼續建立多個humen2,humen3等等。接著要對這個實際的人物進行填入資訊,那麼我們可以這麼寫,humen1。name=“張三”,humen1。age=28,humen1。gender=“男”,這樣我門就真正意義上的造了一個人,名字叫張三,年齡28歲,性別男。

程式碼:

C#與西門子博圖1500/1200PLC的當前認知1—2021.9.17

類的巢狀:

當我們建立了這個calss Humen類後,這個相當於是人的個體資料模板,那麼,我們每天上班的單位是由很多人組成的,當我們把單位看成一個整體物體時,也是可以對單位進行建立資料模板的,也就是建立一個單位類(class Company),假如這個類裡面就只有一個欄位和屬性,也就是人。那麼當我們要在Company這個類裡面使用Humen類時,就可以間接地使用Humen類中的屬性和方法。

程式碼:

C#與西門子博圖1500/1200PLC的當前認知1—2021.9.17

C#與西門子博圖1500/1200PLC的當前認知1—2021.9.17

這就是面向物件的好處。可以將物體物件製作成模版,而這個模版又可以被其他物體當作屬性和方法來使用,這樣巢狀使用大大的減少了程式碼,增加了程式層次和可讀性以及完整性。一旦某個類需要升級改造,那麼其他引用它的地方也會自動更改,方便維護。

Tips:整個程式的執行入口其實就是一個類(class Program),這個類裡面包含了主程式入口的方法Main(),我們把所有要用到的類放到Main()方法中,那麼此時這些類對於class Program來說,只是類的方法。

第二部分:博途各個塊的認知

FC塊:

首先一點它沒有背景資料塊,它不能儲存變數的值,就相當於一個功能塊,對應C#術語就是一個方法,它的作用就是實現一些邏輯運算,但無法對資料進行保持。FC塊中有input(輸入),output(輸出),inout(輸入輸出),temp(臨時變數),constant(常量),return(返回值),這些對應C#裡面的方法引數和返回值,而方法裡面的變數為區域性變數,相當於temp一個週期有效,它的值無法儲存,並且因為只有欄位和屬性才能儲存,因此它無法申請記憶體空間,所以才沒有背景資料塊。相反,FB塊相當於C#裡面的類,因此可以建立欄位和屬性,可以儲存值,所以FB塊有背景資料塊。

程式碼:

C#與西門子博圖1500/1200PLC的當前認知1—2021.9.17

FB塊:

FB塊相當於C#的類,它包含FC塊所有的功能,並且它有背景資料塊,可以存放保持型資料。FB塊中有input(輸入),output(輸出),inout(輸入輸出),static(中間變數),temp(臨時變數),constant(常量),return(返回值),這些對應C#裡面的欄位和屬性。

這裡面重點要說的是static,它裡面可以存放例項化物件,可以存放需要保持/非保持的資料,比如在裡面需要用到定時器/計數器,它們都需要背景資料塊,因為定時器/計數器相當於C#裡面的類,它的類已經在博途軟體中了,因此,正如第一部分講的那樣,要使用它們,就需要有一個實際的物體,即例項化物件,那麼這個物件就是存放在static裡面的,然後才能使用定時器/計數器裡面的功能(方法)。

C#中例項化物件(也就是new一下,向記憶體申請一塊空間)對應的就是建立DB背景資料塊,建立背景資料塊其實就是向PLC記憶體申請一塊空間,用來存放這個實際物件的資料。

另外,static裡面可以設定保持性資料,例如在裡面建立一個名稱為“電機啟動次數”的變數,當每次執行FB塊裡面的方法時,就會讓這個變數加1,由於這個變數是保持性質的,因此當PLC重新上電時,這個資料不會丟失。從這一點就能看出,FB塊比FC塊強大很多很多。FB塊比FC塊更有靈魂。

C#與西門子博圖1500/1200PLC的當前認知1—2021.9.17

C#與西門子博圖1500/1200PLC的當前認知1—2021.9.17