DISABILITARE ADBLOCK

ADBlock sta bloccando alcuni contenuti del sito

ADBlock errore
risultati trovati: 

DOMANDA

Devo inviare e ricevere dati tramite connessioni seriali (RS-232 e RS-422).

Come posso configurare e comunicare con tale connessione? Come faccio a capire quali dovrebbero essere le impostazioni di configurazione (ad es. Baud rate) e come le configuro?

In particolare, sto cercando di farlo in Java, C / C ++ o in una delle principali shell Unix, ma ho anche un certo interesse per la programmazione seriale usando Windows / Hyperterminal.

SOLUZIONE

Costruisci una macchina del tempo e torna al 1987? Ho ho.

Ok, non più commenti accidenti.

  

Come posso capire quali dovrebbero essere le impostazioni di configurazione (ad es. baud rate) ...

Leggi la scheda tecnica? Ok ok. Scherzi a parte, l'ultimo. Se non conosci la velocità di trasmissione del dispositivo con cui stai tentando di comunicare, hai due possibilità. Inizia a indovinare, o forse estrai un o-scope. Se hai bisogno di un buon punto di partenza, lasciami suggerire 9600-8-N-1. Il mio sospetto è che puoi arrivarci con la forza bruta in tempi relativamente brevi. C'è una terza opzione di avere un ninja della vecchia scuola che può dire solo dal LOOK dei personaggi confusi a un baud rate standard quale sia il baud rate effettivo. Un trucco di festa impressionante per essere sicuro.

Speriamo che tu abbia accesso a queste informazioni. In unix / linux, puoi ottenere minicom per giocare direttamente con la porta seriale. Ciò dovrebbe rendere abbastanza rapido capire la configurazione.

  

una delle principali shell Unix

In Unix le porte seriali sono / sono mappate in file nel sottodir / dev /. ttyS0, per esempio. Se si imposta la velocità di trasmissione corretta e quant'altro usando minicom, è anche possibile eseguire il cat rooting su quel file per inviare roba là fuori.

Sulla carne della domanda, è possibile accedervi a livello di programmazione tramite le intestazioni POSIX. termios.h è quello grande.

Vedi: http://www.easysw.com/ ~ mike / serial / serial.html # 3_1 (NON DISPONIBILE ANCORA)

  

ma ho anche un certo interesse per la programmazione seriale usando Windows / Hyperterminal.

Hyperterminal e minicom sono sostanzialmente lo stesso programma. Per quanto riguarda il modo in cui Windows ti consente di accedere alla porta seriale, lascerò quella domanda a qualcun altro. Non lo faccio in Windows dai giorni di Win95.

Se ti va lasciaci una tua opinione

L'articolo ti è stato utile ed è tradotto correttamente?

ALTRI SUGGERIMENTI

Se vuoi programmare in Java, consiglio vivamente SerialIOs SerialPort . È molto facile da usare e ti fa risparmiare giorni di lavoro. Non ho mai trovato una libreria open source valida come SerialIO, DAVVERO!

Il mio consiglio: non usare il framework IO seriale di Sun! È del 1998 e pieno di bug. Puoi usare rxtx ma serialio è meglio!

Per C / C ++ su Windows hai (almeno) due opzioni:

  1. Utilizza la classe SerialPort fornita da .NET.
  2. Utilizza l'API Win32. Esiste un ampio articolo MSDN risalente al 1995 e molte biblioteche gratuite ed esempi sul Web per iniziare.

L'opzione .NET sarà molto più semplice.

Se deve essere incrociato, suggerirei di guardare Boost Asio .

Al lavoro utilizziamo teraterm e realterm per verificare che i dati seriali siano formattati correttamente. Inoltre abbiamo uno splitter hardware con uno switch in modo da poter monitorare il traffico verso la nostra applicazione tramite un cavo di ritorno a un'altra porta.

Windows ti consente di accedere alla porta seriale tramite CreateFile. Questo ti dà una maniglia e da lì puoi configurare l'accesso.

