Communication rs485

bilel60 Messages postés 5 Date d'inscription mercredi 23 novembre 2005 Statut Membre Dernière intervention 2 mai 2006 - 28 avril 2006 à 16:48
bilel60 Messages postés 5 Date d'inscription mercredi 23 novembre 2005 Statut Membre Dernière intervention 2 mai 2006 - 2 mai 2006 à 11:54
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 MSComm1If 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
 

5 réponses

cs_pluplu Messages postés 615 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 4 juillet 2012
28 avril 2006 à 18:40
Le mode de liaison  RS232  est simple puisqu'il ne relie que deux devices entre eux, tandis que le mode de fonctionnement RS485 est plus complexe puisque sur un seul bus de deux fils on peut communiquer avec une trentaine de devices, donc il faut savoir qui cause avec qui et quand, pour cela le mode RS485 utilise un protocole comme MODBUS ou autres donc il faut remanier ton code en conséquence.

Pascal Laurençon
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
29 avril 2006 à 01:57
Salut
A ma connaissance, on ne peut pas connecter directement du RS485 sur un port série de PC, à moins qu'il s'agisse d'une carte additionnelle capable de.
RS485 n'est pas un protocole de communication, mais une caractéristique technique de communication (définition du brochage 2 fils).
Donc, il faudra un convertisseur externe RS232 / RS485
Comme l'a dit Pluplu, si tu dois dialoguer avec plusieurs "clients", il va falloir en plus gérer un protocole du genre JBus / ModBus.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
2 mai 2006 à 11:09
Salut 629243 bilel60, salut =20978 pluplu, salut jack,

parfaitement d'accord avec ce qui a été dit.

Je souhaitais juste rajouter qu'il y a des chances que le protocole à utiliser soit déterminé par l'appareil que tu utilises.
Dans certains cas (genre les terminaux Proface), la seule difference entre un dialogue RS232 et RS485 est le rajout, dans la trame, de l'identifiant du client auquel tu t'adresses (sous forme d'entier).

par contre, pas moyen à ma connaissance d'économiser l'achat d'un convertisseur.

PS: attention toujours à la longueur des cables.

à+

rvblogn

<sup>
</sup><sup>Je veux ton bien... et je l'aurais... mais jamais avant la page 4
</sup>
0
bilel60 Messages postés 5 Date d'inscription mercredi 23 novembre 2005 Statut Membre Dernière intervention 2 mai 2006
2 mai 2006 à 11:54
Salut les amis et merci encore, je vais donc pensher pour l'utilisation d'un convertisseur externe, merci encore et a bientot
0

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

Posez votre question
bilel60 Messages postés 5 Date d'inscription mercredi 23 novembre 2005 Statut Membre Dernière intervention 2 mai 2006
2 mai 2006 à 11:54
Salut les amis et merci encore, je vais donc pensher pour l'utilisation d'un convertisseur externe, merci encore et a bientot
0
Rejoignez-nous