F145_WRITE_DATA

Scrivi il dato nello slave

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. Se il dato dello slave non è disponibile nell'area utente del master, utilizzate F145_WRITE_DATA_TYPE_OFFS o F145F146_MODBUS_MASTER.

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

Parametri

Ingresso

Port (WORD, INT, UINT)

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

SlaveAddress (WORD, INT, UINT)

Numero della stazione dello slave (MEWTOCOL: 0–99, MODBUS: 0–255, 0: Broadcasting)

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

MasterData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

Indirizzo di origine sul master per il dato da scrivere nello slave.

Uscita

SlaveData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)
  • Indirizzo di destinazione sullo slave in cui viene scritto il dato.

  • MasterData e SlaveData devono presentare lo stesso tipo di dato.

  • Per stabilire l'accesso ai dati esterni dal dato del master al dato dello slave, dovete allocare indirizzi utente fissi (stessi indirizzi del dato dello slave) nella lista variabili globali.

Note

  • Anziché utilizzare questa istruzione F, si consiglia di utilizzare l'istruzione più flessibile: FP_WRITE_TO_SLAVE_AREA_OFFS.

  • Le istruzioni F145 o F146 possono essere eseguite solo se né l'una né l'altra istruzione è attiva. Valutate il flag "F145/F146 non attiva" nel programma per controllare lo stato delle istruzioni.

  • L'istruzione F145 richiede unicamente l'invio dei dati allo slave. L'effettiva elaborazione avviene al termine della scansione.

  • Valutate il flag "Errore F145/F146" per verificare se la trasmissione si è conclusa correttamente o con un errore.

  • Durante il broadcast (SlaveAddress impostato su 0), assicuratevi che la trasmissione venga eseguita solo al termine del tempo massimo di scansione.

  • Le istruzioni F145 o F146 non possono essere eseguite se l'indirizzo di destinazione è un flag interno speciale (da R9000), un registro dati speciale (da DT9000/DT90000) o un registro file FL.

Flag di errore

sys_bIsOperationErrorHold (passa a TRUE e resta TRUE)
  • se i dati slave o master eccedono l'intervallo di indirizzi disponibili.

  • 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 i dati slave o master eccedono l'intervallo di indirizzi disponibili.

  • 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

Variabili globali

Nella lista variabili globali si definiscono variabili alle quali possono accedere tutti i POU del progetto.

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
		bBool1: BOOL:=FALSE;
		bRead1: BOOL:=FALSE;
		bWrite1: BOOL:=FALSE;
	END_VAR
	VAR_EXTERNAL
		Slave2_g_bY38: BOOL:=FALSE;
	END_VAR

Corpo del POU

La variabile di sistema sys_bPulse1s viene copiata in bBool1. Se bWrite1 e sys_bIsComPort1F145F146NotActive sono impostati su TRUE, bBool1 viene scritto nell'uscita Y38 dello slave 2.

Corpo LD

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 3 ;
        NETWORK_BODY
B(B_CONTACT,,sys_bPulse1s,3,1,5,3,);
B(B_COIL,,bBool1,24,1,26,3,);
L(5,2,24,2);
L(1,2,3,2);
L(1,0,1,3);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_CONTACT,,sys_bIsComPort1F145F146NotActive,8,1,10,3,);
B(B_CONTACT,,bWrite1,18,1,20,3,);
B(B_VARIN,,SYS_COM1_PORT,21,2,23,4,);
B(B_VARIN,,2,21,3,23,5,);
B(B_VARIN,,bBool1,21,4,23,6,);
B(B_F,F145_WRITE_DATA!,Instance,23,0,33,6,,?DEN?DPort?DSlaveAddress?DMasterData?AENO?CSlaveData);
B(B_VAROUT,,Slave2_g_bY38,33,2,35,4,);
B(B_COIL,,bWrite1,36,1,38,3,E);
B(B_COIL,,bRead1,42,1,44,3,S);
L(1,2,8,2);
L(10,2,18,2);
L(20,2,23,2);
L(33,2,36,2);
L(38,2,42,2);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corpo ST

bBool1 := sys_bPulse1s;
if (bWrite1 and sys_bIsComPort1F145F146NotActive) then
    F145_WRITE_DATA(Port := SYS_COM1_PORT, 
                    SlaveAddress := 2, 
                    MasterData := bBool1, 
                    SlaveData => Slave2_g_bY38);    
    bRead1 := true;
    bWrite1 := false;
end_if;

L'ultima revisione: 2024-03-14Feedback su questa paginaPanasonic hotline