Risposte nei forum create
-
AutorePost
-
Sergio Bertana
Amministratore del forumSi in effetti ho provato a compilare il vecchio progetto e vi erano i due errori che tu lamenti. Così essendo un vecchissimo progetto ho pensato di aggiornarlo utilizzando la nuova versione della libreria eLLabModemLib_F100.
Ho riscritto il programma principale in FBD, ma non ho provato il progetto, lascio a te il compito di testarlo ed eventualmente dirmi se hai problemi, ti lascio il progetto MultipleSMS_v1 per il download.
Sergio Bertana
Amministratore del forumNo l’unico Data Block accessibile da Modbus è il DB100 accessibile con indirizzo Modbus 40000. Le System variables di sola lettura a cui tu fai riferimento sono mappate nel DB 0 e sono accessibili da programma utente con il loro indirizzo o meglio con il loro mnemonico, ma non possono essere lette da Modbus. La stessa cosa dicasi per le System variables di lettura e scrittura mappate nel DB 1.
Se ti serve accedere a queste variabili da Modbus li devi appoggiare ad una variabile allocata nel DB100.
Ottobre 22, 2019 alle 6:19 am in risposta a: Velocità comunicazione convertitore Ethernet-seriale ATC-1000 #50296Sergio Bertana
Amministratore del forumIl convertitore Ethernet/Seriale ATC-1000 è l’entry level a basso costo di una gamma di convertitori prodotta da ATC e il processore utilizzato non è tra i più veloci della gamma. Comunque è il convertitore Ethernet/Seriale più venduto e non abbiamo mai avuto feedbacks negativi sulla velocità.
Lo utilizzano moltissimi clienti per comunicazioni RS485 con inverter nel campo fotovoltaico o per acquisizione dati in automazione. Naturalmente come dico a tutti a volte il software di virtualizzazione introduce problemi e qui magari si può provare a utilizzare un software di virtualizzazione diverso. Puoi provare il HW VSP3 – Virtual Serial Port scaricabile dal nostro sito nella sezione download.
Dove è possibile consiglio di non utilizzare il software di virtualizzazione COM ma di accedere direttamente al convertitore con una connessione TCP/IP.
Venendo al tuo problema posso dirti di provare una connessione in UDP (Che non gestendo l’Ack è più veloce). Se puoi verifica la velocità con una connessione diretta in TCP senza usare il virtual COM.
Nei parametri di configurazione nel menù UART, hai mica impostato un valore di delimitazione sul Silent time ? Perchè in questo caso il convertitore attende il tempo impostato prima di inviare il pacchetto dati.
Sergio Bertana
Amministratore del forumIl tuo problema nasce dal fatto che non hai messo la spunta sul rispetto delle maiuscole/minuscole nel progetto, di default LogicLab lo lascia non attivo, occorre mettere manualmente la spunta. Troverai una indicazione come questa in molti post del forum.
Nel progetto conviene sempre attivare il tick Case sensivity, nel menù Project-> Options (Screenshot). In questo modo si controlla il case delle lettere nei nomi di variabili e funzioni evitando di dare nomi a variabili che possono essere in contrasto con nomi già predefiniti.
Poi se vuoi un esempio completo di utilizzo puoi fare riferimento alla knowledge relativa.
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.
-
AutorePost