Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

MSCOMM, dialogo seriale e garbage da eliminare

1 view
Skip to first unread message

Fulcro

unread,
Oct 3, 2018, 4:23:15 AM10/3/18
to
Buongiorno! Mi scuso per la lunghezza del post...
Sto sviluppando una applicazione VB6 che dialoga con un apparecchio via seriale. La casa produttrice fornisce una DLL per l'accesso, ma io sto scrivendo il codice per dialogare direttamente con l'apparecchio senza tale DLL. Tutto funziona, ma ottengo un dialogo prolisso e con elementi inutili.

****************************************************************************
Dialogo con DLL ufficiale:

9 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_SET_BAUD_RATE ProlificSerial0 Rate: 9600
9 0.02240904 SUCCESS
10 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_CLR_RTS ProlificSerial0
10 0.00216522 SUCCESS
11 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_CLR_DTR ProlificSerial0
11 0.00295822 SUCCESS
12 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_SET_LINE_CONTROL ProlificSerial0 StopBits: 1 Parity: EVEN WordLength: 8
12 0.00000711 SUCCESS
13 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_SET_CHAR ProlificSerial0 EOF:0 ERR:0 BRK:0 EVT:0 XON:11 XOFF:13
13 0.00005093 SUCCESS
14 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_SET_HANDFLOW ProlificSerial0 Shake:0 Replace:80000000 XonLimit:2048 XoffLimit:512
14 0.00000829 SUCCESS
15 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_SET_QUEUE_SIZE ProlificSerial0 InSize: 1200 OutSize: 1200
15 0.00000651 SUCCESS
16 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_CLR_DTR ProlificSerial0
16 0.00573877 SUCCESS
18 0.00000000 Kyo_Unit.exe IRP_MJ_WRITE ProlificSerial0 Length 6: F0 00 00 0B 00 FB
18 0.00092093 SUCCESS
19 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_GET_WAIT_MASK ProlificSerial0
19 0.00000829 SUCCESS
1040 0.00000000 Kyo_Unit.exe IRP_MJ_READ ProlificSerial0 Length 6
1040 0.00001007 SUCCESS Length 6: F0 00 00 0B 00 FB
1041 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_GET_WAIT_MASK ProlificSerial0
1041 0.00000415 SUCCESS
1141 0.00000000 Kyo_Unit.exe IRP_MJ_READ ProlificSerial0 Length 1
1141 0.00000592 SUCCESS Length 1: 4B
1142 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_GET_WAIT_MASK ProlificSerial0
1142 0.00000355 SUCCESS
1191 0.00000000 Kyo_Unit.exe IRP_MJ_READ ProlificSerial0 Length 1
1191 0.00000533 SUCCESS Length 1: 59
1192 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_GET_WAIT_MASK ProlificSerial0
1192 0.00000355 SUCCESS
1241 0.00000000 Kyo_Unit.exe IRP_MJ_READ ProlificSerial0 Length 1
1241 0.00000592 SUCCESS Length 1: 4F
1242 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_GET_WAIT_MASK ProlificSerial0
1242 0.00000355 SUCCESS
1291 0.00000000 Kyo_Unit.exe IRP_MJ_READ ProlificSerial0 Length 1
1291 0.00000533 SUCCESS Length 1: 34
1292 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_GET_WAIT_MASK ProlificSerial0
1292 0.00000355 SUCCESS
1341 0.00000000 Kyo_Unit.exe IRP_MJ_READ ProlificSerial0 Length 1
1341 0.00000592 SUCCESS Length 1: 20
1342 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_GET_WAIT_MASK ProlificSerial0
1342 0.00000355 SUCCESS
1391 0.00000000 Kyo_Unit.exe IRP_MJ_READ ProlificSerial0 Length 1
1391 0.00000533 SUCCESS Length 1: 20
1392 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_GET_WAIT_MASK ProlificSerial0
1392 0.00000355 SUCCESS
1441 0.00000000 Kyo_Unit.exe IRP_MJ_READ ProlificSerial0 Length 1
1441 0.00000592 SUCCESS Length 1: 20
1442 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_GET_WAIT_MASK ProlificSerial0
1442 0.00000355 SUCCESS
1543 0.00000000 Kyo_Unit.exe IRP_MJ_READ ProlificSerial0 Length 1
1543 0.00000533 SUCCESS Length 1: 20
1544 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_GET_WAIT_MASK ProlificSerial0
1544 0.00000355 SUCCESS
1593 0.00000000 Kyo_Unit.exe IRP_MJ_READ ProlificSerial0 Length 1
1593 0.00000592 SUCCESS Length 1: 32
1594 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_GET_WAIT_MASK ProlificSerial0
1594 0.00000355 SUCCESS
1644 0.00000000 Kyo_Unit.exe IRP_MJ_READ ProlificSerial0 Length 1
1644 0.00000533 SUCCESS Length 1: 2E
1645 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_GET_WAIT_MASK ProlificSerial0
1645 0.00000355 SUCCESS
1694 0.00000000 Kyo_Unit.exe IRP_MJ_READ ProlificSerial0 Length 1
1694 0.00000770 SUCCESS Length 1: 30
1695 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_GET_WAIT_MASK ProlificSerial0
1695 0.00000355 SUCCESS
1744 0.00000000 Kyo_Unit.exe IRP_MJ_READ ProlificSerial0 Length 1
1744 0.00000533 SUCCESS Length 1: 34
1745 0.00000000 Kyo_Unit.exe IOCTL_SERIAL_GET_WAIT_MASK ProlificSerial0
1745 0.00000355 SUCCESS
1793 0.00000000 Kyo_Unit.exe IRP_MJ_READ ProlificSerial0 Length 1
1793 0.00000533 SUCCESS Length 1: 6B



