Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 46 a 60 (di 4,355 totali)
  • Autore
    Post
  • in risposta a: Verifica correttezza caratteri in una stringa codice #83504
    Sergio Bertana
    Amministratore del forum

    La soluzione è utilizzare le regular expressions (o espressioni regolari), che sono uno strumento potentissimo per cercare, verificare o manipolare testo usando dei modelli (pattern).

    Vediamo come realizzare un semplice programma che soddisfi le tue necessità:

    VAR
        SStr : STRING[ 32 ]; (* Source string *)
        DStr : STRING[ 32 ]; (* Destination string *)
        Ok : BOOL;
    END_VAR
    
        eTO_JUNK(SysVsscanf(ADR(SStr), ADR('%32[0-9a-zA-Z]'), STRING_TYPE, ADR(DStr)));
        Ok:=(SStr = DStr);

    In SStr si trova la stringa da controllare, la funzione SysVsscanf la scansiona accettando tutti i caratteri che soddisfano la definizione racchiusa tra parentesi quadre fino ad un massimo di 32 caratteri e memorizza il risultato in DStr. Se la stringa risultato è uguale alla stringa sorgente il valore è corretto, si attiva la varioabile Ok. Si possono definire d iversi pattern di controllo:

        eTO_JUNK(SysVsscanf(ADR(SStr), ADR('%32[a-zA-Z]'), STRING_TYPE, ADR(DStr))); //Caratteri alfabetici (Maiuscoli/Minuscoli)
        eTO_JUNK(SysVsscanf(ADR(SStr), ADR('%32[a-zA-Z ]'), STRING_TYPE, ADR(DStr))); //Caratteri alfabetici (Maiuscoli/Minuscoli) e space
        eTO_JUNK(SysVsscanf(ADR(SStr), ADR('%32[a-z]'), STRING_TYPE, ADR(DStr))); //Caratteri alfabetici (Minuscoli)
        eTO_JUNK(SysVsscanf(ADR(SStr), ADR('%32[0-9]'), STRING_TYPE, ADR(DStr))); //Solo numeri
    in risposta a: Problemi con memorie ritentive PLC SlimLine MPS5054C110 #83467
    Sergio Bertana
    Amministratore del forum

    Colgo l’occasione della discussione per trattare lo spinoso argomento del rendere ritentivi i blocchi funzione. I FB utilizzano al loro interno svariate variabili e non è noto il loro impegno di memoria, quindi sconsiglio la loro allocazione in area indirizzabile come la DB100. Perchè dovendo definire gli indirizzi di allocazione non è possibile sapere a priori a che indirizzo allocare la variabile successiva alla allocazione del FB. Quindi se proprio si desidera rendere ritentivo un FB è preferibile definirlo in area automatica con l’attributo RETAIN.

    Rendere retain un FB potrebbe nascondere insidie, chi sviluppa i FB solitamente non li struttura per essere tamponati, per esempio potrebbe alllocare al loro interno memoria rilocabile ed in questo caso il mantenere retain l’indirizzo di allocazione potrebbe portare a gravi errori di funzionamento del programma. Nel tuo caso quindi puoi allocare il tuo FB CTU in area automatica con l’attributo RETAIN.

    Nel caso ti occorra accedere da Modbus il valore di conteggio, non utilizzare più il FB CTU ma alloca ad esempio in DB100.2048 una variabili UINT o UDINT e gestisci il conteggio da programma, ecco un esempio:

    VAR
        Pulse : BOOL; (* Clock pulse *)
        Di00CPU AT %IX255.0 : BOOL; (* Digital input *)
        Counter AT %MD100.2048 : UDINT; (* Counter value *)
    END_VAR
    
        IF (Di00CPU <> Pulse) THEN
            Pulse:=Di00CPU; //Clock pulse
            IF (Di00CPU) THEN Counter:=Counter+1; END_IF;
        END_IF;
    in risposta a: Impianto per il riscaldamento di liquidi #83459
    Sergio Bertana
    Amministratore del forum

    Ecco come potremmo soddisfare le richieste con i ns prodotti:

    • MPS056B320 SlimLine Modulo CPU Cortex M7 Compact Ethernet LLab Ext. Statico, il modulo ha 6 ingressi digitali e 4 uscite statiche con le quali è possibile comandare 4 relè statici di comando resistenze.
    • PCB126C110 SlimLine Modulo esp. I/O Analogico 5In, con il modulo è possibile acquisire 5 sensori di temperatura Pt100/1000 o 4 termocoppie.
    • TG68-60 Sonda di temperatura PT1000, visto il range di temperatura consiglierei una Pt1000 anzichè la termocoppia. Per il montaggio su tubo possiamo proporre PTS350A Sonda di temperatura a contatto PT1000/3850.

    Veniamo alla regolazione, normalmente nei serbatoi si utilizza una regolazione PID (Vedi FB PIDMng), che produce in uscita un comando PWM delle resistenze.  Trattandosi di liquido in transito possiamo sfruttare la sua inerzia termica solo se il serbatoio è molto grande rispetto al volume del liquido in transito.

    Se invece il volume del serbatoio è molto piccolo e bisogna scaldare il liquido mentre transita è possibile che la regolazione PWM delle resistenze non riesca a garantire una buona regolazione, quindi in questo caso opterei per un comando delle resistenze a parzializzazione di fase.

    in risposta a: Comando pompa da galleggiante via radio #83445
    Sergio Bertana
    Amministratore del forum

    Non mi dici se c’è possibilità di alimentazione elettrica sul serbatoio, e se il galleggiante và gestito con un semplice contatto oppure vi è un indicatore di livello analogico.

    Abbiamo diverse soluzioni, la più semplice che propongo è basata su dispositivi LoRaWAN una tecnologia progettata per comunicazioni wireless a lungo raggio ed a basso consumo energetico che in area urbana può raggiungere dai 2 ai 5 km di copertura. Sul serbatoio puoi installare:

    • UC300, controller IoT LoRaWAN, può gestire sia ingressi digitali che segnali analogici, ma deve essere alimentato.
    • EM300-DI, contatore impulsi LoRaWAN, può gestire l’ingresso digitale ed è autoalimentato a batteria.

    Sulla pompa andrà installato il PLC di gestione ed il gateway LoRaWAN:

    • MPS056B110 SlimLine Modulo CPU Cortex M7 Compact Ethernet, PLC di controllo con 6 ingressi digitali e 4 uscite relè.
    • UG56-868M Gateway industriale LoRaWAN.

    Tramite il FB MlsDevice è possibile dal PLC di gestione acquisire tramite il gateway l’informazione del galleggiante dal sensore LoRaWAN e gestire con l’uscita logica il comando pompa. Agli ingressi del PLC possono essere connessi altri segnali come ad esempio il contatto del termico motore pompa per gestire l’allarme. Altre informazioni di allarme si possono gestire nel caso con la pompa attiva non vi siano variazioni di livello nel serbatoio, o se la pompa è gestita da inverter controllandone gli eventuali allarmi. Per la gestione degli inverter INVT abbiamo il FB InvtGD20EU.

    Se si utilizza un gateway con gestione LTE, sarà possibile dal PLC inviare eMail o messaggi Telegram di avviso, installando una VPN sarà anche possibile raggioungere l’impianto da internet per la teleassistenza.

    in risposta a: Riproduzione suoni wav con terminali touch screen #83425
    Sergio Bertana
    Amministratore del forum

    Si i pannelli tranne un paio di modelli non hanno lo speaker ma solo il buzzer.

    Per poter riprodurre i suoni bisogna collegare una cassa esterna e gestire sempre esternamente il volume.

    in risposta a: Problemi con memorie ritentive PLC SlimLine MPS5054C110 #83408
    Sergio Bertana
    Amministratore del forum

    Il backup dei dati è effettuato in una memoria FRAM che non necessita di batterie. Alla accensione viene eseguita una verifica sul CRC dei valori memorizzati allo spegnimento, se il controllo è in errore tutte la variabili sono azzerate e viene settata la variabile SysRestoreFault.

    Se il controllo è corretto le variabili vengono valorizzate con i valori allo spegnimento poi viene eseguita la funzione che assegna alle variabili i valori di inizializzazione. Nel tuo caso vedo che hai inizializzato alcune variabili in area ritentiva, queste naturalmente assumeranno sempre il valore definito nella inizializzazione.

    Il fatto che le variabili ritentive si azzerino è molto strano, per evitare che sia il programma a sporcarle, ti consiglio di realizzare un nuovo programma LogicLab con solo il programma MyProgram, poi definire le variabili ritentive così come hai indicato e da debug impostare valori casuali nelle variabili. Spegnere ed accendere il sistema e verificare se il valore viene mantenuto.

    Nel caso siano azzerate puoi collegarti verificare da debug lo stato della variabile SysRestoreFault, ed eventualmente collegarti in telnet, eseguire il comando SysLog e postare il risultato del comando.

     

    in risposta a: Acquisizione wireless contatore gas #83390
    Sergio Bertana
    Amministratore del forum

    L’EM300-DI-868M è un sensore LoRaWAN pensato per rendere i tradizionali contatori dell’acqua wireless ed intelligenti. Utilizza una tecnologia a risparmio energetico e può lavorare fino a 5 anni con la batteria integrata da 4000 mAh. In riferimento ai dati richiesti:

    • Frequenza massima in ingresso ≤ 2000 Hz
    • Larghezza minima dell’impulso 250 μs

    Oltre alla frequenza massima è importante considerare l’ampiezza minima del segnale per evitare situazioni con frequenze basse ma con impulsi di durata estremamente breve. Viste le sue caratteristiche può essere certamente utilizzato per la tua applicazione, ma ti faccio notare che non ha certificazione Atex quindi occorre prestare attenzione alla sua installazione.

    Per l’acquisizione con i ns sistemi SlimLine, si può utilizzare l’apposito blocco funzione MlsDevice.

    in risposta a: Gestione storico temperature su PC con file CSV #83319
    Sergio Bertana
    Amministratore del forum

    Se i punti da controllare non sono vicini, è possibile utilizzare ad esempio una soluzione basata su rete LoRaWAN. Un modulo TS301 o TS302 può acquisire 1/2 sonde Pt100, il modulo ha una batteria ed un display di visualizzazione locale della temperatura.

    Un gateway LoRaWAN come l’UG56 può acquisire i valori di temperatura dai vari moduli e pubblicarli in MQTT. Con FB MlsDevice è possibile ricevere dallo SlimLine i valori e analogamente alla situazione precedente memorizzarli nel file CSV.

    Se sul punto di misura è disponibile una sorgente di alimentazione è possibile utilizzare un controller IoT LoRaWAN UC300, oppure un modulo di I/O remoto WiFi come ad esempio lo Yotta A-1212. La soluzione WiFi è sicuramente più semplice anche come implementazione, basterà connettersi ad una rete WiFi esistente o crearne una con un access point ad esempio il RUT140, e potrai acquisire direttamente i valori di pressione via Modbus TCP.

    Per i ns sistemi SlimLine abbiamo un FB YottaA1MMng dedicato ai moduli Yotta, oppure puoi acquisisire il valore direttamente utilizzando il FB ModbusMaster con il FB SysTCPClient.

    in risposta a: Controllo pressione wireless #83290
    Sergio Bertana
    Amministratore del forum

    Il trasduttore di pressione Milesight EM500-PP ha range da 0-1600 kPa (16 Bar) quindi non è adatto alla tua applicazione.

    Non mi è chiaro se sul punto di misura hai disponibile una sorgente di alimentazione oppure no.

    Se non hai disponibile la sorgente di alimentazione devi forzatamente utilizare un dispositivo LoRaWAN con alimentazione a batteria. Sul mercato ne puoi trovare diversi modelli ma noi non li trattiamo. Teoricamente qualsiasi dispositivo LoRaWAN 868Mhz si può interfacciare con il gateway suggerito.

    Se invece hai disponibile la sorgente di alimentazione puoi scegliere un qualsiasi trasduttore di pressione con uscita 4-20mA e poi interfacciarlo ad esempio con un controller IoT LoRaWAN UC300, oppure un modulo di I/O remoto WiFi come ad esempio lo Yotta A-1212. La soluzione WiFi è sicuramente più semplice anche come implementazione, basterà connettersi ad una rete WiFi esistente o crearne una con un access point ad esempio il RUT140, e potrai acquisire direttamente i valori di pressione via Modbus TCP.

    Per i ns sistemi SlimLine abbiamo un FB YottaA1MMng dedicato ai moduli Yotta, oppure puoi acquisisire il valore direttamente utilizzando il FB ModbusMaster con il FB SysTCPClient.

    in risposta a: Sconfigurazione indirizzo IP #83284
    Sergio Bertana
    Amministratore del forum

    In modalità bridge il pannello assume un unico IP, le due porte LAN si comportano come uno switch a doppia porta di rete.

    Proverei con un progetto vuoto per essere certo che non sia qualcosa a livello del progetto a modificare l’indirizzo IP.

    in risposta a: Controllo pressione wireless #83276
    Sergio Bertana
    Amministratore del forum

    Dal datasheet vedo che il prodotto può interfacciarsi in Bluetooth® 4.0, questa tecnologia (nota anche come Bluetooth Low Energy o BLE) ha una portata teorica in ambienti chiusi circa 10 metri, in esterno (linea di vista) fino a 50-100 metri. Quindi la prima considerazione và fatta sulla distanza di comunicazione.

    Poi chiedi un metodo per interfacciarti al sensore, non dici che tipo di interfaccia ti serve, la tecnologia Bluetooth è plug and play su sistemi Android o PC ma se devi interfacciarti con un PLC nasce qualche problema, noi non abbiamo nessun tipo di interfaccia adatto.

    Diverso se per acquisire la pressione utilizzi un sensore LoRaWAN come ad esempio questo della Milesight, non è disponibile sul ns sito ma possiamo fornirlo a richiesta. LoRaWAN (Long Range Wide Area Network) è una tecnologia di comunicazione wireless a bassa potenza progettata per connettere dispositivi su lunghe distanze, soprattutto in applicazioni IoT (Internet of Things). La portata dei sistemi LoRaWAN a 868 MHz all’interno degli edifici è generalmente molto buona grazie alla sua capacità di “penetrazione profonda” (deep indoor penetration) e può arrivare a 50–100 metri, mentre in esterno  (linea di vista) fino a 10–20 km.

    Per l’acquisizione dei dati occorre un gateway come l’UG56, il gateway può raccogliere i dati da molti sensori, i dati acquisiti sono pubblicati in MQTT operando come broker. Per i ns sistemi programmabili SlimLine forniamo il blocco funzione MlsDevice già predisposto allo scopo. E’ comunque possibile programmare il gateway in Python o Node-RED per permettere la pubblicazione dei dati in svariati altre modalità ad esempio in Modbus TCP.

    in risposta a: Remotare l’acquisizione di contatori Eastron #83269
    Sergio Bertana
    Amministratore del forum

    Cominciamo con il dire che ho dato una occhiata al modello di convertitore che utilizzi e mi sembra che possa andare bene.

    Ora dalla tua domanda sembra che vuoi connettere più contatori sulla porta RS485 del convertitore. Bene allora il programma è eattamente quello dell’esempio dove ne vengono gestiti 3 (Ma ne puoi aggiungere quanti ne vuoi). Naturalmente ognuno avrà un ID Modbus diverso tutti saranno raggiungibili dall connessione TCP alla porta 1000 del tuo convertitore. Se vedi l’esempio ST_EastronSDM120 in questa pagina dopo avere sostituito il FB SysSerialPort con il FB SysTCPClient dovrai solo modificare il gestore della comunicazione come riportato qui sotto.

        // -------------------------------------------------------------------------
        // ENERGY METERS MANAGEMENT
        // -------------------------------------------------------------------------
        // Manage the Modbus communication.
    
        TCPClient(Connect:=TRUE); //TCPClient management
        MMdb.File:=TCPClient.File; //File pointer    
        MMdb(); //Modbus master
    
        // Manage the energy meters.
    
        Meter[0].Enable:=NOT(Meter[2].Done); //FB enable
        Meter[1].Enable:=Meter[0].Done; //FB enable
        Meter[2].Enable:=Meter[1].Done; //FB enable
        FOR i:=0 TO 2 DO Meter[i](); END_FOR;

    Se hai tante “isole” con un convertitore ethernet/seriale e dei contatori, dovrai semplicemente duplicare il programma modificando l’indirizzo IP a cui si connette il FB SysTCPClient.

    Riguardo al supporto remoto ricordo che è possibile acquistarlo da questa pagina, dopo l’acquisto come indicato in questo articolo è possibile accedere direttamente al supporto tecnico e iniziare una sessione di assistenza.

    in risposta a: Sconfigurazione indirizzo IP #83261
    Sergio Bertana
    Amministratore del forum

    Ecco alcune verifiche che puoi fare:

    • Verificare che l’interfaccia di rete abbia l’indirizzo IP impostato in modo statico e non in DHCP, se in DHCP può succedere che venga a mancare il server DHCP e quindi il pannello non riesca più a settare l’indirizzo a fine lease.
    • Verifica che il tuo programma non agisca sulle TAGs di sistema di impostazione IP (LW-9129/32 o LW-10786/89) modificando il valore impostato all’accensione.
    • Verifica che le due porte LAN siano configurate su reti diverse.

    Se è tutto corretto prova a trasferire un progetto vuoto e verificare se il problema persiste.

    in risposta a: Remotare l’acquisizione di contatori Eastron #83249
    Sergio Bertana
    Amministratore del forum

    Nella domanda non citi se li vuoi acquisire con i ns PLC SlimLine oppure con altri sistemi.

    Se li acquisisci con lo SlimLine puoi utilizzare i FB appositi EastronSDM120 e EastronSDM630, in tal caso basterà utilizzare dei semplici convertitori Ethernet/Seriale come ATC-1200 o WiFi/Seriale come ATC-1000WF, a cui sulla RS485 potrai collegare uno o più contatori. I convertitori si potranno acquisirre come dagli esempi riportati, basterà utilizzare al posto del FB SysSerialPort il FB SysTCPClient che punterà all’indirizzo IP del convertitore.

    In alternativa alla connessione ethernet è possibile utilizzare i convertitori LoRaWAN, dai una occhiata a questo articolo.

    Se li acquisisci da un sistema diverso (Esempio uno SCADA) possono valere le stesse considerazioni fatte prima, ma attenzione… il convertitore ATC-1200 come la soluzione su LoRaWAN non convertono il protocollo da Modbus TCP a RTU, quindi occorre che il sistema di acquisizione sia in grado di inviare su connessione TCP il protocollo Modbus RTU, cosa che non tutti i sistemi permettono di fare.

    Se il sistema di acquisizione utilizza il protocollo Modbus TCP occorre utilizzare un gateway come ATC-1300 o ATC-3002.

    in risposta a: Errore su comunicazione Modbus TCP #83226
    Sergio Bertana
    Amministratore del forum

    Come indicato in questo articolo le librerie sono in continua evoluzione, aggiornamenti e/o aggiunte di nuovi oggetti, ma le raccolte (Packages) sono rilasciati solo a scadenze programmate. Tra i rilasci ci possono essere versioni di libreria che verranno poi incluse nella successiva versione del package.

    Durante questo periodo viene rilasciata una versione beta del package (riconoscibile dal codice che termina con “_”) che contiene le librerie in fase di sviluppo. La versione beta è in continua evoluzione, viene pubblicata sul sito ad ogni variazione in modo che:

    • Gli utenti che hanno segnalato un problema possano utilizarla e verificarne l’effettiva risoluzione.
    • Gli eventuali nuovi oggetti, fuzioni e FB, possano essere testati sia da noi che dagli utenti.

    Solo dopo questo periodo di “rodaggio” si decide di chiudere la fase di beta test e rilasciare la versione definitiva. Nel frattempo chi ha utilizzato la versione beta nei suoi progetti può continuare ad usarla anche se consigliamo nelle eventuali modifiche future di utilizzare la versione rilasciata.

Stai visualizzando 15 post - dal 46 a 60 (di 4,355 totali)