Risposte nei forum create
-
AutorePost
-
Sergio Bertana
Amministratore del forumLa nota Può essere eseguito in un solo loop di programma come una funzione, la mettiamo in tutte quelle FB che esauriscono il loro lavoro in un solo ciclo di esecuzione. Cioè non hanno variabili statiche al loro interno. Quindi se non fosse che la normativa IEC61131 ha messo dei limiti stringenti alla definizione delle funzioni si sarebbe realizzata una funzione al posto di un FB per quel tipo di operazione.
La nota informa che la puoi eseguire come una funzione ogni volta che la esegui lei termina il suo compito, quindi ad esempio il FIFO se vedi qualche mio programma dove viene usato vedrai che istanzio il FIFO nelle variabili globali e poi ne eseguo la chiamata per inserire elementi o per estrarre elementi in tutte le parti di programma dove serve.
Ma in un programma posso avere tutti i FIFO che si vuole, ognuno sarà istanziato con un nome diverso.
Sergio Bertana
Amministratore del forumAggiungo per la valutazione della eccezione, se invii alla nostra mail di supporto il file Logs.txt presente nella cartella System, e scrivi il codice del sistema e la versione del software (Li puoi ricavare connettendoti in Telnet alla porta 23) possiamo fare una indagine e magari dare informazioni maggiori.
Sergio Bertana
Amministratore del forumGli operatori TO_INT, TO UDINT, ecc sono operatori di cast, servono ad informare il compilatore che si stà trasferendo una variabile di un certo tipo in una variabile di altro tipo.
Mi spiego meglio ammettiamo di avere una variabile di tipo USINT e la passiamo ad una funzione o FB che accetta un parametro UINT o la trasferiamo in una variabile UINT, in questo caso siccome l’USINT è a 8 bit mentre l’UINT è a 16 bit non ci sono problemi ed il compilatore non dà messaggi di warning.
Ma facciamo l’ipotesi contraria, ho nel programma una variabile UINT (Che io programmatore sò di certo non assumerà mai valori superiori a 255) e la passiamo ad una funzione o FB che accetta un parametro USINT o la trasferiamo in una variabile USINT. Il nostro programma è corretto ma il compilatore ci avverte con una warning che potrebbe esserci un problema usando il cast TO_USINT informiamo il compilatore che và tutto bene siamo sicuri di quello che stiamo facendo.
Quindi se come dici le variabili che usi sono del tipo giusto non serve il cast.
Sergio Bertana
Amministratore del forumAbbiamo sviluppato per l’IDE LogicLab al momento oltre 200 oggetti (Funzioni ed FB) quasi tutti sono forniti gratuitamente, alcuni prevedono il pagamento di una licenza per l’utilizzo. Ma anche quelli che prevedono la licenza possono essere usati gratuitamente per 30 minuti.
Stiamo riorganizzato il sito e nella sezione che riguarda le FB ora si evince meglio quelle che prevedono il pagamento di una licenza.
Come credo di avere già scritto da qualche parte del forum stiamo unificando tutti i nostri sistemi, ARM7, CortexM7 e Raspberry in modo da poter offrire una unica versione di LogicLab ed una unica versione di librerie adatta a tutti i sistemi (Vedi articolo).
Questo lavoro coinvolge noi per quanto riguarda i sistemi e coinvolge Axel per quanto riguarda Logiclab, e ad oggi pur lavorando ventre a terra non abbiamo ancora terminato… abbiamo versioni beta che testiamo ma non ancora una versione definitiva. E anche se credo che siamo abbastanza vicini alla fine non posso dare una data di rilascio…
State sintonizzati…
Sergio Bertana
Amministratore del forumL’eccezione di WDOG capita se l’esecuzione del ciclo di programma richiede un tempo superiore al tempo di watch dog. Ma Lo SlimLine con questa eccezione in accordo alla normativa esegue un reboot. Se al successivo reboot il programma non genera più eccezioni tutto funziona normalmente.
Se si ripetono eccezioni, dopo 10 consecutive il programma và in stop. Se hai LogicLab collegato al sistema il programma và in stop già alla prima eccezione.
Non capisco il ciclo FOR da 0 a 0, tieni presente che il contenuto del ciclo viene eseguito 1 volta, Nel programma di esempio che posto dopo il ciclo FOR i vale 1. Quindi se nel ciclo hai qualcosa che non vuoi venga eseguito ricordati che il programma lo esegue.
i:=0;
FOR a:=0 TO 0 DO i:=i+1; END_FOR;Le warnings non sono significative, i codici SFR050, SFR055, ecc sono i codici delle varie librerie utilizzate dal sistema operativo ed hanno un significato solo per noi.
Se l’eccezione capita sporadicamente è difficile trovare quale parte del programma la genera, se invece capita sistematicamente, basterà sezionare il programma per capire dove si genera il problema.
Sergio Bertana
Amministratore del forumSi il FB FIFOFile_v1 ha i comandi In per inserire un record nel FIFO, Out per leggere il record inserito, e Delete per cancellarlo.
L’uscita DataOn si attiva se c’è almeno un record nel FIFO. Se definisci FIFOFilename il FB apppoggia i dati nel file definito, se lo definisci NULL i dati sono appoggiati in un buffer di memoria RMalloc.
Sergio Bertana
Amministratore del forumTi sei fatto la domanda e ti sei dato la risposta… Bravo…
Con la libreria attuale c’è questo problema, problema risolto con la nuova versione della libreria eLLabHTTPLib. Come vedi non c’è più la versione dopo il nome… perchè stiamo rivedendo tutte le librerie in funzione del nuovo prodotto SlimLine su Raspberry.
Da questa versione in avanti utilizzeremo il versioning delle librerie come gestito da LogicLab, la libreria non è ancora rilasciata e non posso rilasciarla, perchè se compili il tuo programma su XTarget_12 con questa nuova libreria avrai delle warnings. Abbiamo fatto anche altre modifiche sugli ENUM di definizione tipi (Vedi manuale).
Come workaround se mandi un email al supporto chiedendo la nuova libreria te la invio direttamente, utilizzandola dovrai al momento accettare la comparsa di alcune warnings.
JSONDecode_v2(207) – warning G0065: VType => Destination may be too small to store current result
JSONDecode_v2(207) – warning G0059: SysVarsscanf => Operand extensionSergio Bertana
Amministratore del forumIl limite è la memoria ed il numero di sockets aperti contemporaneamente (Oggi è di 32 sockets), ma piuttosto di istanziare tanti FB di invio eMail gestirei le concomitanze di eventi utilizzando il FB FIFOFile per salvare l’evento nel file di FIFO e poterlo poi estrarre quando il FB di invio eMail è libero.
Ti ricordo che gli eventi salvati nel FIFO non hanno limiti di dimensione quindi può essere anche l’intero testo email e quando lo estrai dal FIFO avrai l’indicazione temporale (Epoch time) di quando lo hai caricato. Quindi potrai inviare la mail magari riportando nell’oggetto data/ora esatta di quando il testo è stato generato.
Sergio Bertana
Amministratore del forumSi è il fastidioso BUG sulla dimensione delle stringhe, BUG che è risolto sulla versione cha stiamo testando in azienda già da un mesetto e che rilasceremo a breve.
Ora l’unico Workaround è quello di definire la lunghezza stringa con un numero divisibile per 4, (Ricordo che alla lunghezza definita viene sommato 1 per il codice tappo). In pratica definendo la variabile
MyString : STRING[ 31 ]; (* A string variable *)
Lo spazio allocato è di 32 bytes. Infatti SIZEOF(MyString) ritorna 32.
Sergio Bertana
Amministratore del forumSi un’altra possibilità è di aprire/chiudere il forward delle porte direttamente sul router agendo dalla sua pagina web di configurazione o come nel tuo caso inviando un SMS di selezione profilo.
Sergio Bertana
Amministratore del forumNon è possibile abilitare/disabilitare l’accesso Modbus tramite un ingresso logico, ma per gestire la sicurezza sull’accesso rimando a questo articolo.
Sergio Bertana
Amministratore del forumIl SysSerialNr è univoco per ogni sistema Elsist e quindi buona l’idea di utilizzarlo per l’applicazione che indichi.
Il renderlo disponibile da Modbus è sicuramente una idea, e ne abbiamo già ipotizzato la fattibilità, quello che ci blocca è che ogni variabile che diventa pubblica ci obbliga a mantenerla nel tempo allocandola in certe posizioni. Dovendo gestire diversi sistemi con diversi tipi di CPU e di aree di memoria ogni “costrizione” obbliga ad un lavoro di adattamento tra i vari sistemi.
Con la prossima uscita della nuova versione di LogicLab (Con il supporto al modulo Raspberry) ci saranno novità sul fronte delle variabili pubbliche accessibili da Modbus, da protocollo HTTP e da Node-RED.
Restate sintonizzati, non cambiate canale…
Sergio Bertana
Amministratore del forumSi è corretto, la famiglia iP è la famiglia entry-level dei pannelli Weintek, e non supporta tutte le funzioni disponibili su altre serie. La gestione ricette appoggiata al databse interno non è gestita.
Per la verifica delle funzioni supportate dalle varie serie di pannelli consiglio la lettura della tabella riepilogativa.
Sergio Bertana
Amministratore del forumSi hai capito bene lo SlimLine Raspberry può essere programmato con LogicLab come gli altri moduli SlimLine e contemporaneamente può eseguire programmi in C++, Phyton, PHP, Node-RED ecc.
Se cerchi nelle knowledge troverai degli esempi, e anche il programma CloudLogger può essere eseguito sul modulo Raspberry sia lato LogicLab che lato PHP.
Sergio Bertana
Amministratore del forumPer aggiungere un sistema PC puoi valutare la nostra soluzione basata su Raspberry dove certamente faremo un invio eMail più performante.
Altra soluzione che molti clienti hanno adottato è di inviare via REST i dati di log ad un server Locale/Remoto che li storicizza e poi genera lui la mail e la invia. Se conosci il linguaggio PHP ti allego il progetto CloudLogger che fà esattamente quello che ti serve.
Anche in questo caso il server PHP potrebbe girare sullo SlimLine Raspberry in contemporanea al programma LogicLab.
-
AutorePost