Wiren BoardDocumentation
Documentation · Français

Comptage d’impulsions avec wb-rules

révision 106981

Comptage d’impulsions sur une entrée numérique

Un compteur ou un bouton à sortie contact sec est raccordé à l’entrée universelle A1 du contrôleur. La règle compte le nombre de connexions de A1 à la masse et affiche le résultat dans un appareil virtuel. Cet appareil comprend également un bouton de remise à zéro du compteur.

Le WB-MCM8 fournit la même fonction de comptage d’impulsions avec les valeurs conservées dans sa propre mémoire non volatile. Le fabricant le recommande pour les installations réelles ; l’exemple ci-dessous est destiné à la démonstration et à l’apprentissage.

Dans une installation réelle, tenez compte de la fréquence des écritures dans PersistentStorage. Ces écritures atteignent le stockage eMMC du contrôleur, et une sauvegarde à chaque impulsion à fréquence élevée peut accélérer son usure.

Exemple de règle

La règle restaure le compte sauvegardé au démarrage, ne compte que les fronts montants (0 → 1) et enregistre à la fois les incréments et les remises à zéro.


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;
  }
});

Pour le WBE2-DI-DR-3, remplacez le canal d’entrée A1 par le canal souhaité dans sa table des canaux MQTT, par exemple wb-gpio/MOD1_IN1.