# 値の変更

値の変更オペレーションは、変数、オブジェクト、および表示器の値とプロパティを変更します。

##### ブロック

##### テキスト

changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, TARGET, EXPRESSION);
3 1 2 4

1: オペレーション

2: 出力先

3: When over

値が範囲を超えたときのオペレーションを設定します。

[When over] の設定:

- [Loop]: 範囲を超えた部分は、最小値と最大値の間でループします。例えば、値の範囲が 0 〜 10 とすると、現在の値 5 に 7 を足すと結果は 1 になります。ただし、オペレーションが [Set] の場合を除きます。その場合、値の範囲を超える値を書き込みしても、現在値は変更されません。
- [Stop]: 値は最小値または最大値に設定されます。

MEMO: [Loop] は、最大値に達したときにループを停止させる実数データタイプの変数をサポートしていません。

4: ソース

### オペレーション

[Set] | ##### ブロック [Set] ##### テキスト '$Enums.AssignmentOperator.Set' または '=' | ソースブロックで指定された変数、定数、または式を出力先ブロックに書き込みます。
[AddTo] | ##### ブロック [AddTo] ##### テキスト '$Enums.AssignmentOperator.AddTo' Or'+=' | ソースブロックで指定された変数、定数、または式を出力先ブロックに追加します。
[SubTo] | ##### ブロック [SubTo] ##### テキスト '$Enums.AssignmentOperator.SubTo' または '-=' | ソースブロックで指定された変数、定数、または式を出力先ブロックから減算します。
[MulTo] | ##### ブロック [MulTo] ##### テキスト '$Enums.AssignmentOperator.MulTo' または '*=' | 出力先ブロックの値に、ソースブロックで指定された変数、定数、または式を乗算し、結果を出力先ブロックにコピーします。
[DivTo] | ##### ブロック [DivTo] ##### テキスト '$Enums.AssignmentOperator.DivTo' または '/=' | 出力先ブロックの値を、ソースブロックで指定された変数、定数、式で割り、その結果を出力先ブロックにコピーします。
[AndTo] | ##### ブロック [AndTo] ##### テキスト '$Enums.AssignmentOperator.AndTo' または '&=' | ソースブロックおよび出力先ブロックで指定された整数または変数間で AND 演算 (論理積) を実行し、結果を出力先ブロックにコピーします。
[OrTo] | ##### ブロック [OrTo] ##### テキスト '$Enums.AssignmentOperator.OrTo' または '|=' | ソースブロックおよび出力先ブロックで指定された整数または変数間で OR 演算 (論理和) を実行し、結果を出力先ブロックにコピーします。
[XorTo] | ##### ブロック [XorTo] ##### テキスト '$Enums.AssignmentOperator.XorTo' または '^=' | ソースブロックおよび出力先ブロックで指定された整数または変数間で XOR 演算 (排他的論理和) を実行し、結果を出力先ブロックにコピーします。
[NandTo] | ##### ブロック [NandTo] ##### テキスト '$Enums.AssignmentOperator.NandTo' | ソースブロックおよび出力先ブロックで指定された整数または変数間で NAND 演算 (否定論理積) を実行し、結果を出力先ブロックにコピーします。
[NorTo] | ##### ブロック [NorTo] ##### テキスト '$Enums.AssignmentOperator.NorTo' | ソースブロックおよび出力先ブロックで指定された整数または変数間で NOR 演算 (否定論理和) を実行し、結果を出力先ブロックにコピーします。

MEMO:

- 数学演算子の徐算 (/) または乗除演算 (%) を使用した Math ブロックおよび値の変更オペレーションでは、負の値を使用できません。

- 値の変更オペレーション (AddTo、SubTo、DivTo、MulTo) に 16 桁以上の 10 進数を使用する場合は、出力先変数に LINT または ULINT を使用してください。

[値の変更] オペレーションでは出力先に変数またはソースプロパティを設定することができます。

非表示表示

1. 変数値の変更 - INTEGER
2. 変数値の変更 - 日付と時刻
3. 変数値の変更 - BOOL
4. 変数値の変更 - STRING
5. オブジェクトのソースプロパティ値の変更
6. 変数のソースプロパティ値の変更
7. 表示器のソースプロパティ値の変更

## 変数値の変更 - INTEGER

ソースブロックの値を出力先ブロックの変数に設定します。

(例): Set

オペレーション | 出力先ブロック | ソースブロック
[Set] | 変数 INT1 を変数ブロックに設定します。 | [Int] を選択し、定数ブロックに 5 を設定します。
##### ブロック ##### テキスト changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, INT1, 5);

→ スクリプトが実行されると、INT1 が 5 に設定されます。

