GESTION MULTICARTES K8055 (CODE TUTO)

julienmus Messages postés 51 Date d'inscription lundi 7 juillet 2008 Statut Membre Dernière intervention 13 février 2012 - 22 sept. 2009 à 12:54
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 - 12 nov. 2010 à 17:16
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50597-gestion-multicartes-k8055-code-tuto

Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
12 nov. 2010 à 17:16
ben déja commence par corriger ce genre de chose !
un string * double ! place option srict et explicit à on pour voir ces conversion explicite ;)
pas besoin non plus de compter les minutes, les tr/min ne sont que des hertz*60 (ou top par sec) * 60
eolpro Messages postés 7 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 7 novembre 2010
12 nov. 2010 à 17:04
bonsoir,le code lit le nombre de tour dans le text1 , ensuite je controle l'horloge pour les seconde,puis je multiplie "suivant le temps en seconde " par une valeur pour obtenir les tours/min , j'active le relais de montée ou de descente en fonction.Dans le text1 je ne peux pas le réinitialiser à 0 tant que le temps est inférieur à 60 secondes.J'ai opté à "select case" pour la rapidité.Je pense utiliser une variable interne pour le comptage et ensuite la réinitialiser après 5 secondes.J'aimerais placer mon code sur le forum.Merci de m'indiquer la procédure.Bàv
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
10 nov. 2010 à 12:46
TxtTrMin.Text = Text1.Text * 1.2
Oo" mes yeux ça pique lol