****************************************************************************
Stesso dialogo, ma con il mio programma:

41 0.02982638 VB6.EXE IOCTL_SERIAL_SET_BAUD_RATE ProlificSerial0 SUCCESS Rate: 9600
40 0.02987199 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
42 0.00258394 VB6.EXE IOCTL_SERIAL_CLR_RTS ProlificSerial0 SUCCESS
43 0.00262303 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
44 0.00290849 VB6.EXE IOCTL_SERIAL_CLR_DTR ProlificSerial0 SUCCESS
45 0.00292330 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0 SUCCESS
46 0.00001184 VB6.EXE IOCTL_SERIAL_SET_LINE_CONTROL ProlificSerial0 SUCCESS StopBits: 1 Parity: EVEN WordLength: 8
47 0.00004856 VB6.EXE IOCTL_SERIAL_SET_CHAR ProlificSerial0 SUCCESS EOF:1a ERR:3f BRK:3f EVT:0 XON:11 XOFF:13
48 0.00000711 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
49 0.01684389 VB6.EXE IOCTL_SERIAL_SET_HANDFLOW ProlificSerial0 SUCCESS Shake:0 Replace:4 XonLimit:256 XoffLimit:256
50 4.36183725 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0 SUCCESS
53 0.00097187 VB6.EXE IRP_MJ_WRITE ProlificSerial0 SUCCESS Length 6: F0 00 00 0B 00 FB
55 0.00000888 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
56 0.02497357 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0 SUCCESS
58 0.00001717 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
60 0.00086289 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0 SUCCESS
61 0.00000592 VB6.EXE IRP_MJ_READ ProlificSerial0 SUCCESS Length 1: F0
65 0.00000533 VB6.EXE IRP_MJ_READ ProlificSerial0 SUCCESS Length 1: 00
68 0.00000948 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
69 0.00065502 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0 SUCCESS
70 0.00001066 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
72 0.00192656 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0 SUCCESS
73 0.00000474 VB6.EXE IRP_MJ_READ ProlificSerial0 SUCCESS Length 1: 00
76 0.00001066 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
78 0.00089014 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0 SUCCESS
79 0.00000533 VB6.EXE IRP_MJ_READ ProlificSerial0 SUCCESS Length 1: 0B
82 0.00001125 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
84 0.00095114 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0 SUCCESS
85 0.00000415 VB6.EXE IRP_MJ_READ ProlificSerial0 SUCCESS Length 1: 00
88 0.00001184 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
90 0.00087296 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0 SUCCESS
91 0.00000533 VB6.EXE IRP_MJ_READ ProlificSerial0 SUCCESS Length 1: FB
94 0.00001125 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
96 0.00089369 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0 SUCCESS
97 0.00000415 VB6.EXE IRP_MJ_READ ProlificSerial0 SUCCESS Length 1: 4B
101 0.00000474 VB6.EXE IRP_MJ_READ ProlificSerial0 SUCCESS Length 1: 59
104 0.00000711 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
105 0.00074800 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0 SUCCESS
107 0.00000651 VB6.EXE IRP_MJ_READ ProlificSerial0 SUCCESS Length 1: 4F
110 0.00000770 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
111 0.00069588 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0 SUCCESS
112 0.00001599 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
114 0.00179153 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0 SUCCESS
115 0.00000592 VB6.EXE IRP_MJ_READ ProlificSerial0 SUCCESS Length 1: 34
118 0.00001066 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
120 0.00089665 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0 SUCCESS
121 0.00000415 VB6.EXE IRP_MJ_READ ProlificSerial0 SUCCESS Length 1: 20
124 0.00001066 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
126 0.00091146 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0 SUCCESS
127 0.00000474 VB6.EXE IRP_MJ_READ ProlificSerial0 SUCCESS Length 1: 20
130 0.00000948 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
132 0.00092330 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0 SUCCESS
133 0.00000355 VB6.EXE IRP_MJ_READ ProlificSerial0 SUCCESS Length 1: 20
136 0.00001007 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
138 0.00092153 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0 SUCCESS
139 0.00000415 VB6.EXE IRP_MJ_READ ProlificSerial0 SUCCESS Length 1: 20
142 0.00001066 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
144 0.00090613 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0 SUCCESS
145 0.00000415 VB6.EXE IRP_MJ_READ ProlificSerial0 SUCCESS Length 1: 32
148 0.00001007 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
150 0.00092330 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0 SUCCESS
151 0.00000415 VB6.EXE IRP_MJ_READ ProlificSerial0 SUCCESS Length 1: 2E
154 0.00001007 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
156 0.00190642 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0 SUCCESS
157 0.00000355 VB6.EXE IRP_MJ_READ ProlificSerial0 SUCCESS Length 1: 30
160 0.00001066 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
162 0.00091501 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0 SUCCESS
163 0.00000474 VB6.EXE IRP_MJ_READ ProlificSerial0 SUCCESS Length 1: 34
166 0.00001066 VB6.EXE IOCTL_SERIAL_SET_WAIT_MASK ProlificSerial0 SUCCESS Mask: RXCHAR TXEMPTY CTS DSR RLSD BRK ERR RING
168 0.00000000 VB6.EXE IOCTL_SERIAL_WAIT_ON_MASK ProlificSerial0
169 0.00000415 VB6.EXE IRP_MJ_READ ProlificSerial0 SUCCESS Length 1: 6B
****************************************************************************