(例): AddTo

オペレーション | 出力先ブロック | ソースブロック
[AddTo] | 変数 INT1 を変数ブロックに設定します。 | [Int] を選択し、定数ブロックに 7 を設定します。
##### ブロック ##### テキスト changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.AddTo, INT1, 7);

→ スクリプト実行時に INT1 が 3 の場合、ソースブロックの 7 が追加され、INT1 は 10 になります。

(例): SubTo

オペレーション | 出力先ブロック | ソースブロック
[SubTo] | 変数 INT1 を変数ブロックに設定します。 | [Int] を選択し、定数ブロックに 3 を設定します。
##### ブロック ##### テキスト changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.SubTo, INT1, 3);

→ スクリプト実行時に INT1 が 5 の場合、ソースブロックの値 3 が減算され、INT1 は 2 になります。

(例): DivTo

オペレーション | 出力先ブロック | ソースブロック
[DivTo] | 変数 INT1 を変数ブロックに設定します。 | [Int] を選択し、定数ブロックに 2 を設定します。
##### ブロック ##### テキスト changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.DivTo, INT1, 2);

→ スクリプト実行時に INT1 が 5 の場合、その値はソースブロックの値 2 で除算され、INT1 は 2 になります。値が整数型の場合、小数点以下の値は切り捨てられます。

(例): MulTo

オペレーション | 出力先ブロック | ソースブロック
[MulTo] | 変数 INT1 を変数ブロックに設定します。 | [Int] を選択し、定数ブロックに 5 を設定します。
##### ブロック ##### テキスト changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.MulTo, INT1, 5);

→ スクリプト実行時に INT1 が 3 の場合、その値はソースブロックの値 5 で積算され、INT1 は 15 になります。

(例): AndTo

オペレーション | 出力先ブロック | ソースブロック
[AndTo] | 変数 SINT1 を変数ブロックに設定します。 | 変数 SINT2 を変数ブロックに設定します。
##### ブロック ##### テキスト changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.AndTo, SINT1, SINT2);

→ SINT1 が 3 (バイナリー: 00000011) で SINT2 が 5 (バイナリー: 00000101) の場合、トリガーが発生すると SINT1 は 1 (バイナリー: 00000001) になります。

論理式は、出力先ブロックとソースブロックの値を 2 進数に変換し、各桁での論理積を計算します。結果を元の基数に戻し、出力先ブロックに設定します。

(例): OrTo

オペレーション | 出力先ブロック | ソースブロック
[OrTo] | 変数 SINT1 を変数ブロックに設定します。 | 変数 SINT2 を変数ブロックに設定します。
##### ブロック ##### テキスト changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.OrTo, SINT1, SINT2);

→ SINT1 が 3 (バイナリー: 00000011) で SINT2 が 5 (バイナリー: 00000101) の場合、トリガーが発生すると SINT1 は 7 (バイナリー: 00000111) になります。

論理式は、出力先ブロックとソースブロックの値を 2 進数に変換し、各桁での論理和を計算します。結果を元の基数に戻し、出力先ブロックに設定します。

(例): XorTo

オペレーション | 出力先ブロック | ソースブロック
[XorTo] | 変数 SINT1 を変数ブロックに設定します。 | 変数 SINT2 を変数ブロックに設定します。
##### ブロック ##### テキスト changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.XorTo, SINT1, SINT2);

→ SINT1 が 3 (バイナリー: 00000011) で SINT2 が 5 (バイナリー: 00000101) の場合、トリガーが発生すると SINT1 は 6 (バイナリー: 00000110) になります。

論理式は、出力先ブロックとソースブロックの値を 2 進数に変換し、各桁での排他的論理和を計算します。結果を元の基数に戻し、出力先ブロックに設定します。

(例): NandTo

オペレーション | 出力先ブロック | ソースブロック
[NandTo] | 変数 SINT1 を変数ブロックに設定します。 | 変数 SINT2 を変数ブロックに設定します。
##### ブロック ##### テキスト changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.NandTo, SINT1, SINT2);

→ SINT1 が 3 (バイナリー: 00000011) で SINT2 が 5 (バイナリー: 00000101) の場合、トリガーが発生すると SINT1 は -2 (バイナリー: 11111110) になります。

論理式は、出力先ブロックとソースブロックの値を 2 進数に変換し、各桁での負の論理積を計算します。結果を元の基数に戻し、出力先ブロックに設定します。

(例): NorTo

オペレーション | 出力先ブロック | ソースブロック
[NorTo] | 変数 SINT1 を変数ブロックに設定します。 | 変数 SINT2 を変数ブロックに設定します。
##### ブロック ##### テキスト changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.NorTo, SINT1, SINT2);

