Classe ZigBee VB.net

class_zigbee_vb

08 juin Classe ZigBee VB.net

Afin de passer un peu à la pratique, j’ouvre cet article afin de vous montrer l’avancer sur la création de la classe ZigBee en vb.net

Cette classe sera ensuite implémentée par la classe ZCL qui viendra un peu plus tard…

Un article similaire est en cours de rédaction sur une classe ZigBee pour l’arduino….

Bientôt la suite !!

A ce jours (08/06/11), la classe permet d’envoyer et recevoir des trames au format d’écrit dans cet article : ZigBee OEM RF Modules – Trame complète

Elle gère également les trames d’accusé réception.

J’ai d’ailleurs une petite application en vb.net qui permet d’écrire le contenu de la trame et de l’envoyer tout lisant les trames reçues

Je ferais une vidéo ainsi qu’un article, mais pour le moment, je dois en finaliser avant ;)

Papyrus UML

Afin de représenter les classes dans un diagramme de classe, j’utilise Papyrus.

Papyrus est un outil open-source dédié à la modélisation en UML2.

Mes souvenirs d’UML datant de mon BTS…. lointain BTS…  Il se peut que quelques erreurs soient présente ;)

La classe clsComPorts

La classe clsComPorts permet de trouver et d’accéder au port COM en vb.net

Elle importe System.IO.Ports et est composée comme suit :

Fonction CloseComPort

Cette fonction permet de fermer le port si ce dernier est ouvert.

Elle accepte en argument une ressource de port série.

Friend Sub CloseComPort(ByVal portToClose As SerialPort)
 Try
     RaiseEvent UserInterfaceData("SisplayStatus", "", Color.Black)
     If (Not IsNothing(portToClose)) Then
         If portToClose.IsOpen Then
             portToClose.Close()
             RaiseEvent UserInterfaceData("DisplayCurrentSettings", "", Color.Black)
         End If
     End If
     PortOpen = False
 Catch ex As InvalidOperationException
     ParameterChanged = True
     PortChanged = True
     DisplayException(ModuleName, ex)
 Catch ex As UnauthorizedAccessException
     ParameterChanged = True
     PortChanged = True
     DisplayException(ModuleName, ex)
 Catch ex As System.IO.IOException
     ParameterChanged = True
     ParameterChanged = True
     DisplayException(ModuleName, ex)
 End Try
 End Sub

Fonction DataReceived

Cette fonction permet de lire le buffer du port COM.

Elle accepte en argument de type Oject et un argument de type SerialDataReceivedEventArgs

Friend Sub DataReceived(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs)

 Dim numberOfBytesToRead As Integer

 Try
 If SelectedPort.BytesToRead > 0 Then

 numberOfBytesToRead = SelectedPort.BytesToRead 'Get the number of bytes available to read
 Dim newReceivedData(numberOfBytesToRead - 1) As Byte 'Create a byte array large enough to hold the bytes to be read

 SelectedPort.Read(newReceivedData, 0, numberOfBytesToRead)  'Read the bytes into the byte array
 m_PortBuffer.AddRange(newReceivedData)  'Add the bytes to the end of the list

 'If m_DebugMode = True, then pass all data to Debug window

 'Call a routine to process the data
 'I'm use a time to process the data periodically

 End If
 Catch ex As Exception
 DisplayException(ModuleName, ex)
 End Try

 End Sub

Fonction FindComPorts

Cette fonction permet de trouver les ports COM et d’enregistrer les paramètres.

Friend Shared Sub FindComPorts()
 myPortNames = SerialPort.GetPortNames   'Place the names of all COM ports in an array and sort

 If myPortNames.Length > 0 Then  'Is there at least one COM port?
 comPortExists = True
 Array.Sort(myPortNames)
 Else
 comPortExists = False   'No COM port found
 End If
 End Sub

Fonction OpenComPort

Cette fonction permet d’ouvrir le port COM

Friend Function OpenComPort() As Boolean
 Dim success As Boolean = False
 Try
 If comPortExists Then   'The system has at least one COM port
 If PreviousPort.IsOpen Then ' If the previously selected port is still open, close it.
 CloseComPort(PreviousPort)
 End If

 If (Not (SelectedPort.IsOpen) Or PortChanged) Then
 SelectedPort.Open() 'If open failure, error will be caught by try statement

 If SelectedPort.IsOpen Then
 ' The port is open. Set additional parameters.
 ' Timeouts are in milliseconds.
 SelectedPort.ReadTimeout = 5000
 SelectedPort.WriteTimeout = 5000

 ' Specify the routine that runs when a DataReceived/ErrorReceived event occurs
 AddHandler SelectedPort.DataReceived, SerialDataReceivedEventHandler1
 AddHandler SelectedPort.ErrorReceived, SerialErrorReceivedEventHandler1

 'Send data to other module
 RaiseEvent UserInterfaceData("DisplayCurrentSettings", "", Color.Black)
 RaiseEvent UserInterfaceData("DisplayStatus", "", Color.Black)

 success = True

 'The port is open with the current parameters.
 PortChanged = False
 End If
 End If
 End If
 Catch ex As InvalidOperationException
 ParameterChanged = True
 PortChanged = True
 DisplayException(ModuleName, ex)
 Catch ex As UnauthorizedAccessException
 ParameterChanged = True
 PortChanged = True
 DisplayException(ModuleName, ex)
 Catch ex As System.IO.IOException
 ParameterChanged = True
 PortChanged = True
 DisplayException(ModuleName, ex)
 End Try

 PortOpen = success
 Return success
 End Function

Fonction WriteCompleted

Cette fonction n’est pas encore développée

Fonction WriteToComPort

Cette fonction permet d’écrire un octet vers le port sélectionné

Elle accepte en argument un tableau de type Byte

Friend Function WriteToComPort(ByVal dataToWrite() As Byte) As Boolean
 Dim success As Boolean = False

 Try
 'Open the COM port if neccessary
 If (Not (SelectedPort Is Nothing)) Then
 If ((Not SelectedPort.IsOpen) Or PortChanged) Then
 PortOpen = OpenComPort()
 End If
 End If

 If SelectedPort.IsOpen Then
 SelectedPort.Write(dataToWrite, 0, dataToWrite.Length)
 success = True
 End If

 Catch ex As TimeoutException
 DisplayException(ModuleName, ex)
 Catch ex As InvalidOperationException
 DisplayException(ModuleName, ex)
 ParameterChanged = True
 RaiseEvent UserInterfaceData("DisplayCurrentSettings", "", Color.Black)
 Catch ex As UnauthorizedAccessException
 DisplayException(ModuleName, ex)
 'This exception can ocur if the port was removed
 'If the port was open, close it

 CloseComPort(SelectedPort)
 ParameterChanged = True
 RaiseEvent UserInterfaceData("DisplayCurrentSettings", "", Color.Black)
 End Try

 Return success
 End Function
Be Sociable, Share!
No Comments

Post A Comment