FP_MC_PROTOCOL_WRITE

Scrivere i dati su dispositivi esterni tramite protocollo MC

Il PLC ha il diritto di trasmissione nella comunicazione master. La comunicazione viene eseguita inviando comandi ai dispositivi che supportano il protocollo MC e ricevendo le risposte. Specificando un indirizzo di memoria ed eseguendo un'istruzione di scrittura in un programma utente, il PLC genera automaticamente un messaggio secondo il protocollo.

Parametri

Ingresso

Port (WORD, INT, UINT)

Porta Ethernet p.es. SYS_ETHERNET_USER_CONNECTION_1

Source (ANY)

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

Words_Bits (WORD, INT, UINT)

Il metodo di trasferimento varia in base al tipo di dati della Source.

Area di memoria specificata in Source

Metodo di trasferimento

N. di dati trasmessi

Note

Area di memoria a 16 bit

WX, WY, WR, WL, DT, LD

Trasmissione word

1–960 word

Area di memoria a 1 bit

X,Y,R,L,DT,n,LD,n

Trasmissione bit

1–7168 bit

Quando il numero dei dati trasmessi è dispari, viene aggiunto il codice dummy a 4 bit 16#0.

DestMemoryArea (WORD, INT, UINT)

Area di memoria sullo slave in cui viene scritto il dato.

Unit

Tipo area di memoria

Variabile di sistema

Bit

Ingresso

X

Esadecimale

SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X

Uscita

Y

Esadecimale

SYS_MC_PROTOCOL_MEMORY_AREA_OUTPUT_Y

Flag di link

B

Esadecimale

SYS_MC_PROTOCOL_MEMORY_AREA_LINK_RELAY_B

Flag interno

M

Decimale

SYS_MC_PROTOCOL_MEMORY_AREA_INTERNAL_RELAY_M

Relè di latch

L

Decimale

SYS_MC_PROTOCOL_MEMORY_AREA_LATCH_RELAY_L

Word

Registro dati

D

Decimale

SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D

Registro file

R

Decimale

SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_R
ZR

Esadecimale

SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_ZR

Registro di link

W

Esadecimale

SYS_MC_PROTOCOL_MEMORY_AREA_LINK_REGISTER_W
DestMemoryOffset (DWORD, DINT, UDINT)

Offset dell'area di memoria nello slave su cui viene scritto il dato.

Campo: 16#016#F7FFFF (0–16252927)

Uscita

Result (WORD, INT, UINT)

Solo per FP7:

  • 0: Completamento normale

  • 1: La porta di comunicazione è utilizzata per la comunicazione master

  • 2: La porta di comunicazione è utilizzata per la comunicazione slave

  • 3: Il numero di istruzioni di comunicazione master utilizzabili contemporaneamente è stato superato

  • 4: Timeout trasferimento

  • 5: Timeout in attesa di una risposta

  • 6: Errore nei dati ricevuti

    Questo errore si verifica quando viene ricevuto un telegramma anomalo, ad esempio in presenza di un errore di formato nell'intestazione. In questo caso i dati ricevuti vengono scartati.

  • 7: Area riservata insufficiente nella mappa I/O

    Questo errore si verifica quando il numero di connessioni Ethernet supera un numero di 16 (comunicazione Ethernet avanzata). Verificare se l'area word riservata ai flag di controllo della comunicazione è sufficiente per il numero di connessioni Ethernet.

  • 8: Buffer di invio attualmente in uso

    Questo errore può verificarsi per i PLC FP7 con versione firmware 4.57 o successiva.

