Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 3,916 a 3,930 (di 4,318 totali)
  • Autore
    Post
  • in risposta a: Utilizzo orologio su terminali MT6050i/MT8050i #36769
    Sergio Bertana
    Amministratore del forum

    I terminali MT6050i/MT8050i non sono equipaggiati con il real time clock, ma è possibile utilizzare il real time clock del PLC a cui sono connessi. All’interno dei terminali vi sono delle word riservate appositamente alla gestione del tempo (Vedi estratto manuale).

    Occorre nel progetto terminale impostare il Trasferimento dati ciclico, per trasferire variabili di data e ora dalle word del PLC alle relative word del terminale. Tra l’altro questa soluzione garantisce la corrispondenza dell’ora e data tra il PLC ed il terminale e consiglio di utilizzarla anche quando si utilizzano i terminali provvisti di real time clock.

    Se il PLC è un nostro dispositivo SlimLine, occorrerà definire un unico trasferimento contemporaneo di 6 words, per trasferire tutte le variabili data ed ora (Vedi screenshoot). 

    in risposta a: Storicizzazione dati su chiave USB #36770
    Sergio Bertana
    Amministratore del forum

    Per connettersi al terminale in FTP (Estratto manuale) occorre utilizzare un comune client FTP (Esempio FreeFTP, Filezilla, ecc), per autenticarsi occorre definire:
     
    Nome utente uploadhis.
    Password definita nel terminale (Default 111111).

    in risposta a: Come interfacciare SlimLine con programmi in .NET #36768
    Sergio Bertana
    Amministratore del forum

    Sulle CPU SlimLine è implementato il supporto del protocollo Modbus sia Ascii che RTU su porta seriale e over IP da porta ethernet. Tutta la memoria interna della CPU nella DB100 è accessibile da modbus (Estratto manuale), basterà allocare le variabili (I tre contatori) in questa zona di memoria e poi sarà possibile eseguirne lettura e scrittura da modbus. In alternativa al protocollo modbus, da programma utente SlimLine è possibile gestire comunicazioni sia in seriale che ethernet con protocollo UDP, basterà quindi realizzare un programma che invia ciclicamente su porta seriale o su porta UDP il valore dei 3 contatori e da PC tramite .NET acquisirne i valori (Vedi post).

    in risposta a: Sistema di telecontrollo per applicazione in cantiere edile #36767
    Sergio Bertana
    Amministratore del forum

    Soluzioni basate su invio messaggi SMS tramite modem GSM. E’ la soluzione più economica e friendly, le informazioni possono essere ricevute direttamente sul proprio telefono cellulare senza bisogno di realizzare programmi. E’ possibile inviare SMS o chiamate all’impianto per richiedere l’invio di uno stato, è possibile anche inviare un SMS con una “password” per definire il nuovo numero a cui l’impianto deve inviare i reports (Comoda per la gestione dei turni del personale, il personale reperibile informa l’impianto sul proprio numero di telefono).  SlimLineUn nostro prodotto programmabile SlimLine (Il modulo CPU ha 2 ingressi 2 uscite), interfacciato tramite seriale alla centralina del cliente, riceve i dati, li memorizza, e provvede tramite un modem GSM ad inviare un SMS con il report dei dati. La scheda del cliente non viene modificata ed il software è interamente sviluppato sullo SlimLine, esempio invio SMSModem GSM/GPRSSi collega un modem GSM alla porta seriale della scheda del cliente, il software della scheda andrà modificato per gestire i comandi AT del modem (Vedi post) per inviare il messaggio SMS con il report dei dati. Soluzioni basate su connessioni dati con router GPRS/UMTS. Questa soluzione permette di avere una connessione TCP/IP sull’impianto, quindi oltre a veicolare i dati sarà possibile installare telecamere IP. I routers hanno la possibilità di avere una interfaccia seriale visibile come porta TCP/IP (Vedi post) che può essere connessa alla porta seriale della scheda del cliente. I routers possono gestire connessione a DynDNS per rendere statico il proprio indirizzo IP e/o possono gestire VPN. Tutti i prodotti consigliati sono prodotti industruiali con range di alimentazione e di temperatura elevato adatto all’impiego richiesto. Naturalmente sono da installare in un armadietto stagno per avere la protezione IP richiesta.

    in risposta a: Trasmissione stringa su porta seriale con valore di corrente #36766
    Sergio Bertana
    Amministratore del forum

    Per il test su PC, è possibile utilizzare la nostra utility Toolly. E’ possibile utilizzarlo sia come normale emulazione terminale seriale, che come client o server sia TCP/IP che UDP.

    Nello screnshoot è visualizzato nella configurazione UDP server in ascolto sulla porta 120 della stringa in arrivo dallo SlimLine.

    in risposta a: Sistema di videosorverglianza wireless con telecamere IP #36765
    Sergio Bertana
    Amministratore del forum

    Mi sembra di averlo spiegato bene nel post precedente. Devono essere configurate come station, ognuna di esse avrà un indirizzo IP diverso, ed avrà la configurazione wireless (Canale, SSID e password), configurate per accedere alla postazione base (Configurata come access point).

    in risposta a: Trasmissione stringa su porta seriale con valore di corrente #36762
    Sergio Bertana
    Amministratore del forum

    Ricordo che SlimLine gestisce il protocollo Modbus Over-IP, quindi è sempre possibile con un client modbus effettuare la lettura dei registri via TCP/IP. Ma se tu vuoi una soluzione tipo seriale dove lo SlimLine invia i dati su rete ethernet, puoi utilizzare una connessione UDP.

    In pratica utilizzando il blocco funzione SysUDPSktSend, UDP socket send è possibile inviare con protocollo UDP dei dati verso un indirizzo IP ed una porta definiti. Sul PC basta avere la porta aperta in attesa di dati da socket UDP. Il blocco funzione che eseguiva l’uscita dei dati su porta seriale è stato modificato nella parte di uscita verso seriale.

        NrOfCh:=SysVarsnprintf(ADR(SOut), 32, ‘%04.1f mA$r$n’, REAL_TYPE, ADR(Current));
        NrOfCh:=SysUDPSktSend(File, ADR(SOut), TO_UINT(NrOfCh),’192.168.0.31′, 120);

    Come si vede la funzione SysVarfprintf è stata sostituita dalla SysVarsnprintf che stampa i dati in una stringa e di seguito la funzione SysUDPSktSend invia la stringa verso la porta UDP 120 del dispositivo con indirizzo 192.168.0.31.

    Allego il progetto precedente modificato per inviare i dati sia su porta seriale che su porta UDP, download.

    in risposta a: Collegamento inverter PowerOne convertitore Ethernet/Seriale #36760
    Sergio Bertana
    Amministratore del forum

    Devi impostare l’indirizzo IP del convertitore all’interno del range di indirizzi della tua rete, l’ATC2000 di default ha indirizzo IP 192.168.168.125, username admin e password admin. Per impostare l’indirizzo nel convertitore ti conviene connetterlo direttamente al to PC, impostare l’indirizzo IP del PC ad esempio a 192.168.168.10, e poi dal browser digitando l’indirizzo IP del convertitore accedere alla pagina web del prodotto e modificarne l’IP, dai una occhiata a questa FAQ.

    Se installi il software virtual COM è anche possibile cambiare l’IP del convertitore direttamente dall’utility del programma virtual COM come indicato nel post.

    in risposta a: Trasmissione stringa su porta seriale con valore di corrente #36758
    Sergio Bertana
    Amministratore del forum

    Ricordo che SlimLine gestisce il protocollo Modbus sia Rtu che Ascii, pertanto è possibile da PC inviare comando modbus lettura registri codice 03, Read holding registers, ed acquisire valori da variabili allocate nella DB 100 dello SlimLine dove si può appoggiare il valore di corrente acquisito dal blocco funzione SysGetAnInp, get analog input.

    Ma se per semplicità preferisci che sia SlimLine ad inviare una stringa ascii con il valore di corrente acquisito, ecco una semplice FB che invia su seriale una stringa del tipo xx.x mA<CR><LF>, allego programma per download.

        VAR_INPUT
        Send : BOOL; { DE:”Comando di invio stringa” }
        File : FILEP; { DE:”File pointer” }
        Current : REAL; { DE:”Current value” }
        END_VAR

        VAR
        SPulse : BOOL; { DE:”Send pulse” }
        i : INT; { DE:”Auxiliary variable” }
        END_VAR

        { CODE:ST } (* Gestione impulso di “Send” ed uscita stringa. *)

        IF NOT(Send) THEN SPulse:=FALSE; RETURN; END_IF;
        IF SPulse THEN RETURN; END_IF;
        SPulse:=TRUE; (* Send pulse *)
        i:=SysVarfprintf(File, ‘%4.1f mA$r$n’, REAL_TYPE, ADR(Current));

    in risposta a: Computo e visualizzazione potenza istantanea da contatore #36757
    Sergio Bertana
    Amministratore del forum

    Ho realizzato un blocco funzione che effettua il calcolo della potenza istantanea in base alla frequenza di ingresso del contatto. Viene eseguita anche una media sugli ultimi 10 valori acquisiti, allego il progetto per il download.

        VAR_INPUT
        PTick : BOOL; { DE:”Power tick” }
        TPower : REAL; { DE:”Tick power (Kw)” }
        END_VAR

        VAR_OUTPUT
        IPower : REAL; { DE:”Instant power (Kw)” }
        END_VAR

        VAR
        Delay : UDINT; { DE:”Delay time (uS)” }
        TPulse : BOOL; { DE:”Tick pulse” }
        TimeBf : UDINT; { DE:”Time buffer” }
        PValues : ARRAY[ 0..9 ] OF REAL; { DE:”Power values (Kw)” }
        RSeq : USINT; { DE:”Read sequencer” }
        i : USINT; { DE:”Auxiliary counter” }
        END_VAR

        { CODE:ST }
        (* Eseguo controllo fronte salita ingresso conteggio. *)

        IF (PTick = TPulse) THEN RETURN; END_IF;
        TPulse:=PTick; (* Tick pulse *)
        IF NOT(PTick) THEN RETURN; END_IF;

        (* Fronte attivazione impulso, calcolo ritardo impulsi. *)

        Delay:=SysGetSysTime(TRUE)-TimeBf; (* Delay time (uS) *)
        TimeBf:=SysGetSysTime(FALSE); (* Time buffer *)

        (* Incremento sequenziatore letture e calcolo potenza istantanea. *)

        RSeq:=RSeq+1; (* Read sequencer *)
        IF (RSeq >= 10) THEN RSeq:=0; END_IF;
        PValues[RSeq]:=(3600000000.0/TO_REAL(Delay))*TPower; (* Power values (Kw) *)

        (* Calcolo valore medio di potenza istantanea su 10 letture. *)

        IPower:=0.0; (* Instant power (Kw) *)
        FOR i:=0 TO 9 DO IPower:=IPower+PValues[i]; END_FOR;
        IPower:=IPower/10.0; (* Instant power (Kw) *)

    in risposta a: Visualizzazione in verticale su terminali serie MT6000/8000 #36756
    Sergio Bertana
    Amministratore del forum

    Il tool di sviluppo EasyBuilder permette l’impostazione del modo di visualizzazione con possibilità di scelta tra la modalità orizzontale (Landscape) o verticale (Portrait).

    Da menù Edit -> Parametri di sistema, nel tab Modello definire modo verticale.

    Dal menù settaggi del terminale, accessibile agendo sulla freccia posta a destra in basso sullo schermo (Icona con l’ingranaggio), impostando la password (Default 111111) si può accedere alle impostazioni del terminale.

    Dal menù System settings, attivando il tab Firmware settings, è possibile impostare l’orientamento del display, vedi note.

    in risposta a: Semplice echo caratteri da porta seriale #36755
    Sergio Bertana
    Amministratore del forum

    Probabilmente usi due variabili Fp locali definite nei due programmi, quindi nella task di Boot esegui correttamente il set della porta seriale, ma poi nella task in Slow essa viene riaperta con il baud rate di default 115200, e, 8, 1.

    Ti consiglio di usare la variabile Fp definita come globale e non eseguire più la open della porta nel file eseguito in Slow.

    Altro consiglio è di gestire le porte seriali nella task di Back, è inutile caricare di lavoro le task Fast e Slow per gestire la comunicazione.

    Allego un programma di esempio per il download.

    in risposta a: Come gestire gli I/O del modulo CPU SlimLine #36754
    Sergio Bertana
    Amministratore del forum

    Gli I/O presenti sul modulo CPU dello SlimLine non sono mappati in memoria in immagine di processo come tutti gli altri I/O dei moduli di estensione.

    Per acquisire gli ingressi occorre utilizzare la funzione embedded SysGetPhrDI, get peripheral digital input definendo Address 255 e Mode DI_8_LL.

    Per gestire le uscite occorre utilizzare la funzione embedded SysSetPhrDO, set peripheral digital output definendo Address 255 e Mode DO_8_LL.

    Nella libreria PLCUtyLib, si trova il blocco funzione CPUModuleIO, CPU module I/O management che gestisce sia la acquisizione degli ingressi che la gestione delle uscite.

    Nel guida Sline programming help che si attiva da LogicLab evidenziando la funzione ed agendo con il tasto F1, è possibile trovare esempi di utilizzo sia delle funzioni embedded che del blocco funzione.

    in risposta a: Conversione da formato esadecimale a decimale (Hex to Dec) #36753
    Sergio Bertana
    Amministratore del forum

    Non capisco bene la domanda, cerco di interpretarla. Immagino che tu debba con un comando di read da protocollo Hostlink, restituire il valore di variabili in memoria PLC.

    A questo scopo dovrai allocare le variabili nella memoria del PLC ad indirizzi noti, per uniformarsi al protocollo Modbus nativo di SlimLine, potremo dire che da protocollo HostLink andiamo a leggere variabili allocate in DB 100, magari interponendo un offset sull’indirizzamento. Per quanto riguarda la conversione del valore indirizzo e numero di variabili dalla stringa ricevuta in variabili nel formato esadecimale, consiglio questi semplici statements.

        Address:=TO_UINT(RxString[5]-16#30)*4096; (* Variable address *)
        Address:=Address+TO_UINT(RxString[6]-16#30)*256; (* Variable address *)
        Address:=Address+TO_UINT(RxString[7]-16#30)*16; (* Variable address *)
        Address:=Address+TO_UINT(RxString[8]-16#30); (* Variable address *)

        NrOfVars:=TO_UINT(RxString[9]-16#30)*4096; (* Numero variabili da leggere *)
        NrOfVars:=NrOfVars+TO_UINT(RxString[10]-16#30)*256; (* Numero variabili da leggere *)
        NrOfVars:=NrOfVars+TO_UINT(RxString[11]-16#30)*16; (* Numero variabili da leggere *)
        NrOfVars:=NrOfVars+TO_UINT(RxString[12]-16#30); (* Numero variabili da leggere *)

    Per ottenere il valore in decimale, dovrai moltiplicare per 1000, 100, 10 al posto di 4096, 256, 16.
    Per inviare su seriale i dati letti dalla memoria consiglio questi statements:

        Ptr:=ADR(%MX100.0)+Address; (* Pointer *)
        FOR i:=0 TO TO_INT(NrOfVars) DO
            Ch:=Sysfputc(TO_INT(@Ptr), Fp); (* Character *)
            Ptr:=Ptr+1; (* Pointer *)
        END_FOR;

    Allego un programma di esempio per il download.

    in risposta a: Connessione pannello operatore con PLC diversi #36752
    Sergio Bertana
    Amministratore del forum

    Ulteriori informazioni in questo post.

Stai visualizzando 15 post - dal 3,916 a 3,930 (di 4,318 totali)