bilel60
Messages postés5Date d'inscriptionmercredi 23 novembre 2005StatutMembreDernière intervention 2 mai 2006
-
28 avril 2006 à 16:48
bilel60
Messages postés5Date d'inscriptionmercredi 23 novembre 2005StatutMembreDerniè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 "
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
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
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
cs_pluplu
Messages postés615Date d'inscriptionmercredi 18 décembre 2002StatutMembreDerniè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.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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
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>