Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 1 a 15 (di 4,256 totali)
  • Autore
    Post
  • in risposta a: Routing con RUT140 Teltonika #82514
    Sergio Bertana
    Amministratore del forum

    Il RUT14x è nato proprio per questa esigenza, in pratica per ottenere quello che desideri dovrai:

    • Configurare l’interfaccia LAN con la classe di rete (IP, Mask) dei tuoi dispositivi di controllo (PLC, azionamenti, ecc). Dovrai definire come gateway dei tuoi dispostivi l’IP configurato sulla LAN del RUT14x.
    • Configurare l’interfaccia WAN con la classe di rete (IP, Mask) su un indirizzo di rete libero del cliente. Consiglio di non utilizzare il client DHCP ma di definire un IP statico.
    • Abilitare forwarding tra WAN->LAN per permettere alle connessioni in ingresso da rete aziendale di raggiungere i dispositivi sul’limpianto
    • Abilitare forwarding tra LAN->WAN per permettere ai dispositivi sull’impianto di raggiungere i dispositivi IP della rete aziendale e di conseguenza Internet. Non abilitarlo se il cliente non vuole che i dispositivi su impianto raggiungano la rete.

    Con questa soluzione se setti un route map sui PC connessi alla WAN potrai raggiungere direttamente i dispositivi di controllo con i loro indirizi IP. Esempio la rete del cliente ha classe 192.168.0.1/24, i tuoi dispositivi di controllo hanno classe 10.0.0.1/24, l’indirizzo IP settato sulla rete WAN è 192.168.0.10, basterà sul PC definire un route map del tipo:

    route add 10.0.0.0 mask 255.255.255.0 192.168.0.10

    Ora dal PC potrai pingare tutti i tuoi dispositivi direttamente con il loro indirizzo IP. Questa soluzione sicuramente funziona con tutte le comunicazioni ethernet non sono sicuro funzioni con Profinet.

    Il router inoltre supporta ZeroTier oltre a altre VPN come OpenVPN in questo modo se è connesso ad Internet potrai raggiungere da Internet tutti i dipositivi per la teleassistenza.

    in risposta a: Problema lettura/scrittura REAL su PLC SlimLine #82499
    Sergio Bertana
    Amministratore del forum

    Ho dato una occhiata alla allocazione delle variabili e se ho capito la tua tabella vedo che sullo SlimLine le variabili REAL sono allocate correttamente ad indirizzi divisibili per 4 e correttamente distanziate di 4 bytes tra di loro in entrambi i sistemi (Esempio %MR100.2004, %MR100.2100).

    L’indirizzo sul pannello Weintek è corretto (40000+(Indirizzo/2)), quindi %MR100.2004->%MDW-41002, %MR100.2100->%MDW-41050, ecc. quindi non capisco dove possa essere il problema considerando che su MPS054C100 funziona e su MPS056A110 no, visto che il sistema operativo dei due modelli è lo stesso. Azzardo ipotesi sul tuo problema (Vedi screenshot).

    • Gli asterischi negli oggetti di visualizzazione numerica appaiono quando il valore della variabile supera il valore di range definito, quindi se la tua variabile REAL sullo SlimLine esce dal range il pannello visualizza asterischi al posto del valore (Vedi immagine 1).
    • Il formato della variabile in visualizzazione è stato definito di tipo 32-bit Float (Vedi immagine 1).
    • Se visualizzi e/o imposti da debug in LogicLab il valore della variabile REAL nel programma SlimLine ad un valore compreso nel range definito vedi ancora gli asterischi.
    • Siccome a quanto dici le variabili a 16 bits sono visualizzate correttamente, non è che hai erroneamente definito una regola di Data conversion nel device riferito al MPS056A110 (Vedi immagine 2).
    in risposta a: Merge tra più file TAGs generati dal Symbols converter #82472
    Sergio Bertana
    Amministratore del forum

    Utilizzare l’utility di import di EasyBuilder per importare i files di TAGs generati nei vari programmi. Per evitare che l’importazione di un nuovo file di TAGs provochi la cancellazione delle TAGs precedentemente importate occorre disattivare la flag Remove old tags (Screenshot). Quando si genera un nuovo file di TAGs a seguito della modifica di un programma SlimLine occore:

    • Eseguire una importazione attivando la flag Remove old tags di uno dei files, in modo da eliminare tutte le TAGs presenti lasciando solo le nuove importate.
    • Eseguire una importazione disattivando la flag Remove old tags di tutti gli altri files di TAGS, in modo da aggiungere le nuove TAGs a quelle presenti.

    In alternativa è possibile scrivere un semplice programma batch che esegue il merge dei vari file di TAGs in un unico file che poi potrà essere importato nel progetto EasyBuilder. Contenendo tute le TAGs l’importazione del file và fatta attivando la flag Remove old tags. Ecco un esempio di script batch.

    copy /b ProjectA\TAGsProjectA.csv+ProjectB\TAGsProjectB.csv TAGs.csv

    Nell’esempio 2 files di TAGs generati dal convertitore simboli (TAGsProjectA.csv, TAGsProjectB.csv) sono uniti in un unico file TAGs.csv che potrà essere importato in EasyBuilder attivando la flag Remove old tags. Il comando batch di copia e l’importazione in EasyBuilder andrà eseguita ad ogni modifica dei files di TAGs.

    in risposta a: Gestire con comandi Modbus più inverter #82463
    Sergio Bertana
    Amministratore del forum

    La porta COM da settare è sempre e solo 1… quella che utilizzi per la connessione con tutti gli inverters.

    Come ho scrito non importa il numero di nodo che definisci nelle impostazioni della porta perchè il protocollo utilizzerà il numero di nodo Modbus definito nell’indirizzo del registro…

    Se vedi la mia macro utilizzo sempre lo stesso device server, sempre lo stesso indirizzo di variabile, cambia solo il nodo Modbus.

    in risposta a: Sockets insufficenti su sistema server con TCPDataExchServer #82446
    Sergio Bertana
    Amministratore del forum

    Iniziamo con il dire che guardando il report di SysLog vedo che non hai l’opzione RTC sul sistema Simulated RTC in use quindi tutti gli orari iniziano dall’Epoch time.

    Venendo al tuo problema ricordo che il sistema operativo SFW210C010 supporta fino a 32 sockets, 5 sockets sono già utilizzati dal sistema operativo con il comando NetStat vediamo:

    [Admin]> netstat
     Id  Proto  Local Address          Foreign Address        Status
    [00] UDP    0.0.0.0:9999           *.*                              
    [01] TCP    0.0.0.0:23             0.0.0.0:0              LISTENING 
    [02] TCP    0.0.0.0:502            0.0.0.0:0              LISTENING 
    [03] TCP    0.0.0.0:80             0.0.0.0:0              LISTENING 
    [04] TCP    0.0.0.0:21             0.0.0.0:0              LISTENING 
    [05] TCP    192.168.0.181:23       192.168.1.251:58434    ESTABLISHED

    Ad ogni connessione come ad esempio la connessione Telnet (porta 23) si ha un socket aperto in ascolto (LISTENING) ed uno o più sockets (Dipende dal numero di connessioni accettate) in ESTABLISHED. Quindi nel tuo caso non puoi avere 28 connessioni perchè dalle 32 devi già toglierne 5 e comunque il FB TCPDataExchServer per gestire 28 connessioni utilizza 29 sockets (1 in LISTENING e 28 in ESTABLISHED).

    Per capire quanti sono effettivamente i client connessi devi eseguire il comando NetStat e verificare quanti sockets hai in ESTABLISHED sulla porta definita del server. Per avere accesso al sistema sia in Telnet che in LogicLab ed in HTTP occorrono almeno 8 sockets liberi, quindi il massimo di clients che puoi gestire sono 24.

    Nel tuo caso avendo 28 clients ti consiglio di configurare 2 sistemi come server magari scambiando i dati tra di loro con il FB DataTransfer per tenere l’area di memoria sincronizzata tra di loro.

    in risposta a: Gestire con comandi Modbus più inverter #82437
    Sergio Bertana
    Amministratore del forum

    Devi configurare come dispositivo server un dispositivo Modbus RTU, configurare la porta con i corretti parametri di comunicazione. Per al comunicazione multidrop dai una occhiata al capitolo Come definire nodo Modbus in comunicazioni RS485 e/o TCP multidrop ? nelle FAQs.

    In pratica si indica il numero di nodo seguito dall’indirizzo della variabile, esempio 01#40016 (Nodo 1, variabile 40016), 02#40016 (Nodo 2, variabile 40016), …. Il numero di nodo và sempre indicato con 2 cifre.

    Ora dovendo dare il comando di marcia e di stop contemporaneamente su più inverter credo che la soluzione più semplice sia realizzare una macro utilizzando la funzione SetData per trasferire il valore di una LW sull’inverter.  Dovrai eseguire una SetData per ogni inverter. Ecco un esempio:

    macro_command main()
    short Command
    
    GetData(Command, "Local HMI", LW, 10, 1) //Leggo valore LW 10
    SetData(Command, "MODBUS RTU (Zero-based Addressing)", 3x, 01#8192, 1) //Comando inverter 1
    SetData(Command, "MODBUS RTU (Zero-based Addressing)", 3x, 02#8192, 1) //Comando inverter 2
    SetData(Command, "MODBUS RTU (Zero-based Addressing)", 3x, 03#8192, 1) //Comando inverter 3
    SetData(Command, "MODBUS RTU (Zero-based Addressing)", 3x, 04#8192, 1) //Comando inverter 4
    
    end macro_command

    Se esgui la macro a tempo scrivendo nella LW 10 i valori di start e di stop gestisci tutti gli inverter. Nota che ho scelto il protocollo MODBUS RTU (Zero-based Addressing), che ha offsert 0 quindi l’indirizzo 2000H -> 8192 l’ho definito senza sommare 1. Ho scritto la macro senza testarla spero funzioni.

    in risposta a: Gestire con comandi Modbus più inverter #82426
    Sergio Bertana
    Amministratore del forum

    Per gestire l’inverter da Modbus con i nostri PLC abbiamo realizzato il FB InvtGD20EU, che gestisce tutte le funzioni. Ma mi sembra di capire che tu vuoi gestirlo da un pannello operatore.

    Al capitolo 7 del manuale inverter trovi tutte le informazioni sul protocollo Modbus e trovi anche la tabella con i registri su cui operare per gestire l’inverter da Modbus. Come puoi vedere nella tabella per comandare l’inverter in marcia devi impostare il valore 0001H nel registro Modbus 2000H il valore 0005H forza lo stop.

    Per permettere la gestione da Modbus devi impostare alcuni registri ti rimando al capitolo Comando da Modbus di questo articolo. Naturalmente dovendo gestire più inverter dovrai realizzare una connessione multidrop in RS485 ed assegnare indirizzi di nodo diversi ad ogni inverter.

    Poi sul pannello dovrai configurare la connessione ai singoli inverter e con un comando Modbus 16#06 Preset single register scrivere il valore desiderato nel registro 2000H di tutti gli inverter.

    Attenzione all’offset sull’indirizzo gli indirizzi definiti sul manuale sono i reali indirizzi dei registri (Offset 0), il protocollo Modbus prevede l’offset di 1 sull’indirizzo, quindi se il pannello operatore gestisce correttamente l’offset per accedere al registro 2000H dovrai definire il registro 2001H.

    in risposta a: Come utilizzare gli I/O dei moduli CPU e di estensione #82407
    Sergio Bertana
    Amministratore del forum

    Nei ns sistemi come in tutti i PLC gli I/O sono gestiti in immagine di processo (Vedi articolo), quindi il sistema operativo riconosce i moduli presenti e provvede a gestire gli I/O mappandoli in datablock di memoria. Gli ingressi saranno indirizzabili con %IXaaa.bb e le uscite con QXaaa.bb dove

    • aaa: Indica l’indirizzo del modulo da 0 a 15 (255 per il modulo CPU).
    • bb: Indica l’I/O sul modulo.

    Quindi il modo corretto è definire il nome dell’I/O mappandolo correttamente cone %IX o %QX. Esempio

    • Start AT %IX0.1 : BOOL; (* Di 01 Module 0 *)
    • Stop AT %IX0.2 : BOOL; (* Di 02 Module 0 *)
    • Motor AT %QX255.0: BOOL; (* Do 00 CPU module *)

    Esistono dei FB che permettono di gestire direttamente gli I/O sui moduli SysGetPhrDI e SysSetPhrDO, utilizzando questi FB lo stato dell’ingresso viene acquisito immediatamente e l’uscita viene settata immediatamente. Questi FB si utilizzano in casi particolari, quando ad esempio occorre acquisire velocemente un ingresso o gestire velocemente un’uscita eseguendone la gestione in task Fast che può essere eseguita ogni 1mS o anche più velocemente.

    Il FB CPUModuleIO è un vecchissimo FB il cui uso è ormai deprecato da tempo.

    in risposta a: Visualizzazione tempo esecuzione di un timer #82386
    Sergio Bertana
    Amministratore del forum

    Il valore del tempo di esecuzione dei timer TON, TOF e TP è espresso nel formato TIME. Il formato TIME come indicato in questo articolo è un numero a 32 bits che rappresenta un tempo espresso in mS:

    TIME Time expressed in milliseconds, range da -24d_20h_31m_23s_648ms a 24d_20h_31m_23s_647ms

    Ora volendolo visualizzare sul pannello operatore basterà trasferire il valore di ET in uscita dal timer su di una variabile DINT allocata in DB100 per renderla accessibile da Modbus e poterla visualizzare sul terminale, in questo modo avrai il valore in mS se vuoi adattarlo potrai utilizzare la scalatura sul terminale. Ecco il programma ETOnHMI che esegue un TON con la visualizzazione sia del tempo trascorso TFromStart che del tempo che manca al termine TToEnd.

    VAR
        OnDelay : TON; (* On time delay *)
        TFromStart AT %MX100.16 : DINT; (* Time from start *)
        TToEnd AT %MX100.20 : DINT; (* Time to end *)
    END_VAR
    
        OnDelay(IN:=NOT(OnDelay.Q), PT:=T#10s); //On time delay
        TFromStart:=TO_DINT(OnDelay.ET); //Time from start
        TToEnd:=TO_DINT(OnDelay.PT)-TO_DINT(OnDelay.ET); //Time to end

    Nello screenshot la visualizzazione dei due tempi sul pannello operatore. Come si vede in LogicLab i tempi sono visualizzati nel formato TIME (7s10ms) mentre sul pannello il tempo e espresso in decimale 7040 (La diferenza di tempo è data dal tempo di campionamentro del valore da parte di LogicLab e del terminale).

    in risposta a: Testare comunicazione Modbus RTU #82376
    Sergio Bertana
    Amministratore del forum

    Iniziamo con il precisare che purtroppo il simulatore di LogicLab non supporta gli streams di comunicazione, quindi non è possibile testare in simulazione le comunicazioni sia seriali che ethernet, e l’accesso al disco. Con il simulatore è possibile eseguire programmi logici testando il funzionamento di reti logiche e/o funzioni di calcolo matematico.

    Per comunicare in Modbus sia RTU che TCP dovrai istanziare nel tuo programma il FB ModbusMaster, troverai molti esempi sia nella knowledge base che nel forum. Ma per testarlo devi necesseriamente utilizzare il modulo SlimLine.

    Se ho capito il senso della tua domanda, vorresti poter provare il programma con la comunicazione Modbus collegandoti ad un dispositivo di prova e non ai componenti reali della cucina per poterti esercitare con la programmazione.

    L’MPS050B020 dispone sia di una porta RS232 che di una porta RS485, quindi se per la programmazione ti colleghi via USB hai le due porte seriali libere e collegando alla porta seriale RS232 un convertitore RS232/RS485 puoi testare la comunicazione tra le due porte. Certo se avessi utilizzato un modulo CPU con interfaccia ethernet potresti testare la comunicazione direttamente in localhost senza fare connessioni tra porte.

    Utilizzando le due porte seriali puoi istanziare il FB ModbusMaster su di una porta e interrogare i registri Modbus del sistema agli indirizzi a partire dal 40000 in avanti come indicato in questo articolo. Puoi anche istanziare il FB ModbusSlave sull’altra porta seriale e gestire gli indirizzi dei registri liberamente.

    Quando poi testerai l’applicazione sul campo collegandoti ai dispositivi della tua cucina ti consiglio di utilizzare la console di spionaggio utilissima per individuare gli eventuali problemi di comunicazione.

    in risposta a: Connessioni Rilevatore allagamento/Sensore livello SHV1 #82365
    Sergio Bertana
    Amministratore del forum

    La versione del Rilevatore allagamento/Sensore livello SHV1 che gestiamo ha le cconnessioni come indicato in figura.

    Quindi l’alimentazione và connessa ai morsetti GND +Vcc, il sensore accetta sia ingresso in DC/AC da 15 a 24 volt.

    Ai morsetti OUT RELAY è connesso il contatto NO del relè interno, lo stato dell’uscita può essere modificato spostando il jumper dalla posizione A alla posizione B.

    • Posizione A: Il relè si eccita a contatto con il liquido, a contatto con il liquido OUT RELAY si chiude.
    • Posizione B: Il relè si eccita immediatamente e si diseccita a contatto con il liquido, a contatto con il liquido OUT RELAY si apre.

    Quindi visto che OUT RELAY è un contatto pulito valuta se è il caso di connetterlo ad un ulteriore relè in uscita.

    in risposta a: Modulo output Modbus TCP/IP con uscita 4-20mA #82358
    Sergio Bertana
    Amministratore del forum

    La soluzione più economica che possiamo proporre è il modulo A-1812 Modulo I/O remoto Ethernet 2DI/4AI/2AO che dispone di 2 uscite analogiche. Il modulo supporta i comandi Modbus: 03/04/06/16 agendo sui registri 17 e 18 puoi impostare il valore di uscita con valori da 4 a 4000 ottieni in uscita da 0/4  a 20mA.

    40017~40018 0~1 Current Output Value R/W R/W 0~4000:0/4~20mA

    Con questo modulo non hai possibilità di “calibrare” il range di uscita sulla base del valore scritto nel regitro.

    Se il calibrare il valore è una tua nessità, posso consigliarti uan soluzione basata su modulo CPU SlimLine MPS056B110 e muodulo di estensione uscita analogica PCB126C150 che ha 4 uscite 4-20mA. Naturalmente essendo un prodotto programmabile potrai agire a piacimento sul valore del registro per gestire l’uscita in corrente in base alle tue esigenze.

    Il protocollo Modbus TCP/IP è nativo, con il FB SysSetAnOut puoi impostare il valore in uscita in base al valore definito da Modbus nel registro.

    in risposta a: Question about object polymorphism #82351
    Sergio Bertana
    Amministratore del forum

    Sorry but i don’t understand your needs why you have to dynamically allocate the FBs. You need use them and then you destroy after use? and why you have to destroy them you need to save memory?

    To obtain the same result as in the TWINCAT  with LogicLab program you can write:

    VAR
        SquareArea : REAL; (* Square area *)
        SquarePerimeter : REAL; (* Square perimeter *)
        RForm : Form; (* Reference to Form *)
        MySquare : Square; (* Square form *)
    END_VAR
    
        MySquare.Side:=10; //Square side
        RForm:=MySquare; //Reference to Form
        SquareArea:=RForm.Area(); //Square area
        SquarePerimeter:=RForm.Perimeter(); //Square perimeter

    You simply static instantiate the objects and use them.

    in risposta a: Problema nella gestione uscite PWM #82343
    Sergio Bertana
    Amministratore del forum

    Intato se vai alla pagina di definizione errori e cerchi l’errore 9951085, troverai l’indicazione “Terminato tempo utilizzo per FB protetta”. Quindi non hai definito correttamente la licenza per l’utilizzo dei PWM, per questo che terminato il tempo di funzionamento in demo hai il blocco di alcuni dei PWM in modo casuale.

    Quindi la prima operazione è impostare correttamente la licenza, trattandosi di licenza DID verificare se il tipo di modulo e il numero seriale corrispondono al modulo CPU che stai utilizzando. Nel tuo programma non trovo la funzione SysPCodeVerify di impostazione licenza quindi immagino sia stata definita da pagina Web.

    Guardando il file di log che hai inviato non vedo stranezze, dando una occhiata agli ultimi records vedo:

    [16/05/2025 13:45:01.000] [L] SFW198[ 5003] MPS054C110-00488 power on       
    [16/05/2025 13:45:01.000] [L] SFW198[ 5005] Starting Op. System SFW210B040  
    [16/05/2025 13:45:06.931] [L] SFR050[14025] Ethernet Link ok                
    [16/05/2025 13:45:07.513] [L] SFW198[ 6000] Run ApplID:0x61FCA90C           
    [19/05/2025 07:39:31.007] [L] SFW198[ 6010] Stop ApplID:0x61FCA90C          
    [19/05/2025 07:39:33.715] [L] SFW198[ 6050] LogicLab executable download end
    [19/05/2025 07:39:36.168] [L] SFW198[ 6000] Run ApplID:0xF5BA33F9

    L’ultima volta il sistema è stato acceso il 16/05 alle 13:45, poi al 19/05 alle 7:39 hai caricato il programma con LogicLab, la fase di caricamento esegue uno stop del programma e poi manda in esecuzione il programma indicandone il valore di HASH.

    in risposta a: Lettura dati seriale da dispositivo su pannello cMT #82334
    Sergio Bertana
    Amministratore del forum

    La domanda è molto generica, non dici di che tipo di protocollo dispone il tuo strumento di misura.

    Se è uno dei protocolli gestiti nativamente dal pannello puoi fare riferimento Guida connessioni PLC per pannelli Weintek.

    Se invece si tratta di un protocollo proprietario puoi utilizzare il Free protocol che ti permette da macro con le funzioni INPORT ed OUTPORT di ricevere ed inviare dati su qualsiasi interfaccia sia seriale RS232/485 che TCP/IP.

    Se cerchi nel forum Free protocol puoi trovare informazioni utili, ti rimando a questo topic dove viene gestita una stampante. Oppure a questo topic dove è gestita una comunicazione TCP/IP.

Stai visualizzando 15 post - dal 1 a 15 (di 4,256 totali)