上篇文章介紹了數組,是一組相同類型數據的列表,那么不同類型的數據能否組合到一起用一個標簽表示呢?答案當然是可以的,而實現這個功能的就是結構體(struct)。
建立結構體
在三菱結構化編程的界面中左側程序部件里可以找到結構體標簽欄:
結構體
右鍵-新建數據-輸入數據名-確定:
建立結構體
確定后出現結構體設置窗口,在這個窗口中聲明這個結構體中想要包含的變量,這里隨便寫一些:
編輯變量
結構體建立完成。
結構體中聲明的便簽與程序中直接聲明的標簽相比,它能夠聲明的只有基本數據,而在標準的ST語言中,結構體中聲明的變量可以是另一個結構體,甚至可以是功能塊,這里三菱PLC的結構體并不是完整版的結構體。
結構體的使用
與數組不同,結構體建立完成后并不能直接使用,需要在程序中聲明成標簽。可以將結構體看做是比位(bit),字(word)等基本數據類型更高級的數據類型。將上面建立的結構體聲明標簽并在程序中賦值:
聲明結構體標簽
聲明標簽設置數據類型時,在類型分類勾選結構體,然后在右側列表里找到想要聲明的結構體。
變量調用
可以看到,在程序中寫出結構體標簽名stExample后面加上符號“.”會自動出現表格,而表格中的內容就是剛剛在結構體中建立的所有標簽,用鼠標或者方向鍵選中想要的標簽,回車確定即可寫入程序中:
變量賦值
結構體內部變量的賦值與普通變量沒有區別,相當于為每個變量加了一個前綴。
除了單個變量的賦值之外,結構體還可以整體賦值,例如將上面的結構體stExample的數據賦給新的結構體stCopy:
整體賦值
通過監看stCopy可以看到它的值與數據源stExample一致。只有兩個標簽的數據類型為相同結構體才可以整體賦值。
結構體有什么用?
這里只介紹了部分的了解
1.與數組配合,制作產品信息列表
相信工控人都聽過產品一詞,所有自動化設備都是在為產品服務。結構體可以用來記錄一個產品的多種信息。例如某電池生產線生產多種電池,每個電池有獨立的標簽,出廠前要測量每個電池的電壓,和外觀檢測。
根據需求可以建立如下結構體:
這個結構體中包含了一個電池的所有信息,然后根據需要把它聲明稱一定數量的數組:
聲明數組
這樣就stBattery這個標簽可以存儲100個電池的所有信息,我們在線監看一下這個結構體數組:
監看結構體
在實際的項目中,可以用視覺判斷電池類型和外觀檢測,可以用掃碼器讀碼,電壓表測量電壓。每一塊電池的所有信息都可以很方便的緩存到這個結構體中,以便用于分揀、替廢等工序。我們可以寫一小段程序來篩選出不同類型合格的產品,例如:將電池分為4個類型,A電池電壓3.5V,B為2.7V,C為4.0V,D為1.5V,外形檢測正常的為合格電池。
篩選電池
通過for循環遍歷列表中的所有電池結構體,將符合條件的電池信息按類型分別填入stBatteryA,stBatteryB,stBatteryC,stBatteryD四個結構體列表中。由于數據太多模擬的話一個一個賦值太費勁了,這里就不再仿真驗證了。
2.用于做功能塊(fb)的接口
在復雜的項目中,我們可能會用到輸入輸出變量非常多的自建功能塊,將有相同屬性的變量整合為結構體,會使程序變得清爽,例如:
功能塊接口
圖中是使用FBD(功能塊圖,三菱叫結構化梯形圖)展現的一個自建功能塊,它的輸入結構體stDeviceStates包含34個bit變量,輸出結構體包含8個bit,如果全部寫成基本變量那這個功能塊就太長了,恐怕一個屏幕都裝不下,賦值也會變得困難。
在標準的ST語言中結構體的作用遠不止于此,但是本人用到的也比較少。

文章來源:綜合網絡,侵權聯刪,謝謝。
戳這里,實用案例