Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

SerialPort et vb2005 : j'arrive pas ...

2 réponses
Avatar
Bertrand CHARLOTTIN
Bonjour,
il y a qq années, je récupérais des données via une liaison série en basic.

20 OPEN "COM1:1200,N,7,2,RS,CS,DS,CD" FOR RANDOM AS #1
30 PRINT #1, "D" : REM envoi d'un caractère au multimètre
40 in$ = INPUT$(14, #1) : REM longueur de chaîne renvoyée 14 caractères
50 PRINT TIME$, in$ : REM affichage du temps et de la chaîne lue
Je récupère des données en clair, sauvegardées dans un fichier .TXT, c'est
en fait un multimètre numérique.


Je me remets à la programmation, j'ai installé VB2005 express beta 2 avec le
framework.net 2.0.
Je n'arrive pas à reproduire la même manip simplement en VB.
Je trouve bien les ports comms avec ce qui suit: (exemples MSDN)
mëme les ports USB - série sont reconnus.

For Each sp As String In My.Computer.Ports.SerialPortNames
ListBox1.Items.Add(sp)
Next

J'ai essayé readstring : le prog se bloque sur la ligne "incoming =
com1.ReadString()"
J'ai essayé readChar : le prog se bloque sur la ligne "incoming =
com1.ReadChar()" au second passage de la boucle.
Le openserialport n'accepte pas plus de 4 données, je ne peux pas passer les
infos RTS CTS DSR et DCD.

Le serialport est visiblement une des nouveautées du framework 2.0, et je ne
trouve pas d'infos me sortant de cette impasse ...

(exemples modifiés de MSDN également)
Dim returnStr As String = ""
Dim incoming As String

Using com1 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM1", 1200,
IO.Ports.Parity.None, 7, IO.Ports.StopBits.Two)
Dim i = 0
Do While i <> 2
i = i + 1
'com1.WriteLine("D") 'l envoi du caractère D provoque l
emission des données mesurées par l'appateil
incoming = com1.ReadChar()
If incoming Is Nothing Then
Exit Do
Else
returnStr &= incoming & vbCrLf
ListBox1.Items.Add(incoming)
End If
Loop
End Using

ListBox1.Items.Add(returnStr)

Si qqun a une idée ou une piste pour un exemple, je prends !!!
PS: premier post sur dotnet au lieu de donet.vb, sry ...
Bertrand

2 réponses

Avatar
Bertrand CHARLOTTIN
Je précise quand même que je dialogue avec d'autres périphériques, par ex
GPS.
Pour celà: serialport va très bien comme indiqué sur MSDN.
mais le petit multimètre d'il y a 10 ans à 100 balles, pas moyen de lui
adresser la parole.


quand j'envoie une demande d'émission de donnée ("D"), la relecture du
buffet TX est à 0.
- soit erreur de codage sur l'émission de la donnée - soit la donnée est
bien partie.
le buffer RX reste désespérément à 0, d'ou le plantage dans la tentative de
lecture sans gerer d'exeptions.

une idée ?



"Bertrand CHARLOTTIN" a écrit dans le message de news:
43512b70$0$17236$
Bonjour,
il y a qq années, je récupérais des données via une liaison série en
basic.

