VB et port com

Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 - 8 juil. 2009 à 13:38
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 - 26 oct. 2009 à 14:51
Bonjour a tous,

Je suis tout nouveau sur le forum et j'utilise VB pour mon projet de fin d'année. Le projet consiste à la mise en place d'un outil codé en VB permettant de configurer un switch par le port com.
J'ai fait un test en écrivant ce code pour envoyant la commande "reload" au switch mais j'ai une erreur à l'exécution :

Private Sub cmdEnvoi_Click()
 MSComm.CommPort = 1 'On définit le port série qui sera utilisé (ici Port 1)
 MSComm.Settings = "9600,n,8,1" 'On définit ici les paramètres de transmission (je les explique dans un instant).
 MSComm.PortOpen = True 'Ici on ouvre le port de communication
 MSComm.Output = "reload" 'Maintenant on envoie nos informations, ici le caractère "M"
 MSComm.PortOpen = False 'Et pour finir on ferme le port de communication
End Sub

J'ai une erreur 424 qui dit objet manquant !
Et apparemment il ne connait pas la première ligne puisqu'il la surligne en jaune...

Quelqu'un pourrait-il m'aider s'il vous plait ??

Merci d'avance

42 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
9 sept. 2009 à 12:29
Vérifie que tu as les bonnes références de sélectionner, je ne sais pas de quelle référence fait partie My.Computer.Network


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
hellangel777 Messages postés 267 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 26 novembre 2013 1
9 sept. 2009 à 13:07
Bonjour,

Si tu teste le time out il faut que tu mette en place un timer


HellAngel777
Les machines ne font pas d'erreurs
Heureusement nous sommes humains
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
9 sept. 2009 à 14:07
J'ai cherché dans toutes les références mais je ne trouve vraiment pas. Ça doit être un truc tout bête..
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
10 sept. 2009 à 11:16
Rebonjour a tous,

J'ai vraiment bien avancé. Je peux pinger en continu, débrancher rebrancher le voyant change a chaque fois comme il faut grâce a votre aide, donc déjà un grand merci.

Le soucis maintenant c'est que dans mon click j'appelle ma fonction. Seulement j'ai 5 click avec 5 fonctions.

Exemple :
Adresse 1 : Pinger
Adresse 2 : Pinger
Adresse 3 : Pinger
.....



Lorsque je click sur mon premier bouton, impec le voyant passe vert si le ping répond.
Seulement quand je veux lancer un ping sur une deuxieme machine, ca fonctionne sur la deuxieme mais plus sur la premiere, parce que la boucle du premier click s'arrete et passe sur le second. Suis je clair ?

J'aimerais moi que lorsque je click sur mon deuxieme ping, le premier continu encore a fonctionner, et comme je declenche ma premiere fonction sur mon premier click, le fait de clicker sur le deuxieme, arrete le click du premier.

C'est compliqué lol

Est ce que vous voyez ?

Une sorte de boucle qui s'arrete pas en fait, et plusieur fonctions en meme temps.
J'ai lu thread quelque part ?


Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hellangel777 Messages postés 267 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 26 novembre 2013 1
11 sept. 2009 à 05:52
Bonjour,

J'espère que j'ai compris ce que tu veux...
Je te propose un truc de ce genre
Tu place le contenu de ta requete ping dans une fonction.
Tu déclare un compteur à 0 que tu vas incrémenter.
C'est à dire, quand tu vas cliquer une premiere fois tu vas incrémenter ton compteur et tu vas lancer ta requete sur le bon pc à pinger
Quand tu vas cliquer une deuxieme fois tu vas incrémenter ton compteur (ici à 2) et tu vas lancer ta requete sur le premier pc ET sur le second
j'espere que je suis claire sinon n'hésite pas.
Bon courage


HellAngel777
Les machines ne font pas d'erreurs
Heureusement nous sommes humains
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
11 sept. 2009 à 10:01
C'est pas exactement comme ça, je vous poste mon programme en entier, l'exécutable et mon fichier texte IP ça sera surement plus simple. J'ai essayé de tout commenter pour vous aider.

Private Sub Form_Load()
    'Centre la fenetre
    Me.Left = (Screen.Width - Me.Width) \ 2
    Me.Top = (Screen.Height - Me.Height) \ 2
    Dim Recup As String 'Chaine de caractere
    Dim i As Integer 'Entier nombre de lignes dans fichier texte
    Dim T() As String 'Tableau de chaines de caracteres
    Dim k As Integer 'Entier indice des Textbox
    i = -1
    Open "./IP.txt" For Input As #1 'Ouverture du fichier texte
    While Not EOF(1) 'Tant qu'on a pas fini de parcourir le fichier
        i = i + 1 'On incremente le nombre de lignes
        ReDim Preserve T(i) 'Redimensionnement du tableau
        Line Input #1, T(i) 'On met la ligne dans une case du tableau
    Wend
    For k = 0 To i 'Tant qu'on a pas fini le tableau
        Text(k) = T(k) 'On met chaque ligne du fichier texte dans un champ textbox correspondant
    Next
    Close #1 'Fermeture du fichier texte
