Vai al contenuto
PLC Forum


Blocchi Parametrizzati - Ho avuto qualche difficoltà


van der graaf

Messaggi consigliati

van der graaf

19 marzo 2009

Mi è capitata una cosa strana per due volte su una cpu 313.

FC parametrizzati per eseguire in 20 diversi contesti con diverse variabili la stessa struttura di programma: un banalissimo flip flop, set reset, merker bistabile o come si vuole chiamarlo funzionante con diverse condizioni di ingresso. Il programma è stato progettato da altri e funziona su diverse macchine.

In due macchine di cui mi sono occupato è invece successo che dei 20 richiami 2 non funzionavano. All'interno del programma richiamato c'erano solo variabili parametrizzate (escludo quindi la presenza di variabili non parametrizzate presenti in tutte le elaborazioni). Copiata la struttura del programma parametrizzato in un altro nuovo blocco di programma, sostituito le variaibili parametrizzate con le variabili dell'intestazione del richiamo, la cosa ha cominciato a funzionare. Ovviamente ho controllato parecchio la presenza di errori di sintassi senza trovarne, ho controllato la corretta origine delle variabili di intestazione, credo di aver fatto quello che normalmente si fa quando si fa un debug. Non sono riuscito a darmi una ragione. Qualcuno ha trovato problemi simili in FC parametrizzati ? Posso aver commesso qualche banale errore da principiante.

Grazie VDG

Link al commento
Condividi su altri siti


A me capitava una cosa simile. Non ricordo bene il modello di cpu, forse 313C.

In blocchi FC, passando parametri INT, e dichiarandoli nei richiami in modo esteso ( es DB22.DBW100)a volte non mi aggiornava i valori. Ho dovuto aprire il DB all'interno del FC, e fuori passsare solo l'indirizzo word (es DBW100).

Link al commento
Condividi su altri siti

van der graaf

Riporto quanto scritto nel programma:

Richiamo

CALL FC108

input:= DB50.DBX4.6

out := M250.0

aux := DB100.DBX4.0

fp := DB100.DBX0.0

enable: M50.1

FC108:

U #input

FP #fp

= L0.0

U L0.0

Un #out

S #aux

U L0.0

U #out

R #aux

U #aux

= #out

UN #enable

U #aux

R #aux

Programma brevissimo: è quasi più lunga l'intestazione del blocco. KEN - STEU se avete voglia di dare un occhiata.....

Grazie Vdg

Link al commento
Condividi su altri siti

Anche "out" DEVE essere dichiarata come IN_OUT.

Nel caso fosse dichiarata come OUT, ci sarebbe da chiedersi perché a volte funziona, non perché a volte non funziona.

Link al commento
Condividi su altri siti

Per fare un flip-flop però non tirerei in ballo una fc. Basta un fronte di salita ed un or esclusivo.

Esempio:

U   DB50.DBX4.6
FP  DB100.DBX0.0
X   M250.0
=   M250.0

Link al commento
Condividi su altri siti

Salve Batta, per cortesia mi potresti spiegare perchè bisogna perforza dichiarate "OUT" IN_OUT

Ciao e Grazie

Modificato: da destinator
Link al commento
Condividi su altri siti

d'accordo con batta, la variabile IN_OUT funziona in aggiornamento INDIPENDENTEMENTE dalla CPU e dal suo firmware.

mi è capitato che qualche CPU gestisca in maniera poco chiara i parametri dichiarati solamente come OUT.

siccome è capitato tanto tempo fa, mi sono dato come standard la gestione su IN_OUT, quindi ne posso confrontare lo stato all'interno del blocco senza problemi, idem per la gestione esterna al blocco parametrizzato (se serve)

pigroplc

Link al commento
Condividi su altri siti

Salve Batta, per cortesia mi potresti spiegare perchè bisogna perforza dichiarate "OUT" IN_OUT

Perché viene interrogato lo stato prima di averlo assegnato.

Link al commento
Condividi su altri siti

Grazie per le risposte , per vedere se ho capito bene provo a spiegare la cosa con parole mie.

Visto che il parametro "Out" si appoggia in una variabile locale , di conseguenza il valore che

può avere il parametro fino al momento della sua scrittura all'interno della fc dipende da cosa

è stato scritto dalle funzioni eleborate prima della funzione in questione. Se invece il parametro

"Out" viene dichiarato come "IN_OUT" il valore assunto dal parametro "OUT" sarà corrispondente al valore della

memoria assegnata al parametro(M250.0). Ed infine è corretto dire che lo stesso problema non si presenta se si utilizza

una funzione FB dato che i parametri sono appoggiati al db di istanza?

Saluti e ancora grazie

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