File system ------------ Le “CPU SlimLine ARM7” a partire dal firmware versione **SFW167C100**, possono gestire il file system. In tali CPU esistono due directories predefinite: **Storage:** Directory allocata sulla memoria EEPROM presente su SlimLine (Tutte le versioni). **SDCard:** Directory allocata sul chip SD Card che deve essere inserito nell'apposito connettore. Per le operazioni di formattazione del file system si rimanda al manuale utente, il file system è raggiungibile da FTP, quindi utilizzando un client FTP è possibile creare nuovi files, cancellare files esistenti, rinominare files esistenti, leggere e scrivere dati nei files. Sysremove, file remove ^^^^^^^^^^^^^^^^^^^^^^^^ |image0| +----------+--------------+ | **Type** | **Library** | | | | +----------+--------------+ | Function | XTarget_07_0 | +----------+--------------+ Questa funzione esegue la rimozione (cancellazione) di un file. In **Name** occorre definire il nome del file da eliminare specificando l'intero percorso (Esempio Storage/File.txt). Se l'operazione di rimozione va a buon fine la funzione ritorna **TRUE**, in caso di errore viene ritornato **FALSE**. Parametri funzione: +-----------------------+------------------------------+ | **Name** (STRING[32]) | Nome del file da cancellare. | +-----------------------+------------------------------+ La funzione ritorna: +--------+-------------------------------+ | (BOOL) | **FALSE:** Errore esecuzione. | | | | | | **TRUE:** Ok esecuzione. | +--------+-------------------------------+ **Codici di errore** In caso di errore la funzione torna **FALSE** e con `SysGetLastError <#FctSysGetLastError>`__ è possibile rilevare il codice di errore. +---------+------------------------------------------------+ | 9961100 | Funzione eseguita in task diversa da **Back**. | +---------+------------------------------------------------+ | 9961150 | Errore nella dichiarazione del nome file. | +---------+------------------------------------------------+ | 9961160 | Directory non accessibile da utente “Admin”. | +---------+------------------------------------------------+ | 9961200 | Errore nella cancellazione del file. | +---------+------------------------------------------------+ | 9961990 | Non implementata nel simulatore. | +---------+------------------------------------------------+ **Esempi** """""""""""""" Sul fronte di attivazione dell'ingresso digitale **Di00M00** viene eliminato il file **File.txt** presente nella directory **Storage**. +---------------------------+ | **Definizione variabili** | +---------------------------+ | |image1| | +---------------------------+ **Esempio LD** |image2| Sysrename, file rename ^^^^^^^^^^^^^^^^^^^^^^^ |image3| +----------+--------------+ | **Type** | **Library** | | | | +----------+--------------+ | Function | XTarget_07_0 | +----------+--------------+ Questa funzione esegue il cambiamento del nome di un file. In **OldName** occorre definire il nome del file da rinominare specificando l'intero percorso (Esempio Storage/OldFile.txt), in **NewName** occorre definire il nuovo nome del file specificando l'intero percorso (Esempio Storage/NewFile.txt). Se l'operazione di rinomina va a buon fine la funzione ritorna **TRUE**, in caso di errore viene ritornato **FALSE**. Parametri funzione: +--------------------------+------------------------------+ | **OldName** (STRING[32]) | Nome del file da rinominare. | +--------------------------+------------------------------+ | **NewName** (STRING[32]) | Nuovo nome da dare al file. | +--------------------------+------------------------------+ La funzione ritorna: +--------+-------------------------------+ | (BOOL) | **FALSE:** Errore esecuzione. | | | | | | **TRUE:** Ok esecuzione. | +--------+-------------------------------+ **Codici di errore** In caso di errore la funzione torna **FALSE** e con `SysGetLastError <#FctSysGetLastError>`__ è possibile rilevare il codice di errore. +---------+---------------------------------------------------------------+ | 9960100 | Funzione eseguita in task diversa da **Back**. | +---------+---------------------------------------------------------------+ | 9960150 | Errore nella dichiarazione **OldName**. | +---------+---------------------------------------------------------------+ | 9960160 | Directory file **OldName** non accessibile da utente “Admin”. | +---------+---------------------------------------------------------------+ | 9960170 | Errore nella dichiarazione **NewName**. | +---------+---------------------------------------------------------------+ | 9960180 | Directory file **NewName** non accessibile da utente “Admin”. | +---------+---------------------------------------------------------------+ | 9960200 | Errore nella rinominazione del file. | +---------+---------------------------------------------------------------+ | 9960990 | Non implementata nel simulatore. | +---------+---------------------------------------------------------------+ **Esempi** """""""""""""" Sul fronte di attivazione dell'ingresso digitale **Di00M00** viene rinominato il file **OldFile.txt** presente nella directory **Storage**. Il file assumerà il nuovo nome di **NewFile.txt**. +---------------------------+ | **Definizione variabili** | +---------------------------+ | |image4| | +---------------------------+ **Esempio LD** |image5| Sysfilelength, file lengh ^^^^^^^^^^^^^^^^^^^^^^^^^^^ |image6| +----------+--------------+ | **Type** | **Library** | | | | +----------+--------------+ | Function | XTarget_07_0 | +----------+--------------+ Questa funzione ritorna la lunghezza in bytes di un file. In **Name** occorre definire il nome del file di cui si vuole conoscere la lunghezza specificando l'intero percorso (Esempio Storage/File.txt). Se il file indicato non è presente, la funzione ritorna **-1**. Parametri funzione: +-----------------------------------+-----------------------------------+ | **Name** (STRING[32]) | Nome del file di cui si vuole | | | conoscere la lunghezza. | +-----------------------------------+-----------------------------------+ La funzione ritorna: +--------+-------------------------------------------------------+ | (DINT) | Lunghezza file (Bytes). **EOF** se file non presente. | +--------+-------------------------------------------------------+ **Codici di errore** In caso di errore la funzione torna **EOF** e con `SysGetLastError <#FctSysGetLastError>`__ è possibile rilevare il codice di errore. +---------+------------------------------------------------+ | 9959100 | Funzione eseguita in task diversa da **Back**. | +---------+------------------------------------------------+ | 9959990 | Non implementata nel simulatore. | +---------+------------------------------------------------+ **Esempi** """""""""""""" Sul fronte di attivazione dell'ingresso digitale **Di00M00** viene ritornata la lunghezza del file **File.txt** presente nella directory **Storage**. +---------------------------+ | **Definizione variabili** | +---------------------------+ | |image7| | +---------------------------+ **Esempio LD** |image8| Sysfseek, file seek ^^^^^^^^^^^^^^^^^^^^^ |image9| +----------+--------------+ | **Type** | **Library** | | | | +----------+--------------+ | Function | XTarget_07_0 | +----------+--------------+ Questa funzione permette di cambiare l'indicatore di posizione dello stream collegato al parametro **File**, precedentemente aperto dalla funzione `Sysfopen <#FCtSysfopen>`__. **Offset** specifica il numero di bytes dall'origine dove andrebbe posizionato l'indicatore di posizione. **Origin** specifica la posizione di origine rispetto alla quale spostare l'indicatore di posizione. La funzione ritorna il valore attuale dell'indicatore di posizione. In caso di errore di posizionamento, l'indicatore di posizione rimane inalterato e la funzione ritorna **EOF**. Parametri funzione: +-----------------------------------+-----------------------------------+ | **File** (FILEP) | Flusso dati **stream** ritornato | | | dalla funzione **Sysfopen**. | +-----------------------------------+-----------------------------------+ | **Offset** (DINT) | Numero di bytes dall'origine dove | | | posizionare l'indicatore di | | | posizione | +-----------------------------------+-----------------------------------+ | **Origin** (INT) | Occorre specificare la posizione | | | di origine, `FSeek origin | | | definition <#TabFSeekDefs>`__. | +-----------------------------------+-----------------------------------+ La funzione ritorna: +--------+-----------------------------------------------------------------+ | (DINT) | Valore attuale dell'indicatore di posizione. **EOF** se errore. | +--------+-----------------------------------------------------------------+ **Codici di errore** In caso di errore la funzione torna **EOF** e con `SysGetLastError <#FctSysGetLastError>`__ è possibile rilevare il codice di errore. +---------+------------------------------------------------+ | 9958100 | Funzione eseguita in task diversa da **Back**. | +---------+------------------------------------------------+ | 9958990 | Non implementata nel simulatore. | +---------+------------------------------------------------+ **Esempi** """""""""""""" Sul fronte di attivazione dell'ingresso **Di00M00** viene posizionato l'indicatore di posizione all'inizio del file **File.txt** presente nella directory **Storage**. +---------------------------+ | **Definizione variabili** | +---------------------------+ | |image10| | +---------------------------+ **Esempio LD** |image11| SysDirListing, directory listing ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |image12| +----------+--------------+ | **Type** | **Library** | | | | +----------+--------------+ | FB | XTarget_10_0 | +----------+--------------+ Questo blocco funzione esegue il listing di tutti i files contenuti in una directory, occorre passare il nome della directory di cui eseguire il listing in **PathName**. Attivando l'ingresso **Init** si inizializza la lista dei files e viene ritornato il primo file trovato. Ad ogni comando **Next** si esegue la ricerca di un nuovo file nella directory selezionata. Se file trovato l'uscita **Found** si attiva per un loop e ne viene rtornato il nome in **FileName**. Terminato l'elenco di tutti i files presenti nella directory su comando **Next** non viene più attivata l'uscita **Found** e **FileName** è abblencato. L'uscita **IsDir** si attiva se il nome del file ritornato è quello di una sottodirectory. +-----------------------------------+-----------------------------------+ | **Init** (BOOL) | Alla attivazione viene | | | inizializzato l'indice dei files | | | nella directory indicata e viene | | | ritornato il nome del primo file | | | trovato. | +-----------------------------------+-----------------------------------+ | **Next** (BOOL) | Alla attivazione viene ritornato | | | il nome del file puntato | | | dall'indice nella directory | | | indicata. L'indice si incrementa | | | puntando il successivo file. | +-----------------------------------+-----------------------------------+ | **PathName** (STING[32]) | Definizione directory di cui | | | eseguire il listing. E' possibile | | | definire anche eventuale filtro | | | di ricerca (Esempio | | | Storage\*.log). | +-----------------------------------+-----------------------------------+ | **Found** (BOOL) | Si attiva per un loop se su | | | comando **Init** o **Next** è | | | stato trovato un nuovo file da | | | listare. | +-----------------------------------+-----------------------------------+ | **Fault** (BOOL) | Si attiva per un loop se errore | | | esecuzione. | +-----------------------------------+-----------------------------------+ | **IsDir** (BOOL) | Attiva se il nome di file | | | ritornato appartiene ad una | | | sottodirectory. | +-----------------------------------+-----------------------------------+ | **Size** (UDINT) | Dimensione in bytes del file. | +-----------------------------------+-----------------------------------+ | **Time** (UDINT) | Data ultima modifica del file in | | | Epoch time (UTC). | +-----------------------------------+-----------------------------------+ | **FileName** (STING[16]) | Nome del file comprensivo di | | | eventuale estensione. | +-----------------------------------+-----------------------------------+ **Codici di errore** In caso di errore si attiva l'uscita Fault, con `SysGetLastError <#FctSysGetLastError>`__ è possibile rilevare il codice di errore. +-----------------------------------+-----------------------------------+ | 9952050 | Errore allocazione blocco | | | funzione. | +-----------------------------------+-----------------------------------+ | 9952060 | Terminato spazio memoria | | | rilocabile, non è possibile | | | eseguire l''FB. | +-----------------------------------+-----------------------------------+ | 9952070 | Errore versione blocco funzione. | +-----------------------------------+-----------------------------------+ | 9952100 | FB eseguita in task diversa da | | | **Back**. | +-----------------------------------+-----------------------------------+ | 9952200 | Errore esecuzione directory | | | listing. | +-----------------------------------+-----------------------------------+ | 9952990 | Non implementata nel simulatore. | +-----------------------------------+-----------------------------------+ **Esempi** """""""""""""" Sul fronte di attivazione dell'ingresso digitale **Di00M00** viene inizializzato il puntatore ai files presenti nella directory **Storage**. Ad ogni attivazione dell'ingresso digitale **Di01M00** viene ritornato il nome del file presente nella directory. Se file presente si attiva per un loop **Ok**, se si tratta di una sottodirectory si attiva per un loop **Dir**. +---------------------------+ | **Definizione variabili** | +---------------------------+ | |image13| | +---------------------------+ **Esempio LD** image14| .. |image0| image:: media/image1.jpg :width: 1.43681in :height: 0.43681in .. |image1| image:: media/image2.jpg :width: 7.08681in :height: 0.52361in .. |image2| image:: media/image3.jpg :width: 7.08681in :height: 0.85069in .. |image3| image:: media/image4.jpg :width: 1.62569in :height: 0.62569in .. |image4| image:: media/image5.jpg :width: 7.08681in :height: 0.53542in .. |image5| image:: media/image6.jpg :width: 7.08681in :height: 1.05903in .. |image6| image:: media/image7.jpg :width: 1.44861in :height: 0.43681in .. |image7| image:: media/image8.jpg :width: 7.08681in :height: 0.33889in .. |image8| image:: media/image9.jpg :width: 7.08681in :height: 0.81111in .. |image9| image:: media/image10.jpg :width: 1.25208in :height: 0.80347in .. |image10| image:: media/image11.jpg :width: 7.08681in :height: 0.52361in .. |image11| image:: media/image12.jpg :width: 7.08681in :height: 2.44861in .. |image12| image:: media/image13.jpg :width: 1.425in :height: 1.38611in .. |image13| image:: media/image14.jpg :width: 7.08681in :height: 0.90972in .. |image14| image:: media/image15.jpg :width: 7.08681in :height: 2.05139in