Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 2,311 a 2,325 (di 4,296 totali)
  • Autore
    Post
  • in risposta a: Gestione isteresi su comando riscaldatore #39195
    Sergio Bertana
    Amministratore del forum

    Premesso che la gestione della isteresi che hai fatto è corretta, lo schema che hai realizzato non ha nulla del ladder è più adatto al linguaggio FBD (Screenshot). Tant’è che nella nuova versione di LogicLab 4 l’editor del ladder è stato rivisto per “costringere” lo sviluppatore a seguire le regole dettate dalla normativa IEC 61131. Ma niente paura è sempre possibile continuare ad usare la retrocompatibilità con l’editor attuale. Ora vediamo come scrivere il programma in ST.

      AnInp.Address:=0; (* Module address *)
      AnInp.Channel:=0; (* Module channel *)
      AnInp.Mode:=AD_VOLT_0_10_COMMON; (* Acquisition mode *)
      AnInp(); (* Execute the analog acquisistion *)

      IF (AnInp.Value < Minimum) THEN Heating:=TRUE; END_IF; (* If the value drops below minimum set the command *)
      IF (AnInp.Value >= Maximum) THEN Heating:=FALSE; END_IF; (* If the value reach the maximum reset the command *)
      IF (AnInp.Fault) THEN Heating:=FALSE; END_IF; (* On FB fault reset the command *)

    Anche per chi non ha esperienza di programmazione in linguaggio ST credo il programma sia leggibile, nella prima parte viene gestita l’acquisizione. Poi il valore acquisito viene comparato con lo statement IF con i valori minimo e massimo e  se la condizione è vera si eseguono le operazioni scritte dopo il THEN.

    in risposta a: Informazioni sulle dimensioni programma #39194
    Sergio Bertana
    Amministratore del forum

    Le versioni Compact dei moduli CPU SlimLine hanno un limite massimo di programma fisato a 48 KBytes. Ora è vero che nel tuo programma ci sono poche linee ma alcune FB come la Modbus e quella di gestione del terminale Picoface sono un po affamate di memoria codice.

    Inoltre i messaggi programmati sul terminale sono memorizzati nella memoria codice, quindi più messaggi ci sono e più memoria codice viene utilizzata. Nella nuova versione del sistema operativo SFW184B000 che viene rilasciato proprio oggi (Vedi FAQ per l’aggiornamento), altre ad una serie di migliorie (Vedi qui le note di rilascio) permette di acquistare un package che estende l’area codice raddoppiandola (Portandola a 96 KBytes).

    in risposta a: Applet java gestione client VNC per accedere al pannello #39193
    Sergio Bertana
    Amministratore del forum

    I pannelli operatore supportano fino a 3 connessioni VNC contemporanee, quindi è possibile accedere al pannello da un massimo di 3 PC in contemporanea. Ti ricordo che il VNC è una pura remotazione del pannello, quindi tutti i PC vedranno la stessa immagine che è visualizzata sul pannello e potranno operare in contemporanea.

    Il cMT-SVR invece è un dispositivo cloud, non ha schermo, per la visualizzazione si utilizza una appopsita App da installare sul PC o sullo smartphone o tablet. Anche in questo caso possono connettersi in contemporanea 3 utenti, ma a differenza del VNC ogni utente visualizza e opera sulla propria pagina in modo indipendente dagli altri.

    Non sò quanti PC vuole connettere il tuo cliente ma se sono più di 3 devi utilizzare più terminali e/o più cMT-SVR.

    in risposta a: Gestire un ciclo pausa/lavoro con timers #39190
    Sergio Bertana
    Amministratore del forum

    Per fare un ciclo Pausa/Lavoro è meglio come già detto utilizzare il timer eTON (Ecco lo screenshot del programma), ho anche allegato un programma di esempio, è già fatto con la nuova versione di LogicLab che uscirà a giorni (Download progetto).

    Però per sfruttuare appieno le potenzialità del sistema occorre sicuramente passare al linguaggio ST, abbinando l’ST agli altri linguaggi si ottiene la massima flessibilità di azione.

    in risposta a: Gestire un ciclo pausa/lavoro con timers #39188
    Sergio Bertana
    Amministratore del forum

    E’ corretta l’allocazione in memoria che hai fatto (Di 1 in 1 per i BOOL e dii 4 in 4 per le REAL) non capisco perchè ti dia errore LogicLab. Ecco lo screenshot della allocazione fatta per prova.

    in risposta a: Realizzazione di un programmatore orario #39186
    Sergio Bertana
    Amministratore del forum

    L’argomento programmatore orario è stato ampiamente trattato in questo topic dove trovi il codice sorgente della funzione di controllo orari. Credo che seguendo le info riportate nel topic puoi avere lo spunto necessario per risolvere la tua necessità.

    in risposta a: Gestire un ciclo pausa/lavoro con timers #39184
    Sergio Bertana
    Amministratore del forum

    Direi che più che il timer di tipo eTP si potrebbero utilizzare due timer di tipo eTON in cascata il primo esegue il computo del tempo di pausa ed il secondo det tempo di lavoro. Il contatto chiuso del secondo timer attiva il primo così che terminato il tempo di lavoro tutta la catena riparte.

    Ma perchè in alternativa non utilizzare il FB OnOffCycle_v1 (Estratto manuale) che già fà tutto questo addirittura con tempi random. Se non ti servono i tempi random puoi definire uguali i valori minimo e massimo di ogni temporizzazione.

    Comunque se per tua curiosità vuoi vedere come è fatto il timer eTP eccoti la stampa ed la libreria con il programma sorgente.

    in risposta a: Collegamento termoresistenze Pt100/Pt1000 #39183
    Sergio Bertana
    Amministratore del forum

    Come spiegato prima occorre chiudere sempre il circuito tra Iexc e Isense, quindi se togli una termorestenza devi cablare correttamente la serie, ma questo non vuol dire che devi cortocircuitare gli ingressi del modulo.

    Gli ingressi del modulo rimangono a disposizione per un qualsiasi altro tipo di acquisizione.

    in risposta a: Configurare le impostazioni di rete (Indirizzo IP) #39181
    Sergio Bertana
    Amministratore del forum

    Rispondo in ritardo al post ma il tempo non è passato nell’ozio… Stiamo rilasciando la nuova versione del sistema operativo Sfw184b000, ed in questa nuova versione pregna di novità, in risposta a richieste come questa abbiamo aggiunto la funzione SysOSIDValue (Estratto manuale) che permette di accedere alle informazione di sistema tra cui anche all’indirizzo IP.

    in risposta a: Ottimizzazione del controllo PID #39178
    Sergio Bertana
    Amministratore del forum

    Sulla regolazione PID sono stati scritte fiumi di parole ma poi in pratica i corretti valori delle costanti di regolazione sono sempre da trovarsi sperimentalmente in base al tipo di impianto su cui si opera.

    Per capire e fare esperimenti sulla regolazione PID trovi nel forum anche un programma che ne permette la simulazione su PC con il simulatore SimuLab (Topic). Ma questo è un puroi esercizio didattico, nel tuo caso ti posso dare alcuni consigli di massima su come ottimizzare la regolazione PID.

    Io inizio sempre lavorando di sola proporzionale, le correzioni I e D servono poi come rifinitura, il tuo problema sembrerebbe essere un overshoot della temperatura. In pratica nel riscaldare l’estrusore continui a fornire energia termica per troppo tempo e quindi lo sovrariscaldi. I rimedi possono essere:

    Aumentare la banda proporzionale PBand, in questo modo all’avvicinarsi della temperatura al set point il regolatore PID inizia a regolare diminuendo l’energia termica fornita.

    Diminuire la correzione proporzionale KP, in questo modo ad errori di temperatura piccoli si ha un minore apporto di energia termica il che tende ad evitare gli overshoots.

    Ricordo che con la sola proporzionale non è possibile azzerare l’errore di temperatura (La P lavora solo in presenza di errore). Quindi quando con la sola proporzionale la regolazione è accettabile, lavorando di integrativa potrai fare in modo di azzerare l’errore avvicinando sempre più il valore di temperatura reale al set point.

    Su regolazioni molto lente come nel tuo caso la derivativa di solito non ha alcun effetto pratico, anzi molte volte è dannosa.

    in risposta a: Conversione di programmi da LogicLab in CODESYS #39177
    Sergio Bertana
    Amministratore del forum

    Lo statement TO_UDINT di LogicLab esegue un cast sul dato, in pratica indica al compilatore di assumere quel dato come se fosse un UDINT (unsigned a 32 bits), esiste tutta una serie di operatori di cast dei dati per i diversi tipi di dati previsti.

    Mentre in LogicLab non occorre definire il tipo dati di partenza per eseguire il cast, CODESYSY ha previsto la definizione anche del tipo dati originale, quindi nel tuo caso trattandosi di un dato USINT dovrai utilizzare lo statement USINT_TO_UDINT. Ecco la funzione STTimeSwitch come si presenta in CODESYS.

    IF NOT(Enable) THEN STTimeSwitch:=FALSE; RETURN; END_IF;
    DSecs:=DateTime MOD 86400; (* Day seconds*)
    STTimeSwitch:=(DSecs >= ((USINT_TO_UDINT(HOn)*3600)+(USINT_TO_UDINT(MOn)*60)+SOn)) AND (DSecs < ((USINT_TO_UDINT(HOff)*3600)+(USINT_TO_UDINT(MOff)*60)+SOff));

    Allego per il download il file export della funzione CODESYS.

    in risposta a: Connessione terminale con SlimLine CODESYS #39176
    Sergio Bertana
    Amministratore del forum

    Diciamo che hai fatto una gran confusione… Intanto hai utilizzato il protocollo Modbus che non è supportato di default dal modulo CPU CODESYS. Se vuoi utilizzare il Modbus devi inserire nel tuo programma il FB di gestione Modbus slave (Topic).

    Con i sistemi CODESYS si utilizza il protocollo CODESYS Automation Alliance che è gestito nativamente dal sistema operativo dello SlimLine CODESYS. Quindi nella definizione del PLC locale devi scegliere il protocollo corretto (Screenshot). Dal pannello è possibile accedere a tutta l’area MD, dovrai quindi mappare in quest’area le tue variabili, nel mio esempio ho mappato un BOOL una DWORD ed un REAL ecco come:

    VAR_GLOBAL
     MyDword AT %MD100 : DWORD;
     MyReal AT %MD104 : REAL;
     MyBool AT %MX108.0 : BOOL;
    END_VAR

    E’ anche possibile da pannello accedere all’area I/O logici ma ricordo che lo SlimLine esegue l’immagine di processo solo se nel programma vi è un riferimento al banco di I/O. Ecco perchè nel mio esempio ho inserito questa riga di programma:

    Dummy:=%QX32.0 AND %IX32.0;

    Ecco come nel progetto terminale mi sono riferito alle variabili SlimLine (Screenshot). Per aiutarti nello sviluppo allego un progetto di esempio con il programma SlimLine CODESYS ed il programma HMI, il programma HMI si può testare anche su PC con il simulatore terminale in EasyBuilderPro (Download programmi).

    in risposta a: Sensore HWgroup Temp-485 Box2 #39175
    Sergio Bertana
    Amministratore del forum

    Il sensore HWgroup Temp-485 Box2 utilizza una comunicazione seriale RS485 multidrop con protocollo seriale ASCII. Fino a 32 dispositivi possono coesistere su di una rete RS485 ognuno indirizzabile con il proprio indirizzo.

    Come si evince dal manuale (Estratto manuale) basta inviare la stringa ascii T[address]I (Per il prodotto con indirizzo A la stringa è TAI) per ricevere il valore di temperatura con una stringa *[address][temp]. Per i dispositivi SlimLine LogicLab è disponibile il blocco funzione HTempBox per l’acquisizione del valore di temperatura ed umidità (Topic).

    Non esiste un analogo blocco funzione per i dispositivi SlimLine CODESYS ma vista l’estrema semplicità del protocollo credo non vi siano particolari problemi nello svilupparlo da parte degli utenti. Nel forum trovi qualche esempio che potrebbe esserti utile (Vedi topic 1, topic 2).

    in risposta a: Uscite analogiche su modulo espansione I/O analogico #39174
    Sergio Bertana
    Amministratore del forum

    Il FB SysSetAnOut come tutti i FB ha una uscita di Fault controllando l’attivazione dela uscita con la funzione SysGetLastError è possibile acquisire l’eventuale errore di esecuzione tra cui l’errore di valore di Mode errato (Vedi estratto manuale).

    in risposta a: Uscite analogiche su modulo espansione I/O analogico #39172
    Sergio Bertana
    Amministratore del forum

    Aggiungo una precisazione molto importante, essendo l’impostazione del range di funzionamento eseguita da programma non è possibile alla accensione del sistema (Prima che il programma vada in esecuzione) determinare il valore erogato in uscita dal modulo.

    Quindi se l’uscita del modulo è utilizzata per il comando di attuatori (Azionamento motori, servovalvole idrauliche ecc.) occorre garantire l’abilitazione al funzionamento dell’attuatore tramite una uscita logica aggiuntiva. Solo per le uscite logiche è garantita la certezza dello stato (Sempre disattivo) alla accensione del sistema.

Stai visualizzando 15 post - dal 2,311 a 2,325 (di 4,296 totali)