slt
svp on veut s'avoir comment faire une communication entre PC et Récepteur de Basse fréquence en utilisent SerialPort RS32 (VB 10 express )
merci
slt
svp on veut s'avoir comment faire une communication entre PC et Récepteur de Basse fréquence en utilisent SerialPort RS32 (VB 10 express )
merci
Less Is More
Pensez à utiliser les boutons , et les balises code
Desole pour l'absence d'accents, clavier US oblige
Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.
Slt
j'ai arrivé de faire la réception entre pc et un récepteur avec càble RS32 mais à la réception les données ne sont pas clair ; ils sont écris en "?" ;voici le code SVP trouvez moi une solution
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89 Imports System Imports System.ComponentModel Imports System.Threading Imports System.IO.Ports Public Class Form1 Dim myPort As Array 'COM Ports detected on the system will be stored here Delegate Sub SetTextCallback(ByVal [text] As String) 'Added to prevent threading errors during receiveing of data Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'When our form loads, auto detect all serial ports in the system and populate the cmbPort Combo box. myPort = IO.Ports.SerialPort.GetPortNames() 'Get all com ports available ComboBox2.Items.Add(9600) 'Populate the cmbBaud Combo box to common baud rates used ComboBox2.Items.Add(19200) ComboBox2.Items.Add(38400) ComboBox2.Items.Add(57600) ComboBox2.Items.Add(115200) For i = 0 To UBound(myPort) ComboBox1.Items.Add(myPort(i)) Next ComboBox1.Text = ComboBox1.Items.Item(0) 'Set cmbPort text to the first COM port detected ComboBox2.Text = ComboBox2.Items.Item(0) 'Set cmbBaud text to the first Baud rate on the list Button2.Enabled = False 'Initially Disconnect Button is Disabled End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click SerialPort1.PortName = ComboBox1.Text 'Set SerialPort1 to the selected COM port at startup SerialPort1.BaudRate = ComboBox2.Text 'Set Baud rate to the selected value on 'Other Serial Port Property SerialPort1.Parity = IO.Ports.Parity.None SerialPort1.StopBits = IO.Ports.StopBits.One SerialPort1.DataBits = 8 'Open our serial port SerialPort1.Open() Button1.Enabled = False 'Disable Connect button Button2.Enabled = True 'and Enable Disconnect button End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click SerialPort1.Close() 'Close our Serial Port Button1.Enabled = True Button2.Enabled = False End Sub Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged If SerialPort1.IsOpen = False Then SerialPort1.PortName = ComboBox1.Text 'pop a message box to user if he is changing ports Else 'without disconnecting first. MsgBox("Valid only if port is Closed", vbCritical) End If End Sub Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived ReceivedText(SerialPort1.ReadExisting()) 'Automatically called every time a data is received at the serialPort 'compares the ID of the creating Thread to the ID of the calling Thread End Sub Private Sub ReceivedText(ByVal [text] As String) If Me.RichTextBox1.InvokeRequired Then Dim x As New SetTextCallback(AddressOf ReceivedText) Me.Invoke(x, New Object() {(text)}) Else Me.RichTextBox1.Text &= [text] End If End Sub Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged If SerialPort1.IsOpen = False Then SerialPort1.BaudRate = ComboBox2.Text 'pop a message box to user if he is changing baud rate Else 'without disconnecting first. MsgBox("Valid only if port is Closed", vbCritical) End If End Sub End Class
J'adore la réponse de DotNetMatt
est ton amis, MSDN est ton maître, pour le reste il y a Developpez.net. Pensez au au et
Salut,
Déjà, il faudrait que tu utilise les balise CODE (dièse dans la saisie) pour qu'on arrive à lire un truc faisable.
Ensuite, l'event DataReceived est très rapide, je te conseille de mettre une Sleep avant la fonction pour être sur que toute la réponse soit arrivée avant de la traiter, ca économisera un peu les ressources du PC.
Le stockage de la trame dans un TextBox est pour le retraitement derrière ? Est-ce que tu connais ton protocole et la structure de la trame de retour ?
Slt
non je ne connais pas la structure de trame mais je Crois que le protocole est celle de Null modem (MODBUS?!!!)
Merci
Le protocole ModBus c'est du RS232.
Ensuite, si tu veux des infos sur le mode RTU > http://paladin-world.com/resume-modbus-rtu-en-vb/
Je n'ai rien pour le mode TCP.
Tu utilise quoi ?
Salut ,
le Null Modem c'est le RS232
le lien est "404 Not Found "
Bonjour
j'ai arrivé de convertir les données mais ils apparaissent les mêmes donc notre application ne différentier pas les fréquences ; alors que j'ai tester avec hyper terminal (il faire la réception des tous les données arrivées sur ports serial )
et ne sont pas les mêmes voici le code de notre procédure de réception :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Private Sub ReceivedText(ByVal [text] As String) If Me.RichTextBox1.InvokeRequired Then Dim x As New SetTextCallback(AddressOf ReceivedText) Me.Invoke(x, New Object() {([text])}) Else Me.RichTextBox1.Text &= [text] End If Dim ch, c, Out As String Dim len, i As Integer len = RichTextBox1.TextLength ch = RichTextBox1.Text Out = "" For i = 1 To len c = Mid(ch, i, 1) Out = Out & Conversion.Hex(Asc(c)) Next RichTextBox2.Text = Out End Sub
aidez moi SVP
Il faudrait répondre aux questions qu'on te pose pour qu'on puisse t'aider :
Tu transmets en RTU ou TCP ?
Et qu'est-ce que tu appelles fréquence ? Car à ma connaissance on ne parle pas de fréquence en communication ModBus.
Ensuite ta conversion en hexa est mauvaise, tu fais une conversion caractère par caractère alors qu'une trame de réponse se compose de mots, tu ne peux pas la traduire à l'arrache.
Chaque mot correspond à une résultat de la demande, mais il faut pour la décoder savoir si tu tente de lire une information ou d'en envoyer une.
Je te conseilles la lecture du lien que je t'ai donné : http://paladin-world.com/resume-modbus-rtu-en-vb/
Sauf si tu utilise le mode TCP.... mais ça on l'ignore encore.
Salut ,
Ecoute mon projet se décompose en deux deux partie :
1er : contient des émetteurs de basses fréquences et un seul récepteur. ce dernier vas traiter ces fréquences et les envoyés vers le pc sur Câble RS32 dans des trames (cette partie je l'ignore )
2éme : mon travail de faire traité ces données reçus (j'ai fais la réception des données avec l’hyperterminal et j'observe que chaque émetteur à une signe spécial quand je clique sur eu et quand je levé la main c à d état 1 et état 0 mais n'est pas clair alors que mon application ne différentier pas "les fréquences" plutôt les trames )
autre remarque récepteur de baude rate = 57600
bit de stop one , trame 8 bits !!!!
Avant de vouloir récupérer les infos, il faut savoir quel est le mode de communication (RTU ou TCP) du ModBus, et comment se compose une trame d'envoie, et une trame de retour.
On va essayer de faire simple car tu ne répond toujours pas à la question.
Tu utilise un câble 2 fils (A et B) avec un convertisseur ? (c'est du RTU)
Tu utilise un câble réseau (RJ45) ? (c'est du TCP)
Et encore une fois, j'ai donné un lien... mais on va dire que t'as eu le temps de regarder. Cette fois, si tu va pas voir le lien, je ne peux rien pour toi tout est dedans : http://paladin-world.com/recevoir-une-trame-en-modbus/
slt ,
Je m'excuse , J'utilise RTU
Les liens que je t'ai donné contienne des codes à copier/coller. Tout est détaillé.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager