Formato di archiviazione
Questo capitolo descrive il formato di archiviazione basato su file. Vengono fornite spiegazioni sulla codifica del testo dei file, sulla struttura delle cartelle, sull'archiviazione degli oggetti di programmazione e dei relativi metadati, nonché sul testo sorgente in formato testo strutturato e in linguaggi grafici.
Codifica e formattazione del testo
Le stesse convenzioni vengono seguite per ogni file che viene scritto da CODESYS File-Based Storage Questo garantisce la portabilità dei progetti tra diversi sistemi operativi e crea differenze nette nei sistemi di controllo versione.
Codifica: Tutti i file di testo sono scritti in UTF-8 senza Marcatore di ordine dei byte (BOM). Quando viene letto un file XML esistente, viene utilizzata la codifica specificata. Un file XML esistente Marcatore di ordine dei byte è tollerato.
Fine della linea: I file vengono scritti con il carattere di avanzamento riga (
\n). Quando viene letto un file, sia il ritorno a capo che la fine riga di Windows (\r\n) sono accettati.Fine della riga nei sistemi di controllo versione
Configurare il sistema di controllo versione in modo che le interruzioni di riga vengano mantenute come fine riga, al fine di evitare differenze non necessarie.
Incavo I file JSON e XML sono indentati con un carattere di tabulazione per ogni livello di annidamento.
Cartelle
Ogni cartella nell'albero del progetto diventa una directory con lo stesso nome. Una cartella ha facoltativamente un file di metadati chiamato .folder_meta.json Questo file memorizza il GUID dell'oggetto cartella e le sue proprietà:
{
"objectGuid": "1b3a0c5e-...",
"properties": {
"PropertyName": "PropertyValue"
}
}In CODESYS 3, ogni cartella ha un GUID oggetto. Questo è scritto nel .folder_meta.json file in modo che la cartella possa essere ancora tracciata anche dopo essere stata rinominata e spostata. properties Il campo viene scritto solo se la cartella ha proprietà. Altrimenti, viene omesso. In CODESYS 4, una cartella non ha un GUID oggetto. Una cartella senza metadati salvati non ha un .folder_meta.json file.
Problemi di programmazione
Ogni oggetto di programmazione viene salvato come file di testo separato. Il nome del file ha la seguente sintassi:
<object name>.<class>.<language>
La parte relativa alla classe specifica il tipo di oggetto e la parte relativa al linguaggio specifica il linguaggio di implementazione. Nello specifico, la parte relativa al linguaggio per il testo strutturato è st Un esempio di blocco funzione in testo strutturato è Timer.fb.st.
Tipo di oggetto | Parte della classe | Esempio |
|---|---|---|
Programma |
|
|
Blocco funzionale |
|
|
Funzione |
|
|
Metodo |
|
|
Azione |
|
|
Transizione |
|
|
Proprietà di un POU |
|
|
Interfaccia |
|
|
Metodo di interfaccia |
|
|
Proprietà dell'interfaccia |
|
|
Struttura (DUT) |
|
|
Enumerazione (DUT) |
|
|
Alias (DUT) |
|
|
Sindacato (DUT) |
|
|
Elenco delle variabili globali |
|
|
Un oggetto con oggetti subordinati (ad esempio, un blocco funzione con metodi) viene memorizzato come una directory il cui nome termina con un accento circonflesso (^L'oggetto stesso è il file in questa directory. Gli oggetti subordinati si trovano accanto ad esso:
Timer.fb.st^/
Timer.fb.st (der Funktionsbaustein selbst)
Start.meth.st (eine Methode)
Stop.meth.st (eine Methode)Metadati dell'oggetto
Se un oggetto contiene metadati che non possono essere ricostruiti in altro modo, il file inizia con un commento sui metadati. Esempi includono un GUID stabile dell'oggetto o le proprietà dell'oggetto. Il commento è contrassegnato con (* METADATA … *) I metadati vengono memorizzati in formato JSON.
(* METADATA
{
"v3Meta": {
"objectGuid": "e75fc257-..."
}
}
*)Se un oggetto non contiene metadati, non viene scritto alcun commento sui metadati e il file inizia direttamente con l'intestazione dell'oggetto.
Le informazioni sul progetto (titolo, versione, autore, azienda, descrizione e altre impostazioni) sono memorizzate nel ProjectInfo.json file nella directory principale del progetto.
Testo sorgente degli oggetti nel testo strutturato
Il testo strutturato viene memorizzato come testo semplice senza marcatori. La parte dichiarativa viene sempre scritta per prima, seguita immediatamente dalla parte di implementazione.
L'esempio seguente mostra il testo strutturato PLC_PRG programma nel PLC_PRG.prg.st file.
PROGRAM PLC_PRG
VAR
nCounter : INT;
END_VAR
nCounter := nCounter + 1;
END_PROGRAMTesto sorgente dei linguaggi grafici
Linguaggi diversi dal testo strutturato: i linguaggi grafici, come il diagramma a scala (LD), il diagramma a blocchi funzionali (FBD), Diagramma di funzione continuo (CFC) e Sequential Function Chart (SFC) non possono essere scritti come testo strutturato. Per questi linguaggi, la dichiarazione viene comunque memorizzata come testo semplice. Tuttavia, la sezione di implementazione è racchiusa da due righe di riferimento che indicano il rispettivo linguaggio.
FUNCTION_BLOCK TSSend
VAR_INPUT
xExecute : BOOL;
END_VAR
__BEGIN_IMPLEMENTATION('CFC')
{
... die Implementierung im eigenen Format der Sprache ...
}
__END_IMPLEMENTATION
END_FUNCTION_BLOCKL'implementazione inizia con il marcatore __BEGIN_IMPLEMENTATION('<language>') che cita la lingua (ad esempio, LD per il diagramma a scala, FBD per il diagramma a blocchi funzionali, CFC per il grafico della funzione continua, oppure SFC per il grafico della funzione sequenziale). Verrà chiuso con il marcatore __END_IMPLEMENTATION Tutto ciò che si trova tra i marcatori viene memorizzato nel formato testuale della rispettiva lingua. Per i linguaggi grafici integrati, questo formato viene utilizzato come JSON, con un rientro di un carattere di tabulazione per ogni livello di annidamento.
I marcatori assicurano che la dichiarazione sia separata in modo affidabile dal contenuto della parte di implementazione, indipendentemente da quest'ultimo. Per il testo strutturato No sono necessari né utilizzati marcatori.
Oggetti senza formato nativo
Non tutti i tipi di oggetto hanno una propria rappresentazione testuale. Oggetti come le configurazioni dei dispositivi e le configurazioni delle attività vengono salvati in un file di swap con l'estensione xml.v3, che racchiude l'originale CODESYS serializzazione. Questi file rimangono file di testo e continueranno a creare differenze riga per riga nei sistemi di controllo versione. Questi tipi di oggetti possono essere successivamente migrati a un formato nativo non appena questo sarà disponibile.
Per ulteriori informazioni, consultare quanto segue: Migra gli oggetti
Se il contenuto di un oggetto non può essere interpretato in alcun modo, l'oggetto rimane inalterato e quindi non si perde alcuna informazione.