Fonctionnement du mode dégradé

Si pour une raison quelconque calaos-server ne peut plus communiquer avec l'automate, par exemple en cas de panne du réseau Ethernet, l'automate va passer du mode “serveur” au mode “dégradé” après un certain temps (30 s). Les points lumineux ainsi que les volets pourront continuer à être pilotés par les interrupteurs mais le mode dégradé ne peux pas gérer toutes les règles du mode serveur, seulement quelques règles simples.

La LED USR de l'automate est verte en mode serveur et orange en mode dégradé.

Les règles du mode dégradé sont automatiquement générées par le logiciel Calaos Installer lors de l'envoi de la configuration dans l'automate. Il n'y a donc pas besoin en général d'aller plus loin. Cependant, dans certains cas, il peut être intéressant de savoir qu'il est également possible de programmer ces règles avec le logiciel wago_test ou même directement en ajoutant du code dans l'automate via le port série si le port Ethernet est défectueux.

En mode dégradé, chaque entrée est associée à un <type> d'action :

NONE : aucune action, ne fait rien, valeur par défaut.

TELERUPTEUR : agit comme un télérupteur et bascule la sortie à 0 ou 1 à chaque appui.

DIRECT : met la sortie à 1 tant que l'entrée est à 1 et à 0 dès qu'on relâche.

VOLET : volet classique montée/descente.

VOLET IMPULSE : volet qui se pilote avec une impulsion au lieu d'un maintien des relais.

TELERUPTEUR DALI : pilote une lumière DALI au lieu d'une sortie relais.

TELERUPTEUR DALI GROUP : idem mais un groupe DALI.

TELERUPTEUR KNX OUTPUT : pilote une sortie KNX, seulement pour les 849.

DIRECT KNX OUTPUT : idem que DIRECT mais pour du KNX.

Ensuite chaque entrée est associée à 3 paramètres :

<out1> : adresse de sortie. Par exemple l'adresse de la lampe pour le type TELERUPTEUR, l'adresse de la montée du volet pour le type VOLET, l'adresse DALI pour le type DALI, etc.

<out2> : 2e adresse de sortie si besoin (utilisé que dans le cas des volets pour la descente)

<SameAs>: fonction spéciale expliquée plus loin.

Par exemple, on peut avoir cette série de règles :

Input 0 -> NONE
Input 0 -> out1=0 out2=0 SameAs=-1
Input 1 -> TELERUPTEUR
Input 1 -> out1=25 out2=0 SameAs=-1
Input 2 -> VOLET
Input 2 -> out1=30 out2=31 SameAs=-1
Input 3 -> TELERUPTEUR
Input 3 -> out1=0 out2=0 SameAs=1

Ici on a l'entrée 0 qui ne fait rien. L'entrée 1 pilote une lumière sur la sortie 25. L'entrée 2 pilote un volet avec la montée à l'adresse 30 et la descente à l'adresse 31. L'entrée 3 est particulière. Elle est configurée comme un télérupteur (comme l'entrée 1) mais les adresses sont à 0 et le SameAs est à 1. Cela signifie que l'entrée 3 va piloter la même lumière que l'entrée 1. En utilisant le même bloc fonction (et le même état de la lampe). Ça permet d'avoir plusieurs inter qui pilotent la même lampe/volet. Attention, il faut que le SameAs soit -1 si il n'est pas utilisé.

Calaos Installer génère donc cette mini config à partir de la config normale (et donc élimine une bonne partie de ce qui n'est pas faisable en mode dégradé) et envoie ça en UDP à l'automate.

Dans calaos-os il y a un outil qui permet de faire ça à la main : wago_test

root@intel-corei7-64:~# wago_test
Calaos Wago Utility.
Copyright (c) 2006-2017, Calaos. All Rights Reserved.
config_wago Usage:
wago_test host <ip address> action <action> [Action options]
Where action:
set_outtype: <address> <type> (type=NONE, TELERUPTEUR, DIRECT, VOLET, VOLET_IMPULSE, TELERUPTEUR_DALI, TELERUPTEUR_DALI_GROUP, TELERUPTEUR_KNX_OUTPUT, DIRECT_KNX_OUTPUT)
get_outtype: <address>
set_outaddr: <address> <out1> <out2> <SameAs>
get_outaddr: <address>
get_version
get_info
get_info_module: <module>
get_volet_positions: <var_save>
set_server_ip: <ip>
set_output: <out> <boolean>
set_knx_output: <out> <boolean>
heartbeat (send heartbeat to the PLC)
set_dali: <dali_line> <group?> <address> <value> <fade_time>
get_dali: <dali_line> <address>
dali_search_devices: <dali_line>
dali_get_device_info: <dali_line> <address>
dali_get_device_group: <dali_line> <group>
dali_device_add_group: <dali_line> <address> <group>
dali_device_del_group: <dali_line> <address> <group>
dali_central: <dali_line> <boolean> (switch on/off all DALI lamps)
dali_blink: <dali_line> <address> <group?> <blink_time>
dali_blink_stop: <dali_line>
dali_set_device_config: <dali_line> <address> <fade_rate> <fade_time> <max_level> <min_level> <system_failure_level> <power_on_level>
dali_addressing_new: <dali_line> <reset?>
dali_addressing_add: <dali_line>
dali_addressing_status: <dali_line>
dali_addressing_change: <dali_line> <old_address> <new_address>
dali_addressing_del: <dali_line> <address_to_delete>
save_config: <file>
load_config: <file>

On peut lire la configuration depuis l'automate dans un fichier :

wago_test host 192.168.0.xxx action save_config failsafe_config.txt

Le fichier contient la config :

WAGO_SET_OUTTYPE 0 0
WAGO_SET_OUTADDR 0 0 0 -1
WAGO_SET_OUTTYPE 1 1
WAGO_SET_OUTADDR 1 25 0 -1
WAGO_SET_OUTTYPE 2 3
WAGO_SET_OUTADDR 2 30 31 -1
WAGO_SET_OUTTYPE 3 1
WAGO_SET_OUTADDR 3 0 0 1

Puis renvoyer la config à l'automate :

wago_test host 192.168.0.xxx action load_config failsafe_config.txt

On peut aussi changer juste la config d'une entrée :

wago_test host 192.168.0.xxx action set_outtype 2 VOLET
wago_test host 192.168.0.xxx action set_outaddr 2 1 2 -1

Tout ça ne fonctionne que si l'automate est accessible par le réseau Ethernet. Si le port Ethernet de l'automate est défectueux mais que celui-ci est accessible via le port série, il y a moyen de programmer ces règles directement dans le code de l'automate avec CodeSys. Il faut ouvrir le code source de Config (PRG) et insérer les règles après la ligne “IF (ConfigDone = FALSE)”:

Code à insérer :

output_type[0] := NONE;
output_addr[0].ADDR1 := 0;
output_addr[0].ADDR2 := 0;
output_addr[0].SameAs := -1;
output_type[1] := TELERUPTEUR;
output_addr[1].ADDR1 := 25;
output_addr[1].ADDR2 := 0;
output_addr[1].SameAs := -1;
output_type[2] := VOLET;
output_addr[2].ADDR1 := 30;
output_addr[2].ADDR2 := 31;
output_addr[2].SameAs := -1;
output_type[3] := TELERUPTEUR;
output_addr[3].ADDR1 := 0;
output_addr[3].ADDR2 := 0;
output_addr[3].SameAs := 1;

Ensuite il faut recompiler.