# Cambio valore

L'operazione Cambio valore cambia il valore e le proprietà di Variabile, Oggetto e Target.

##### Blocco

##### Testo

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

1: Operazione

2: Destinazione

3: When over

Impostare l'operazione quando il valore supera l'intervallo.

Impostazione in [When over]:

- [Loop]: La porzione che supera l'intervallo va in loop al valore minimo o massimo. Per esempio, se l'intervallo di valori va da 0 a 10, aggiungendo 7 al valore corrente di 5 si ottiene 1. L'unica eccezione è quando l'operazione è [Set]. In questo caso, quando si scrive un valore che supera l'intervallo di valori, il valore corrente rimane invariato.
- [Stop]: Il valore viene impostato sul valore minimo o sul valore massimo.

Nota: [Loop] non supporta le variabili di tipo dati Reale che provocano l’arresto dell’anello quando si raggiunge il valore massimo.

4: Sorgente

### Operazione

[Set] | ##### Blocco [Set] ##### Testo '$Enums.AssignmentOperator.Set' O '=' | Scrive le variabili, le costanti o le espressioni specificate nel blocco sorgente sul blocco destinazione.
[AddTo] | ##### Blocco [AddTo] ##### Testo '$Enums.AssignmentOperator.AddTo' Or'+=' | Aggiunge le variabili, le costanti o le espressioni specificate nel blocco sorgente sul blocco destinazione.
[SubTo] | ##### Blocco [SubTo] ##### Testo '$Enums.AssignmentOperator.SubTo' O '-=' | Sottrae le variabili, le costanti o le espressioni specificate nel blocco sorgente sul blocco destinazione.
[MulTo] | ##### Blocco [MulTo] ##### Testo '$Enums.AssignmentOperator.MulTo' O'*=' | Moltiplica il valore del blocco di destinazione per la variabile, la costante o l'espressione specificata nel blocco sorgente e copia il risultato nel blocco di destinazione.
[DivTo] | ##### Blocco [DivTo] ##### Testo '$Enums.AssignmentOperator.DivTo' O'/=' | Divide il valore del blocco di destinazione per la variabile, la costante o l'espressione specificata nel blocco sorgente e copia il risultato nel blocco di destinazione.
[AndTo] | ##### Blocco [AndTo] ##### Testo '$Enums.AssignmentOperator.AndTo' O'&=' | Esegue l'operazione AND (prodotto logico) tra il numero intero o la variabile specificata nel blocco sorgente e nel blocco destinazione e copia il risultato sul blocco destinazione.
[OrTo] | ##### Blocco [OrTo] ##### Testo '$Enums.AssignmentOperator.OrTo' O'|=' | Esegue l'operazione OR (somma logico) tra il numero intero o la variabile specificata nel blocco sorgente e nel blocco destinazione e copia il risultato sul blocco destinazione.
[XorTo] | ##### Blocco [XorTo] ##### Testo '$Enums.AssignmentOperator.XorTo' O'^=' | Esegue l'operazione XOR (somma logica esclusiva) tra il numero intero o la variabile specificata nel blocco sorgente e nel blocco destinazione e copia il risultato sul blocco destinazione.
[NandTo] | ##### Blocco [NandTo] ##### Testo '$Enums.AssignmentOperator.NandTo' | Esegue l'operazione NAND (prodotto logico seguito da NOT) tra il numero intero o la variabile specificata nel blocco sorgente e nel blocco destinazione e copia il risultato sul blocco destinazione.
[NorTo] | ##### Blocco [NorTo] ##### Testo '$Enums.AssignmentOperator.NorTo' | Esegue l'operazione NOR (somma logica seguita da invertitore) tra il numero intero o la variabile specificata nel blocco sorgente e nel blocco destinazione e copia il risultato sul blocco destinazione.

Nota:

- In un blocco Math non si possono utilizzare valori negativi e le operazioni di modifica valore con gli operatori matematici divisione (/) o modulo (%).

