PLC Structured Text Object Oriented Programming
PLC結構化文字(ST)——介面指標轉換(__QUERYPOINTER)
__QUERYPOINTER
運算子__QUERYPOINTER
是IEC61131-3
的擴充套件,該運算子允許在執行時將功能塊的介面引用轉換為指標。返回值BOOL
型別:True
表示轉換成功,Flase
表示轉換失敗。
出於相容性考慮,需要轉換的指標的定義必須是基於
__SYSTEM.IQueryInterface
的擴充套件。
官方例程
- 語法結構
__QUERYPOINTER (<ITF_源>, <Pointer_目標>)
第一個運算元是介面引用或具有所需目標型別的 FB 例項,第二個運算元是指標。
- 程式碼示例
定義兩個介面,I_Base
擴充套件__System.IQueryInterface
,I_Derived
擴充套件I_Base
。
INTERFACE I_Base EXTENDS __System.IQueryInterface
METHOD Base : BOOL
INTERFACE I_Derived EXTENDS I_Base
METHOD Derived : BOOL
定義功能塊FB_Variante
實現I_Derived
介面。
FUNCTION_BLOCK FB_Variante IMPLEMENTS I_Derived
METHOD Base : BOOL // 介面方法
METHOD Derived : BOOL // 介面方法
METHOD Run : BOOL // FB_Variante額外新增一個方法
主程式Main
呼叫。
PROGRAM MAIN
VAR
iDerived : I_Derived;
fbVariante : FB_Variante;
bResult : BOOL;
bTest : BOOL;
pFB : POINTER TO FB_Variante;
END_VAR
//__QUERYPOINTER
iDerived := fbVariante;
bResult := __QUERYPOINTER(iDerived, pFB); // bResult : True
IF bResult THEN
bTest := pFB^.Derived();
pFB^.Run();
END_IF
上述例程中,轉換成功之後的指標仍然可以呼叫FB_Variante
功能塊Run
方法,由此可以看出運算子__QUERYPOINTER
應該是將介面iDerived
的例項地址給到了指標pFB
,所以指標可以正常使用介面定義以外的方法。
總結
以上例程改編自倍福線上幫助文件:https://infosys.beckhoff.com/index_en.htm