Bonjour à tous,
Je me permets de vous écrire pour vous demander de l'aide pour le projet que je suis en train de créer.
En effet mon projet consiste à dialoguer avec ma centrale d'alarme sur port série RS232.
Le but est d'interpréter la réception des trames reçues de la centrale. A ce jour j'ai créé un Windows form pour mes essais, j'arrive bien à dialoguer avec ma centrale c'est-à-dire que pour qu'elle me réponde il faut que je lui envoie une trame avec un code intégré puis celle-ci me répond, le problème est que dans le SerialPort1_DataReceived avec SerialPort1.ReadExisting je peux interpréter la réponse à l'initialisation de ma centrale mais si je renvoie une nouvelle trame pour par exemple lui demander si mon système est armé je n'arrive pas à récupérer cette trame pour ensuite arrêter un service.
Le but après sera de créer un service Windows qui gérera automatiquement les données reçues de ma centrale: interrogation en permanence de la centrale pour avoir l'état de marche arrêt, si système à l'arrêt alors service Y suspendu et si système en marche alors service Y démarré.
Voici le code que j'utilise :
Merci d'avance pour votre aide
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 Imports System Imports System.Threading Imports System.IO.Ports Imports System.ComponentModel Imports System.Text Imports System.ServiceProcess Public Class Form1 <BrowsableAttribute(True)> _ Public Property Handshake As Handshake Delegate Sub SetTextCallback(ByVal [text] As String) Dim readbuffer As String Dim sc As New ServiceController("ivsVideoServerService") Dim holder As String Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load With SerialPort1 .PortName = "COM1" .BaudRate = 4800 End With SerialPort1.DtrEnable = True Button2.Enabled = False End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click SerialPort1.Open() If SerialPort1.IsOpen Then SerialPort1.Close() SerialPort1.Open() End If Button1.Enabled = False Button2.Enabled = True Button4.Enabled = True End Sub '------------------------------------------------ Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click SerialPort1.Encoding = System.Text.Encoding.GetEncoding(28591) SerialPort1.Write(Init) ' Thread.Sleep(3000) ' SerialPort1.Write(DemandeEtatGroup) End Sub Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click SerialPort1.Close() Button1.Enabled = True Button2.Enabled = False Button4.Enabled = False End Sub Private Init() As Char = (Chr(94) & Chr(94) & Chr(94) & Chr(94) & Chr(32) & Chr(0) & Chr(1) & Chr(6) & Chr(1) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(215) & Chr(112)) Private RepInit() As Char = (Chr(94) & Chr(65) & Chr(0) & Chr(49) & Chr(224)) Private DemandeEtatGroup() As Char = (Chr(94) & Chr(32) & Chr(0) & Chr(96) & Chr(2) & Chr(1) & Chr(1) & Chr(120) & Chr(235)) Private G1arme() As Char = (Chr(94) & Chr(64) & Chr(0) & Chr(97) & Chr(2) & Chr(1) & Chr(128) & Chr(176)) Private G1desarme() As Char = (Chr(94) & Chr(64) & Chr(0) & Chr(97) & Chr(2) & Chr(1) & Chr(0) & Chr(177) & Chr(119)) Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived Dim tramerecu As String tramerecu = SerialPort1.ReadExisting() Thread.Sleep(3000) If tramerecu = RepInit Then SerialPort1.Write(DemandeEtatGroup) Else : SerialPort1.Write(DemandeEtatGroup) End If Thread.Sleep(3000) If tramerecu = G1desarme Then sc.Pause() End If Thread.Sleep(3000) If tramerecu = G1arme Then sc.Continue() End If End Sub End Class
Partager