Lecture et ecriture sur usb/rs232

karil - 10 mai 2014 à 00:38
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 20 mai 2014 à 09:37
Bonjour,
je suis un etudiant marocain bac +2 en automatique maintenant je suis en stage ils m ont demandé de realiser une application à base de vb 2010 express qui va lire et écrire sur port usb/RS232 dont lequel est connecté une automate imo ismart svp si vous avez des programme ou quelle que aide :)

7 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
10 mai 2014 à 14:34
"mais le probleme c est comment lire les donnés sur le port et aussi envoyer une trame à l'automate via se fameux port si tu as un code sauve moi please "

L'aide en ligne fournie par Microsoft est déjà une très bonne base pour répondre à ta question.

Le manière dont tu as posé ta question indique clairement que tu attends du tout cuit, sans vraiment chercher par toi même.
2
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
10 mai 2014 à 02:03
Quelle version de VB ?
As-tu regardé comment accéder à un port série (COMx) ?
1
je travaille avec vb 2010 express et cette syntaxe

Try
SerialPort1.Open()
Catch ex As Exception
Me.Text = ex.Message
End Try

me permet d ouvrir le port mais le probleme c est comment lire les donnés sur le port et aussi envoyer une trame à l'automate via se fameux port si tu as un code sauve moi please
1
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 656
10 mai 2014 à 13:37
Sujet déplacé ver VB.Net
0
pas tout a fait ca . j'ai fait beaucoup de recherche que tu ne peux pas imaginer j'ai trouvé plusieurs code j'ai pris quelques un je l'ai modifié et executé il marche seulement avec le port par defaut de serialport virtual de vb mais quand je met le port ou mon automate est connecté je ne recoit pas de reponse quand j'envoie une requete de lancement de programme par exemple à l'automate
1
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
11 mai 2014 à 00:31
Dans ce cas, il y a 4 causes possible :
- Ton code est pas bon (mais tu ne nous le montre pas)
- Tu t'es trompé de port COM ou de configuration (débit, parité, ...)
- Le câblage est erroné
- Tu n'envoie pas ta commande correctement.

Sans plus d'information, impossible de te répondre.
0

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

Posez votre question
voila mon code :




Public Class Form1

Dim inputData As Long

Private Sub Form1_Load() Handles MyBase.Load

Try
SerialPort1.Open()
Catch ex As Exception
Me.Text = ex.Message
End Try

End Sub



Private Sub Button2_Click() Handles Button2.Click
SerialPort1.Close()
End Sub

Sub Calcul_checksum()
Dim TabEnvoyé As Byte() = New Byte(11) {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}

TabEnvoyé(0) = &H2
TabEnvoyé(1) = &H3F
TabEnvoyé(2) = &H30
TabEnvoyé(3) = &H31
TabEnvoyé(4) = &H31
TabEnvoyé(5) = &H43
TabEnvoyé(6) = &H52
TabEnvoyé(7) = &H49
TabEnvoyé(8) = &H46
TabEnvoyé(9) = &H46
TabEnvoyé(10) = &H3D
TabEnvoyé(11) = &H3

Dim Somme As Integer = 0

For Each x As Byte In TabEnvoyé
Somme = Somme + x
Next


Dim bt As Byte()
bt = BitConverter.GetBytes(Somme)
Dim a1 As String = Hex(bt(0))

Dim aa As String = Hex(Somme)

SerialPort1.Write(TabEnvoyé, 0, 12)

End Sub

Private Sub serialport1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
'déclaration des variables
Dim budd(13) As Byte
Dim strRecu As String = Nothing
' lecture de la trame recu "sur 12 bytes"
SerialPort1.Read(budd, 0, 12)
' fermeture du port
SerialPort1.Close()

For ii As Integer = 0 To 11
strRecu = strRecu & ":" & Hex(budd(ii))
Next

' Affichage de la trame
MessageBox.Show(strRecu)
End Sub

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

End Sub
End Class
1
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
11 mai 2014 à 21:08
Tu n'a pas répondu à toutes les questions, relis mon message et vérifie chaque points.

De plus dans ton code, tu ne montres pas où tu appel Calcul_checksum.
Dans ta procédure de réception, tu ferme le port COM.
0
vous avez demandé le code c est donnée mais le problème c est que je sais pas ou est le problème mais concernant tes propositions je pense que tout est verifié
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
12 mai 2014 à 09:22
Tu ne nous montre que cette ligne concernant l'ouverture :
SerialPort1.Open()
Mais tu ne nous dis pas la configuration de la communication.

Et je t'ai déjà fait 2 remarques sur le code.
0
j ai pas fait la configuration dans le programme j ai ajouté un toolbox nommé serialport et j l'ai configuré dans propriété comme suite COM37 ,19200,PARITY.NONE ,8 BIT DE DATA ,STOPBITS.ONE
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
12 mai 2014 à 21:36
Est-tu sûr des données envoyées ? (notamment le calcul de la somme de contrôle)
Pourquoi ne pas utiliser l'opérateur Modulo (Mod) pour extraire l'octet de poids faible ?
0
s'il vous plait oublions le code précédant ce jour la j ai viens de recevoir un code du constructeur ils m ont demander de faire l' application mais le probleme c est que je viens pas de comprendre les etapes qu ils ont suivis et aussi la partie d affichage n est pas faite . voila le code et merci beaucoup de me clarifié un peu le programme et qu'elle sont les toolbox que je dois utiliser pour faire application :

Imports System.IO.Ports

