Bonjour,

Je développe un logiciel de caisse en VB.Net, et je dois communiquer avec un TPE, pour lui envoyer le montant à encaisser.

J'ai trouvé la documentation du protocole CONCERT à utiliser : https://drive.google.com/file/d/0BxH...NYkFGRUY0/view

Comme prévu, j'utilise donc un serialport pour ouvrir mon port, et envoyer une requète ENQ.

Or, même si j'ai bien la réponse ACK du TPE, le terminal affiche "fonction impossible".

Voici mon code :

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
 
    Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        Dim Buffer(SerialPort1.BytesToRead - 1) As Byte
        SerialPort1.Read(Buffer, 0, SerialPort1.BytesToRead)
        If SerialPort1.Encoding.GetString(Buffer) = Chr(vbACK) Then
            Dim checksum As Integer = 0
            Dim ChaineEvoi As String = Chr(vbSTX) & "0100001599100978          " & Chr(vbETX)
            For Each car As Char In ChaineEvoi
                checksum ^= Convert.ToByte(car)
            Next
            ChaineEvoi &= Chr(checksum)
            SerialPort1.WriteLine(ChaineEvoi)
            Dim toto2 As String = ""
        Else
            If SerialPort1.Encoding.GetString(Buffer) = Chr(15) Then
 
            End If
        End If
    End Sub
 
  Private Sub SimpleButton1_Click(sender As Object, e As EventArgs) Handles SimpleButton1.Click
        Try
            With SerialPort1
                .PortName = "COM5"
                .Handshake = IO.Ports.Handshake.None
                .ReceivedBytesThreshold = 1
                .RtsEnable = False
                .DtrEnable = True
                .BaudRate = 9600
                .DataBits = 7
                .Parity = IO.Ports.Parity.Even
                .StopBits = IO.Ports.StopBits.One
                .ReadTimeout = 1000000
                .Encoding = Encoding.ASCII
                .Open()
            End With
 
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
 
 
        SerialPort1.Write(Chr(5))
 
    End Sub
J'ai essayé différentes combinaisons de paramètres d'encoding, de handshake, rtsenable... j'arrive toujours au même résultat.

Pareil, j'ai essayé d'envoyer un tableau de byte au lieu de chr(5), rien !!!!!

Mon TPE me répond bien, je passe bien dans ma fonction SerialPort1_DataReceived et la réponse est bien ACK. Mais si je mets à point d'arrêt sur ma ligne Dim checksum As Integer = 0, avant d'envoyer la 2eme requète, le terminal affiche déjà "fonction impossible".

Apparement, je ne suis pas le seul à avoir eu ce problème, mais sur les différents topics que j'ai pu trouver, soit la solution n'a jamais été trouvée, soit elle n'a pas été partagée....

Quelqu'un aurait déjà rencontré de problème, et pourrait m'aider à le résoudre ?

Merci !!!!!!!!!