Pergunta

Gostaria de saber se e como é possível controlar os RS-232 linhas de handshaking diretamente do win32 (o antigo C-API).

Eu gostaria de interface com um pedaço externa de hardware, e dois dados de linhas simples seria suficiente para minhas necessidades.

Assim - há uma API para Win32 que me permite ler e escrever o estado das quatro linhas de status? Em comunicação em série normal, as linhas de handshaking são impulsionados pelo UART automaticamente (se sincronismo de hardware está activada).

Eu me lembro que era trivial em DOS. Um só teve que programar o UART diretamente. Tem esta funcionalidade sobreviveu em win32 de alguma forma?

Foi útil?

Solução

Você pode controlar RTS e DTR usando SetCommState(). Você também pode definir as coisas para ter hardware ou o FlowControl hardware alça driver (CTS e / ou DSR), ou você pode definir as coisas usando SetCommMask() de modo a obter eventos quando os sinais de mudança.

Uma visão decente é aqui: http://msdn.microsoft.com/ en-us / library / ms810467.aspx

Note que o Win32 API Serial Comm e / ou driver pode ser mimado, então esteja preparado para ter que fazer alguma depuração do que está acontecendo no fio.

Outras dicas

Eu corri em toda este tutorial quando eu tive que fazer um projeto para se comunicar com a porta RS232. É um exemplo completo sobre como abrir a porta, definir algumas propriedades, incluindo os tempos de espera, leitura / gravação e fechar a porta. Mesmo que o seu projecto é provavelmente mais por agora, espero que este continuará a ser útil, pois permanece nos arquivos SO.

Você ainda pode fazer tipos similares de programação apenas para chegar ao hardware protegido você precisará implementar um driver de dispositivo. Presumo que este ficou mais fácil desde os anos 1980, quando eu estava fazendo o mesmo tipo de trabalho.

é o Microsoft realmente fazendo hardware handshaking agora? Por muitos anos NT, win2000 e XP não fazer aperto de mão no hardware. Em vez disso, quando o FIFO atingiu um certo ponto, o driver de dispositivo iria alterar manualmente a linha cts. O que significa que era incrivelmente simples de fazer com que o driver de dispositivo para dados perder, pegue uma janela com o mouse e fazer círculos ao redor da tela, por exemplo (certificando-se de que você tomar essa janela fora do lado esquerdo da tela em todos ou alguns dos passes ). Alt-Enter para tomar um prompt de comando de / para tela cheia era uma maneira fácil de causar uma perda de dados. Ou qualquer outra coisa que faz com que o suficiente de uma latência de interrupção. Basicamente controle Microsofts fluxo de hardware não é hardware, mas o controle de fluxo de software, mesmo que o hardware tem drivers de recursos de hardware de controle de fluxo de Microsft não estavam montando esse bocado. Sealevel acabou fazendo apoio que pouco, bem sorta, você tinha que colocar as configurações não relacionadas certas em SetCommState () para habilitá-lo.

Tanto quanto o seu programa de controlo dos sinais, uso SetCommState ().

Existem alguns adaptadores USB para Serial que não suportam o controle de fluxo DTR / DSR / DCD. Então, pode ser este é o seu caso.

http://www.digi.com/support/kbase/kbaseresultdetl? id = 588

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top