j'ai fait ça avec les pieds, et il doit *vraiment* avoir moyen d'améliorer la lecture (mais je fais planter le programme si j'essaye plus de 1 car.).
Pour info, CarteElectronic (http://www.cartelectronic.com/) propose un système qui se connecte en USB sur un PC (ils ont aussi d'autres produits en ZigBee, etc) et permet de lire 2 compteurs EDF : pratique pour lire la consommation et la production.
Le système est basé sur un composant FTDI (http://www.ftdichip.com/Support/Documen ... 00071).pdf)
Mon code est largement inspiré d'un programmeur Purebasic allemand (http://forums.purebasic.com/german/view ... hp?t=16814)
Ceci étant, il est exploitable pour aller plus loin (et voir s'afficher les données du compteur)
Code : Tout sélectionner
#FT_OK = 0
#FT_OPEN_BY_SERIAL_NUMBER = 1
#FT_OPEN_BY_DESCRIPTION = 2
#FT_OPEN_BY_LOCATION = 4
#FT_BITS_8 = 8
#FT_BITS_7 = 7
#FT_STOP_BITS_1 = 0
#FT_STOP_BITS_2 = 2
#FT_PARITY_NONE = 0
#FT_PARITY_ODD = 1
#FT_PARITY_EVEN = 2
#FT_PARITY_MARK = 3
#FT_PARITY_SPACE = 4
#FT_FLOW_NONE = $0000
#FT_FLOW_RTS_CTS = $0100
#FT_FLOW_DTR_DSR = $0200
#FT_FLOW_XON_XOFF = $0400
#FT_BAUD_9600 = 9600
#FT_BAUD_19200 = 19200
#FT_EVENT_RXCHAR = 1
#FT_EVENT_MODEM_STATUS = 2
*Bin = AllocateMemory(2048)
*Bout = AllocateMemory(2048)
Declare.s Hexa2(*B, longueur.i)
Declare.s Str2(*B,longueur.i)
Declare Lireserie()
If OpenLibrary(0, "FTD2XX.dll") ; ouverture de la DLL (mise dans répertoire local)
Debug "dll introuvable!"
; la DLL permet de trouver la fonction par son nom : ici "Interface USB --> Compteur"
If #FT_OK = CallFunction(0, "FT_OpenEx", @"Interface USB -> Compteur", #FT_OPEN_BY_DESCRIPTION , @hdev)
Debug "FT232RL trouvé"
; Si la fonction existe, on peut l'accéder par un port classique COM... le numéro est donné ci-après !
If #FT_OK = CallFunction(0, "FT_GetComPortNumber", hdev, @port)
Debug "Port COM"+Str(port)
Else
Debug "Error FT_GetComPortNumber"
EndIf
If #FT_OK = CallFunction(0,"FT_SetBitMode", hdev, $11, $20) ; compteur 1
; CallFunction(0,"FT_SetBitMode', hdev, $22, $20) compteur 2
; CallFunction(0,"FT_SetBitMode', hdev, $00, $20) aucun compteur
d = ElapsedMilliseconds()
RX=0
TX=0
Event=0
mot$=""
Repeat
; FT_GetStatus indique si des octets sont présents en lecture ou écriture (IN/OUT)
If #FT_OK = CallFunction(0, "FT_GetStatus", hdev, @RX, @TX, @event)
If RX > 0
; Si c'est le cas, on lit les données (à placer dans un BUFFER)
If #FT_OK = CallFunction(0, "FT_Read", hdev, @*Bin, 1, @le)
a$ = Chr(*Bin & $FF)
If a$ = Chr(#CR)
Debug mot$
Debug "-------------------"
mot$ = ""
ElseIf a$ = Chr(#LF)
Debug mot$
mot$ = ""
Else
If Asc(a$)<32
mot$ = mot$ + "("+Str(Asc(a$))+")"
Else
mot$ = mot$ + a$
EndIf
EndIf
EndIf
EndIf
EndIf
Until ElapsedMilliseconds()-d>5000
EndIf
EndIf
EndIf
CloseLibrary(0)