# 값 변경

변수값 변경 작업으로 변수, 오브젝트 및 표시기의 값과 속성을 변경할 수 있습니다.

##### 블록

##### 텍스트

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' OR '-=' | 소스 블록에 지정된 변수, 상수 또는 표현식을 대상 블록에 뺄 수 있습니다.
[MulTo] | ##### 블록 [MulTo] ##### 텍스트 '$Enums.AssignmentOperator.MulTo' Or'*=' | 대상 블록의 값을 소스 블록에 지정된 변수나 상수, 식으로 곱하고 그 결과를 대상 블록에 복사합니다.
[DivTo] | ##### 블록 [DivTo] ##### 텍스트 '$Enums.AssignmentOperator.DivTo' Or'/=' | 대상 블록의 값을 소스 블록에 지정된 변수나 상수, 식으로 나누고 그 결과를 대상 블록에 복사합니다.
[AndTo] | ##### 블록 [AndTo] ##### 텍스트 '$Enums.AssignmentOperator.AndTo' Or'&=' | 소스 블록에 지정된 정수나 변수 및 대상 블록 간에 AND 연산(논리곱)을 실행하고 그 결과를 대상 블록에 복사합니다.
[OrTo] | ##### 블록 [OrTo] ##### 텍스트 '$Enums.AssignmentOperator.OrTo' Or'|=' | 소스 블록에 지정된 정수나 변수와 대상 블록에 지정된 정수나 변수 사이에 OR 연산(논리합)을 실행하고 그 결과를 대상 블록에 복사합니다.
[XorTo] | ##### 블록 [XorTo] ##### 텍스트 '$Enums.AssignmentOperator.XorTo' Or'^=' | 소스 블록에 지정된 정수나 변수 및 대상 블록 간에 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으로 설정됩니다.

메모: 소스 블록이 [상수] 날짜나 시간으로 설정되어 있으면, 상수에 포함되지 않은 날짜나 시간 값은 0이 됩니다. 예를 들어 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)

외부 장치의 날짜와 시간을 1970/01/01 00:00:00 UTC부터 초 수(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을 대상 블록에 설정합니다. | BOOL1 변수를 변수 블록에서 값 1로 설정합니다.
##### 블록 ##### 텍스트 changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, $Target.Target01.Preferences.BacklightOff, BOOL1.Value);

→ 트리거가 발생하면 디스플레이 장치의 백라이트가 꺼집니다.