Leer datos desde el esclavo con tipo y Offset
Utilizar esta instrucción para pedir datos desde un esclavo a través del puerto de comunicación utilizando el protocolo MEWTOCOL o Modbus RTU, según se haya definido en la configuración de los registros del sistema del puerto utilizado.Para la transmisión de datos utilizando Modbus, el compilador genera comandos Modbus basados en las direcciones Modbus.
Entrada
Especificar los puertos de comunicación (dependiendo del tipo de PLC):
Puerto COM, por ejemplo SYS_COM0_PORT
Puerto Ethernet, por ejemplo SYS_ETHERNET_USER_CONNECTION_1
MCU/SCU por ejemplo 16#xx01 (xx = número de slot) en COM01
Número de estación del esclavo (MEWTOCOL: 1–99, MODBUS: 1–255), Difusión: 0)
Ajustar a 1, si se aplica una SYS_ETHERNET_USER_CONNECTION_xx al Port de entrada
Tipo de dirección destino en el esclavo. Especificar un Offset de cero, por ejemplo DT0 o WL0.
Offset de la dirección de inicio del esclavo desde el que se van a leer los datos. El tipo de dirección está definido por SlaveWordAddressType.
Número de palabras (bits) a enviar.
Opción 1:
Número de palabras
para Modbus RTU: 16#001–16#07F
para MEWTOCOL-COM: 16#001–16#1FD o 16#001–16#1B (FP0, FP-e)
Opción 2:
Palabra de control para la transferencia de bits: 16#8T0F con T para transferencia de bits al maestro y F para transferencia de bits al esclavo (excepto para FP7).
Salida
Área de palabras o registro de la unidad maestra en la que se escriben los datos solicitados.
En lugar de utilizar esta instrucción F, se recomienda utilizar la instrucción FP7 correspondiente: FP_READ_FROM_SLAVE_AREA_OFFS.
Las instrucciones F145 o F146 solo se pueden ejecutar si no está activa ninguna de las dos instrucciones. Evaluar la bandera "F145/F146 no activa" para comprobar el estado de las instrucciones.
Evaluar la bandera "F145/F146 error" para comprobar si la transmisión se ha completado sin errores.
Las instrucciones F145 o F146 no se pueden ejecutar si la dirección destino es un relé interno especial (desde R9000), un registro de datos especial (desde DT9000/DT90000), o un fichero de datos FL.
Si los datos del esclavo o del maestro exceden el rango de direcciones disponibles.
si SlaveWordAddressType: Offset ¹ 0
Si el modo de comunicación no está configurado como MEWTOCOL-COM Maestro/Esclavo o Modbus RTU Maestro/Esclavo.
Si no esta instalado el casete de comunicaciones necesario para el puerto adicional (COM) seleccionado.
Si los datos del esclavo o del maestro exceden el rango de direcciones disponibles.
si SlaveWordAddressType: Offset ¹ 0
Si el modo de comunicación no está configurado como MEWTOCOL-COM Maestro/Esclavo o Modbus RTU Maestro/Esclavo.
Si no esta instalado el casete de comunicaciones necesario para el puerto adicional (COM) seleccionado.
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
bBool2: BOOL:=FALSE;
bRead1: BOOL:=FALSE;
bWrite2: BOOL:=FALSE;
Bool16_OverlappingDut_1: BOOL16_OVERLAPPING_DUT;
END_VAR
Si bRead1 y sys_bIsComPort1F145F146NotActive pasan a TRUE, la salida Y38 del esclavo 2 es leída y escrita en el bit 1 de Bool16_OverlappingDut_1.w0. Se puede acceder a este bit con Bool16_OverlappingDut_1.b1 y copiarlo en bBool2.
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_CONTACT,,bRead1,3,1,5,3,);
B(B_CONTACT,,sys_bIsComPort1F145F146NotActive,12,1,14,3,);
B(B_COIL,,bWrite2,45,1,47,3,S);
B(B_VARIN,,2,22,3,24,5,);
B(B_VARIN,,WY0,22,4,24,6,);
B(B_VARIN,,3,22,5,24,7,);
B(B_VARIN,,SYS_COM1_PORT,22,2,24,4,);
B(B_COIL,,bRead1,41,1,43,3,E);
B(B_F,F146_READ_DATA_TYPE_OFFS!,Instance,24,0,39,8,,?DEN?DPort?DSlaveAddress?DSlaveWordAddressType?DSlaveWordAddressOffs?DNumberOfWords_BitsInWords?AENO?CMasterWordData);
B(B_VARIN,,16#8108,22,6,24,8,);
B(B_VAROUT,,Bool16_OverlappingDut_1.w0,39,2,41,4,);
L(1,2,3,2);
L(5,2,12,2);
L(43,2,45,2);
L(14,2,24,2);
L(39,2,41,2);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 3 ;
NETWORK_BODY
B(B_CONTACT,,Bool16_OverlappingDut_1.b1,8,1,10,3,);
B(B_COIL,,bBool2,20,1,22,3,);
L(10,2,20,2);
L(1,2,8,2);
L(1,0,1,3);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if (bRead1 and sys_bIsComPort1F145F146NotActive) then
F146_READ_DATA_TYPE_OFFS(Port := SYS_COM1_PORT,
SlaveAddress := 2,
SlaveWordAddressType := WY0,
SlaveWordAddressOffs := 3,
NumberOfWords_BitsInWords := 16#8108,
MasterWordData => Bool16_OverlappingDut_1.w0);
end_if;
bBool2 := Bool16_OverlappingDut_1.b1;