Leer datos desde el esclavo
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. Asegurarse de que el protocolo es el mismo para el maestro y el esclavo. Deben coincidir las áreas de memoria del maestro y del esclavo. Si los datos del esclavo no están disponibles en el área de usuario del maestro, utilizar FP_READ_FROM_SLAVE_AREA_OFFS o FP_MODBUS_MASTER.
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–247)
Ajustar a 1, si se aplica una SYS_ETHERNET_USER_CONNECTION_xx al Port de entrada
Dirección de origen del esclavo al que se solicitan los datos.
Salida
Área de palabras o registro de la unidad maestra en la que se escriben los datos solicitados.
Para FP7 solamente: Para obtener una descripción de todos los códigos de error, consultar la tabla de códigos de error de comunicación Modbus/MEWTOCOL.
Para otros PLCs: ajustar a 0
Durante el envío: Bandera de envío de la comunicación maestra es TRUE
Envío realizado: Bandera de envío de la comunicación maestra es FALSE
Finalización normal: FALSE
Finalización anormal: TRUE
si el área especificada utilizando el modificador índice supera el límite.
Si los datos del esclavo o del maestro exceden el rango de direcciones disponibles.
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 el área especificada utilizando el modificador índice supera el límite.
Si los datos del esclavo o del maestro exceden el rango de direcciones disponibles.
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.
En la Lista de Variables Globales, se definen las variables a las que pueden acceder todas las POUs del proyecto.
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_EXTERNAL
g_Peripherie_SlaveResult_Address: ARRAY[0..9] OF REAL:=[10(0)];
END_VAR
VAR
bReadResult: BOOL:=FALSE;
wReadFromSlaveResult: WORD:=0;
(*result of write to slave instruction*)
iSlaveStationNumber: INT:=0;
(*slave station number*)
arrResults: ARRAY [0..9] OF REAL:=[10(0.0)];
(*Array of results to be read from slave station*)
iSlaveMemoryArea: INT:=5;
(*memory Area in slave station*)
iSlaveMemoryOffset: INT:=100;
iSlaveMemorySize: INT:=1;
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_VARIN,,SYS_COM1_PORT,19,2,21,4,);
B(B_VARIN,,iSlaveStationNumber,19,3,21,5,);
B(B_CONTACT,,bReadResult,8,1,10,3,);
B(B_VAROUT,,wReadFromSlaveResult,38,3,40,5,);
B(B_VAROUT,,arrResults,38,2,40,4,);
B(B_F,FP_READ_FROM_SLAVE!,,21,0,33,6,,?DEN?DnPort?DStationNumber?DSlaveAddress?AENO?CDestination?CResult);
B(B_VARIN,,g_Peripherie_SlaveResult_Address,19,4,21,6,);
L(1,2,8,2);
L(10,2,21,2);
L(33,3,38,3);
L(33,4,38,4);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if (bReadResult) then
FP_READ_FROM_SLAVE(Port := SYS_COM1_PORT, StationNumber := iSlaveStationNumber,
SlaveAddress := g_Peripherie_SlaveResult_Address, Destination => arrResults[0],
Result => wReadFromSlaveResult);
end_if;