Passa al contenuto principale

Esempio 11 - Controllo delle DOUT del modulo MIO

Esempio 11a - Commutazione di tutte le uscite​

Compito​

Le uscite digitali di un modulo MIO devono essere attivate o disattivate in base a un valore limite.

Soluzione​

Codice del modulo matematico​

// 0 = kein DO aktiv,
// 1 = DO1 aktiv,
// 2 = DO2 aktiv,
// 3 = DO1 und D02 aktiv,
// 4 = DO3 aktiv,
// 5 = DO1 und DO3 aktiv,
// 6 = DO2 und DO3 aktiv,
// 7 = Alle DOs aktiv,

Grenzwert = 80.0;
$"Math.Trigger_Thresh" = threshold($'CAN_Value', Grenzwert, -0.1, {delayOn: 0.5});

mio_set_do = $"Math.Trigger_Thresh" ? 7 : 0;

Configurazione di Fmconsumer​

{
"config": {
"fmd": "canbus1",
"messages": [
{
"channels": [
{
"bitLength": 16,
"bitOffset": 0,
"name": "mio_set_do"
}
],
"defaultMessage": "0000000000000000",
"messageKey": 83,
"sendIntervalMs": 1000,
"sendMode": "OnTimer"
}
]
},
"module": "fmconsumer_mio",
"factory": "fmconsumer"
}

Funzioni utilizzate​

Spiegazione​

Con la funzione Threshold confrontiamo il segnale di misura "CAN_Value" con il valore limite definito in precedenza. Se questo valore limite viene superato, scriviamo il numero 7 nel canale di uscita "mio_set_do". Se il valore limite non è stato superato, scriviamo uno 0 nel canale.
Il canale "mio_set_do" viene poi inviato al modulo MIO tramite CAN bus con l'ausilio del modulo FMConsumer.

Il modulo MIO interpreta il numero nel messaggio CAN in base alla sua rappresentazione binaria. Se ad esempio il primo bit del numero è impostato, viene attivata l'uscita 1; lo stesso vale per il secondo e il terzo bit e le uscite 2 e 3. Ne risulta la seguente tabella di verità:

Numero decimaleUscita 1Uscita 2Uscita 3
0Off (0)Off (0)Off (0)
1On (1)Off (0)Off (0)
2Off (0)On (1)Off (0)
3On (1)On (1)Off (0)
4Off (0)Off (0)On (1)
5On (1)Off (0)On (1)
6Off (0)On (1)On (1)
7On (1)On (1)On (1)

Esempio 11b - Commutazione di singole uscite​

Compito​

Controllare le tre DOUT di un modulo MIO in base a tre valori limite.

Soluzione​

Grenzwert1 = 80.0;
Grenzwert2 = 51.5;
Grenzwert3 = 42.42;

Thresh1 = threshold($'CAN_Value1', Grenzwert1, -0.1, {delayOn: 0.5});
Thresh2 = threshold($'CAN_Value2', Grenzwert2, -0.1, {delayOn: 0.5});
Thresh3 = threshold($'CAN_Value3', Grenzwert3, -0.1, {delayOn: 0.5});

mio_set_do = 1 * Thresh1 + 2 * Thresh2 + 4 * Thresh3;

Funzioni utilizzate​

Spiegazione​

Con l'aiuto della tabella di verità descritta sopra possiamo vedere che le tre uscite vengono attivate rispettivamente con un valore di 1, 2 e 4. Se vogliamo ora attivare in modo programmatico una combinazione delle tre uscite, ci basta sommare tra loro questi tre numeri.
Per determinare quali numeri aggiungere al risultato, moltiplichiamo ogni numero per il relativo risultato di Threshold. Se il risultato di Threshold era "False", il numero viene moltiplicato per 0 e rimosso dalla somma. Se invece il risultato di Threshold era "True", il numero viene moltiplicato per 1 e rimane di conseguenza nella somma.