End Sub
Private Sub Quitter_Click()
End 'Quitte le programme
End Sub
Private Function Adresse()
  Dim oPing As New OSICMP.Ping 'Fonction PING
  Dim a As Integer 'Entier
  Dim b As Integer 'Entier
  Dim k As Integer 'Entier
  b = 1

  On Error GoTo Erreur:

  While b < 2 'Boucle infinie
    For a = 0 To 1 'Envoi d'un ping
      For k = 0 To 9 'Pour toutes les adresse dans les champs textbox
        oPing.Send Text(k).Text
      If a 0 Then 'Si aucune réponse, a 0, image rouge
        imgNotConnected(k).ZOrder
      End If 'Sinon image verte la machine répond
        imgConnected(k).ZOrder
      Next
    Next
  Wend

Erreur:
'Si pas de réponse de la machine, image rouge
imgNotConnected(k).ZOrder

End Function
Private Sub Test_Lancer() 'Lancement du test au click pour tout le monde
    Dim z As Integer
    z = 1
    While z < 2 'Boucle infini qui permet de réactualiser le resultat du ping
    Call Adresse 'Appel de la fonction Adresse
    Wend
End Sub




Dans ma forme, j'ai un groupe de contrôle sur mes image rouge et verte, nommée imgConnected(k) et imgNotConnected(k) avec k de 0 à 9 (10 images en tout rouges et vertes).
Les textbox sont aussi un groupe de contrôle et s'appellent Text(k).text avec k de 0 à 9 pareil (10 champs texte). Ils se remplissent bien au lancement des lignes du fichier texte.

Le fichier IP.txt
[code=autre]194.2.0.20
www.google.fr
10.10.10.10
www.ebay.fr
www.voila.fr
194.2.0.50
88.87.25.34
20.20.20.20
192.168.1.1
www.voila.fr


