PureBasic

Forums PureBasic
Nous sommes le Mer 19/Juin/2013 14:55

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 30 messages ]  Aller à la page 1, 2  Suivante
Auteur Message
 Sujet du message: Programmation PureBasic et domotique Velbus
MessagePosté: Jeu 23/Juil/2009 10:01 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 25/Aoû/2004 15:14
Messages: 376
Localisation: Grenoble
Bonjour à tous,

je pense m'essayer à la domotique et j'ai choisi la marque Velbus (le fabricant est Velleman, pour ceux qui sont adeptes du fer à souder et des kits électroniques).

En gros, les modules sont plus ou moins autonomes mais ne savent pas gérer les conditions (et parfois même les états si plusieurs boutons contrôlent le même module (lampe)).

Avec un PC, Velbus founit une DLL d'analyse et de contrôle de trame du bus... alors à tout hasard : est-ce que quelqu'un du forum PureBasic aurait déjà joué avec ?

Les modules : http://www.velbus.eu/professionals/pricelist/
Le forum Velbus : http://forum.velleman.be/viewforum.php?f=13
Librairie .net (2.0) : http://forum.velleman.be/viewtopic.php?f=13&t=383

_________________
Purebasic 5.00 full sous Windows XP (x86) et Win7 (64 bits), parfois Linux. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Jeu 23/Juil/2009 10:39 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2656
Localisation: France > Basse-Normandie > Prés de Caen
Tu auras plus de chance de faire ou d'avoir un wrapper si la dll est utilisable en C. .net étant une plate forme spéciale.

_________________
Moebius : Doc FR / EN - Moebius 1.0


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Jeu 23/Juil/2009 11:07 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 25/Aoû/2004 15:14
Messages: 376
Localisation: Grenoble
C'est quoi un "wrapper" ?

_________________
Purebasic 5.00 full sous Windows XP (x86) et Win7 (64 bits), parfois Linux. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Jeu 23/Juil/2009 12:05 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2656
Localisation: France > Basse-Normandie > Prés de Caen
Un wrapper est un fichier d'include PureBasic permettant d'appeler facilement une DLL.

_________________
Moebius : Doc FR / EN - Moebius 1.0


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Jeu 23/Juil/2009 16:53 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 25/Aoû/2004 15:14
Messages: 376
Localisation: Grenoble
D'accord... ça ressemble à quoi ? as-tu un exemple d'une DLL et du fichier include associé pour que je puisse créer celui de la DLL Velbus ?
Est-ce compliqué ?
Merci.

Edit: j'ai également essayé une recherche sur le forum avec le mot "wrapper" mais je ne peux pas dire que cela m'ait bien aidé... :?

_________________
Purebasic 5.00 full sous Windows XP (x86) et Win7 (64 bits), parfois Linux. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Jeu 23/Juil/2009 19:09 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2656
Localisation: France > Basse-Normandie > Prés de Caen
Golfy a écrit:
D'accord... ça ressemble à quoi ? as-tu un exemple d'une DLL et du fichier include associé pour que je puisse créer celui de la DLL Velbus ?
Est-ce compliqué ?
Merci.

Edit: j'ai également essayé une recherche sur le forum avec le mot "wrapper" mais je ne peux pas dire que cela m'ait bien aidé... :?


Bien sur, regarde sur ce site pour voir à quoi ca ressemble : http://code.google.com/p/rwrappers/ pas mal de wrappers de ma création (pour la plupart)

As tu un header (.h) en C pour préparer l'import de la DLL ?
Compliqué, non, mais mieux vaut avoir un niveau avancé de PureBasic...

_________________
Moebius : Doc FR / EN - Moebius 1.0


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Dim 02/Aoû/2009 9:24 
Hors ligne

Inscription: Dim 17/Avr/2005 22:11
Messages: 12
Bonjour,

Le choix de Velleman pour choix du matériel semble avoir été murement réfléchi, néanmoins, dans le même ordre d'idées, Fred a partagé un code pour les modules X10 :

http://forums.purebasic.com/english/viewtopic.php?t=10575

Bon courage !

Cordialement.


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Lun 03/Aoû/2009 15:41 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 25/Aoû/2004 15:14
Messages: 376
Localisation: Grenoble
Un code en Visual Basic donne ceci :



