Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 3,721 a 3,735 (di 4,357 totali)
  • Autore
    Post
  • in risposta a: Porte TCP/IP utilizzate sui terminali Weintek #37108
    Sergio Bertana
    Amministratore del forum

    Nel post precedente mancano alcune indicazioni, inoltre la porta 8000 non è la porta utilizzata per il Pass-Thru ma è la porta utilizzata per la connessione con altri terminali in modo remoto.

    Allego elenco delle porte utilizzate dai terminali (Download).

    in risposta a: Programma marcia/arresto filmato dimostrativo #37107
    Sergio Bertana
    Amministratore del forum

    L’esempio pur essendo un dimostrativo riporta esattamente un reale programma PLC.

    Nelle logiche di marcia arresto è condizione indispensabile utilizzare come pulsante di marcia un pulsante normalmente aperto (no), e come pulsante di arresto un pulsante normalmente chiuso (nc).

    Questo garantisce di poter sempre arrestare il motore anche in caso di rottura del filo di collegamento del pulsante di arresto. L’eventuale rottura del filo spegne l’ingresso pulsante di stop del PLC (PbStop) forzando lo spegnimento dell’uscita comando motore (Motor).

    E’ per questo motivo che nella realizzazione del programma ladder di una sequenza di marcia/arrresto per il pulsante di stop è utilizzato un contatto normalmente aperto. Il pulsante di stop di tipo (nc) attiverà sempre l’ingresso del PLC, ed il relativo contatto nella sequenza logica ladder sarà sempre attivo (chiuso).

    Concordo con te che nell’esempio per il simulatore poteva essere utilizzato un contatto normale chiuso, era più intuitivo l’utilizzo, ma abbiamo preferito seguire le indicazioni applicative reali.

    in risposta a: Funzionamento convertitore seriale da RS232 a RS422/485 #37106
    Sergio Bertana
    Amministratore del forum

    L’ATC-108 utilizza al suo interno un convertitore DC/DC per l’alimentazione della parte seriale RS232, questo oltre a garantire l’isolamento galvanico garantisce anche la compatibilità con i livelli di tensione in uscita sui segnali RS232 (Vedi post).La porta RS232 dell’ATC108 è del tutto simile a livello elettrico alla porta RS232 di un PC. Quindi anche se i dispositivi che prelevano la loro alimentazione dai segnali della RS232 (RTS, DTR, a volte anche dallo stesso Tx) nascondono sempre qualche insidia, credo non vi siano problemi di funzionamento.

    in risposta a: Copia dati tra diverse aree di memoria #37104
    Sergio Bertana
    Amministratore del forum

    Tu mi chiedevi di poter variare l’indirizzo di memoria MX100 utilizzando una variabile ecco come puoi scriverlo semplicemente in linguaggio ST.

    VAR
      Pointer : @USINT; { DE:”Variable pointer” }
      Offset : UINT; { DE:”MX100 address offset” }
    END_VAR

    Pointer:=ADR(%MX100.0)+Offset;

    Scrivendo nella variabile Offset il valore desiderato, in Pointer verrà ritornato il suo indirizzo che potrai passarlo alla funzione eMemCpy. Volendo copiare 16 bytes da MX100.200 in MX100.100 dovrai scrivere.

    Offset:=200;
    Dummy:=eMemCpy(ADR(%MX100.100), ADR(%MX100.0)+Offset, 16);

    in risposta a: Copia dati tra diverse aree di memoria #37103
    Sergio Bertana
    Amministratore del forum

    Con i puntatori si può accedere a qualsiasi parte della memoria del sistema, ma in caso di errore si può accedere a qualsiasi variabile senza alcun controllo creando anche problemi gravi di funzionalità del programma. E proprio per questa loro pericolosità che l’uso dei puntatori è deprecato nella programmazione IEC61131.

    In LogicLab esiste la possibilità di utilizzare i puntatori, in linguaggio ST, un puntatore si identifica con il simbolo @ posto davanti al tipo di variabile a cui il puntatore si riferisce. Quindi avremo dei puntatori di tipo @USINT, @INT, @REAL ecc. uno per ogni tipo di variabile gestita.

    L’operando ADR (Utilizzabile in tutti i linguaggi) ritorna l’indirizzo di una variabile, in linguaggio ST si può anche utilizzare il simbolo ? davanti al nome della variabile. Quindi la definizione ADR(%MX100.10) ritornerà l’indirizzo della variabile MX100.10. La definizione ADR(MiaVar) o ?MiaVar ritornerà l’indirizzo della variabile MiaVar.

    Ho realizzato un semplice programma con implementata la funzione eMemCpy che esegue copia tra due aree di memoria. Ecco la stampa del programma ed il programma sorgente, di seguito il codice della funzione eMemCpy.

    WHILE (Size > 0) DO
      @DestBf:=@SrcBf; (* Trasferisco dato in memoria *)
      Size:=Size-1; (* Buffer size *)
      SrcBf:=SrcBf+1; (* Source buffer address *)
      DestBf:=DestBf+1; (* Destination buffer address *)
    END_WHILE;

    in risposta a: Errore su stringa passata come variabile a funzione #37102
    Sergio Bertana
    Amministratore del forum

    Aggiungo note sul modo in cui è gestita la trasmissione seriale sullo SlimLine. Esiste un buffer di spooling in cui le funzioni che inviano dati sulla seriale trasferiscono i dati da trasmetere. Il sistema operativo poi provvede ad inviare i dati caricati nel buffer sulla porta seriale.

    Se sono caricati più dati nel buffer di quelli che la porta seriale riesce a trasmettere si genera un overflow, ed i precedenti dati seriali in uscita, presenti nel bufer vengono sovrascritti. Per evitare questo o si è certi che il tempo di caricamento dei dati nel buffer, è sufficentemente lento da permettere alla porta seriale di inviarli in uscita. Oppure si controlla lo spazio disponibile nel buffer prima di caricare i dati con la funzione SysGetOSpace.

    Ho modificato l’esempio precedente aggiungendo nella funzione FTest il controllo sullo spazio nel buffer di trasmissione prima di caricare i dati da trasmettere.

    IF (SysGetOSpace(FpCom) < (Lenght+4)) THEN RETURN; END_IF;

    Allego progetto modificato con il controllo dello spazio nel buffer di trasmissione per il download allego anche stampa progetto.

    in risposta a: Errore su stringa passata come variabile a funzione #37101
    Sergio Bertana
    Amministratore del forum

    Ho dato una occhiata al tuo programma ed in effetti ho visto l’errore che tu riporti, sinceramente non capisco la reale fonte del problema, e purtroppo in questi giorni di festività non posso contattare l’esperto.

    Però ho provveduto a correggere una serie di imprecisioni che il tuo programma aveva, e con un semplice workaround ho sistemato anche la funzione FTest per farla funzionare secondo le tue aspettative. Ti riporto le correzioni fatte.

    Nel progetto conviene sempre attivare il tick Case sensivity, nel menù Project-> Options (Screenshot). In questo modo si controlla il case delle lettere nei nomi di variabili e funzioni evitando di dare nomi a variabili che possono essere in contrasto con nomi già predefiniti.

    Il tuo programma Main tramite la chiamata alla funzione FTest esegue l’invio di dati sulla seriale, è conveniente eseguire i programmi che gestiscono le seriali, i sockets, i files, sempre nella task di Back. E’ inutile sovraccaricare di lavoro le tasks Fast e Slow, rallentando l’esecuzione della logica, con operazioni che potrebbero essere lente.

    Il workaround per risolvere l’errore è stato di modificare il tipo del parametro StrCmd, anzichè definirlo STRING l’ho definito di tipo @USINT (Puntatore a USINT). In questo modo nella chiamata alla funzione occorre passare l’indirizzo della stringa da inviare sulla seriale Result[0]:=FTest(FpCom0, ADR(StrCmd1));. La chiamata funziona anche definendo direttamente la stringa in linea Result[1]:=FTest(FpCom0, ADR(‘Hello!’));.

    Nel programma Main, ho condizionato la chiamata alla funzione FTest per eseguirla una sola volta ad ogni cambiamento di stato della variabile SysClock1000. Chiamandola sempre come nel tuo programma, siccome il programma è eseguito ciclicamente avresti creato overflow nel buffer di trasmissione. Il programma eseguito ogni loop time di qualche mS (Magari anche meno di 1 mS) avrebbe caricato la stringa nel buffer di trasmissione seriale, la trasmissione su seriale anche a 115200 baud richiede almeno 90 uS per ogni carattere.

    Allego il progetto modificato e funzionante per il download.

    in risposta a: Gestione controlli di stringa su impianto fotovoltaico #37100
    Sergio Bertana
    Amministratore del forum

    In alternativa od in aggiunta al pannello operatore Weintek, puoi utilizzare un nostro sistema SlimLine, programmabile in IEC 61131 con il software garatuito LogicLab.

    Con solo il modulo CPU, puoi, semplicemente utilizzando il blocco funzione sModbusRTUMaster (Estratto manuale), dialogare in modbus RTU con i controlli di stringa. Tramite gli I/O logici (2 sono presenti sul modulo CPU) puoi gestire segnalazioni di allarme. Utilizzando i blocchi funzione di invio e ricezione SMS puoi gestire l’invio di allarmi e/o report di stato tramite messaggi SMS (Vedi post).

    Al modulo CPU puoi collegare un pannello operatore Weintek per la visualizzazione dei dati.

    in risposta a: Gestione controlli di stringa su impianto fotovoltaico #37099
    Sergio Bertana
    Amministratore del forum

    Cerco di dare il mio punto di vista sulla domanda postata. Alcuni nostri clienti hanno utilizzato i pannelli operatore Weintek per la gestione dei controlli di stringa nel campo fotovoltaico, ed in modo particolare la ditta IOR3 ha realizzato un sistema davvero completo denominato Galileo. Il sistema sfrutta appunto un terminale Weintek connesso in rete RS485 con schede di controllo di stringa. Come si evince dal datasheet del prodotto, il sistema non solo visualizza sul pannello i dati di produzione, ma gestisce tutti gli allarmi di stringa e crea report sulla produzione. Inoltre grazie ad una serie di macro realizzate ad hoc può inviare SMS ed Email. In merito alla tua domanda sulla possibilità di connettere i controlli Seneca al terminale, non ci sono assolutamente problemi, i terminali supportano in modo nativo tutti i protocolli comunemente usati nei PLC ed anche il Modbus RTU.
    Il software di programmazione EasyBuilder è gratuito, scaricabile dal nostro sito, e permette anche il completo debug live della applicazione. Questo vuol dire che puoi sviluppare il programma sul PC connettere il PC in seriale con i controlli di stringa ed eseguire una emulazione del terminale che funziona esattamente come il terminale reale. Previo contatto con il nostro ufficio commerciale è anche possibile avere un supporto tecnico che può essere presso la nostra sede oppure in teleassistenza.

    in risposta a: Interfacciamento tra CPU SlimLine e PC Linux #37098
    Sergio Bertana
    Amministratore del forum

    Il vantaggio di essere un sistema programmabile real time, permette di delegare al programma sul modulo CPU la gestione delle logiche locali sgravando il PC da questo compito.

    Il programma sul modulo CPU ad esempio, può realizzare l’automazione di un cancello automatico gestendo il motore ed i relativi finecorsa, ricevendo dal PC solo il comando di apertura e chiusura. Chi conosce la programmazione IEC61131 naturalmente può utilizzare qualsiasi dei 5 linguaggi disponibili per realizzare il programma di automazione cancello (Probabilmente il più indicato è LD, Ladder Diagram).

    Ma per chì è avvezzo alla programmazione in linguaggio “C” forse trova piu friendly utilizzare il linguaggio ST Structured Text. Ecco un esempio di semplice automazione in linguaggio ST.

    MotoreApri:=FALSE;
    IF (ApriDaPC) THEN
        IF NOT(FcAperto) THEN MotoreApri:=TRUE; END_IF;
    END_IF;

    MotoreChiudi:=FALSE;
    IF (ChiudiDaPC) THEN
        IF NOT(FcChiuso) THEN MotoreChiudi:=TRUE; END_IF;
    END_IF;

    in risposta a: Interfacciamento tra CPU SlimLine e PC Linux #37097
    Sergio Bertana
    Amministratore del forum

    In merito alle informazioni tecniche e commerciali, ricordo che registrandosi al sito si può effettuare il download di tutte le informazioni disponibili e del software di programmazione LogicLab e del relativo simulatore su PC. Inoltre sarà consultabile anche il listino prezzi.

    In merito alla connettività, il modulo gestisce in modo nativo il protocollo Modbus sia Ascii che RTU su porta seriale RS232/RS485, ed il protocollo Modbus over IP su porta Ethernet.

    Quindi è sicuramente possibile da PC Linux e/o con altro sistema operativo, realizzare la connessione con la CPU tramite il protocollo modbus, leggere e/o scrivere memoria all’interno dell’area indirizzabile della CPU. Su questa memoria è possibile da programma LogicLab appoggiare gli I/O logici.

    Un’altra possibilità di comunicazione è utilizzare i blocchi funzione presenti nella libreria di sistema, per gestire la comunicazione via UDP. I blocchi funzione SysUDPSktRcv e SysUDPSktSend (Estratto manuale), permettono di ricevere ed inviare pacchetti UDP verso determinate coppie di IP/Porta. I pacchetti sono completamente liberi quindi è possibile realizzare un “proprio” protocollo di comunicazione per scambiarsi dati tra il PC ed il modulo CPU.

    in risposta a: Disponibilità protocollo SNP-X per PLC GE Fanuc #37096
    Sergio Bertana
    Amministratore del forum

    Tutti i protocolli supportati dai terminali Weintek sono visibili sulla Guida connessioni PLC, che è scaricabile dal nostro sito nella sezione Downloads della pagina web dei pannelli operatore.
     
    In merito alla disponibilità del protocollo SNP-X per i PLC della GE Fanuc, ti riporto estratto della guida, come vedi sono indicate tutti i tipi di variabili PLC che il terminale gestisce tra cui:
     
    Bit M: Auxiliary relay, range da 1 a 10000
    Word R: Data register, range da 1 a 32640
     
    Nell’estratto trovi anche lo schema elettrico delle connessioni seriali tra il terminale ed il connettore seriale del PLC.

    in risposta a: Problemi programmazione CPU SlimLine da LogicLab #37095
    Sergio Bertana
    Amministratore del forum

    Non mi dici se la connessione tra il PC e lo SlimLine è di tipo seriale RS232 oppure TCP/IP su Ethernet, vediamo entrambi i tipi.

    Connessione seriale RS232
    Occorre connettere la porta COM del PC ad una delle porte seriali della CPU SlimLine, COM0 oppure COM1, utilizzando l’apposito adattatore CBL054*000 ed il cavo CBL057**00. Nelle pagine dei prodotti alla sezione download trovi gli schemi elettrici. Nel caso volessi autocostruirtelo. In LogicLab devi dal menù Communication -> Settings, selezionare Modbus ed impostare la porta COM del PC a cui è connesso lo SlimLine. I parametri di comunicazione sono 155200, e, 8, 1 ed il nodo Modbus è 1 oppure quello di broadcast 255 (Screenshot).

    Connessione TCP/IP
    Occorre connettere lo SlimLine in rete ethernet con il PC, è possibile fare una connessione peer to peer con un cavo diretto, la porta ethernet dello SlimLine è autosensing sia 10 che 100 Mb ed accetta cavi sia patch che crossed. E’ importante che gli indirizzi IP del PC e dello SlimLine appartengano alla stessa classe. In LogicLab devi dal menù Communication -> Settings, selezionare ModbusTCP ed impostare l’indirizzo IP dello SlimLine. Ll porta di comunicazione è quella standard del Modbus over IP la 502 e come indirizzo di nodo puoi definire 1 oppure quello di broadcast 255 (Screenshot).

    in risposta a: Link wireless ad alta affidabilità #37092
    Sergio Bertana
    Amministratore del forum

    La distanza da coprire è ridotta, se dalle postazioni delle 4 telecamere vi è un LOS buono (Non vi sono ostacoli tra i punti) con la postazione centrale puoi utilizzare un Rocket M con antenna Omnidirezionale sulla postazione centrale e 4 Nanostation M nelle postazioni delle telecamere. Tutti gli oggetti operano in 802.11n ed hanno velocità di trasmissione fino a +150Mbps.

    Per la configurazione tutte le stazioni saranno in configurazione Bridged, il Rocket andrà configurato come Access point e le Nanostation come Station.

    in risposta a: Utilizzo orologio su terminali MT6050i/MT8050i #37090
    Sergio Bertana
    Amministratore del forum

    Il trasferimento ciclico con base tempi di 2 Secondi (E’ il real time clock interno al terminale a fare avanzare autonomamente i secondi), permette di eseguire la lettura della data e ora dal PLC e di aggiornare i registri di data/ora interni al terminale. In questo modo tutti i riferimenti che il terminale abbina alla data/ora (Esempio log allarmi, eventi, ecc.) riporteranno lo stesso valore del PLC.

    Se come PLC viene utilizzato uno SlimLine, il trasferimento ciclico deve essere di 6 word dall’indirizzo 100 dello SlimLine verso l’indirizzo LW 9017 del terminale. Per visualizzare data ed ora dovrai inserire 6 oggetti introduzione numerica definendo gli indirizzi di lettura e scrittura diversi (Vedi screenshot), di seguito elenco indirizzi.

    Giorno: Lettura LW 9020, Scrittura 3x 103
    Mese: Lettura LW 9021, Scrittura 3x 104
    Anno: Lettura LW 9022, Scrittura 3x 105
    Ore: Lettura LW 9019, Scrittura 3x 102
    Minuti: Lettura LW 9018, Scrittura 3x 101
    Secondi: Lettura LW 9017, Scrittura 3x 100

    Nota: Per fare in modo che sia visualizzato lo zero davanti al numero quando il valore da visualizzare è di una sola cifra, nell’oggetto Numeric Input nel TAB Font, occorre scegliere come Align il valore Leading Zero.

    Allego un semplice programma di esempio che funzione collegato con uno SlimLine tramite rete ethernet, ma il progetto può essere facilmente modificato per adattarlo alle proprie esigenze (Download esempio).

    Attenzione! A causa della diversa gestione del real time clock, in fase di simulazione sul PC il programma di esempio funziona solo sul terminale reale.

Stai visualizzando 15 post - dal 3,721 a 3,735 (di 4,357 totali)