Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

How to?: Creare una libreria in Codesys

PLC, servomotori, inverter...robot

Moderatori: Foto Utentedimaios, Foto Utentecarlomariamanenti

0
voti

[1] How to?: Creare una libreria in Codesys

Messaggioda Foto Utentemarej89 » 3 nov 2014, 16:04

Buonasera a tutti gli utenti del forum,
Mi sorge l'esigenza di creare una libreria in Codesys,
o meglio, fin ora quando mi era capitato di creare librerie su questo software, ingressi e uscite
facevano parte della stessa POU o al massimo interagivano con una function block.
Dichiarando nel PRG VAR_INPUT, VAR_OUTPUT e salvando il tutto con formato .lib
potevo utilizzare ed esportare il mio programma in qualsiasi progetto.
Adesso devo fare una cosa un po' più complessa:
all'interno di un project funzionante abbastanza complesso ( per semplicità chiamiamolo con "progetto con tante POU") devo creare una libreria che mi racchiuda tutto il sistema e utilizzare qualche ingresso e uscita che non fanno parte tutti necessariamente della stessa POU.
Da qui la mia idea:
Creare una POU che grazie a dei MOVE vada a scrivere gli ingressi o leggere le uscite.
Mi spiego meglio:
Se A è un ingresso del sistema che a me interessa creo una variabile Pippo nella POU creata che con un MOVE va a scrivere il risultato su A.
Questa cosa la facevo con tutti gli ingressi e uscite che mi interessavano (ovviamente per le uscite vale il contrario, la variabile di interesse va a scrivere il PIPPO di turno).

Salvando poi tutto come libreria andavo a utilizzare solo la POU creata che poi speravo dialogava con il resto dell'intero sistema.

Salvando come file project questa cosa funziona perfettamente, ma come libreria proprio non vuole andare....
non sono un esperto e quindi non so dove sbaglio.

Se qualcuno ha capito il problema sarò lieto di ascoltare o di spiegare meglio se non sono stato chiaro.

Grazie
Avatar utente
Foto Utentemarej89
10 1 2
 
Messaggi: 24
Iscritto il: 26 apr 2013, 12:12

4
voti

[2] Re: How to?: Creare una libreria in Codesys

Messaggioda Foto UtenteCandy » 3 nov 2014, 17:37

Un blocco o funzione di libreria non deve MAI fare riferimento ad oggetti assoluti del programma, ma avere ingressi ed uscite, o strutture complesse da riempire sempre con gli I/O, per essere interfacciata poi al programma utente.
Il blocco o funzione di libreria deve essere SEMPRE pensato ad un livello superiore ed estraneo agli oggetti del proprio programma. Altrimenti, non si trata di una libreria, ma di una raccolta di funzioni standardizzate, ma sempre di solo uso personale.

Guarda un poco, in giro per il mondo, se tra CoDeSys, C, C#, C++, J++, ecc, trovi librerie che fanno riferimento ad oggetti statici del programma?

La tua è una richiesta errata, figlia di errata programmazione.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

0
voti

[3] Re: How to?: Creare una libreria in Codesys

Messaggioda Foto Utentemarej89 » 3 nov 2014, 18:08

Grazie per la risposta,
purtroppo da utente poco esperto non ho capito la risposta (evidentemente mi mancano delle basi come ricordavi tu).
Nella fattispecie non ho capito il perché se utilizzo una sola POU dichiarando I/O il sistema funziona mentre se sono più di una le POU "non parlano".
Avatar utente
Foto Utentemarej89
10 1 2
 
Messaggi: 24
Iscritto il: 26 apr 2013, 12:12

3
voti

[4] Re: How to?: Creare una libreria in Codesys

Messaggioda Foto UtenteCandy » 3 nov 2014, 20:36

Non so cosa dirti di più, rispetto alla narrativa di cui è piena la rete, su come si programma.
Aggiungo un esempio di materiale CoDeSys mio, magari ti aiuta in qualche modo:

Sorgente di libreria:
Codice: Seleziona tutto
FUNCTION_BLOCK FB_FaultHorn
VAR_INPUT
  bIset : BOOL;
  bIack : BOOL;
  tIworkTime : TIME;
  tIpauseTime : TIME;
END_VAR
VAR_OUTPUT
  bLout : BOOL ;
END_VAR
var
  bLpeSet : BOOL;
  bLset : BOOL;
  tLaccu1 : TIME ;
END_VAR


IF bIset THEN
  IF NOT bLpeSet THEN
    bLset := TRUE;
    bLpeSet := TRUE;
    bLout := TRUE;
  END_IF;
ELSE
  bLpeSet := FALSE;
  bLset := FALSE;
END_IF;

IF bIack THEN
  bLset := FALSE;
END_IF;