- Se nell’operazione di modifica valore (AddTo, SubTo, DivTo, MulTo) si usano 16 o più cifre decimali, usare LINT o ULINT come variabile destinazione.

L'operazione [Cambio valore] consente di impostare come destinazione una variabile o una proprietà sorgente.

Nascondi Mostra

1. Cambio valore della variabile - INTERA
2. Cambio valore della variabile - GIORNO E ORA
3. Cambio valore della variabile - BOOLEANO
4. Cambio valore della variabile - STRINGA
5. Cambio valore proprietà della sorgente Oggetto
6. Cambio valore proprietà della sorgente variabile
7. Cambio valore proprietà della sorgente target

## Cambio valore della variabile - INTERA

Impostare il valore del blocco sorgente sulla variabile del blocco di destinazione.

(Esempio): Set

Operazione | Blocco destinazione | Blocco sorgente
[Set] | Impostare la variabile INT1 sul blocco variabili. | Selezionare [Int] e impostare 5 nel blocco Costanti.
##### Blocco ##### Testo changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, INT1, 5);

→ INT1 è impostato su 5 quando viene eseguito lo script.

(Esempio): AddTo

Operazione | Blocco destinazione | Blocco sorgente
[AddTo] | Impostare la variabile INT1 sul blocco variabili. | Selezionare [Int] e impostare 7 nel blocco Costanti.
##### Blocco ##### Testo changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.AddTo, INT1, 7);

→ Se INT1 è 3 quando viene eseguito lo script, si aggiunge il 7 del blocco sorgente e INT1 diventa 10.

(Esempio): SubTo

Operazione | Blocco destinazione | Blocco sorgente
[SubTo] | Impostare la variabile INT1 sul blocco variabili. | Selezionare [Int] e impostare 3 nel blocco Costanti.
##### Blocco ##### Testo changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.SubTo, INT1, 3);

→ Se INT1 è 5 quando viene eseguito lo script, il valore 3 nel blocco sorgente viene sottratto e INT1 diventa 2.

(Esempio): DivTo

Operazione | Blocco destinazione | Blocco sorgente
[DivTo] | Impostare la variabile INT1 sul blocco variabili. | Selezionare [Int] e impostare 2 nel blocco Costanti.
##### Blocco ##### Testo changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.DivTo, INT1, 2);

→ Se INT1 è 5 quando viene eseguito lo script, il suo valore viene diviso per il valore di 2 del blocco sorgente e INT1 diventa 2. Se il valore è di tipo intero, il valore decimale viene troncato.

(Esempio): MulTo

Operazione | Blocco destinazione | Blocco sorgente
[MulTo] | Impostare la variabile INT1 sul blocco variabili. | Selezionare [Int] e impostare 5 nel blocco Costanti.
##### Blocco ##### Testo changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.MulTo, INT1, 5);

→ Se INT1 è 3 quando viene eseguito lo script, il suo valore viene moltiplicato per il valore del blocco sorgente di 5 e INT1 diventa 15.

(Esempio): AndTo

Operazione | Blocco destinazione | Blocco sorgente
[AndTo] | Impostare la variabile SINT1 sul blocco variabili. | Impostare la variabile SINT2 sul blocco variabili.
##### Blocco ##### Testo changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.AndTo, SINT1, SINT2);

→ Se SINT1 è 3 (binario: 00000011) e SINT2 è 5 (binario: 00000101), SINT1 sarà 1 (binario: 00000001) quando si verifica l'attivazione.

L'espressione logica converte il valore del blocco di destinazione e del blocco sorgente in numeri binari e calcola il prodotto logico per ogni cifra. Riportare il risultato al radicale iniziale e impostarlo sul blocco di destinazione.

(Esempio): OrTo

Operazione | Blocco destinazione | Blocco sorgente
[OrTo] | Impostare la variabile SINT1 sul blocco variabili. | Impostare la variabile SINT2 sul blocco variabili.
##### Blocco ##### Testo changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.OrTo, SINT1, SINT2);