Code:
Private Sub VelbusSerialBus_PacketReceived(ByVal source As System.Object, ByVal args As Velleman.Velbus.BusPacketIoEventArgs) Handles VelbusSerialBus.PacketReceived
        Dim IncommingData As String

        IncommingData = "Start = " & (Hex(args.Packet.STX) + Chr(13))
        IncommingData = IncommingData & "Address = " & (Hex(args.Packet.Address) & Chr(13))
        IncommingData = IncommingData & "Priority = " & (Hex(args.Packet.Priority) & Chr(13))
        IncommingData = IncommingData & "RTR = " & (args.Packet.Rtr) & Chr(13)
        IncommingData = IncommingData & "Size = " & (args.Packet.Size) & Chr(13)
        IncommingData = IncommingData & "Cmd = " & (args.Packet.Command) & Chr(13)
        IncommingData = IncommingData & "ETX = " & (Hex(args.Packet.ETX) & Chr(13))

        IncommingData = IncommingData & "Has Cmd = " & (args.Packet.HasCommand)

        MsgBox(IncommingData) 'show me the packet

End Sub


Qu'est-ce que cela peut donner en PureBasic ?
Dois-je utiliser l'instruction OpenLibrary(0, "xxxxx.dll") ?

_________________
Purebasic 5.00 full sous Windows XP (x86) et Win7 (64 bits), parfois Linux. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Lun 03/Aoû/2009 15:49 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 25/Aoû/2004 15:14
Messages: 376
Localisation: Grenoble
delta69 a écrit:
Bonjour,

Le choix de Velleman pour choix du matériel semble avoir été murement réfléchi, néanmoins, dans le même ordre d'idées, Fred a partagé un code pour les modules X10 :

http://forums.purebasic.com/english/viewtopic.php?t=10575

Bon courage !

Cordialement.

