Sergio Bertana
Risposte nei forum create
-
AutorePost
-
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.Sergio Bertana
Amministratore del forumIl counter hardware del modulo CPU non ha la possibilità di gestire gli ingressi hardware di reset e di reverse. Questa cosa è possibile sui counter presenti su alcuni moduli di estensione I/O dove settando opportunamente l’ingresso Mode del SysGetCounter è possibile definire quale ingresso hardware del modulo deve essere connesso al comando di reset e quale al comando di reverse.
Come vedi dalla documentazione per ogni comando possibile (Clock, Reset, Reverse) ci sono 3 bits di mode e 5 bits di selezione ingresso. Con 5 bits puoi indirizzare ognuno dei possibili 32 ingressi massimi di un modulo di estensione.
Però non capisco la tua perplessità sulla opzione software è estremamente semplice e flessibile, non solo puoi resettare ma puoi anche presettare il valore che desideri. Il comando da ingresso hardware si utilizza solo quando si deve eseguire il reset su un evento esterno molto veloce (Esempio ipotizzando di dover contare i denti di una ruota dentata che ruota velocemente azzerando il conteggio ad ogni giro su un proximity di zero la cui durata dell’impulso è inferiore al mS tempo in cui si potrebbe anche gestire da software campionando l’ingresso nella task Fast).
Sergio Bertana
Amministratore del forumDevi visualizzare la lampada nei due stati e spostare la posizione della etichetta per farle sovrapporre, o posizionarle dove tu desideri stiano in ogni stato. Cerco di spiegartelo con un screenshot.
Con la selezione di copia degli attributi della label in tutti gli stati tu copi solo il tipo e la dimensione del carattere ma non la posizione di visualizzazione.
Sergio Bertana
Amministratore del forumSysMAlloc has 4096 bytes of reserved memory, every time the function is called the specified amount of memory is subtracted from the total memory available. The function returns the pointer to the allocated memory (Type @USINT), if there’s no space available NULL is returned.
SysMAlloc can be called all time you need a memory buffer, but remind that the allocated memory cannot be released. So every time the function is called the specified amount of memory is subtracted from the total memory available. All the SysMAlloc memory is released when user program starts.
SysRMAlloc has 20 KBytes of reserved memory, every time the function is called the specified amount of memory is subtracted from the total memory available. A UDINT buffer is needed by the function to store the pointer to the allocated memory. If there’s no space available the UDINT buffer is set to NULL and FALSE is returned. Instead of the SysMAlloc, the allocated memory can be released by calling the SysRMFree function.
Note that SysRMAlloc uses a completely different allocation mechanism than SysMAlloc, the allocated memory is moved run time by the operating system to optimize the memory space. This obviously causes that the pointer to the allocated memory can be modified (For this reason a buffer to store it is necessary).
So every time a buffer allocated by SysRMAlloc is used it’s mandatory to refer to the address stored in the UDINT buffer passed to it and it’s not possible to use copies of it.
Pointers returned by SysMAlloc e SysMAlloc are aligned so no alignment is needed, obviously when a misaligned buffer is allocated, with the next call, up to 3 bytes of memory can be lost.
Sergio Bertana
Amministratore del forumIl counter hardware della scheda CPU come quelli presenti nelle schede di I/O hanno la possibilità di essere resettati in hardware da un ingresso digitale. Non è prevista però la possibilità di reset e/o preset da software, perchè il problema è facilmente aggirabile con un semplice calcolo matematico sul valore di conteggio.
La tecnica di manipolazione del valore in uscita da un contatore è ampiamente trattata in alcuni topics relativi alla quota encoder dove si deve gestire un problema del tutto simile al tuo (Topic, topic).
-
AutorePost