Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Marzo 22, 2023 alle 2:44 pm in risposta a: Rilevazione e storicizzazione dati sedi produttive #71137
Sergio Bertana
Amministratore del forumPossiamo offrire i sistemi STE2 con le relative sonde ambientali e sonde di corrente monofase. Questi prodotti supportano il protocollo SNMP e/o possono inviare dati al portale dedicato SensDesk.
In alternativa la gamma di sensori temperatura/umidità wireless Aranet, che si connettono alla stazione base Aranet pro, che può essere interrogato con protocollo Modbus TCP e/o inviare dati al portale dedicato Aranet cloud.
Altra possibilità è utilizzare i sensori di temperatura Comet, che si possono interrogare in Modbus TCP e/o inviare dati al portale dedicato.
Infine è possibile utilizzare i nostri sistemi programmabili SlimLine per gestire la connessione in SNMP, Modbus TCP con i sensori visti precedentemente e/o per collegare sensori combinati temperatura/umidità, meter di energia monofase e trifase in RS485. I dati rilevati possono essere storicizzati nel PLC e/o inviati ad un server FTP per la storicizzazione.
Utilizzando il protocollo MQTT è possibile inviare i dati ad un portale pubblico IoT ad esempio Beebotte od a un sito web realizzato ad-hoc per le proprie esigenze.
Marzo 21, 2023 alle 6:07 pm in risposta a: Comunicazione Modbus RTU fra CMT-SVR-100 e Yotta A-1012 #71049Sergio Bertana
Amministratore del forumSei caduto nella “trappola” della documentazione Modbus dove molti produttori indicano con la prima cifra il tipo di comando Modbus da utilizzare (In questo caso 4xxxx, comando 04 Read input registers).
In realtà proprio come hai visto tu quando nel manuale indicano 40131 si vuole indicare di eseguire un comando di 4x Read input register all’indirizzo 131. Modbus ha offset 1, e tu invece hai usato il Modbus RTU Zero Based Addressing, quindi l’offset lo devi sottrarre tu dalla definizione dell’indirizzo.
Sergio Bertana
Amministratore del forumIn effetti ci siamo accorti di un BUG, eseguendo il backup viene creato il file temporaneo UplInfos.ini sul disco definito.
Ora avendo formattato la SDCard in FAT32, come indicato in questo articolo, si possono utilizzare solo nomi di lunghezza massima 8+3 e tutti in maiuscolo. Quindi il file temporaneo non è possibile crearlo.
In attesa di risolvere il BUG su una prossima versione di sistema operativo, ti consiglio di formattare la SDCard con il formato FAT_32_ELS e per trasferire il file ssu PC utilizza una connessione in FTP.
Sergio Bertana
Amministratore del forumIn effetti nelle vecchie versioni di LogicLab in caso di sovrapposizione di variabili appariva un pop-up di alert, ora non appare più.
Sinceramente non mi sono posto il problema ma ho girato la domanda al supporto Axel, posterò la risposta appena la ricevo.
Le opzioni a cui ti riferisci, riguardano il comportamento di LogicLab quando importi un programma o variabili. Trovi le spiegazioni sul manuale al capitolo MERGE FUNCTION.
Marzo 21, 2023 alle 10:53 am in risposta a: Policy servizio Weincloud, piattaforma di monitoraggio su cloud #71023Sergio Bertana
Amministratore del forumQui trova i prezzi per il servizio WeinCloud Dashboard ed attualmente il costo è un canone annuale.
Se le macchine sono nella stessa sottorete si può convogliare nel possibile le informazioni su un unico HMI quindi ridurre il numero di canoni. Se invece le macchine sono dislocate in luoghi diversi occorre sottoscrivere canoni indipendenti.
Teoricamente però i canoni sono a carico del cliente finale che li mantiene per essere conforme con le richieste della normativa Industry 4.0. In ogni caso che si utilizzino SCADA o connessioni MQTT a portali IoT ci sarebbero costi sia di sviluppo che canoni per l’utilizzo.
Se utilizzi il protocollo MQTT sia da pannello Weintek che con i nostri prodotti SlimLine o puoi connetterti a Beebotte, ma anche in questo caso hai un canone da pagare.
Sergio Bertana
Amministratore del forumLa gamma degli inverter GD20 con ingresso monofase raggiunge al massimo la potenza di 2.2Kw.
Però anche con GD20 è possibile alimentare il modello trifase 230V come monofase, questo comporta un calo della massima corrente in uscita non quantificato da INVT.
Solitamente si suggerisce almeno una taglia sopra, se il motore viene utilizzato mediamente al 60% la sua potenza, magari può essere sufficiente l’inverter da 7,5kW (sarebbe quasi il doppio del motore), ma personalmente non ho dati alla mano per confermarlo.
Riguardo al parametro P11.00 si può impostare a 0 per disabilitare tutti i controlli sulla mancanza fase.
Sergio Bertana
Amministratore del forumTutti i convertitori Ethernet/Seriale hanno la possibilità di realizzare una rete point-to-point, in pratica occorre configurare un convertitore come Server e l’altro come Client.
Nella configurazione del Client occorre indicare l’indirizzo IP del convertitore Server a cui deve collegarsi. In questo modo i dispositivi seriali connessi ai convertitori potranno comunicare come se fossero connessi via cavo.
Naturalmente la conversione Seriale/Ethernet introduce ritardi nella comunicazione specie se la rete LAN è molto trafficata. Questi ritardi sono solitamente accettati da tutti i protocolli (Sicuramente lo sono nel protocollo Modbus), ma può essere che alcuni dispositivi come le centrali di allarme verifichino la latenza della comunicazione e vadano in blocco.
Per limitare i ritardi si può optare per una comunicazione UDP anzichè TCP, il protocolo UDP non prevede acknowledge sulle trasmissioni e quindi riduce il traffico ed i tempi.
Sergio Bertana
Amministratore del forumSe hai la necessità di conoscere l’indirizzo IP pubblico con il quale il tuo sistema SlimLine esce su Internet hai due possibilità.
Tutti i router supportano la registrazione presso servizi di Dynamic DNS, quindi puoi registrarti e poi eseguendo il FB DNSRequest effettuare la richiesta di risoluzione URL.
Ma se non vuoi appoggiarti a servizi di DNS dinamico puoi connetterti a siti che offrono gratuitamente il servizio di segnalazione indirizzo IP, ad esempio ipify.org. Inviando una richiesta API al sito ti verrà inviato in risposta una stringa con il tuo indirizzo IP pubblico, ecco il listato del programma HTTPIPIfy che esegue la richiesta. Attivando da debug la variabile Request nel buffer Page ti verrà ritornato il tuo indirizzo IP pubblico.
PROGRAM HTTPIPIfy VAR i : UDINT; (* Auxiliary variable *) Request : BOOL; (* Request command *) FlipFlop : BOOL; (* Program Flip/Flop *) Errors : UDINT; (* Execution errors *) Page : STRING[ 64 ]; (* Page buffer *) TCPClient : SysTCPClient; (* TCP client management *) HTTPRq : HTTPClient_v4; (* HTTP client *) END_VAR // ***************************************************************************** // PROGRAM "HTTPIPIfy" // ***************************************************************************** // The program send an API request to "api.ipify.org" and receive back the own // public IP address. // ----------------------------------------------------------------------------- // ------------------------------------------------------------------------- // INITIALIZATIONS // ------------------------------------------------------------------------- // Program initializations. IF (SysFirstLoop) THEN // Set TCPClient parameters. TCPClient.PeerAdd:=ADR('api.ipify.org'); //Peer address TCPClient.PeerPort:=80; //Peer port TCPClient.LocalAdd:=ADR('0.0.0.0'); //Local address TCPClient.LocalPort:=0; //Local port TCPClient.FlushTm:=50; //Flush time (mS) TCPClient.LifeTm:=20; //Life time (S) TCPClient.RxSize:=512; //Rx buffer size TCPClient.TxSize:=512; //Tx buffer size // Set HTTPClient parameters. HTTPRq.RMethod:=0; //Request method, GET HTTPRq.SpyOn:=TRUE; //Activate the spy HTTPRq.HostName:=TCPClient.PeerAdd; // Hostname HTTPRq.Page:=ADR(''); //Web page HTTPRq.Request:=eNULL; //Request string HTTPRq.Header:=eNULL; //HTTP header HTTPRq.DBSize:=512; //Data buffer size HTTPRq.Timeout:=10.0; //Execution timeout END_IF; // ------------------------------------------------------------------------- // MANAGE CONNECTION // ------------------------------------------------------------------------- // Manage the connection. TCPClient(Connect:=HTTPRq.Connect); //TCPClient management HTTPRq(File:=TCPClient.File); //HTTP client IF (HTTPRq.Fault) THEN Errors:=Errors+1; FlipFlop:=FALSE; END_IF; // ------------------------------------------------------------------------- // PROGRAM SEQUENCIES // ------------------------------------------------------------------------- // Program sequencies. IF NOT(FlipFlop) THEN // --------------------------------------------------------------------- // Wait for request command. HTTPRq.Enable:=FALSE; //HTTP enable HTTPRq.Send:=FALSE; //Send request IF NOT(Request) THEN RETURN; END_IF; Request:=FALSE; //Request command // Initialize buffers and enable client. i:=Sysmemset(ADR(Page), 0, SIZEOF(Page)); //Empty page buffer HTTPRq.Enable:=TRUE; //HTTP enable HTTPRq.Send:=TRUE; //Send request FlipFlop:=TRUE; //Program Flip/Flop ELSE // --------------------------------------------------------------------- // Page data are received from server by chunked. When a chunk has been // received DBChars returns its length. The API service sends back your // public IP address on a text string like: "xxx.xxx.xxx.xxx". IF ((HTTPRq.DBChars <> 0) AND (HTTPRq.HPSelector)) THEN IF ((Sysstrlen(ADR(Page))+HTTPRq.DBChars) < SIZEOF(Page)) THEN i:=Sysmemmove(ADR(Page)+Sysstrlen(ADR(Page)), HTTPRq.DBAddress, HTTPRq.DBChars); END_IF; END_IF; // On Done it's possible to test if page has been loaded. IF (HTTPRq.Done) THEN IF NOT(HTTPRq.PLoad) THEN Errors:=Errors+1; FlipFlop:=FALSE; RETURN; END_IF; // Here your public IP address is in the page buffer. FlipFlop:=FALSE; //Program Flip/Flop END_IF; END_IF; // [End of file]
Sergio Bertana
Amministratore del forumGrazie alle funzioni avanzate di backup & restore è possibile appogiandosi su di un server FTP eseguire l’aggiornamento automatico dei sistemi.
A questo scopo puoi fare riferimento a questo articolo in cui illustriamo una tecnica di aggiornamento FOTA, o firmware over-the-air dei sistemi.
Sergio Bertana
Amministratore del forumSe vuoi il tastierino personalizzato secondo le tue esigenze puoi partire da quello di sistema e modificarlo.
Sergio Bertana
Amministratore del forumTutte le tastiere del terminale in realtà sono pagine costruite con gli oggetti a disposizione in EasyBuilder. Se tu guardi nell’elenco pagine troverai le pagine 50-58 con tutte le tastiere numeriche e le pagine 60-65 con tutte le tastiere ASCII.
Quindi puoi tranquillamente crearti una tua pagina di tastiera modificando una di queste pagine oppure creando ex-nuovo una tua tastiera sia come dimensione che come formato.
Creata la tua tastiera, per attivarla nella definizione degli oggetti Numeric Object, ASCII object, ecc. nel TAB DataEntry dovrai definire la pagina di tastiera da visualizzare e la posizione in cui il pop-up dovrà apparire.
Marzo 13, 2023 alle 3:42 pm in risposta a: Come eseguire backup e restore di variabili ritentive #70849Sergio Bertana
Amministratore del forumCi sono 2 possibilità:
Accesso telnet al sistema, il comando PLCCommand esegue il backup/restore da file dell’intera area RETAIN della DB.100. Questo comando può solo operare sulla DB100.
- PLCCommand -pmbku File: Trasferisce nel File indicato tutta l’area ritentiva (DB 100) (Solo se programma PLC in stop)
- PLCCommand -pmres File: Trasferisce il contenuto del File nell’area ritentiva (DB 100) (Solo se programma PLC in stop)
Utilizzando il FB FileMemoryDump, in questo caso devi metterne la gestione nel tuo programma, questa soluzione ti permette la libertà di gestione della memoria su cui operare.
Sergio Bertana
Amministratore del forumCominciamo con l’errore, se vai alla pagina Elenco errori ed inserisci il numero di errore troverai questa indicazione:
10056084 Indici FIFO non sono corretti file viene ricreato FIFOFile
L’errore stà ad indicare che gli indici del registro FIFO non sono corretti, il fatto che non siano corretti mi fà pensare che in qualche parte del programma vengano sporcati, esempio da puntatori spuntati o da array fuori dimensione. Ora partendo dall’ipotesi degli indici corrotti posso costruire una teoria su cosa succede al file “REST.bin”.
Come in tutt i file systems i dati sul disco non sono mai cancellati ma si opera a livello di FAT, ora quando un nuovo file viene creato questo và a posizionarsi sul disco in una posizione libera, ma quella posizione poteva prima essere stata occupata da un’altro file (magari txt). Il FB FIFOFile scrive i suoi dati dall’inizio del file consecutivamente (Ma per sua natura alloca comunque lo spazio che gli è stato definito). Quindi se guardi il file con un editor vedrai i dati FIFO all’inizio e poi dopo l’ultimo record salvato vedrai il precedente contenuto del disco in quella posizione (magari parti txt di un vecchio file).
La scrittura sul file FIFO è consecutiva quindi tra record FIFO corretti non può esserci il precedente contenuto del disco, ma se gli indici FIFO sono sporcati la scrittura sul disco viene frammentata ed allora anche tra i record FIFO potresti trovarti parti del precedente contenuto del disco.
Marzo 10, 2023 alle 3:10 pm in risposta a: Realizzare grafici con i files storici generati dal pannello #70831Sergio Bertana
Amministratore del forumNon esistono tools per la modifica del file dtl, in alternativa nell’oggetto visualizza dati in formato tabellare è possibile abilitare abilitare l’editazione in modo da modificare i registrati (Screenshot).
Allego la struttura del file dtl così se vuoi puoi agire direttamente sul file:
Data log (data sampling) overhead for each record storage. Header=20 byte + data channelx8byte + channel name Entry(each) = 5bytes + sizeof(record) +------------------------------------+--------------+ | Content | Length(Byte) | +------------------------------------+--------------+ | Header | 20 | +------------------------------------+--------------+ | Data format of the 1st channel | 8 | +------------------------------------+--------------+ | Data format of the 2nd channel | 8 | +------------------------------------+--------------+ | ... | ... | +------------------------------------+--------------+ | Text "name" | 4 | +------------------------------------+--------------+ | The name length of the 1st channel | 2 | +------------------------------------+--------------+ | The name of the 1st channel | n | +------------------------------------+--------------+ | The name length of the 2nd channel | 2 | +------------------------------------+--------------+ | The name of the 2nd channel | n | +------------------------------------+--------------+ | The time of the 1st data | 4 | +------------------------------------+--------------+ | The time to record the 1st data | 1 | +------------------------------------+--------------+ | The 1st data of the 1st channel | n | +------------------------------------+--------------+ | The 2nd data of the 1st channel | n | +------------------------------------+--------------+ PS: 1. n : depends on the data. 2. The actual recording time is [the time to save the first record] multiples by 10.
Sergio Bertana
Amministratore del forumCredo di avere capito il motivo della nostra incomprensione, io faccio le prove su un pannello serie iE che permette la sovrapposizione degli oggetti “Touch” mentre tu stai probabilmente operando con un pannello serie cMT che non ne permette la sovrapposizione.
Allora nel tuo caso l’unico modi è di usare l’oggetto Text/Comment con le String Table (Vedi screenshot). In questo modo non potrai definire le stringhe dinamicamente ma dovrai definre nella tabella stringhe le varie stringhe da visualizzare associate al relativo numero di indice dinamico.
-
AutorePost