Serialport et .Net compact framework 3.5

Résolu
topogeomatic Messages postés 7 Date d'inscription mardi 3 avril 2012 Statut Membre Dernière intervention 7 mai 2012 - 28 avril 2012 à 22:02
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 7 mai 2012 à 16:02
Salut, dans le cadre d'un PFE je réalise une application sur pocket pc (SXPAD windows mobile 6.5) qui interagit avec un appareil de mesure. Cette dernière a une sortie COM que je dois l'adapter avec mon Pocket PC qui a seulement un port mini-usb (usb client). Nous avons réalisé un câble de liaison qui va jouer le rôle d'adaptateur entre le COM et le mini-usb (nous n'avons pas encore testé la fiabilité de ce câble). Cependant, il reste d'établir un code permettant de lire les données venant de l'appareil via ce mini-usb que je pense doit être converti en port COM. ça fait maintenant quelques jours que je teste des codes qui utilisent les propriétés de la classe serialport mais en vain. J'ai besoin de votre aide dans ce sujet, c'est la clé maîtresse de tout mon travail et toute l'application qui contient plusieurs modules n'aura pas de valeur si j'arrive pas à réaliser cette liaison et lire les mesures. Je développe sous smart device application de vb.net (.Net CF 3.5). Merci

13 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
28 avril 2012 à 23:54
Bonjour,

"Nous avons réalisé un câble de liaison qui va jouer le rôle d'adaptateur entre le COM et le mini-usb"
Comment a été fait ce câble, as-tu un schéma ou une image, car je craint qu'il n'y ait pas de compostant d'adaptation.

Un port COM n'est pas compatible directement avec un port USB.

Il existe des adaptateurs USB/RS232 déjà sur le marché.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
7 mai 2012 à 16:02
Bonjour,

nullreferenceexception, indique que tu tente de faire quelque-chose sur un objet qui a pour valeur Nothing, sans savoir quelle ligne exactement, je ne pourrais pas te dire où chercher.
Mais en pas à pas, tu peux regarder toutes les valeurs de la ligne concernée.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
3
topogeomatic Messages postés 7 Date d'inscription mardi 3 avril 2012 Statut Membre Dernière intervention 7 mai 2012
29 avril 2012 à 01:00
Merci pour votre réponse. En fait, c'est pas moi qui ai réalisé cette liaison c'est mon collaborateur dans le cadre de ce PFE, mais d'après ce que je vois dans le câble car il n'est pas encore couvert la liaison entre 3 fils de part et d'autre, voici la correspondance entre les couleurs:
Port COM ==> Port USB
orange ==> blanc
rouge ==> vert
vert ==> noir
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
29 avril 2012 à 02:50
Bonjour,

Les couleurs ne me disent rien.
Si tu ne vois pas de composant pour faire l'interface entre le port COM et le port USB, c'est normal que rien ne se passe.

Il faut utiliser un câble adaptateur, tu ne peux pas changer le type d'un port comme ça.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0

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

Posez votre question
topogeomatic Messages postés 7 Date d'inscription mardi 3 avril 2012 Statut Membre Dernière intervention 7 mai 2012
29 avril 2012 à 14:44
Bonjour,
Je vous remercie pour vos réponses, excusez moi si je m'insiste encore car mon collaborateur m'a dit qu'il s'est basé sur des documentations ad hoc pour réaliser cette liaison COM-USB, et sincèrement je ne suis pas sûr des codes que j'ai utilisé. Si c'est possible, pouvez-vous m'indiquer un code source valide que je peux utiliser pour lire les données sachant que:
- Je ne maîtrise pas les numéros de COM et dans quel COM je dois travailler, La méthode Getportnames() m'a affiché 5 COM: COM1, COM2, COM3, COM4, et COM6 quand je choisis 3 ou 4 il n'affiche pas d'erreur contrairement aux COM1 et 2 il me retourne un IO exception, alors que COM6 il affiche après un certain temps la trame de GPS puis le code se plante.
- Datareceived utilise thread secondaire, et j'arrive pas à maitriser ce concept dans mon code
- Je développe sous smart device vb.net de .Net compact framework 3.5

