Vai al contenuto
PLC Forum


Conversione OB182 da S5 a S7


cobe72

Messaggi consigliati

Buongiorno,

Ho convertito un sw da step5 a step7 e mi trovo un errore legato al fatto che l'OB182 in step 7 no esiste più.

Il blocco deve leggere da un DB il cui indirizzo si trova nella parte alta della word di ingresso #FRDW e iniziando dalla W indicata nella parte bassa di #FRDW per una quantità di word dato all'ingresso #N_DW,

da copiare poi in un DB il cui indirizzo si trova nella parte alta della word di ingresso #TODW e iniziando dalla W indicata nella parte bassa di #TODW.

L'OB182 dovrò sostituirlo credo con SFC20...

 

Mi aiutate ad adattare il codice per ottenere la stessa funzionalità?

 

Grazie...

 

      L     W#16#0                      // Azzera variabili
      T     MD   110
      T     MD   114
      T     MW   118
//;
      L     1
      T     MB   110                    // trasferimento tra "DB"
      T     MB   114
//;
      L     #FRDW
      T     MB   113                    // prima DW sorgente
      SRW   8
      T     MB   111                    // DB sorgente
//;
      L     #TODW
      T     MB   117                    // prima DW destinazione
      SRW   8
      T     MB   115                    // DB destinazione
//;
      L     #N_DW
      T     MW   118                    // n-DW da trasferire
      L     0
      <=I   
      BEB   
//;
      L     B#(3, 0)                    // indica che i dati sono in
      L     110                         // SW10 a SW20
//      CALL OB 182;             // trasferisce i dati
// *** Errore alla riga     435  (FB  60):  Il blocco non esiste. ***
//;
// Errori
 

Link al commento
Condividi su altri siti

  • 3 months later...

La funzione è l'SFC20 ed il funzionamento è abbastanza semplice.

Richiami SFC20 nel punto del programma dove vuoi eseguire la funzione, in "SRCBLK" scrivi in formato puntatore l'indirizzo e la lunghezza dei dati da trasferire, in "DSTBLK" scrivi in formato puntatore l'indirizzo e la lunghezza della destinazione. "RET_VAL" restituisce un valore in esadecimale che corrisponde allo stato di funzionamento della funzione (codice errore o eseguita con successo)

 

Ti riporto un esempio che: legge 10 byte da DB1.DBX0.0 e li trasferisce nella DB2 dal byte 10.0

 

      CALL  "SFC20"   //RICHIAMO DEL SFC20
       SRCBLK :=P#DB1.DBX0.0 BYTE 10   //AREA DI ORIGINE DEI DATI: DB1, DALL'INDIRIZZO DBX0.0 PER 10 BYTE
       RET_VAL:=MW0  
       DSTBLK :=P#DB2.DBX 10.0 BYTE 10   //AREA DI DESTINAZIONE DEI DATI: DB2, DALL'INDIRIZZO DBX10.0 PER 10 BYTE

 

I possibili valori in uscita da ret_val sono riportati nella guida Siemens, per visualizzarli è sufficiente che da step7 ti posizioni sul punto in cui richiami sfc20 e premi F1 da tastiera.

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...