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 decimale | Uscita 1 | Uscita 2 | Uscita 3 |
|---|---|---|---|
| 0 | Off (0) | Off (0) | Off (0) |
| 1 | On (1) | Off (0) | Off (0) |
| 2 | Off (0) | On (1) | Off (0) |
| 3 | On (1) | On (1) | Off (0) |
| 4 | Off (0) | Off (0) | On (1) |
| 5 | On (1) | Off (0) | On (1) |
| 6 | Off (0) | On (1) | On (1) |
| 7 | On (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.