Configuring a Serial Port
9/8/2008
The most crítico fase em serial de Comunicações programação é definir as configurações porta com a estrutura DCB.
Inicializando erroneamente a DCB estrutura é Um comum problema. Quando um serial função de comunicações não gerar os resultados esperados, verificar que o DCB estrutura está configurada corretamente.
Um chamar para o CreateFile função abre um porta serial com configurações porta usar como padrão. Geralmente, o aplicativo precisa para alteração de padrões. Use a função GetCommState para recuperar as configurações usar como padrão e usar a função SetCommState fazer configurações porta.
Além disso, porta configuração envolve o uso a estrutura COMMTIMEOUTS para definir os valores tempo limite para operações de leitura/gravação. Quando ocorre um tempo limite, o ReadFile Ou WriteFile função retorna o número específico de caracteres transferidos com êxito. Para obter informações adicionais sobre a configuração Tempo limite, consulte Configuring Timeouts.
Para configurar um porta serial:
Inicializar o DCBlength membro das DCB estrutura para o tamanho da estrutura.
Isso é exigido antes de passar a estrutura como um argumento para uma função.
Chamar o GetCommState função para recuperar as configurações usar como padrão para a porta abertas com o CreateFile função.
Para identificar a porta, especificar in a hPort parâmetro de identificador que CreateFile Retorna.
Modificar DCB Os membros como exigido.
O seguinte é DCB estrutura membros.
Membro Descrição DCBlength
Antes chamado de GetCommState função, definido esse membro para o comprimento das DCB estrutura.
Negligenciando fazer essa pode causar uma falha ou retornar dados errados.
BAUDRATE
Especifica a velocidade de comunicação dispositivo.
Atribui uma real taxa de transmissão ou um índice, especificando uma constante CBR_. As constantes CBR_ são definidas no arquivo de cabeçalho winbase.h.
fBinary
Especifica se binário modo está habilitado.
The Microsoft® Win32® API não não transferências nonbinary modo suporte, portanto, esse membro deve ser TRUE.
Usar FALSE não trabalho.
fParity
Especifica se a verificação paridade é habilitado.
Se esse membro for TRUE, paridade verificação é executada e os erros são relatados.
fOutxCtsFlow
Ativa o controle de fluxo CTS logon e logoff.
Para usar rts/controle de fluxo CTS, especificar TRUE para esse membro e RTS_CONTROL_HANDSHAKE para a fRtsControl membro.
fOutxDsrFlow
Ativa o controle fluxo DSR logon e logoff.
Controle fluxo DSR raramente é usado.
Uma configuração típica porta é definir esse membro para FALSE, ao ativar a linha DTR.
fDtrControl
Especifica o controle de fluxo DTR.
DTR_CONTROL_ENABLE ativa a linha DTR durante a conexão.
DTR_CONTROL_HANDSHAKE ativa handshaking DTR.
DTR_CONTROL_DISABLE desativa a linha DTR.
fDsrSensitivity
Especifica se o driver de comunicação é confidencial para o estado do sinal de DSR.
Se esse membro for TRUE, o driver ignorará qualquer bytes recebidos, a menos que a entrada modem de DSR linha é alta.
fTXContinueOnXoff
Especifica se a transmissão pára quando o buffer de entrada está cheio e o driver foi transmitida a XoffChar caractere.
Se esse membro for TRUE, a transmissão continuará após o buffer de entrada chegou dentro XoffLim Bytes de sendo completo e o driver foi transmitida a XoffChar caractere para parar o recebimento bytes.
Se esse membro for FALSE, a transmissão não continuará até que esteja dentro de buffer de entrada XonLim Bytes de sendo vazio e o driver foi transmitida a XonChar caractere para recepção continuar.
fOutX
Especifica se controle de fluxo XON/XOFF é usado durante a transmissão.
Se esse membro for TRUE, transmissão pára quando o XoffChar caractere é recebida e inicia novamente quando o XonChar caractere é recebido.
fInX
Especifica se controle de fluxo XON/XOFF é usado durante a recepção.
Se esse membro é TRUE, o XoffChar caractere é enviado quando o buffer de entrada vem dentro XoffLim Bytes de sendo completo e o XonChar caractere é enviado quando o buffer de entrada vem dentro XonLim Bytes de sendo vazio.
fErrorChar
Especifica se os bytes recebidos com erros paridade serão substituídos com o caractere especificado pelo ErrorChar membro.
Se esse membro é TRUE e o fParity membro for TRUE, ocorre a substituição.
fNull
Especifica se NULL bytes são descartados.
Se esse membro é TRUE, NULL bytes serão descartadas quando recebidos.
fRtsControl
Ativa o controle de fluxo RTS logon e logoff.
RTS_CONTROL_ENABLE ativa a linha RTS durante a conexão.
RTS_CONTROL_HANDSHAKE ativa handshaking RTS.
RTS_CONTROL_DISABLE desativa a linha RTS.
RTS_CONTROL_TOGGLE especifica que a linha RTS é alta se bytes disponível para transmissão.
Afinal de contas armazenada em buffer bytes foram enviados, a linha RTS é baixa.
fAbortOnError
Especifica se ler e operações de gravação são finalizadas quando ocorre um erro.
Se esse membro for TRUE, o driver finalizará ler e operações de gravação com um status de erro quando ocorre um erro.
O driver não aceitar outras comunicações operações até que o aplicativo foi confirmada o erro, chamado de ClearCommError função.
fDummy2
Reservado; Não use.
wReserved
Não usado; definido como zero.
XonLim
Especifica o número máximo de bytes permitidos na fila.
O caractere Xon é enviado se o número de bytes na fila cai abaixo esse número.
XoffLim
Especifica o número máximo de bytes aceitos no buffer de entrada para o caractere XOff é enviada.
O número máximo de bytes aceitos é calculado pela subtraindo esse valor a partir de tamanho, em bytes, da buffer de entrada.
ByteSize
Especifica os bits por byte transmitido e recebido.
Paridade
Especifica a esquema paridade.
Não confunda esse membro com o fParity membro, que ativa ou desativa paridade.
Como paridade raramente é usada, esse membro pode geralmente ser NOPARITY.
StopBits
Especifica o número de bits parar.
ONESTOPBIT é mais comum configuração.
XonChar
Especifica o valor do caractere XON para transmissão e recepção.
XoffChar
Especifica o valor do caractere XOFF para transmissão e recepção.
ErrorChar
Especifica o valor do caractere usado para substituir bytes recebidos com erro de paridade.
EofChar
Especifica o valor do caractere usado para sinalizar o final dos dados.
EvtChar
Especifica o valor do caractere usado para sinalizar um evento.
WReserved1
Reservado, não use.
Chamar o SetCommState função para definir as configurações de porta.
O seguinte exemplo de código mostra como usar o GetCommState e SetCommState funções para configurar um porta serial.
DCB PortDCB;
// Initialize the DCBlength member.
PortDCB.DCBlength = sizeof (DCB);
// Get the default port setting information.
GetCommState (hPort, &PortDCB);
// Change the DCB structure settings.
PortDCB.BaudRate = 9600; // Current baud
PortDCB.fBinary = TRUE; // Binary mode; no EOF check
PortDCB.fParity = TRUE; // Enable parity checking
PortDCB.fOutxCtsFlow = FALSE; // No CTS output flow control
PortDCB.fOutxDsrFlow = FALSE; // No DSR output flow control
PortDCB.fDtrControl = DTR_CONTROL_ENABLE;
// DTR flow control type
PortDCB.fDsrSensitivity = FALSE; // DSR sensitivity
PortDCB.fTXContinueOnXoff = TRUE; // XOFF continues Tx
PortDCB.fOutX = FALSE; // No XON/XOFF out flow control
PortDCB.fInX = FALSE; // No XON/XOFF in flow control
PortDCB.fErrorChar = FALSE; // Disable error replacement
PortDCB.fNull = FALSE; // Disable null stripping
PortDCB.fRtsControl = RTS_CONTROL_ENABLE;
// RTS flow control
PortDCB.fAbortOnError = FALSE; // Do not abort reads/writes on
// error
PortDCB.ByteSize = 8; // Number of bits/byte, 4-8
PortDCB.Parity = NOPARITY; // 0-4=no,odd,even,mark,space
PortDCB.StopBits = ONESTOPBIT; // 0,1,2 = 1, 1.5, 2
// Configure the port according to the specifications of the DCB
// structure.
if (!SetCommState (hPort, &PortDCB))
{
// Could not configure the serial port.
dwError = GetLastError ();
MessageBox (hMainWnd, TEXT("Unable to configure the serial port"),
TEXT("Error"), MB_OK);
return FALSE;
}