存储格式
本章介绍基于文件的存储格式。内容包括文件的文本编码、文件夹结构、编程对象及其元数据的存储,以及结构化文本和图形语言中的源文本。
文本编码和格式化
所有由……写入的文件都遵循相同的约定。CODESYS File-Based Storage这样可以保证项目在不同操作系统之间可移植,并在版本控制系统中创建清晰的差异。
编码所有文本文件均以 UTF-8 编码写入,不包含字节顺序标记(BOM)。读取现有 XML 文件时,将使用指定的编码。字节顺序标记可以容忍。
行尾文件写入时会使用换行符(
\n读取文件时,换行符和 Windows 行尾符都会被读取(\r\n)被接受。版本控制系统中的行尾
配置版本控制系统,使换行符保留为行尾,以避免不必要的差异。
缩进 JSON 和 XML 文件每嵌套一级缩进一个制表符。
文件夹
项目树中的每个文件夹都会成为一个同名目录。文件夹可以选择性地包含一个名为“metadata”的元数据文件。.folder_meta.json此文件存储文件夹的对象 GUID 及其属性:
{
"objectGuid": "1b3a0c5e-...",
"properties": {
"PropertyName": "PropertyValue"
}
}在CODESYS 3每个文件夹都有一个对象 GUID。该 GUID 写入到…….folder_meta.json文件应确保即使在重命名和移动文件夹后,仍然可以对其进行跟踪。properties仅当文件夹具有属性时,才会写入该字段。否则,该字段将被省略。CODESYS 4文件夹没有对象 GUID。没有保存元数据的文件夹没有.folder_meta.json文件。
编程对象
每个编程对象都保存为一个单独的文本文件。文件名遵循以下语法:
<object name>.<class>.<language>
类部分指定对象类型,语言部分指定实现语言。具体来说,结构化文本的语言部分是:st结构化文本中功能块的一个例子是:Timer.fb.st。
对象类型 | 类部分 | 例子 |
|---|---|---|
程序 |
|
|
功能块 |
|
|
功能 |
|
|
方法 |
|
|
行动 |
|
|
过渡 |
|
|
POU 的财产 |
|
|
界面 |
|
|
接口方法 |
|
|
接口属性 |
|
|
结构(DUT) |
|
|
枚举(DUT) |
|
|
别名(DUT) |
|
|
工会(DUT) |
|
|
全局变量列表 |
|
|
包含子对象(例如,包含方法的函数块)的对象存储为一个目录,该目录的名称以插入符号 ( ) 结尾。^对象本身就是此目录中的文件。其子对象位于该文件旁边:
Timer.fb.st^/
Timer.fb.st (der Funktionsbaustein selbst)
Start.meth.st (eine Methode)
Stop.meth.st (eine Methode)对象元数据
如果对象包含无法以其他方式重建的元数据,则该文件以元数据注释开头。例如,稳定的对象 GUID 或对象属性。注释以标记。(* METADATA … *)元数据以 JSON 格式存储。
(* METADATA
{
"v3Meta": {
"objectGuid": "e75fc257-..."
}
}
*)如果对象不包含元数据,则不会写入元数据注释,文件直接以对象头开始。
项目信息(标题、版本、作者、公司、描述和其他设置)存储在……ProjectInfo.json项目根目录中的文件。
结构化文本中对象的源文本
结构化文本以纯文本形式存储,不带任何标记。声明部分总是写在最前面,紧接着是实现部分。
以下示例展示了结构化文本PLC_PRG项目中PLC_PRG.prg.st文件。
PROGRAM PLC_PRG
VAR
nCounter : INT;
END_VAR
nCounter := nCounter + 1;
END_PROGRAM图形语言的源文本
除了结构化文本之外的其他语言——图形语言,例如梯形图(LD)、功能块图(FBD)连续函数图代码功能图 (CFC) 和顺序功能图 (SFC) 不能用结构化文本编写。对于这些语言,声明仍然以纯文本形式存储。但是,实现部分会被两条标记线括起来,分别引用相应的语言。
FUNCTION_BLOCK TSSend
VAR_INPUT
xExecute : BOOL;
END_VAR
__BEGIN_IMPLEMENTATION('CFC')
{
... die Implementierung im eigenen Format der Sprache ...
}
__END_IMPLEMENTATION
END_FUNCTION_BLOCK实施过程从标记开始。__BEGIN_IMPLEMENTATION('<language>')引用该语言(例如,LD对于梯形图,FBD对于功能框图,CFC对于连续函数图,或SFC(例如,顺序功能图)。它将用标记关闭。__END_IMPLEMENTATION标记之间的所有内容均以相应语言的文本格式存储。对于集成的图形语言,此格式为 JSON,每嵌套一层缩进一个制表符。
这些标记确保声明部分与实现部分的内容可靠地分离,而与实现部分的内容无关。结构化文本否标记。
没有原生格式的对象
并非所有对象类型都有自己的文本表示形式。例如,设备配置和任务配置等对象会保存在扩展名为 .swap 的交换文件中。xml.v3其中包含了原件CODESYS序列化。这些文件仍然是文本文件,因此在版本控制系统中仍会产生逐行差异。一旦有原生格式可用,这类对象就可以迁移到原生格式。
更多信息请参见以下内容:迁移对象
如果一个对象的内容完全无法解释,那么该对象保持不变,因此不会丢失任何信息。