FP_READ_FROM_SLAVE

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.

Parámetros

Entrada

Port (WORD, INT, UINT)

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

StationNumber (WORD, INT, UINT)

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

SlaveAddress (WORD, INT, UINT)

Dirección de origen del esclavo al que se solicitan los datos.

Salida

Destination (ANY)

Área de palabras o registro de la unidad maestra en la que se escriben los datos solicitados.

Result (ANY)

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

Diagrama de tiempos

  1.  (1) Bandera "clear-to-send" (listo para envío) de la comunicación maestra, p. ej., sys_bIsEthernetUserConnection1MasterCommunication
  2.  (2) Comprobar que la bandera "clear-to-send (listo para envío) de la comunicación maestra es TRUE y verificar que la bandera de envío de la comunicación maestra es FALSE
  3.  (3) Bandera de envío de la comunicación maestra, p. ej., sys_bIsEthernetUserConnection1MasterCommunicationActive

    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

  4.  (4) Ejecutar esta instrucción
  5.  (5) Bandera de envío realizado de la comunicación maestra, p. ej., sys_bIsEthernetUserConnection1CommunicationError

    Finalización normal: FALSE

    Finalización anormal: TRUE

  6.  (6) Envío de datos
  7.  (7) Procesamiento de la respuesta recibida

Banderas de error

sys_bIsOperationErrorHold (pasa a TRUE y permanece 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.

sys_bIsOperationErrorNonHold (pasa a TRUE para un ciclo de scan)
  • 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.

Ejemplo

Variables Globales

En la Lista de Variables Globales, se definen las variables a las que pueden acceder todas las POUs del proyecto.

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

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

Cuerpo en ST

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;

Modificado el: 2024-12-18Comentarios sobre esta páginaLínea directa de Panasonic