Como faço para configurar e se comunicar com uma porta serial?

votos
41

Eu preciso enviar e receber dados através de conexões seriais (RS-232 e RS-422).

Como faço para configurar e se comunicar com tal conexão? Como faço para descobrir o que as definições de configuração (por exemplo, taxa de transmissão) devem ser e como faço para configurá-los?

Em particular, eu estou procurando fazer isso em Java, C / C ++, ou um dos grandes conchas Unix, mas também tenho algum interesse em programação serial usando Windows / Hyperterminal.

Publicado 06/08/2008 em 04:19
fonte usuário
Em outras línguas...                            


11 respostas

votos
28

Construir uma máquina do tempo e voltar a 1987? Ho ho.

Ok, há mais comentários sarcásticos.

Como faço para descobrir o que as definições de configuração (por exemplo, taxa de transmissão) devem ser ...

Leia a folha de dados? Ok, ok. Sério, último. Se você não sabe a taxa de transmissão do dispositivo que você está tentando se comunicar com, você tem duas escolhas. Começar a adivinhar, ou possivelmente busto para fora um o-alcance. Se você precisa de um bom ponto de partida, deixe-me sugerir 9600-8-N-1. Minha suspeita é que você pode chegar lá com força bruta de forma relativamente rápida. Há uma terceira opção de ter um ninja old-school que pode dizer apenas pelo olhar dos caracteres truncados em algum taxa de transmissão padrão que taxa de transmissão real é. Um truque de festa impressionante para ter certeza.

Esperemos que você tenha acesso a essas informações. Em unix / linux, você pode obter ahold de minicom para jogar com a porta serial diretamente. Isto deve tornar bastante rápido para obter a configuração descoberto.

um dos principais conchas Unix

Em Unix a porta (s) de série é / são para o / dev / subdir mapeado-arquivo. ttyS0, por exemplo. Se você configurar a taxa de transmissão correta e outros enfeites usando minicom, você pode até mesmo material do gato para esse arquivo para enviar coisas lá fora.

Para a carne da questão, você pode acessá-lo por meio de programação através dos cabeçalhos POSIX. termios.h é um dos grandes.

Veja: http://www.easysw.com/~mike/serial/serial.html#3_1 (Não está mais disponível)

mas eu também tenho algum interesse em programação serial usando Windows / Hyperterminal.

Hyperterminal e minicom são basicamente o mesmo programa. Quanto à forma de você ter acesso à porta serial do Windows deixar, eu vou deixar essa pergunta para alguém. Eu não fiz isso no Windows desde os dias Win95.

Respondeu 06/08/2008 em 04:27
fonte usuário

votos
10

Se você quiser codificar em Java Eu realmente recomendo SerialIOs SerialPort . É muito fácil de usar e você economiza dias de trabalho. Eu nunca encontrei uma biblioteca de código aberto tão boa quanto SerialIO, realmente!

Meu conselho: não use quadro IO série do Sol! É a partir de 1998 e cheio de bugs. Você pode usar rxtx mas serialio é melhor!

Respondeu 23/08/2008 em 09:15
fonte usuário

votos
8

Para C / C ++ no Windows você tem (pelo menos) duas escolhas:

  1. Use a classe SerialPort fornecido pelo .NET.
  2. Use a API Win32. Há um extenso artigo MSDN que remonta a 1995, e muitas bibliotecas livres e exemplos na web para você começar.

A opção .NET será muito mais fácil.

Respondeu 13/08/2008 em 13:44
fonte usuário

votos
4

Se ele precisa ser platfrom cruz, gostaria de sugerir olhando impulso Asio .

Respondeu 03/09/2008 em 13:12
fonte usuário

votos
3

Algum tempo atrás eu escrevi um aplicativo de tamanho decente para rotear conexões de uma fazenda de modems através de um endereço de rede TCP / IP.

Inicialmente eu olhei para um livre (free) biblioteca IO Serial. Tentei Sun, IBM e RXTX. Eles foram excelentes para desenvolver a aplicação, e em testes iniciais, mas na produção de cada um deles provou instável.

