Jump to content
PLC Forum


TomCastagna

conflitto di registrazione di data e ora in almeno un richiamo di blocco

Recommended Posts

TomCastagna

Buongiorno a tutti,

 

sto lavorando su un progetto in STEP 7 classico V5.5 con SP 2 su Win7.

 

Ho eseguito il download su PG del programma da una 313C di circa 10 anni fa del quale non ho "ovviamente" sorgente, dato che l'azienda che ha prodotto la macchina è fallita.

 

Aprendo alcuni blocchi con il tentativo di andare in stato, trovo il messaggio

 

"conflitto di registrazione di data e ora in almeno un richiamo di blocco"

 

Tento dunque OFFLINE:

-aggiornare data ed ora del PLC sincronizzandola con il PG;

-verifica e aggiornamento accessi;

-compilazione totale del progetto;

 

Nel primo caso, non è risultato nulla, nel secondo ed il terzo, invece, noto un errore su un segmento su un'istruzione "CALL" ed "END CALL" (screen in allegato).

 

Tra queste due istruzioni "apparentemente" di richiamo, compare una sequenza di istruzioni non molto chiara, ma cancellando CALL ed END CALL il problema scompare, ovviamente.

 

Il mio quesito è:

- mi immagino che aver rimosso quei richiami abbia di fatto cancellato parte del programma, quindi non mi posso aspettare che tutto torni a funzionare, per questo evito di ricaricare il programma nella CPU. Ma se non elimino quella parte non posso né entrare in stato, né tanto meno ricaricare/modificare il programma. Come fare?

- dato che ci sono diversi nodi Profibus DP, dei quali non dispongo di GSD (ho richiesto alle società dei dispositivi di inviarmeli), quel richiamo potrebbe trattarsi di un blocco funzionale del produttore dei dispositivi oppure di un'altra istruzione legata ai nodi Profibus?

 

Grazie per l'aiuto, se c'è bisogno di altre informazioni, resto a disposizione.

 

Buona Domenica a tutti!

 

 

Call.JPG

End Call.JPG

Link to post
Share on other sites

batta

Sembra tanto un programma derivato da S5, convertito in S7.

Comunque, l'istruzione CALL senza definire la funzione da richiamare, non mi dice nulla.

 

Hai provato a fare un confronto con i blocchi nella CPU, e a visualizzare le eventuali differenze del codice?

Link to post
Share on other sites
Mattia Spoldi

Ciao, a me è già capitata una situazione del genere.

é un concatenarsi di azioni che portano al risultato nelle foto, sistemarlo è fattibile, ma è un "pugno sui denti".

Per arrivare lì bisogna,

1 non avere i sorgenti

2 fare l'upload del programma da plc

3 modificare l'interfaccia di una FB/FC (basta anche solo cambiare il nome di una variabile)

4 ricaricare solo FB+DB di istanza/FC senza caricare il blocco che lo richiama,

5 rifare l'upload

 

Vedo dagli screenshot che manca una parte centrale, sicuramente nella parte mancante ci sarà un UC FCxy o un UC FBxy,DBxy.

Se riesci a postare tutto il codice magari si riesce a fare qualcosa.

Edited by Mattia Spoldi
Link to post
Share on other sites
TomCastagna
1 ora fa, Mattia Spoldi ha scritto:

Ciao, a me è già capitata una situazione del genere.

é un concatenarsi di azioni che portano al risultato nelle foto, sistemarlo è fattibile, ma è un "pugno sui denti".

Per arrivare lì bisogna,

1 non avere i sorgenti

2 fare l'upload del programma da plc

3 modificare l'interfaccia di una FB/FC (basta anche solo cambiare il nome di una variabile)

4 ricaricare solo FB+DB di istanza/FC senza caricare il blocco che lo richiama,

5 rifare l'upload

 

Vedo dagli screenshot che manca una parte centrale, sicuramente nella parte mancante ci sarà un UC FCxy o un UC FBxy,DBxy.

Se riesci a postare tutto il codice magari si riesce a fare qualcosa.


1 sì, quelli infatti non li ho;
2 fatto
3/4 se io modifico l'interfaccia cambiando una variabile di un FB o FC, poi ricarico solamente quello? Oppure devo ricaricare tutto il programma nel PLC?