Qualche tempo fa ho scritto un'applicazione di dimensioni decenti per instradare le connessioni da una farm di modem a un indirizzo di rete TCP / IP.

Inizialmente ho cercato una libreria IO seriale libera (libera). Ho provato Sun, IBM e RxTx. Andavano bene per lo sviluppo dell'applicazione e nei test iniziali, ma in produzione si sono dimostrati entrambi instabili.

Finalmente ho pagato per SerialPort di SerialIO. La conversione è stata letteralmente un esercizio per cambiare le importazioni, e la biblioteca è stata assolutamente assoluta solida, non posso raccomandarla abbastanza. La mia applicazione è in esecuzione sul campo 24 ore su 24, 7 giorni su 7, da un paio d'anni, senza un singolo problema riscontrato da più clienti.

Se avvii lo sviluppo con SerialPort, hanno un'API migliore e la userei.

Se hai bisogno di supporto multipiattaforma, Java con SerialPort è stata la scelta migliore che potessi trovare.

Infine, la loro licenza è abbastanza ragionevole fintanto che non preinstallate software sull'apparecchiatura per i vostri clienti.

Dall'altro lato, se si desidera farlo utilizzando C #, che verrà eseguito su Windows e Linux - con alcuni limitazioni (EDIT: che potrebbe non essere aggiornato. Non ho modo di provarlo.). Basta creare un oggetto SerialPort , impostare il suo baudrate, port e qualsiasi altra impostazione dispari, chiama aperto su di essa e scrivi i tuoi byte [] s. Dopo tutta la configurazione, l'oggetto SerialPort si comporta in modo molto simile a qualsiasi flusso in rete, quindi dovrebbe essere abbastanza facile da capire.

E come afferma l'ibrandy, devi conoscere tutte queste impostazioni, come la velocità di trasmissione, prima ancora di iniziare a tentare di comunicare con qualsiasi dispositivo seriale.

A seconda del dispositivo con cui si sta tentando di comunicare, potrebbero essere presenti più parametri rispetto alla velocità di trasmissione, al numero di bit di dati, al tipo di controllo di parità e al numero di bit di arresto da considerare. Se ricordo bene, i modem usano nove linee dell'interfaccia RS-232C. Alcuni dispositivi come, ad esempio, i registratori di cassa, possono utilizzare l'handshaking hardware su linee RTS / CTS o su linee DTR / STR.

In generale è bene sapere come funziona l'interfaccia. Non è possibile comunicare se la velocità di trasmissione non corrisponde, ma l'impostazione errata di altri parametri potrebbe funzionare. Ad esempio È possibile inviare facilmente i dati al dispositivo aspettandosi 1 bit di stop con 2 bit di stop impostati. I problemi iniziano quando si tenta di ricevere dati in tal caso. Puoi anche utilizzare il bit di parità impostato correttamente come uno dei bit di stop, ecc.

Se non sei costretto a usare un compilatore particolare ti suggerisco di usare Qt e nella nuova versione 5.3 troverai una classe dedicata alle porte seriali:

http://qt-project.org/doc/qt-5/ qserialport.html

Il codice che scriverai verrà eseguito su tutte le piattaforme Qt supportate, almeno quelle che hanno porte seriali.

Sto usando purejavacomm: È un'implementazione di javax.comm scritta in puro java + JNA

A differenza di rxtx, non è necessario installare una dll. È scritto in puro Java + JNA, che ha risolto il problema della portabilità tra Windows e Linux per me. Dovrebbe essere facile eseguire il port su altri sistemi operativi supportati da JNA, come Solaris e FreeBSD, ma non l'ho provato.

Potresti aspettarti che una libreria Java pura sia in ritardo rispetto a un'implementazione nativa come rxtx nelle prestazioni, ma con le moderne CPU, è molto probabile che il collo di bottiglia sia il bitrate della tua porta seriale, non i cicli della CPU. Inoltre, è molto più facile eseguire il debug di una libreria mista Java / Native o di codice nativo compilato puro.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow