Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Sergio Bertana
Amministratore del forumPremesso 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.
Sergio Bertana
Amministratore del forumLe 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).
Novembre 18, 2015 alle 9:09 am in risposta a: Applet java gestione client VNC per accedere al pannello #39193Sergio Bertana
Amministratore del forumI 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.
Sergio Bertana
Amministratore del forumPer 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.
Sergio Bertana
Amministratore del forumE’ 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.
Sergio Bertana
Amministratore del forumL’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à.
Sergio Bertana
Amministratore del forumDirei 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.
Sergio Bertana
Amministratore del forumCome 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.
Novembre 16, 2015 alle 7:55 am in risposta a: Configurare le impostazioni di rete (Indirizzo IP) #39181Sergio Bertana
Amministratore del forumRispondo 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.
Sergio Bertana
Amministratore del forumSulla 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.
Novembre 16, 2015 alle 7:19 am in risposta a: Conversione di programmi da LogicLab in CODESYS #39177Sergio Bertana
Amministratore del forumLo 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.
Sergio Bertana
Amministratore del forumDiciamo 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_VARE’ 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).
Sergio Bertana
Amministratore del forumIl 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).
Novembre 13, 2015 alle 9:28 am in risposta a: Uscite analogiche su modulo espansione I/O analogico #39174Sergio Bertana
Amministratore del forumIl 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).
Novembre 13, 2015 alle 7:58 am in risposta a: Uscite analogiche su modulo espansione I/O analogico #39172Sergio Bertana
Amministratore del forumAggiungo 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.
-
AutorePost