Les `Timer` en CRBasic

Posted on jeu. 02 décembre 2021 in Development

Cet article fait partie d’une série sur la programmation CRBasic des dataloggers Campbell Scientific. Celle-ci est le reflet de mon expérience, et n’est pas liée à la société Campbell Scientific. Il ne s’agit pas d’articles sponsorisés.

Introduction, présentation des timers

Utilisation des timers

Les timers sont utilisés dans tous les cas où on a besoin de décompter un temps entre plusieurs actions. Un exemple typique d’application est le contrôle du fonctionnement d’un appareil électronique (par exemple un modem) basé sur une durée. Ainsi, si on veut allumer un modem pendant 5 minutes, on utilisera le code suivant (à insérer dans un bloc ScanEnd Scan).

' Code pour une CR1000
SW12(1) ' Allumage du modem en envoyant un courant de 12 V sur la prise SW12
Timer(1, Min, 0) ' Démarrage du timer n°1
' Autres instructions
If Timer(1, Min, 4) >= 5 Then
    SW12(0) ' Coupure courant sur SW12, arrêt du modem
    Timer(1, Min, 3) ' On arrête et on remet à 0 le timer n°1
End If

Reprenons ce code étape par étape.

SW12(1) est l’instruction utilisée pour contrôler le port « SW12 », utilisé par la centrale pour envoyer — à la demande — du courant à une tension de 12 V. C’est typiquement le port utilisé pour alimenter un modem. D’autres ports peuvent être utilisés, mais demandent un peu de matériel supplémentaire. Cette méthode fera l’objet d’un article complémentaire plus tard. Passer 1 en paramètre à SW12 enclenche la sortie de courant sur on. Pour l’éteindre, on passe un 0 en paramètre (ce que l’on fera plus loin).

Timer(1, Min, 0) On démarre ici le timer n°1

Comprendre la numérotation des timers

Les timers en CRBasic ne sont pas des objets que l’on peut affecter à une variable. Ils sont stockés dans la mémoire de la centrale, et sont désignés par un numéro. Ce numéro est défini par le programmeur, et est passé en paramètre à la fonction Timer (premier paramètre).

Quelques spécificités sont à noter. - Il n’y a pas d’obligation d’utiliser une numérotation contigüe. Par contre, si les numéros utilisés ne se suivent pas, la centrale créera autant de timers que nécessaire pour « combler » ce vide. Ainsi, si vous créez un seul timer dans votre programme avec Timer(8, Sec, 0), la centrale vous créera un timer n°8, mais initialisera également 7 autres timers non utilisés (de 1 à 7). Attention donc dans la gestion de la mémoire.

Utiliser les timers dans un programme

La fonction Timer et ses paramètres

Les options des timers

Les numéros

Les unités

uSec, mSec, Sec, Min, Hr Note : day n’est pas available.

Les actions

0 = démarrer un timer 1 = arrêter un timer sans le réinitialiser 2 = réinitialiser le timer (arrêt, remise à zéro et redémarrage) 3 = Arret et remise à zéro du timer. On en a plus besoin pour le moment, mais on veut qu’il soit à 0. 4 = Lecture seule. On ne veut que lire la valeur du timer, sans agir dessus