→ SINT1 が 3 (バイナリー: 00000011) で SINT2 が 5 (バイナリー: 00000101) の場合、トリガーが発生すると SINT1 は -8 (バイナリー: 11111000) になります。

論理式は、出力先ブロックとソースブロックの値を 2 進数に変換し、各桁で否定論理和を計算します。結果を元の基数に戻し、出力先ブロックに設定します。

## 変数値の変更 - 日付と時刻

ソース変数の日付と時刻の値を出力先変数に設定します。

DATE, TIME_OF_DAY、DATE_AND_TIME 変数は [Set] および [AddTo] 演算子をサポートしています。

ソースブロックおよび出力先ブロックが、DATE、 TIME_OF_DAY または DATE_AND_TIME 変数の場合の動作を次に示します。

オペレーション | ソースブロック | 出力先ブロック | 動作
[Set] | DATE | DATE | 日付が設定されます。
TIME_OF_DAY | 値は設定されません。
DATE_AND_TIME | 日付のみ設定されます。
TIME_OF_DAY | DATE | 値は設定されません。
TIME_OF_DAY | 時刻が設定されます。
DATE_AND_TIME | 時刻のみ設定されます。
DATE_AND_TIME | DATE | 日付のみ設定されます。
TIME_OF_DAY | 時刻のみ設定されます。
DATE_AND_TIME | 日付と時刻が設定されます。
[AddTo] | DATE | DATE | 日付を追加します。
TIME_OF_DAY | 値は設定されません。
DATE_AND_TIME | 日付のみを追加します。
TIME_OF_DAY | DATE | 値は設定されません。
TIME_OF_DAY | 時間を追加します。
DATE_AND_TIME | 時間のみを追加します。
DATE_AND_TIME | DATE | 日付のみを追加します。
TIME_OF_DAY | 時間のみを追加します。
DATE_AND_TIME | 日付と時刻を設定します。

(例): Set

オペレーション | 出力先ブロック | ソースブロック
[Set] | 変数 TIME_OF_DAY1 を変数ブロックに設定します。 | [TIME_OF_DAY] を選択し、定数ブロックに 00:15:00 を設定します。
##### ブロック ##### テキスト changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, TIME_OF_DAY1, timeOfDay(00, 15, 00));

→ トリガーが発生すると TIME_OF_DAY1 が 00:15:00 に設定さます。

MEMO: ソースブロックが [定数] の日付または時刻に設定されている場合、その定数に含まれていない日付または時刻の値はゼロになります。例えば、DATE_AND_TIME 変数に定数の時間を書き込むと、日付の値は 0 (1970/01/01) になります。

(例): AddTo

オペレーション | 出力先ブロック | ソースブロック
[AddTo] | 変数 DATE_AND_TIME1 を変数ブロックに設定します。 | [TIME_OF_DAY] を選択し、定数ブロックに 00:15:00 を設定します。
##### ブロック ##### テキスト changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.AddTo, DATE_AND_TIME1, timeOfDay(00, 15, 00));

→ DATE_AND_TIME1 が 2024/10/01 12:34:56 の場合、トリガーが発生するとソースブロックの 00:15:00 が追加され DATE_AND_TIME1 は 2024/10/01 12:49:56 になります。

## 変数値の変更 - BOOL

1 ビットのデータが出力先変数に設定されます。

(例): Set

オペレーション | 出力先ブロック | ソースブロック
[Set] | 変数 BOOL1 を変数ブロックに設定します。 | [Int] を選択し、定数ブロックに 1 を設定します。
##### ブロック ##### テキスト changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, BOOL1, 1);

→トリガーが発生すると BOOL1 に ON が設定されます。

## 変数値の変更 - STRING

文字列が出力先変数に設定されます。

(例): Set

オペレーション | 出力先ブロック | ソースブロック
[Set] | 変数 STRING1 を変数ブロックに設定します。 | [STRING] を選択し、定数ブロックに "DEF" を設定します。
##### ブロック ##### テキスト changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, STRING1, "DEF");

→トリガーが発生すると STRING1 に DEF が設定されます。

(例): AddTo

オペレーション | 出力先ブロック | ソースブロック
[AddTo] | 変数 STRING1 を変数ブロックに設定します。 | [STRING] を選択し、定数ブロックに "DEF" を設定します。
##### ブロック ##### テキスト changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.AddTo, STRING1, "DEF");

→ STRING1 が "AB" の場合、トリガーが発生すると "DEF" がソースブロックに追加され STRING1 は "ABDEF" になります。

## オブジェクトのソースプロパティ値の変更

