05/11/2024, 22:37:27
(Modification du message : 07/12/2024, 11:53:02 par Smart Guido 73.)
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 :
- Établir une connexion USB
- 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.
Avant d'utiliser, il est nécessaire d'enregistrer la DLL signée du Falcon SDK :
1. Copiez le dossier "Falcon SDK 6 Signé" dans vos documents.
2. Ouvrez l'invite de commande (CMD) en tant qu'administrateur.
3. Allez dans le dossier C:\Windows\Microsoft.NET\Framework\v4.0.30319.
4. Enregistrez la DLL avec la commande suivante : regasm "C:\Users\Utilisateur\Documents\Falcon SDK 6 Signé\KNXlib.dll" /tlb:KNXlib.tlb /codebase
5. Ensuite, allez dans le dossier C:\Windows\Microsoft.NET\Framework64\v4.0.30319.
6. Enregistrez à nouveau la DLL avec la même commande : regasm "C:\Users\Utilisateur\Documents\Falcon SDK 6 Signé\KNXlib.dll" /tlb:KNXlib.tlb /codebase
7. Si un message d'erreur indique que l'enregistrement a été bloqué, il peut être nécessaire de désactiver la fonction "Accès protégé aux dossiers".
8. Vous pouvez vérifier l'enregistrement réussi dans le Registre :
Appuyez sur [Windows]+R et tapez regedit pour ouvrir l'éditeur de registre.
Vérifiez les chemins suivants :
Ordinateur\HKEY_CLASSES_ROOT\CLSID{E45D1244-ABCD-4E1D-8D9F-9992B7F017A2}
Ordinateur\HKEY_CLASSES_ROOT\WOW6432Node\CLSID{E45D1244-ABCD-4E1D-8D9F-9992B7F017A2}
Exemples de code :
Établir une connexion USB :
knxCon is KNXlib.KnxController
knxCon <- new KNXlib.KnxController()
knxCon.ConnectUSB()
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?f...rapper.zip
Bonne chance
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 :
- Établir une connexion USB
- 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.
Avant d'utiliser, il est nécessaire d'enregistrer la DLL signée du Falcon SDK :
1. Copiez le dossier "Falcon SDK 6 Signé" dans vos documents.
2. Ouvrez l'invite de commande (CMD) en tant qu'administrateur.
3. Allez dans le dossier C:\Windows\Microsoft.NET\Framework\v4.0.30319.
4. Enregistrez la DLL avec la commande suivante : regasm "C:\Users\Utilisateur\Documents\Falcon SDK 6 Signé\KNXlib.dll" /tlb:KNXlib.tlb /codebase
5. Ensuite, allez dans le dossier C:\Windows\Microsoft.NET\Framework64\v4.0.30319.
6. Enregistrez à nouveau la DLL avec la même commande : regasm "C:\Users\Utilisateur\Documents\Falcon SDK 6 Signé\KNXlib.dll" /tlb:KNXlib.tlb /codebase
7. Si un message d'erreur indique que l'enregistrement a été bloqué, il peut être nécessaire de désactiver la fonction "Accès protégé aux dossiers".
8. Vous pouvez vérifier l'enregistrement réussi dans le Registre :
Appuyez sur [Windows]+R et tapez regedit pour ouvrir l'éditeur de registre.
Vérifiez les chemins suivants :
Ordinateur\HKEY_CLASSES_ROOT\CLSID{E45D1244-ABCD-4E1D-8D9F-9992B7F017A2}
Ordinateur\HKEY_CLASSES_ROOT\WOW6432Node\CLSID{E45D1244-ABCD-4E1D-8D9F-9992B7F017A2}
Exemples de code :
Établir une connexion USB :
knxCon is KNXlib.KnxController
knxCon <- new KNXlib.KnxController()
knxCon.ConnectUSB()
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?f...rapper.zip
Bonne chance