TomCastagna Inserito: 10 gennaio 2021 Segnala Share Inserito: 10 gennaio 2021 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! Link al commento Condividi su altri siti More sharing options...
batta Inserita: 10 gennaio 2021 Segnala Share Inserita: 10 gennaio 2021 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 al commento Condividi su altri siti More sharing options...
Mattia Spoldi Inserita: 10 gennaio 2021 Segnala Share Inserita: 10 gennaio 2021 (modificato) 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. Modificato: 10 gennaio 2021 da Mattia Spoldi Link al commento Condividi su altri siti More sharing options...
TomCastagna Inserita: 10 gennaio 2021 Autore Segnala Share Inserita: 10 gennaio 2021 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 al commento Condividi su altri siti More sharing options...
Mattia Spoldi Inserita: 10 gennaio 2021 Segnala Share Inserita: 10 gennaio 2021 (modificato) 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". Modificato: 10 gennaio 2021 da Mattia Spoldi Link al commento Condividi su altri siti More sharing options...
batta Inserita: 10 gennaio 2021 Segnala Share Inserita: 10 gennaio 2021 (modificato) 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. Modificato: 10 gennaio 2021 da batta Link al commento Condividi su altri siti More sharing options...
TomCastagna Inserita: 11 gennaio 2021 Autore Segnala Share Inserita: 11 gennaio 2021 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 al commento Condividi su altri siti More sharing options...
Mattia Spoldi Inserita: 11 gennaio 2021 Segnala Share Inserita: 11 gennaio 2021 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 al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora