Cómo utilizar el control MScomm
1: Agregar control MSComm
2: Agregar variables miembro del control MSComm al cuadro de diálogo
Haga clic derecho en el control MSComm y seleccione Agregar variable... p>
3: Agregar evento OnComm al cuadro de diálogo
Haga clic derecho en el control MSComm y seleccione Agregar identificador de evento.
4: Abrir/cerrar el serial port.
void Ctbox_debug_viewDlg::OnBnClickedBtOpen()
{
// TODO: agregue aquí el código del controlador de notificaciones de control
if (m_mscomm.get_PortOpen() )
{
m_mscomm.put_PortOpen(FALSE);
GetDlgItem(IDC_BT_OPEN)->SetWindowText(_T("Abrir")
ShowInfo(_T("¡El puerto serie se cerró correctamente!"));
m_OpenStatus =false
return; }
UpdateData(TRUE);
m_OpenStatus =true;
//Número de puerto actual
m_mscomm.put_CommPort(m_Port+1) );//Número de puerto
m_mscomm.put_InBufferSize(1024);//Recibir buffer
m_mscomm.put_OutBufferSize(1024);//Enviar buffer
m_mscomm .put_InputLen(0) ;//Establece la longitud de datos del área de recepción actual en 0, lo que indica todas las lecturas
m_mscomm.put_InputMode(1);//Lee y escribe datos en modo binario
m_mscomm.put_RTreshold(1);//Cuando el búfer de recepción tiene 1 o más caracteres, se activará el evento OnComm de los datos recibidos
//Velocidad en baudios
Velocidad en baudios DWORD
switch(m_CombolBaudrate.GetCurSel())
{
caso 0:
velocidad en baudios =115200
ruptura;
caso 1:
velocidad en baudios =9600;
ruptura
predeterminado:
ASSERT(FALSE);
break;
}
configuración de CString; ,8,1" ), velocidad en baudios);
m_mscomm.put_Settings(configuración/
*_T("115200,n,8,1")*/);//Velocidad de baudios, sin paridad, 8 bits de datos, 1 bit de parada
m_mscomm.put_PortOpen(TRUE) ;//Abra el puerto serie
GetDlgItem(IDC_BT_OPEN)->SetWindowText(_T("Close"));
ShowInfo(_T("¡Abra el puerto serie correctamente!")); > p>
}
5: Recibir datos del puerto serie
void Ctbox_debug_viewDlg::OnCommMscomm1()
{
/ / TODO: agregue aquí el código del controlador de mensajes
short curEvent =m_mscomm.get_CommEvent()
switch(curEvent)
{
caso CMscomm1::comEvReceive:
EvReceiveHandle();
descanso
}
}
void Ctbox_debug_viewDlg ::EvReceiveHandle(void)
{
static unsigned int cnt=0
VARIANT variante_inp
COleSafeArray safearray_inp;
p>long len,k;
/*unsigned intdata[1024]={0};*/
BYTE rxdata[1024];// Establecer matriz BYTE
CString strtemp;
cnt++;
variante_inp= m_mscomm.get_Input();//Leer búfer
safearray_inp= variante_inp; //Conversión de variable
len= safearray_inp.GetOneDimSize();//Obtener la longitud efectiva de los datos
para (k=0;k { safearray_inp.GetElement(&k,rxdata+k } /*char c_char */ { strtemp.Format(_T("%c"),*(rxdata+k)); /p > m_RecveString +=strtemp; if(*(rxdata+k) =='\n') { ShowInfoByFilter( m_RecveString) m_RecveString =""; } } } 6: Enviar datos del puerto serie void Ctbox_debug_viewDlg::OnBnClickedBtSend() { // TODO: agregue aquí el código del controlador de notificaciones de control if(m_OpenStatus ==false) < / p> { AfxMessageBox(_T("Abra primero el puerto serie")); return } UpdateData(TRUE); if(m_SendString.IsEmpty()) retorno if(m_AutoAddLF) { p> m_SendString +="\r\n" } m_mscomm.put_Output(COleVariant(m_SendString)); MostrarInfo(m_SendString ); }