Cómo utilizar vs2008 para lograr la comunicación en serie
El control MSComm transmite y recibe datos a través del puerto serie, proporcionando capacidades de comunicación serie a las aplicaciones. El control MSComm es muy conveniente para la programación del puerto serie. Los programadores no necesitan perder tiempo para comprender funciones API más complejas y se puede usar en VC, VB, Delphi y otros lenguajes. Microsoft Communications Control (en adelante, MSComm) es un control ActiveX proporcionado por Microsoft que simplifica la programación de comunicaciones en serie en Windows. Proporciona a las aplicaciones un método simple para enviar y recibir datos a través de la interfaz en serie.
2 Ejemplos de uso
1 Cree un nuevo proyecto de aplicación MFC basado en diálogos.
2 Añadir control ActiveX.
Haga clic derecho en el espacio en blanco del cuadro de diálogo y seleccione "Insertar control ActiveX" en el menú emergente. Aparecerá un cuadro de diálogo con una lista de todos los controles que se han registrado en esta máquina. Seleccione "Microsoft Communications Control, versión 6.0" y haga clic en "Aceptar".
3 Añadir clases y variables asociadas.
Haga clic con el botón derecho en el control de puerto serie recién agregado (icono de teléfono) en el cuadro de diálogo y seleccione "Agregar-->Agregar variable" para asociar una variable miembro con el control. 4 Agregue la función de procesamiento de mensajes de eventos del puerto serie. Haga clic con el botón derecho en el icono de control del puerto serie en el cuadro de diálogo, seleccione "Agregar manejador de eventos" en el menú emergente, mantenga el nombre del controlador de función predeterminado y haga clic en "Agregar y editar" para completar la adición del procesamiento de mensajes de eventos del puerto serie. función. Esta función se utiliza para manejar eventos de mensajes del puerto serie. Por ejemplo, cada vez que el puerto serie recibe datos, se generará un evento de mensaje de que hay caracteres en el búfer de datos del puerto serie y se ejecutará esta función.
5 Inicializa el puerto serie.
Supongamos que la variable asociada del control del puerto serie se llama m_sComm, la cual se puede inicializar mediante el siguiente código
[cpp] view PlaincopyBOOL CdipdetectionDlg::OnInitDialog(){CDialog: :OnInitDialog();/ / Agregue el elemento de menú "Acerca de..." al menú del sistema. // IDM_ABOUTBOX debe estar dentro del alcance del comando del sistema. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX lt; 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); ACERCA DE LA CAJA ); ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty()){
pSysMenu-gt;AppendMenu(MF_SEPARATOR);
pSysMenu- gt ;AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}//Establezca el icono de este cuadro de diálogo.
El marco hará esto automáticamente
// cuando la ventana principal de la aplicación no sea un cuadro de diálogo
SetIcon(m_hIcon, TRUE); // Establece el icono grande SetIcon(m_hIcon, FALSE); ) ; //Establecer icono pequeño // TODO: Agregue código de inicialización adicional aquí if (m_MSComm.get_PortOpen()){m_MSComm.put_PortOpen(FALSE);}m_MSComm.put_CommPort(6); administración de dispositivos El número de serie que se muestra en el dispositivo puede ser diferente en diferentes máquinas m_MSComm.put_InBufferSize(1024); m_MSComm.put_OutBufferSize(1024); n, 8, 1")); m_MSComm.put_RTreshold(1); //Esta línea de código es crítica. Si no está configurada, no se recibirán datos en la función de respuesta (tragedia, no presté atención y se quedó atascado aquí durante mucho tiempo) m_MSComm. put_InputLen(0); //Lee todos los datos a la vez
if (!m_MSComm.get_PortOpen()){m_MSComm.put_PortOpen(TRUE);}
else
{MessageBox(_T("¡Comm6 no se puede abrir!"
));
}
return TRUE; // A menos que el foco esté configurado en control, de lo contrario devuelve TRUE
}
6 Enviar y recibir datos
[cpp] view PlaincopyBEGIN_EVENTSINK_MAP(CdipdetectionDlg,
CDialog)ON_EVENT (CdipdetectionDlg, IDC_MSCOMM, 1, CdipdetectionDlg::OnCommMscomm, VTS_NONE)END_EVENTSINK_MAP() void CdipdetectionDlg::OnCommMscomm(
{ // TODO: Agregar código de controlador de mensajes aquí VARIANT variante_inp; COleSafeArray safearray_inp; LONG len, k; char rxdata[15]; //Establezca la longitud de los datos de acuerdo con sus requisitos reales switch (m_MSComm.get_CommEvent()){caso 1: //Enviar salto de datos; /Recibir datos variante_inp = m_MSComm.get_Input (); //leer datossafearray_inp = variante_inp; len = safearray_inp.GetOneDimSize(); //Obtener la longitud efectiva de los datos para (k = 0; k lt; len; k) {safearray_inp.GetElement (amp; k, rxdata k); }//Después de recibir los datos, analiza rxdata según la situación real
break;
}
}