Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
TUTO : KNX avec Windev - utilisation de la librairie Falcon.net v5
#1
Voici un tuto complet pour faire dialoguer votre BUS KNX et un projet Windev.
Pour le moment, ça fonctionne très bien avec Windev 20, par contre ça plante à l'importation des .dll en Windev 21. On verra avec la 22.

Édit : Pcsoft vient de fournir un correctif pour windev 21 qui resoud le problème d'importation de l'assemblage .net du sdk falcon.net.
Voir ce post pour le télécharger : http://www.knx-fr.com/showthread.php?tid...8#pid30288


Édit du 23/02/2017 : la dernière version de Windev 22 (version 01F220052e du 22/02/2017) permet elle aussi maintenant d'ouvrir le SDK falcon.net

1. télécharger le SDK Falcon.net v5 à partir de votre compte My KNX (dans la rubrique "téléchargement" -> onglet "Falcon") et l'installer sur votre PC.

2. Ouvrir Windev 20 et créer un nouveau projet.

3. Dans Windows, faites un copier/collé des fichiers ci-dessous entre le dossier d'installation de KNX Falcon (par défaut C:\Program Files (x86)\KNX\Falcon.net) et le dossier de votre projet Windev (ex. C:\Mes Projets\MonProjetKNX)
Knx.Bus.Common.dll
Knx.Falcon.dll
Knx.Falcon.Sdk.dll
log4net.dll
Autofac.dll
knx_interfaces.xml
knx_master.xml
ATTENTION, très important : une copie de ces fichiers devra toujours suivre votre exécutable , càd se trouver dans le même dossier que votre .exe
EDIT : Il faudra aussi installer le Package redistribuable Microsoft Visual C++ 2010 (x86) sur les PC qui doivent exécuter votre application.

Ainsi bien sûr que le .NET Framework 4.0 (ou supérieur) de Microsoft utilisé par le SDK Falcon.net.. mais qui est bien souvent installé par défaut avec Windows.



4. Cliquer sur le logo "20" tout en haut à gauche de la fenêtre de Windev -> "Menu principal" -> "Atelier" -> ".NET" -> "utiliser un assemblage .net dans ce projet".
Une fenêtre s'ouvre listant les assemblages .net connus, cliquez sur "parcourir" en bas et naviguez vers le dossier de votre projet (ex. C:\Mes Projets\MonProjetKNX) pour sélectionner Knx.Bus.Common.dll et Knx.Falcon.Sdk.dll. Validez 2 fois.

5. Si tout se passe bien, vous retrouvez dans l'explorateur de projet Windev 2 nouveaux assemblages .net Knx.Bus.Common et Knx.Falcon.Sdk
Vous pouvez maintenant les utiliser pour communiquer avec votre BUS KNX.


Voici un exemple de fenêtre qui permet d'allumer/éteindre une lampe ainsi que recevoir les télégrammes qui passent sur le bus :

Mon lien avec le bus KNX est une interface IP qui a pour adresse 192.168.0.21

1. créez dans Windev une fenêtre FEN_TestKNX

Code de déclaration globale de FEN_TestKNX :
Code :
QUAND EXCEPTION DANS

    //déclaration d'une variable globale de type BUS
    // 192.168.9.21 est l'adresse IP de ma passerelle KNX, 0x0e57 est le port de communication vers la passerelle, càd le port 3671 au format hexadécimal
    gclMonBusKNX est un Bus(new KnxIpTunnelingConnectorParameters("192.168.0.21", 0x0e57, False))
    
FAIRE
    // Message complet de l'erreur principale
    gen_MessageErreur est une chaîne = "erreur : " + ExceptionInfo(errComplet) + RC
    // Parcours des sous-erreurs (s'il y en a)
    POUR i = 1 _A_ ExceptionInfo(errNombreSousErreur)
        // Message complet de chaque sous-erreur
        gen_MessageErreur += "Sous-erreur " + i + " : " + ExceptionInfo(errMessage, i)
    FIN
    Info(gen_MessageErreur)    
FIN

2. Créez 4 boutons dans votre fenêtre
Btn_1_connecterAuBus
Btn_2_AllumerLampe
Btn_3_EteindreLampe
Btn_4_EcouterBusKNX