Si j'arrive à obtenir ce code source qui est bien testé, je peux confirmer la non fiabilité de la liaison faite par mon collaborateur, et je vais essayer d'acheter un adaptateur que je pense m'oblige d'installer un driver (dans le pocket pc, je sais pas si je peux trouver une version ou non???).
Merci beaucoup pour votre aide Mr. NHenry
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
29 avril 2012 à 15:30
Bonjour,

"il me retourne un IO exception"
Avec quel message ?

La description que tu fais de cette adaptation, me maintient dans le doute.

Concernant le DataReceived, regardes les docs concernant les CrossThreadException et les Cross Thread Operation.

Par exemple :
http://social.msdn.microsoft.com/forums/en-US/vblanguage/thread/1449f9c6-aaea-4e97-8812-7d150af1f84f

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
topogeomatic Messages postés 7 Date d'inscription mardi 3 avril 2012 Statut Membre Dernière intervention 7 mai 2012
29 avril 2012 à 16:13
Bonjour,
- Voici le message de l'erreur qu'il m'affiche lorsque je choisis COM1 ou COM2 par exemple:
at System.IO.Ports.SerialStream.WinIOError(Int32 errorCode, String str)
at System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace)
at System.IO.Ports.SerialPort.Open()
at PortTest.Form1.button1_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.ButtonBase.WnProc(WM wm, Int32 wParam, Int32 lParam)
at System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam)
at Microsoft.AGL.Forms.EVL.EnterMainLoop(IntPtr hwnMain)
at System.Windows.Forms.Application.Run(Form fm)
at PortTest.Program.Main()

- Voici le code que j'utilise dans mon programme:
Imports System
Imports System.ComponentModel
Imports System.Threading
Imports System.IO.Ports

