pixel Inserito: 7 marzo 2003 Segnala Share Inserito: 7 marzo 2003 Ciao a tutti... risolto il problema dell'OB100 per inizializzare le Var del programma adesso ho un altro problema...sto realizzando il sw per un impianto di confezionamentonel mio programma ho realizzato dei blocchi FB per la gestione di alcuni motori, una FB per una funzione di tara e un FB per la gestione del riempimento.Credo di aver capito la differenza tra FC e FB e cioè le prime non gestiscono DB e quindi non è possibile reimpostare dei valori, mentre gli FB sì.Comunque... creati questi blocchi ho provato a richiamare due volte FB (TARA) e qualcosa non funziona... se richiamo una sola volta l'FB in questione tutto funziona correttamente!Ho sviluppato una mia teoria... una volta allocate le tabelle delle variabili, richiamarla più volte significa farla incasinare.... giusto?!Preciso che non ho usato ne varibili globali per l'abilitazione o il Reset delle FB e quindi non c'è pericolo che qualche Merker in giro per il programma mi incasini tutto... qual'è il problema?Grazie Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 7 marzo 2003 Segnala Share Inserita: 7 marzo 2003 visto che hai risolto il problema precedentefai sapere anche ai gentili signori del forum come hai fatto Link al commento Condividi su altri siti More sharing options...
Luca Bettinelli Inserita: 7 marzo 2003 Segnala Share Inserita: 7 marzo 2003 se richiami più volte un fb devi ogni volta dargli un DB diverso altrimenti ti si incasina tutto !!!! Link al commento Condividi su altri siti More sharing options...
pixel Inserita: 7 marzo 2003 Autore Segnala Share Inserita: 7 marzo 2003 walterword+7 Mar 2003, 03:19 PM-->CITAZIONE(walterword @ 7 Mar 2003, 03:19 PM)il problema dell'OB100 è stato chiarito... commettevo l'errore di settare (per testare il funzionamento) un'uscita e non spiegavo xchè rimaneva settata ma come mi hanno fatto notare se ob100 viene eseguito una volta sola ed io abilito l'uscita chi la deve riportare a off? :ph34r: Link al commento Condividi su altri siti More sharing options...
pixel Inserita: 7 marzo 2003 Autore Segnala Share Inserita: 7 marzo 2003 E' vero... per i motori che sono tre ho dovuto creare tre DB differenti!ma se trasformo la FB TARA in una FC si presenta lo stesso problema? e se sì come faccio nel mio sistema a fare più volte la tara?Ho provato anche a richiamare un solo blocco FB TARA al verificarsi di condizioni diverse ma ho ottenuto lo stesso risultato... si incasina.... e pure l'OB1 non dovrebbe essere il Main Program e le FB e FC le subroutine del Linguaggio? .......AIUTO........ Link al commento Condividi su altri siti More sharing options...
pixel Inserita: 7 marzo 2003 Autore Segnala Share Inserita: 7 marzo 2003 Mi rispondo da solo? anche se creo una FC e la richiamo + volte si incasina tutto... Link al commento Condividi su altri siti More sharing options...
Luca Bettinelli Inserita: 7 marzo 2003 Segnala Share Inserita: 7 marzo 2003 Questo FB o FC lo richiami più volte con dei parametri diversi o lo richiami più volte senza parametri?Non potresti allegare il sorgente del blocco che utilizzi, per lo meno per capire cosa fa questa funzione, se mandi un messaggio entro le 17.00 ti posso rispondere subito. Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 7 marzo 2003 Segnala Share Inserita: 7 marzo 2003 per bettinelli:non e' che se richiami un db piu volte ti si incasina tuttonon te lo compila proprio in fase di scrittura , te lo segnala in rossoogni FB (functional block) ha una sua area dati di appoggio sua ed esclusiva.Tale area si chiama DB di istanza dell'FB in questionequando crei un FB anche se non hai un db in fase di chiamatacall FBx , DBx se non c'e' il DB te ne genera uno lo STEP7a differenza degli FC , gli FB hanno sola differenza oltre che avere in comune parametri IN , IN_OUT , OUT , e TEMPgli FB hanno i VAR che sono variabili STATICHE come i merker Il DB viene creato a "stampo" come le variabili che vengono dichiarate nell'FBse tiri giu la tendina (tabella) lo vedi Oppure puoi legare un DB ad un FB quando ,una volta creato , gli clicchi sopra e scegli per lui di essere associato a tale FB , operazione che non si usa maiIn genere prima si crea l'FB con tutte le sue funzioni e tutti i suoi parametri dichiarati dopodiche si crea il DB , che e' la sua istanza .E' come nei linguaggi orientati a oggetti per PC : la classe puo essere considerato l'FBe la sua istanza il DBciaowalter Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 7 marzo 2003 Segnala Share Inserita: 7 marzo 2003 PIXELse l'FC o FB in questione lo crei tu , quindi un blocco parametrizzatoassicurati che all'interno non ci siano variabili statiche o se ci sono che siano passate , nel caso sia un FC , come parametro IN_OUTil discorso qual'e'?se fai un parametrizzato, e all'interno usi dei merker per esempio, ad ogni chiamata il merker ti varia in base al codice ovviamente ma in base anche ai parametri che gli passi, quindi se proprio devi usare dei merker o mwxpassali come IN_OUT e ad ogni chiamata li cambiin modo tale che ad ogni chiamata il tutto sia distinto e separatosenza correre il rischio di SOVRASCRIVERE qualche variabileciao Link al commento Condividi su altri siti More sharing options...
Luca Bettinelli Inserita: 7 marzo 2003 Segnala Share Inserita: 7 marzo 2003 x walterse un FB lo richiami più volte nella stessa scansione devi dargli per ogni chiamata un db di istanza diverso, altrimenti le variabili utilizzate per una chiamata vanno ad incasinare le chiamate degli altri quando alla scansione sucessiva vai a richiamarlo, è logico che se l'FB fa solo un calcolo non succede niente, ma se usato in modo indicizzato per fare della logica si perdono eventuali memorizzazioni che hai fatto. Link al commento Condividi su altri siti More sharing options...
LaRocca Inserita: 7 marzo 2003 Segnala Share Inserita: 7 marzo 2003 Ciao..Poi anche utilizare un FBxx e´ chiamare i altri FByy come Multinstanzia (force non é il nome ma facio analogia con lo spagnolo), vole dire che dichiara i altri FByy nella tabella stat d´FBxx é si crea un unico DB di Instanzia..Per essempio se hai un FB chiamato Suma é vou fare piu di una suma in un stesso FB fai questo: Link al commento Condividi su altri siti More sharing options...
pixel Inserita: 7 marzo 2003 Autore Segnala Share Inserita: 7 marzo 2003 walterword+7 Mar 2003, 04:34 PM-->CITAZIONE(walterword @ 7 Mar 2003, 04:34 PM)Non credo di aver capito...Le variabili in_out come si comportano?comunque allego il listato in Kop Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 7 marzo 2003 Segnala Share Inserita: 7 marzo 2003 (modificato) esattoper crare una multi istanzadevi dichiarare nella tendina di dichiarazione delle variabiliil tipo di dato come FBe lui crea con un solo DBdiversi DB concatenati ad essose poi si usano i puntatori ed il linguaggio SCLsi posso creare altre diavolerie ciaoper bettinelli: era quello che volevo intendere io Modificato: 7 marzo 2003 da walterword Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 7 marzo 2003 Segnala Share Inserita: 7 marzo 2003 (modificato) le variabili IN_OUT si comportano che possono essere lette e scritteper esempio un marcia e arresto:FC1dichiarazione delle variabili:IN pulsante boolIN stop boolIN_OUT motore boolU #pulsanteo #motore \\ variabile IN_OUT perche leggi stato di motore e poi lo scrivi o viceversaun #stop= #motorenell' OB1call FC1pulsante:= \\ in ;boolmotore:= \\ in_out ; boolstop:= \\ in; boole' chiaro che ogni volta che richiami la funzione (blocco fc)devi cambiare parametri altrimenti sovrascrivi ciao Modificato: 7 marzo 2003 da walterword Link al commento Condividi su altri siti More sharing options...
pixel Inserita: 7 marzo 2003 Autore Segnala Share Inserita: 7 marzo 2003 x walterwordforse ho capito le var in_out, ma cosa intendi dire col cambiare i parametri...nel post precedente ho allegato il listato KOP della FC realizzata, cosa devo fare?non ci sono molti parametri da cambiare nella mia FC.... Dalla discussione che c'è stata ho capito che devo creare una FC con multiistanza....?fammi sapere Link al commento Condividi su altri siti More sharing options...
dago_ Inserita: 7 marzo 2003 Segnala Share Inserita: 7 marzo 2003 Dal programma allegato sembrerebbe che alla fine devi solamente trasferire un valore su un fronte di salita.Forse potresti utilizzare solamente la funzione SCALE con un richiamo sul fronte di salita e fare il set sull'uscita ENO della funzione.In ogni caso mi sembra che il problema è nella variabile temporanea Tara_ON,prova a sostituirla con un merker e poi vedi se cambia qualcosa. Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 7 marzo 2003 Segnala Share Inserita: 7 marzo 2003 (modificato) no pixel quello ch e dicevamo e' stato uno s viluppo teorico vedendo il blocco che hai creatosi direbbe che tara_on sia il bit che resetta il flip-flopprova a dichiararlo IN o IN_OUT invece di OUTciaoah poi un'altra cosa , la variabile locale #tara_ok che sarebbe il bit che setti e resetti (blocco SR) non va bene , essendo locale all'uscita del blocco perde il suo significato e valore , dichiarala invece che TEMP come IN_OUTti perde lo stato e di conseguenza togli EN al blocco fc105 (scale)quindi sballi i calcoli Modificato: 7 marzo 2003 da walterword Link al commento Condividi su altri siti More sharing options...
pixel Inserita: 7 marzo 2003 Autore Segnala Share Inserita: 7 marzo 2003 comunque hao da poco appreso a multiistanziare le FB eccezionale.... molti db li ho eliminati.proverò a sostituire il merker...walterword tieni presente che la mia FC non ha multiistanze... comunque provo subito a fare la provax Dago, in effetti la FC è molto semplice ma è solo l'inizio per fare delle prove è la prima volta che programmo un S7-300 !!! ma stai tranquillo che si complicherà la FC...Poi sono convinto che anche per FC relativamente semplice e meglio creare blocchi a se stanti per rendere migliore la manutenzione e la lettura del SW.Grazie comunque a tutti per l'affiatamento... Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 7 marzo 2003 Segnala Share Inserita: 7 marzo 2003 (modificato) le FC non hanno istanze solo gli FB le hanno te lo avevo detto anche nell'altro postcambia il parametro locale #pesa_ok e dichiaralo come IN_OUT invece che TEMP , e poi il parametro #tara_on dichiaralo come IN.ovviamente ad ogni chiamata cambia i merker da fuori (OB1)ciaose invece di un FC crei un FB allora #tara_on dichiaralo come INe #tara_ok lo dichiari come variabile "statica"fai questi 2 cambiamenti e vedrai ch e poi va tutto ....ascolta un cretino Modificato: 7 marzo 2003 da walterword Link al commento Condividi su altri siti More sharing options...
JumpMan Inserita: 7 marzo 2003 Segnala Share Inserita: 7 marzo 2003 (modificato) Non centra con il problema di Pixel, ma voglio comunque raccontarvi un fatto che mi è accaduto in settembre 2001:Avevo 2 FC diversi con parametri OUT che accedevano a dati delle DB:Quando cambiava il valore di un parametro del primo FC, il secondo FC sbagliava l'assegnazione dei dati sui suoi parametri (OUT)(Azzerava o imposta valori casuali, settava o resettava bit).In particolare:I dati DB se sono usati in parametri OUT di un FC e non sono elaborati dentro l'FC (causa salti interni) assumono valori casuali che provengono dal richiamo dell' FC precedente (anche un'altro fc diverso richiamato il segmento prima) (!!![at]#+*)I dati M se sono usati in parametri OUT di un FC e non sono elaborati dentro l'FC (causa salti interni) rimangono invariati (FUNZIONAMENTO CORRETTO)Ho telefonato alla Hotline e mi hanno risposto:- LI FACCIA TUTTI IN-OUT !- E' UN BACHETTO DI S7, CON I MERKER VA BENE !- ANCHE V5 PRESENTA L'ERRORE !- NON SO SE V6 ANDRA' BENE !INTANTO NEI MIEI PROGRAMMI SI VERIFICAVANO I PROBLEMI PIU' DISPARATI (e disperati):- ENCODER PROFIBUS CHE SI AZZERANO DA SOLI- LA MACCHINA CHE VA IN BLOCCO CON MESSAGGI DI ANOMALIA INESISTENTI QUANDO L'OPERATORE CAMBIA UNA VARIABILE SULL'OP- ECC.ECC.E IO AVREI DOVUTO SPIEGARE AI CLIENTI CHE SI TRATTAVA DI UN BACHETTO DI S7 ??????????Comunque sia, non so se la Siemens ha sistemato la faccenda in quanto io da allora ho abolito completamente i parametri OUT dai miei programmi (uso IN-OUT).Purtroppo ora non ho il tempo per verificare se le cose sono cambiate, se qualcuno non sa cosa fare, qui c'è del codice per provare: (My Webpage)Ciao Modificato: 7 marzo 2003 da JumpMan Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 8 marzo 2003 Segnala Share Inserita: 8 marzo 2003 (modificato) altri bachi ci sonose usi qualche fronte di salita ( P ) o discesa (N) nel 200mentre nel 300 mi capitava con i contatori (Z_haler e company)come sarebbe no c'enrta con pixel quello che hi detto iohai visto il codice?ciaocioe se setto una variabile locale #tara_ok , esco dal blocco , perdo l'informazioneper di piu chiamo il blocco piu volte e secondo te questa variabile mi da lo statoal ciclo successivo e per di piu di diverse situazioni conosci il significato di variabile locale? ciao Modificato: 8 marzo 2003 da walterword Link al commento Condividi su altri siti More sharing options...
Federico Milan Inserita: 8 marzo 2003 Segnala Share Inserita: 8 marzo 2003 Ciao,credo di essere sempre il solito fortunato, effettivamente io gli ingressi li uso come ingressi, le uscite solo come uscite e quindi sempre vengono elaborate, mentre le variabili in/out le uso per appoggi negli Fc oppure per settare allarmi!Questo mio metodo non è molto piaciuto ai vecchi che usavano S5 però non ho mai riscontrato probleci citati ...Una cosa sicura, attenti ad istanziare gli FB in multiistanza dentro agli FB, esiste un altro baco non documentato, ossia se hai FB diversi in multiistanza dentro ad un FB succedono cose strane ... quindi ... istanziare solo FB uguali !!!Personalmente non uso mai questa tecnica, nel senso che le azioni standard le ho fatte con semplici (si fa per dire) FC , mentre FB li uso come contenitori particolari e gestori completi visto che sono oggetti con memoria ...ciao Link al commento Condividi su altri siti More sharing options...
JumpMan Inserita: 9 marzo 2003 Segnala Share Inserita: 9 marzo 2003 (modificato) Ciao Walter, mi dispiace che tu mi abbia frainteso.Ho postato dopo di te, e forse mi sono anche espresso male, ma la frase che ho scritto: "Non centra con il problema di Pixel, ma voglio comunque raccontarvi un fatto che mi è accaduto in settembre 2001"in realtà voleva dire: "Il fatto accadutomi in settembre 2001 che ora sto per raccontarvi non centra con il problema di Pixel, ma ve lo espongo comunque:"Lo so benissimo che le variabili TEMP sono locali e cioè interne al blocco e perdono il loro valore quando termina il blocco, io tra l'altro nei miei FC non ho MAI usato merker ma solo variabili locali, piuttosto che usare merker interni agli FC, se ho proprio bisogno che una variabile rimanga memorizzata anche all'uscita dell FC, uso una variabile IN/OUT così la posso definire in OB1 e non ho mai conflitti o sovrapposizioni di scritture sullo stesso MW da parte di FC diversi!E' infatti difficile tenere traccia dei MERKER negli FC/FB creati nel corso degli anni, va bene, puoi fare la xref, ma è una rottura di scatole quando prendi un FC da una tua biblioteca dover controllare i suoi M interni per essere sicuri che non vadano in conflitto con altri M del programma.Pertanto il consiglio che mi sento di dare a tutti:- All'interno degli FC che create se avete bisogno che un valore rimanga memorizzato all'uscita dall'FC e sia accessibile al resto del prog. usate un dato IN/OUT, il suo indirizzo lo definirete in OB1 (o dove avete richiamato l'FC), in questo modo potete cambiarlo quando volete senza modificare l'FC che magari avete anche protetto con KNOW_HOW_PROTECT. - Non usate M o DB assoluti all'interno di FC/FB.- All'interno degli FB che create se avete bisogno che un valore rimanga memorizzato all'uscita dall'FC e sia accessibile al resto del prog. potete usare un dato IN/OUT, il suo indirizzo lo definirete in OB1 (o dove avete richiamato l'FB). In alternativa potete anche usare un dato STAT che non vi comparirà nella riga di richiamo ma comunque sarà accessibile dal resto del programma (basta leggere il valore nella DB di istanza)(poi ognuno fa come gli pare) Modificato: 9 marzo 2003 da JumpMan Link al commento Condividi su altri siti More sharing options...
JumpMan Inserita: 9 marzo 2003 Segnala Share Inserita: 9 marzo 2003 Cosa intendi Federico con:Una cosa sicura, attenti ad istanziare gli FB in multiistanza dentro agli FB, esiste un altro baco non documentato, ossia se hai FB diversi in multiistanza dentro ad un FB succedono cose strane ... quindi ... istanziare solo FB uguali !!!? Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 9 marzo 2003 Segnala Share Inserita: 9 marzo 2003 scusami jumpmanper aver interpretato male il tuo concettoti assicuro comunque che quello che ho scritto era in tono amichevole , quindi non da arrabbiato ciao 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