FP_WRITE_TO_SLAVE_AREA_OFFS

Scrivere i dati nello slave con offset

Utilizzate questa istruzione per scrivere i dati da un master in uno slave tramite la porta di comunicazione che utilizza il protocollo MEWTOCOL-COM o Modbus RTU, come definito nei registri di sistema della porta utilizzata. Assicuratevi di impostare lo stesso protocollo per master e slave. Master e slave devono avere area di memoria uguali.

Per le trasmissioni di dati con il protocollo Modbus, il compilatore genera comandi Modbus basati sui numeri di riferimento Modbus.

Parametri

Ingresso

Port (INT)

Specifica le porte di comunicazione (in base al tipo di PLC):

  • Porta COM p.es. SYS_COM0_PORT

  • Porta Ethernet p.es. SYS_ETHERNET_USER_CONNECTION_1

  • MCU/SCU p.es. 16#xx01 (xx = numero slot) in COM01

StationNumber (WORD, INT, UINT)

Numero della stazione dello slave (MEWTOCOL: 1–99,MODBUS: 1–247)

Impostato su 1 se una SYS_ETHERNET_USER_CONNECTION_xx è applicata all'ingresso Port

Source (WORD, INT, UINT)

Area word o registro sull'unità master per il dato da scrivere nello slave.

Words_Bits (WORD, INT, UINT)

Numero di word (bit) da trasmettere.

O:

  • Numero di parole

    per Modbus RTU: 16#001–16#07F

    per MEWTOCOL-COM: 16#001–16#1FD o 16#001–16#1B (FP0, FP-e)

Oppure:

  • Word di controllo per il trasferimento bit: 16#8T0F con T per trasferimento bit al master e F per trasferimento bit allo slave (non si applica a FP7).

SlaveMemoryArea (WORD, INT, UINT)

Area di memoria nello slave in cui memorizzare il dato (destinazione = SlaveMemoryArea + SlaveMemoryOffset).

Tipo area di memoria

Variabile di sistema

Relè interni

SYS_MEMORY_AREA_R

Flag di link

SYS_MEMORY_AREA_L

Ingressi esterni

SYS_MEMORY_AREA_X

Uscite esterne

SYS_MEMORY_AREA_Y

Relè interni

SYS_MEMORY_AREA_WR

Valore nominale per timer/counter

SYS_MEMORY_AREA_SV

Valore corrente per timer/counter

SYS_MEMORY_AREA_EV

Registri dati

SYS_MEMORY_AREA_DT

Flag di link

SYS_MEMORY_AREA_WL

Registro di link

SYS_MEMORY_AREA_LD

Registri file

SYS_MEMORY_AREA_FL

Registri ingressi

SYS_MEMORY_AREA_WX

Registri di uscita

SYS_MEMORY_AREA_WY

SlaveMemoryOffset (WORD, INT, UINT)

Offset dell'area di memoria in cui memorizzare il dato nello slave (destinazione = SlaveMemoryArea + SlaveMemoryOffset).

Uscita

Result (WORD, INT, UINT)

Solo per FP7: Per una descrizione di tutti i codici di errore, fare riferimento alla tabella dei codici di errore di comunicazione Modbus/MEWTOCOL.

Per gli altri PLC: impostato su 0

Diagramma tempi

  1.  (1) Flag di cancellazione-invio della comunicazione master, p.es. sys_bIsEthernetUserConnection1MasterCommunication
  2.  (2) Verificare che il flag di cancellazione-invio della comunicazione master sia TRUE e verificare che il flag di invio della comunicazione master sia FALSE
  3.  (3) Flag di invio della comunicazione master, p.es. sys_bIsEthernetUserConnection1MasterCommunicationActive

    Durante l'invio: Flag di invio della comunicazione master è TRUE

    Invio effettuato: Flag di invio della comunicazione master è FALSE

  4.  (4) Eseguire questa istruzione
  5.  (5) Flag di invio concluso della comunicazione master, p.es. sys_bIsEthernetUserConnection1CommunicationError

    Completamento normale: FALSE

    Completamento anomalo: TRUE

  6.  (6) Invio di dati
  7.  (7) Elaborazione della risposta ricevuta

Flag di errore

sys_bIsOperationErrorHold (passa a TRUE e resta TRUE)
  • se l'area specificata utilizzando il registro indice eccede il limite.

  • se i dati slave o master eccedono l'intervallo di indirizzi disponibili.
  • se il numero di dati inviati specificati da Words_Bits non è corretto.

  • se la modalità di comunicazione non è impostata su MEWTOCOL-COM Master/Slave o su Modbus RTU Master/Slave.
  • se la porta COM selezionata richiede un cassetto di comunicazione che non è stato installato.
sys_bIsOperationErrorNonHold (passa a TRUE per una scansione)
  • se l'area specificata utilizzando il registro indice eccede il limite.

  • se i dati slave o master eccedono l'intervallo di indirizzi disponibili.
  • se il numero di dati inviati specificati da Words_Bits non è corretto.

  • se la modalità di comunicazione non è impostata su MEWTOCOL-COM Master/Slave o su Modbus RTU Master/Slave.
  • se la porta COM selezionata richiede un cassetto di comunicazione che non è stato installato.

Esempio

Intestazione del POU

Tutte le variabili di ingresso e uscita utilizzate per programmare questa funzione sono state dichiarate nell'intestazione del POU. La stessa intestazione del POU è utilizzata per tutti i linguaggi di programmazione.

	VAR
		bSetParameters: BOOL:=FALSE;
		wWriteToSlaveResult: WORD:=0;
			(*result of write to slave instruction*)
		iSlaveStationNumber: INT:=0;
			(*slave station number*)
		arrParameters: ARRAY [0..15] OF DINT;
			(*Array of parameters to be send to slave station*)
		iSlaveMemoryOffset: INT:=100;
		bBool: BOOL:=FALSE;
	END_VAR
	VAR CONSTANT 
		iSlaveMemoryArea_Bool: INT:=10000;
			(*memory Area in slave station*)
		iSlaveMemoryArea_Word: INT:=5;
			(*memory Area in slave station*)
	END_VAR
	VAR 
	END_VAR

Corpo del POU

Corpo LD

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 9 ;
        NETWORK_BODY
B(B_VARIN,,SYS_COM1_PORT,18,2,20,4,);
B(B_VARIN,,iSlaveStationNumber,18,3,20,5,);
B(B_VARIN,,arrParameters,11,4,13,6,);
B(B_CONTACT,,bSetParameters,4,1,6,3,);
B(B_VAROUT,,wWriteToSlaveResult,36,2,38,4,);
B(B_F,Size_Of_Var!,,13,5,20,7,,?D?C);
B(B_F,FP_WRITE_TO_SLAVE_AREA_OFFS!,,20,0,36,9,,?DEN?DnPort?DStationNumber?DSource?DWords_Bits?HSlaveMemoryArea?DSlaveMemoryOffset?AENO?CResult);
B(B_VARIN,,SYS_MEMORY_AREA_DT,18,6,20,8,);
B(B_VARIN,,iSlaveMemoryOffset,18,7,20,9,);
L(13,5,13,6);
L(1,2,4,2);
L(13,5,20,5);
L(6,2,20,2);
L(1,0,1,9);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corpo ST

if (bSetParameters) then
    FP_WRITE_TO_SLAVE_AREA_OFFS(Port := SYS_COM1_PORT, 
                                StationNumber := iSlaveStationNumber, 
                                Source := arrParameters[0], 
                                Words_Bits := Size_Of_Var(arrParameters[0]), 
                                SlaveMemoryArea := SYS_MEMORY_AREA_DT, 
                                SlaveMemoryOffset := iSlaveMemoryOffset, 
                                Result => wWriteToSlaveResult);
end_if;

L'ultima revisione: 2024-12-18Feedback su questa paginaPanasonic hotline