ソースブロックの値を出力先ブロックのソースプロパティに設定します。

(例 1)

オペレーション | 出力先ブロック | ソースブロック
[Set] | オブジェクトブロックにオブジェクトのソースプロパティ Rectangle1.Thickness を設定します。 | [Int] を選択し、定数ブロックに 10 を設定します。
##### ブロック ##### テキスト changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, $GraphicObject.Rectangle1.Thickness, 10);

→トリガーが発生すると、Rectangle1 の枠幅が 10 に変わります。

(例 2)

オペレーション | 出力先ブロック | ソースブロック
[Set] | オブジェクトブロックにオブジェクトのソースプロパティ Lamp1.Interlock を設定します。 | [Int] を選択し、定数ブロックに 0 を設定します。
##### ブロック ##### テキスト changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, $GraphicObject.Lamp1.Interlock, 0);

→トリガーが発生すると Lamp1 のインターロック状態が OFF に設定されます。

## 変数のソースプロパティ値の変更

ソースブロックの値を出力先ブロックのソースプロパティに設定します。

(例)

オペレーション | 出力先ブロック | ソースブロック
[Set] | 変数ブロックに変数のソースプロパティ INT1.Value を設定します。 | [Int] を選択し、定数ブロックに 1 を設定します。
##### ブロック ##### テキスト changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, INT1.Value, 1);

→トリガーが発生すると INT1.Value に 1 が設定されます。

## 表示器のソースプロパティ値の変更

ソースブロックの値を出力先ブロックのソースプロパティに設定します。

(例 1)

表示器の日付を任意の日付に設定します。

操作 | 出力先ブロック | ソースブロック
[Set] | 表示器ブロックに表示器のソースプロパティ Target01.DateAndTime.Date を設定します。 | [Date] を選択し、定数ブロックに 2017/10/17 を設定します。
##### ブロック ##### テキスト changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, $Target.Target01.DateAndTime.Date, date(2017, 10, 17));

→トリガーが発生すると、表示器の日付が 10/17/2017 に設定されます。

(例 2)

表示器の日付と時刻を接続機器と同じ日付と時刻に設定します。

(例 2-1)

接続機器の日付と時刻 (年、月、日、時、分、秒) をそれぞれ整数変数 INT1 から INT6 に格納してください。

オペレーション | 出力先ブロック | ソースブロック
[Set] | 表示器ブロックに表示器のソースプロパティを設定します。 Target01.DateAndTime.Year Target01.DateAndTime.Month Target01.DateAndTime.Day Target01.DateAndTime.Hour Target01.DateAndTime.Minute Target01.DateAndTime.Second | 変数 INT1 から INT6 を変数ブロックに設定します。
##### ブロック ##### テキスト onScheduledDay(23, 0, () => { changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, $Target.Target01.DateAndTime.Year, INT1.Value); changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, $Target.Target01.DateAndTime.Month, INT2.Value); changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, $Target.Target01.DateAndTime.Day, INT3.Value); changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, $Target.Target01.DateAndTime.Hour, INT4.Value); changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, $Target.Target01.DateAndTime.Minute, INT5.Value); changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, $Target.Target01.DateAndTime.Second, INT6.Value); });

→毎日 23 時 00 分に表示器の日付と時刻が接続機器の日付と時刻に合わせられます。

(例 2-2)

接続機器の日付と時刻を、1970/01/01 00:00:00 UTC を 0 とした秒単位の 32 ビット整数で DATE_AND_TIME 変数 Var1 に格納してください。変数 Var1 の値と日付/時刻の対応は、以下を参照してください。

TIME、DATE、TIME_OF_DAY、DATE_AND_TIME

オペレーション | 出力先ブロック | ソースブロック
[Set] | 表示器ブロックに表示器のソースプロパティ Target01.DateAndTime.DateTime を設定します。 | 変数 Var1 を変数ブロックに設定します。
##### ブロック ##### テキスト onScheduledDay(23, 0, () => { changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, $Target.Target01.DateAndTime.DateTime, Var1.Value); });

→毎日 23 時 00 分に表示器の日付と時刻が接続機器の日付と時刻に合わせられます。

(例: 3)

バックライトを消灯します。

オペレーション | 出力先ブロック | ソースブロック
[Set] | 表示器ブロックに表示器のソースプロパティ Target01.Preferences.BacklightOff を設定します。 | 値が 1 の変数 BOOL1 を変数ブロックに設定します。
##### ブロック ##### テキスト changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, $Target.Target01.Preferences.BacklightOff, BOOL1.Value);

→ トリガーが発生すると、表示器のバックライトが消灯します。