Code du bouton Btn_1_connecterAuBus
Code :
QUAND EXCEPTION DANS
    
    //se connecte au bus KNX à l'aide des paramètres mentionnés à l'initialisation de la fenêtre
    gclMonBusKNX.connect()
    //parfois il faut le faire 2 fois avant que ça fonctionne, comme s'il fallait "réveiller" la passerelle IP/KNX... chez moi en tout cas... (en fait c'est la même chose dans ETS 3.0f)
    
    //affiche un message furtif pour signaler qu'on est bien connecté au bus KNX
    ToastAffiche("connecté au bus KNX",toastLong,cvMilieu,chCentre)
    
FAIRE
    //en cas d'erreur à la connexion
    // Message complet de l'erreur principale
    MessageErreur est une chaîne = "erreur : " + ExceptionInfo(errComplet) + RC
    // Parcours des sous-erreurs (s'il y en a)
    POUR i = 1 _A_ ExceptionInfo(errNombreSousErreur)
        // Message complet de chaque sous-erreur
        MessageErreur += "Sous-erreur " + i + " : " + ExceptionInfo(errMessage, i)
    FIN
    Info(MessageErreur)
    
FIN

Code du bouton Btn_2_AllumerLampe
Code :
///allumer une lampe sur l'adresse de groupe 0/0/4
gclMonBusKNX.WriteValue(new GroupAddress("0/0/4"),new GroupValue(True),Priority.Low)

Code du bouton Btn_3_EteindreLampe
Code :
///éteindre une lampe sur l'adresse de groupe 0/0/4
gclMonBusKNX.WriteValue(new GroupAddress("0/0/4"),new GroupValue(False),Priority.Low)

Code du bouton Btn_4_EcouterBusKNX
Code :
//je crée une variable de type procédure
    pMaProcedure est une Procédure

    //j'ajoute la procédure TraceAdresseGroupe dans la variable pMaProcedure (sans passer de paramètre !)
    pMaProcedure += TraceAdresseGroupe  //!!! pas de parenthèse !! pas de passage de paramètre !!

    //j'affecte mon cBus:GroupValueReceived  avec ma procédure... le cBus exécutera ma procédure TraceAdresseGroupe() à chaque événement sur le bus KNX
    gclMonBusKNX.GroupValueReceived += pMaProcedure


3. Créez une procédure qui a pour nom TraceAdresseGroupe
Code :
//voici la procédure qui sera exécutée à chaque événement sur le Bus KNX
PROCEDURE TraceAdresseGroupe(clMonGroupValueEventArgs est un GroupValueEventArgs())

//affiche dans une fenêtre de trace() l'adresse de groupe qui a changé et sa valeur (ON, OFF ou autre)
Trace(clMonGroupValueEventArgs.Address.ToString() + " -> " + clMonGroupValueEventArgs.Value.ToString())

4. Enjoy Tongue
Avec windev et webdev, tout le reste c'est du gâteau !
Répondre
#2
Je sens que je vais suivre ce topic !!!!!
Préviens nous si le bug de la version 21 est corrigé car il est malheureusement impossible de commander une version 20
Le perfectionnement de soi et l'accession à sa légende personnelle passe obligatoirement par le partage de son savoir et de son expérience avec les profanes en demande d'initiation. (R. Bach)
Répondre
#3
Si tu commandes la version 22, la licence fournie est aussi valable pour toutes les anciennes versions de windev Smile
Peut-être aussi que le falcon.sdk fonctionne très bien avec d'autres anciennes versions de windev.
Répondre
#4
Et bien chapeau ! môssieur
J'avais bien essayé mais sans succès ...
Répondre
#5
Merci.. je dois dire que j'avais aussi essayé par le passé... sans succès. Puis je suis passé à KNXWeb 2.
C'est le dernier plantage de mon Raspberry PI qui m'a donné envie de trouver une alternative. Je ne maîtrise pas assez l'environnement Linux (j'oublie tout entre chaque plantage), contrairement à Windows.
Répondre
#6
ha ben il faut aussi installer le Package redistribuable Microsoft Visual C++ 2010 (x86)
sur les PC qui doivent exécuter un programme Windev avec un assemblage .net

Ainsi bien sûr que le .NET Framework 4.0 (ou supérieur) de Microsoft utilisé par le SDK Falcon.net.. mais qui est bien souvent installé par défaut avec Windows

J'ai édité le tuto du 1er message.

