Operatore IEC per la divisione di una variabile per un'altra:
Tipi consentiti:
oBYTE
oWORD
oDWORD
oLWORD
oSINT
oUSINT
oINT
oUINT
oDINT
oUDINT
oLINT
oULINT
oREAL
oLREAL
oTIME
Le variabili TIME possono essere divise per variabili intere.
(Il risultato in Var1 è 4.)
LD 8
DIV 2
ST Var1
var1 := 8/2;
1. serie di caselle DIV
2. casella DIV singola
3. casella DIV con parametri EN/ENO
Sistemi di destinazione diversi possono comportarsi in modo diverso per quanto riguarda l'errore della divisione per zero. Può verificarsi l'arresto del controller oppure l'errore può non venire rilevato.
|
FUNZIONAMENTO ANOMALO DELL'APPARECCHIATURA |
Utilizzare le funzioni di controllo descritte nel presente documento o scrivere i propri controlli per evitare la divisione per zero nel codice di programmazione. |
Il mancato rispetto di queste istruzioni può provocare morte, gravi infortuni o danni alle apparecchiature. |
NOTA: Per maggiori informazioni sulle funzioni di controllo implicito, vedere il capitolo POU per controlli impliciti.
Per verificare il valore di un divisore allo scopo di evitare la divisione per zero, è possibile utilizzare le seguenti funzioni di controllo e adattarle, se necessario:
oCheckDivDInt
oCheckDivLint
oCheckDivReal
oCheckDivLReal
Per informazioni sull'inserimento della funzione, consultare la descrizione della funzione POU per controlli impliciti .
Le funzioni di controllo vengono chiamate automaticamente prima di ogni divisione trovata nel codice applicazione.
Vedere l'esempio seguente per una implementazione della funzione CheckDivReal.
Implementazione predefinita della funzione CheckDivReal
Parte dichiarazione
// Implicitly generated code : DO NOT EDIT
FUNCTION CheckDivReal : REAL
VAR_INPUT
divisor:REAL;
END_VAR
Parte implementazione:
// Implicitly generated code : only an suggestion for implementation
IF divisor = 0 THEN
CheckDivReal:=1;
ELSE
CheckDivReal:=divisor;
END_IF;
L'operatore DIV utilizza l'uscita della funzione CheckDivReal come divisore. Nel seguente esempio, una divisione per 0 non è consentita dato che con il valore inizializzato 0 del divisore d è modificato a 1 da CheckDivReal prima che venga eseguita la divisione. Pertanto il risultato della divisione è 799.
PROGRAM PLC_PRG
VAR
erg:REAL;
v1:REAL:=799;
d:REAL;
END_VAR
erg:= v1 / d;