Lorsque je click sur Lancer, les deux seuls premier voyant passent au vert (alors que d'autres devraient également être verts). Quand je débranche ma prise, au lieu de passer tout les deux au vert, seul le premier passe rouge et le deuxième reste vert, et quand je rebranche, le premier repasse vert. J'ai en fait l'impression que seul mon premier ping fonctionne.
Aurais je louper quelque chose dans les boucles ?

Merci
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
11 sept. 2009 à 10:13
Je le refait en mieux pardon.

C'est pas exactement comme ça, je vous poste mon programme en entier, l'exécutable et mon fichier texte IP ça sera surement plus simple. J'ai essayé de tout commenter pour vous aider.

Code Visual Basic :
Private Sub Form_Load()

    'Centre la fenetre

    Me.Left = (Screen.Width - Me.Width) \ 2

    Me.Top = (Screen.Height - Me.Height) \ 2

    Dim Recup As String 'Chaine de caractere

    Dim i As Integer 'Entier nombre de lignes dans fichier texte

    Dim T() As String 'Tableau de chaines de caracteres

    Dim k As Integer 'Entier indice des Textbox

    i = -1

    Open "./IP.txt" For Input As #1 'Ouverture du fichier texte

    While Not EOF(1) 'Tant qu'on a pas fini de parcourir le fichier

        i = i + 1 'On incremente le nombre de lignes

        ReDim Preserve T(i) 'Redimensionnement du tableau

        Line Input #1, T(i) 'On met la ligne dans une case du tableau

    Wend

    For k = 0 To i 'Tant qu'on a pas fini le tableau

        Text(k) = T(k) 'On met chaque ligne du fichier texte dans un champ textbox correspondant

    Next

    Close #1 'Fermeture du fichier texte

End Sub

Private Sub Quitter_Click()

End 'Quitte le programme

End Sub

Private Function Adresse()

  Dim oPing As New OSICMP.Ping 'Fonction PING

  Dim a As Integer 'Entier

  Dim b As Integer 'Entier

  Dim k As Integer 'Entier

  b = 1



  On Error GoTo Erreur:



  While b < 2 'Boucle infinie

    For a = 0 To 1 'Envoi d'un ping

      For k = 0 To 9 'Pour toutes les adresse dans les champs textbox

        oPing.Send Text(k).Text

      If a 0 Then 'Si aucune réponse, a 0, image rouge

        imgNotConnected(k).ZOrder

      End If 'Sinon image verte la machine répond

        imgConnected(k).ZOrder

      Next

    Next

  Wend



Erreur:

'Si pas de réponse de la machine, image rouge

imgNotConnected(k).ZOrder



End Function

Private Sub Test_Lancer() 'Lancement du test au click pour tout le monde

    Dim z As Integer

    z = 1

    While z < 2 'Boucle infini qui permet de réactualiser le resultat du ping

    Call Adresse 'Appel de la fonction Adresse

    Wend

End Sub









Dans ma forme, j'ai un groupe de contrôle sur mes image rouge et verte, nommée imgConnected(k) et imgNotConnected(k) avec k de 0 à 9 (10 images en tout rouges et vertes).

Les textbox sont aussi un groupe de contrôle et s'appellent Text(k).text avec k de 0 à 9 pareil (10 champs texte). Ils se remplissent bien au lancement des lignes du fichier texte.



Le fichier IP.txt

194.2.0.20

www.google.fr

10.10.10.10

www.ebay.fr

www.voila.fr

194.2.0.50

88.87.25.34

20.20.20.20

192.168.1.1

www.voila.fr



Lorsque je click sur Lancer, les deux seuls premier voyant passent au vert (alors que d'autres devraient également être verts). Quand je débranche ma prise, au lieu de passer tout les deux au vert, seul le premier passe rouge et le deuxième reste vert, et quand je rebranche, le premier repasse vert. J'ai en fait l'impression que seul mon premier ping fonctionne.
Aurais je louper quelque chose dans les boucles ?

Merci
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
11 sept. 2009 à 10:29
il te faudrait je pense plutôt créer un thread par boucle en mettant en place les délégués pour pouvoir avoir accès aux contrôles de ton écran

Cherche des tutoriaux sur le net sur ce point.

Autrement, si je peux j'essaierais de regarder ça dans la soirée


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
11 sept. 2009 à 10:39
Je vais essayer de regarder. Tu me conseille une fonction pas ping. C'est ce que j'avais fait un début.
Merci
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
11 sept. 2009 à 10:42
Mais après le problème c'était pour remplir les champs texte avec le fichier texte IP si je n'ai plus de contrôle général
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
11 sept. 2009 à 10:44
Si tu te débrouille bien tu peux faire une seule et unique fonction en lui passant les paramètres qui vont bien.

Par contre, je verrais bien un thread par ping qui chacun appelerait ta fonction en lui passant les bons paramètres.


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
11 sept. 2009 à 20:34
TU code en quoi, VB6 ou VB2005/VB2008 ????

J'étais parti sur l'idée que tu codais en VB2005/8 (rubrique ou tu as posté ton message) et les pistes que j'ai donné correspondent à VB2005/8

Mais le code que tu publie et surtout la copie d'écran font plus penser à du VB6. Évidement en VB6 les solutions ne sont pas les mêmes ni aussi simples. Pas question de thread par exemple.




[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
11 sept. 2009 à 22:00
Je te propose quelques modifications :
Option Explicit

Private Sub Form_Load()

    'Centre la fenetre

    Me.Left = (Screen.Width - Me.Width) \ 2

    Me.Top = (Screen.Height - Me.Height) \ 2

    Dim Recup As String 'Chaine de caractere

    Dim i As Integer 'Entier nombre de lignes dans fichier texte

    Dim T() As String 'Tableau de chaines de caracteres

    Dim k As Integer 'Entier indice des Textbox

    i = -1

    Open "c:\temp\IP.txt" For Input As #1 'Ouverture du fichier texte

    While Not EOF(1) 'Tant qu'on a pas fini de parcourir le fichier

        i = i + 1 'On incremente le nombre de lignes

        ReDim Preserve T(i) 'Redimensionnement du tableau

        Line Input #1, T(i) 'On met la ligne dans une case du tableau

    Wend

    For k = 0 To i  'Tant qu'on a pas fini le tableau

        Text(k) = T(k) 'On met chaque ligne du fichier texte dans un champ textbox correspondant

    Next

    Close #1 'Fermeture du fichier texte

End Sub

Private Sub Quitter_Click()

End 'Quitte le programme

End Sub

Private Function Adresse(idx As Integer)
Dim oPing As New OSICMP.Ping 'Fonction PING

  On Error GoTo Erreur:

  oPing.Send Text(idx).Text
  imgConnected(idx).ZOrder ' réponse, image verte
  
  Exit Function
  
Erreur:
  
  'Si pas de réponse de la machine, image rouge
  imgNotConnected(idx).ZOrder

End Function

Private Sub Lancer_Click() 'Lancement du test au click pour tout le monde
Dim k As Integer
Static marche As Boolean

  'On flague la mise en marche
  If Not marche Then
    marche = True  ' on démarre les pings
  Else
    marche = False 'déjà en marche, on arrete les pings
  End If

  While marche  'boucle infini qui permet de réactualiser le resultat du ping

    For k = 0 To 9
      Call Adresse(k)  ' Appel de la fonction Adresse
      
      DoEvents 'évite le figeage de l'application
    Next

  Wend
  
  For k = 0 To 9
    ' on réinitialise les images
     imgNotConnected(k).ZOrder
  Next

End Sub




[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
14 sept. 2009 à 11:53
Je suis effectivement en VB6,
Mais 1000 fois merci, ça fonctionne à merveille Casy
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
6 oct. 2009 à 12:26
Me revoilà avec quelques petits soucis de nouveaux !!!
Je reprend les premier posts sur mon projet, pour configurer les commutateurs.


Alors,
Mon premier soucis, est que je cré des Vlans sur les commutateurs au fur et a mesure depuis la form "AjouterVlan". J'aimerais mettre a chaque fois que je cré un Vlan, le numéro de celui ci dans une variable, que je pourrais récupérer dans une autre form sous forme de check liste.
En gros je verrais la liste de tous les vlans que j'ai deja cré dans l'autre form.
Je ne sais déjà pas faire ceci.


Mon deuxieme soucis.
Il me semble que j'en avais déjà parlé.
J'aimerai faire une sorte d'hyperterminal dans une zone de texte. Quand je me connecte sur mon switch, et que j'envoi des commandes je les vois s'afficher en mode connecté dans la zone de texte et le switch repond en temps reel. Un hyperterminal en gros, on se connecte on peut ecrire direct dedans ou voir les commandes envoyees dedans egalement.

Je ne sais pas si je suis clair.

Merci
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
6 oct. 2009 à 20:43
Pour la première partie, il y aurait bien les collections mais il me semble que ce n'est si souple que ça en VB6. Au pire, tu peux utiliser un tableau en variable globale. Tu le remplie d'un coté, tu le relie de l'autre pour remplir ta checkbox.

Pour la seconde partie, il me semble t'avoir donné une piste, tu ne l'as pas retrouvé dans les posts précédents ?


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
8 oct. 2009 à 08:58
En fait, sur mon interface principale j'ai 48 ports. Chacun des ports numérotes de 1 a 48.
Quand je clique sur chaque port, j'aimerais appeler une seule et unique forme (parce que 48 formes ça fait beaucoup). Voila pourquoi quand je clique sur "Port1" j'aimerais qu'il renvoit une variable "1" a la forme ouverte. Pareil pour les 48, cela me permet de n'utiliser qu'une seule forme au lieu de 48 !

Pour l'hyperterminal je ne pense pas que ça soit comme ça. C'est en fait une sorte de mode connecté en VT100 par exemple ou comme VBTERM. Ca permet de discuter avec une machine en mode connecté d'envoyer les commandes directement par le champ texte.

Merci Casy
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
8 oct. 2009 à 11:49
Le premier problème est résolu.
Me reste à voir les commandes en temps réel envoyées et la réponse du switch.

Actuellement je me base sur ce code "VBTerm", il ne compile pas a cause d'une erreur mais dans le code il doit y avoir ce qu'il faut pour faire l'hyperterminal. Si tu peux y jeter un œil je te fais un lien pour le zip.




http://www.megaupload.com/?d=DMKEOGD0

Voila
Merci
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
22 oct. 2009 à 09:18
Resalut !!
Bon j'ai réussi à faire pas mal de petites choses, j'avance tranquillement mais me voilà confronter à deux nouveaux petits soucis.

J'arrive bien à afficher les commandes envoyées et reçues dans un champ texte, c'est impeccable.
Seulement,

- J'aimerai envoyer un "CTRL-Z" sur le port console, mais je n'ai pas trouver comment faire

- J'aimerai, quand je suis dans ma fenêtre, je communique directement avec le Switch et peut lui envoyer des commandes à la main. Le seul soucis, c'est que quand je fais la touche "tab" au lieu de m'indiquer la liste des commandes que je peux envoyer au Switch (comme en hyperterm par exemple), mon curseur s'en va sur le bouton d'à coté lol.


Voila, deux petits problèmes,

Merci d'avance
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
22 oct. 2009 à 20:33
LA question à se poser, c'est à quoi correspond le CTRL-Z, qu'est ce qui est envoyé avec cette combinaison de touche.

Ensuite il suffit juste, je pense, d'intercepter cette combinaison de touche (évènements keypress, keydown, ...) et d'envoyer à la place les bons caractères.

Pour la touche TAB, il faut si tu peux l'intercepter des ces évènements keypress, keydown, ... mais je pense qu'elle est interceptée par le système avant. Dans ce cas je ne vois pas trop de solutions.

[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
Rejoignez-nous