Domanda

Ho bisogno di inviare e ricevere dati su connessioni seriali (RS-232 e RS-422).

Come faccio a impostare e comunicare con una connessione di questo tipo?Come faccio a capire di che cosa le impostazioni di configurazione (ad es.baud rate) dovrebbe essere e come faccio a impostarli?

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

È stato utile?

Soluzione

Costruire una macchina del tempo e tornare indietro al 1987?Ho Ho.

Ok, niente più commenti snarky.

Come faccio a capire di che cosa le impostazioni di configurazione (ad es.baud rate) deve essere...

Leggi il datasheet?Ok, Ok.Seriamente, l'ultimo.Se non si conosce la velocità di trasmissione del dispositivo che si sta tentando di comunicare, si hanno due scelte.Iniziare a indovinare, o, eventualmente, il busto di un o-scope.Se avete bisogno di un buon punto di partenza, mi permetto di suggerire 9600-8-N-1.Il mio sospetto è che si può arrivare con la forza bruta relativamente rapidamente.C'è una terza opzione di avere una vecchia scuola di ninja che si può dire, solo con lo SGUARDO dei caratteri illeggibili a un certo standard di baud rate qual è il reale e baud rate.Un'imponente festa di trucco per essere sicuri.

Speriamo che se si ha accesso a queste informazioni.In unix/linux, si può ottenere ahold di minicom per giocare con la porta seriale direttamente.Questo dovrebbe rendere abbastanza veloce per ottenere la configurazione capito.

uno dei principali shell di Unix

In Unix la porta seriale(s) è/sono file mappato in i /dev/ subdir.ttyS0, per esempio.Se si imposta la velocità di trasmissione corretta e quant'altro utilizzando minicom, si può anche roba gatto a quel file di inviare roba là fuori.

Alla carne della questione, si può accedere a livello di programmazione tramite il POSIX intestazioni.termios.h è il big one.

Vedere: http://www.easysw.com/~mike/seriale/serial.html#3_1 (NON PIÙ DISPONIBILE)

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

Hyperterminal e minicom sono fondamentalmente lo stesso programma.Per quanto riguarda Windows ti permette di ottenere l'accesso alla porta seriale, lascio che la domanda per qualcun altro.Non ho fatto in Windows da Windows 95 giorni.

Altri suggerimenti

Se volete il codice in Java mi raccomando SerialIOs SerialPort.È molto facile da usare e consente di risparmiare giorni di lavoro.Non ho mai trovato una libreria open source buono come SerialIO, DAVVERO!

Il mio consiglio:non utilizzare Sole di serie IO framework!È dal 1998 e pieno di bug.È possibile utilizzare rxtx ma serialio è meglio!

Per C/C++ su Windows sono (almeno) due scelte:

  1. Utilizzare la classe SerialPort previsti dall'art .NET.
  2. Utilizzare l'API Win32.C'è un ampio articolo di MSDN risalente al 1995, e di molte librerie ed esempi sul web per iniziare.

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

Se deve essere cross platfrom, vorrei suggerire Boost Asio.

Al lavoro usiamo teraterm e realterm per il controllo seriale di dati è formattato correttamente.Anche noi abbiamo un hardware splitter con un interruttore in modo da poter monitorare il traffico per la nostra applicazione tramite un cavo a un'altra porta.

Windows consente di accedere alla porta seriale via CreateFile.Che ti da un manico e da lì si può configurare l'accesso.

Un po ' di tempo fa ho scritto un dignitoso dimensioni applicazione di instradare le connessioni da una fattoria del modem attraverso una rete TCP/IP indirizzo.

Inizialmente ho guardato per un svincolato (gratuito) di Serie IO library.Ho provato Sun, IBM e RxTx.Sono stati bene per sviluppare l'applicazione, e in fase iniziale di sperimentazione, ma in produzione in ognuno di essi si è dimostrato instabile.

Infine ho pagato per SerialIO del SerialPort.La conversione è stata letteralmente un esercizio di cambiare le importazioni, e la libreria è stata assolutamente solida come una roccia, non posso raccomandare abbastanza.La mia applicazione è in esecuzione nel campo 24/7 per un paio di anni ormai, non con un singolo problema riscontrato da parte di più clienti.

Se si avvia lo sviluppo di SerialPort, essi hanno una migliore API e vorrei usarlo.

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

Infine, la loro licenza è maledettamente ragionevole nella misura in cui non la preinstallazione del software sulle apparecchiature per il cliente(s).

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.Io non ho modo di testarlo.).Basta creare un SerialPort oggetto, impostare la velocità in baud, porto e qualsiasi altro dispari impostazioni, chiamata aperto su di esso, e scrivere il byte[]s.Dopo tutto, l'installazione, l'oggetto SerialPort agisce in modo molto simile a qualsiasi rete di flusso, quindi dovrebbe essere abbastanza facile da capire.

E come ibrandy stati, è necessario conoscere tutte queste impostazioni, come baud rate, anche prima di iniziare il tentativo di comunicare con qualsiasi dispositivo seriale.

A seconda del dispositivo che Si sta tentando di comunicare, ci possono essere più parametri di baud rate, il numero di bit di dati, il tipo di controllo di parità e il numero di bit di stop da considerare.Se mi ricordo bene, modem utilizzare nove linee di interfaccia RS-232C.Alcuni dispositivi, come ad esempio i registratori di cassa, può utilizzare la sincronizzazione hardware su RTS/CTS linee o su DTR/STR linee.

In generale è bene sapere che il funzionamento dell'interfaccia.Non è possibile comunicare se il baud rate non corrisponde, ma è sbagliato l'impostazione di altri parametri che potrebbero tipo di lavoro.Per esempio, Si può facilmente inviare dati al dispositivo attesa di 1 bit di stop 2 bit di stop set.I problemi cominciano quando Si tenta di ricevere i dati in questo caso.È inoltre possibile utilizzare in modo appropriato set di bit di parità come uno dei bit di stop, etc.

Se non si è costretti a utilizzare un compilatore particolare, vi consiglio di usare Qt e nella nuova versione 5.3 troverete una classe dedicata alle porte seriali:

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

Il codice da scrivere su supprited Qt piattaforme, almeno quelli che hanno le porte seriali.

Sono stato con purejavacomm:Si tratta di un'implementazione di javax.comm scritto in java + JNA

A differenza di rxtx, non hai bisogno di installare una dll.È scritto in Java + JNA, che ha risolto il problema della portabilità tra Windows e Linux per me.Dovrebbe essere facile per porta per altri OS es che JNA supporta, come Solaris e FreeBSD, ma non l'ho ancora provato.

Ci si potrebbe aspettare una pura libreria java per il ritardo di una implementazione nativa come rxtx in termini di prestazioni, ma con le moderne CPU il collo di bottiglia è molto probabile che sia il bitrate della porta seriale, non cicli di CPU.Inoltre, è molto più facile per eseguire il debug di un misto Java/libreria Nativa o puro compilato in codice nativo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top