Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Sergio Bertana
Amministratore del forumCODESYS è 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.
Sergio Bertana
Amministratore del forum1) 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 differenti2) 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.Marzo 14, 2019 alle 3:17 pm in risposta a: Utilizzare ATC1000 per aggiungere porte seriali a SlimLine #46899Sergio Bertana
Amministratore del forumRispondo 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.
Sergio Bertana
Amministratore del forumSiamo in fase di rilascio (Tra qualche giorno) della versione PCK043B510 che soluziona il problema.
Sergio Bertana
Amministratore del forumTutti 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.
Sergio Bertana
Amministratore del forumNon 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.
Sergio Bertana
Amministratore del forumIl 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.
Sergio Bertana
Amministratore del forumEcco 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.
Sergio Bertana
Amministratore del forumLa 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)));
Sergio Bertana
Amministratore del forumIl 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;Sergio Bertana
Amministratore del forumSi è 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).
Febbraio 15, 2019 alle 3:40 pm in risposta a: Definizione di costanti utilizzabili nel programma #46674Sergio Bertana
Amministratore del forumAnche 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.
Sergio Bertana
Amministratore del forumQuesto 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).
Sergio Bertana
Amministratore del forumLo 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.
Sergio Bertana
Amministratore del forumSi 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.
-
AutorePost