In caso di errori di comunicazione, è possibile impostare altri codici di errore specifici per il protocollo MC. Per maggiori dettagli fare riferimento alla documentazione del PLC utilizzato.

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 la porta Ethernet non è corretta o se la connessione Ethernet è chiusa.

  • se il numero di dati inviati specificati da Words_Bits non è corretto.

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 la porta Ethernet non è corretta o se la connessione Ethernet è chiusa.

  • se il numero di dati inviati specificati da Words_Bits non è corretto.

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
		bEnable: BOOL:=FALSE;
		awValues: ARRAY [0..2] OF WORD:=[3(0)];
		diMemoryOffset: DINT:=0;
		iResult: INT:=0;
		abValues: ARRAY [0..2] OF BOOL:=[3(FALSE)];
		iPort: INT:=0;
	END_VAR

Corpo LD

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_COMMENT,,Bit transfer,2,0,10,1,);
B(B_COMMENT,,Memory Areas:	SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X ^SYS_MC_PROTOCOL_MEMORY_AREA_OUTPUT_Y ^SYS_MC_PROTOCOL_MEMORY_AREA_LINK_RELAY_B ^SYS_MC_PROTOCOL_MEMORY_AREA_INTERNAL_RELAY_M ^SYS_MC_PROTOCOL_MEMORY_AREA_LATCH_RELAY_L,13,0,39,6,);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 8 ;
        NETWORK_BODY
B(B_VARIN,,iPort,26,2,28,4,);
B(B_VARIN,,abValues,18,3,20,5,);
B(B_VARIN,,SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X,26,5,28,7,);
B(B_VARIN,,diMemoryOffset,26,6,28,8,);
B(B_VAROUT,,iResult,41,2,43,4,);
B(B_CONTACT,,bEnable,5,1,7,3,);
B(B_F,FP_MC_PROTOCOL_WRITE!,,28,0,41,8,,?DEN?DPort?DSource?DWords_Bits?HDestMemoryArea?DDestMemoryOffset?AENO?CResult);
B(B_F,Size_Of_Var!,,21,4,28,6,,?D?C);
L(1,2,5,2);
L(7,2,28,2);
L(20,4,28,4);
L(21,4,21,5);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_COMMENT,,Memory Areas:	 ^SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D ^SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_R ^SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_ZR ^SYS_MC_PROTOCOL_MEMORY_AREA_LINK_REGISTER_W,13,0,39,5,);
B(B_COMMENT,,Word Transfer,2,0,10,1,);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 8 ;
        NETWORK_BODY
B(B_VARIN,,iPort,26,2,28,4,);
B(B_VARIN,,awValues,18,3,20,5,);
B(B_VARIN,,SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D,26,5,28,7,);
B(B_VARIN,,diMemoryOffset,26,6,28,8,);
B(B_VAROUT,,iResult,41,2,43,4,);
B(B_CONTACT,,bEnable,5,1,7,3,);
B(B_F,FP_MC_PROTOCOL_WRITE!,,28,0,41,8,,?DEN?DPort?DSource?DWords_Bits?HDestMemoryArea?DDestMemoryOffset?AENO?CResult);
B(B_F,Size_Of_Var!,,21,4,28,6,,?D?C);
L(1,2,5,2);
L(7,2,28,2);
L(20,4,28,4);
L(21,4,21,5);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_COMMENT,,only valid for ethernet ports! ^--> Valid Ports:	SYS_ETHERNET_USER_CONNECTION_1 - SYS_ETHERNET_USER_CONNECTION_216,3,1,52,4,);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corpo ST

(*Bit transfer*)
If (bEnable) then
    FP_MC_PROTOCOL_WRITE(Port := iPort,
                         Source := abValues,
                         Words_Bits := Size_Of_Var(abValues), 
                         DestMemoryArea := SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X,
                         DestMemoryOffset := diMemoryOffset,
                         Result => iResult);
End_if;
(*Word transfer*)
If (bEnable) then
    FP_MC_PROTOCOL_WRITE(Port := iPort,
                         Source := awValues,
                         Words_Bits := Size_Of_Var(awValues), 
                         DestMemoryArea := SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D,
                         DestMemoryOffset := diMemoryOffset,
                         Result => iResult);
End_if;

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