Zum Hauptinhalt springen

Beispiel 11 - MIO Modul DOUTs steuern

Beispiel 11a - Alle Ausgänge schalten

Aufgabe

Die digitalen Outputs eines MIO Moduls sollen basierend auf einem Grenzwert an- oder ausgeschaltet werden.

Lösung

Mathemodul Code

// 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;

Fmconsumer Konfiguration

{
"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"
}

Verwendete Funktionen

Erläuterung

Mithilfe der Threshold-Funktion vergleichen wir das Messsignal "CAN_Value" mit dem vorher definierten Grenzwert. Falls dieser Grenzwert überschritten wird, schreiben wir die Zahl 7 in den Output-Kanal "mio_set_do". Falls der Grenzwert nicht überschritten wurde, schreiben wir eine 0 in den Kanal.
Der Kanal "mio_set_do" wird dann mithilfe des FMConsumer Moduls via CAN-Bus an das MIO Modul gesendet.

Das MIO Modul interpretiert die Zahl in der CAN-Nachricht anhand ihrer binären Repräsentation. Ist z.B. das erste Bit der Zahl gesetzt, wird Output 1 aktiviert - genauso mit dem zweiten und dritten Bit und Outputs 2 und 3. Dadurch bildet sich folgende Wahrheitstabelle:

DezimalzahlOutput 1Output 2Output 3
0Aus (0)Aus (0)Aus (0)
1An (1)Aus (0)Aus (0)
2Aus (0)An (1)Aus (0)
3An (1)An (1)Aus (0)
4Aus (0)Aus (0)An (1)
5An (1)Aus (0)An (1)
6Aus (0)An (1)An (1)
7An (1)An (1)An (1)

Beispiel 11b - Einzelne Ausgänge schalten

Aufgabe

Steuere die drei DOUTs eines MIO Moduls anhand von drei Grenzwerten.

Lösung

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;

Verwendete Funktionen

Erläuterung

Mithilfe der oben beschriebenen Wahrheitstabelle können wir sehen, dass die drei Outputs jeweils mit einem Wert von 1, 2 und 4 aktiviert werden. Wollen wir nun programmatisch eine Kombination der drei Outputs aktivieren, brauchen wir einfach nur diese drei Zahlen zueinander zu addieren.
Um zu bestimmen welche Zahlen wir zu unserem Ergebnis hinzufügen wollen, multiplizieren wir jede Zahl mit ihrem zugehörigen Threshold Ergebnis. War das Ergebnis des Thresholds "False", so wird die Zahl mit 0 multipliziert und aus der Addition entfernt. War das Ergebnis des Thresholds jedoch "True", so wird die Zahl mit 1 multipliziert und bleibt dementsprechend in der Addition.