Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 2,476 a 2,490 (di 4,381 totali)
  • Autore
    Post
  • in risposta a: Esempio di calcolo velocità rotazione RPM #39060
    Sergio Bertana
    Amministratore del forum

    Credo tu ti riferisca alla riga di programma Counter:=Counter+1;

    Sicuramente la variabile Counter và in overflow ma quando si esegue il calcolo MemoCtr:=Counter-MemoCtr; operando su variabili senza segno della stessa dimensione (Esempio UINT o UDINT) si ha la gestione del rapporto circolare ed il risultato è sempre corretto.

    Se provi ad eseguire il calcolo MemoCtr:=Counter-MemoCtr; con MemoCtr=16#FFFFFFFF e Counter=16#00000004 ti troverai in MemoCtr il valore 5 che è appunto il numero di impulsi conteggiati tra le due letture di Counter anche se Counter ha avuto nel frattempo un overflow.

    in risposta a: Gestione file audio su terminale operatore #39058
    Sergio Bertana
    Amministratore del forum

    Si ad oggi il file audi wav abbinato agli eventi è modificabile solo dal tool di programmazione EasyBuilder e EasyBuilderPro. Il file wav viene inglobato nel programma compilato e non è più accessibile in nessun modo.

    in risposta a: Problema CAPs su impostazione password utenti #39057
    Sergio Bertana
    Amministratore del forum

    Puoi verificare se nella pagina di tastiera abbinata alla impostazione della password (Standard è la pagina 60 ASCII small) il tasto CAPs lock è correttamente abbinato alla variabile LW 9540 (Screenshot).

    Un test veloce può essere quello di fare un progetto nuovo con un oggetto Introduzione ascii e verificare il funzionamento. In caso di differenza puoi importare la pagina da un progetto nuovo nel tuo progetto.

    in risposta a: SlimLine in stop con codice di eccezione 1 #39056
    Sergio Bertana
    Amministratore del forum

    Per meglio comprendere quanto ho espresso nel post precedente riporto lo screenshot di un programma in ST che dimostra come sia facile generare eccezioni di programma a seguito di facili sviste.

    Per aiutare a capire dove il problema si è manifestato è possibile risalire dall’indirizzo di programma indicato con l’eccezione, se prendiamo ad esempio il mio programma mandandolo in esecuzione lo SlimLine si arresta. Con Toolly è possibile connettersi in Telnet e con il comando Syslog ci verrà indicata l’eccezione (Screenshot). Come si vede si è manifestata all’indirizzo 0x000600C4.

    In LogicLab dal menù Project -> Options si accede alle opzioni di progetto e nel tab Build output è possibile abilitare il tick di inclusione codice sorgente (Screenshot). Compilando il progetto nella cartella si troverà un file NomeProgetto.lst, editando questo file al suo interno si trovano i riferimenti tra l’indirizzo di programma ed il codice sorgente. Ecco cosa si vede nel mio programma

    #17 ST @Ptr {L:7}
    (*) USINT
    000600BC  E59FC120 ldr r12, [pc, #+288] ; 0x400054B0
    000600C0  E59C3000 ldr r3, [r12]
    000600C4  E5C30000 strb r0, [r3]

    Come si vede all’indirizzo 000600C4 si trova la parte di codice relativa alla compilazione del programma alla linea 7 {L:7}.

    in risposta a: SlimLine in stop con codice di eccezione 1 #39055
    Sergio Bertana
    Amministratore del forum

    Nelle ultime versioni del sistema operativo abbiamo sostituito il numero di eccezione con un acronimo di riferimento, ecco un elenco delle eccezioni di programma.

    Except: UNDEF, Exception 0: Eccezione non definita
    Except: DAT_ABORT, Exception 1: Indirizzo memoria errato (Il programma ha fatto accesso ad una area dati errata)
    Except: PREFETCH, Exception 2: Istruzione errata (Il programma contiene una istruzione errata)
    Except: IDISABLE, Exception 3: Disabilitazione interrupt
    Except: IENABLE, Exception 4: Abilitazione interrupt
    Except: WDOG, Exception 5: Watch dog (Il programma ha un tempo di esecuzione superiore al tempo di controllo)
    Except: IVECTOR, Exception 6: Corruzione vettori interrupt (Si è sovrascitta l’area di memoria dedicata ai vettori)
    Except: REBOOT, Exception 7: Reboot sistema (Il sistema è stato riavviato)
    Except: SYSTIME, Exception 8: Counter system time (Si è sovrascitta l’area di memoria dedicata ai counters di sistema)

    Nel tuo caso il codice di eccezione 1 indica è un Data abort exception, questo significa che il programma ha fatto un accesso ad un’area di memoria non consentita. Questo capita solitamente quando si utilizzano puntatori che erroneamente (Perchè sporcati dal programma) vanno a puntare zone di memoria non accessibili. Può succedere anche nel caso di array il cui indice è fuori range.

    Il fatto che per un pò ha funzionato ed ora funzioni, può essere legato ad un limite posto in memoria tampone che si è sporcato e/o ad una parte di programma che si attiva solo su certe condizioni logiche e che non si era mai verificata prima e non si stà più verificando ora (Tantomeno nel tuo laboratorio dove tieni il solo sistema acceso senza agire sugli I/O).

    in risposta a: How to reduce the program download time #39054
    Sergio Bertana
    Amministratore del forum

    Another suggestion, to reduce the source code and so the required time to download it on the target (If you choose to download it) is to include in your project only the library objects you use in your program and not all the library. So for example if you use the BLINK FB from the ePLCUtyLib you can import only it from the library insted of attach all the library to the project (See screenshot).

    in risposta a: How to reduce the program download time #39053
    Sergio Bertana
    Amministratore del forum

    The download time you reported is absolutely too long, I can suggest to you some tricks to reduce the download time.

    First of all you must disable the source code download, or if you would that the source code resides on the SlimLine target you can choose to download it only when the LogicLab is disconnected from the SlimLine. To do this please refer to the Project -> Options menu (See screenshot). In the Download tab you can choose when to download the source code.

    On PLC application download: Probably is your actual choice, with this choice all times you download the PLC program, you download also the source code and so you waste a lot of time in download it.

    Before disconnection: This is the choice to enable if you want to download on the target the source code. With this choice every time you make a modification on the PLC program, you download only it on the target. The source code will be downloaded only when you disconnect the LogicLab from the SlimLine.

    Never: With this choice the source code will not be ever downloaded on the SlimLine target.

    in risposta a: Sintassi statement CASE #39052
    Sergio Bertana
    Amministratore del forum

    Nel Manuale programmazione IEC61131-3 nel capitolo Statements linguaggio ST trovi una spiegazione dell’utilizzo dello statement CASE. Aggiungo comunque questa spiegazione che è ancora più esplicativa.

    Comunque se dai una occhiata agli esempi dei programmi nel forum troverai moltissimi programmi che utilizzano lo statement CASE. Lo utilizzo quasi sempre nei miei programmi ST per gestire la macchina stati, in questo topic ad esempio è stato utilizzato nel blocco funzione EasyProtocol (Stampa programma).

    in risposta a: Aggiornamento impianto con ICU 2000 (Micromaster) #39051
    Sergio Bertana
    Amministratore del forum

    Hai tantissimi modi per gestire lo schedulatore settimanale, il più immediato è utilizzare l’oggetto Scheduler sul pannello operatore, ecco la spiegazione di un esempio fornita da Weintek (Download esempio). Ecco lo screenshot di una applicazione cronotermostato realizzata da un nostro cliente.

    Ma puoi anche gestirla interamente dallo SlimLine, in questo topic trattiamo un argomento simile al tuo,  in questo topic una spiegazione di come eseguire operazioni con data e ora. Ecco un’altro esempio, in questo topic gli orari Accensione/Spegnimento sono definiti in un file CSV (Che si può redigere con Excel).

    Ricordo che lo SlimLine ha un server HTTP integrato ed è quindi possibile gestire pagine HTML visualizzabili con un normale browser, in tal caso puoi effettuare tutta la programmazione oraria direttamente da pagina web. Ecco lo screenshot della pagina che utilizziamo noi internamente per la programmazione della climatizzazione gestita da un sistema SlimLine.

    in risposta a: Aggiornamento impianto con ICU 2000 (Micromaster) #39049
    Sergio Bertana
    Amministratore del forum

    Non conosco nello specifico il prodotto ICU2000, bisogna capire se è come dici tu soltanto un esecutore di comandi Modbus oppure  se è un sistema in grado di prendere autonomamente delle decisioni.

    Comunque in entrambi i casi puoi sicuramente gestirlo da pannello Weintek via Modbus RTU, naturalmente devi avere un elenco dei registri su cui operare per leggere la temperatura e gestire le uscite. Puoi usare sia i pannelli serie iE (Utilizzi VNC per accedere da remoto, Topic) che la versione cloud cMT (Esiste una apposita App per tutti idispositivi). In entrambi i casi nessun problema di accesso via rete locale WiFi mentre per accedere da remoto via Internet consiglio EasyAccess 2.0.

    Ti ricordo che la programmazione è la stessa per entrambi i prodotti e che puoi scaricare il programma EasyBuilder Pro dal sito e con il programma puoi simulare perfettamente il funzionamento del pannello (Per connetterti agli ICU2000 dovrai munire il PC di una porta seriale RS485, Vedi converitore).

    Una riflessione… se l’ICU2000 è un mero esecutore e devi realizzare tutta la logica nel pannello dovrai lavorare parecchio di macro. Valuta se può essere conveniente interfacciare i dispositivi ICU2000 con un modulo CPU SlimLine e scrivere la logica di funzionamento in linguaggio IEC sul PLC, lasciando al pannello la sola visualizzazione grafica.

    in risposta a: Convertitore Ethernet-Seriale con livelli compatibili TTL #39048
    Sergio Bertana
    Amministratore del forum

    Il convertitore Ethernet-Seriale ATC-1000 utilizza al suo interno un modulo OEM ATC-1000M Low-cost serial port device networking. Utilizzzando questo modulo puoi avere a disposizione i segnali seriali con livello compatibile TTL.

    Come vedi dal manuale però il modulo si alimenta a 3.3 Volt, questo significa che dispone di ingressi TTL level tolerant ma sicuramente le uscite saranno a livello 3.3 Volt. Devi quindi verificare se la tua elettronica accetta e funziona con segnali a 3.3 Volt.

    in risposta a: Definizione di costanti utilizzabili nel programma #39047
    Sergio Bertana
    Amministratore del forum

    Lo scrivere un numero REAL in una variabile INT non è bloccante, è una operazione che si può fare. Ad esempio si utilizza per togliere la parte decimale ad un numero oppure nel caso di appoggio del valore in un registro che verrà poi letto da Modbus.

    A differenza di altri linguaggi come ad esempio il C dove il cast tra variabili è implicito, la normativa IEC impone di esplicitarlo con il costrutto TO_INT(). In caso contrario il compilatore segnala warning.

    in risposta a: Definizione di costanti utilizzabili nel programma #39045
    Sergio Bertana
    Amministratore del forum

    Ho scritto un programma esattamente uguale al tuo e come vedi dallo screenshot il risultato è corretto. Ti allego anche il progetto così puoi testarlo sul tuo sistema, funziona anche con il simulatore (Download progetto).

    Se da te non funziona, puoi controllare la versione del firmware del tuo sistema e la versione del programma LogicLab.

    in risposta a: Definizione di costanti utilizzabili nel programma #39043
    Sergio Bertana
    Amministratore del forum

    Non esistono costanti predefinite, però è possibile definire variabili che sono assunte come costanti in tutto il programma. Nella tabella di definizione delle variabili globali si defiscono le nuove costanti con l’attributo CONSTANT (Screenshot).

    in risposta a: Come utilizzare gli esempi forniti con SlimLine #39040
    Sergio Bertana
    Amministratore del forum

    Si certo è un esempio e vuole dimostrare come sia possibile gestire una connessione modbus in TCP. Non sono in ufficio e quindi non posso fare tests, ma guardando il codice basta modificare il case 3 nel modo:

    3: Mdb.Enable:=NOT(Mdb.Done);

    In pratica sul Done togli l’Enable che fà ripartire la richiesta. In questa fase puoi anche modificare i registri da leggere/scrivere. Naturalmente un occhio al CSk.Fault se cade il socket devi ripartire dall’inizio.

Stai visualizzando 15 post - dal 2,476 a 2,490 (di 4,381 totali)