Dim c As Char = Convert.ToChar(223)
Imports System.IO.Ports Module module1 Dim WithEvents comport As SerialPort Sub main() Dim text As String Dim dest As Byte Dim i As Integer Dim env(31) As Byte Dim tabdest(29) As Char Dim crc As Integer = 0 comport = New SerialPort("com4", 9600, Parity.Even, 8, StopBits.One) Console.Write("destinataire :") dest = Console.In.ReadLine() Console.Write("text à émettre :") text = Console.In.ReadLine() tabdest = text.ToCharArray 'création de la trame à envoyer i = 1 Do env(i + 1) = Asc(tabdest(i - 1)) i = i + 1 Loop Until i > text.Length env(1) = 6 env(0) = dest 'calcul du cheksum appeler crc i = 2 Do crc = env(i) + crc i = i + 1 Loop Until i = 31 crc = crc And 255 env(31) = crc 'envoie de la trame ici ce trouve mon problème avec le crc si il dépasse 127 comport.Open() i = 0 Do comport.Write(CStr(Chr(env(i)))) i = i + 1 Loop Until i = 31 comport.Close() End Sub Sub reception(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) Handles comport.DataReceived 'réception de la trame envoyer et mise dans un tableau System.Threading.Thread.Sleep(100) Dim nbytes As Integer = comport.BytesToRead() Dim combuffer As Byte() = New Byte(nbytes - 1) {} Dim crc = 0, i As Integer comport.Read(combuffer, 0, nbytes - 1) 'traitement de la trame reçut si bonne adresse destinataire If combuffer(0) = 4 Then 'calcul du crc avec les données reçut i = 2 Do crc = combuffer(i) + crc i = i + 1 Loop Until i = 31 crc = crc And 255 'affichage du message Console.WriteLine("") Console.Write("message de " + CStr(combuffer(1)) + ":") 'quand je réceptionne la trame le crc reçut ne correspond pas avec celui envoyer même en envoie sur port série virtuel If Asc((crc)) <> combuffer(31) Then Console.WriteLine("reception d'un message erronné") Else i = 2 Do Console.Write(Chr(combuffer(i))) i = i + 1 Loop Until i = 31 End If End If Console.ReadKey(True) End Sub End Module
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question