Ecco il codice del segmento per intero (anche prima del CALL):
 U     E      2.3
      =     L      0.0
      BLD   103
      U     E      2.4
      =     L      0.1
      BLD   103
      U     E      2.5
      =     L      0.2
      BLD   103
      U     E      2.6
      =     L      0.3
      BLD   103
      U     E      9.5
      =     L      0.4
      BLD   103
      U     E      2.7
      =     L      0.5
      BLD   103
      U     E      3.0
      =     L      0.6
      BLD   103
      U     E      3.1
      =     L      0.7
      BLD   103
      U     E      3.2
      =     L      1.0
      BLD   103
      U     E      4.5
      =     L      1.1
      BLD   103
      U     E      3.3
      =     L      1.2
      BLD   103
      Call
      BLD   3
      =     L      6.0
      TDB   
      AUF   DI    29
      TAR2  LD     2
      U     L      0.0
      =     DIX    0.0
      U     L      0.1
      =     DIX    0.1
      U     L      0.2
      =     DIX    0.2
      U     L      0.3
      =     DIX    0.3
      U     L      0.4
      =     DIX    0.4
      U     L      0.5
      =     DIX    0.5
      U     L      0.6
      =     DIX    0.6
      U     L      0.7
      =     DIX    0.7
      U     L      1.0
      =     DIX    1.0
      U     L      1.1
      =     DIX    1.1
      U     L      1.2
      =     DIX    1.2
      AUF   DI   101
      L     DIW  140
      AUF   DI    29
      T     DIW    4
      AUF   DI   101
      L     DIW  182
      AUF   DI    29
      T     DIW    6
      AUF   DI   101
      L     DIW  180
      AUF   DI    29
      T     DIW    8
      AUF   DI   101
      L     DIW  200
      AUF   DI    29
      T     DIW   10
      AUF   DI   101
      L     DIW  220
      AUF   DI    29
      T     DIW   12
      LAR2  P#DBX 0.0
      UC    FB    29
      LAR2  LD     2
      U     DIX    2.0
      =     A      3.7
      U     DIX    2.1
      =     A      4.0
      U     DIX    2.2
      =     A      4.1
      U     DIX    2.3
      =     A      4.2
      U     DIX    2.4
      =     A      9.5
      U     DIX    2.5
      =     A      9.6
      U     DIX    2.6
      =     A      4.3
      U     DIX    2.7
      =     A      4.4
      U     DIX    3.0
      =     A      0.6
      U     DIX    3.1
      =     A      2.4
      L     DIW    4
      AUF   DI   101
      T     DIW  140
      AUF   DI    29
      L     DIW    6
      AUF   DI   101
      T     DIW  182
      AUF   DI    29
      L     DIW    8
      AUF   DI   101
      T     DIW  180
      AUF   DI    29
      L     DIW   10
      AUF   DI   101
      T     DIW  200
      AUF   DI    29
      L     DIW   12
      AUF   DI   101
      T     DIW  220
      AUF   DI    29
      TDB   
      BLD   4
      End Call
      NOP   0
 

2 ore fa, batta ha scritto:

Sembra tanto un programma derivato da S5, convertito in S7.

Comunque, l'istruzione CALL senza definire la funzione da richiamare, non mi dice nulla.

 

Hai provato a fare un confronto con i blocchi nella CPU, e a visualizzare le eventuali differenze del codice?

Il programma è stato proprio scaricato dal PLC, quindi dovrà essere uguale credo. E' stato poi un programma fatto ad HOC per il cliente, non credo sia derivato da una migrazione da S5

Posso fare un tentativo comunque domani e vedere

Link to post
Share on other sites
Mattia Spoldi
28 minuti fa, TomCastagna ha scritto:

3/4 se io modifico l'interfaccia cambiando una variabile di un FB o FC, poi ricarico solamente quello? Oppure devo ricaricare tutto il programma nel PLC?

Non c'è bisogno che ricarichi tutto, ma devi ricaricare FC/FB+Istanze e anche il blocco/blocchi che richiamano la la funzione modificata.

 

Comunque, guardando il codice non fa niente di strano, richiama FB29 usando come istanza il DB29, tutto quello che c'è prima di  UC FB 29 sono semplicemente i collegamenti fatti in ladder per portare dei valori sugli ingressi del FB, la parte che c'è dopo, è la parte dove vengono prese le varie uscite del FB e portate su delle variabili del programma.

 

Per sistemarlo, dovrebbe essere sufficiente rimuovere Call e end Call.

 

Volendo, avendo il codice del FB29 è anche possibile risalire ad un richiamo fatto in awl "normale".

Edited by Mattia Spoldi
Link to post
Share on other sites
batta
46 minuti fa, TomCastagna ha scritto:

non credo sia derivato da una migrazione da S5

Guardando tutto il codice, pare il codice AWL di un blocco scritto in SCL o, forse, in KOP.
Il 300 lavora solo in AWL. Ciò che si scrive in altri linguaggi viene sempre convertito in AWL. Non avendo il sorgente del blocco, ti ritrovi con un codice AWL di difficilissima interpretazione.

