Risposte nei forum create
-
AutorePost
-
Sergio Bertana
Amministratore del forumAttualmente non è presente alcuna variabile che indichi che tipo di avvio ha avuto il sistema, ma trovo interessante l’idea e vediamo se possiamo inserire anche questa possibilità in una prossima release del sistema operativo.
Se vuoi “capire” che il sistema si è riavviato per un watchdog creato da te nel programma (Loop infinito), c’è un workaround. Prima di fermarti nel loop scrivi in una locazione di memoria backup un determinato valore (Esempio supponendo un UDINT 16#12345678). Poi attendi qualche secondo per garantire l’avvenuto backup del dato, puoi anche sincronizzarti testando la variabile SysBackupEnd, che dovrà attivarsi almeno 2 volte.
Ora alla accensione controlli il valore della variabile e se è il valore da te definito il sistema si è riavviato a causa del tuo comando. Naturalmente appena dopo il controllo devi porre a 0 il valore della variabile.
Ottobre 11, 2019 alle 2:33 pm in risposta a: Connettere dispositivi I2C al bus di espansione SlimLine #50192Sergio Bertana
Amministratore del forumTutti gli oggetti funzioni ed FB il cui nome inizia per Sys, sono oggetti di sistema, quindi sono embedded e quindi essendo insiti nel sistema operativo sono sempre disponibili.
Il fatto she venga indicato XTarget_07_0, significa che era già disponibile da quella versione di target, oggi siamo ad XTarget_12.
Per vederla se apri la finestra delle librerie embedded in LogicLab <Ctrl-L> oppure menù View -> Tool Windows -> Operators and blocks vedrai che la trovi. Posizionandoti con il mouse sull’oggetto lo puoi trascinare nel progetto e con l’oggetto selezionato il tasto [F1] apre il manuale sulla pagina contestuale.
Sergio Bertana
Amministratore del forumSi effettivamente c’è un limite sulla dimensione del testo della mail, attualmente è bloccato a 256 caratteri. Stiamo ripensando alla gestione della mail anche nell’ottica della crittografia, appena riusciamo a risolvere i problemi usciremo con qualcosa di nuovo e più performante.
Sergio Bertana
Amministratore del forumIl comportamento della configurazione del sistema da pagina web è riportato in questo topic.
Sergio Bertana
Amministratore del forumAttivando il client DHCP lo SlimLine alla accensione cerca il server DHCP e se lo trova richiede i parametri di configurazione. Parametri che sono utilizzati per configurare l’interfaccia di rete e che sono visualizzati nella finestra relativa (Screenshot) (Nell’esempio abbiamo IP:192.168.1.77, MASK:255.255.254.0, GATEWAY:192.168.0.1, …).
Ma se il server DHCP non viene trovato il sistema viene configurato con i parametri impostati tramite il pop-up di configurazione (Nell’esempio abbiamo IP:192.168.0.125, MASK:255.255.254.0, GATEWAY:192.168.0.1, …).
I parametri di configurazione (Quelli impostabili nel pop-up) sono gestibili anche da programma utente tramite la funzione SysOSIDValue, utilizzando gli IDs:
OSID_ETH0_DHCP_DNS BOOL (ETH0) Enable DNS acquisition from DHCP
OSID_ETH0_DHCP_EN BOOL (ETH0) Enable IP acquisition from DHCP
OSID_ETH0_DNS_PRIMARY USINT[4] (ETH0) Primary DNS IP address
OSID_ETH0_DNS_SECONDARY USINT[4] (ETH0) Secondary DNS IP address
OSID_ETH0_GATEWAY USINT[4](ETH0) Gateway IP address
OSID_ETH0_IP USINT[4] (ETH0) IP addressAl momento attuale non sono definiti OSID per la lettura della configurazione attuale attiva sulla interfaccia ethernet.
Nota: Se si desidera che i parametri settati con la funzione SysOSIDValue rimangano salvati nella configurazione del sistema occore eseguire la funzione con OSID_CFG_WRITE.
Sergio Bertana
Amministratore del forumSe usi un sistema basato su Cortex M7 puoi mettere l’URL, il sistema gestisce automaticamente la richiesta al server DNS (Naturalmente devi avere impostato correttamente l’indirizzo IP del server DNS nella configurazione di rete).
Ma non capisco cosa c’entra il creare regole sul router a cui è collegato il PLC, l’FTPClient è appunto un client quindi esce automaticamente sulla rete. Magari il tuo problema è il non avere settato correttamente il gateway nelle impostazioni di rete.
Prova connettendoti in telnet da locale allo SlimLine ad eseguire un comando di ping verso un URL su Internet (Esempio Ping google.com) così verifichi se lo SlimLine può accedere alla rete Internet. Se non funziona hai problemi nella impostazione del gateway.
Settembre 26, 2019 alle 12:03 pm in risposta a: Realizzare DataLogger con storicizzazione su server FTP #50075Sergio Bertana
Amministratore del forumHai impostato correttamente il Gateway ?
Ricordo che il router che in questo caso fa da gateway deve essere mappato nella stessa classe di indirizzi dello SlimLine.
Sergio Bertana
Amministratore del forumRispondo con ritardo perchè il post era finito in SPAM, ma la domanda può essere utile ad altri.
9943135 Errore risoluzione indirizzo, indice che il client UDP non riesce a risolvere l’indirizzo IP a cui connettersi. In effetti da quello che scrivi sembra tu passi l’URL del server, ma sui sistemi ARM come l’MPS046 il sistema operativo non ha la gestione del DNS e non può risolvere gli URLs.
La gestione del server DNS è stata introdotta sui sistemi CortexM7, sui sistemi ARM occorre passare l’indirizzo IP, eventualmente è possibile da programma utilizzare il FB DNSRequest per eseguire la richiesta al server DNS di risoluzione URL e poi passare al FB SNTPRequest l’indirizzo IP ritornato.
Sergio Bertana
Amministratore del forumLa nostra applicazione DataExchange fà al caso tuo, utilizzando due moduli CPU SlimLine Compact Ethernet che hanno 6 ingressi digitali, 2 ingressi analogici e 4 uscite digitali cadauno tu puoi scambiare su connessione ethernet gli I/O tra un sistema e l’altro.
Nel tuo caso collegherai la porta ethernet alla tua rete WiFi ed i due sistemi dialogheranno tramite la connessione WiFi. Per quanto riguarda la temporizzazione nessun problema i sistemi SlimLine sono programmabili e puoi fare tutte le temporizzazioni che desideri.
Sergio Bertana
Amministratore del forumLa gestione integrata del display purtruppo ha regole definite che non sono modificabili, quindi per passare da una variabile all’altra di un messaggio si utilizza il tasto [F] eseguita l’inputazione del valore ed accettata con il tasto [E] si riparte della prima variabile.
Ma se tu definisci un messaggio con due variabili stringa da 16 caratteri (Esempio RowUp e RowDw) e poi da programma le gestisci puoi fare quello che vuoi. Ti ho postato un esempio dove realizzi quello che chiedi, tralasciando le inizializzazioni che trovi nel progetto (Download NetlogCustomMsg), ecco il “succo” del programma.
// ------------------------------------------------------------------------- // GESTIONE MESSAGGIO // ------------------------------------------------------------------------- // Se sono nel messaggio #2 gestisco direttamente il display. IF (Messages.MsgID = 2) THEN i:=SysVarsnprintf(ADR(RowUp), SIZEOF(RowUp), '%s', STRING_TYPE, ADR('0-1-2-3-4-5-6-7 ')); i:=SysVarsnprintf(ADR(RowDw), SIZEOF(RowDw), '%s', STRING_TYPE, ADR('0 0 0 0 0 0 0 0 ')); // Stampo valore variabile. FOR i:=0 TO 7 DO Ptr:=VAdd[i]; //Auxiliary pointer IF (@Ptr <> 0) THEN Ptr:=ADR(RowDw)+(i*2); @Ptr:=16#31; END_IF; END_FOR; // Il messaggio non ha sottomessaggi quindi i tasti [<] e [>] non sono // gestiti. Sulla loro pressione seleziono la variabile da modificare // e la visualizzo rendendola lampeggiante. IF (Display.KeyLEFT <> KeyLEFT) THEN KeyLEFT:=Display.KeyLEFT; //Tasto [<] IF (Display.KeyLEFT AND (VNr > 0)) THEN VNr:=VNr-1; END_IF; END_IF; IF (Display.KeyRIGHT <> KeyRIGHT) THEN KeyRIGHT:=Display.KeyRIGHT; //Tasto [>] IF (Display.KeyRIGHT AND (VNr < 7)) THEN VNr:=VNr+1; END_IF; END_IF; // Eseguo lampeggio variabile selezionata. IF (SysClock1000) THEN Ptr:=ADR(RowDw)+(VNr*2); @Ptr:=16#20; END_IF; // Con il tasto [E] eseguo variazione variabile. IF (Display.KeyENT <> KeyENT) THEN KeyENT:=Display.KeyENT; //Tasto [E] Ptr:=VAdd[VNr]; //Auxiliary pointer IF (Display.KeyENT) THEN @Ptr:=@Ptr XOR 16#01; END_IF; END_IF; END_IF;Sergio Bertana
Amministratore del forumL’esempio è nel programma che trovi sul manuale della FB MQTTBeebotte, in pratica ammettendo di dover pubblicare 8 variabili avremo.
// Dichiarazione array di 8 pubblicazioni. TPublish : ARRAY[ 0..7 ] OF TPBeebotte; (* Topic publish *) // Definizione per ogni pubblicazione della variabile da pubblicare. // Viene definito il canale e la risorsa "Channel/Resource" // Il tipo e l'indirizzo della variabile il cui valore và pubblicato. TPublish[0](Resource:=ADR('Channel/Resource1'), DType:=REAL_TYPE, DBuffer:=ADR(Var1), DBLength:=0); TPublish[1](Resource:=ADR('Channel/Resource2'), DType:=BOOL_TYPE, DBuffer:=ADR(Var2), DBLength:=0); ... TPublish[7](Resource:=ADR('Channel/Resource7'), DType:=UINT_TYPE, DBuffer:=ADR(Var7), DBLength:=0); // Eseguo pubblicazione ogni 5 secondi. IF ((SysGetSysTime(TRUE)-TimeBf) > 5000000) THEN TimeBf:=SysGetSysTime(TRUE)-TimeBf); //Time buffer (uS) FOR i:=0 TO 7 DO TPublish[i].Publish:=TRUE; END_FOR; END_IF;Naturalmente la definizione dell’array và definita nella zona delle dichiarazioni, l’inizializzazione si può fare al primo loop ed il resto nel main. Ma se segui quanto riportato nel manuale credo sia tutto chiaro.
Sergio Bertana
Amministratore del forumPer l’import delle TAGS dal TIA 15.1 al momento occorre rinominare il file xxx.ap15_1 in xxxx.ap15 ed importare il file di tag in EasyBuilder Pro. Terminata l’importazione può risistemare l’estensione per aprirlo con il TIA portal.
Weintek stà lavorando per risolvere il problema, appena possibile rilascerà una nuova versione di EasyBuilder Pro.
Settembre 20, 2019 alle 6:32 am in risposta a: Realizzare DataLogger con storicizzazione su server FTP #49792Sergio Bertana
Amministratore del forumIl FB FTPClient se ha Connect=TRUE cerca di connettersi al server FTP, se non ci riesce (Come nel tuo caso che hai staccato il cavo) dopo il tempo di timeout genera errore 10063050 disabilita la connessione e la riabilita ritentando di connettersi.
Se non c’è connessione è inutile passare a cases successivi, quindi il programma non passa volutamente al case 20 ma continua ad aspettare di completare la connessione. Se tu riattacchi il cavo il tutto dovrebbe ripartire.
Certo in questa condizione essendo fermo nel case 11 continuerei ad avere il file di log locale bloccato ed i records di log andrebbero a saturare il FIFO. Ma se non si riesce a connettersi al server FTP non c’è molto altro da fare.
Nel tuo caso avendo tolto il controllo su Store salti al case 20 temporizzi poi riprovi e dopo 3 tentativi riprendi a salvare nel file di log locale riprovando ad inviarlo alla prossima scadenza. Può essere una soluzione per problemi di connessione che durano molto tempo. Ma se il cavo di rete si stacca continuerai a salvare nello stesso file di log saturandolo. Nel caso prevedere un qualche avviso magari con lampade di segnalazione o altro.
Settembre 19, 2019 alle 9:44 am in risposta a: Realizzare DataLogger con storicizzazione su server FTP #49786Sergio Bertana
Amministratore del forumIl programma utilizza il FB FIFO per gestire il logging, in questo modo il record di log viene salvato nel file di FIFO e poi se il file di log è libero viene trasferito nel file di log (Case 0), questo permette di non perdere records quando il file di log è occupato dal trasferimento in FTP.
Quando viene comandato il trasferimento del file di log sul server (Case 10) iniziano le sequenze di connessione che potrebbero andare in errore, in tal caso si attiverebbe l’uscita Fault che porta l’esecuzione sul Case 20.
In caso di errore viene incrementato il numero di errori ed atteso un tempo prima di ritentare l’invio.
Quindi si certo il programma rimane bloccato nel Case 11 fino alla avvenuta connessione con il server ma se non riesce a connettersi dopo il tempo definito nel parametro Timeout (Vedi FTPClient_v1) si attiva l’uscita Fault. Stesso discorso per il Case 12 dove viene atteso il completo trasferimento del file.
Sergio Bertana
Amministratore del forumSe fai riferimento al manuale della FB MQTTBeebotte, vedrai che ho allocato un array di FB TPBeebotte, ed ad ogni attivazione del bit di Publish della FB viene inviato il dato indirizzato dal parametrio Resource alla piattaforma Beebotte.
Quindi nel tuo caso puoi definire un array di 16 FB TPBeebotte, ed abbinare ad ognuna la variabile REAL e BOOL che devoi inviare al servizio, alla attivazione del comando di Publish di ognuna la relativa variabile sarà inviata. Puoi anche attivare contemporaneamente tutti e 8 i bit di comando, l’invio verrà poi automaticamente gestito dalla FB.
-
AutorePost