Lecture sur le port série?

benrichl Messages postés 8 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 14 mars 2005 - 7 avril 2004 à 13:10
benrichl Messages postés 8 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 14 mars 2005 - 7 avril 2004 à 17:45
Je suis entrin d'écrire une application en visual basic qui me permettrait de me connecter à une plate-forme par l'intermédiaire d'un port série et d'en recueillir des informations que j'aurai à traiter dans l'application.Je me connecte à la plate-forme sauf que les caractères que je reçois ne sont pas ceux que je voudrais avoir.Je fais la connection par le composant mscomm de VB que je paramètre.Ce qui est bizarre c'est que sur le même poste,on utilise l'hyperterminal de windows pr se connecter à la même plate-forme et il n'y a pas du tout de problèmes.Les paramètres que j'utilise pour le mscomm sont les mêmes que ceux utilisés pr l'hyperterminal.J'utilise la commande "mscomm.input" pr lire et je fais une conversion par la fonction "strConv" de VB et en envoyant les informations dans un textbox,si le script de la police utilisée pour le textbox est différent du grec les caractères que je reçois sont très bizarres mais si c'est du grec j'arrive quand même à recevoir certains caractères sauf que le "R" est changé en un petit carré,le signe "=" en 1/2,le signe ">" en upsilon,le retour chariot est symbolisé par 2 petits carrés,le "n" par epsilon,le "d" par petit delta,le"a" par alpha.C'est seulement çà que j'ai pu constater mais je suis sûr qu'il doit en avoir plein d'autres.Si je n'utilise pas la fonction de conversion "StrConv",je ne reçois que des points d'interrogation et des "1/2".
Je ne sais pas comment faire pour avoir les bons caractères.SVP aidez-moi!C'est un projet de fin d'étude que je dois rendre d'ici fin Mai et cette étape conditonne l'évolution de tout le projet.
Indiquez-moi SVP,comment je pourrais récupérer les données sur le port et si je dois utiliser un composant pour émuler le port,lequel il faudrait.
Merci!

2 réponses

ultraxa Messages postés 127 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 21 janvier 2007
7 avril 2004 à 17:06
bon c'est diffivcile de repondre qd on a pas le code devant soi
mais normalement c'est du string qui sort du mscomm , en plus si ça marche sur un hyperterminal ça devrait marcher ...
par contre aurait tu peu etre un probleme de buffer , va voir ds les codes vbfrance en faisant une recherche "hyperterminal" , je me souviens que j'avais telechargé une source hyperterminal.
0
benrichl Messages postés 8 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 14 mars 2005
7 avril 2004 à 17:45
Voici le code que j'ai écrit pour faire d'abord un test.Normalement mon but c'est d'envoyer les informations reçues dans un fichier pour les traiter.

Option Explicit
Dim Ret As Integer ' Variable de travail sous forme d'entier.
Dim Temp As String ' Variable de travail sous forme de chaîne de caractère.
Dim hLogFile As Integer ' Descripteur du fichier d'informations ouvert.
Dim StartTime As Date ' Enregistre l'heure de début pour la minuterie du port.
Dim longueur As Integer
Dim temps As Date, fic
------------------------------------------------------------------
Private Sub Command1_Click()
lbltest.Caption = ""
Call openmsc(MSComm1)
End Sub
------------------------------------------------------------------
Private Sub Command2_Click()
Unload Me
End Sub
------------------------------------------------------------------
Private Sub Form_Load()
With MSComm1
.Settings = "9600,n,8,1"
.CommPort = 1
.Handshaking = comNone
End With
With MSComm1
.RThreshold = 1
.SThreshold = 1
End With
End Sub
------------------------------------------------------------------
Private Sub Form_Unload(Cancel As Integer)
If MSComm1.PortOpen Then MSComm1.PortOpen = False
End Sub
------------------------------------------------------------------
Private Sub MSComm1_OnComm()
Dim EVMsg
MSComm1.InputMode = comInputModeBinary

Select Case MSComm1.CommEvent
Case comEvReceive
Dim tampon$
tampon$ = MSComm1.Input
ShowData txttest, StrConv(tampon$, vbUnicode)
longueur = Len(txttest.Text)
txttest.SetFocus
Case comEvSend
Case comEvCTS

EVMsg = "Changement de : Prêt à émettre (CTS), détecté"
lbltest.Caption = EVMsg
End Select
End Sub
------------------------------------------------------------------
Private Sub Timer1_Timer()
lblTemps.Caption = Format(Now - temps, "hh:mm:ss") & " "

End Sub
------------------------------------------------------------------
Public Sub Debtemps()
temps = Now
Timer1.Enabled = True
End Sub
------------------------------------------------------------------
Public Sub Fintemps()
Timer1.Enabled = False
lblTemps.Caption = ""
End Sub
------------------------------------------------------------------
Public Sub openmsc(msc As MSComm)
MSComm1.PortOpen = Not MSComm1.PortOpen
If MSComm1.PortOpen Then
Debtemps
Else
Fintemps
End If

End Sub
------------------------------------------------------------------
Private Static Sub ShowData(Term As Control, Data As String)
On Error GoTo Handler
Const MAXTERMSIZE = 16000
Dim TermSize As Long, i

' Vérifie que le texte existant ne devient pas trop grand.
TermSize = Len(Term.Text)
If TermSize > MAXTERMSIZE Then
Term.Text = Mid$(Term.Text, 4097)
TermSize = Len(Term.Text)
End If

' Pointe à la fin des données du contrôle Term.
Term.SelStart = TermSize

' Filtre/manipule les caractères de retour arrière.
Do
i = InStr(Data, Chr$(8))
If i Then
If i = 1 Then
Term.SelStart = TermSize - 1
Term.SelLength = 1
Data = Mid$(Data, i + 1)
Else
Data = Left$(Data, i - 2) & Mid$(Data, i + 1)
End If
End If
Loop While i

' Élimine les sauts de ligne.
' Do
' i = InStr(Data, Chr$(10))
' If i Then
' Data = Left$(Data, i - 1) & Mid$(Data, i + 1)
' End If
' Loop While i

' Vérifie que tous les retours chariot ont un saut de ligne.
i = 1
Do
i = InStr(i, Data, Chr$(13))
If i Then
Data = Left$(Data, i) & Chr$(10) & Mid$(Data, i + 1)
i = i + 1
End If
Loop While i

' Ajoute les données filtrées à la propriété SelText.
Term.SelText = Data

Exit Sub

Handler:
MsgBox Error$
Resume Next
End Sub
------------------------------------------------------------------
Private Sub txttest_KeyPress(KeyAscii As Integer)
Dim compte As Integer, nom As String
compte = Len(txttest.Text)
If KeyAscii = 13 Then
nom = Mid$(txttest.Text, longueur, compte - longueur)
MSComm1.Output = nom
End If
End Sub

Si c'est du string qui sort du port série,il faudrait savoir le jeu de caractères utilisé non?Si c'est ANSI,Unicode,ASCII ou autres.Qu'entendez-vous aussi par problème de buffer? :question)
0
Rejoignez-nous