Quesque ton code est censé faire ? donne un cdc plutot.
F=1/T tu compte donc le nombre d'impulsion par seconde et tu as la fréquence. ensuite tu fais une moyenne toute les 10 mesures pour avoir une valeur stable (par exemple)
++
eolpro Messages postés 7 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 7 novembre 2010
10 nov. 2010 à 10:03
Bonjour , pas mal de soucis pour le compte tour.Avec un timer la gestion des impulsions etait trop complexe.J'ai decidé de travailler avec le time système pc.Mais il y a un défaut dans la boucle lors de l'affichage 10,20,30,40 et 50 sec.Il semble y avoir un rebond software de +- 4 impulsion.La vitesse maximum tester est de 1800 tr/min.Voici le code d'affichage impulsions.Merci de votre réponse.
Private Sub TimerRPM_Tick(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Timer1.Tick

'mise en fonction du timer
TimerRPM.Enabled = True
'controle de la valeur du compteur d'impulsion
If Text1.Text > 0 Then
'affichage de la date et heures + minutes + secondes + millisecondes
Label5.Text = DateHeurePrecise()
'après 10 secondes : multiplication de la valeur du compteur et affichage
If TimeSeconde() = 10 Then
TxtTrMin.Text = Text1.Text * 6
End If
'après 20 secondes : multiplication de la valeur du compteur et affichage
If TimeSeconde() = 20 Then
TxtTrMin.Text = Text1.Text * 3
End If
'après 30 secondes : multiplication de la valeur du compteur et affichage
If TimeSeconde() = 30 Then
TxtTrMin.Text = Text1.Text * 2
End If
'après 40 secondes : multiplication de la valeur du compteur et affichage
If TimeSeconde() = 40 Then
TxtTrMin.Text = Text1.Text * 1.5
End If
'après 50 secondes : multiplication de la valeur du compteur et affichage
If TimeSeconde() = 50 Then
TxtTrMin.Text = Text1.Text * 1.2
End If
'controle de la valeur des secondes pour le reset du comptage d'impulsion
If TimeSeconde() <> 0 Then
Else
ResetCounter(1)
End If
Else
End If
End Sub
'Initilisation des variables de temps (horloge)
Private Structure SYSTEMTIME
Dim wYear As Short
Dim wMonth As Short
Dim wDayOfWeek As Short
Dim wDay As Short
Dim wHour As Short
Dim wMinute As Short
Dim wSecond As Short
Dim wMilliseconds As Short
End Structure

' Fonction : DateHeurePrecise
' Retour : Chaine de date heure formattée avec JJ/MM/AAAA et HH:MM:SS:mmm
' mmm représente les milliemes de secondes
Public Function DateHeurePrecise() As String
Dim Heure As SYSTEMTIME
GetSystemTime(Heure)
'utilisation de format pour meilleure lecture du resultat
DateHeurePrecise = "Le " & VB6.Format(Heure.wDay, "00/") & VB6.Format(Heure.wMonth, "00/") & VB6.Format(Heure.wYear, "0000") & " à " & VB6.Format(Heure.wHour, "00:") & VB6.Format(Heure.wMinute, "00:") & VB6.Format(Heure.wSecond, "00:") & VB6.Format(Heure.wMilliseconds, "000")
End Function
Public Function TimeSeconde() As String
Dim Seconde As SYSTEMTIME
GetSystemTime(Seconde)
'mémorisation de la valeur en seconde pour le controle de la vitesse en tours/min
TimeSeconde = VB6.Format(Seconde.wSecond, "00")
End Function
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
9 nov. 2010 à 19:47
pas de soucis, le projet m'interesse et j'ai plus rien à programmer...donc si besoin je suis là, enfin dans une dizaine de jours ;)
eolpro Messages postés 7 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 7 novembre 2010
8 nov. 2010 à 07:19
Bonjour , le projet est d'utiliser les 2 type d'énegies éolienne et solaire.Le moteur est alimenté par le solaire et l'éolien viendrait en complément.La carte K8055 doit gérer les entrées DI et AI afin de selectionner la source la plus rentable => force du vent ou solaire.Sur la video il ne s'agit que du prototype donc de développer la partie de régulation.Je pense avoir trouver une source pour le RPM motor.Merci de vos remarques.
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
8 nov. 2010 à 06:14
je viens de voir ta vidéo, est j'ai vraiment pas compris ce que tu essaye de faire ? tu fais tourner un moteur avec un panneau solaire ?
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
8 nov. 2010 à 06:09
bha la c'est plus de la prog, c'est des maths ! ou alors j'ai pas compris la question...
Tu connais F en hz, le nb de top par tour, (la vitesse linéaire (le Pi*D) aussi si tu veux mais bon) donc tu connais la vitesse en Tr/s, puis *60 par minute, voila....
En clair si tu as 50top / tour sur ton disque et que tu à du 100hz c'est que tu fais du 2tr/sec ou du 120tr/min.
++
eolpro Messages postés 7 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 7 novembre 2010
7 nov. 2010 à 23:31
Mon projet évolue,j'ai placé un capteur "inductif" et avec un temp de réponse de 0ms, j'arrive a compter le nombre de tours.J'aimerais pouvoir calculer en tours par minutes afin de régulé la vitesse.merci de votre réponse
eolpro Messages postés 7 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 7 novembre 2010
19 oct. 2010 à 21:10
Bonsoir
Je ne connais pas la fréquence maximum de la carte(actuellement).La rotation du plateau des aimants devraient être de +- 1500 Tr/min(25 Tr/s) donc 25 impulsions / seconde sur une entrée digitale.Les valeurs (fréquence de scan de l'entrée) de base du Prg sont , par défaut ,de 0,2 mS et je pense que cela devrait correspondre .Je devraient convertir les impulsions en tours par minutes (et l'affiché sur le "counter" et ensuite activer une sortie pour descendre ou monter les noyaux de fer dans les bobines du générateur afin maintenir une rotation (vitesse)constante. J'ai récupéré le prg basic velleman , modifié les paramètres puis changer l'aspect visuel.Voici le lien du projet en cours sur you tube : http://www.youtube.com/watch?v=_v11j_haa9o .Merci de votre réponse
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
19 oct. 2010 à 07:28
oui bien sûr, à condition de respecter la fréquence maxi de la carte.
eolpro Messages postés 7 Date d'inscription vendredi 2 mai 2008 Statut Membre Dernière intervention 7 novembre 2010
18 oct. 2010 à 22:02
bonsoir
je travaille sur un projet utilisant une carte K8055.Le projet est un générateur électrique à aimant permanent.Serait-il possible de créer un compte tour en utilisant l'entrée digitale 1.Merci de votre réponse
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
17 sept. 2010 à 16:46
salut, toutes les instructions de la dll sont compatible avec n'importe qu'elle language, il suffit de les écrire (voir pdf sur le site velleman)
searchdevices retourne un byte composé des 4 cartes en binaire, ex 3 montre que la carte 1 et 2 sont connecté.
pour le code posté il dois être compatible avec vb6 puisque c'est le tiens corrigé. dsl mais je n'ai pas VB6, mais fait tourner une appli avec cette carte en VBA sous excel, donc pas de soucis en VB6.
++
tenere83 Messages postés 9 Date d'inscription vendredi 20 août 2010 Statut Membre Dernière intervention 13 septembre 2010
17 sept. 2010 à 16:05
Rebonjour
Je reprends ton commentaire du 14/9/2010
Peux tu me mettre exactement ce que je dois ecrire en visual basic6 pour connecter mes 2 cartes (si ta patience n'est pas à bout)
Merci
Tenere83
tenere83 Messages postés 9 Date d'inscription vendredi 20 août 2010 Statut Membre Dernière intervention 13 septembre 2010
17 sept. 2010 à 15:47
Bonjour,
SearchDevices c'est pour visual basic 6 ?
si oui : comment retournes-tu un code de 4 bool
peux tu me faire un exemple concret,
Merci d'avance
Tenere83
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
16 sept. 2010 à 07:43
For boucle As Integer = 0 To 4
Dim C As Integer = CInt(2 ^ boucle) 'calcul la puissance de 2 : 2^0,2^1,2^3,2^4
entrees(boucle+1) = CBool(Val_entrees And C) 'les mémoires entrees 1 à 5
Next

Ce code optimise la boucle de lecture du tread Sub_lecture dans mon code.
tenere83 Messages postés 9 Date d'inscription vendredi 20 août 2010 Statut Membre Dernière intervention 13 septembre 2010
16 sept. 2010 à 05:25
Bonjour Adn56,
c'est vrai excuse moi pour la note, je met des étoiles.
Merci Adn 56 pour ta disponibilité.
Ténéré 83
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
15 sept. 2010 à 22:26
@ jczanoni : décomposition binaire d'un entier par division.
@ tenere83 : merci pour le 10/10 mais le mettre en vrai est mieux ;) étoile à cocher au dessus de ton commentaire.
bonne soirée à tous
jczanoni Messages postés 1 Date d'inscription mercredi 5 décembre 2007 Statut Membre Dernière intervention 15 septembre 2010
15 sept. 2010 à 16:01
Bonjour les codeurs :o)

