Conteggio degli impulsi con wb-rules
Conteggio degli impulsi su un ingresso digitale
Un contatore o un pulsante con uscita a contatto pulito viene collegato all’ingresso universale A1 del controllore. La regola conta quante volte A1 viene collegato a massa e visualizza il risultato in un dispositivo virtuale. Il dispositivo comprende anche un pulsante di azzeramento del contatore.
Il WB-MCM8 offre la stessa funzione di conteggio degli impulsi, con valori memorizzati nella propria memoria non volatile. Il produttore lo consiglia per le installazioni reali; l’esempio seguente ha scopo dimostrativo e didattico.
In un’installazione reale, considerare la frequenza delle scritture su PersistentStorage. Queste scritture raggiungono la memoria eMMC del controllore e salvare a ogni impulso con frequenze elevate può accelerarne l’usura.
Regola di esempio
La regola ripristina il conteggio salvato all’avvio, conta solo i fronti di salita (0 → 1) e salva sia gli incrementi sia gli azzeramenti.
defineVirtualDevice("pulse_counter", {
title: "Pulse counter",
cells: {
impulses: {
type: "value",
value: 0
},
reset: {
type: "pushbutton"
}
}
});
var ps = new PersistentStorage("pulse-counter-storage", { global: true });
var inputChannel = "wb-gpio/A1_IN";
var impulseCount = (ps["impulseCount"] === undefined) ? 0 : ps["impulseCount"];
dev["pulse_counter"]["impulses"] = impulseCount;
defineRule("count_impulses", {
whenChanged: inputChannel,
then: function (newValue) {
if (newValue) {
impulseCount += 1;
dev["pulse_counter"]["impulses"] = impulseCount;
ps["impulseCount"] = impulseCount;
}
}
});
defineRule("reset_counter", {
whenChanged: "pulse_counter/reset",
then: function () {
impulseCount = 0;
dev["pulse_counter"]["impulses"] = impulseCount;
ps["impulseCount"] = impulseCount;
}
});
Per WBE2-DI-DR-3, sostituire il canale di ingresso A1 con il canale necessario della relativa tabella dei canali MQTT, ad esempio wb-gpio/MOD1_IN1.
