Hello tout le monde,
J'ai finalement fait l'acquisition d'un ABA S/1.2.1 pour la logique dans mon installation (j'utilisais auparavant un Miniserveur Loxone, plus de détail dans le sujet à propos de mon installation
ici) et le module est vraiment sympa et pointu par certains aspects, mais il manque à mon sens des fonctions avancées comparé au Loxone.
Heureusement grâce à la création de ses propres blocs fonctions on peut essayer de recréer certaines fonctions sois même. Du coup je me suis dit que ce serait intéressant de faire un sujet unique pour partager nos blocs fonctions qui pourraient être ré-utilisés par d'autres (donc des choses génériques transposables dans différents projets).
Dans les posts suivants, quelques blocs que j'utilise dans mon projet (il y a peut être encore moyen de les améliorer)
N'hésitez pas à poster les vôtres !
Temporisation au basculement vers ON (ou OFF)
Le but est de temporiser le basculement de OFF (0) vers ON (1). Idem de ON vers OFF avec l'autre bloc ci-dessous.
Exemple (temporisation vers OFF) :
On active le mode été si la demande de chauffage a été nulle (OFF) pendant 5 jours consécutifs, mais se désactive immédiatement si le chauffage se remet en route (ON)
Fonctionnement (temporisation vers OFF) :
1) Le premier ON ou OFF reçu à l'initialisation ne subit pas de temporisation et va directement à la sortie.
2) Si la sortie est sur OFF, lorsqu'un ON est envoyé à l'entrée celui-ci est immédiatement placé à la sortie.
3) Si la sortie est sur ON, lorsqu'un OFF est envoyé à l'entrée celui-ci est retardé pendant une durée paramétrable en secondes.
4) Si un nouveau OFF est envoyé à l'entrée avant la fin du délais, celui-ci continue (pas de reset).
5) Si un ON est envoyé à l'entrée avant la fin du délais, celui-ci est interrompu et la sortie reste sur ON.
6) Si le délais arrive à son terme, alors la sortie passe sur OFF.
Schéma :
Tempo vers ON
[
attachment=1424]
PS: le filtre bloque les OFF (0)
Tempo vers OFF
[
attachment=1425]
PS: le filtre bloque les OFF (0)
Download :
[
attachment=1426]
[
attachment=1427]
Sélecteur 6 entrées
Le but du bloc est d'avoir en sortie un nombre (1 byte unsigned) qui correspond à l'entrée 1bit qui est sur True (1). Le bloc fonctionne même si certaines entrées ne sont pas connectées.
Exemple :
On désire calculer une valeur numérique pour définir le mode de fonctionnement d'une chaudière en fonction de différents paramètres.
Fonctionnement :
1) Les entrées 1bits désirées sont connectées au sélecteur. On peut connecter seulement certaines entrées et il n'est pas nécessaire de commencer par la 1ère, on peut par exemple connecter uniquement les entrées 2 et 4 (le sélecteur retournera 0, 2 ou 4).
2) Si aucune entrée n'est sur True, le sélecteur retourne 0 et la sortie d'erreur est mise sur False
3) Si une seule entrée est sur True, le sélecteur retourne le numéro sur lequel cette entrée est connectée et la sortie d'erreur est mise sur False
4) Si plusieurs entrées sont sur True en même temps, le sélecteur retourne 0 et la sortie d'erreur est mise sur True
Schéma :
[
attachment=1429]
PS: attention pour les MUX il faut cocher la case "Send Trigger"
Download :
[
attachment=1428]
Compteur d'entrées
Le but du bloc est d'avoir en sortie un nombre (1 byte unsigned) qui correspond au nombre d'entrées 1bit qui sont sur True (1). Le bloc fonctionne même si certaines entrées ne sont pas connectées.
Exemple :
On désire calculer combien de fenêtres sont ouvertes.
Fonctionnement :
1) Les entrées 1bits désirées sont connectées au sélecteur. On peut connecter seulement certaines entrées et il n'est pas nécessaire de commencer par la 1ère, on peut par exemple connecter uniquement les entrées 2 et 4 (le sélecteur retournera 0, 1 ou 2).
2) Si aucune entrée n'est sur True, le sélecteur retourne 0
3) Si une seule entrée est sur True, le sélecteur retourne 1
4) Si plusieurs entrées sont sur True en même temps, le sélecteur retourne le nombre d'entrées qui sont sur True
Schéma :
[
attachment=1430]
PS: attention pour les MUX il faut cocher la case "Send Trigger"
Download :
[
attachment=1431]
Moyenne x entrées
Le but du bloc est de calculer la moyenne des nombres en entrée. Il est facile d'adapter ce bloc à tout type de datapoints (1 byte unsigned, 2 byte float, etc.) et à un plus grand nombre d'entrées.
Exemple :
On désire calculer la moyenne de température d'une pièce qui comporte plusieurs capteurs
Fonctionnement :
1) Adapter les entrées et la sortie du bloc fonction au type de datapoint souhaité (2 byte float pour une température dans l'exemple)
2) Ajouter plus d'entrées si nécessaire, il suffit de modifier la constante par le nombre d'entrées, de copier/coller le N-CONV et le DIV pour chaque nouvelle entrée, et d'ajouter au bloc ADD le résultat des nouveaux blocs DIV.
3) Créer le nouveau bloc fonction après ces modifications, et connecter simplement les valeurs aux entrées pour avoir la moyenne en sortie.
4) Attention chaque entrée doit être utilisée sans quoi la moyenne ne sera pas correcte.
Schéma :
[
attachment=1432]
PS: la conversion des entrées en 4 byte float avant les calculs est pour garder le résultat dans la limite des valeurs du datapoint, sinon le ABB retourne 0 (pas vraiment le cas avec les t°, mais avec des 1 byte 0-255 par exemples ça arrive).
Download :
[
attachment=1433]
CALENDAR_S avec heures du jour au lendemain
Le bloc permet de mettre la sortie à ON le soir et à OFF le lendemain (l'objet CALENDAR_S initial fonctionne la journée avec une heure de mise à OFF de la sortie située obligatoirement après l'heure de mise à ON).
Exemple : on active une sortie à 22 h le jour j et on la désactive à 6 h le jour j+1.
Fonctionnement :
1) Ajouter deux entrées de type "heure" (format 24 bits) avec l'heure de début qui doit être supérieure à l'heure de fin.
2) Ajouter une sortie de type 1 bit
Note : Le bloc ne fonctionne pas en simulation et ne met pas à jour les états des entrées et de la sortie en mode moniteur; j'ai remonté ce bug chez ABB ; ils ont pu le reproduire mais sans le corriger pour l'instant !
Schéma :
[
attachment=1435]
Download
[
attachment=1436]
Clignotant 3s
Le bloc génère une sortie clignotante lorsque l'entrée est active.
Exemple :
Piloter la LED d'état d'un bouton.
Fonctionnement :
1) Ajouter une entrée de validation de type 1 bit
2) Ajouter une sortie de type 1 bit
3) L'alternance est de de 3 secondes. Il est possible de changer la valeur dans les objets STAIRC LIGHT (il faut cocher la case "Réinitialiser")
Schéma :
[
attachment=1437]
Download :
[
attachment=1438]
Sortie incrémentée de 1 chaque minute
Le bloc génère une sortie dont la valeur s'incrémente de 1 chaque minute lorsque l'entrée est active.
Exemple :
Afficher le temps d’exécution en cours d'une procédure.
Fonctionnement :
1) Ajouter une entrée de validation de type 1 bit
2) Ajouter une sortie de type 4 octets signés (32 bits)
Schéma :
[
attachment=1439]
Download :
[
attachment=1440]
Gestion auto & semi-auto du chauffage & climatisation
Permet de gerer la climatisation & chauffage
Fonctionnement :
alors, j'ai une température de référence : (perso c'est ma moyenne des capteurs des pièces à vivre)
Ensuite, je dit dans quel mode est l'appareil (chauffage/clim...)
Puis, j'ai rajouté un ON/OFF maitre par exemple, j'ai une fenetre ouverte, je veux desactiver l'auto (souvent en été, l'auto n'est jamais actif la journée on met en service à la demande)
La présence au milieu des lumières si on > 1 permet de passer en mode confort (par exemple, si personne dans la journée, je rentre, une lumière s'allume, = mode confort
Schéma :
[
attachment=1787]
Bon, ce schema est loin d'être parfait, mais il peut donner des idées à certains. il ne prend pas encore en compte le fait de chauffer si inferieur à 18 dans la maison par exemple
il est là pour montrer "la logique" par exemple au niveau de la gestion marche/arret via les températures
(09/09/2020, 18:53:02)kalhimeo a écrit : [ -> ]Temporisation au basculement vers ON (ou OFF)
J'essaie de reproduire le bloc fonction vers On, mais je n'arrive pas à joindre le i du FILTER vers le Tr du DELAY. Le delay est bien un stairc light???
(04/02/2022, 13:00:31)richardpub a écrit : [ -> ]J'essaie de reproduire le bloc fonction vers On, mais je n'arrive pas à joindre le i du FILTER vers le Tr du DELAY. Le delay est bien un stairc light???
Le i du filter ne va pas au Tr du delay, c'est "l'entrée" qui va vers ces 2 points. Pour te faciliter la tâche, télécharges et importes directement le bloc ;-)
C'est ce que j'ai fait mais j'aime bien comprendre et je n'arrivais pas à mettre mon pauvre temps de latence directement en seconde dans le FB. Je dois y arriver avec tes explications.
C'est bon comme cela. En fait je cherche à comprendre le fonctionnement des RS-FF qui ne sont pas évident pour moi et c'est plus facile en comprenant un FB fonctionnel comme le tien.
Bonjour à tous, est ce que quelqu'un aurait un exemple à partager sur la limitation de variation et la gestion de mode jour/nuit ou present/absent/vacance ? merci, je crois avoir réussi à faire ce que je veux avec la limite de variation, la simulation fonctionne comme je veux, mais à voir en réel ^^
un télérupteur
+ minuterie si la sortie n'a pas été déjà coupée par le télérupteur
+ remise a 0 externe optionnelle (j'avais pensé à l'utilisation d'un détecteur de présence qui coupe la sortie après un temps donné sans détection
[
attachment=2122]
[
attachment=2121]
(10/09/2020, 17:24:15)Ives a écrit : [ -> ]Clignotant 3s
Le bloc génère une sortie clignotante lorsque l'entrée est active.
Exemple :
Piloter la LED d'état d'un bouton.
Fonctionnement :
1) Ajouter une entrée de validation de type 1 bit
2) Ajouter une sortie de type 1 bit
3) L'alternance est de de 3 secondes. Il est possible de changer la valeur dans les objets STAIRC LIGHT (il faut cocher la case "Réinitialiser")
Une petite précision: quand tu dis que pour changer "l
'alternance qui est de de 3 secondes. Il est possible de changer la valeur dans les objets STAIRC LIGHT (il faut cocher la case "Réinitialiser")"
Il faut bien refaire tout le bloc de fonction?? Il n'y a pas moyen dans le FB de changer cette durée??
Ce serait pratique.
Si pas d'autres moyens, j'ai ouvert le FB, puis copier sont .xml, et coller d'un nouveau fichier de Visual Studio Code, et sauvegarder sous un nom différent ce fichier .xml.
ensuite on fait un import de ce fichier dans l'ABB, et il se crée un nouveau onglet avec la FB décomposée et la possibilité de tout modifier.
Oui il est en pièce jointe mais il faut renommer l'extension pdf en xml
bonne découverte,
C'est plus simple que de recréer lma fonction!!!
Merci encore
bonjour,
j'aime bien ce sujet, et comme j'ai un truc en tête je viens vous l'exposer, mais je vais le travailler aussi: commande de 2 circulateurs
a disposition: une commande de marche venant de la régulation (0/1), les entrées d'un commutateur (automatique, arrêt, forçage C1, forçage C2)
les plus en automatique, sinon ça n'a pas d'intérêt : alterner automatiquement C1 et C2 en fonction d'un temps de marche, et prendre en compte l'état de C1 et de C2 (marche ou défaut) pour changer de circulateur si celui commandé ne fonctionne pas
au travail...
Hello à tous, est ce que quelqu'un aurait déjà écrit une fonction pour gérer l'ouverture/fermeture d'une porte de garage qui fonctionne par impulsion avant que je m'y mette ?
Je pensais partir sur :
1 entrée 1bit comme un volet, 0=Ouverture/1=Fermeture
2 entrées 1bit représentant l'état des capteurs: 1 capteur pour la position fermé et 1 capteur pour la position ouvert
1 entrée 4byte signed qui serait le temps maximum que met la porte à s'ouvrir, de facon à vérifier après l'impulsion si on est dans la position voulue
1 sortie 1bit pour envoyer l'implusion.
Tous commentaire est le bienvenue.
(10/05/2023, 10:44:33)flop a écrit : [ -> ]Hello à tous, est ce que quelqu'un aurait déjà écrit une fonction pour gérer l'ouverture/fermeture d'une porte de garage qui fonctionne par impulsion avant que je m'y mette ?
Bon par encore réussi ^^ si qq a des pistes, ca doit être fréquent pourtant des portails qui fonctionnent qu'avec de l'impulsionel
Tu te prends peu etre la tete pour rien.
Tu le gere simplement avec 2 GA , une pour la dmd d'ouverture et l'autre pour la fermeture.
L'impulsion c'est ton actionneur qui doit la générer, pas ta fonction, ne pas oublier que le KNX c'est de l'évènementiel.
@filou, c'est que j'aimerai pouvoir envoyer un ordre de fermeture, le soir en allant me coucher ou quand je pars et dans ce cas si le portail est fermé il va s'ouvrir, si il est entrebâillé il va ce fermé ou s'ouvrir, je vois pas comment faire autrement et ce que va changer le fait d'utiliser 2ga ? mais preneur d'une explication que je n'ai pas :-)
@flop
Tu sembles disposer des informations "portail ouvert", "portail fermé" (et par conséquence "portail entrouvert"). J'utiliserais une bascule RS pour mémoriser l'état "fermé" du portail et, le soir, si la bascule est à 0 j'enverrais une impulsion pour le fermer et rien dans le cas contraire.