Come si può notare, la lettura dei dati in arrivo mostra un codice di controllo IRP_MJ_READ con il byte appena letto, ma mentre la DLL ufficiale restituisce solo quello e passa al byte successivo, nel mio programma ottengo, tra un byte letto e il successivo, i richiami ai codici IOCTL_SERIAL_SET_WAIT_MASK e IOCTL_SERIAL_WAIT_ON _MASK, che sporcano il log pur essendo inutili (visto il dialogo con la DLL ufficiale non li produce...). Qualcuno più addentrato nel dialogo seriale saprebbe aiutarmi?


Il codice che sto usando (ricordo: su VB6) è questo:

connessione alla COM:

If Command1.Caption = "&Connetti" Then 'pulsante di connessione alla COM scelta

If MSComm1.PortOpen = False Then

Command1.Caption = "&Disconnetti"
MSComm1.CommPort = COMPort
MSComm1.DTREnable = False
MSComm1.EOFEnable = False
MSComm1.Handshaking = comNone
MSComm1.InBufferSize = 1024
MSComm1.InputLen = 1
MSComm1.InputMode = comInputModeText
MSComm1.NullDiscard = False
MSComm1.ParityReplace = "?"
MSComm1.RThreshold = 1
MSComm1.RTSEnable = False
MSComm1.SThreshold = 1
MSComm1.Settings = "9600,E,8,1"
MSComm1.PortOpen = True

Call Delay(400)

Command4.Enabled = True
End If
Else
Command1.Caption = "&Connetti"
List2.Clear
MSComm1.PortOpen = False



La lettura avviene così:

Private Sub MScomm1_OnComm()
Dim i%
Select Case MSComm1.CommEvent
Case comEventReceive
Timer1.Enabled = True 'recupero la stringa in ritardo
rx$ = MSComm1.Input
For i% = 1 To Len(rx$)
stringa = stringa & Right$("0" + Hex(Asc(Mid$(rx$, i, 1))) & " ", 3) 'mi serve che i byte vengano scritti in Hex in una listbox
Next i%

Case Else
Debug.Print "CommEvent " & MSComm1.CommEvent

End Select
End Sub

Quale parte del codice devo correggere per evitare di avere la sporcizia nel dialogo seriale? Grazie per qualsiasi informazione!

0 new messages