Merci Delta69,
si je peux faire un travail similaire, je le ferais partager à l'ensemble de la communauté (Purebasic pour les sources et tous les autres pour les EXE) 8) ... mais il faut encore que je m'améliore sur la programmation en PureBasic :oops: :( :( :(

Pour Velbus, ils n'ont pas encore beaucoup de modules mais c'est une norme filaire (bus) qui semble un peu plus robuste que la norme X10 (plutôt américaine)... qui semble atteindre ses limites (je crois qu'il doit y avoir une évolution de protocole en cours).
Ceci étant, Velbus permet d'émettre un ordre (gestion de priorité sur le bus) et d'avoir un retour de l'actionneur (ex: action en cours, etc.)

_________________
Purebasic 5.00 full sous Windows XP (x86) et Win7 (64 bits), parfois Linux. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mer 02/Sep/2009 14:46 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 25/Aoû/2004 15:14
Messages: 376
Localisation: Grenoble
Golfy a écrit:
Un code en Visual Basic donne ceci :



Code:
Private Sub VelbusSerialBus_PacketReceived(ByVal source As System.Object, ByVal args As Velleman.Velbus.BusPacketIoEventArgs) Handles VelbusSerialBus.PacketReceived
        Dim IncommingData As String

        IncommingData = "Start = " & (Hex(args.Packet.STX) + Chr(13))
        IncommingData = IncommingData & "Address = " & (Hex(args.Packet.Address) & Chr(13))
        IncommingData = IncommingData & "Priority = " & (Hex(args.Packet.Priority) & Chr(13))
        IncommingData = IncommingData & "RTR = " & (args.Packet.Rtr) & Chr(13)
        IncommingData = IncommingData & "Size = " & (args.Packet.Size) & Chr(13)
        IncommingData = IncommingData & "Cmd = " & (args.Packet.Command) & Chr(13)
        IncommingData = IncommingData & "ETX = " & (Hex(args.Packet.ETX) & Chr(13))

        IncommingData = IncommingData & "Has Cmd = " & (args.Packet.HasCommand)

        MsgBox(IncommingData) 'show me the packet

End Sub


Qu'est-ce que cela peut donner en PureBasic ?
Dois-je utiliser l'instruction OpenLibrary(0, "xxxxx.dll") ?

Help ? ! ? :roll:

_________________
Purebasic 5.00 full sous Windows XP (x86) et Win7 (64 bits), parfois Linux. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Ven 04/Sep/2009 21:01 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 25/Aoû/2004 15:14
Messages: 376
Localisation: Grenoble
J'ai également un exemple en .NET
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Velleman.Velbus;

namespace DemoAsync
{
    public partial class MainForm : Form
    {
        /* Create a new SerialBus instance */
        private SerialBus m_Bus = new SerialBus();

        public MainForm()
        {
            InitializeComponent();

            m_Bus.PacketReceived += new BusPacketIoEventHandler(PacketReceived);
            m_Bus.PacketSent += new BusPacketIoEventHandler(PacketSent);
        }

        private void btnConnect_Click(object sender, EventArgs e)
        {
            /* Connect to the specified port */
            m_Bus.PortName = cbPort.Text;
            m_Bus.Open();
        }

        private void btnDisconnect_Click(object sender, EventArgs e)
        {
            /* Close the port */
            m_Bus.Close();
        }

        private void btnScan_Click(object sender, EventArgs e)
        {
            /* Send out module type request to each possible address. These
             * packets are useful for scanning purposes, since modules will react
             * to them. */

            Packet packet = new Packet();         // no databytes, default address
            packet.Priority = PacketPriority.Low; // low priority
            packet.Rtr = true;                    // rtr must be enabled

            for (int i = 0x02; i <= 0xFF; i++)
            {
                // loop over all possible addresses
                // and send out our scan packet
                packet.Address = (byte)i;
                m_Bus.Send(packet);
            }
        }

        private void WriteLog(string msg)
        {
            /* Since the input/output operations for asynchronous IO occur on
             * a secundary thread, we need to synchronize it with our GUI thread.
             * This is the same method as if you would use the SerialPort component */

            if (lstLog.InvokeRequired)
                lstLog.BeginInvoke(new MethodInvoker(delegate() { WriteLog(msg); }));
            else
                lstLog.Items.Add(msg);
        }

        private void PacketReceived(object source, BusPacketIoEventArgs args)
        {
            // Log read operation
            WriteLog(String.Format("Packet received from address {0}", args.Packet.Address));
        }

        public void PacketSent(object source, BusPacketIoEventArgs args)
        {
            // Log write operation
            WriteLog(String.Format("Packet sent to address {0}", args.Packet.Address));
        }

        private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
        {
            m_Bus.Close(); // Be sure to clean up
        }
    }
}


Mais... :oops: je ne sais toujours pas comment transformer cela pour en faire une librairie en Purebasic.

_________________
Purebasic 5.00 full sous Windows XP (x86) et Win7 (64 bits), parfois Linux. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Sam 05/Sep/2009 13:50 
Hors ligne

Inscription: Jeu 26/Fév/2004 15:36
Messages: 1191
Localisation: France
Salut,
.Net est assez particulier, une solution serait de créer un Activex (tuto ici), le wrapper rendra publique les fonctions dont tu as besoin (et que tu auras créé pour l'occasion), c'est ça, un wrapper.
A utiliser avec Comate pour que ça fonctionne facilement avec PureBasic.

_________________
"Qui baise trop bouffe un poil." P. Desproges


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Lun 07/Sep/2009 22:53 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 25/Aoû/2004 15:14
Messages: 376
Localisation: Grenoble
KarLKoX a écrit:
Salut,
.Net est assez particulier, une solution serait de créer un Activex (tuto ici), le wrapper rendra publique les fonctions dont tu as besoin (et que tu auras créé pour l'occasion), c'est ça, un wrapper.
A utiliser avec Comate pour que ça fonctionne facilement avec PureBasic.

C'est de plus en plus du chinois (désolé pour KCC :lol: ) : wrapper :?: comate :?: purebasic :?: Nan ! le dernier c'est un blague.

Bon j'ai essayé ça :
Code:
Enumeration
   #Bibliotheque
EndEnumeration
NomFichier$ = "D:\telechargement\Domotique\Velbus\VelbusLib\Velbus\bin\Release\Velleman.Velbus.dll"

IncludeFile "Common.pb"
Resultat = OpenLibrary(#Bibliotheque, NomFichier$)
Debug Resultat
Resultat = OpenLibrary(#Bibliotheque, NomFichier$)
Debug Resultat  --> OK
Debug IsLibrary(#Bibliotheque)  --> OK
Debug CountLibraryFunctions(#Bibliotheque)  --> 0 (!)
Debug ExamineLibraryFunctions(#Bibliotheque)  --> -1 (!)
Debug GetFunction(#Bibliotheque, "Velleman.Velbus.bus.SendBlocking")  --> 0 (!)
Debug GetFunction(#Bibliotheque, "bus.SendBlocking")  --> 0 (!)


Comme le montre les dernières lignes, c'est pas gagné :roll:
Pourquoi ça marche pas ??? :(

_________________
Purebasic 5.00 full sous Windows XP (x86) et Win7 (64 bits), parfois Linux. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/


Haut
 Profil  
 
 Sujet du message: Re: Programmation PuraBasic et domotique Velbus
MessagePosté: Jeu 10/Sep/2009 22:28 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 25/Aoû/2004 15:14
Messages: 376
Localisation: Grenoble
Ca y est, j'ai enfin pu lire des valeurs (sans passer la DLL .NET) :P 8) :wink:
J'utilise la fonction OpenSerialPort et comme elle n'est pas très décrite dans le forum, je place mon code (très crade, désolé :oops: ) sur ce topic
A noter : j'utilise PureBasic 4.40 beta pour le timer windows (AddWindowTimer) car sinon, il faut bouger la souris pour que la lecture du port soit faite 8O

Code:
; PureBasic Visual Designer v3.95 build 1485 (PB4Code)
Enumeration
   #CanalCOM
   #Timer1
EndEnumeration

Global *Buffer = AllocateMemory(30000)
IncludeFile "Common.pb"

;ConnexionID = OpenNetworkConnection("127.0.0.1", 3788)
;Debug ConnexionID

Procedure.s Hexa2(string$,longueur)
   Debug "Longueur Trame (proc Hexa2): "+ Str(longueur) + "  ["+PeekS(*Buffer)+"]"
   r$ = ""
   For t = 0 To longueur
     a$ = Trim(Hex(PeekB(*Buffer+t) & 255))+" "
     If Len(a$) = 2
        a$ = "0"+ a$
     EndIf
      r$ = r$ + a$
   Next t
   r$ = r$ + Chr(13)+Chr(10)
   ProcedureReturn r$
EndProcedure
Procedure LecturePort()
    Resultat = AvailableSerialPortInput(#CanalCOM)
    If Resultat
       Debug "Il a des octets à lire : "+Str(Resultat)
       longueur = ReadSerialPortData(#CanalCOM, *Buffer, Resultat)
       Debug "["+PeekS(*Buffer)+"] --> " + Str(longueur)
       Commande$ = Hexa2(PeekS(*Buffer), longueur)
       
       SetGadgetText(#Editor_0, GetGadgetText(#Editor_0)+Commande$)
       Debug Commande$
    EndIf
EndProcedure


If OpenSerialPort(#CanalCOM, "COM9", 9600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
   Open_Window_0()
   If IsWindow(#WIndow_0) = 0
      CloseSerialPort(#CanalCOM)
      End
   EndIf
   AddWindowTimer(#Window_0, #Timer1, 50)
  Repeat
    EventID = WaitWindowEvent()
       
       ;Resultat = ReceiveNetworkData(ConnexionID, *buffer, 20)
         ;Debug "data"
       ;SetGadgetText(#Editor_0, Hexa2(PeekS(*Buffer)))

    If EventID = #PB_Event_Timer
      If EventTimer() = #Timer1
         LecturePort()
         EndIf
      EndIf
               
    If EventID = #PB_Event_Gadget

      Select EventGadget()
        Case 0
           Debug "Hello"
           ; Resultat = CallFunction(#Bibliotheque, NomFonction$ [,Parametre1 [, Parametre2...]])

      EndSelect

    EndIf
  Until EventID = #PB_Event_CloseWindow
  CloseSerialPort(#CanalCOM)
Else
   MessageRequester("Erreur","Le port série n'a pas été initialisé",0)
EndIf

;CloseNetworkConnection(ConnexionID)

_________________
Purebasic 5.00 full sous Windows XP (x86) et Win7 (64 bits), parfois Linux. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/


Haut
 Profil  
 
 Sujet du message: Re: Programmation PuraBasic et domotique Velbus
MessagePosté: Ven 11/Sep/2009 7:42 
Hors ligne

Inscription: Ven 15/Mai/2009 19:57
Messages: 54
rajoute 20 à WaitWindowEvent() WaitWindowEvent(20) :wink:


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 30 messages ]  Aller à la page 1, 2  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye