Communication rs232 ascii entre pc et controleur zelio

Contenu du snippet

Requêtes lecture / écriture des variables mots de 16 bits entre le PC et le ZELIO via le cordon SR2CBL01

Source / Exemple :


Sub Requete_Lecture_Zelio()
Dim TXT As String, SS As String, sTXT As String
Dim X As Long, CRC As Long, CX As Long
Dim TRAME(32) As Long, TABLE8W(10) As Long
Dim MSComm1 As New MSComm

'Microsoft Comm Control 6.0
'C:\Windows\System32\MSCOMM32.OCX

'EXEMPLE POUR LIRE 8 MOTS DE 16 BITS A PARTIR DE ADRESSE 25 du bloc SL-OUT

'Délimiteur de début : ":"
TRAME(0) = &H3A
'Adresse de l’esclave : 0x01
TRAME(1) = &H1
'Requête de lecture: 0x03
TRAME(2) = &H3
'Adresse des données : 0x00 00 FF xx
TRAME(3) = &H0: TRAME(4) = &H0: TRAME(5) = &HFF
'xx est un nombre compris entre 0x00 et 0x2F, il correspond à l’adresse de la première donnée à lire moins 1.
TRAME(6) = &H18 '==pour adresse mot 25 ===
'Nombre d’octets : 0xnn
'Cest le nombre de données à lire. 8x2=16 Chaque valeur est constituée de deux octets.
TRAME(7) = &H10

'Calcul du Checksum :
CX = 0
For X = 1 To 7
CX = CX + TRAME(X)
Next X

CRC = (Not CX And 255) + 2 
TRAME(8) = CRC

'Conversion de la Trame en ASCII
TXT = ":"
For X = 1 To 8
TXT = TXT & Right("00" & Hex$(TRAME(X)), 2)
Next X

'Ajout du CR+LF
TXT = TXT & Chr(13) & Chr(10)

'Emission sur COM1
MSComm1.CommPort = 1
MSComm1.Settings = "115000,e,7,1" 
MSComm1.InputLen = 0
MSComm1.PortOpen = True
MSComm1.Output = TXT
Doevents
'Réception sur COM1
sTXT = MSComm1.Input
MSComm1.PortOpen = False

'Extrait la Valeurs des 8 mots de la chaîne ASCII reçue sur sTXT
For X = 0 To 7
TABLE8W(X) = Val("&H" & Mid(sTXT, 8 + (X * 4), 4))
Next X

End Sub

Sub Requete_Ecriture_Zelio()
Dim TXT As String
Dim X As Long, CRC As Long, CX As Long
Dim TRAME(32) As Long
Dim MSComm1 As New MSComm

'Microsoft Comm Control 6.0
'C:\Windows\System32\MSCOMM32.OCX

'EXMPLE POUR ECRIRE A ADRESSE 3 du bloc SL-IN la valeur 8569 
'8569 correspond à H,2179 en hexadécimal.

'Délimiteur de début : ":"
TRAME(0) = &H3A
'Adresse de l’esclave : 0x01
TRAME(1) = &H1
'Requête écriture : 0x10
TRAME(2) = &H10
'Adresse des données : 0x00 00 FF xx
TRAME(3) = &H0: TRAME(4) = &H0: TRAME(5) = &HFF
'xx est un nombre compris entre 0x00 et 0x17, il correspond à l’adresse de la donnée à écrire moins 1.
TRAME(6) = &H2 '==pour adresse api 3 ===
'Nombre d’octets : 0xnn
'Cest le nombre de données à écrire. Chaque valeur 16bits est constituée de deux octets.
TRAME(7) = &H2
'Données à écrire :
TRAME(8) = &H21: TRAME(9) = &H79 ' === pour la valeur 8569 ===

'Calcul du Checksum :
CX = 0
For X = 1 To 9
CX = CX + TRAME(X)
Next X

CRC = (Not CX And 255) + 2
TRAME(10) = CRC

‘Conversion en ASCII
TXT = ":"
For X = 1 To 10
TXT = TXT & Right("00" & Hex$(TRAME(X)), 2)
Next X

'Ajout du CR+LF
TXT = TXT & Chr(13) & Chr(10)

'Emission sur COM1
MSComm1.CommPort = 1
MSComm1.Settings = "115000,e,7,1" 
MSComm1.InputLen = 0
MSComm1.PortOpen = True
MSComm1.Output = TXT
Doevents
MSComm1.PortOpen = False

End Sub

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.