Public Class Form1
    Private Delegate Sub UpdateFormDelegate()
    Private UpdateFormDelegate1 As UpdateFormDelegate
    Dim myPort() As String  'COM Ports detected on the system will be stored here

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If Button1.Text = "Start" Then
            Button1.Text = "Stop"
            If LST_Ports.SelectedItem = "" Then
                MsgBox("Séléctionner un port Com dans la liste")
                Button1.Text = "Start"
            Else
                SerialPort1.PortName = LST_Ports.Text
                SerialPort1.Open()

            End If
        Else
            Button1.Text = "Start"
            SerialPort1.Close()
        End If
        MsgBox("c bien")
    End Sub

    Private Sub serialport1_DataReceived(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived

        ' Event for receiving data
        ' Read the buffer to text box.
        UpdateFormDelegate1 = New UpdateFormDelegate(AddressOf DoUpdate)

        Me.Invoke(UpdateFormDelegate1)
    End Sub

    Private Sub DoUpdate()

        TextBox4.Text = SerialPort1.ReadExisting()

    End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim i As Integer
        
   myPort = IO.Ports.SerialPort.GetPortNames() 'Get all com ports available
        For i = 0 To UBound(myPort)
            LST_Ports.Items.Add(myPort(i))
        Next
        LST_Ports.Text = LST_Ports.Items.Item(0)    'Set cmbPort text to the first COM port detected
    End Sub
End Class

Pour le contrôle serialport, je l'ai glissé de la barre d'outils, et j'ai défini ses propriétés.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
30 avril 2012 à 21:27
Bonjour,

Tu as fourni la pile des appels, mais pas le message de l'erreur.

Ces ports ne seraient-ils pas utiliser par d'autres fonction de l'appareil ?

As-tu testé ton câble sur un PC (et vérifier que le port fonctionne toujours après) ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
topogeomatic Messages postés 7 Date d'inscription mardi 3 avril 2012 Statut Membre Dernière intervention 7 mai 2012
2 mai 2012 à 01:29
- Il m'affiche IOException An error message is available for this exception but cannot be displayed because these messages are optional ..... Please install 'NetCFv35.messages.EN.wm.cab ...

- Concernant le câble, j'ai commencé à avoir le même doute que vous, ça marche pas je vais me lancer sur la piste du Bluetooth. Pouvez-vous m'indiquer un code source pour le bluetooth .NET compact framework 3.5 smart device en vb.net surtout la partie "reading data".
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
3 mai 2012 à 13:59
Bonjour,

En cherchant rapidement de l'aide sur "NetCFv35.messages.EN.wm.cab", j'ai plein de réponse.
Je ne crois pas que le fait de passer par BlueTooth changera vraiment la donne.

As-tu essayé le câble sur un PC ?
Cela t'as-t-il créé un nouveau port COM ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
topogeomatic Messages postés 7 Date d'inscription mardi 3 avril 2012 Statut Membre Dernière intervention 7 mai 2012
3 mai 2012 à 19:47
Bonjour,

Le bluetooth a bien marché pour lire les données, seulement il reste un petit problème. Je reçois la trame de données la première fois, la deuxième fois, la 3ème fois et tout un coup ==> une erreur TimeoutException qui s'affiche.
J'espère avoir une solution à ce problème pour clore cette étape de lecture de données, et merci bien Mr.NHenry pour votre aide.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
3 mai 2012 à 20:03
Bonjour,

Désolé, mais je ne maitrise pas cette technologie.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
topogeomatic Messages postés 7 Date d'inscription mardi 3 avril 2012 Statut Membre Dernière intervention 7 mai 2012
7 mai 2012 à 14:24
Bonjour,

Maintenant après avoir lu ma phrase par bluetooth, je reçois une nullreferenceexception quand je veux faire des manipulations sur cette trame.

voici le code:
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived

        Donnée_serie = SerialPort1.ReadLine() 'récupère une ligne de la trame GPS

        If Me.InvokeRequired Then
            Me.BeginInvoke(New Affiche_ASCII(AddressOf _Affiche_ASCII), Donnée_serie) 'lancer la procédure une fois les données reçues
        Else
            TextBox1.Text = Donnée_serie
        End If
        If Me.InvokeRequired Then
            Me.BeginInvoke(New Dessin(AddressOf _dessin), Donnée_serie)
        
        End If
    End Sub
    Private Sub _Affiche_ASCII(ByVal valeur As String)

        If valeur <> "" Then                                        'si valeur n'est pas vide
            Try
                TextBox1.Text = valeur
            Catch ex As TimeoutException
                ' Do nothing
            End Try
        End If
    End Sub

    Private Sub _dessin(ByRef trame As String)
        trame = SerialPort1.ReadLine
        If trame <> "" Then
            Try
                If trame(10) = "0" Then
                    distance.Add(CDbl(Replace(trame.Substring(10, 4), ".", ",")))
                    MsgBox(distance(0))
                Else
                    distance.Add(CDbl(Replace(trame.Substring(10, 5), ".", ",")))
                    MsgBox(distance(0))
                End If

                If trame(15) = "M" Then
                    If trame(17) = "0" Then
                        angle.Add(CDbl(Replace(trame.Substring(17, 4), ".", ",")))
                        MsgBox(angle(0))
                    Else
                        angle.Add(CDbl(Replace(trame.Substring(17, 5), ".", ",")))
                        MsgBox(angle(0))
                    End If
                ElseIf trame(16) = "M" Then
                    If trame(18) = "0" Then
                        angle.Add(CDbl(Replace(trame.Substring(18, 4), ".", ",")))
                        MsgBox(angle(0))
                    Else
                        angle.Add(CDbl(Replace(trame.Substring(18, 5), ".", ",")))
                        MsgBox(angle(0))

                    End If
                End If
                If distance.Count 1 Or angle.Count 1 Then
                    x = 100 + distance(0) * Sin((angle(0) * 180) / PI)
                    y = 100 + distance(0) * Cos((angle(0) * 180) / PI)
                    MsgBox(x)
                    MsgBox(y)
                    x = Round(x * 100)
                    y = Round(y * 100)
                    Point(x, y)
                    previous_point.X = x
                    previous_point.Y = y

                ElseIf distance.Count > 1 Or angle.Count > 1 Then
                    x = 100 + distance(distance.Count - 1) * Sin((angle(angle.Count - 1) * 180) / PI)
                    y = 100 + distance(distance.Count - 1) * Cos((angle(angle.Count - 1) * 180) / PI)
                    MsgBox(x)
                    MsgBox(y)
                    x = Round(x * 100)
                    y = Round(y * 100)
                    Point(x, y)
                    next_point.X = x
                    next_point.Y = y
                    Ligne(previous_point, next_point)
                    previous_point = next_point
                End If
            Catch ex As TimeoutException
                ' Do nothing
            End Try
        End If
    End Sub


J'ai besoin de régler ce problème (nullreferenceexception), et surtout qu'à partir de maintenant le code va rencontrer plusieurs problèmes avec ce multithreading ??!!!!
0
Rejoignez-nous