Siemens#?=とはなに?

使用するバージョン

F1からみると、?=を使ってVariantの変数を参照変数として扱うことができます。
もしTagがVariantとして扱ってるときにその参照が有効だったら、参照がそのまま使えるですが、そうじゃない場合は値がNULLになります。

参照として扱ってるとき、その参照が有効かどうかをチエックする方法があります。LADとFBDの場合はENOの状態で判断することができます。もしENOが1なら有効で0なら無効です。STL、SCLの場合IS_NULLかNOT_NULLのFunctionを使えば有効かどうかをチエックできます。

ですが、この?=はルールがあります。

  • VariantがTempの変数NG。
  • Variantを参照するメモリエリアは必ず最適化されたメモリエリアです。
  • Variantを参照する変数は配列なら、必ず長さも一緒にしないといけません。例えば[0..9]配列のVariantが[0..10]の配列に参照することができません。
  • SCLの場合、a := b := cのようなマルチ与えができません。

では早速EXAMPLEを作りましょう。まず3つの構造体を作ります。


Paras1

Paras2

Paras3

Function

Interfaceは以下になります。

InputはVariantです。
Temp Areaを注目してください。REF_TOになりますね。これは先ずっと言ってた“”参照“です。3つの参照用の変数を作ります。
tparasの配列は単なるどっちの参照になるかを示すのFlagだけです。

Line2~12まではCase文とTypeOfのFunctionを使ってVariantがどっちのData Typeのものかを判断します。もしParas1ならVariantがtparas1を参照します…みたいな
Line14-16は各参照変数がNULLかどうかをCheckします。

Line1-3はもしそれらのData Typeによって違う結果を出します。
^文は参照変数を使うときにつけないといけません。

最後、試しましょう。Data Blockを作成します。

中には3つの変数があって、そして違う値が入っています。

最後は三回もFunctionを呼び出し、違う変数を入れてテストします。

Network1が入れるのは1と42でBlockの中はかけ算なので結果が42になります。Network2が入れるのは1.99と5.32でBlockの中は引き算なので結果は-3になります。
Network3が入れるのは全てOnのBoolでBlockの中にANDの演算なので結果が1になります

ではーお疲れ様です!

Footer_Basic

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする