F161_MRCV

Lectura de datos desde el puerto de la MCU

Utilizar esta instrucción para copiar en el buffer de recepción de la CPU, los datos recibidos en la unidad MCU desde un dispositivo externo. El puerto de comunicación de la MCU se especifica en s_Port. El buffer de recepción se define en d1_Start y d2_End.

Parámetros

Entrada

s_Port (WORD, INT, UINT)

Especificación del número de slot (byte de mayor peso) y número de puerto (byte de menor peso) de la MCU a la que se transfieren los datos.

16#xx01: COM1 en la MCU en el slot 16#xx

16#xx02: COM2 en la MCU en el slot 16#xx

d1_Start (WORD, INT, UINT)

Dirección de inicio del buffer de recepción

d2_End (WORD, INT, UINT)

Dirección final del buffer de recepción

Observaciones

  • No ejecutar la instrucción F161_MRCV hasta que se haya verificado el fin de recepción, evaluando la bandera de "recepción completa". La obtención de datos utilizando la instrucción F161_MRCV no funcionaría correctamente. La bandera de "recepción completa" se puede evaluar utilizando las funciones IsReceptionDone y IsReceptionDoneByTimeOut o evaluando las banderas de entrada (X) X0 y X2.

  • El número de bytes recibidos se almacena en la dirección inicial especificada por d1_Start en el buffer de recepción. Si los datos recibidos superan la dirección final especificada por b2_End, se generará un error de operación. Sin embargo, los datos recibidos hasta la dirección d2_End se almacenarán igualmente. La instrucción F161_MRCV también limpia el buffer de recepción, resetea la "bandera de recepción completa" y permite recibir el siguiente boque de datos.

  • F161_MRCV está disponible para todos los PLCs: Si en lugar de las banderas, se utilizan las funciones correspondientes, se pueden crear programas independientes del tipo PLC para manejar las comunicaciones, tanto para los puertos de la CPU como para los puertos de la MCU. Los PLCs que no utilizan puertos MCU simplemente no traducen la instrucción F161_MRCV. Se recomienda utilizar las funciónes ReadData o ReadCharacters para una programa que sea más fácil de leer.

Banderas de error

sys_bIsOperationErrorHold (pasa a TRUE y permanece TRUE)
  • si el área especificada utilizando el modificador índice supera el límite.

  • si no se ha encontrado ninguna unidad MCU en el slot especificado o se deben enviar cero bytes.

  • si no existe el puerto de comunicación especificado

sys_bIsOperationErrorNonHold (pasa a TRUE para un ciclo de scan)
  • si el área especificada utilizando el modificador índice supera el límite.

  • si no se ha encontrado ninguna unidad MCU en el slot especificado o se deben enviar cero bytes.

  • si no existe el puerto de comunicación especificado

Ejemplo

Cabecera de la POU

Todas las variables de entrada y de salida utilizadas para la programación de esta función han sido declaradas en la Cabecera de la POU. Se utiliza la misma cabecera de la POU para todos los lenguajes de programación.

	VAR
		ReadReceivedData: BOOL:=FALSE;
		ReceiveBuffer: ARRAY [0..10] OF INT:=[11(0)];
	END_VAR

Cuerpo LD

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 8 ;
        NETWORK_BODY
B(B_F,F161_MRCV!,,17,2,24,8,,?DEN?Ds_Port?Dd1_Start?Dd2_End?AENO);
B(B_VARIN,,ReadReceivedData,15,3,17,5,);
B(B_VARIN,,16#0201,15,4,17,6,);
B(B_VARIN,,ReceiveBuffer[0],15,5,17,7,);
B(B_VARIN,,ReceiveBuffer[10],15,6,17,8,);
B(B_COMMENT,,The received data of port 1 of the MCU in slot 2 are read:,2,1,32,2,);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_F,F161_MRCV!,,17,0,24,6,,?DEN?Ds_Port?Dd1_Start?Dd2_End?AENO);
B(B_VARIN,,ReadReceivedData,15,1,17,3,);
B(B_VARIN,,16#0301,15,2,17,4,);
B(B_VARIN,,ReceiveBuffer,6,4,8,6,);
B(B_F,Adr_Of_Var_I!,,10,3,17,5,,?D?C);
B(B_F,AdrLast_Of_Var_I!,,8,4,17,6,,?D?C);
L(1,0,1,6);
L(8,4,8,5);
L(8,4,10,4);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Modificado el: 2022-04-19Comentarios sobre esta páginaLínea directa de Panasonic