Vai al contenuto
PLC Forum


Fb Definiti Dall'utente


Riccardo

Messaggi consigliati

Ciao a tutti

Ho PL7 Junior e devo programmare un Premium. All'interno del sw deve realizzare una funzione che deve essere più volte ripetuta (circa un centinaio di volte). Si tratta di dare un valore ad una MW in base allo stato di due ingressi digitali. La mia domanda è:

"E' possibile farsi una function block che basta richiamarla e impostare soltanto ingressi ed uscite?" Ho letto che questo è possibile farla solo con PL7 Pro...Qualcuno mi può dare una mano?

Grazie

Riccardo

Link al commento
Condividi su altri siti


Sinceramente non ricordo se con Junior si può fare... :( , col Pro riesci a fare tutti i DFB che vuoi.

Comunque non ho capito bene quello che devi ottenere, secondo me puoi farlo direttamente usando gli "indici", ossia leggere un banco di ingressi "indicizzato" ed assegnarlo ad una MW "indicizzata".

Spiega meglio con un esempio ciò che vuoi fare ;)

Link al commento
Condividi su altri siti

Mi pare che con lo Junior i DFB non si possono fare.... per verificarlo guarda nell'albero a sx (dove ci sono ne task, configurazioni ecc.) se c'e' una cartella chiamata tipi DFB o qualche cosa del genere...

Andrea

Link al commento
Condividi su altri siti

Cristina Fantoni

Confermo che con PL7 Junior non si possono creare i DFB, ma solamente utilizzarli se si hanno già disponibili, quindi, se hai la possibilità di avere la funzione che ti serve, la puoi richiamare. :huh:

Con la versione Micro (mi pare si chiami così) non si possono nemmeno utilizzare i DFB. :(

Saluti

:wub:

Modificato: da Cristina Fantoni
Link al commento
Condividi su altri siti

Ciao ragazzi

Vi allego un file immagine con riportato quello che devo fare...%Mo e %M1 dovrebbero essere i due DI mentre con %MW0 è l'uscita

Grazie

Ciao,Riccardo

Link al commento
Condividi su altri siti

Secondo me lo puoi fare tranquillamente con:

WHILE %MW100<20 DO
    IF %M1[%MW100] THEN %MW0[%MW100]:=2;
    ELSIF NOT %M1[%MW100] AND %M0[%MW100] THEN %MW0[%MW100]:=1;
    ELSIF NOT %M1[%MW100] AND NOT %M0[%MW100] THEN %MW0[%MW100]:=0;
    END_IF;
    INC %MW100;
END_WHILE;

Scusa se l'ho scritto in ST ma così è immediato!

Usi la %MW100 come "indice" che viene incrementato velocissimamente fino a 20 (puoi mettere il valore che vuoi, pur di non superare l'indicizzazione possibile sugli ingressi o sulle memorie che hai a disposizione).

fai il controllo cercando il bit indicizzato al valore che assume la %MW100 ed assegnando il valore alla %MW indicata sempre dallo stesso indice: puoi anche usare anche indici diversi, uno x leggere i bit e l'altro x scrivere le word.

Ovviamente devi crearti un azzeramento della %MW100.

E.S. %M1[%MW100], quando %MW100 vale 0 è la stessa %M1; se %MW100 vale 10 è come leggere la %M11 ;)

Modificato: da Claudio Monti
Link al commento
Condividi su altri siti

Stefano Sormanni

Se hai un micro non puoi fare dei DFB però hai la possibilità di creare delle subroutine tramite il task SR.

Poi sul codice basta tu faccia SR1 o SR2 e salti al blocco voluto (ovviamente la memoria a cui passi il valore di ingresso deve essere la solita).

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