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 :
J'ai essayé différentes combinaisons de paramètres d'encoding, de handshake, rtsenable... j'arrive toujours au même résultat.
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
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 !!!!!!!!!
Partager