Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 481 a 495 (di 4,264 totali)
  • Autore
    Post
  • in risposta a: Rilevazione e storicizzazione dati sedi produttive #71137
    Sergio Bertana
    Amministratore del forum

    Possiamo offrire i sistemi STE2 con le relative sonde ambientali e sonde di corrente monofase. Questi prodotti supportano il protocollo SNMP e/o possono inviare dati al portale dedicato SensDesk.

    In alternativa la gamma di sensori temperatura/umidità wireless Aranet, che si connettono alla stazione base Aranet pro, che può essere interrogato con protocollo Modbus TCP e/o inviare dati al portale dedicato Aranet cloud.

    Altra possibilità è utilizzare i sensori di temperatura Comet, che si possono interrogare in Modbus TCP e/o inviare dati al portale dedicato.

    Infine è possibile utilizzare i nostri sistemi programmabili SlimLine per gestire la connessione in SNMP, Modbus TCP con i sensori visti precedentemente e/o per collegare sensori combinati temperatura/umidità, meter di energia monofase e trifase in RS485. I dati rilevati possono essere storicizzati nel PLC e/o inviati ad un server FTP per la storicizzazione.

    Utilizzando il protocollo MQTT è possibile inviare i dati ad un portale pubblico IoT ad esempio Beebotte od a un sito web realizzato ad-hoc per le proprie esigenze.

    in risposta a: Comunicazione Modbus RTU fra CMT-SVR-100 e Yotta A-1012 #71049
    Sergio Bertana
    Amministratore del forum

    Sei caduto nella “trappola” della documentazione Modbus dove molti produttori indicano con la prima cifra il tipo di comando Modbus da utilizzare (In questo caso 4xxxx, comando 04 Read input registers).

    In realtà proprio come hai visto tu quando nel manuale indicano 40131 si vuole indicare di eseguire un comando di 4x Read input register all’indirizzo 131. Modbus ha offset 1, e tu invece hai usato il Modbus RTU Zero Based Addressing, quindi l’offset lo devi sottrarre tu dalla definizione dell’indirizzo.

    in risposta a: Errore su comando di backup sistema #71032
    Sergio Bertana
    Amministratore del forum

    In effetti ci siamo accorti di un BUG, eseguendo il backup viene creato il file temporaneo UplInfos.ini sul disco definito.

    Ora avendo formattato la SDCard in FAT32, come indicato in questo articolo, si possono utilizzare solo nomi di lunghezza massima 8+3 e tutti in maiuscolo. Quindi il file temporaneo non è possibile crearlo.

    In attesa di risolvere il BUG su una prossima versione di sistema operativo, ti consiglio di formattare la SDCard con il formato FAT_32_ELS e per trasferire il file ssu PC utilizza una connessione in FTP.

    in risposta a: Overlapping variabili mappate #71028
    Sergio Bertana
    Amministratore del forum

    In effetti nelle vecchie versioni di LogicLab in caso di sovrapposizione di variabili appariva un pop-up di alert, ora non appare più.

    Sinceramente non mi sono posto il problema ma ho girato la domanda al supporto Axel, posterò la risposta appena la ricevo.

    Le opzioni a cui ti riferisci, riguardano il comportamento di LogicLab quando importi un programma o variabili. Trovi le spiegazioni sul manuale al capitolo MERGE FUNCTION.

    in risposta a: Policy servizio Weincloud, piattaforma di monitoraggio su cloud #71023
    Sergio Bertana
    Amministratore del forum

    Qui trova i prezzi per il servizio WeinCloud Dashboard ed attualmente il costo è un canone annuale.

    Se le macchine sono nella stessa sottorete si può convogliare nel possibile le informazioni su un unico HMI quindi ridurre il numero di canoni. Se invece le macchine sono dislocate in luoghi diversi occorre sottoscrivere canoni indipendenti.

    Teoricamente però i canoni sono a carico del cliente finale che li mantiene per essere conforme con le richieste della normativa Industry 4.0. In ogni caso che si utilizzino SCADA o connessioni MQTT a portali IoT ci sarebbero costi sia di sviluppo che canoni per l’utilizzo.

    Se utilizzi il protocollo MQTT sia da pannello Weintek che con i nostri prodotti SlimLine o puoi connetterti a Beebotte, ma anche in questo caso hai un canone da pagare.

    in risposta a: Alimentazione monofase su inverter trifase #71020
    Sergio Bertana
    Amministratore del forum

    La gamma degli inverter GD20 con ingresso monofase raggiunge al massimo la potenza di 2.2Kw.

    Però anche con GD20 è possibile alimentare il modello trifase 230V come monofase, questo comporta un calo della massima corrente in uscita non quantificato da INVT.

    Solitamente si suggerisce almeno una taglia sopra, se il motore viene utilizzato mediamente al 60% la sua potenza, magari può essere sufficiente l’inverter da 7,5kW (sarebbe quasi il doppio del motore), ma personalmente non ho dati alla mano per confermarlo.

    Riguardo al parametro P11.00 si può impostare a 0 per disabilitare tutti i controlli sulla mancanza fase.

    in risposta a: Comunicazione seriale su rete LAN #70983
    Sergio Bertana
    Amministratore del forum

    Tutti i convertitori Ethernet/Seriale hanno la possibilità di realizzare una rete point-to-point, in pratica occorre configurare un convertitore come Server e l’altro come Client.

    Nella configurazione del Client occorre indicare l’indirizzo IP del convertitore Server a cui deve collegarsi. In questo modo i dispositivi seriali connessi ai convertitori potranno comunicare come se fossero connessi via cavo.

    Naturalmente la conversione Seriale/Ethernet introduce ritardi nella comunicazione specie se la rete LAN è molto trafficata. Questi ritardi sono solitamente accettati da tutti i protocolli (Sicuramente lo sono nel protocollo Modbus), ma può essere che alcuni dispositivi come le centrali di allarme verifichino la latenza della comunicazione e vadano in blocco.

    Per limitare i ritardi si può optare per una comunicazione UDP anzichè TCP, il protocolo UDP non prevede acknowledge sulle trasmissioni e quindi riduce il traffico ed i tempi.

     

    in risposta a: Come conoscere il proprio indirizzo IP pubblico #70975
    Sergio Bertana
    Amministratore del forum

    Se hai la necessità di conoscere l’indirizzo IP pubblico con il quale il tuo sistema SlimLine esce su Internet hai due possibilità.

    Tutti i router supportano la registrazione presso servizi di Dynamic DNS, quindi puoi registrarti e poi eseguendo il FB DNSRequest effettuare la richiesta di risoluzione URL.

    Ma se non vuoi appoggiarti a servizi di DNS dinamico puoi connetterti a siti che offrono gratuitamente il servizio di segnalazione indirizzo IP, ad esempio ipify.org. Inviando una richiesta API al sito ti verrà inviato in risposta una stringa con il tuo indirizzo IP pubblico, ecco il listato del programma HTTPIPIfy che esegue la richiesta. Attivando da debug la variabile Request nel buffer Page ti verrà ritornato il tuo indirizzo IP pubblico.

    PROGRAM HTTPIPIfy
    VAR
        i : UDINT; (* Auxiliary variable *)
        Request : BOOL; (* Request command *)
        FlipFlop : BOOL; (* Program Flip/Flop *)
        Errors : UDINT; (* Execution errors *)
        Page : STRING[ 64 ]; (* Page buffer *)
        TCPClient : SysTCPClient; (* TCP client management *)
        HTTPRq : HTTPClient_v4; (* HTTP client *)
    END_VAR
    
    // *****************************************************************************
    // PROGRAM "HTTPIPIfy"
    // *****************************************************************************
    // The program send an API request to "api.ipify.org" and receive back the own
    // public IP address.
    // -----------------------------------------------------------------------------
    
        // -------------------------------------------------------------------------
        // INITIALIZATIONS
        // -------------------------------------------------------------------------
        // Program initializations.
    
        IF (SysFirstLoop) THEN
    
            // Set TCPClient parameters.
    
            TCPClient.PeerAdd:=ADR('api.ipify.org'); //Peer address
            TCPClient.PeerPort:=80; //Peer port
            TCPClient.LocalAdd:=ADR('0.0.0.0'); //Local address
            TCPClient.LocalPort:=0; //Local port
            TCPClient.FlushTm:=50; //Flush time (mS)
            TCPClient.LifeTm:=20; //Life time (S)
            TCPClient.RxSize:=512; //Rx buffer size
            TCPClient.TxSize:=512; //Tx buffer size
    
            // Set HTTPClient parameters.
    
            HTTPRq.RMethod:=0; //Request method, GET
            HTTPRq.SpyOn:=TRUE; //Activate the spy
            HTTPRq.HostName:=TCPClient.PeerAdd; // Hostname
            HTTPRq.Page:=ADR(''); //Web page
            HTTPRq.Request:=eNULL; //Request string
            HTTPRq.Header:=eNULL; //HTTP header
            HTTPRq.DBSize:=512; //Data buffer size
            HTTPRq.Timeout:=10.0; //Execution timeout
        END_IF;
    
        // -------------------------------------------------------------------------
        // MANAGE CONNECTION
        // -------------------------------------------------------------------------
        // Manage the connection.
    
        TCPClient(Connect:=HTTPRq.Connect); //TCPClient management
        HTTPRq(File:=TCPClient.File); //HTTP client
        IF (HTTPRq.Fault) THEN Errors:=Errors+1; FlipFlop:=FALSE; END_IF;
    
        // -------------------------------------------------------------------------
        // PROGRAM SEQUENCIES
        // -------------------------------------------------------------------------
        // Program sequencies.
    
        IF NOT(FlipFlop) THEN
    
            // ---------------------------------------------------------------------
            // Wait for request command.
    
            HTTPRq.Enable:=FALSE; //HTTP enable
            HTTPRq.Send:=FALSE; //Send request
            IF NOT(Request) THEN RETURN; END_IF;
            Request:=FALSE; //Request command
            
            // Initialize buffers and enable client.
    
            i:=Sysmemset(ADR(Page), 0, SIZEOF(Page)); //Empty page buffer
            HTTPRq.Enable:=TRUE; //HTTP enable
            HTTPRq.Send:=TRUE; //Send request
            FlipFlop:=TRUE; //Program Flip/Flop
        ELSE
    
            // ---------------------------------------------------------------------
            // Page data are received from server by chunked. When a chunk has been
            // received DBChars returns its length. The API service sends back your
            // public IP address on a text string like: "xxx.xxx.xxx.xxx".
    
            IF ((HTTPRq.DBChars <> 0) AND (HTTPRq.HPSelector)) THEN
                IF ((Sysstrlen(ADR(Page))+HTTPRq.DBChars) < SIZEOF(Page)) THEN
                    i:=Sysmemmove(ADR(Page)+Sysstrlen(ADR(Page)), HTTPRq.DBAddress, HTTPRq.DBChars);
                END_IF;
            END_IF;
    
            // On Done it's possible to test if page has been loaded.
    
            IF (HTTPRq.Done) THEN
                IF NOT(HTTPRq.PLoad) THEN Errors:=Errors+1; FlipFlop:=FALSE; RETURN; END_IF;
    
                // Here your public IP address is in the page buffer.
    
                FlipFlop:=FALSE; //Program Flip/Flop
            END_IF;
        END_IF;
    
    // [End of file]
    in risposta a: Aggiornamento automatico programma PLC #70898
    Sergio Bertana
    Amministratore del forum

    Grazie alle funzioni avanzate di backup & restore è possibile appogiandosi su di un server FTP eseguire l’aggiornamento automatico dei sistemi.

    A questo scopo puoi fare riferimento a questo articolo in cui illustriamo una tecnica di aggiornamento FOTA, o firmware over-the-air dei sistemi.

    in risposta a: Disponibilità tastiera numerica CEI EN 60948 #70868
    Sergio Bertana
    Amministratore del forum

    Se vuoi il tastierino personalizzato secondo le tue esigenze puoi partire da quello di sistema e modificarlo.

    in risposta a: Disponibilità tastiera numerica CEI EN 60948 #70862
    Sergio Bertana
    Amministratore del forum

    Tutte le tastiere del terminale in realtà sono pagine costruite con gli oggetti a disposizione in EasyBuilder. Se tu guardi nell’elenco pagine troverai le pagine 50-58 con tutte le tastiere numeriche e le pagine 60-65 con tutte le tastiere ASCII.

    Quindi puoi tranquillamente crearti una tua pagina di tastiera modificando una di queste pagine oppure creando ex-nuovo una tua tastiera sia come dimensione che come formato.

    Creata la tua tastiera, per attivarla nella definizione degli oggetti Numeric Object, ASCII object, ecc. nel TAB DataEntry dovrai definire la pagina di tastiera da visualizzare e la posizione in cui il pop-up dovrà apparire.

    in risposta a: Come eseguire backup e restore di variabili ritentive #70849
    Sergio Bertana
    Amministratore del forum

    Ci sono 2 possibilità:

    Accesso telnet al sistema, il comando PLCCommand esegue il backup/restore da file dell’intera area RETAIN della DB.100. Questo comando può solo operare sulla DB100.

    • PLCCommand -pmbku File: Trasferisce nel File indicato tutta l’area ritentiva (DB 100) (Solo se programma PLC in stop)
    • PLCCommand -pmres File: Trasferisce il contenuto del File nell’area ritentiva (DB 100) (Solo se programma PLC in stop)

    Utilizzando il FB FileMemoryDump, in questo caso devi metterne la gestione nel tuo programma, questa soluzione ti permette la libertà di gestione della memoria su cui operare.

    in risposta a: File REST su disco C corrotto #70836
    Sergio Bertana
    Amministratore del forum

    Cominciamo con l’errore, se vai alla pagina Elenco errori ed inserisci il numero di errore troverai questa indicazione:

    10056084 Indici FIFO non sono corretti file viene ricreato FIFOFile

    L’errore stà ad indicare che gli indici del registro FIFO non sono corretti, il fatto che non siano corretti mi fà pensare che in qualche parte del programma vengano sporcati, esempio da puntatori spuntati o da array fuori dimensione. Ora partendo dall’ipotesi degli indici corrotti posso costruire una teoria su cosa succede al file “REST.bin”.

    Come in tutt i file systems i dati sul disco non sono mai cancellati ma si opera a livello di FAT, ora quando un nuovo file viene creato questo và a posizionarsi sul disco in una posizione libera, ma quella posizione poteva prima essere stata occupata da un’altro file (magari txt). Il FB FIFOFile scrive i suoi dati dall’inizio del file consecutivamente (Ma per sua natura alloca comunque lo spazio che gli è stato definito). Quindi se guardi il file con un editor vedrai i dati FIFO all’inizio e poi dopo l’ultimo record salvato vedrai il precedente contenuto del disco in quella posizione (magari parti txt di un vecchio file).

    La scrittura sul file FIFO è consecutiva quindi tra record FIFO corretti non può esserci il precedente contenuto del disco, ma se gli indici FIFO sono sporcati la scrittura sul disco viene frammentata ed allora anche tra i record FIFO potresti trovarti parti del precedente contenuto del disco.

    in risposta a: Realizzare grafici con i files storici generati dal pannello #70831
    Sergio Bertana
    Amministratore del forum

    Non esistono tools per la modifica del file dtl, in alternativa nell’oggetto visualizza dati in formato tabellare è possibile abilitare abilitare l’editazione in modo da modificare i registrati (Screenshot).

    Allego la struttura del file dtl così se vuoi puoi agire direttamente sul file:

    Data log (data sampling) overhead for each record storage. 
    Header=20 byte + data channelx8byte + channel name
    Entry(each) = 5bytes + sizeof(record)
    
    +------------------------------------+--------------+
    | Content                            | Length(Byte) |
    +------------------------------------+--------------+
    | Header                             | 20           |
    +------------------------------------+--------------+
    | Data format of the 1st channel     | 8            |
    +------------------------------------+--------------+
    | Data format of the 2nd channel     | 8            |
    +------------------------------------+--------------+
    | ...                                | ...          |
    +------------------------------------+--------------+
    | Text "name"                        | 4            |
    +------------------------------------+--------------+
    | The name length of the 1st channel | 2            |
    +------------------------------------+--------------+
    | The name of the 1st channel        | n            |
    +------------------------------------+--------------+
    | The name length of the 2nd channel | 2            |
    +------------------------------------+--------------+
    | The name of the 2nd channel        | n            |
    +------------------------------------+--------------+
    | The time of the 1st data           | 4            |
    +------------------------------------+--------------+
    | The time to record the 1st data    | 1            |
    +------------------------------------+--------------+
    | The 1st data of the 1st channel    | n            |
    +------------------------------------+--------------+
    | The 2nd data of the 1st channel    | n            |
    +------------------------------------+--------------+
    PS:
    1. n : depends on the data.
    2. The actual recording time is [the time to save the first record] multiples by 10.
    in risposta a: Etichetta dinamica su pulsante #70826
    Sergio Bertana
    Amministratore del forum

    Credo di avere capito il motivo della nostra incomprensione, io faccio le prove su un pannello serie iE che permette la sovrapposizione degli oggetti “Touch” mentre tu stai probabilmente operando con un pannello serie cMT che non ne permette la sovrapposizione.

    Allora nel tuo caso l’unico modi è di usare l’oggetto Text/Comment con le String Table (Vedi screenshot). In questo modo non potrai definire le stringhe dinamicamente ma dovrai definre nella tabella stringhe le varie stringhe da visualizzare associate al relativo numero di indice dinamico.

Stai visualizzando 15 post - dal 481 a 495 (di 4,264 totali)