POU:CheckRangeSigned
タイプDINTのサブレンジタイプの範囲制限を監視するための機能
監視範囲の制限
これ 監視機能 範囲制限に対する違反を適切に処理する責任があります。違反に対する反応の例には、エラーフラグの設定や値の変更が含まれます。値がサブレンジ型変数に割り当てられると、関数は暗黙的に呼び出されます。
注意
監視機能の機能を利用するには、宣言部分を編集しないでください。ただし、ローカル変数を追加することは許可されています。
value
:サブレンジ型変数に割り当てる必要のある値lower
:範囲下限upper
:範囲上限
戻り値は、有効な範囲内にある限り、割り当て値です。そうでない場合は、違反したしきい値に応じて、上限または下限のいずれかが返されます。
たとえば、割り当て i := 10*y
暗黙的にに置き換えられます i := CheckRangeSigned(10*y, -4095, 4095);
もしも y
が「1000」の場合、「10 * 1000 = 10000」はに割り当てられません i
元のコードのように。代わりに、「4095」の上限範囲が割り当てられます。
同じことが当てはまります CheckRangeUnsigned
関数。
重要
関数が使用できない場合、実行時にそれぞれの変数のサブ範囲はチェックされません。この場合、サブレンジタイプDINT / UDINTの変数に-2147483648〜 + 2147483648(または0〜4294967295)の任意の値を割り当てることができます。 -9223372036854775808から+9223372036854775807(または0から18446744073709551615)の任意の値を、サブ範囲タイプLINT / ULINTの変数に割り当てることができます。
注意
エリア監視機能をリンクすると、無限ループが発生する可能性があります。たとえば、FORループのカウンター変数がサブ範囲タイプであり、ループのカウント範囲が定義されたサブ範囲を終了する場合、無限ループが発生する可能性があります。
VAR ui : UINT (0..10000); ... END_VAR
FOR ui:=0 TO 10000 DO ... END_FOR
プログラムはFORループを終了しません。 CheckRangeSigned
監視機能は防止します ui
10000より大きい値に設定されてから。
符号付きサブレンジタイプのDINT変数への値の割り当ては、 CheckRangeSigned
。この関数は、変数宣言で定義されているように、割り当て値をサブ範囲に制限します。 STでの関数のデフォルトの実装は次のとおりです。
宣言部分:
// Automatisch erzeugter Code : NICHT EDITIEREN FUNCTION CheckRangeSigned : DINT VAR_INPUT value, lower, upper: DINT; END_VAR
実装:
// Automatisch erzeugter Code : Es handelt sich hierbei um einen Implementierungsvorschlag. IF (value < lower) THEN CheckRangeSigned := lower; ELSEIF(value > upper) THEN CheckRangeSigned := upper; ELSE CheckRangeSigned := value; END_VAR