DIV

Panoramica

Operatore IEC per la divisione di una variabile per un'altra:

Tipi consentiti:

  • BYTE

  • WORD

  • DWORD

  • LWORD

  • SINT

  • USINT

  • INT

  • UINT

  • DINT

  • UDINT

  • LINT

  • ULINT

  • REAL

  • LREAL

  • TIME

Le variabili TIME possono essere divise per variabili intere.

Esempio in IL

(Il risultato in Var1 è 4.)

LD     8
DIV    2
ST     Var1

Esempio in ST

var1 := 8/2;

Esempi in FBD

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.

 AVVERTIMENTO
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.

Funzioni di controllo

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:

  • CheckDivDInt

  • CheckDivLint

  • CheckDivReal

  • CheckDivLReal

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;