# 值更改

值更改操作更改变量、对象和目标的值和属性。

##### 块

##### 文本

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]: 该值被设置为最小值或最大值。

注：[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 运算（逻辑积后跟 NOT），然后将结果复制到目标块。
[NorTo] | ##### 块 [NorTo] ##### 文本 '$Enums.AssignmentOperator.NorTo' | 在源块和目标块中指定的整数或变量之间进行 NOR 运算 (逻辑和后接反相器)，然后将结果复制到目标块。

注：

- 在使用数学运算符除 (/) 或模 (%) 的数学块和值更改操作中，不能使用负值。

- 在值更改操作 (AddTo、SubTo、DivTo、MulTo) 中使用 16 个或更多十进制数字时，请使用 LINT 或 ULINT 作为目标变量。

[值更改] 操作允许您将变量或源属性设置为目标。

隐藏显示

1. 变量值更改 - 整数
2. 变量值更改 - 日期和时间
3. 变量值更改 - BOOL
4. 变量值更改 - STRING
5. 对象源属性值更改
6. 变量源属性值更改
7. 目标源属性值更改

## 变量值更改 - 整数

将源块的值设置为目标块中的变量。

(示例): 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)。

逻辑表达式将目标块和源块的值转换为二进制数，并计算每个数位的逻辑积。将结果设置回原始基数，并将其设置到目标块中。

(示例): OrTo

操作 | 目标块 | 源块
[OrTo] | 将变量 SINT1 设置到变量块。 | 将变量 SINT2 设置到变量块。
##### 块 ##### 文本 changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.OrTo, SINT1, SINT2);

→ 如果 SINT1 为 3 (二进制: 00000011) 且 SINT2 为 5 (二进制: 00000101)，则触发时 SINT1 将为 7 (二进制: 00000111)。

逻辑表达式将目标块和源块的值转换为二进制数，并计算每个数位的逻辑和。将结果设置回原始基数，并将其设置到目标块中。

(示例): XorTo

操作 | 目标块 | 源块
[XorTo] | 将变量 SINT1 设置到变量块。 | 将变量 SINT2 设置到变量块。
##### 块 ##### 文本 changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.XorTo, SINT1, SINT2);

→ 如果 SINT1 为 3 (二进制: 00000011) 且 SINT2 为 5 (二进制: 00000101)，则触发时 SINT1 将为 6 (二进制: 00000110)。

逻辑表达式将目标块和源块的值转换为二进制数，并计算每个数位的排他逻辑和。将结果设置回原始基数，并将其设置到目标块中。

(示例): NandTo

操作 | 目标块 | 源块
[NandTo] | 将变量 SINT1 设置到变量块。 | 将变量 SINT2 设置到变量块。
##### 块 ##### 文本 changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.NandTo, SINT1, SINT2);

→ 如果 SINT1 为 3 (二进制: 00000011) 且 SINT2 为 5 (二进制: 00000101)，则触发时 SINT1 将为 -2 (二进制: 11111110)。

逻辑表达式将目标块和源块的值转换为二进制数，并计算每个数位的负逻辑积。将结果设置回原始基数，并将其设置到目标块中。

(示例): NorTo

操作 | 目标块 | 源块
[NorTo] | 将变量 SINT1 设置到变量块。 | 将变量 SINT2 设置到变量块。
##### 块 ##### 文本 changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.NorTo, SINT1, SINT2);

→ 如果 SINT1 为 3 (二进制: 00000011) 且 SINT2 为 5 (二进制: 00000101)，则触发时 SINT1 将为 -8 (二进制: 11111000)。

逻辑表达式将目标块和源块的值转换为二进制数，并计算每个数位的逻辑和进行反相。将结果设置回原始基数，并将其设置到目标块中。

## 变量值更改 - 日期和时间

将日期和时间值从源变量设置到目标变量。

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。

注： 如果源块设置为 [常量] 日期或时间，则常量中未包含的任何日期或时间值都将为零。例如，如果将常量时间写入 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

一位数据被设置到目标变量。

(示例): 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]并将 10/17/2017 设置到常量块。
##### 块 ##### 文本 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）

将外接设备的日期和时间设置为 DATE_AND_TIME 变量 Var1，为从 1970/01/01 00:00:00 UTC 开始的秒数 (32 位整数)。有关 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);

→ 当触发时，人机界面的背光灯会关闭。