Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Sergio Bertana
Amministratore del forumChi vuole personalizzare l’esecuzione di un programma in modo da avere un unico programma sorgente che si comporti in modo diverso in base al sistema dove viene eseguito ha diverse possibilità.
Da programma si può controllare l’UniqueID del sistema (Variabile SysUniqueID) e comportarsi di conseguenza in base al valore. La controindicazione e che se si sostituisce il prodotto si ha un UniqueID diverso.
Da pagina web UserInfo si imposta una delle 4 variabili SysUSet, il programma si comporterà di conseguenza in base al valore. Naturalmente sostituendo il prodotto occorre reimpostare la variabile sul nuovo prodotto.
Si utilizzano alcuni ingressi digitali per creare un codice in base a cui il programma si comporterà.
Sergio Bertana
Amministratore del forumSi certo volevo proprio dire quello, per “rete” intendevo una nuova connessione tra vari sistemi.
Attivare lo spionaggio (SpyOn:=TRUE) obbliga il FB ad inviare i dati di spionaggio alla connessione Telnet (Solo se da Telnet si è dato il comando SpyData). Naturalmente l’invio aggiunge dei tempi sulla esecuzione del FB, i tempi saranno più o meno lunghi in base al tempo di comunicazione con il client Telnet.
Lo spionaggio è un ottimo strumento per individuare errori, naturalmente se attivo aumenta il tempo di esecuzione del FB che viene spiato.
Sergio Bertana
Amministratore del forumSe molti dei dati in scambio tra i 2 slaves servono anche al master questa è la soluzione corretta, nello scambio dati tra più sistemi solitamente si triangola sempre sul master essenzialmente per questi motivi:
Su connessioni Internet solo il master deve avere indirizzo IP pubblico
La topologia di comunicazione è lineare, 1 master e tanti slavesMa puoi istanziare un FB TCPDataExchServer anche sugli slaves e quindi farli diventare master di un’altra rete di comunicazione. Mi spiego meglio gli slaves 1 e 2 sono slave del master, lo slave 1 può essere master di un’altra rete dove lo slave 2 è slave. In questo modo i dati tra gli slaves passano direttamente tra di loro senza passare dal master.
Sergio Bertana
Amministratore del forumNell’evolversi delle versioni di LogicLab a seguito anche di variazioni sulla specifiche IEC61131 sono state introdotte maggiori restrizioni sul controllo del codice. E può succedere che il compliatore per il target sia meno restrittivo del compilatore per il simulatore o viceversa. Ad esempio l’errore JMPCN potrebbe nascere dal codice:
IF (Var) THEN …. END_IF;
Dove Var non è un BOOL. Questo prima era accettato poi non lo è più stato. Ora non stò ad elencarti tutte le restrizioni che si sono aggiunte nel tempo. Diciamo che come buona regola è di usare sempre l’ultima versione di LogicLab con l’ultima versione delle librerie.
Ma siccome siamo fallaci, può anche essere che in alcune funzioni e/o FB di una libreria vi siano ancora condizioni che determinano la comparsa di warnings o peggio di errori in compilazione. Appena ci vengono segnalate provvediamo a risolverle.
Nota, solitamente le librerie sono testate sul target reale, può essere che nel simulatore si generino warnings ed errori che nel target non compaiono. Inoltre sul simulatore si possono utilizzare solo alcune funzioni ed FB.
Sergio Bertana
Amministratore del forumAlcuni modelli di terminali Weintek hanno la possibilità di attivare finestre con la visualizzazioine di immagini da telecamere, oppure finestre che eseguono un client VNC in cui quindi si può interagire con lo schermo di un altro terminale o PC che esegue il VNC server.
Ma purtroppo non esiste al momento un oggetto web browser, l’unico modo di eseguire un browser su terminale è quello di utilizzare un PC. Weintek ha attualmente a catalogo due modelli di terminali PC con Windows, cMT-iPC10 (Datasheet) e cMT-iPC15, che sono PC con sistema operativo Windows.
Non abbiamo a listino questi prodotti ma possiamo fornirli su ordinazione.
Sergio Bertana
Amministratore del forumTi allego per il download il programma Database_Server_Demo (Download) che riporta un esempio di quello che devi fare. L’esempio usa variabili interne e non si collega a nessun PLC, ma è facile inserire il collegamento con il PLC che desideri.
Sergio Bertana
Amministratore del forumNell’ultima versione di LogicLab (3.0.0) abbiamo inserito tra i progetti di esempio il programma ABCNetlog, un esempio di utilizzo del display di Netlog, lo allego per il download.
Un ottimo esempio di utilizzo del display integrato nel Netlog è dato dal programma ServerMonitor (Download) che è il programma citato in questa knowledge. Viene eseguita l’acquisizione di un misuratore di energia monofase, i dati acquisiti sono visualizzati sul display ed inviati via REST ad un server nel cloud.
Sergio Bertana
Amministratore del forumL’errore è nella lettura del valore mediato, devi scrivere:
Peso[n]:=MediaPeso[n].Average; (* peso n *)
Ecco l’esempio in un ciclo FOR:
FOR n:=0 TO 6 DO
MediaPeso[n](Value:=CellaPeso[n],Coefficient:=60.0); (* calcolo media *)
Peso[n]:=MediaPeso[n].Average; (* peso n *)
END_FOR;Sergio Bertana
Amministratore del forumCerco di spiegarti con lo screenshot di un programma, non guardare alla funzionalità perchè ho definito variabili a caso solo per farti vedere come scrivere i rami.
Come vedi ho aggiunto contatti sia in ingresso che in uscita ad un FB, ma se in ingresso puoi collegare i contatti su ogni pin, purtroppo in uscita hai un solo pin utilizzabile che puoi spostare ma è sempre solo 1. Se devi collegare altri coils ai pin di uscita devi collegarli come se fossero variabili.
In pratica usi la stessa tecnica che usi in FBD dove non ci sono i simboli del contatto e della bobina.
Sergio Bertana
Amministratore del forumLe domande non sono mai banali, sono un modo per capire meglio il sistema.
Con “Eseguito ciclicamente dall’alto verso il basso” si intende l’esecuzione del programma è eseguita dall’alto verso il basso ma ogni riga di programma viene valutata ed eseguita, quindi nelle righe che tu citi MIDx viene prima incrementato e poi sulla riga successiva viene controllato (Quindi ha già il nuovo valore).
Per quanto riguarda gli I/O logici invece, si parla di immagine di processo gli ingressi sono acquisiti ciclicamente prima di iniziare l’esecuzione del programma e le uscite sono gestite al termine della esecuzione del programma. Questo per avere lo stato degli ingressi che non cambia per tutto il loop di esecuzione programma, se fossero letti nel momento in cui li controllo potrei avere in un punto l’ingresso disattivo ed in un altro l’ingresso attivo.
Complimenti hai scoperto l’errore… in effetti se il primo comando da eseguire (Definito nella struttura MdbCfg) è un comando di scrittura, quindi alla prima esecuzione del programma, verrebbe scritto un valore non corretto, poi ai loop successivi tutto torna a funzionare. Per evitare il problema basterebbe definire come primo comando nella struttura un comando di read.
A mia scusa (Non faccio mai errori), l’esempio l’ho ricavato da un taglia/cuci di un programma fatto per un cliente ed ho cucito male…
Sergio Bertana
Amministratore del forum1. In effetti c’è un problema sulla finestra di Welcome, se manca connessione ad Internet si blocca, stiamo già lavorando per risolvere il problema. A breve rilasceremo una patch con la soluzione.
2. Problema segnalato ad Axel, siamo in attesa di una loro risposta.
3. La nuova versione nell’onda delle specifiche IEC61131 è più restrittiva sulle assegnazioni. In effetti un pointer è una variabile a 32 bits, quindi poteva benissimo essere passata in una variabile UDINT. Ma in realtà và definita correttamente come pointer.
Sergio Bertana
Amministratore del forumNon ne ho idea….
Ho girato la richiesta ad Axel che sviluppa LogicLab e stò attendendo la risposta…Sergio Bertana
Amministratore del forumIl file system dello SlimLine considera la SDCard non operabile al volo, questo perchè deve gestire la sicurezza sui dati in FAT (Spegnimenti random con file aperti). La gestione prevede una transazione dei dati sulla memoria FRAM interna. Alla accensione viene eseguita una scansione della intera FAT e se vi era una transazione non correttamente chiusa i dati in FRAM sono copiati nella SDCard.
Inoltre se usi la formattazione eFAT hai la possibilità di definire i nomi dei files con 14 caratteri (Compreso il punto) con caratteri maiuscoli e minuscoli. Se usi la formattazione FAT standard puoi solo usare nomi 8+3 tutti in maiuscolo.
Per il trasferimento dei dati verso l’esterno del sistema puoi utilizzare l’accesso in FTP (Il sistema gestisce sia il server che il client FTP).
Sergio Bertana
Amministratore del forumIn effetti l’algoritmo utilizzato nello sviluppo di questo driver di comunicazione ha alcune particolarità che lo complicano. Intanto posto l’intero progetto LogicLab con tutti i FB utilizzati pronto per essere utilizzato come dimostrativo (Download programma).
La variabile FMIDx (* Force Modbus index *), è utilizzata per forzare il comando di scrittura Modbus, siccome per velocizzare lo scambio dati i comandi di scrittura sono eseguiti solo sulla variazione del valore da scrivere ho previsto di comunque scrivere il valore ciclicamente così se per caso ci fosse una disincronizzazione tra quello che lo SlimLine pensa di avere scritto e quello scritto nel sistema ci si risincronizza.
Il programma è eseguito ciclicamente dall’alto verso il basso, quando ho il Done a TRUE significa che il comando Modbus è terminato e posso inviare un’altro comando. Quindi dovendo inviare un comando di scrittura devo caricare il valore da scrivere poi dare il comando Enable:=TRUE.
Se noti il FB ModbusMaster MMdb(); (* Modbus master communication *) è eseguito dopo avere posto Enable:=FALSE, quindi entrando in FB con Enable disabilitato inizializzo gestione e resetto Done pronto per il prossimo giro di esecuzione ad essere attivato.
Sergio Bertana
Amministratore del forumCosa dice lo slogan del nostro sito di supporto…
Benvenuto sul sito di supporto Elsist, Siamo qui per aiutarti. -
AutorePost