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.
Entrada
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
Dirección de inicio del buffer de recepción
Dirección final del buffer de recepción
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.
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
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
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
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