Wimatech Inserito: 3 agosto 2020 Segnala Share Inserito: 3 agosto 2020 Ciao a tutti, è da un po che lavoro con un sensore che comunica via rs232, il produttore del sensore mi ha fornito una libreria "dll" che aggiungendola ad un mio sfw scritto in vb.net mi permette di connettermi e leggere il valore che mi fornisce il sensore. Ora vorrei costruire un dispositivo che sia portatile e senza bisogno del pc ho quindi chiesto al fornitore info per collegarlo ad arduino ma non mi risponde. A questo punto ho collegato sulla seriale1 di un arduino mega un apposito shield con max232 e ho fatto uno sketch che stampa sulla seriale ciò che riceve dalla seriale 1, ho fatto dei test inviandogli dei testi e li visualizza correttamente: if(Serial1.available()){ char c = Serial1.read(); Serial.print("Ricevuto :");Serial.println(c); delay(5); } Poi ho aperto il programmino che uso normalmente per collegarmi col sensore è ho inviato i comandi per aprire la porta e leggere la misura: Apertura porta: ClsRiftek.RF60x_OpenPort_PROXY(CmbCom.Text, CmbBoude.Text, hRF60x) Lettura misura: ClsRiftek.RF60x_Measure_PROXY(hRF60x, 1, Misura_ABS) Con: CmbCom.Text=Nome della porta ovviamente noto CmbBoude.Text=BaudeRate ovviamente noto hRF60x è un intero che mi viene restituito del sensore e che devo utilizzare per fare le letture, a quanto ho capito è una specie di indice Misura_ABS è un long ed è il valore che voglio ottenere Il problema è che quando ci provo sul monitor seriale di arduino visualizzo a malapena un quadrattino la mia idea, visto che il produttore non mi da udienza era di andare a vedere cosa esce dalla seriale e provare poi a "clonare" ciò che esce per provare a leggere il valore utilizzando arduino. Qualcuno mi sa dire se è una cosa fattibile o se sto semplicemente sbattendo inutilmente la testa contro il muro????? Grazie Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 4 agosto 2020 Segnala Share Inserita: 4 agosto 2020 Purtroppo i comadi di seriale di arduino non sono quelli del VB o del "C". Dovresti "sniffare" la comunicazione seriale tra PC e sensore, tramite un programma tipo Hyperterminal collegato ad una porta di un PC; in questo modo puoi risalire ai codici dei comandi inviati ed alle risposte. Poi i comandi li puoi inviare tramite "Serial.write()" ed otteenre le risposte con "Serial.read()" Perchè non scrivi il tipo di sensore che stai usando (marca, modello, altro), magari sarebbe più facile darti qualche informazione. Link al commento Condividi su altri siti More sharing options...
Wimatech Inserita: 4 agosto 2020 Autore Segnala Share Inserita: 4 agosto 2020 il sensore è un RF603 della Riftek è un distanziometro: sito e manuale on line proverò di sicuro con hyperterminal, mi sai dare qualche dritta in più su come si usa questo sfw? Link al commento Condividi su altri siti More sharing options...
drn5 Inserita: 4 agosto 2020 Segnala Share Inserita: 4 agosto 2020 (modificato) Ciao, se hai un pc con due seriali lo interponi tra il pc di controllo e il distanziometro. ti scrivi "due" righe di codice in vbnet una che legge quello che scrive il pc al distanziometro lo mette a video e lo riscrive al distanziometro e un'altra che legge quello che risponde il distanziometro lo mette a video e lo riscrive al pc. Così facendo hai la sequenzialità di comandi e risposte tra pc e distanziometro e viceversa.. Sennò usi un analizzatore di protocollo da 5000€ Modificato: 4 agosto 2020 da drn5 Link al commento Condividi su altri siti More sharing options...
Wimatech Inserita: 4 agosto 2020 Autore Segnala Share Inserita: 4 agosto 2020 OK allora ricapitolando... Il programmino in VB che semplicemente invia e riceve dalla 232 l'ho già fatto e funziona, almeno con arduino quindi qualcosa vede. ho purtroppo un solo adattatore USB/RS232 ma oggi pomeriggio vado in negozio a vedere se ne hanno un secondo alla peggio domani me ne faccio spedire un altro (mitico amazon prime). POI: collego i due adattatori tra loro e al pc supponiamo com2 e com3 da com2 usando il programma che comunica col laser lancio il comando per aprire la porta e connettere da com3 guardo cosa viene spedito successivamente mi collego al sensore e provo ad inviare ciò che ho letto precedentemente e vedo se il sensore mi risponde e cosa mi risponde poi ripeto l'operazione col comando di lettura del valore 3 ore fa, drn5 ha scritto: Ciao, se hai un pc con due seriali lo interponi tra il pc di controllo e il distanziometro. ti scrivi "due" righe di codice in vbnet una che legge quello che scrive il pc al distanziometro lo mette a video e lo riscrive al distanziometro e un'altra che legge quello che risponde il distanziometro lo mette a video e lo riscrive al pc. Così facendo hai la sequenzialità di comandi e risposte tra pc e distanziometro e viceversa.. Sennò usi un analizzatore di protocollo da 5000€ L'idea dell'analizzatore onestamente non mi piace molto soprattutto per i 5k Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 4 agosto 2020 Segnala Share Inserita: 4 agosto 2020 Si cosy facendo dovresti vedere. Però se usi Hyperterminal, che è un software gratuito scaricabile in rete, fai quasi quello che fa un analizzatore di rete. L'ideale sarebbe disporre di un vecchio PC con porta RS232 e connettere questa porta in parallelo alla linea PC---Sensore. io tengo appositamente un vecchio PC proprio per queste cose. Link al commento Condividi su altri siti More sharing options...
max.bocca Inserita: 4 agosto 2020 Segnala Share Inserita: 4 agosto 2020 Il problema di hyper terminal e che vedi solo i caratteri stampabili, se ti arriva qualcosa di strano fai fatica a decifrarlo. Ci sono tools gratis che ti scrivono il valore in decimale o esadecimale oppure lo puoi fare con VB, ogni carattere ricevuto ti scriva il codice Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 5 agosto 2020 Segnala Share Inserita: 5 agosto 2020 9 ore fa, max.bocca ha scritto: Ci sono tools gratis che ti scrivono il valore in decimale o esadecimale oppure lo puoi fare con VB, ogni carattere ricevuto ti scriva il codice Per quello lo fa anche arduino Link al commento Condividi su altri siti More sharing options...
Wimatech Inserita: 5 agosto 2020 Autore Segnala Share Inserita: 5 agosto 2020 (modificato) Buonasera a tutti, oggi ho fatto un po di test e gli sviluppi sono questi: 1) Ho connesso 2 adattatori usb/232 al pc sul primo invio i comandi (apri porta) e (leggi valore) utilizzando il sfw che funziona col laser sul secondo metto in ascolto un programmino fatto da me in vb che legge e stampa a monitor ma visualizzo solo dei ? 2) Ho ripetuto il test precedente mettendo Hyperterminal in ascolto ma visualizzo solo degli smile seguiti da alcuni caratteri strani tipo ü 3) Ho scaricato ed installato Serial Port Monitor, ho collegato il laser ad uno dei due adattatori e ho avviato il sfw mettendolo in ascolto del traffico dati della porta in questione, a monitor ora mi vengono visualizzati una marea di dati che purtroppo faccio molta fatica ad interpretare, mi sapete dare una dritta? Allego i dati visualizzati: Apertura porta: [05/08/2020 19:05:47] 1 IRP_MJ_CREATE - Opens a COM port (COM5) STATUS_SUCCESS Opened by: C:\Users\WILLIAM\Desktop\riftek\Scanner Laser 2013\rf 4 dotnet\WindowsApplication1\bin\Debug\WindowsApplication1.vshost.exe ---------------------------------------------------------------------------------- [05/08/2020 19:05:47] 3 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM5) STATUS_SUCCESS IOCTL_SERIAL_GET_BAUD_RATE - Returns the baud rate that is currently set for a COM port BaudRate - 9600 ---------------------------------------------------------------------------------- [05/08/2020 19:05:47] 5 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM5) STATUS_SUCCESS IOCTL_SERIAL_GET_LINE_CONTROL - Request returns information about the line control set for a COM port StopBits - 0 (1 stop bit) Parity - 2 (EVEN_PARITY) WordLength - 8 ---------------------------------------------------------------------------------- [05/08/2020 19:05:47] 7 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM5) STATUS_SUCCESS IOCTL_SERIAL_GET_CHARS - Request returns the special characters that Serial uses with handshake flow control EofChar - 26 ErrorChar - 0 BreakChar - 0 EventChar - 26 XonChar - 17 XoffChar - 19 ---------------------------------------------------------------------------------- [05/08/2020 19:05:47] 9 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM5) STATUS_SUCCESS IOCTL_SERIAL_GET_HANDFLOW - Request returns information about the configuration of the handshake flow control set for a COM port ControlHandShake - 0x00 FlowReplace - 0x00 XonLimit - 2048 XoffLimit - 512 ---------------------------------------------------------------------------------- [05/08/2020 19:05:47] 11 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM5) STATUS_SUCCESS IOCTL_SERIAL_GET_BAUD_RATE - Returns the baud rate that is currently set for a COM port BaudRate - 9600 ---------------------------------------------------------------------------------- [05/08/2020 19:05:47] 13 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM5) STATUS_SUCCESS IOCTL_SERIAL_GET_LINE_CONTROL - Request returns information about the line control set for a COM port StopBits - 0 (1 stop bit) Parity - 2 (EVEN_PARITY) WordLength - 8 ---------------------------------------------------------------------------------- [05/08/2020 19:05:47] 15 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM5) STATUS_SUCCESS IOCTL_SERIAL_GET_CHARS - Request returns the special characters that Serial uses with handshake flow control EofChar - 26 ErrorChar - 0 BreakChar - 0 EventChar - 26 XonChar - 17 XoffChar - 19 ---------------------------------------------------------------------------------- [05/08/2020 19:05:47] 17 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM5) STATUS_SUCCESS IOCTL_SERIAL_GET_HANDFLOW - Request returns information about the configuration of the handshake flow control set for a COM port ControlHandShake - 0x00 FlowReplace - 0x00 XonLimit - 2048 XoffLimit - 512 ---------------------------------------------------------------------------------- [05/08/2020 19:05:47] 19 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM5) STATUS_SUCCESS IOCTL_SERIAL_SET_BAUD_RATE - Request sets the baud rate on a COM port. Serial verifies the specified baud rate BaudRate - 9600 ---------------------------------------------------------------------------------- [05/08/2020 19:05:47] 21 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM5) STATUS_SUCCESS IOCTL_SERIAL_CLR_RTS - Request clears the RTS control signal ---------------------------------------------------------------------------------- [05/08/2020 19:05:47] 23 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM5) STATUS_SUCCESS IOCTL_SERIAL_CLR_DTR - Request clears the DTR control signal. ---------------------------------------------------------------------------------- [05/08/2020 19:05:47] 25 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM5) STATUS_SUCCESS IOCTL_SERIAL_SET_LINE_CONTROL - Request sets the line control register StopBits - 0 (1 stop bit) Parity - 2 (EVEN_PARITY) WordLength - 8 ---------------------------------------------------------------------------------- [05/08/2020 19:05:47] 27 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM5) STATUS_SUCCESS IOCTL_SERIAL_SET_CHARS - Request sets the special characters that Serial uses for handshake flow control EofChar - 26 ErrorChar - 0 BreakChar - 0 EventChar - 26 XonChar - 17 XoffChar - 19 ---------------------------------------------------------------------------------- [05/08/2020 19:05:47] 29 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM5) STATUS_SUCCESS IOCTL_SERIAL_SET_HANDFLOW - Request sets the configuration of handshake flow control ControlHandShake - 0x00 FlowReplace - 0x00 XonLimit - 2048 XoffLimit - 512 ---------------------------------------------------------------------------------- [05/08/2020 19:05:47] 31 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM5) STATUS_SUCCESS IOCTL_SERIAL_SET_TIMEOUTS - Request sets the timeout value's that the driver uses with read and write requests ReadIntervalTimeout - 300 ReadTotalTimeoutMultiplier - 300 ReadTotalTimeoutConstant - 800 WriteTotalTimeoutMultiplier - 0 WriteTotalTimeoutConstant - 0 ---------------------------------------------------------------------------------- [05/08/2020 19:05:47] 33 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM5) STATUS_SUCCESS IOCTL_SERIAL_SET_QUEUE_SIZE - Request sets the size of the internal receive buffer InSize - 1024 OutSize - 1024 ---------------------------------------------------------------------------------- [05/08/2020 19:05:47] 35 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM5) STATUS_SUCCESS IOCTL_SERIAL_PURGE - Request cancels the specified requests and deletes data from the specified buffers Flags - 0x0000000c ---------------------------------------------------------------------------------- [05/08/2020 19:05:47] 37 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM5) STATUS_SUCCESS IOCTL_SERIAL_SET_WAIT_MASK - Request configures Serial to notify a client after the occurrence of any one of a specified set of wait events Mask - 0x00000005 (EV_RXCHAR | EV_TXEMPTY) ---------------------------------------------------------------------------------- Se può aiutare ad interpretare i dati posso dire che: Il comando di apertura porta: ClsRiftek.RF60x_OpenPort_PROXY("COM5:", 9600, Label1.Text) restituisce in label1 il valore 1568 Il comando di lettura valore : ClsRiftek.RF60x_Measure_PROXY(Label1.Text, 1, Label2.Text) ho passato il valore precedente 1568 e in label2 ha restituito la lettura di 4560 Modificato: 5 agosto 2020 da Wimatech Link al commento Condividi su altri siti More sharing options...
Wimatech Inserita: 5 agosto 2020 Autore Segnala Share Inserita: 5 agosto 2020 in fase di lettura del valore il traffico dati è stato questo: Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 6 agosto 2020 Segnala Share Inserita: 6 agosto 2020 Ho dato una veloce lettura al manuale e, a parere mio, non è necessario sniffare la comunicazione perchè i comandi e le risposte sono bene descritti. Mi pareva strano che ilproduttore vendesse un sensore senza fornire dati per la comunicazione. Bisogna solo studiarsi il manuale e fare delle prove pratiche. Link al commento Condividi su altri siti More sharing options...
Wimatech Inserita: 6 agosto 2020 Autore Segnala Share Inserita: 6 agosto 2020 2 ore fa, Livio Orsini ha scritto: Ho dato una veloce lettura al manuale e, a parere mio, non è necessario sniffare la comunicazione perchè i comandi e le risposte sono bene descritti. Mi pareva strano che ilproduttore vendesse un sensore senza fornire dati per la comunicazione. Bisogna solo studiarsi il manuale e fare delle prove pratiche. presumo che lei stia parlando di questa parte di manuale: Link al commento Condividi su altri siti More sharing options...
Wimatech Inserita: 6 agosto 2020 Autore Segnala Share Inserita: 6 agosto 2020 Io ho provato anche in vb ad inviare ad esempio il comando 01h che serve ad identificare il dispositivo in questo modo: SerialPort1.WriteLine("01h") ovviamente dopo aver aperto la porta ma sicuramente sbaglio qualcosa anche perchè so molto poco in comunicazione seriale, mi sapete dare una dritta? Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora