Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 1 a 15 (di 4,281 totali)
  • Autore
    Post
  • in risposta a: Acquisizione dati da GPS Topcon #82914
    Sergio Bertana
    Amministratore del forum

    Leggo da Internet, l’elenco dei messaggi ISOBUS è definito dallo standard ISO 11783, che è diviso in più parti. I messaggi ISOBUS si basano sul protocollo CAN (Controller Area Network) e usano il formato J1939, con una struttura ben definita basata su PGNs (Parameter Group Numbers).

    A quanto pare utilizza lo standard J1939 utilizzato sugli automezzi, abbiamo trattato questo argomento in questo articolo, e come vedi nell’articolo con il programma SAEJ1939Spy puoi connetere il bus CAN del modulo CPU con l’ISOBUS e spiare i vari messaggi in transito. Nella specifica SAE trovi anche l’indicazione dei vari parametri PGN.

    Quindi con un po di buona volontà potresti riuscire ad individuare i messaggi che ti interessano. Solitamente i dispositivi CAN inviano dati in modo autonomo, ma non so se il dispositivo Topcon invia di propria iniziativa tutti i suoi dati o se alcuni devono essere sollecitati da richieste che arrivano dal monitor sul trattore.

    in risposta a: Acquisizione variabili da strumenti Modbus e storage su disco #82900
    Sergio Bertana
    Amministratore del forum

    Il FB ACModbus è nato appositamente per permettere di gestire comunicazioni Modbus con apparecchiature connesse in multidrop su porta seriale. Riferendoti all’esempio riportato nella pagina del manuale devi definire un array di strutture ACMODBUS_DATA una per ogni indirizzo di nodo e comando da eseguire. In questo modo puoi gestire più nodi e più comandi per ogni nodo.

    Nella esecuzione il FB ACModbus itera su tutte le strutture dato definite gestendo i relativi comandi. Il parametro Delay del FB ModbusMaster definisce il tempo di pausa tra l’esecuzione dei comandi. Il parametro Timeout del FB ModbusMaster definisce il tempo di attesa risposta dal dispositivo prima di generare errore. Nel caso di un errore nella esecuzione di un comando quel comando verrà ignorato nelle sequenze successive per il tempo definito nel parametro RTime, in questo modo un eventuale nodo in errore non rallenta la comunicazione con gli altri.

    Per il salvataggio dei dati acquisiti su disco puoi prendere ad esempio il programma ST_DataLoggerOnCSVFile che trovi in questo articolo. Potrai salvare file ad ogni mese come nell’esempio oppure ogni giorno, ogni ora, ecc. Potrai leggere i dati salvati connettendoti in FTP allo SlimLine oppure inviarli automaticamente ad un server FTP remoto (Vedi articolo).

    Quando si utilizza il disco è preferibile aggiungere una SDCard al sistema perchè come noto i dischi su memoria FLASH come il disco C: o anche le SDCard hanno una “vita” cioè un numero di operazioni in scrittura definito (Circa 100.000). Ma se scrivi ogni minuto avendo implementato il wear leveling sul disco hai una vita torica di circa 100 anni. Ma se scrivessi ogni secondo la vita sarebbe solo di 20 mesi.

    in risposta a: Approccio alla programmazione dispositivi SlimLine #82883
    Sergio Bertana
    Amministratore del forum

    Il prodotto che citi è un prodotto molto vecchio credo abbia una decina di anni, come si vede dal sito da cui è possibile scaricare tutta la documentazione tecnica, abbiamo a magazzino ancora alcuni esemplari del MPS050B020 che è lo stesso prodotto con qualche upgrade. Vediamo cosa puoi fare per utilizzarlo efficacemente.

    • Eseguire l’upgrade all’ultima versione del firmware XUnified. Da questa pagina puoi scaricare l’upgrade, collegandolo in seriale al PC con il programma Toolly puoi eseguire l’aggiornamento firmware. Non eseguire l’aggiornamento bootloader.
    • Per la programmazione si utilizza il programma gratuito LogicLab, in questa pagina una quick start guide all’utilizzo. Ti ricordo che LogicLab dispone di un simulatore SimuLab che ti permette di testare i programmi anche senza lo SlimLine. La simulazione su PC non gestisce le comunicazioni sia seriali che ethernet.
    • Purtroppo il tuo modello non dispone di porta ethernet quindi per la comunicazione con il PC per la programmazione puoi utilizzare la porta seriale (115200, e, 8 ,1). In alternativa ti consiglio la connessione USB che istanzia nel PC un driver RNDIS di rete (Vedi topic) che dovrai impostare con indirizzo IP 192.168.1.10, sulla rete troverai connesso il modulo con IP 192.168.1.122.
    • Con nella cartella di installazione di LogicLab troverai la cartella Examples con all’interno una raccolta di programmi di esempio (I programmi hanno codice Ptpxxx).
    • Nella Knowledge Base del ns sito trovi tutte le informazioni sulle funzioni e blocchi funzioni da noi forniti con LogicLab in librerie. Per ogni oggetto è riportato uno o più programmi di esempio (I programmi sono in linguaggio ST per poterli facilmente importare nel proprio progetto). Ma come vedi ogni esempio riporta il programma Ptpxxx in cui risiede. Nello stesso programma è possibile trovare esempi simili in altri linguaggi IL, LD, FBD che potrai facilmente importare nel tuo progetto con il comando Import di LogicLab.
    • Se hai qualche domanda la puoi postare qui sul forum, prima però fai una ricerca per verificare che alla tua domanda non sia già stata data una risposta.
    • Se ti serve un aiuto diretto puoi acquistare un pacchetto di supporto cosi che un ns tecnico può supportarti nello startup di un programma o nel superare un particolare problema.
    Sergio Bertana
    Amministratore del forum

    Se i pannelli sono della serie cMT userei la funzione importa/export tra CMT che è diretta senza passare da USB o FTP.

    Sergio Bertana
    Amministratore del forum

    Mediante l’utility Build Download Files per realizzare il file di configurazione occorre attivare il tick Use system settings, agendo sul tasto System Settings è possibile impostare la configurazione del sistema che dovrà essere salvata in un file (Esempio systemsettings.conf). Il file salvato và impostato nella definizione della configurazione come da immagine.

    Agendo sul tasto Build verranno creare due distinti files:

    • project.cxob: File di progetto.
    • project.conf: File di configurazione pannello.

    I due files andranno trasferiti sul PenDrive nella stessa cartella, ora inserendo il PenDrive nel terminale ed eseguendo il Download del file progetto verrà automaticamente anche aggiornata la configurazione del pannello.

    in risposta a: Problema con funzione SNTPRequest #82859
    Sergio Bertana
    Amministratore del forum

    Il blocco funzione SNTPRequest è stato sostituito dal blocco funzione SNTPClient, che verrà distribuito con il prossimo package di librerie di cui è possibile eseguire il download dal sito della versione beta PCK055A05_.

    Nel nuovo blocco funzione è stata inserita la possibilità di definire 2 diverse definizioni di server NTP. Per il resto il comportamento del FB è del tutto simile al precedente. Ti inserisco il programma ST_SNTPRequest che puoi utilizzare con il FB SNTPRequest.

    PROGRAM ST_SNTPRequest
    VAR
        ClockSync : BOOL; (* Clock syncronized *)
        TimeBf : UDINT; (* Time buffer (mS) *)
        SNTPReq : SNTPRequest; (* SNTP Request *)
    END_VAR
    
    // *****************************************************************************
    // PROGRAM "ST_SNTPRequest"
    // *****************************************************************************
    // Questo programma esegue la sincronizzazione con il time server.
    // -----------------------------------------------------------------------------
    
        // -------------------------------------------------------------------------
        // INIZIALIZZAZIONI
        // -------------------------------------------------------------------------
        // Eseguo inizializzazioni. 
    
        IF (SysFirstLoop) THEN
            SNTPReq.SpyOn:=FALSE; //Spy On
            SNTPReq.NTPServer:=ADR('0.pool.ntp.org'); //NTP server
            TimeBf:=SysTimeGetMs(); //Time buffer (mS)
        END_IF;
    
        // -------------------------------------------------------------------------
        // ESEGUO SINCRONIZZAZIONE CON SERVER NTP
        // -------------------------------------------------------------------------
        // If system clock not synchronized executes the request faster.
        // If synchronized executes it slowly.
    
        IF NOT(ClockSync) THEN
            IF ((SysTimeGetMs()-TimeBf) > TO_UDINT(T#30s)) THEN TimeBf:=SysTimeGetMs(); SNTPReq.Query:=TRUE; END_IF;
        ELSE
            IF ((SysTimeGetMs()-TimeBf) > TO_UDINT(T#15m)) THEN TimeBf:=SysTimeGetMs(); SNTPReq.Query:=TRUE; END_IF;
        END_IF;
    
        // Manage the NTP request to the server.
        // Execution done, if Ok set the real time clock.
    
        SNTPReq(); //NTP request
        IF NOT(SNTPReq.Done) THEN RETURN; END_IF;
        SNTPReq.Query:=FALSE; //Query On
        IF NOT (SNTPReq.Ok) THEN RETURN; END_IF;
    
        // Update RTC.
    
        eTO_JUNK(SysDateSetS(SNTPReq.UTCTime));
        ClockSync:=TRUE; //Clock syncronized
    
    // [End of file]

    Come vedi quando il RTC è sincronizzato le rischieste al server sono inviate con tempi lunghi 15 minuti, anche senza chip di Real Time Clock fin che è acceso il sistema gestisce comunque il datario con una sufficente precisione.

    in risposta a: Comunicazione con HMT028ATB-C 2.8 inch Smart TFT LCD #82849
    Sergio Bertana
    Amministratore del forum

    Abbiamo applicazioni dove ai ns moduli SlimLine è stato abbinato un display LCD per la gestione dell’interfaccia con l’operatore a costi molto contenuti, solitamente viene utilizzata come interfaccia il bus di espansione I2C. In questo articolo trovi una applicazione con relativo programma di esempio di gestione di un display connesso in I2C.

    Ho cercato su Internet informazioni sul display HMT028ATB e da quanto ho compreso dispone di una interfaccia seriale a livelli TTL, quindi è possibile collegarlo a qualsiasi porta seriale RS232 utilizzando un convertitore interfaccia RS232-TTL ATC-102.

    Da programma LogicLab utilizzando il FB SysSerialPort potrai gestire la comunicazione, le funzioni Sysfputc, Sysfwrite, SysVfprintf, ti permettono di inviare al display i vari comandi di gestione in base a quanto riportato sulla documentazione del display.

    in risposta a: Sostituzione Pixsys CNV520 #82839
    Sergio Bertana
    Amministratore del forum

    Il convertitore in oggetto opera come server TCP/IP client Modbus, accetta connessioni da dispositivi Modbus TCP/IP master convertendo il protocollo Modbus TCP in Modbus RTU su porta seriale RS485. In più vedo da datasheet che dispone di 1 ingresso analogico, 2 ingressi digitali ed 1 uscita digitale, il modello AD opera anche come access point WiFi. Nella ns gamma di prodotti possiamo offrire:

    • Gateway Modbus TCP a RTU Low cost ATC-1300, Questo modulo opera unicamente come gateway quindi non ha gli I/O analogici e digitali.
    • Gateway Modbus TCP a RTU/ASCII ATC-3002. Questo modulo opera unicamente come gateway quindi non ha gli I/O analogici e digitali. A differenza del modello ATC-1300 può operare sia da server che da client.
    • Modulo CPU PLC SlimLine Cortex M7 MSP054. Come si evince dalla documentazione si tratta di un sistema programmabile che opportunamente programmato può operare come il modulo da sostituire. Il FB ModbusGateway esegue la funzione di gateway, agendo opportunamente su ITrigger è possibile gestire un nodo e/o un range di indirizzi specifico per la gestione degli I/O interni al sistema.

    Le prime due soluzioni sono plug and play facili da utilizzare ma non hanno gli I/O a bordo, la soluzione con il modulo SlimLine permette sicuramente un rimpiazzo del modulo avendo anche la gestione degli I/O ma necessita di programmazione.

    Nessuna soluzione ha il WiFi, quindi se necessita anche la conessione WiFi occorre aggiungere ai sistemi un access point ad esempio il router Ethernet Industriale RUT14x.

    Sergio Bertana
    Amministratore del forum

    Il radiomodem ZigBee-seriale ATC-3200 data l’elevata banda passante delle trasmissioni ZigBee a differenza della banda 868Mhz garantisce sicuramente una elevata velocità di comunicazione ma in Italia la potenza massima del segnale ZigBee è molto bassa quindi anche la distanza coperta. Come indicato il radiomodem può coprire al massimo 500 metri in vista ottica, e vista l’elevata frequenza qualunque ostacolo riduce moltisimo la distanza.

    Dovendo nel Vs caso coprire una distanza di ca 1000 metri, la soluzione migliore è utilizzare il WiFi, il convertitore Wi-Fi seriale ATC-1000WF può connettersi ad una rete WiFi esistente o utilizzando due moduli (Uno configurato come access point ed uno com station) creare una propria rete WiFi di comunicazione. Il modulo supporta il baudrate 115200, quindi è compatibile con la Vs applicazione.

    Occorre ricordare che nelle comunicazioni wireless (Sia i radiomodem che i convertitori seriale/ethernet) pacchettizzano i dati. Quindi ci possono esserci ritardi tra la ricezione del dato seriale da un lato e la trasmissione dello stesso dall’altro. Questi ritardi che possono esere di pochi mS fino a qualche centinaio di mS (Dipendono dal tipo di trasmissione) in molti casi sono trasparenti alla comunicazione ma può succedere che in alcuni protocolli il ritardo crei errore di comunicazione.

    In risposta alla possibilità di comunicazione via WiFi ho già indicato la soluzione, mentre su rete ethernet possiamo proporre il convertitore Ethernet-seriale ATC-1200 anche questo supporta il baudrate 115200, quindi è compatibile con la Vs applicazione.

    in risposta a: Visualizzazione Data/Ora utilizzando formato custom #82820
    Sergio Bertana
    Amministratore del forum

    Informazioni utili si possono trovare anche in questo topic.

    in risposta a: Creare un timer giornaliero con LogicLab #82812
    Sergio Bertana
    Amministratore del forum

    Immaginando la domanda seguente che può essere:

    Come posso impostare i valori di StartTime ed EndTime da pannello operatore Weintek?

    Ipotizzando di definire il tempo di start come variabile PLC StartTime di tipo UDINT allocata in DB100.2048 in modo da essere in area ritentiva, riprendendo il discorso già trattato in questo topic, si utilizza un oggetto Numeric input, che come si vede dallo screenshot punta alla variabile PLC StartTime (Indirizzo Modbus %MW 41024). Definendo le proprietà dell’oggetto vanno settate come indicato si avrà una visualizzazione suddivisa in HH:MM:SS, ipotizzando il valore 12:10:50 avremo StartTime=121050.

    Ora nel programma PLC occorrerà convertite questo valore in una valore di tipo TIME_OF_DAY da passare al FB di gestione temporizzazione, ecco l’esempio:

        DailyTimer.StartTime:=CONCAT_TOD(TO_INT(StartTime/10000), //Hour
                    TO_INT(MOD((StartTime/100), 100)), //Minute
                    TO_INT(MOD(StartTime, 100)), //Second
                    0); //Millisecond
    in risposta a: Creare un timer giornaliero con LogicLab #82802
    Sergio Bertana
    Amministratore del forum

    Molte volte abbiamo pensato di realizzare un FB temporizzatore, ma sono talmente tante e varie le opzioni richieste che è impossibile soddisfarle tutte, così è più facile risolvere il problema scrivendo un programma ad-hoc. Ecco allora un semplice blocco funzione che gestisce una temporizzazione con orario di attivazione e disattivazione.

    FUNCTION_BLOCK FB_DailyTimer
    VAR
        SysDTime : UDINT; (* Ora corrente del giorno *)
    END_VAR
    VAR_INPUT
        StartTime : TIME_OF_DAY; (* Ora inizio (es. T#8h10m20s) *)
        EndTime : TIME_OF_DAY; (* Ora fine (es. T#10h30m15s) *)
    END_VAR
    VAR_OUTPUT
        Output : BOOL; (* TRUE se attivo *)
        CurrentTime : TIME_OF_DAY; (* Ora corrente del giorno (es. T#15h10m5s *)
    END_VAR
    
        // Calcolo valore TIME_OF_DAY da orologio di sistema.
    
        SysDTime:=(MOD(SysDateLocalize(SysDateGetS(), +1, 1), 86400))*1000;
        eTO_JUNK(SwapData(ADR(CurrentTime), ADR(SysDTime), UDINT_TYPE, SWAP_COPY));
    
        // Gestisco fascia oraria nello stesso giorno.
    
        IF (StartTime < EndTime) THEN
            Output:=(CurrentTime >= StartTime) AND (CurrentTime < EndTime);
            RETURN;
        END_IF;
    
        // Gestisco fascia oraria a cavallo della mezzanotte.
    
        Output:=(CurrentTime >= StartTime) OR (CurrentTime < EndTime);
    
    // [End of file]

    Come puoi vedere dalla variabile di sistema SysDateTime che ritorna la data ora in epoch time ricavo CurrentTime di tipo TIME_OF_DAY, viene poi eseguita la comparazione con i valori di set ed attivata l’uscita di conseguenza. La funzione SwapData esegue unicamente la copia tra un valore UDINT ed un valore TIME_OF_DAY, l’uguglianza “:=” produce errore in quanto sono due tipi di dato disomogenei.

    Avendo definito nella funzione SysDateLocalize di generazione tempo attuale il valore di TimeZone:=+1 e la DaylightZone:=1, si ha il tempo localizzato con il cambio automatico tra ora solare e legale, ma attenzione se gli orari sono impostati a cavallo del cambio ora si può accorciare o allungare la temporizzazione di un’ora. In alternativa si può impostare DaylightZone:=0.

    Se occorrono più temporizzazioni nella giornata basterà istanziare più FB con tempi diversi ed eseguire il comando con la OR tra le uscite di tutte le FB.

    in risposta a: Dati automatici su ricette #82778
    Sergio Bertana
    Amministratore del forum

    La soluzione migliore è definire già nel progetto HMI gli stessi limiti limiti del PLC,  impostandoli  fissi o dinamici nelle varie introduzioni numeriche. Se utilizzi i limiti dinamici è il PLC stesso a definirli.

    Se invece vuoi lasciare liberi ilimiti nella ricetta (Non è la soluzione che sceglierei) nel controllo effettuato dal PLC in caso di valore non coretto puoi attivare una variabile BOOL che forza il trasferimento della ricetta dal PLC al pannello.

    in risposta a: Trasferire al PLC il numero della ricetta in uso #82775
    Sergio Bertana
    Amministratore del forum

    Il selection si può trasferire con una macro. Esempio leggo selection e trasferisco su LW50 del pannello:

    macro_command main()
    short sel
    GetData(sel, "Local HMI", RECIPE, "aa.Selection")
    SetData(sel, "Local HMI", LW, 50, 1)
    end macro_command

    Dovendolo trasferire sul PLC nella istruzione SetData al posto di Local HMI dovrai definire il PLC con i relativi parametri.

    in risposta a: Modifica baud rate EastronSDM120 con toolly #82699
    Sergio Bertana
    Amministratore del forum

    I meters di energia come SDM120 e SDM630 sono accessibili tramite protocollo Modbus, se guardi nella pagina del prodotto troverai il link per il download elenco registri Modbus. Ti riporto per comodità i link, SDM120, SDM630.

    Il protocollo Modbus è standard e ben documentato quindi utilizzando un qualsiasi programma di comunicazione Modbus puoi interrogare i registri del meters. Il problema è nel formato dati, come vedi dalla documentazione tutti i dati sono di tipo float a 32 bits (IEE754) quindi per poterli interpretare devi convertire i dati letti da Modbus. Ulteriore complicazione è nell’endianness, il protocollo Modbus non specifica l’endianness dei dati di grandezza superiore ai 16 bits, quindi acquisendo un valore a 32 bits occorre sapere chi dei due registri a 16 bit rappresenta l’MSW e chi l’LSW.

    Se vedi l’esempio di questo articolo, dove utilizzando l’utility Modbus Master di Toolly vedi le operazioni da effettuare. Nell’esempio si imposta il Baud rate, che come vedi dalla tabella dei registri è indicato con indirizzo 40029. Tralascia il 4 iniziale che confonde, l’indirizzo del parametro baud rate è quindi 0029. Ma se vedi nel’indirizzo Hex da inviare è indicato 0x001C (Cioè 28). Questo perchè normalmente il Modbus ha offset 1 quindi và sottratto dall’indirizzo indicato.

    Per accedere a questa serie di registri devi utilizzare i codici Modbus 0x03 e 0x10, Nell’esempio con Toolly,  infatti vedi che per leggere il valore di baud rate ho utilizzato il comando 0x03. Il valore è indicato in float 32 bits e come vedi ho eseguito lo swap tra MSW e LSW.

    Tutti i registri con i valori di energia invece sono accessibili solo in lettura anche qui tralascia il 3 iniziale, ma come vedi devi utilizzare il comando Modbus 0x04.

    Tutto il lavoro sopra descritto viene realizzato utilizzando i nostri prodotti SlimLine dai FB EastronSDM120 e EastronSDM630.

Stai visualizzando 15 post - dal 1 a 15 (di 4,281 totali)