Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 1,651 a 1,665 (di 4,381 totali)
  • Autore
    Post
  • in risposta a: Pannelli CMT con opzione Codesys #47173
    Sergio Bertana
    Amministratore del forum

    CODESYS è supportato solo su alcuni modelli CMT, se vai alle pagine prodotto nella tabella delle caratteristiche troverai indicati i modelli che lo supportano. Per utilizzzarlo è comunque necessario acquistare una licenza aggiuntiva.

    Come periferia puoi utilizzare qualsiasi prodotto Modbus TCP o CAN bus.

    in risposta a: Utilizzo delle due porte ethernet sui terminali #46952
    Sergio Bertana
    Amministratore del forum

    1) Come vanno configurate le due porte? Immagino con classi diverse.
    Si le porte non sono configurabili in modalità switching , quindi sono da configurarsi su 2 Lan differenti

    2) In funzionamento LAN vedo la pagina web del pannello. E’ possibile ad esempio parlare con il PLC connesso all’altra ethernet ?
    Attualmente la funzione Bridge che permette di collegarsi ad un dispositivo Ethernet posto sulla rete differente rispetto a quella dove noi siamo connessi è possibile. Solo attraverso EasyAccess2 e con limitazione ad un solo punto di connessione, nei prossimi mesi avremo aggiornamenti EB pro che permetteranno il Bridge in rete locale (ovvero senza l’uso di EA2).

    3) Stessa domanda del punto 2) ma da internet con EasyAccess.
    Vedi risposta sopra, in più anche in questo caso ci saranno aggiornamenti durante l’anno (indicativamente subito dopo l’estate) che permetteranno di collegarsi a più dispositivi contemporaneamente.

    in risposta a: Utilizzare ATC1000 per aggiungere porte seriali a SlimLine #46899
    Sergio Bertana
    Amministratore del forum

    Rispondo al post dopo avere “visionato” il programma del cliente che mi ha inviato in privato. Nell’applicazione il cliente utilizza i 15 ATC-1200 configurati in modalità UDP server, nel programma dello SlimLime ha istanziato 15 FB SysUDPClient per connettersi ai convertitori.

    Ogni convertitore ha un indirizzo IP univoco e tutti operano sulla stessa porta UDP, ai convertitori sono collegati in RS485 dispositivi in multidrop. Il problema sembrerebbe essere determinato dalla chiamata del blocco funzione che era condizionata dal programma (Se non serviva la comunicazione il FB non veniva eseguito).

    Per soluzionare occorre eseguire le 15 istanze del FB ad ogni loop di programma, e se si vuole diabilitare il dialogo con il convertitore occorre agire sull’ingresso di Connect del FB continuando ad eseguirlo.

    in risposta a: Bug su funzione “Limit” #46896
    Sergio Bertana
    Amministratore del forum

    Siamo in fase di rilascio (Tra qualche giorno) della versione PCK043B510 che soluziona il problema.

    in risposta a: Bridge BACnet-Modbus RTU #46854
    Sergio Bertana
    Amministratore del forum

    Tutti i terminali Weintek supportasno il protocollo BACnet, come unica nota è che si tratta di un protocollo particolare con “regole un pò open“, quindi a seconda dei dispositivi connessi si potrebbeo avere alcune limitazioni.

    Comunque è possibile testare il funzionamento del protocollo direttamente simulando il progetto con EasyBuilderPro. Se utilizzi BACnet su ethernet non c’è nessun problema basta che il dispositivo sia in rete con il PC. In caso di connessione seriale devi disporre della oppurtuna interfaccia.

    Per il trasferimento dei dati da BACnet a Modbus e/o da Modbus a BACnet puoi utilizzare l’oggetto Data Transfer. Per la scelta del dispositivo se ti serve solo un gateway puoi usare uno qualsiasi dei prodotti della famiglia CMT senza display.

    in risposta a: Gestione e-mail da HMI MT8050ie #46850
    Sergio Bertana
    Amministratore del forum

    Non c’è un modo automatico per il rinvio mail, quindi andrebbe gestito tutto manualmente (cosa fattibile per il backup degli storici) non tanto semplice per gli allarmi, in questo ultimo caso come idea, si potrebbe creare una categoria allarmi chiamiamola ombra , ovvero non storicizzata ne visualizzata appoggiata a bit LB del pannello che vengono attivati solo in caso di errore invio su allarme standard, ma la cosa non è cosi semplice, andrebbe gestito il bit di notifica degli allarmi o dei backup per poi andare a capire quale ha generato l’errore per poi tornare ad attivare il bit ombra corretto.

    Nel caso di attivazione quasi contemporanea di più allarmi e generazione errore invio mail non si riesce (in quanto non sincrona la risposta del server mail) a capire a quale è associato, ad uno all’altro ad entrambi, in questo caso è preferibile rinviarli entrambi rischiando un doppione.

    in risposta a: Comunicazione modbus tra SlimLine e Inverter #46756
    Sergio Bertana
    Amministratore del forum

    Il sistema SlimLine può fare sia da convertitore TCP/Seriale (Topic) che da convertitore Modbus TCP/Modbus RTU (Topic) ma queste due funzionalità nel tuo caso non servono. A quanto mi sembra di capire tu vuoi gestirte l’inverter da programma PLC.

    Per fare questo basta istanziare un FB ModbusMaster e gestire i comandi verso gli inverters (Puoi riferirti a questo topic). Certo era meglio utilizzare un modulo CPU MPS054A1*0 che ha già la porta seriale RS485 isolata, ma se hai il modello compact nella gamma dei convertitori Seriale/Seriale puoi trovare il convertitore che fà per te.

    In merito alla connessione TCP puoi usarla per connetterti con tutto quello che vuoi, gli unici limiti sono dati dalla quantità di sockets che il sistema può gestire (Ad oggi sono 32) e dall’utilizzo della memoria rilocabile RMalloc. Ogni socket utilizza la quantità di memoria definita nella sua creazione.

    in risposta a: Bug su modalità debug interattiva #46699
    Sergio Bertana
    Amministratore del forum

    Ecco la risposta di Axel

    Ma riassumendo, il problema è che su action FBD non è possibile forzare il valore di una variabile in live debug perché compare erroneamente la finestra delle proprietà?

    Non capisco cosa c’entra il simulatore…
    Con finestre aperte si intendono gli editor? Anche questa però mi sembra una cosa ininfluente, corretto?

    Credo che per venire a capo dei tuoi problemi sia meglio che tu contatti direttamente il supporto di Axel evitando triangolazioni in questo modo puoi indicare direttamente a loro i problemi.

    in risposta a: Informazioni su warning del compilatore #46698
    Sergio Bertana
    Amministratore del forum

    La funzione POW opera su variabili REAL, quindi se tu passi alla funzioni variabili o valori diversi da REAL il compilatore ti genera le warning riportate.

    Ti faccio un esempio in ST Result:=POW(2, 3); genera le warning perchè i valori 2 e 3 sono considerati interi. Se invece scrivi Result:=POW(2.0, 3.0); le warning spariscono (Naturalmente Result deve essere di tipo REAL).

    In pratica quando scrivi una costante in una variabile di tipo REAL devi sempre mettere il decimale (2.0). Nel tuo caso poi che copi una variabile intera di tipo USINT in una variabile REAL devi mettere l’operatore TO_REAL.

    Result:=POW(2.0, TO_REAL(Exponent));

    La stessa cosa se vuoi trasferire il risultato di POW in una variabile intera di tipo UINT devi scrivere

    Result:=TO_UINT(POW(TO_REAL(Base), TO_REAL(Exponent)));

    in risposta a: Problemi con elevazione a potenza #46695
    Sergio Bertana
    Amministratore del forum

    Il problema è nella risoluzione dei numeri a virgola mobile, il formato REAL utilizzato sia dal sistema reale che dal simulatore è IEEE 754 su 32 bits. Questo formato su numeri molto piccoli e molto grandi ha imprecisioni fisiologiche che percentualmente sul valore del numero incidono pochissimo. Nel caso (7^10) hai un errore di 15 su oltre 282 milioni.

    Come risolvere… la prima idea che mi viene se utilizzi sempre numeri interi è lavorare con UDINT e non con REAL ecco il listato di una funzione RToPower che eleva a potenza (Screenshot e download progetto).

    FUNCTION RToPower: UDINT
    VAR
    i : UDINT; (* Auxiliary variable *)
    END_VAR
    
    VAR_INPUT
    Base : UDINT; (* Base value *)
    Exponent : UDINT; (* Esponent value *)
    END_VAR
    
    IF (Exponent = 0) THEN RToPower:=0; RETURN; END_IF;
    RToPower:=Base; //Result
    IF (Exponent = 1) THEN RETURN; END_IF;
    
    FOR i:=0 TO (Exponent-2) DO
    RToPower:=RToPower*Base;
    END_FOR;
    in risposta a: Bug su funzione “Limit” #46682
    Sergio Bertana
    Amministratore del forum

    Si è un bug conosciuto, lo abbiamo già risolto ma la versione del firmware con la soluzione non è ancora rilasciata, stiamo ancora implementando alcune migliorie.

    Come workaround puoi realizzare una function limit sostitutiva, ecco lo screenshot del programma MyLimit con il sorgente della funzione (Download programma).

    in risposta a: Definizione di costanti utilizzabili nel programma #46674
    Sergio Bertana
    Amministratore del forum

    Anche se è possibile dichiarare una variabile mappata in memoria accessibile da Modbus come costante, non sarebbe  comunque impedita la scrittura della stessa da Modbus.

    Siccome il protocollo Modbus viene gestito in Back prima di iniziare l’esecuzione dei programmi utente, se non vuoi che l’eventuale modifica da modbus sia vista dal programma (Ma questo vale solo per i programmi eseguiti in Back) puoi eseguire come prima operazione la valorizzazione della variabile con il valore costante che deve avere.

    in risposta a: Datalogger con memorizzazione dati su SDCard #46665
    Sergio Bertana
    Amministratore del forum

    Questo programma può essere un suggerimento

    VAR
    EpochTime : UDINT; (* Epoch time *)
    TimeBf : UDINT; (* Time buffer (uS) *)
    Milliseconds : UDINT; (* Tempo in mS *)
    TimeDf : UDINT; (* Time difference (uS) *)
    TimeSetup : BOOL; (* Setup time *)
    END_VAR
    
    IF (TimeSetup) THEN
    TimeSetup:=FALSE; //Setup time
    EpochTime:=SysDateTime; //Time reference (Epoch)
    TimeBf:=SysGetSysTime(TRUE); //Time buffer (uS)
    Milliseconds:=0; //Tempo in mS
    END_IF;
    
    TimeDf:=SysGetSysTime(TRUE)-TimeBf; //Time difference (uS)
    IF (TimeDf >= 1000) THEN
    TimeBf:=SysGetSysTime(FALSE)-(TimeDf-1000); //Time buffer (uS)
    Milliseconds:=Milliseconds+1; //Tempo in mS
    
    IF (Milliseconds >= 1000) THEN
    Milliseconds:=Milliseconds-1000; //Tempo in mS
    EpochTime:=EpochTime+1; //Time reference (Epoch)
    END_IF;
    END_IF;

    Su comando TimeSetup setto EpochTime con tempo di sistema (Ma potrei sincronizzarlo ad esempio con un server NTP) e poi ogni 1 mS incremento il valore di Milliseconds ed ogni secondo il valore di EpochTime. Nota la riga:

    TimeBf:=SysGetSysTime(FALSE)-(TimeDf-1000);

    La chiamata SysGetSysTime(FALSE) ritorna lo stesso valore ritornato alla precedente chiamata SysGetSysTime(TRUE), eseguendo la differenza (TimeDf-1000) tengo conto dell’errore sul controllo del tempo per compensare il tempo di jitter sulla esecuzione del programma (Download programma mSecTime).

    in risposta a: Gestione I/O logici da task Fast #46663
    Sergio Bertana
    Amministratore del forum

    Lo scenario descritto funziona senza problemi, puoi acquisire in task Fast il blocco degli ingressi (Senza debouncing) ed utilizzare i due ingressi in immagine di processo con il debouncing.

    Naturalmente nell’immagine di processo saranno trasferiti tutti i 16 ingressi e  potresti leggerli tutti con il debouncing in immagine di processo e senza debouncing in task Fast. Ma se non ti servono puoi assegnare uno mnemonico solo ai 2 che ti interessano.

    in risposta a: Visualizzare messaggi aggiuntivi su allarmi #46658
    Sergio Bertana
    Amministratore del forum

    Si lo puoi fare, ecco un suggerimento, nella lista allarmi nel menu messaggio puoi associare un valore ad ogni allarme (o gruppi se uguale), quindi associare una variabile anche locale del pannello all’indirizzo riconoscimento nel visualizza allarmi e/o eventi.

    A questa variabile puoi quindi associare un Oggetto->Pagina->Pagina indiretta, cosi facendo quando l’operatore preme su una riga del display dove è presente un allarme viene preso il valore associato a tale allarme e quindi scritto nella variabile di riconoscimento attivando la pagina indiretta con tutto quello che ti può servire di aggiuntivo. Per chiuderla basta rimettere a 0 la word di riconoscimento. Sperando di essere più chiaro ti allego alcuni screenshots.

Stai visualizzando 15 post - dal 1,651 a 1,665 (di 4,381 totali)