Finalmente eu pago para SerialPort do SerialIO. Convertendo mais era literalmente um exercício de importações de mudança, ea biblioteca tem sido absolutamente rocha sólida - Eu não posso recomendar o suficiente. Meu aplicativo foi executado no campo 24/7 para um par de anos agora, sem um único problema encontrado por vários clientes.

Se você iniciar o desenvolvimento usando SerialPort, eles têm uma melhor API e gostaria de usá-lo.

Se você precisar de suporte de plataforma cruzada, Java com SerialPort foi a melhor escolha que eu poderia encontrar.

Por último, o seu licenciamento é muito danado razoável contanto que você não está pré-instalar o software do equipamento para o seu cliente (s).

Respondeu 15/09/2008 em 20:16
fonte usuário

votos
3

No trabalho usamos TeraTerm e realterm para verificação de dados seriais está formatado corretamente. Também temos um divisor de hardware com um interruptor para que possamos monitorar o tráfego para a nossa aplicação através de um cabo de volta para outra porta.

Windows permite-lhe aceder à porta serial via CreateFile. Isso dá-lhe uma alça e de lá você pode configurar o acesso.

Respondeu 06/08/2008 em 06:04
fonte usuário

votos
3

Do outro lado, se você quiser fazê-lo usando C #, que será executado em Windows e Linux - com algumas limitações (EDIT:. Que podem ser fora de data eu não tenho nenhuma maneira de testá-lo.). Basta criar um SerialPort objeto, defina sua taxa de transmissão, portos e outras configurações estranhas, chamada aberta sobre ele, e escreva as suas byte [] s. Depois de toda a configuração, o objeto SerialPort age muito parecido com qualquer fluxo de rede, por isso deve ser fácil o suficiente para descobrir.

E como estados ibrandy, você precisa saber todas essas configurações, como taxa de transmissão, antes mesmo de começar a tentar comunicar com qualquer dispositivo serial.

Respondeu 06/08/2008 em 04:35
fonte usuário

votos
2

De Java do rxtx ( Não está mais disponível biblioteca) é muito bom. Ele pega onde quadro IO série do Sun parou.

Respondeu 08/08/2008 em 21:24
fonte usuário

votos
1

Se você não é obrigado a usar um compilador particular, eu sugiro usar Qt e na nova versão 5.3 você vai encontrar uma classe dedicada a portas seriais:

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

O código que você vai escrever será executado em todas as plataformas Qt supprited, pelo menos aqueles que têm portas seriais.

Respondeu 06/09/2014 em 14:01
fonte usuário

votos
1

Dependendo do dispositivo que você está tentando se comunicar com, pode haver mais parâmetros do que a taxa de transmissão, o número de bits de dados, tipo de verificação de paridade e número de bits de parada a considerar. Se bem me lembro, modems usar nove linhas da interface RS-232C. Alguns dispositivos, como, por exemplo, registros de caixa, pode usar handshaking hardware em RTS / CTS linhas ou em linhas / STR DTR.

Em geral, é bom saber como a interface funciona. Você não pode se comunicar, se a taxa de transmissão não corresponder, mas configuração errada de outros parâmetros pode tipo de trabalho. Por exemplo, você pode facilmente enviar dados para o dispositivo espera 1 bit de parada com 2 bits de parada definidos. Os problemas começam quando você tenta receber dados em tal caso. Você também pode usar adequadamente definir bit de paridade como um dos bits de parada, etc.

Respondeu 23/09/2008 em 02:21
fonte usuário

votos
0

Tenho vindo a utilizar purejavacomm: É uma implementação de javax.comm escrito em java puro + JNA

Ao contrário rxtx, você não precisa instalar um dll. Ele é escrito em Java puro + JNA, que resolveu o problema da portabilidade entre Windows e Linux para mim. Deve ser fácil para a porta para outro OS-es que JNA suporta, como Solaris e FreeBSD, mas eu não tentei.

Você pode esperar uma biblioteca Java pura a ficar para trás uma implementação nativa tais como rxtx no desempenho, mas com modernas CPUs, o gargalo é muito provável que seja o bitrate de sua porta serial, não ciclos de CPU. Além disso, é muito mais fácil de depurar do que um / biblioteca nativa mista Java ou código nativo compilado puro.

Respondeu 18/03/2013 em 11:59
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more