On reprend la partie programmation avec les constructeurs. Alors sous ce nom barbare se cache en réalité deux fonctions qui permettent de sortir une trame à partir de paramètres.
On commence avec les trames de lecture :
Function ConstructTrameLecture(ByVal func As Integer, ByVal startaddress As Integer, ByVal nbregisters As Integer) As Byte() Dim ByteArr As Byte() Dim s1, s2 As String Dim ss1, ss2, sa1, sa2 As Integer 'Decoupage adresse s1 = Microsoft.VisualBasic.Right(Hex(startaddress), 2) s2 = Replace(Hex(startaddress), s1, "") If s2 = "" Then sa2 = 0 Else sa2 = "&h" & s2 End If sa1 = "&h" & s1 'Decoupage nombre registres s1 = Microsoft.VisualBasic.Right(Hex(nbregisters), 2) s2 = Replace(Hex(nbregisters), s1, "") If s2 = "" Then ss2 = 0 Else ss2 = "&h" & s2 End If ss1 = "&h" & s1 'Construction ByteArr = New Byte() {Convert.ToByte(Val(Form1.SlaveId.Value)), Convert.ToByte(func), Convert.ToByte(sa2), Convert.ToByte(sa1), Convert.ToByte(ss2), Convert.ToByte(ss1)} ByteArr = AddCRC16(ByteArr) Return ByteArr End Function
Pour cette fonction, vous l’aurez remarqué, on a besoin de 3 paramètres :
- La fonction « func » qui peut prendre comme valeur 3 ou 4 (ou autre mais plus rare)
- L’adresse de départ « startaddress » qui indique par quel registre on commence (fonction de la machine)
- Le nombre de registres « nbregisters » (c’est explicite)
La fonction AddCRC16 est aussi nécessaire pour le fonctionnement du constructeur, ainsi que de la Form1 qui contient le numéro d’esclave de la machine.
Le constructeur suivant est plus simple d’utilisation :
Function ConstructTrameEcriture(ByVal address As Integer, ByVal valeur As Integer) As Byte() Dim ByteArr As Byte() Dim s1, s2 As String Dim ss1, ss2, sa1, sa2 As Integer 'Decoupage de Value s1 = Microsoft.VisualBasic.Right(Hex(valeur), 2) s2 = Replace(Hex(valeur), s1, "") If s2 = "" Then ss2 = 0 Else ss2 = "&h" & s2 End If ss1 = "&h" & s1 'Decoupage adresse s1 = Microsoft.VisualBasic.Right(Hex(address), 2) s2 = Replace(Hex(address), s1, "") If s2 = "" Then sa2 = 0 Else sa2 = "&h" & s2 End If sa1 = "&h" & s1 'Construction ByteArr = New Byte() {Convert.ToByte(Form1.SlaveId.Value), Convert.ToByte(16), Convert.ToByte(sa2), Convert.ToByte(sa1), 0, Convert.ToByte(1), Convert.ToByte(2), Convert.ToByte(ss2), Convert.ToByte(ss1)} ByteArr = AddCRC16(ByteArr) Return ByteArr End Function
Les deux paramètres sont très simples :
- « address » indique le registre à modifier
- « valeur » la valeur à appliquer à ce registre
Les pré-requis sont les mêmes que pour l’autre constructeurs.
C’est tout pour aujourd’hui, dans le prochain épisode, vous verrez…. d’autres choses, mais je ne sais pas encore quoi.