Bonjour tous le monde
Voila j'ai un leger probleme et je souhaiterais avoir de l'aide etant debutant dans la programmation en VB. Donc J'ai créé un petit prog qui doit communiquer avec un autre par port serie, mon programme fonctionne tres bien pour une connection via un cable rs232 mais je voudrai le faire fonctionné aussi via rs485 mais petit souci, je recois bien les information de l'autre pc je n'arrive pas a lui envoyé, mon port et configuré en rs485 half duplex sans Echo. Je vous met mes source pour que vous puissiez eventuellement desselé une erreur.
Merci d'avance
Option Explicit
Dim tampon As String
Dim fermeture As Boolean
Private Sub Command1_Click()
Ouverture (Text1.Text)
End Sub
Private Sub Command2_Click()
MSComm1.PortOpen = False 'on ferme le port quand l'appli quitte
fermeture = True
Text3.SelText = "Fermeture du port com" & Text1.Text & ", "
End Sub
Private Sub Form_Load()
Form1.Caption = "Balance Precia"
Label1.Caption = "Port de Communication"
Label2.Caption = "Chemin du Fichier"
Command1.Caption = " Ouverture manuelle du port "
Command2.Caption = " Fermeture du port "
Text1.Text = ""
Text2.Text = "C:"
Text3.Text = ""
Ouverture (Text1.Text)
End Sub
Private Sub Ouverture(Port As String)
With MSComm1
If Text1.Text = "" Then fermeture = True: Exit Sub
.CommPort = Text1.Text 'on utilise le port COM2: car on utilise 1 PC avec 2 ports COM:
'si vous avez 2 PC, changez en .CommPort=1 !!!
.Handshaking = 2
.RThreshold = 1
.RTSEnable = True
.Settings = "9600,n,8,1"
.SThreshold = 1
.PortOpen = True
End With
Text3.SelStart = Len(Text3.Text)
Text3.SelText = "Ouverture du port com" & Text1.Text & ", "
End Sub
Private Sub Form_Unload(Cancel As Integer)
If fermeture Then Exit Sub
MSComm1.PortOpen = False 'on ferme le port quand l'appli quitte
End Sub
Private Sub MSComm1_OnComm()
Dim InBuff As String
Dim buffer As String
Select Case MSComm1.CommEvent
' On effectue la gestion des erreurs
'liste des erreurs possibles
Case comEventBreak 'On a reçu un signal d'interruption (Break)
Case comEventCDTO ' Timeout de la porteuse
Case comEventCTSTO ' Timeout du signal CTS (Clear To Send)
Case comEventDSRTO ' Timeout du signal de réception
Case comEventFrame ' Erreur de trame
Case comEventOverrun ' Des données ont été perdues
Case comEventRxOver ' Tampon de réception saturé
Case comEventRxParity ' Erreur de parité
Case comEventTxFull ' Tampon d'envoi saturé
Case comEventDCB ' Erreur de réception DCB (jamais vu)
'liste des événements possibles
Case comEvCD 'Changement dans la broche CD (porteuse)
Case comEvCTS 'Changement dans broche CTS
Case comEvDSR 'Changement dans broche DSR (réception)
Case comEvRing 'Changement dans broche RING (sonnerie)
'Reception des donnees
Case comEvReceive
buffer = MSComm1.Input
Call Stock(buffer) 'traitement données
Case comEvSend 'il y a des caractères à envoyer
Case comEvEOF 'on a reçu le caractère EOF
End Select
End Sub
Sub Stock(buffer As String)
tampon = tampon & buffer
If (Len(tampon) > 4) Then Exit Sub
If (Len(tampon) = 4) Then
Call Traitement(tampon)
End If
End Sub
Sub Traitement(tampon As String)
'cette procédure sert à traiter l'information reçue dans le tampon
Text3.SelStart = Len(Text3.Text)
Text3.SelText = "Message Reçu " & tampon & ", " 'ici, on affiche le résultat dans un champ de texte
If (Trim(tampon) = "0D0A") Then
tampon = ""
Call lectureFichierEtTraitement
Exit Sub
End If
'Text3.SelText = " Message reçu : ERROR, "
'MSComm1.PortOpen = False
'Text3.SelText = " Fermeture du port com, "
'Ouverture (Text1.Text)
' If (Trim(tampon) <> "0D0A") Then
'End If
End Sub
Private Sub lectureFichierEtTraitement()
Dim detecteur1et2 As String * 1
Dim detecteur1 As String * 1
Dim detecteur2 As String * 1
Dim radioactivite
Dim bf1, bf2, max1, max2, rad1, rad2
Dim message As String
On Error Resume Next
Close 1
'Text2.Text &
Open Text2.Text & "\NouveauCamion.val" For Input As #1
Line Input #1, radioactivite
Line Input #1, bf1: bf1 = "0000000000" & Trim(bf1)
bf1 = Mid(bf1, Len(bf1) - 10, Len(bf1))
Line Input #1, bf2: bf2 = "00000000000" & Trim(bf2)
bf2 = Mid(bf2, Len(bf2) - 10, Len(bf2))
Line Input #1, max1: max1 = "00000000000" & Trim(max1)
max1 = Mid(max1, Len(max1) - 10, Len(max1))
Line Input #1, max2: max2 = "00000000000" & Trim(max2)
max2 = Mid(max2, Len(max2) - 10, Len(max2))
Line Input #1, rad1: rad1 = Trim(rad1)
Line Input #1, rad2: rad2 = Trim(rad2)
Close #1
detecteur1et2 = "N"
detecteur1 = "N"
detecteur2 = "N"
If (radioactivite = "RAD") Then
If (rad1 = "RAD" And rad2 = "RAD") Then
detecteur1et2 = "O"
detecteur1 = "N"
detecteur2 = "N"
End If
If (rad1 = "RAD" And rad2 <> "RAD") Then
detecteur1 = "O"
End If
If (rad2 = "RAD" And rad1 <> "RAD") Then
detecteur2 = "O"
End If
End If
message = bf1 & ";" & max1 & ";" & bf2 & ";" & max2 & ";" & detecteur1 & detecteur2 & detecteur1et2
Call envoiMessage(message)
End Sub
Private Sub envoiMessage(message As String)
MSComm1.Output = message
End Sub