Spero tu non abbia bisogno di apportare modifiche.

 

Il codice, in realtà, non è complesso, ma per risalire al significato delle variabili locali e delle istanze, ci vuole un po' di pazienza.

Edited by batta
Link to post
Share on other sites
TomCastagna
Il 10/1/2021 alle 19:44 , batta ha scritto:

Guardando tutto il codice, pare il codice AWL di un blocco scritto in SCL o, forse, in KOP.
Il 300 lavora solo in AWL. Ciò che si scrive in altri linguaggi viene sempre convertito in AWL. Non avendo il sorgente del blocco, ti ritrovi con un codice AWL di difficilissima interpretazione.

Spero tu non abbia bisogno di apportare modifiche.

 

Il codice, in realtà, non è complesso, ma per risalire al significato delle variabili locali e delle istanze, ci vuole un po' di pazienza.

Si tratta di un macchinario comprato usato di dubbia efficienza (al momento piantato).... Ho paura che dovrò fare delle modifiche purtroppo. Sto cercando di rimappare le variabili, ma sto effettivamente valutando l'ipotesi di rifare il programma di sana pianta!

 

Il 10/1/2021 alle 19:32 , Mattia Spoldi ha scritto:

Non c'è bisogno che ricarichi tutto, ma devi ricaricare FC/FB+Istanze e anche il blocco/blocchi che richiamano la la funzione modificata.

 

Comunque, guardando il codice non fa niente di strano, richiama FB29 usando come istanza il DB29, tutto quello che c'è prima di  UC FB 29 sono semplicemente i collegamenti fatti in ladder per portare dei valori sugli ingressi del FB, la parte che c'è dopo, è la parte dove vengono prese le varie uscite del FB e portate su delle variabili del programma.

 

Per sistemarlo, dovrebbe essere sufficiente rimuovere Call e end Call.

 

Volendo, avendo il codice del FB29 è anche possibile risalire ad un richiamo fatto in awl "normale".

 

Il problema è che togliendo Call ed End call e facendo come mi hai consigliato, purtroppo dopo mi viene richiesto di ricaricare il programma (la parte modificata), ma non so se è il caso di ricaricarlo... E se poi non potessi più ritornare indietro?
Sono titubante perché... Come mai escono questi Call da un UPLOAD se poi Step7 non li riconosce come coerenti? 
Anche se la situazione non è delle più rosee, come anticipavo, ho timore di non riuscire a ritornare alla situazione precedente

Link to post
Share on other sites
Mattia Spoldi
23 minuti fa, TomCastagna ha scritto:

Come mai escono questi Call da un UPLOAD se poi Step7 non li riconosce come coerenti? 

Escono perchè facendo le operazioni che ho descritto sopra si va a corrompere il programma sulla flash del plc.

 

25 minuti fa, TomCastagna ha scritto:

Il problema è che togliendo Call ed End call e facendo come mi hai consigliato, purtroppo dopo mi viene richiesto di ricaricare il programma (la parte modificata), ma non so se è il caso di ricaricarlo... E se poi non potessi più ritornare indietro?
Sono titubante perché

Devi decidere tu, io ti sto dicendo che sono istruzioni che non esistono, teoricamente rimuovendole e ricaricando il blocco non dovrebbe succedere niente. Potresti fare una prova, fermi la macchina, fai un upload della configuarazione hw e del sw plc sul tuo pc, spegni tutto, sostituisci la mmc del plc con una nuova, ricarichi sia la configurazione hw sia il sw(rimuovendo call - end call) e poi provi la macchina. Mal che vada, spegni la macchina e rimetti la sua mmc.

 

Giusto per darti 2 informazioni in più, il codice che vedi tu è in MC7, è un linguaggio che teoricamente non si dovrebbe "vedere", viene generato dal compilatore di step7 e caricato sulla cpu, in caso di upload, step7 è in grado di ritornare all'awl a partire dal MC7, i linguaggi sono molto simili, quindi in caso di corruzione è fattibile passare da MC7 a AWL.

es:

L DB10.DBW24 è AWL

sulla cpu verrà caricato 

AUF DB10

L DBW24

questo è  MC7, ma volendo si può tornare all'istruzione di partenza in AWL o lasciarla anche così, perchè è anche AWL.

A grandi linee, MC7 è l'AWL del S5, le "istruzioni" CALL e END CALL servono solo per dire alla cpu che poi ci sarà una chiamata ad una qualche funzione, rimuovendole ovviamente la cpu non potrà più saperlo, ma visto che prima di caricare il blocco, verrò fatta una compilazione, verrà sistemato dal compilatore.

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...