Vai al contenuto
PLC Forum


Funzioni Sfc83 Sfc84 - Chiedo aiuto /spiegazioni


DOMI60

Messaggi consigliati

Premetto che ho usato la funzione cerca e non ho trovato nulla che mi fosse d'aiuto.

Sto cercando di utilizzare la funzione SFC84 per salvare una DB (nel mio caso la DB15) nella MMC (DB150),

Ho avuto difficoltà a interpretare i puntatori ANY in quanto il manuale non è chiarissimo.

Prima domanda:

Il manuale dice di inserire il tipo dei dati nel BYTE 1 e nel BYTE 6 ma cosa va messo nel Byte 1, il codice 16#04 (word) o il codice 16#19 (Numero DB) ? e nel byte 6 ?

Seconda domanda:

Il RET_VAL mi ritorna il codice 7000. Non mi è chiaro cosa significa.

Attivando la funzione con REQ il codice è 7002

Qualcuno ha già fatto una applicazione del genere?

Qualcuno possiede un piccolo esempio?

grazie a chiunque voglia rispondere.

Domi60

Link al commento
Condividi su altri siti


CALL  "WRIT_DBL"
       REQ    :=M0.0
       SRCBLK :=P#DB15.DBX 0.0 BYTE 6
       RET_VAL:=MW2
       BUSY   :=M0.1
       DSTBLK :=P#DB150.DBX 0.0 BYTE 6

Con il codice sopra leggi la DB15 a partire dal bit 0.0 per sei byte (5.7) e li scrivi nella db 150 (che DEVE risiedere nella mmc ) dal bit 0.0 fino al 5.7

Link al commento
Condividi su altri siti

Grazie mille per la pronta risposta.

Se invece volessi "indicizzare" LA db di scrittura e scrivere su una DB diversa caso per caso, come verrebbe la parte

DSTBLK :=P#DB150.DBX 0.0 BYTE 6 ?

Cioè, come sostitiusco [ DB150.DBX 0.0 BYTE 6 ] con una variabile?

Spero che questo possa venire utile anche a quache altro utente del forum.

Grazie per l'attenzione

Domi60

Link al commento
Condividi su altri siti

Se devi indicizzare un parametro any devi sapere come è composto un parametro any.

Per info è spiegato benissima (strano ma vero) sul manuale della Siemens

Programmazione con step7 a pagina A 56 nel capitolo dell'appendice , che puoi andare a vedere dal menu

Simatic > documentazione > Italiano

Comunque:

prima cosa da fare devi crearti una variabile locale di tipo Any, vedrai che questa variabile avra' una lunghezza di 10 byte.

ora nel richiamo del tuo sfc al posto del puntatore come parametro metti il nome della tua variabile, poi devi costruire la tua variabile locale andando a scrivere in modo opportuno nei 10 byte

      L     B#16#10                     // Codifica S7
      T     LB     0                    // .

      L     B#16#4                      // Tipo di dati: WORD Parole (16 bit)
      T     LB     1                    // .

      L     117                         // Fattore di ripetizione
      T     LW     2                    // .

      L     200                         // Numero DB
      T     LW     4                    // .

      L     234                         // Indirizzo byte
      L     "MODEL_ARCHIVE".MODEL.MODEL // .
      *I                                // .
      T     LD     6                    // .
      SLD   3                           // .
      T     LW     8                    // .

      L     B#16#84                     // Codifica delle aree di memoria: DB Blocco dati
      T     LB     6                    // .

      CALL  "BLKMOV"
       SRCBLK :=#INDEX_MODEL
       RET_VAL:=MW30
       DSTBLK :=P#DB200.DBX 0.0 WORD 117

questo esempio è fatto con il block move ma è la stessa cosa per sfc84

Tornando a noi così devono essere codificati i byte

byte 0 devi scrivere 10 in esadecimale

byte 1 devi scrivere il codice per il tipo di dati (vedi tabella pagina A57)

b#16#00 NIL Puntatore nullo

b#16#01 BOOL Bit

b#16#02 BYTE Byte (8 bit)

b#16#03 CHAR Caratteri (8 bit)

b#16#04 WORD Parole (16 bit)

b#16#05 INT Numeri interi (16 bit)

b#16#06 DWORD Parole (32 bit)

b#16#07 DINT Numeri interi (32 bit)

b#16#08 REAL Numeri in virgola mobile (32 bit)

b#16#09 DATE Data

b#16#0A TIME_OF_DAY (TOD) Ora

b#16#0B TIME Temporizzatore

b#16#0C S5TIME Tipo di dati S5TIME

b#16#0E DATE_AND_TIME (DT) Data e tempo (64 bit):

b#16#13 STRING Stringa di caratteri

Word 2 il numero di quante volte devi copiare la tua variabile

word 4 numero della db del tuo parametro (se non usi le db metti 0)

byte 6 Area di memoria

b#16#81 E Area di memoria degli ingressi

b#16#82 A Area di memoria delle uscite

b#16#83 M Area di memoria dei merker

b#16#84 DB Blocco dati

b#16#85 DI Blocco dati di istanza

b#16#86 L Stack dei dati locali (L-Stack)

b#16#87 V Dati locali precedenti

i bit 3,4,5,6,7 del byte 7 non sono utilizzati

i bit 0,1,2 il byte 8 ed i bit 3,4,5,6,7 del byte nove indica il numero del byte della tua variabile

mentre gli ultime 3 bit del byte 9 indicano il numero del bit di partenza della tua variabile adesso capisci perchè nell'esempio e stato fatto uno shift di 3 bit si parte dal bit 0

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...