→ Se SINT1 è 3 (binario: 00000011) e SINT2 è 5 (binario: 00000101), SINT1 sarà 7 (binario: 00000111) quando si verifica l'attivazione.

L'espressione logica converte il valore del blocco di destinazione e del blocco sorgente in numeri binari e calcola la somma logica per ogni cifra. Riportare il risultato al radicale iniziale e impostarlo sul blocco di destinazione.

(Esempio): XorTo

Operazione | Blocco destinazione | Blocco sorgente
[XorTo] | Impostare la variabile SINT1 sul blocco variabili. | Impostare la variabile SINT2 sul blocco variabili.
##### Blocco ##### Testo changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.XorTo, SINT1, SINT2);

→ Se SINT1 è 3 (binario: 00000011) e SINT2 è 5 (binario: 00000101), SINT1 sarà 6 (binario: 00000110) quando si verifica l'attivazione.

L'espressione logica converte il valore del blocco di destinazione e del blocco sorgente in numeri binari e calcola la somma logica esclusiva per ogni cifra. Riportare il risultato al radicale iniziale e impostarlo sul blocco di destinazione.

(Esempio): NandTo

Operazione | Blocco destinazione | Blocco sorgente
[NandTo] | Impostare la variabile SINT1 sul blocco variabili. | Impostare la variabile SINT2 sul blocco variabili.
##### Blocco ##### Testo changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.NandTo, SINT1, SINT2);

→ Se SINT1 è 3 (binario: 00000011) e SINT2 è 5 (binario: 00000101), SINT1 sarà -2 (binario: 11111110) quando si verifica l'attivazione.

L'espressione logica converte il valore del blocco di destinazione e del blocco sorgente in numeri binari e calcola il prodotto logico negativo per ogni cifra. Riportare il risultato al radicale iniziale e impostarlo sul blocco di destinazione.

(Esempio): NorTo

Operazione | Blocco destinazione | Blocco sorgente
[NorTo] | Impostare la variabile SINT1 sul blocco variabili. | Impostare la variabile SINT2 sul blocco variabili.
##### Blocco ##### Testo changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.NorTo, SINT1, SINT2);

→ Se SINT1 è 3 (binario: 00000011) e SINT2 è 5 (binario: 00000101), SINT1 sarà -8 (binario: 11111000) quando si verifica l'attivazione.

L'espressione logica converte il valore del blocco di destinazione e del blocco sorgente in numeri binari e calcola la somma logica seguita da un invertitore per ogni cifra. Riportare il risultato al radicale iniziale e impostarlo sul blocco di destinazione.

## Cambio valore della variabile - GIORNO E ORA

Impostare il valore di giorno e ora dalla variabile sorgente nella variabile di destinazione.

Le variabili DATE, TIME_OF_DAY e DATE_AND_TIME supportano gli operatori [Set] e [AddTo].

Di seguito viene illustrato il comportamento dell’operazione quando il Blocco sorgente e il Blocco destinazione sono le variabili DATE, TIME_OF_DAY, o DATE_AND_TIME:

Operazione | Blocco sorgente | Blocco destinazione | Comportamento
[Set] | DATE | DATE | Impostazione giorno.
TIME_OF_DAY | Nessun valore impostato.
DATE_AND_TIME | Impostare solo il giorno.
TIME_OF_DAY | DATE | Nessun valore impostato.
TIME_OF_DAY | Impostare l’ora.
DATE_AND_TIME | Impostare solo l’ora.
DATE_AND_TIME | DATE | Impostare solo il giorno.
TIME_OF_DAY | Impostare solo l’ora.
DATE_AND_TIME | Impostare giorno e ora.
[AddTo] | DATE | DATE | Aggiungere il giorno.
TIME_OF_DAY | Nessun valore impostato.
DATE_AND_TIME | Aggiungere solo il giorno.
TIME_OF_DAY | DATE | Nessun valore impostato.
TIME_OF_DAY | Aggiungere l'ora.
DATE_AND_TIME | Aggiungere solo l'ora.
DATE_AND_TIME | DATE | Aggiungere solo il giorno.
TIME_OF_DAY | Aggiungere solo l'ora.
DATE_AND_TIME | Aggiungere data e ora.

