Vai al contenuto
PLC Forum


Call FC e AUF (apertura DB)


cobe72

Messaggi consigliati

Buongiorno,

Dopo una conversione da S5 a S7 ho trovato un segmento con il seguente richiamo ad un FC.

 

CALL  "FC215"
       _DB :="DB_LOP_REG_Z2"                            //DB100
       GMIN:=DBW34
       SPIM:=DBW50
       PV  :=DBW2
       SPWK:=DBW4

 

Stando a come deve lavorare il sw i DBW di igresso (DBW34, DBW50 e DBW2) e i DBW di Uscita (DBW4) fanno parte del DB100.

Il DB100 è però aperto alla prima riga all'interno dell'FC125

Premetto che prima di questa call ho una AUF di apertura del DB80 che non ha nulla a che vedere con il DB100.

Ora, simulando con S7, mi trovo che i DBW34, 50, 2 e 4 hanno valori che derivano dal DB80 (in quanto risulta l'ultimo db aperto) cosa che però non è corretta per la logica del sw.

Probabilmente in S5 l'interpretazione del compilatore era differente e legava questi DBW al DB100.

 

Io per risolvere il problema aggiungerò semplicemente un AUF db100 prima della CALL.

 

A qualcuno risulta questa differenza di comportamento tra S5 e S7?

 

Grazie

Saluti

 

Link al commento
Condividi su altri siti


Non ti so dire se in S5 si comporta diversamente, ma è corretto il comportamento che riscontri in S7.
Le variabili DBW34, DBW50, DBW2 e DBW4 vengono passate come parametri alla funzione e, in questo momento, la funzione non è ancora stata elaborata e quindi non è ancora stata letta l'istruzione AUF DB100 all'interno della funzione stessa. Corretto quindi che siano riferite a DB80.
Poi, visto che ora sei su un S7, piuttosto che aprire semplicemente il DB100 prima del richiamo della funzione, potresti sostituire a DBW34 (e successive variabili) DB100.DBW34.
Questo però ha senso solo se, con un po' di attenzione, farai la stessa modifica su tutte le variabili del progetto.
Se si tratta di un programma che non dovrai modificare, non ti serve. Se invece dovrai metterci le mani, avere la possibilità di avere i riferimenti incrociati delle variabili è un bel vantaggio.

 

Questo modo di gestire le variabili, che rende praticamente impossibile capire dove sono usate, è uno dei motivi che mi hanno sempre fatto odiare l'S5.

Link al commento
Condividi su altri siti

Grazie per la risposta...

Comunque mi resta ancora il dubbio di come facesse il vecchio sw in s5 a funzionare (a dire il vero sta ancora funzionando dato che la conversione non l'ho ancora terminata).

Sia in S5 che nella conversione S7 la sequenza è la seguente:

 

Segmento 1:

      CALL  "FB215"
       _DB :="DB_LOP_REG_Z1"        //DB100
       GMIN:=DBW34
       SPIM:=DBW50
       PV  :=DBW2
       SPWK:=DBW4

 

Segmento 2:

      CALL  "FB215"
       _DB :="DB_LOP_REG_Z2"            //DB107
       GMIN:=DBW34
       SPIM:=DBW50
       PV  :=DBW2
       SPWK:=DBW4

 

Segmento 3:

   CALL  "FB215"
       _DB :="DB_LOP_REG_Z3"          //DB114
       GMIN:=DBW34
       SPIM:=DBW50
       PV  :=DBW2
       SPWK:=DBW4

 

Stesso discorso vale per DB107 e DB114...

 

A questo punto credo proprio che l'S5 lavori in maniera differente

 

Grazie

Saluti

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