Fabio66 Inserito: 6 ottobre 2007 Segnala Share Inserito: 6 ottobre 2007 Buongiorno a tutti. premetto che non ho grande esperienza con il CFC e quindi non vorrei sparare grosse imprecisioni.Sto lavorando ad una modifica di un progetto in PCS7 sviluppato con il CFC.Devo semplicemente spostare una word da un DB ad un'altro se un bit si trova allo stato di TRUE.Quando il bit si trova FALSE la word ( destinazione ) non deve essere toccata poichè viene gestita da un pannello operatoreIn altre parole, quando un bit va a 1 un valore che l'operatore aveva digitato attraverso un MP277, viene sovrascitto da un valor di defaltNon trovo nella libreria un Move come in S7, HO tentato di scrivere una Fb ( con db d'istanza ) oppure una Fc per poi usarla come blocco all'interno del CFC, ma queste restituiscono sull'uscita sempre e comunque un valore e quindi mi sovrascrivono la wordCon l' S7 facevo in questo modo : UN E0.0 SPB XXX L DB10.DBW10 T DB20.DBW10XXX:resto del programmaSe il bit E0.0 era false, la db10.dbw20 non era toccata dal swHo provato ad usare un SELECT, ma anche questo, presuppone sempre un valore in uscita, che sia IN1 oopure IN2.Non sò che fare, magari è una banalità, ma mi sono "piantato"Grazie a tutti coloro che mi aiuterannoFABIO Link al commento Condividi su altri siti More sharing options...
Gianmario Pedrani Inserita: 6 ottobre 2007 Segnala Share Inserita: 6 ottobre 2007 Mi sembra molto strano che CFC non abbia un blocco ti spostamento, magari non è un blocco gia fatto ma bensi un FB con quelle caratteristiche... Un altra cosa che potresti fare all'inuizio del tuo blocco che hai scritto, e mi sembra corretto, è inserire un comando SET all'inizio di tutto, e poi prova... ciaooooo Link al commento Condividi su altri siti More sharing options...
Savino Inserita: 6 ottobre 2007 Segnala Share Inserita: 6 ottobre 2007 (modificato) Allora, tu potresti costruire un blocco in AWL oppure in SCL. AWL : FC 55 UN M 100.0 SPB m001 L DB10.DBW 10 T DB20.DBW 10 m001: NOP 0 SCL FUNCTION FC55 VAR_TEMP END_VAR BEGIN; IF M100.0 = TRUE THEN DB20.DW10 := DB10.DW10; END_IF; END_FUNCTION Poi, dovresti identificare nel progetto, una sorgente SCL utilizzata in un CFC/CFB e richiamare il blocco. SCL FC55();Se non riesci a trovare una sorgente SCL utilizzata in un CFC/CFB, allora crea un FB in SCL coll' instance DB e costruisce un nuovo CFB in un CFC corrente oppure un nuovo CFC, richiama dal catalogo questo FB compilalo nel gruppo OB1 od OB35, e scaricalo alla CPU. Modificato: 6 ottobre 2007 da Savino Link al commento Condividi su altri siti More sharing options...
Fabio66 Inserita: 10 ottobre 2007 Autore Segnala Share Inserita: 10 ottobre 2007 Grazie ragazzi. Il problema non è nello scrivere un blocco che faccia il move, il problema che il blocco ha sempre una uscita che collego alla word destinazione.mi spiego meglio:attualmente mi trovo un softare che elabora pid ed altro. alcuni set point vengono da un pannello operatore, inoltre c'è anche il Wcc che come supervisore.Il cliente mi chiede che in talune condizioni il setpoint di un pid debbe essere sovracritto da un valore fisso. Supponiamo che il set sia inDB100.DBD72Il tutto è gia scritto in un chart CFC ( sto parlando di PCS7) se faccio un blocchetto con quanto mi indicate, l'uscita dal blocco mi sovrascrive sempre la variabile DB100.DBD72se faccio una fb , che ha quindi un db d'istanza mi viene sempre passata la variabile associata all'out del blocco, mentre se faccio una FC questa si appoggiaper i paramentri alle variabili locali, che comunque contengono qualcosa.Invece io voglio sovrascrivere la DB100.DBD72 solo in determinate condizioni. Booo ? non sò come fare.Al momento ho risolto mettendo un blocco select il quale ha 2 ingressi che vengono portati in uscita se un bit vale 1 oppure zeroad un ingresso ho portato sempre la stessa variabile DB100.DBD72, che ho in uscita, mentre nell'altro ingresso ho messo la costante che il cliente chiede.Funziona ma mi pare una schifezza....avete altre idee ? Link al commento Condividi su altri siti More sharing options...
Savino Inserita: 10 ottobre 2007 Segnala Share Inserita: 10 ottobre 2007 (modificato) Al momento ho risolto mettendo un blocco select il quale ha 2 ingressi che vengono portati in uscita se un bit vale 1 oppure zeroad un ingresso ho portato sempre la stessa variabile DB100.DBD72, che ho in uscita, mentre nell'altro ingresso ho messo la costante che il cliente chiede.Funziona ma mi pare una schifezza.... Perche'? se ho capito bene, avrei fatto anche cosi'...Un blocco che riceve in ingresso i due Set point, a secondo dell' ENABLE, fa la selezione e lo invia in uscita... poi vai nel CFC ove si trova il PID, interrompi l'interconnessione esistente tra la variabile d'input della interfaccia del blocco e la variabile SP_IN del PID (CONT_C)... tracci delle nuove interconnessioni tra le variabili d'input e il tuo blocco select e poi l'output lo colleghi al SP_IN.Perche dovrebbe essere una schifezza? Modificato: 10 ottobre 2007 da Savino 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