(Esempio): Set

Operazione | Blocco destinazione | Blocco sorgente
[Set] | Impostare la variabile TIME_OF_DAY1 sul blocco variabili. | Selezionare [TIME_OF_DAY] e impostare 00:15:00 nel blocco Costanti.
##### Blocco ##### Testo changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, TIME_OF_DAY1, timeOfDay(00, 15, 00));

→ Quando si verifica l'attivazione, l'ora in TIME_OF_DAY1 è impostata su 00:15:00.

Nota: se il blocco sorgente è impostato su un giorno o un'ora [costante], qualsiasi valore di giorno o di ora non incluso nella costante sarà pari a zero. Ad esempio, se nella variabile DATE_AND_TIME si scrive un'ora costante, il valore del giorno sarà 0 (1970/01/01).

(Esempio): AddTo

Operazione | Blocco destinazione | Blocco sorgente
[AddTo] | Impostare la variabile DATE_AND_TIME1 sul blocco variabili. | Selezionare [TIME_OF_DAY] e impostare 00:15:00 nel blocco Costanti.
##### Blocco ##### Testo changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.AddTo, DATE_AND_TIME1, timeOfDay(00, 15, 00));

→ Se DATE_AND_TIME1 è 2024/10/01 12:34:56, quando scatta il trigger nel blocco sorgente vengono aggiunti 00:15:00 e DATE_AND_TIME1 diventa 2024/10/01 12:49:56.

## Cambio valore della variabile - BOOLEANO

Nella variabile di destinazione viene impostato un solo bit di dati.

(Esempio): Set

Operazione | Blocco destinazione | Blocco sorgente
[Set] | Impostare la variabile BOOL1 sul blocco variabili. | Selezionare [Int] e impostare 1 nel blocco Costanti.
##### Blocco ##### Testo changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, BOOL1, 1);

→ BOOL1 è impostata su ON quando si attiva il trigger.

## Cambio valore della variabile - STRINGA

Nella variabile di destinazione viene impostata una stringa.

(Esempio): Set

Operazione | Blocco destinazione | Blocco sorgente
[Set] | Impostare la variabile STRING1 sul blocco variabili. | Selezionare [STRING] e impostare "DEF" nel blocco Costanti.
##### Blocco ##### Testo changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, STRING1, "DEF");

→ STRING1 è impostata su DEF quando si attiva il trigger.

(Esempio): AddTo

Operazione | Blocco destinazione | Blocco sorgente
[AddTo] | Impostare la variabile STRING1 sul blocco variabili. | Selezionare [STRING] e impostare "DEF" nel blocco Costanti.
##### Blocco ##### Testo changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.AddTo, STRING1, "DEF");

→ Se STRING1 è "AB", quando scatta il trigger, al blocco sorgente viene aggiunto "DEF" e STRING1 diventa "ABDEF".

## Cambio valore proprietà della sorgente Oggetto

Impostare il valore nel blocco sorgente sulla proprietà della sorgente nel blocco di destinazione.

(Esempio 1)

Operazione | Blocco destinazione | Blocco sorgente
[Set] | Impostare la proprietà della sorgente oggetto Rectangle1.Thickness sul blocco Oggetto. | Selezionare [Int] e impostare 10 nel blocco Costanti.
##### Blocco ##### Testo changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, $GraphicObject.Rectangle1.Thickness, 10);

→ Lo spessore bordo del Rectangle1 diventa 10 quando scatta il trigger.

(Esempio 2)

Operazione | Blocco destinazione | Blocco sorgente
[Set] | Impostare la proprietà della sorgente oggetto Lamp1.Interlock sul blocco Oggetto. | Selezionare [Int] e impostare 0 nel blocco Costanti.
##### Blocco ##### Testo changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, $GraphicObject.Lamp1.Interlock, 0);

→ Lo stato di interblocco Lamp1 è impostato su OFF quando si attiva il trigger.

## Cambio valore proprietà della sorgente variabile

Impostare il valore nel blocco sorgente sulla proprietà della sorgente nel blocco di destinazione.

(Esempio)

Operazione | Blocco destinazione | Blocco sorgente
[Set] | Impostare la proprietà della sorgente variabile INT1.Value sul blocco Variabile. | Selezionare [Int] e impostare 1 nel blocco Costanti.
##### Blocco ##### Testo changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, INT1.Value, 1);

→ INT1.Value è impostata su 1 quando si attiva il trigger.

## Cambio valore proprietà della sorgente target

Impostare il valore nel blocco sorgente sulla proprietà della sorgente nel blocco di destinazione.

(Esempio 1)

Stabilire la data per il target.

Operazione | Blocco destinazione | Blocco sorgente
[Set] | Impostare la proprietà sorgente Target01.DateAndTime.Date al blocco Target. | Selezionare [Date] e impostare 17/10/2017 nel blocco Costanti.
##### Blocco ##### Testo changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, $Target.Target01.DateAndTime.Date, date(2017, 10, 17));

→ Quando scatta il trigger, il visualizzatore è impostato su 17/10/2017.

(Esempio 2)

Impostare giorno e ora del visualizzatore sullo stesso giorno e ora del dispositivo esterno.

(Esempio 2- 1)

Impostare giorno e ora (anno, mese, giorno, ore, minuti, secondi) del dispositivo esterno rispettivamente sulle variabili intere da INT1 a INT6.

Operazione | Blocco destinazione | Blocco sorgente
[Set] | Impostare la proprietà sorgente target sul blocco Target. Target01.DateAndTime.Year Target01.DateAndTime.Month Target01.DateAndTime.Day Target01.DateAndTime.Hour Target01.DateAndTime.Minute Target01.DateAndTime.Second | Impostare la variabile da INT1 a INT6 sul blocco Variabile.
##### Blocco ##### Testo 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); });

→ Giorno e ora del visualizzatore sono impostati su giorno e ora del dispositivo esterno alle 23:00 di ogni giorno.

(Esempio 2- 2)

Impostare giorno e ora del dispositivo esterno sulla variabile DATE_AND_TIME Var1 come numero di secondi (intero a 32 bit), a partire da 1970/01/01 00:00:00 UTC. Per la relazione tra il valore di Var1 e giorno e ora, fare riferimento a quanto segue.

TIME, DATE, TIME_OF_DAY, DATE_AND_TIME

Operazione | Blocco destinazione | Blocco sorgente
[Set] | Impostare la proprietà sorgente target Target01.DateAndTime.DateTime sul blocco Target. | Impostare la variabile Var1 sul blocco variabili.
##### Blocco ##### Testo onScheduledDay(23, 0, () => { changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, $Target.Target01.DateAndTime.DateTime, Var1.Value); });

→ Giorno e ora del visualizzatore sono impostati su giorno e ora del dispositivo esterno alle 23:00 di ogni giorno.

(Esempio 3)

Spegnere la retroilluminazione del visualizzatore.

Operazione | Blocco destinazione | Blocco sorgente
[Set] | Impostare la proprietà sorgente target Target01.Preferences.BacklightOff sul blocco Target. | Impostare la variabile BOOL1 con il valore 1 sul blocco Variabile.
##### Blocco ##### Testo changeValue($Enums.WhenOver.Loop, $Enums.AssignmentOperator.Set, $Target.Target01.Preferences.BacklightOff, BOOL1.Value);

→ Quando scatta il trigger, la retroilluminazione del visualizzatore si spegne.