この記事はここにも乗っています↓
http://soup01.com/ja/2019/12/25/post-1990/
F1からみると、?=を使ってVariantの変数を参照変数として扱うことができます。
もしTagがVariantとして扱ってるときにその参照が有効だったら、参照がそのまま使えるですが、そうじゃない場合は値がNULLになります。
参照として扱ってるとき、その参照が有効かどうかをチエックする方法があります。LADとFBDの場合はENOの状態で判断することができます。もしENOが1なら有効で0なら無効です。STL、SCLの場合IS_NULLかNOT_NULLのFunctionを使えば有効かどうかをチエックできます。
ルール
1.VariantがTempの変数NG。
2.Variantを参照するメモリエリアは必ず最適化されたメモリエリアです。
3.Variantを参照する変数は配列なら、必ず長さも一緒にしないといけません。例えば[0..9]配列のVariantが[0..10]の配列に参照することができません。
4.SCLの場合、a := b := cのようなマルチ与えができません。
実装
では早速EXAMPLEを作りましょう。まず3つの構造体を作ります。
Paras1
Paras2
Paras3
Function
InputはVariantです。
Temp Areaを注目してください。REF_TOになりますね。これは先ずっと言ってた“”参照“です。3つの参照用の変数を作ります。
tparasの配列は単なるどっちの参照になるかを示すのFlagだけです。
Program
Line2~12まではCase文とTypeOfのFunctionを使ってVariantがどっちのData Typeのものかを判断します。もしParas1ならVariantがtparas1を参照します…みたいな
Line14-16は各参照変数がNULLかどうかをCheckします。
Line1-3はもしそれらのData Typeによって違う結果を出します。
^文は参照変数を使うときにつけないといけません。
Check
最後は三回もFunctionを呼び出し、違う変数を入れてテストします。
Network1が入れるのは1と42でBlockの中はかけ算なので結果が42になります。
Network2が入れるのは1.99と5.32でBlockの中は引き算なので結果は-3になります。
Network3が入れるのは全てOnのBoolでBlockの中にANDの演算なので結果が1になります。
はいーお疲れ様です。