20 OPEN "COM1:1200,N,7,2,RS,CS,DS,CD" FOR RANDOM AS #1
30 PRINT #1, "D" : REM envoi d'un caractère au multimètre
40 in$ = INPUT$(14, #1) : REM longueur de chaîne renvoyée 14 caractères
50 PRINT TIME$, in$ : REM affichage du temps et de la chaîne lue
Je récupère des données en clair, sauvegardées dans un fichier .TXT, c'est
en fait un multimètre numérique.


Je me remets à la programmation, j'ai installé VB2005 express beta 2 avec
le
framework.net 2.0.
Je n'arrive pas à reproduire la même manip simplement en VB.
Je trouve bien les ports comms avec ce qui suit: (exemples MSDN)
mëme les ports USB - série sont reconnus.

For Each sp As String In My.Computer.Ports.SerialPortNames
ListBox1.Items.Add(sp)
Next

J'ai essayé readstring : le prog se bloque sur la ligne "incoming > com1.ReadString()"
J'ai essayé readChar : le prog se bloque sur la ligne "incoming > com1.ReadChar()" au second passage de la boucle.
Le openserialport n'accepte pas plus de 4 données, je ne peux pas passer
les
infos RTS CTS DSR et DCD.

Le serialport est visiblement une des nouveautées du framework 2.0, et je
ne
trouve pas d'infos me sortant de cette impasse ...

(exemples modifiés de MSDN également)
Dim returnStr As String = ""
Dim incoming As String

Using com1 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM1", 1200,
IO.Ports.Parity.None, 7, IO.Ports.StopBits.Two)
Dim i = 0
Do While i <> 2
i = i + 1
'com1.WriteLine("D") 'l envoi du caractère D provoque l
emission des données mesurées par l'appateil
incoming = com1.ReadChar()
If incoming Is Nothing Then
Exit Do
Else
returnStr &= incoming & vbCrLf
ListBox1.Items.Add(incoming)
End If
Loop
End Using

ListBox1.Items.Add(returnStr)

Si qqun a une idée ou une piste pour un exemple, je prends !!!
PS: premier post sur dotnet au lieu de donet.vb, sry ...
Bertrand




Avatar
TroXsA
Bonjour

Je pense qu'avec WMI tu auras plus de chance a fait ce que tu veux ....


--
Mail : http://cerbermail.com/?rIXgaw9Xsl
Site : http://planetenova.free.fr/


"Bertrand CHARLOTTIN" a écrit dans le message de news:
43512b70$0$17236$
Bonjour,
il y a qq années, je récupérais des données via une liaison série en
basic.

20 OPEN "COM1:1200,N,7,2,RS,CS,DS,CD" FOR RANDOM AS #1
30 PRINT #1, "D" : REM envoi d'un caractère au multimètre
40 in$ = INPUT$(14, #1) : REM longueur de chaîne renvoyée 14 caractères
50 PRINT TIME$, in$ : REM affichage du temps et de la chaîne lue
Je récupère des données en clair, sauvegardées dans un fichier .TXT, c'est
en fait un multimètre numérique.


Je me remets à la programmation, j'ai installé VB2005 express beta 2 avec
le
framework.net 2.0.
Je n'arrive pas à reproduire la même manip simplement en VB.
Je trouve bien les ports comms avec ce qui suit: (exemples MSDN)
mëme les ports USB - série sont reconnus.

For Each sp As String In My.Computer.Ports.SerialPortNames
ListBox1.Items.Add(sp)
Next

J'ai essayé readstring : le prog se bloque sur la ligne "incoming > com1.ReadString()"
J'ai essayé readChar : le prog se bloque sur la ligne "incoming > com1.ReadChar()" au second passage de la boucle.
Le openserialport n'accepte pas plus de 4 données, je ne peux pas passer
les
infos RTS CTS DSR et DCD.

Le serialport est visiblement une des nouveautées du framework 2.0, et je
ne
trouve pas d'infos me sortant de cette impasse ...

(exemples modifiés de MSDN également)
Dim returnStr As String = ""
Dim incoming As String

Using com1 As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort("COM1", 1200,
IO.Ports.Parity.None, 7, IO.Ports.StopBits.Two)
Dim i = 0
Do While i <> 2
i = i + 1
'com1.WriteLine("D") 'l envoi du caractère D provoque l
emission des données mesurées par l'appateil
incoming = com1.ReadChar()
If incoming Is Nothing Then
Exit Do
Else
returnStr &= incoming & vbCrLf
ListBox1.Items.Add(incoming)
End If
Loop
End Using

ListBox1.Items.Add(returnStr)

Si qqun a une idée ou une piste pour un exemple, je prends !!!
PS: premier post sur dotnet au lieu de donet.vb, sry ...
Bertrand