une fois que tu as fait un
dim In0 as byte = ReadAllDigital()

Comment fait tu ta boucle pour interpréter en fonction du résultat lu ?

jusqu'a maintenant je checkais chaque entrée mais c'est vrai que c'est mieux avec le ReadAllDigital() (c'est plus rapide)

Merci
tenere83 Messages postés 9 Date d'inscription vendredi 20 août 2010 Statut Membre Dernière intervention 13 septembre 2010
15 sept. 2010 à 08:04
Note 10/10
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
15 sept. 2010 à 07:45
n'oubli pas de noter ;)
tenere83 Messages postés 9 Date d'inscription vendredi 20 août 2010 Statut Membre Dernière intervention 13 septembre 2010
15 sept. 2010 à 06:05
Merci ,
Je vais travailler et je te tiens au courant.
Tenere83
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
14 sept. 2010 à 17:47
salut, trouve ci contre le lien demandé : http://www.vbfrance.com/codes/REGIE-LUMIERE-PISTES_44145.aspx

Pour ton code quellque remarques :

Private Sub Connect1_Click()
CardAddress = 0 'inutile
CardAddress = 3 - (Check1(0).Value + Check1(1).Value * 2) 'inutile
h = OpenDevice(CardAddress) devient opendevice(0)
Select Case h 'inutile
Case 0, 1, 2, 3 'inutile
if not h=-1 then
Label1.Caption = "Card " + Str(h) + " connected"
else
Label1.Caption = "Card " + Str(CardAddress) + " not found"
End if
End Sub
idem pour la carte 1, ensuite, ne scrute pas chaques entrées cela consomme 10ms à chaque fois sur el port USB, il existe une fonction qui permet de lire la somme booléenne des entrées. Utilse là !
dim In0 as byte = ReadAllDigital()
Pour ta com avec les cartes tu oubli de préciser à qui tu cause !
SetCurrentDevice(0)
ensuite tu peux écrire ou lire ses I/O
puis
SetCurrentDevice(1)
pour faire de même avec l'autre carte.
pense aussi à bien fermer tes coms cartes en quitant sinon bug à l'ouverture suivante !
voir mon code
bonne prog
tenere83 Messages postés 9 Date d'inscription vendredi 20 août 2010 Statut Membre Dernière intervention 13 septembre 2010
14 sept. 2010 à 07:52
Rebonjour,

Ou se trouve le jeux de lumiere et son code?
Merci
Tenere 83
tenere83 Messages postés 9 Date d'inscription vendredi 20 août 2010 Statut Membre Dernière intervention 13 septembre 2010
14 sept. 2010 à 07:40
Bonjour ADN56,et merci d'avoir répondu aussi rapidement
1) voici le code

'connexion carte1

