Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 3,856 a 3,870 (di 4,232 totali)
  • Autore
    Post
  • in risposta a: Software virtual COM per convertitore ATC-1000 #36734
    Sergio Bertana
    Amministratore del forum

    Non mi dici su che sistema operativo la usi, su Windows Xp io utilizzo normalmente la versione VCOM 3.31 senza problemi. La versione 3.6 scaricabile dal nostro sito non mi ha dato alcun problema di installazione, ma il fatto che manchi PACKET.DLL sembra indicare un problema sul tuo PC.

    Se fai una ricerca in Internet puoi trovare indicazioni su come superare il problema della DLL mancante.

    in risposta a: Caratteristiche circuito di uscita moduli statici SlimLine #36732
    Sergio Bertana
    Amministratore del forum

    Il circuito di uscita del VN808-E presenta di serie una protezioni compreso il clamp sulla tensione negativa in apertura. Ed in riferimento al dubbio sulla necesità di proteggersi per evitare rotture del circuito di uscita della scheda statica posso rispondere che essendo il circuito di uscita protetto non serve inserire varistore e/o diodo in antiparallelo ai carichi induttivi (Bobine di relè, eletrovalvole, ecc.).

    Le normative prevedono di evitare il più possibile la generazione di disturbi elettromagnetici, e l’unico modo per ridurre al minimo i disturbi elettromagnetici dati dalle extratensioni in apertura del circuito sui carichi induttivi, è quello di limitare la tensione nel punto più vicino a dove si genera. Quindi ecco la necessità di porre il varistore o il diodo direttamente sulla bobina.

    Nel caso di relè connessi direttamente al modulo di uscita, se la distanza di connessione è pochi centimetri, si può evitare il varistore o il diodo di protezione basandosi unicamente sulla protezione del driver.

    in risposta a: Caratteristiche circuito di uscita moduli statici SlimLine #36730
    Sergio Bertana
    Amministratore del forum

    Solitamente si pone il diodo in antiparallelo al relè per evitare le extratensioni alla diseccitazione della bobina. Questo serve oltre che a protezione del circuito driver anche per evitare disturbi elettromagnetici, in quanto la tensione ai capi della bobina (Che tu misuri a -28 V) in realtà potrebbe salire anche a svariate centinaia di volt per un tempo molto limitato disturbando eventuali apparecchiature elettroniche poste nelle vicinanze.L’inserimento del diodo porta come effetto negativo un ritardo nella apertura del relè, per questo motivo in casi molto specifici si preferisce utilizzare un varistore. In merito alla configurazione del circuito di uscita dei moduli statici SlimLine, abbiamo due tipi di circuito. Le due uscite sul Modulo CPU PLC SlimLine LogicLab Cortex M7 sono realizzate con optomosfet in grado di pilotare una corrente massima di 0.25A ad una tensione di 40V, è impiegato un doppio mosfet quindi in grado di comportarsi come un relè e di pilotare tensioni sia DC che AC. Attenzione! il circuito di uscita non è protetto, quindi in caso di cortocircuito si può danneggiare il driver. Le uscite del Modulo di uscite statiche sono realizzate con un driver mosfet protetto contro i cortocircuiti “compliance to 61000-4-4 IEC test up to 4 kV” di cui allego il datasheet.

    in risposta a: Concatenamento di due variabili #36729
    Sergio Bertana
    Amministratore del forum

    Intanto non è chiaro quello che chiedi in merito al concatenamento, se ho capito bene tu hai due variabili USINT (Esempio 12 e 30) e vuoi unirle in una variabile UINT che abbia valore 1230. Per fare questo basta usare la matematica (12*100)+30.

    Esempio ST:
    Concatenato:=(Ora*100)+Minuti;

    Stesso discorso per il contrario una variabile UINT di valore 1230 da dividere in due variabili USINT.

    Esempio ST:
    Ora:=TO_USINT(Concatenato/100);
    Minuti:=TO_USINT(Concatenato-(Ora*100));

    Il controllo sulle fasce orarie è un problema abbastanza complesso che può essere facilmente risolto operando con valori di data e ora espressi in Epoch Time (Vedi blocchi funzione SysETimeToDate, SysDateToETime per le conversioni).

    in risposta a: Come collegare 3 sedi/punti in rete WiFi #36728
    Sergio Bertana
    Amministratore del forum

    La soluzione mi sembra corretta, l’importante è che i punti 1-2 e 2-3 siano a vista ottica, cioè sgombri da ogni ostacolo, i 3 Km non sono molti e le Nanostation M5 possono sicuramente coprirli.

    Certo trattandosi di connessioni punto-punto il prodotto consigliato sarebbe il NanoBridge M5, ma vista la distanza ridotta e considerato che hai già due Nanostation credo convenga integrare con altre due Nanostation.

    Altra considerazione gli indirizzi IP da assegnare alle unità, io sceglierei indirizzi al limite del campo di indirizzamento, esempio 192.168.1.250, 251, 252, 253, e poi limiterei il range di assegnazione del server DHCP.

    in risposta a: Convertitore protocollo da IEC62056-21 a modbus #36727
    Sergio Bertana
    Amministratore del forum

    Nella libreria di funzioni SlimLine esiste il blocco funzione IEC62056_21Rd che gestisce il protocollo IEC62056-21 (Vedi post).

    Ho realizzato un esempio di programma che acquisisce 16 registri dal contatore (Identificati con i relativi codici OBIS) e valorizza 16 variabili di tipo REAL nella memoria del sistema. Tramite il protocollo modbus (RTU o OverIP) nativo in SlimLine sarà possibile accedere a questi valori dal sistema SCADA.

    Il cuore del programma è il blocco funzione IEC62056_21Rd, attorno al quale ho realizzato due blocchi funzioni di supporto (Di cui è disponibile il sorgente).

    MRegisters: Provvede a valorizzare la stringa di identificazione registro da leggere con il relativo codice OBIS.
    MValues: Provvede a covertire il dato di lettura del registro dal contatore nella variabile REAL per il supervisore.

    Un sequenziatore di letture gestisce la scansione dei vari registri, semplicemente duplicando il file di gestione contatore ed aumentando il valore massimo del sequenziatore è possibile aggiungere altri contatori in lettura. Allego un programma che esegue la lettura da due contatori (Download programma).

    in risposta a: Software virtual COM per convertitore ATC-1000 #36726
    Sergio Bertana
    Amministratore del forum

    E’ disponibile per il download dal nostro sito la nuova versione del software VCOM 3.6. Questa versione come confermatomi dal fornitore è compatibile con Windows 7.

    Per velocizzare la comunicazione si può anche modificare il tipo di connessione utilizzando il protocollo UDP al posto del protocollo TCP. L’utilizzo del protocollo UDP prevede di definire su ATC-1000 l’indirizzo IP e la porta del sistema remoto (PC) a cui inviare i dati. Con il protocollo TCP questo non è necessario perchè gestito dalla connessione a socket.

    Per modificare le impostazione dell’ATC-1000 occorre accedere da pagina web oppure dal software VCOM acedendo dalla pagina Device Info (Vedi printscreen), ricordo che di default lo username di accesso e admin e la password è system.

    in risposta a: Indirizzi registri modbus non accessibili da sistema master #36724
    Sergio Bertana
    Amministratore del forum

    L’indirizzamento modbus previsto sullo SlimLine è il seguente:

    0x01, 0x02 Read coil status, Read input status. Address: 40000-44095
    0x03, 0x04 Read holding registers, Read input registers. Address: 40000-42047
    0x05 Force single coil. Address: 40000-44095
    0x06, 0x10 Preset single register, Preset multiple registers. Address: 40000-42047

    Nel tuo caso per poter accedere ai registri modbus con i comandi 03 Read Holding Registers, 04 Read Input Registers, 16 (10 Hex) Preset Multiple Registers puoi utilizzare il blocco funzione ModbusRTUSlave. Questo blocco funzione esegue un override della gestione modbus del sistema operativo e gestisce il protocollo modbus RTU da porta seriale.

    Il blocco funzione (Vedi estratto manuale) permette di allocare i registri modbus da leggere in un’area di memoria e di definire l’offset di indirizzo modbus da assegnare alla lettura (Download programma esempio).

    in risposta a: Deviazione temperatura rispetto al giorno precedente #36723
    Sergio Bertana
    Amministratore del forum

    Ho realizzato un blocco funzione che realizza quello di cui hai bisogno. In pratica occorre passare alla FB in ingresso 3 parametri:

    Value (REAL): Valore di temperatura acquisito in tempo reale.
    Threshold (REAL): Valore di deviazione assoluto oltre al quale si genera l’evento.
    ECount (USINT): Numero di errori successivi oltre al quale si genera l’evento.

    In uscita la FB ha un parametro:

    EventOut (BOOL): Attivo se variazione superiore alla soglia per il numero di errori definito.

    Ecco il sorgente del blocco funzione.

    FUNCTION_BLOCK Variance

        VAR_INPUT
        Value : REAL; { DE:”Value to be controlled” }
        Threshold : REAL; { DE:”Valore soglia” }
        ECount : USINT; { DE:”Event count” }
        END_VAR

        VAR_OUTPUT
        EventOut : BOOL; { DE:”Event out” }
        END_VAR

        VAR_EXTERNAL
        SysDateTime : UDINT; { DE:”System Date/Time” }
        END_VAR

        VAR
        Storage : ARRAY[ 0..23 ] OF REAL; { DE:”Salvataggio valori” }
        TimeToDate : SysETimeToDate; { DE:”Time to date conversion” }
        SaveHour : USINT; { DE:”Salvataggio ora” }
        ECtr : USINT; { DE:”Event counter” }
        END_VAR

        { CODE:ST }
        TimeToDate(EpochTime:=SysDateTime); (* Calcolo data e ora *)
        IF (TimeToDate.Hour > 23) THEN RETURN; END_IF;
        IF (TimeToDate.Hour = SaveHour) THEN RETURN; END_IF;
       
        (* Arrivo se variazione ora, eseguo confronti. *)
       
        SaveHour:=TimeToDate.Hour; (* Salvataggio ora *)
           
        (* Controllo se rispetto al valore di 24 ore precedenti c’è variazione. *)
       
        IF (ABS(Storage[TimeToDate.Hour]-Value) <= Threshold) THEN
            EventOut:=FALSE; (* Event out *)
            ECtr:=0; (* Event counter *)
        ELSE

            (* Eseguo controllo se valore maggiore per nr confronti. *)

            IF NOT(EventOut) THEN        
                ECtr:=ECtr+1; (* Event counter *)
                IF (ECtr > ECount) THEN EventOut:=TRUE; END_IF;
            END_IF;       
        END_IF;

        (* Eseguo salvataggio valore attuale in storage. *)
           
        Storage[TimeToDate.Hour]:=Value; (* Salvataggio valori *)

    Attenzione! Siccome il blocco funzione salva al suo interno in un array i dati storici delle 24 ore precedenti, và allocato in memoria RETAIN. Allego un programma di esempio.

    in risposta a: Acquisizione modulo A/D da terminale touch screen #36722
    Sergio Bertana
    Amministratore del forum

    Per acquisire il valore da un sistema SlimLine tramite protocollo Modbus, si rimanda a questo post.

    in risposta a: Strano comportamento function block eTOF allo startup #36720
    Sergio Bertana
    Amministratore del forum

    Ho provato il tuo programma, effettivamente non è un problema tuo ma è un bug del blocco funzione eTOF, ho provveduto a correggerlo, allego il programma con la nuova FB corretta per il download. Allego anche sorgente blocco funzione eTOF così hai una idea di come funziona.

    FUNCTION_BLOCK eTOF

        VAR_INPUT
        IN : BOOL; { DE:”Timer input” }
        PT : UDINT; { DE:”Preset time value (mS)” }
        END_VAR

        VAR_OUTPUT
        Q : BOOL; { DE:”Delayed output” }
        ET : UDINT; { DE:”Executing time (mS)” }
        END_VAR

        VAR_EXTERNAL
        SysTime : UDINT; { DE:”System time (mS)” }
        END_VAR

        VAR
        TimeBf : UDINT; { DE:”Time buffer” }
        END_VAR

        { CODE:ST }
        IF (IN) THEN
            ET:=0; (* Executing time (mS) *)
            Q:=TRUE; (* Delayed output *)
            TimeBf:=SysTime; (* Time buffer *)
            RETURN;
        END_IF;

        IF NOT(Q) THEN RETURN; END_IF;

        ET:=SysTime-TimeBf; (* Executing time (mS) *)
       
        IF (ET >= PT) THEN
            ET:=PT; (* Executing time (mS) *)
            Q:=FALSE; (* Delayed output *)
        END_IF;

    END_FUNCTION_BLOCK

    in risposta a: Standard utilizzato per calcoli in virgola mobile (floating) #36719
    Sergio Bertana
    Amministratore del forum

    Il formato di rappresentazione dei numeri in virgola mobile (floating) delle variabili di tipo REAL nei sistemi Slim Line segue lo standard IEEE 754-1985 in singola precisione a 32 bit (I numeri sono rappresentati su 32 bit, 4 bytes).
     
    Per maggiori informazioni sul formato IEEE 754 si rimanda alla descrizione riportata da Wikipedia.
    Su Internet è possibile trovare ottimi convertitori di numeri in floating.

    in risposta a: Acquisizione modulo A/D da terminale touch screen #36718
    Sergio Bertana
    Amministratore del forum

    Il modulo di acquisizione 8 canali A/D TRP-C68 nella sua configurazione di default utilizza per il ritorno dei dati un formato che prevede un byte in più rispetto allo standard modbus, ed è questa la causa del problema di comunicazione. Per utilizzarlo con dispositivi modbus standard (Terminale operatore) occorre impostare il formato dati di ritorno nel modo a complemento 2  ed occorre definire acquisizione in modo Fast (Bit 5 attivo). Per l’impostazione del modo occorre riferirsi al comando modbus
    Set up the module’s configuration. La stringa di comando è: ID 46 06 00 BD 00 TT 00 DF 00 00 (CRC) BD: Baud-Rate (06: 9600 baud) TT: Analog Input type (08: +/- 10V)DF: Data format (22: Fast, 2’s Complement HEX Format) Quindi su un modulo configurato di default (Indirizzo 01) dovremo inviare il comando: 01 46 06 00 06 00 08 00 22 00 00 EC B8, il modulo risponde con: 01 46 06 00 00 00 00 00 00 00 00 CB 73.
    Il comando di set up, una volta inviato rimane residente nel modulo che continuerà a funzionare in base alla impostazione effettuata.
    Per l’invio delle stringhe modbus al modulo da PC è possibile utilizzare la nostra utility Toolly.

    in risposta a: Acquisizione celle di carico e velocità esecuzione ciclo FOR #36717
    Sergio Bertana
    Amministratore del forum

    Il modulo di espansione I/O analogico che dispone di ingressi diferenziali con acquisizione a 23 bit verrà a breve aggiornato con un nuovo firmware per la lettura anche di strain gauge. Anche se visto l’elevato numero di bits del convetitore,è già possibile acquisire i valori analogici in uscita dal ponte di misura ed acquisire il valore di peso.

    Per quanto riguarda il filtraggio del valore di peso acquisito è possibile realizzare l’algoritmo di filtro da linguaggio ST. Abbiamo alcuni esempi di filtro che possiamo fornire su richiesta.

    Per quanto riguarda il ciclo FOR, 35000 cicli sono parecchi, ma se non è possibile effettuare algoritmi di semplificazione gioco forza è realizzare il numero di cicli richiesto. Ho realizato un semplice programma ST che esegue 40000 cicli con tre somme ed un confronto all’interno, tutto su variabili a 32 bits, ed il tempo di esecuzione è 56 mSec.

    PROGRAM ST

        VAR
        i : UINT; { DE:”Auxiliary counter” }
        AddArray : ARRAY[ 0..3 ] OF UDINT; { DE:”Adding array” }
        END_VAR

        FOR i:=0 TO 40000 DO
            AddArray[0]:=AddArray[0]+1;
            AddArray[1]:=AddArray[1]+1;
            AddArray[2]:=AddArray[2]+1;
            IF (AddArray[2] = AddArray[3]) THEN AddArray[3]:=AddArray[3]+1; END_IF;
        END_FOR;

    END_PROGRAM

    in risposta a: Connessione modem GSM ai moduli Poseidon #36716
    Sergio Bertana
    Amministratore del forum

    Se da utility Flash setup viene attivata la gestione modem (Vedi foto), viene attivato il controllo del modem e gestita la sua inizializzazione. Abilitando il modem Siemens T35I (I nuovi modelli MC52i/MC55i sono perfettamente compatibili) e spiando i comandi inviati al modem e le relative risposte sulla porta seriale (I parametri di comunicazione di default sono 115200, n, 8, 1) avremo:
     
    AT OK
    AT+CFUN=1 OK
    AT+CMEE=2 OK
    AT+CPIN? +CPIN: READY
    OK
    AT+CMGF=0 OK
    AT+CSCA? +CSCA: “+393359609600”,145

     
    Come si vede viene testato se la SIM ha il PIN sbloccato (Deve essere una SIM con codice PIN disabilitato) e viene richiesto il numero del centro messaggi (Nell’esempio TIM).
     
    A questo punto è possibile impostare un numero di telefono a cui inviare l’SMS e agendo sul pulsante Send Test SMS, verrà inviato un messaggio di test.

Stai visualizzando 15 post - dal 3,856 a 3,870 (di 4,232 totali)