Bonjour,

étant toujours sur mon programme gérant une liaison série RS485, j'ai décidé de tester la communication entre le module (esclave) et mon PC (maitre) avec un programme en VB que j'ai trouvé sur le net. Or je suis totalement débutant dans ce langage, même s'il semble abordable et très parlant.

Voilà le programme que j'ai trouvé :
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
###############################################################################################
'##########                       PROCEDURE LECTURE DE N MOTS                          #########
'###############################################################################################
 
 
Public Sub Acquisition(cent, Nb_mots, adresse_poidsfort, adresse_poidsfaible, Index)
 
Dim i, j As Integer
 
'Création d'un tableau pour sauvegarder les valeurs
 
For i = 0 To 55
    TABLEAU(i, Index) = 0
Next i
 
Sleep (80)
 
'''''''''''''''''''''''''''''''''' Constitution de la trame d'emission''''''''''''''''''''''''''''''''''
 
TRAME(0) = cent                 'adresse modbus du guide coke choisi
TRAME(1) = 3                    'code requete modbus permettant la lecture de N mot
TRAME(2) = adresse_poidsfort    'adresse poids fort de début de lecture des mots
TRAME(3) = adresse_poidsfaible  'adresse poids faible de début de lecture des mots
TRAME(4) = 0                    'nombre de mots poids fort, ici zéro met en evidence qu'on ne lit pas plus de F mots
TRAME(5) = Nb_mots              'nombre de mots poids faible (Fh max, ou 15d)
 
'Calcul du CRC
 
CRC = &HFFFF&
For i = 0 To 5
    CRC = TRAME(i) Xor CRC
    For j = 0 To 7
        R = CRC Mod 2                 'donne le retenue de la division par 2
        CRC = Fix(CRC / 2)            'decalage vers la droite d'1 bit en divisant par 2
        If R = 1 Then                 'test depassement de capacité
            CRC = CRC Xor &HA001&
        End If
    Next j
Next i
CRC_MSB = Fix(CRC / 256)
CRC_LSB = CRC And 255
 
TRAME(6) = CRC_LSB
TRAME(7) = CRC_MSB
 
 
 
'''''''''''''''''''''''''''''''''''' Envoie de la trame ''''''''''''''''''''''''''''''''''''
 
Form1.MSComm1.Output = Chr$(TRAME(0))       'Adresse station
Form1.MSComm1.Output = Chr$(TRAME(1))       'Code requete de lecture
Form1.MSComm1.Output = Chr$(TRAME(2))       'Adresse debut poids fort
Form1.MSComm1.Output = Chr$(TRAME(3))       'Adresse debut poids faible
Form1.MSComm1.Output = Chr$(TRAME(4))       'Nombre de mots a lire poids fort
Form1.MSComm1.Output = Chr$(TRAME(5))       'Nombre de mots a lire poids faible
Form1.MSComm1.Output = Chr$(TRAME(6))       'CRC poids faible
Form1.MSComm1.Output = Chr$(TRAME(7))       'CRC poids fort
 
'''''''''''''''''''''''''''''' Lecture de la trame de reponse '''''''''''''''''''''''''''''''
TRAME(0) = Input_comm(1)                     'Adresse station
TRAME(1) = Input_comm(1)                     'Code requete de lecture
TRAME(2) = Input_comm(1)                     'Nombre d'octets envoyes
 
For i = 0 To TRAME(2) - 1
     TRAME(3 + i) = Input_comm(1)            'Lecture des mots
     DoEvents
     Sleep (10)
Next i
 
TRAME(3 + TRAME(2)) = Input_comm(1)          'CRC poids faible
TRAME(4 + TRAME(2)) = Input_comm(1)          'CRC poids fort
 
''''''''''''''''''''''''''''''''''' Verification CRC '''''''''''''''''''''''''''''''''''''''''
 
'Calcul du CRC
CRC = &HFFFF&
For i = 0 To (2 + TRAME(2))
    CRC = TRAME(i) Xor CRC
    For j = 0 To 7
        R = CRC Mod 2
        CRC = Fix(CRC / 2)
        If R = 1 Then
            CRC = CRC Xor &HA001&
        End If
    Next j
Next i
CRC_MSB = Fix(CRC / 256)
CRC_LSB = CRC And 255
 
 
'Test validite du CRC
If CRC_MSB = TRAME(4 + TRAME(2)) And CRC_LSB = TRAME(3 + TRAME(2)) Then
            For i = 1 To TRAME(2) Step 2
                TR = TRAME(3 + i - 1) * 256 + TRAME(3 + i)
                TRAME(3 + i - 1) = Int(TR / 100)
                TRAME(3 + i) = Int(TR - (TRAME(3 + i - 1) * 100))
                TABLEAU(i, Index) = TRAME(3 + i)
                TABLEAU(i - 1, Index) = TRAME(3 + i - 1)
            Next i
Else
    Error 1003
End If
 
 
End Sub
sources : Forum de gs-computer

J'ai en compilant ce programme deux erreurs :
  • 'Sub Main' est introuvable dans 'ConsoleApplication1.Module1'.
  • 'If', 'ElseIf', 'Else, 'End If', 'Const' ou 'Region' attendu.
  • Instruction non valide dans un espace de noms


Pouvez vous me donner un coup de main pour résoudre ses erreurs là SVP.

Je dois également à priori affecter des valeurs en Hexadécimale par exemple dans le tableau Trame() du début j'imagine ?

A noter que j'utilise Visual Basic 2008 Express. Est ce le logiciel adéquate ?