Public Class CIMOserie
    Private sp As SerialPort
    Private debutTrame As String = Chr(2)
    Private finTrame As String = Chr(3)

    Property numAutom As String = "1" 'Numéro de l'automate

    Sub New(ByVal portCom As String)
        Dim automate As New CIMOserie("COM37")
        sp = New SerialPort(portCom, 19200, Parity.None, 8, StopBits.One)
        sp.RtsEnable = True

        sp.Open()
    End Sub

    'Calcul du Checksum
    Private Function CalculerCRC(ByVal trame As String) As String
        Dim crc As Integer = 0

        For i = 0 To trame.Length - 1
            crc += (Asc(trame(i)))
        Next

        Return (crc Mod 256).ToString("X2")
    End Function

    'Cette fonction permet de lire, pas d'écrire (il faudra rajouter les données après la voie, comme expliqué dans la doc)
    Private Function EnvoyerTrame(ByVal cmde As String, ByVal voie As String) As String
        Dim _trame As String = debutTrame + "?" + numAutom + "1" + cmde + voie
        _trame += CalculerCRC(_trame) + finTrame

        sp.Write(_trame)
        Return sp.ReadTo(finTrame) + finTrame
    End Function

    'Fonction exemple pour lire toutes les Entrées
    Public Function LireToutesLesEntrees() As String
        Return EnvoyerTrame("CRI", "FF")
    End Function

    'Fonction exemple pour lire une Sortie (par ex LireUneSortie("02"))
    Public Function LireUneSortie(ByVal voie As String) As String
        Return EnvoyerTrame("CRQ", voie)
    End Function
End Class
1
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
13 mai 2014 à 22:47
Merci d'utiliser correctement la balise de code, ton code doit être entre les 2 balises, pas apàrès, j'ai encore corrigé ton message.

Dans ton constructeur de CIMOserie, tu appel de nouveau ce constructeur (As New CIMOserie(...)).
Je pense que tu as modifié le code avant de le poster.

As-tu essayer le code en l'utilisant comme indiqué par le constructeur ?
0
premierement excuser moi pour le retard car j ai des probleme . concernant '' Dans ton constructeur de CIMOserie, tu appel de nouveau ce constructeur (As New CIMOserie(...))." tu as raison
l'erreur c est que Dim automate As New CIMOserie("COM37") (par exemple) est un commentaire

le voila le code de nouveau et s'il vous plait comment je peux faire le dessin c'est urgent et merci beaucoup d'avance pour tes reponses :
 
Imports System.IO.Ports

Public Class CIMOserie
    Private sp As SerialPort
    Private debutTrame As String = Chr(2)
    Private finTrame As String = Chr(3)

    Property numAutom As String = "1" 'Numéro de l'automate

    Sub New(ByVal portCom As String) 'Dim automate As New CIMOserie("COM37") (par exemple)
        sp = New SerialPort(portCom, 19200, Parity.None, 8, StopBits.One)
        sp.RtsEnable = True

        sp.Open()
    End Sub

    'Calcul du Checksum
    Private Function CalculerCRC(ByVal trame As String) As String
        Dim crc As Integer = 0

        For i = 0 To trame.Length - 1
            crc += (Asc(trame(i)))
        Next

        Return (crc Mod 256).ToString("X2")
    End Function

    'Cette fonction permet de lire, pas d'écrire (il faudra rajouter les données après la voie, comme expliqué dans la doc)
    Private Function EnvoyerTrame(ByVal cmde As String, ByVal voie As String) As String
        Dim _trame As String = debutTrame + "?" + numAutom + "1" + cmde + voie
        _trame += CalculerCRC(_trame) + finTrame

        sp.Write(_trame)
        Return sp.ReadTo(finTrame) + finTrame
    End Function

    'Fonction exemple pour lire toutes les Entrées
    Public Function LireToutesLesEntrees() As String
        Return EnvoyerTrame("CRI", "FF")
    End Function

    'Fonction exemple pour lire une Sortie (par ex LireUneSortie("02"))
    Public Function LireUneSortie(ByVal voie As String) As String
        Return EnvoyerTrame("CRQ", voie)
    End Function
End Class



(il faudra rajouter les données après la voie, comme expliqué dans la doc) : qu est ce qu'il veux dire avec ce commentaire

("CRI", "FF") , ("CRQ", voie) : de quoi elles s'agit
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
15 mai 2014 à 23:06
As-tu essayé en pas à pas ? (F8 et point d'arrêt F9)
Comment utilises-tu ce code ?
0
non j'ai pas essayer mais meme s'il ca marche il y a ni lecture ni affichage de trame emis ou recu le probleme c est pas dans l'execution c'est la methode de lecture et ecriture. j'ai fait ce qui est indiqué dans les commentaires de programme mais sans resultats .......
0
dans ce programme je pense qu'il y a pas des parties détaillés concernant envoie et réception et affichage des trames ...
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
18 mai 2014 à 00:33
Dans la classe montrée, il y a de quoi envoyer les trames (apparemment).

Sinon, en regardant en pas à pas et en espionnant la valeur des variables, Je pense que tu devrais voir où ça ne passe pas.

Tu n'a pas montré le code que tu utilises pour utiliser la classe.
0
s'il te plait est ce que tu peux bien détailler ca :

Sinon, en regardant en pas à pas et en espionnant la valeur des variables, Je pense que tu devrais voir où ça ne passe pas.

Tu n'a pas montré le code que tu utilises pour utiliser la classe

j'ai pas bien compris merci .
0
Rejoignez-nous