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