Vai al contenuto

How to set the internal clock time ?

Home Forum Controllori SlimLine e Netsyst (LogicLab) How to set the internal clock time ?

Taggato: 

Stai visualizzando 12 post - dal 1 a 12 (di 12 totali)
  • Autore
    Post
  • #35285
    Kostas
    Partecipante

    I’m using the SlimLine and have developped a program that uses the internal clock, how can I change the internal clock’s time settings ?

    #37425
    Sergio Bertana
    Amministratore del forum

    There are many ways to change the internal clock settings of the SlimLine ARM7 CPU module.

    If you have an Ethernet version the easiest way is to use the web access, just use a browser and setting the SlimLine IP’s address, the main page will be displayed. At the top of the page there is a menù, by clicking on the Time setup link will be displayed a page that allows to set up all clock parameters (See the screenshot).

    Another way is to connect a telnet client (For example Toolly) on the port 23, after logged on it (Login: Admin, Password: Admin) you can send the DateTime commands (All commands must terminate with the <CR>).

    DateTime: View current date and time
    DateTime -s 30/12/2009 16:30:00: Set value date and time
    DateTime -t <timezone>: Sets the time zone. (+/- Hours in advance of Greenwich Mean Time)
    DateTime -d <Daylightzone>: Sets the daylight zone (0: no daylight; 1: Europe; 2: USA)

    If you have a Lite version (Without ethernet) you must catch the system by serial line (Use Toolly) and then you can use the DateTime command by the serial line (115200, e, 8, 1) as described before. To catch the system, use the Toolly Catch utility, after connected the serial line to any COM line of SlimLine the system must be switched off and on again, when the system is catched it is possible to open the Terminal and send the commands (See screenshot).

    #37426
    Sergio Bertana
    Amministratore del forum

    I remind that it’s possible to setup the clock also by user program,it’s possible to add in the watch window (Just drag it with the mouse) the SysDateTime variable (See screenshot), it represents the system date/time in an Epoch time format (Number of seconds that have elapsed since midnight Coordinated Universal Time (UTC), 1 January 1970). By change the variable value, the system date time changes according to it.

    To calculate the Epoch time, there is a lot of Epoch & Unix Timestamp Conversion Tools on Internet, just google “Epoch converter” to find them. The time is expressed as UTC.

    The SysDateToETime FB allows to convert date/time format into an Epoch time format, it manages also the localization according to the Timezone and Daylight zone zone defined. So it could be easy to make a simple ladder program that using this FB allows to set the clock defining the date and time.

    In the ClockSet program (Source code) I have used the SysDateToEtime to set up the system clock, in the watch window you can define the new data/time values, forcing to 1 the SetUpDateTime variable, the system clock will be set (See screenshot).

    #38065
    Maurizio Conti
    Partecipante

    E’ possibile impostare l’ora di uno Slimline Compact MPS050A000 (senza RTC) ? Ci sto provando ma con scarsi risultati.

    #38066
    Sergio Bertana
    Amministratore del forum

    Il modello MPS050A000 è l’entry level della famiglia SlimLine Compact è non dispone del Real Time Clock, quindi non è possibile effettuare nessuna impostazione di orario.

    #38068
    Maurizio Conti
    Partecipante

    Sono cosciente che, non esistendo l’RTC, l’ora non possa essere mantenuta in caso di spegnimento del PLC. La variabile SysDateTime mi rappresenta comunque un orologio ‘software’ interno. Quindi mi chiedo: perchè non posso inizializzarlo (magari via WEB) allo startup ed usarlo nel programma, seppur con i limiti citati ?

    #38069
    Sergio Bertana
    Amministratore del forum

    Non essendo presente il Real Time Clock non viene gestita la variabile SysDateTime, ma se la tua necessità è di gestire un orologio software è facilmente realizzabile con un programma ST. Come vedi dalla stampa di questo programma, ho gestito l’incremento di una variabile di Epoch time utilizzando la funzione SysGetSysTime che ritorna il tempo di sistema.

    Come vedi viene controllato il tempo di sistema e quando supera il secondo viene incrementato il valore di Epoch time, nel controllo si tiene conto del jitter per compensarlo altrimenti si avrebbe un errore progressivo di tempo. Siccome il quarzo del sistema ha le sue tolleranze tipiche, utilizzo un valore di confronto sul tempo di 1 secondo (Definito nella variabile ClockAdj).

    Variando il valore di questa variabile (Magari allocandola in memoria tampone) è possibile correggere l’errore di tempo dovuto alle tolleranze del quarzo, tolleranze che comunque dovrebbero portare ad errori di qualche secondo al giorno (Download programma sorgente).

    #38071
    Maurizio Conti
    Partecipante

    Mille grazie per i consueti preziosi suggerimenti.

    #47969
    Rubox
    Partecipante

    Mi permetto di resuscitare questo post poiché sto avendo un po’ di confusione su RTC, Modbus e via dicendo.

    Ho un PLC MPS054 che non comunica con internet e sto cercando di impostargli l’ora corretta ad intervalli di tempo. Per adesso il pannello HMI collegato scrive i valori corretti in un’area della DB100 e poi il PLC nel task Back li legge e li imposta.

    Ho letto nel manuale di programmazione che è possibile accedere ai valori RTC e scriverli (capitolo 8.1.4 e seguenti) e non ho ben chiara una cosa: i registri 100-105 fanno parte del segmento DB 0 della memoria, è corretto? Posso scrivere direttamente da pannello HMI, o altro apparato che comunichi in Modbus, a quei registri senza passare dalla DB100?

    #47973
    Sergio Bertana
    Amministratore del forum

    All’indirizzo Modbus 100 è stata virtualmente mappata l’area di accesso al real time clock, quindi accedendo ai 6 registri consecutivi a partire da 100, ricordati l’offset Modbus (Indirizzo 99) , e precisamente:

    100 Second Valore secondi (Range da 0 a 59)
    101 Minute Valore minuti (Range da 0 a 59)
    102 Hour Valore ora (Range da 0 a 23)
    103 Day Valore giorno (Range da 1 a 31)
    104 Month Valore mese (Range da 1 a 12)
    105 Year Valore anno (Range da 1900 a 2037)

    Con i comandi 03h Read holding registers, 04h Read input registers potrai leggere da RTC.
    Con i comandi 06h Preset single register, 10h Preset multiple registers potrai scrivere l’RTC.

    Quindi puoi operare direttamente su questi indirizzi senza passare dalla DB100.

    #59316
    AronneIdea
    Partecipante

    Ho uno slimline con RS485 senza batteria, il PLC lo uso per acquisizione e logging in un luogo remoto senza accesso a internet. Talvolta capita che la corrente salti per qualche minuto ed il PLC si spenga per poi riaccendersi. Siccome faccio il logging mi interessa tenere la data e l’ora abbastanza aggiornata, quindi ho pensato di:

    1. Creare un programma (task di back) che ogni minuto scrive l’epoch time su una variabile ritentiva
    2. All’avvio (task boot) leggerei l’epoch precedentemente salvato per settare il tempo

    Considerando che una volta a settimana vado sul luogo e posso comunque settare la data ed ora in modo corretto mi sembra una soluzione buona per la mia esigenza.

    Tuttavia mi chiedo se vi sono problematiche a cui non ho pensato.

    #59367
    Sergio Bertana
    Amministratore del forum

    Si la soluzione è ottima, naturalmente avrai errori che si sommano ad ogni spegnimento/riaccensione e quindi dovrai aggiornare come giustamente dici tu l’ora manualmente.

    Tieni conto che il consumo del modulo CPU è molto limitato, quindi potresti anche pensare ad un piccolo accumulatore al piombo che ti tenga l’alimentazione in backup per il tempo di mancanza di corrente.

Stai visualizzando 12 post - dal 1 a 12 (di 12 totali)
  • Devi essere connesso per rispondere a questo topic.