F146_READ_DATA_TYPE_OFFS

Leggere i dati dallo slave con tipo e offset

Utilizzate questa istruzione per richiedere i dati da 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.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: 1–99, MODBUS: 1–255), Broadcasting: 0)

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

SlaveWordAddressType (WORD, INT, UINT)

Tipo di indirizzo di destinazione nello slave. Specificare un offset di zero, p.es. DT0 o WL0.

SlaveWordAddressOffs (WORD, INT, UINT)

L'offset dell'indirizzo iniziale nello slave da cui viene letto il dato. Il tipo di indirizzo è definito da SlaveWordAddressType.

NumberOfWords_BitsInWords (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).

Uscita

MasterWordData (ANY)

Area word o registro sull'unità master in cui viene scritto il dato richiesto.

Note

  • Anziché utilizzare questa istruzione F, si consiglia di utilizzare l'istruzione FP7 corrispondente: FP_READ_FROM_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.

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

  • 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 SlaveWordAddressType: Offset ¹ 0

  • 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 SlaveWordAddressType: Offset ¹ 0

  • 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
		bBool2: BOOL:=FALSE;
		bRead1: BOOL:=FALSE;
		bWrite2: BOOL:=FALSE;
		Bool16_OverlappingDut_1: BOOL16_OVERLAPPING_DUT;
	END_VAR

Corpo del POU

Se bRead1 e sys_bIsComPort1F145F146NotActive sono impostati su TRUE, l'uscita Y38 dello slave 2 viene letta e scritta nel bit 1 di Bool16_OverlappingDut_1.w0. Questo bit, al quale si può accedere tramite Bool16_OverlappingDut_1.b1, viene copiato in bBool2.

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

Corpo ST

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;

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