IF NOT bLset THEN
  tLaccu1 := F_mSec(t#0ms);
  bLout := FALSE;
ELSE
  IF bLout THEN
    IF F_mSec(tLaccu1) > tIworkTime THEN
      tLaccu1 := F_mSec(t#0ms);
      bLout := FALSE;
    END_IF;
  ELSE
    IF F_mSec(tLaccu1) > tIpauseTime THEN
      tLaccu1 := F_mSec(t#0ms);
      bLout := TRUE;
    END_IF;
  END_IF;
END_IF;



Punto di applicazione nel programma:
Senza nome.png
Senza nome.png (9.54 KiB) Osservato 6108 volte
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

0
voti

[5] Re: How to?: Creare una libreria in Codesys

Messaggioda Foto Utentemarej89 » 4 nov 2014, 9:14

So creare una function block semplice ed utilizzarla, a me è stato chiesto una cosa differente:
Dato un programma articolato, chiuderlo su una libreria così ad un utente esterno appare come una grande macro con soli ingressi e uscite.
Mi chiedevo se sia possibile dato che non ci riesco.
Avatar utente
Foto Utentemarej89
10 1 2
 
Messaggi: 24
Iscritto il: 26 apr 2013, 12:12

1
voti

[6] Re: How to?: Creare una libreria in Codesys

Messaggioda Foto UtenteCandy » 4 nov 2014, 9:37

Cosa cambia tra funzione "piccola" e "grande"? Direi nulla. Poi, in verità, io ristrutturerei il problema in più blocchi, spiacializzati ciascuno per uno scopo, tanto per non avere un bloccone unico gigante, difficile da gestire.

Immagina ad esempio un blocco con una ventina e più di I/O e gestirlo in strutturato... Proprio brutto a vedersi.

Piuttosto fai una o più strutture, tematiche, da passare al super blocco, e poi colleghi gli I/O nel programma, esternamente al punto di richiamo, che è un poco più elegante da vedesri e facile da programmare.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

0
voti

[7] Re: How to?: Creare una libreria in Codesys

Messaggioda Foto Utentemarej89 » 4 nov 2014, 10:09

Candy ha scritto:Cosa cambia tra funzione "piccola" e "grande"? Direi nulla(...)
Piuttosto fai una o più strutture, tematiche (...)


Cambia, prova a creare una POU che date due variabili a e b le somma e il risultato lo mette in c (globale).
Poi crea un'altra POU che utilizza c e lo somma a d e il risultato finale lo metti in una variabile chiamata e.

Se simuli tutto ovviamente funziona.

Se voglio creare invece una libreria che abbia come ingressi a, b, d e come uscita abbia e come devo fare?

Ovviamente la soluzione banale di usare una function block non vale, questo esempio è solo una semplificazione del mio sistema complesso.
Avatar utente
Foto Utentemarej89
10 1 2
 
Messaggi: 24
Iscritto il: 26 apr 2013, 12:12

2
voti

[8] Re: How to?: Creare una libreria in Codesys

Messaggioda Foto UtenteCandy » 4 nov 2014, 13:23

Cosa significa creare una POU? Puoi creare un programma, una funzione, un blocco funzione. POU è l'insieme di tutte le risorse del sistema!

il risultato lo mette in c (globale)

Come ti ho già detto questo è un errore. Se scrivi una funzione di libreria, il risultato della funzione o è una uscita, o è un elemento di una strutura di uscita, (ma anche InOut), o è locale ed a perdere dopo la return della funzione. NON è certamente globale del progetto. Sarebbe/è un grave errore di programmazione.

Se devi far euna funzione o blocco complesso che, durante l'elaborazione ti ristetituisca anche dei passaggi intermedi, per vederli, per processarli, fai tu, come ti è stato detto, li appoggerai su variabili temporanee, su strutture, su cosa vorrai, e le porterai fuori, prima della return, sulle variabili di destinazione.
E' un brutto modo di programmare, ma non impossibile.
Per limitare il numero delle singole variabili di I/O, usa delle strutture, organizzate magari per marco funzioni.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

1
voti

[9] Re: How to?: Creare una libreria in Codesys

Messaggioda Foto UtenteCandy » 4 nov 2014, 15:06

Program Organization Unit ... Può essere di tutto.
Ma si, forse, un oggetto funzione, FB, programma, è anche un POU.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

0
voti

[10] Re: How to?: Creare una libreria in Codesys

Messaggioda Foto Utentecarlomariamanenti » 5 nov 2014, 19:04

quotomauro.gif
quotomauro.gif (2.62 KiB) Osservato 4648 volte
Avatar utente
Foto Utentecarlomariamanenti
60,1k 6 11 13
G.Master EY
G.Master EY
 
Messaggi: 4324
Iscritto il: 18 gen 2012, 10:44

Prossimo

Torna a Automazione industriale ed azionamenti

Chi c’è in linea

Visitano il forum: Nessuno e 15 ospiti