Private Sub Connect1_Click()
CardAddress = 0
CardAddress = 3 - (Check1(0).Value + Check1(1).Value * 2)
h = OpenDevice(CardAddress)
Select Case h
Case 0, 1, 2, 3
Label1.Caption = "Card " + Str(h) + " connected"
Case -1
Label1.Caption = "Card " + Str(CardAddress) + " not found"
End Select
End Sub

'connexion carte2

Private Sub Connect2_Click()
CardAddress = 1
CardAddress = 3 - (Check1(2).Value + Check1(3).Value * 2)
h = OpenDevice(CardAddress)
Select Case h
Case 0, 1, 2, 3
Label2.Caption = "Card " + Str(h) + " connected"
Case -1
Label2.Caption = "Card " + Str(CardAddress) + " not found"
End Select
End Sub

J'utilise en effet la derniere ( enfin je pense)dll8055 rev 3.0.2

3)Je ne pense pas avoir tout compris dans ton code et je vais aller voirle code sur le jeux de lumiere.

Question : Les sorties des 2 cartes ont pourtant un nom différent.
Exemple :'sorties carte1

Private Sub Check2_Click(Index As Integer)

Select Case Index
Case 1
If Check2(1).Value = 1 Then
SetDigitalChannel (1)
ElseIf Check2(1).Value = 0 Then
ClearDigitalChannel (1)
End If


'sorties carte2

Private Sub Check20_Click(Index As Integer)

Select Case Index
Case 1
If Check20(1).Value = 1 Then
SetDigitalChannel (1)
ElseIf Check20(1).Value = 0 Then
ClearDigitalChannel (1)
End If

Merci d'avance de te pencher sur mon PB
Cordialement Tenere83
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
13 sept. 2010 à 18:51
salut, quel code utilise tu pour te connecter aux cartes ?
utilise tu la derniére dll ?
As tu bien compris mon code ?
ais-je fais une erreur dans mon code ? je ne me souviens pas si j'ai testé deux cartes en méme temps, sinon regarde mon code sur le jeux de lumiére celui marche trés bien avec deux cartes.
@ te lire
slts
tenere83 Messages postés 9 Date d'inscription vendredi 20 août 2010 Statut Membre Dernière intervention 13 septembre 2010
13 sept. 2010 à 18:36
Bonsoir ADN 56,
J'ai branché deux cartes sur deux ports usb je leur ai donné à chacune une adresse différente par K5 et K6. Les deux cartes lors de la simulation ont bien une adresse differente mais lors des essais sur table les commandes d'une carte reagit sur l'autre et vice-versa.
Peux tu me donner la raison de cette anomalie et le moyen d'y remedier
Cordialement
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
22 sept. 2009 à 16:04
Et en quoi est-ce un probléme ? Que veux tu en faire de ce menu contextuel ?
Et puis la source est là, que cela soit une picture box, un bouton, un label cela fonctionne pour n'importe quel type de control, donc tu peux à ton tour utiliser ce principe pour généré un menu contextuel (même si je vois pas bien l'interet)

Ce code est un code de base "tuto" pour ceux qui comme toi veulent utiliser cette carte. Il montre simplement comment faire des fonctions et utiliser le tag pour ne pas à avoir à taper 53 fois le même code à chaque clic sur un bouton, il permet aussi de montrer comment detecter automatiquement les cartes connectées et aussi de récupérer leurs adresses pour pouvoir ensuite les utiliser. Tu peux essayer avec la tienne (change les jumper SK5 et SK6 pour voir).
Comprenons nous bien, tel quel ce soft est vraiment inutile. Il sert juste de base de travail pour remplacer les deux codes que j'ai cité dans la présentation pour qu'un débutant est la "bonne" façon de travailler avec cette carte.
Le thread par exemple ne sert à rien, j'aurais pu placer son code avec le timer, mais il devient important lorsque l'on veut faire des équations complexes, longues ou faire des tempos, de la communication, du déplacement de fichier ou des choses avec les entrées/sorties (comme un GR7) car pendant ce temps là le reste de l'appli (ihm) n'est pas bloqué. Voila bonne prog et bon décorticage.
Si vraiment tu n'arrive pas à réaliser ton menu contextuel, explique moi ce qu etu veux faire avec et j'essayerai de t'aider.
julienmus Messages postés 51 Date d'inscription lundi 7 juillet 2008 Statut Membre Dernière intervention 13 février 2012
22 sept. 2009 à 12:54
tres bien expliqué
tres bien ecri meme pour les boutons
seul petit probleme toujour pas de menu contextuel
Rejoignez-nous