Skip to main content

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

prg

Main.prg.st

Blocco funzionale

fb

Timer.fb.st

Funzione

fn

Add.fn.st

Metodo

meth

Start.meth.st

Azione

act

Reset.act.st

Transizione

trans

Step1.trans.st

Proprietà di un POU

prop.st

Enabled.prop.st

Interfaccia

itf

IMotor.itf

Metodo di interfaccia

meth

Run.meth

Proprietà dell'interfaccia

prop

Speed.prop

Struttura (DUT)

struct

Point.struct

Enumerazione (DUT)

enum

Color.enum

Alias (DUT)

alias

Distance.alias

Sindacato (DUT)

union

Value.union

Elenco delle variabili globali

gvl

Globals.gvl

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.

Esempio 1. Esempio

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_PROGRAM


Testo 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_BLOCK

L'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.