Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Sergio Bertana
Amministratore del forumCome dicevo la connessione UDP client non prevede meccanismi di sincronizzazione con il server come nel caso di connessioni TCP. Quindi nel tuo caso vedrei bene utilizzare un unico SysUDPClient per gestire tutte le connessioni, e potresti istanziarlo direttamente nella tua FB. Così passi alla FB solo l’indirizzo IP e la porta a cui deve connettersi.
In merito al FILEP, quando abiliti l’FB SysUDPClient potrebbero essre necessari più loop di programma prima che l’uscita File sia valorizzata. Nel tuo programma precedente tui passavi questa uscita sempre alla FB ModbusMaster, e quindi questa veniva eseguita magari alcuni loop senza FILEP corretto (Se guardi il log avrai degli errori) e poi quando era valorizzato il FB lavorava corettamente.
Sergio Bertana
Amministratore del forumPremetto che non ho ben capito il tuo problema, quello che hai fatto nella dichiarazione dei parametri del tuo blocco funzione è corretto. Dichiari un parametro in ingresso di tipo FILEP che poi lo passerai alla FB ModbusMaster che avrai istanziato nel tuo blocco funzione.
Ora hai un errore in compilazione, oppure non ti funziona il programma ?
Nel mdb.Done disabiliti il Connect dell’UDP client. Questo è inutile, l’UDP non è un socket come il TCP che si “ricorda” i dati di connessione, quando invii dati al file del UDP client questo li invia all’altro sistema e poi rilascia le risorse. Quindi puoi tenerlo sempre in condizione di Connect attivo, visto che hai definito un LifeTime, se su quel client non passano dati per il tempo definito automaticamente si disabilita e riabilita dopo un piccolo tempo. Ma nel tuo caso tu hai sempre comunicazione.
Il valore di IFTime del ModbusMaster su comunicazioni UDP e TCP visto che i pacchetti sono piccoli (<1Kb) quindi sono inviati in un unico frame si può impostare a “0” con vantaggi sul tempo di comunicazione.
Sergio Bertana
Amministratore del forumSembra che hai definito una qualche variabile con il nome “LD” o qualcosa di simile, per capire dovresti inviare alla nostra mail di supporto il tuo progetto Logiclab così possiamo verificare direttamente per capire l’errore.
Sergio Bertana
Amministratore del forumPer difendersi al meglio e per evitare tutte le problematiche di avere una connessione con IP pubblico, consiglio di inviare dallo SlimLine i dati nel cloud. In questo modo non devi aprire nessuna porta in ingresso e quindi non esiste la possibilità di connettersi allo SlimLine.
Per fare questo puoi usare i protocolli MQTT o il REST (Se cerchi nella nosta Knowledge troverai molti articoli che ne parlano) puoi guardare ad esempio questo articolo o questo articolo.
Sergio Bertana
Amministratore del forumAvendo aperto anche solo 1 porta e nel tuo caso hai sicuramente aperto la porta 80 per il server HTTP, chiunque da ogni parte del mondo può accedere al tuo sistema e cercare di entrare generando una serie di errori.
L’errore 5330 indica che si è ricevuto un pacchetto TCP con checksum errato, il fatto che si ripeti ogni 30 secondi è perchè in caso del ripetersi di un errore viene salvato solo ogni 30 secondi.
L’errore 6675, indica che qualcuno da IP e porta ha cercato di connettersi, ha iniziato la sequenza di Three-Way Handshake ma poi non l’ha portata a termine nel tempo predefinito.
Sergio Bertana
Amministratore del forumPer fare quello che hai bisogno oltre al modulo CPU SlimLine Raspberry, ti occorre un modulo di estensione Mixed I/O per acquisire l’ingresso analogico di tensione batteria e l’ingresso digitale di controllo.
E’ possibile gestire i moduli estensione tramite una libreria dinamica .so richiamabile da C++ e da Python, anche se il mio consiglio è di realizzare il programma di gestione degli I/O in IEC61131 utilizzando l’ambiente di sviluppo LogicLab.
Per lo scambio dati tra l’ambiente LogicLab ed il programma Python lo puoi realizzare utilizzando una comunicazione TCP in localhost. Visto che citi la possibilità di avere una pagina web perchè non utilizzare Node-RED al posto del Pyton ? (Vedi esempio).
Se utilizzi un server SNMP in rete locale senza connessione in TSL puoi fare tutto quello che hai bisogno utilizzando il solo modulo CPU SlimLine CortexM7 che ha già a bordo 2 ingressi analogici e 2 ingressi digitali. Ha il server HTTP per eventuali pagine web e con il FB EMailSend puoi inviare la mail.
PS. Tutti i programmi sviluppati su CPU Cortex M7 possono essere eseguiti anche sul modulo CPU SlimLine Raspberry in concorrenza con qualsiasi altro applicativo C++, Python, Node-RED, ecc..
Sergio Bertana
Amministratore del forumL’errore indica che sono stati utilizzati e mantenuti contemporaneamente aperti tutti i 32 sockets gestibili.
Consiglio di definire il parametro LifeTime per chiudere automaticamente i sockets dove non vi è traffico, altrimenti in caso di disconnessione hardware del client, esempio un client remoto connesso ad un socket server sullo SlimLine via WiFi o da Internet viene spento, non potendo eseguire la corretta sequenza di chiusura mantiene il socket appeso ed occupato.
Il comando NetStat da Telnet ritorna l’elenco dei sockets utilizzati dal sistema.
Sergio Bertana
Amministratore del forumEssendo connesso tramite un router 4G che di solito salvo espressa richiesta è NATtato non dovrebbe essere possibile ricevere connessioni in ingresso. Però dal file di log si evince con certezza che la connessione arriva da IP esterni alla rete quindi qualcuno in quella rete fà passare richieste dall’esterno.
Si per vedere da Internet le pagine web devi aprire la porta 80, se vuoi vederlo anche da Telnet devi aprire la porta 23, per l’FTP le porte da aprire sono la 21 e la 1024 (Modificabili da web page) tutte queste connessioni sono protette da password.
Se vuoi programmarlo con LogicLab devi aprire la porta 502 (Questa porta non è protetta da password), però accertati che il tuo gestore 4G ti dia un IP pubblico.
Sergio Bertana
Amministratore del forumNon sò che versione hai di sistema operativo, ecco per categoria di errori la spiegazione
[E] SFW198 [09/10/2019 03:27:31] 3110, Wrong ARG:m
Error 3110: Argomento (es.: “UINT 10”) errato in pagina web[E] SFR055 [09/10/2019 03:22:19] 6670, [5] IP:152.136.69.250:55461
Error 6670: TCP active close timeout (Nessuna risposta alla chiusura intrapresa da SlimLine) di una connessione con IP:Port.[E] SFR055 [09/10/2019 03:04:26] 6675, [5] IP:112.29.140.221:38008
Error 6675: Passive open timeout (quindi qualcuno che cerca di collegarsi) da IP:PortA quanto mi sembra di capire lo SlimLine si connette ad Internet tramite un router, ma non deve essere accessibile da Internet, quindi il firewall deve bloccare tutte le connessioni in entrata.
E’ consigliabile verificare di avere l’ultima versione di sistema opeartivo, eventualmente provvedere all’aggiornamento.
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.
-
AutorePost