我的問題是:使用指標和參考有什么好處?
我是 codesys 的新手,在我之前的作業中,我在 TIA 門戶(西門子)和 Sysmac Studio(歐姆龍)中編程,但從未遇到過指標或類似的東西。我想我了解它們的作業原理,但不確定何時應該自己使用它們。
例如,我剛從供應商那里收到一個功能塊:

為什么他們不只有一個用于輸入和輸出的陣列?
uj5u.com熱心網友回復:
首先,如果您曾經使用過VAR_IN_OUT宣告,那么您已經使用過參考,因為它等同于VARwith REFERENCE TO。
至于用途,目前我能想到的主要有4種:
鍵入 Punning,您也可以使用 a 來實作
UNION,但您可能不想為代碼中的每個重新解釋轉換創建聯合。TL; DR:節省記憶體和復制執行時間。每當您將一些資料傳遞給功能/功能塊時,它就會被復制。如果您的 PLC 有足夠的 CPU 能力和記憶體,這不是什么大問題,但是如果您在低端 PLC 上處理特別龐大的資料,那么您可能會超出實時執行限制,或者記憶體不足。但是,當您傳遞指標/參考時,無論資料有多大,只有指標/參考被復制和傳遞,在 32 位系統中為 4 個位元組,在 64 位系統中為 8 個位元組。
在 C 風格的語言中,當您希望函式回傳多個值而無需每次都創建自定義結構的麻煩時,您將使用指標/參考。你可以在這里做同樣的事情,但是在 CODESYS 函式中可以有多個輸出,例如:
VAR_OUPUT
out1 : INT; (*1st output variable *)
out2 : INT; (*2nd output variable *)
//...
END_VAR
- 最后,正如我一開始提到的,當你想傳遞一些需要在函式本身中修改的資料時,換句話說,你可以使用的地方也可以
VAR_IN_OUT使用指標/參考。您必須使用指標的一種特殊情況是,如果您Function Block在FB_Init(初始化/構造)函式中接收一些資料并將其存盤在本地。在這種情況下,您將有一個指標作為函式塊中的區域變數,并在FB_Init函式中獲取變數的地址。如果您的結構需要參考另一個結構或某些資料,則同樣適用。
附注。我可能錯過了其他一些用途。其他語言的主要用途之一是動態記憶體分配,但在 CODESYS 中,默認情況下這是禁用的,并非所有 PLC 都支持它,幾乎沒有人(據我所知)使用它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/371820.html
