Red de conocimiento informático - Aprendizaje de programación - El puerto serie MFC recibe datos

El puerto serie MFC recibe datos

Utilice el puerto serie de control MSComm para recibir datos, generalmente configurado en SetRTreshold(1);

//Parámetro 1 significa siempre que haya más de o igual a 1 carácter en el número serie búfer de recepción del puerto Se activará un evento OnComm para recibir datos

Y la cantidad de datos recibidos por el puerto serie cada vez es incierta. Si determina cuántos datos necesita recibir, será más fácil.

//Variables globales

BYTE Comm_Packet_Len; //Número de datos a recibir

BYTE Comm_DataBuffer[20] //Almacenamiento de datos recibidos en el puerto serie; secuencia de datos

long Comm_Packet_Index; //El número de datos recibidos cada vez y el índice donde se deben colocar los datos en la matriz global está marcado

//Se borra después de cada dato. Procesamiento Prepárese para la próxima recepción

void CEOLDlg::OnMscomm()

{

// TODO: Agregue su código de controlador de notificaciones de control aquí

VARIANT variante_inp;

COleSafeArray safearray_inp;

long len=0, k=0; //Variables utilizadas al convertir a matrices

BYTE rxdata [204]; //Establecer matriz BYTE Un entero de 8 bits que no está firmado.

CString strtemp; //Variable de carácter

int temp = 0; p>

unsigned char ecuchecksum = 0; //ecu devuelve el código de verificación

if(m_ctrlComm.GetCommEvent() == 2) //El valor del evento es 2, lo que significa que hay un carácter

{ //Puede agregar código de procesamiento de acuerdo con su propio protocolo de comunicación a continuación

variante_inp = m_ctrlComm.GetInput();//Búfer de lectura

safearray_inp = variante_inp ; //La variable de tipo VARIANT se convierte en variable de tipo ColeSafeArray

len = safearray_inp.GetOneDimSize() //Obtiene la longitud efectiva de los datos

for(k = 0; k < len ; k++) //Convertir variable de tipo ColeSafeArray a matriz de tipo BYTE

{

safearray_inp.GetElement(&k, rxdata + k);//Convertir a matriz de tipo BYTE

}

for(temp = 0; temp < len; temp++)

{

Comm_DataBuffer[Comm_Packet_Index + temp] = rxdata[temp] ;

}

Comm_Packet_Index += len;

if(Comm_Packet_Index == Comm_Packet_Len)//El número de datos recibidos es igual a

{

//Procesar los datos recibidos

}

}

}