Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
WinDev et le SDK Falcon 6
#1
Bonjour chère communauté,

Je suis nouveau sur le forum et on m'a demandé si je pouvais aider quelqu'un avec Windev. À ce moment-là, je ne connaissais pas encore ce logiciel, alors je l'ai testé et c'est ainsi que je suis tombé sur ce forum.
J'y ai vu qu'il existait un fil de discussion concernant KNX dans Windev, mais uniquement en lien avec le Falcon SDK 5 et ses fonctionnalités limitées. Le Falcon SDK 6 n'était pas abordé.


Ainsi, j'ai démarré mon premier projet avec Windev et j'ai écrit un wrapper C# pour le Falcon SDK 6.
Ce wrapper utilise les commandes les plus courantes et permet de réaliser un grand nombre de fonctions.

Les fonctionnalités incluent par exemple :

    - Connexion IP, y compris avec des Secure Gateways
    - Envoi de valeurs dans différents DPTS (y compris DPT10, DPT11 et date sous DPT16)
    - Interrogation de valeurs au format Raw ainsi qu'au format DPT
    - Lecture des données reçues, permettant de réagir aux télégrammes entrants
    - Recherche de IP Gateways
    - Recherche de IP Secure Gateways
    - Sauvegarde des 100 derniers télégrammes
    - Chargement de la liste d'adresses de groupe depuis le DPT (export de l'ETS)

Le fichier à télécharger contient un exemple de code que j'ai écrit et testé avec la version gratuite de WinDev 28 Express. Le Falcon SDK 6 est également inclus dans le fichier.
L'exemple de code est un simple moniteur de bus qui, lorsque la liste d'adresses de groupe exportée depuis ETS est ajoutée, affiche également les types DPT (types de points de données) ainsi que les identificateurs textuels correspondants des adresses de groupe.


Exemples de code :

Connectez-vous à la passerelle IP :
knxCon is KNXlib.KnxController
knxCon <- new KNXlib.KnxController()

knxIp is string = "192.168.178.42"
knxCon.Connect(knxIp, 3671, False)


Connectez-vous à la passerelle IP sécurisée :
knxCon is KNXlib.KnxController
knxCon <- new KNXlib.KnxController()
knxIp is string = "192.168.178.42"

knxCon.ConnectSecure(knxIp, 3671, False, "1.1.243", " file.knxkeys", "password")

Envoyer DPT1 :
knxCon.WriteBool("1/0/0" , True)

Envoyer DPT9.1 :
knxCon.WriteValueToDPT(Groupaddress, value as string, DPTupper value, DPTlower value)
knxCon.WriteValueToDPT("11/7/4", "20.5", 9, 1)

A lire :
value is string  = knxCon.ReadValueAsync("11/7/4")

Envoi DPT5.1 :
knxCon.WriteValueToDPT("6/0/9", "90", 5, 1)

Envoi DPT5.4 :
knxCon.WriteValueToDPT("6/0/9", "240", 5, 4)

Lire DPT9.1 :
tempvalue is string = knxCon.ReadValue("11/7/4", 9, 1)

Envoyer la date actuelle :
knxCon.WriteDate("11/5/0")

Envoyer l'heure actuelle :
knxCon.WriteTime("11/5/1")

Envoyer la date actuelle en tant que DPT16 :
knxCon.WriteTimeAsText("11/6/1")

La routine affiche les télégrammes actuellement reçus et démarre une action pour un télégramme spécifique :
IF knxCon.receiveValue.Count > lastcountinfo THEN
    
    IF knxCon.receiveValue.Count >= 100 THEN
        knxCon.receiveValue.Clear()  
        lastcountinfo = 0
        
    ELSE
        
        FOR i = lastcountinfo TO knxCon.receiveValue.Count - 1
            x1 is string = knxCon.GetReceiveDataValueAt(i, "date")
            x2 is string = knxCon.GetReceiveDataValueAt(i, "time")
            x3 is string = knxCon.GetReceiveDataValueAt(i, "paddress")
            x4 is string = knxCon.GetReceiveDataValueAt(i, "gaddress")
            x5 is string = knxCon.GetReceiveDataValueAt(i, "prio")
            x6 is string = knxCon.GetReceiveDataValueAt(i, "issecure")
            x7 is string = knxCon.GetReceiveDataValueAt(i, "hopcount")
            x8 is string = knxCon.GetReceiveDataValueAt(i, "eventtype")
            x9 is string = knxCon.GetReceiveDataValueAt(i, "value")        
                
                IF x4 = "10/0/3" AND x9 = 0 THEN
                    STC_NoName1.Text = "Hit the value !"        
                    knxCon.WriteByte("6/0/9", 10)             
                END
                
            LIST_NoName5.Add(x1 + " - " + x2 + " - " + x3 + " - " + x4 + " - " + x5 + " - " + x6 + " - " + x7 + " - " + x8 + " - " + x9)
        END
        
        lastcountinfo = knxCon.receiveValue.Count
        
        IF LIST_NoName5.Count <> 0 THEN
            ListPosition(LIST_NoName5, LIST_NoName5.Count)
        END
    END
END

Chargement du fichier d'adresses de groupe XML :
knxCon.LoadDptList("knxdptlist.xml")


J'espère que cela vous aidera et que vous vous en sortirez jusqu'à présent. Je n'ai pu le tester que tant que la version démo me le permettait.

Lien de téléchargement :
https://www.knx-board.org/download.php?file=WinDev.zip

Bonne chance
Répondre
#2
Bonjour à tous !

Je voulais t'informer brièvement que l'outil a de nouveau été modifié. Ceux qui souhaitent utiliser la version actuelle sont priés de le télécharger à nouveau.

En outre, l'outil est facile à utiliser. Dans quelques cas, il pourrait également être possible pour les personnes intéressées de l'utiliser sous PHP, moyennant quelques efforts.


Exemple de code :

<?php

error_reporting(E_ALL);
ini_set('display_errors', 1);

try {
    $knxController = new COM("KNXlib.KnxController");

    $knxController->Connect("192.168.178.42", 3671, false);
    echo "Verbindung hergestellt !<br><br>";
    
    $knxController->WriteBool("1/0/0", true);
    
    $value = $knxController->ReadValue("4/1/3", 9, 1);
    echo "Gelesene Temperatur: " . $value . " Grad Celsius<br>";    
    
    $knxController->Disconnect();
} catch (Exception $e) {

    echo "Fehler : " . $e->getMessage();
}
?>


Bien à vous,
Guido
Répondre


Atteindre :


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