Une fois cela fait, ça marche très bien sur ma tablette Windows.. quel bonheur de faire tout ça en Windev Smile quand on maîtrise.
2 h pour avoir un meilleur résultat que 20 heures avec knxWeb ! (ce qui n'est pas la faute de knxweb/linux.. mais de moi bien sûr)
Répondre
#7
mil3d ... tu aurais quelques captures d'écran de ta visu ?
Le perfectionnement de soi et l'accession à sa légende personnelle passe obligatoirement par le partage de son savoir et de son expérience avec les profanes en demande d'initiation. (R. Bach)
Répondre
#8
Elle n'est bien sûr pas finie, je (re)débute mais ça ira plus vite en Windev/webdev.
quelques infos :
- il n'y presque aucun boutons actif sur la fenêtre principale, on est obligé de cliquer sur la pièce sur laquelle on veut agir, ce qui ouvre une fenêtre qui donne accès à toutes les fonctions de cette pièce (t°, interrupteurs, chauffage,..)
- idem pour les courbes d'eau, de gaz, photovoltaïque, t° : il faut cliquer à partir de cet écran pour y accéder.
- la météo n'est bien sûr pas encore encore fonctionnelle Smile et il manque des éléments ici ou là qui vont se développer au fur et à mesure des besoins
- avec Windev, j'ai enfin mon interface qui s'adapte à la résolution de mes écrans, petits ou grand, ce qui est très confortable visuellement, au niveau des manipulations et pour la création de l'interface ! Avec Webdev ce sera une autre histoire..
Je pourrais aussi mieux contrôler le "réveil" de la tablette quand je rentre dans une pièce, mais c'est à tester.

[Image: 863097VisuKNX.jpg]

Répondre
#9
Pour info, la dernière version de Windev 22 (version 01F220052e du 22/02/2017) permet elle aussi maintenant d'ouvrir le SDK falcon.net, le bug a aussi été corrigé.
Répondre
#10
Quelle est la signification de 52,7 % de gaz (idem pour l'eau). Le 100% correspond à la consommation de l'année précédente ?
Répondre
#11
J'ai une citerne d'eau de pluie et une citerne de gaz propane.. C'est le taux de remplissage des cuves
Répondre
#12
Si vous avez besoin de lire sur le bus :

MaValeur est un GroupValue(TwoBit)
  MaValeur <- gclMonBusKNX.readValue(new GroupAddress("0/0/5"),Priority.Low,0)
  Trace(MaValeur.ToString())
Répondre
#13
Merci pour ce retour d'expérience JFB.

Par contre chez moi ça fait planter mon application quand j'essaie de lire la valeur de pourcentage de ma citerne d'eau de pluie (Elser KNX SO250). Je pense que c'est une question de format du GroupValue(TwoBit), je dois encore tester d'autres possibilités de valeur.

Autre chose : pas moyen d'avoir un retour readValue() sur une adresse de groupe utilisée pour mes lampes (valeur booléenne ON/OFF). Je n'ai de réponse d'aucun module KNX qui est censé connaître cette valeur (actionneur ou interrupteur), j'ai donc un message d'erreur lors du readValue() qui dit qu'aucune réponse n'a été reçue sur le bus KNX.
Je suppose que cette fonction readValue() n'est possible en KNX que sur des modules qui sont fait pour renvoyer des valeurs à la demande.. ? comme mon Elser KNX SO250 par exemple.
Répondre
#14
Pour compléter la proposition de JFB, voici une autre syntaxe possible pour lire une valeur sur le bus KNX qui fonctionne mieux pour moi dans le cas d'une valeur venant d'une sonde Elsner KNX SO250 :


Code :
nTypeValeur est un entier
MaValeur est un GroupValue(nTypeValeur)
MaValeur <- gclMonBusKNX.readValue(new GroupAddress("1/1/0"),Priority.Low,0)
Trace(MaValeur.ToString())

En effet, la proposition de JFB MaValeur est un GroupValue(TwoBit) faisait planter mon programme avec ma sonde KNX SO250. En mettant une variable typée "entier" comme paramètre du GroupValue(), ça ne plante plus et je peux lire ma valeur reçue.


Ceci fonctionne aussi :


Code :
nTypeValeur est un entier sans signe sur 1 octet
MaValeur est un GroupValue(nTypeValeur)
MaValeur <- gclMonBusKNX.readValue(new GroupAddress("1/1/0"),Priority.Low,0)

tabValeur est un tableau d'entier sans signe sur 1 octet = MaValeur.Value
//ceci fonctionne aussi : 
//tabValeur est un tableau d'entier sans signe sur 1 octet = MaValeur.get_Value()

POUR TOUT nValeur DE tabValeur
     Trace(nValeur)
FIN
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)