Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 3,946 a 3,960 (di 4,318 totali)
  • Autore
    Post
  • 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.

    in risposta a: Aggiornamento I/O tramite FB o su immagine di processo #36715
    Sergio Bertana
    Amministratore del forum

    Per quanto riguarda la gestione degli I/O analogici occorre utilizzare le apposite FB. E’ possibile inserire le FB indifferentemente in tutte le tasks, ma se non per casi eccezzionali, il mio consiglio è di inserirne la chiamata nella task back.

    E’ possibile anche acquisire un ingresso e/o gestire una uscita su un modulo analogico in una task ed acquisire un’altro ingresso e/o gestire un’altra uscita dallo stesso modulo in un altra task.

    Se un valore analogico in ingresso è utilizzato in più tasks, si acquisisce nella task eseguita piu velocemente e si utilizza il valore acquisito nell’altra task, senza eseguire nuovamente la FB.

    in risposta a: Aggiornamento I/O tramite FB o su immagine di processo #36714
    Sergio Bertana
    Amministratore del forum

    La domanda è interessante e dà modo di chiarire come il sistema Slim Line aggiorna gli I/O.

    Tutti i moduli di I/O logici connessi al modulo CPU sono aggiornati automaticamente (Immagine di processo) e mappati nella tabella %IX e %QX nella task slow. Gli ingressi sono acquisiti prima e le uscite sono gestite dopo, l’esecuzione del programma utente. Quindi l’immagine dello stato di un I/O è valida per tutta l’esecuzione della task slow.

    Per la task back, viene creata una immagine di processo “parallela” che riporta lo stato degli ingressi prima della esecuzione e gestisce le uscite dopo l’esecuzione del programma utente, anche questa “immagine” dello stato di un I/O è valida per tutta l’esecuzione della task back. Attenzione! la gestione della stessa uscita logica sia nella task slow che back crea disallineamenti tra le due tasks ed è da evitare.

    Nella task fast se si vuole gestire gli I/O alla velocità di esecuzione della task, occorre acquisirne il valore e gestirne l’attivazione con le apposite FB. Se si utilizza quelli mappati nella tabella %IX e %QX essi saranno aggiornati comunque alla velocità di esecuzione della task slow. Attenzione! l’esecuzione della task fast interrompe l’esecuzione della task slow, quindi agendo sulle variabili %IX e %QX “sporco” l’immagine di processo della task slow.

    L’utilizzo delle FB di gestione I/O come dicevi tu permette di acquisire e gestire direttamente i moduli di I/O indipendentemente dalla immagine di processo. Attenzione! la gestione di un modulo di uscita và fatta considerando che la task slow ne gestirà l’immagine di processo, quindi potrebbe settare nelle uscite un valore diverso da quello settato dalla FB provocando un lampeggio delle uscite.

    in risposta a: Differenze su connettori RJ11 e RJ12 nei sensori 1-Wire #36713
    Sergio Bertana
    Amministratore del forum

    Intanto facciamo chiarezza sui connettori RJ, la sigla stà per “Registered Jack”.

    Gli standard RJ11 e RJ12 sono strettamente correlati ed in effetti sembrano identici gli uni agli altri, entrambi usano lo stesso connettore a 6 poli. L’unica differenza tra questi due è nel modo in cui sono cablati ed il numero dei fili che vengono utilizzati.

    Sul connettore RJ11 sono previsti due tipi di cablaggio, 6P2C (6 poli 2 conduttori) solo i 2 fili centrali collegati, 6P4C  (6 poli 4 conduttori), (In alcuni casi viene identificato con la sigla RJ14), solo i 4 fili centrali collegati.

    Sul conettore RJ12 è previsto un solo tipo di cablaggio 6P6C (6 poli 6 conduttori) tutti i 6 poli del connettore sono cablati.

    I sensori 1-Wire usano i 4 poli centrali del connettore RJ11 e possono essere utilizzati su tutti i prodotti HwGroup della serie Poseidon. che dispone di una porta a 6 poli RJ12.

    in risposta a: Come realizzare una rete wireless con repeaters WDS #36712
    Sergio Bertana
    Amministratore del forum

    I dispositivi Ubiquiti non sono progettati per l’handover, cioè il passaggio di “cella”, ma configurando tutti gli access point in modalità bridge (Li fai lavorare in layer 2), è possibile riuscire ad ottenere un passaggio di “cella” indolore.

    Probabilmente una telefonata cadrà ma per servizi piu lenti come la navigazione, non dovrebbero esserci problemi.

Stai visualizzando 15 post - dal 3,946 a 3,960 (di 4,318 totali)