Red de conocimiento informático - Material del sitio web - Cómo utilizar el control MScomm

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...

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 */

<; p> for (k=0;k

{

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)

{

m_SendString +="\r\n"

}

m_mscomm.put_Output(COleVariant(m_SendString)); MostrarInfo(m_SendString );

}