函数库可以提供函数,功能块以及数据类型,全局变量和可视化,所有这些都可以被用于工程中定义的其它的POUs程序和变量。
默认的函数库文件是“.library*”,不同于CoDeSys V2.3版本以及之前版本中的“.lib”文件。加密库的扩展名为*.compiled-library。库可以通过一个许可证进行加密(加密狗)。
工程中函数库的管理是通过库管理来实现的,函数库是通过函数资源对话框实现安装。
工程函数本地和全局“查找和替换”也是包含在函数库中的。
工程中安装以及已经包含的函数库
- 函数库可以管理本地系统上的一个或者多个存储库(文件夹,位置)。一个函数库在安装到本地系统之前不能被工程使用。函数库的安装可以通过CoDeSys中的
⇘
函数管理对话框实现。
- 安装的前提条件是,一个函数库在
⇘
“工程信息
”中必须具有一个标题,版本信息和公司名称。对于一个类别的隐含属性可以在以后的函数管理过程中进行定义。
- 如果没有工程信息中没有分配类别,函数将自动归属于"Miscellaneous"类别中。更多的类别选项可能在一个或者多个xml-文件*.libcat.xml中定义,这些文件可以通过工程信息对话框导入,进行类别的选择。请参阅以下帮助文档
⇘
“创建 V3函数库,编码,文档,发布”。
-
⇘
“库管理器
”用于加载工程使用的库。在一个“标准工程”中函数库管理将自动加载到默认设备上。当然,一个函数库管理也可以直接加载到
⇘
设备树 (在设备和一个应用下) 或者在
⇘
POUs窗口下。像其他对象
⇘
“添加对象”的对话框一样。函数库中调用其他的函数库默认也会在函数库管理中显示,当然“隐藏”函数库也是可以的,参阅
⇘
参考库,“当创建……”,2..。
- 如果 '.library*' 文件可用(并且不是像往常一样-只是加密版本'*.compiled-library'),可以通过函数库管理上鼠标双击打开POUs中相关的库。
- 如果一个函数快被另一个应用调用,所有的库和资源将在函数库管理对话框中按照这种顺序进行查询。参阅
⇘
特殊访问.
函数库的引用
- 函数库中可以包含更深层次的函数库(引用的库),其中的嵌套可以有任何形式。当添加一个函数库时,如果函数库包含其他引用的函数库,那么那个函数库会自动添加。
函数库的参考应该通过占位符进行定义,以便解决版本依赖性和使用特定函数库的需要。参阅
⇘
“函数库占位符,函数库配置文件”
- 当创建一个包含其他函数库的库时,可以在每个参考库中的
⇘
属性中进行说明,他会在插入一个项目中时连同他的“父”函数库一同插入:
- 1. 在
⇘
“库管理器
”中,被引用的库定义在“父”库下面,可以被激活。当然也可以在工程中对他们进行“隐藏”函数库。
- 2.如果创建一个“容器”库,这是一个没有定义自己模块,只是引用其他库,并且可以简单的访问这些模块的库。“容器”库是为了在工程中包含一些函数库的时候通过一个函数库进行调用的方式。在这种情况下,可以设置函数库中包含的库为“顶级库”,可以在使用时忽略他们的命名空间。可以在通过选项“发布……”激活。然而这个选项应该是仅在创建容器库的时候激活并且应该被谨慎的进行处理!
- 对于如可去访问模块或者函数库中变量的引用,请参阅
⇘
“对函数库中模块或者变量的特殊访问”。
函数库版本
- 一个函数库的不同版本可以同时安装在一个系统上。
- 在一个工程中可以包含相同函数库的不同版本。应用程序使用哪个版本是按照如下规定进行的:
如果在相同的函数库管理中多个版本都有相同的级别,那么将根据当前的
⇘
“属性...
”来决定哪个版本将会被调用(默认的或者是最新版本)。
如果在同一个函数库管理中一个函数库的不同多个版本有不同的级别(类似以下情况
⇘
参考库),特殊访问的库或者通过添加适当的命名空间得到的库(请参阅下段)。
- 尤其是在一个函数库中调用了其他的函数库,并且也是为了使工程编译为了多个不同的目标系统,强烈建议使用占位符,以便避免版本定义或者特殊函数库调用所产生的麻烦!参阅
⇘
“函数库占位符,函数库配置文件”
函数库占位符,函数库配置文件
函数库占位符的使用使得不同目标系统中的不同编译器的版本编译的工程相互兼容。当添加一个函数库到工程中时,可以考虑在函数版本定义的时候添加一个占位符。这样根据当前占位符的有效定义,总是会调用函数库的当前版本。一个有效的函数库将会按照以下顺序进行调用,越往后优先级越高。例如 3. 具有最先调用优先级:
1. 函数库配置,在系统初始化的时候默认调用,定义了编译器版本的一个占位符
2. 当前设定目标的设备描述,定义特定设备的占位符方案(如果没有可用设备,占位符的“默认方案”将会被使用)
3. 在函数管理中的占位符对话框,其中会有针对当前工程的占位符的方案。请注意,这是最终决议!它只能在选项“启用简单库处理”没有激活的情况下才能进行编辑,所以在进行修改前要慎重考虑!
通过以下文档了解更多:
在函数库管理中添加一个函数库:
⇘
“‘占位符’子对话框”
在函数库管理中配置占位符对话框:
⇘
“函数库占位符,函数库配置文件”
函数库资源中的函数库配置对话框:
⇘
“函数库简介”
对函数库中模块或者变量的特殊访问
- 基本上,如果在一个工程中有多个相同的模块或者变量,每个模块的访问必须是唯一的,否则编译器将会出错。本文适合本地工程模块或者变量,以及一些函数库中包含的变量或者包含的函数库参数。在这种情况下,通过函数库的命名空间进行访问是唯一一种方式。
- 函数库默认的命名空间是定义在
⇘
“属性...
”中。如果没有明确定义,它将等同于函数库的名称。然而,当创建一个函数库工程时,可以在属性对话框中指定一个命名空间。在之后,当工程中包含一个库时,命名空间也可以被本地用户在属性对话框中进行修改。
- 示例:假设下面的示例函数库的“命名空间”中的 Lib1中指定函数库的属性为 "Lib1"。见表格中右列中 定义在模块 module1和POU1中特殊变量访问的命名空间var 1
|
在工程中变量var1可以在以下位置获得:
|
通过使用特殊的命名空间访问变量var1
|
(1)
|
位于POUs窗口中的全局函数库管理中的Lib1函数库中
|
"Lib1.module1.var1"
|
(2)
|
位于设备窗口中的Dev1设备下的App1应用中函数管理中的Lib1函数库
|
"Dev1.App1.Lib1.module1.var1"
|
(3)
|
位于POUs窗口中的函数库F_Lib中包含的函数库Lib1中
|
默认情况下(函数库属性中的选项“发布……”是禁止使用的): "F_Lib.Lib1.module1.var1"
如果选项“发布……”可用,module1会被认为是一个顶级库的一部分。因此访问可以通过 "Lib1.module1.var1" 的方式或者函数库没有属性“只能合格访问”(见下文): "module1.var1"。在当前的例子中,将会导致编译器的错误,因为访问路径不是唯一的,见 (1)和(4)。
|
(4)
|
在POUs窗口中定义的模块module1
|
"module1.var1"
|
(5)
|
在POUs窗口中定义的对象POU1
|
"POU1.var1"
|
- 从应用或者其他函数库中访问函数库中模块或者变量时可以强制执行命名空间,因为这个原因,相应的库必须具有以下属性,属性定义在编程系统创建一个库时的工程信息对话框中的选项卡“属性”中:类型:“文本”,关键名 "LanguageModelAttribute",变量值:“只能合理访问” (参见下表格)。如果一个函数库模块或者变量没有前面的命名空间将会导致编译错误。
创建 V3函数库,编码,文档,发布
- 一个 CoDeSys工程可以被保存为一个函数库(<工程名>.library)并且可以在保存的同时安装到‘系统’的函数资源库中。只有在POUs窗口中管理的对象被认为是一个函数库工程。如果要有针对性的创建一个项目库,建议在‘新建工程’对话框中选择‘空模板库’。
进一步说明如下:
- 在
⇘
“工程信息
”中一个标题和版本以及公司必须被指定。如果默认命名空间应该是区别于库名称,在这里可以立即进行定义。此外,可以在类别中进行定义,因为这些都是以后在函数库资源库以及函数库管理中存储的条目。如果函数库属于另一个类别而不是默认的‘杂项’,一个适当的列表描述必须被加载,可以通过一个 XML-文件 *.libcat.xml或者从另一个已经包含相关描述文件的库实现。如果需要,一个新的类别描述文件必须被创建或者在一个现有的文件上做修改。 选定类别和基本属性描述文件中的信息将会立即被转换到当前的库工程中,或者在库资源中安装库的时候。因此库类别应该在库资源管理中被获知。如果之后另一个库包含相同的描述文件单数具有不同的ID,那么新文件中的信息将会在库资源管理中起效。
如果需要对库工程进行保护,防止无意的修改,应该将工程信息对话框中库的状态改为发布。
如果创建一个加密函数库,许可信息必须添加到工程信息对话框中的‘许可列表’中,并且工程必须保存为“已编译的函数库”。
- 如果一个函数库中包含更多的库,应该考虑所有这些
⇘
引用的库应该具有自己的行为,当一个“父”类库包含在工程中时。这涉及到版本管理,命名空间,可见性以及访问性,所有这些都可以在引用库中的配置属性对话框中进行配置。如果这个库之后被工程调用,同时也引用另一个设备描述文件,一个
⇘
占位符可以在调用的时候进行配置。
- 如果函数库模块在查看和访问时具有一定的权限,一个函数库可以被存储为
⇘
加密格式作为“已编译函数库”(<工程名>.compiled-library)。
- 函数库中的数据结构可以标记为libinternal。这些不公开的对象拥有属性
⇘
‘隐藏’因此不会出现在函数管理列表中,以及“列表组件”或者输入助手中。
- 为了给用户提供一个比较简单的函数库模块信息,在定义模块参数的时候可以添加适当的注释。这些注释将在工程对函数库进行调用的时候出现,位于函数库管理中的
⇘
‘文档’表格 中。
- 作为在函数库中定义一个全局常量,当之后在工程中进行使用的时候,可以被应用程序中的值进行替换。参阅帮助文件“参数列表”:
⇘
“库中的GVL 常量配置(“参数列表”)”
- 以下命令在函数库工程进行存储时的文件菜单中可见:
⇘
“工程另存为...
”
⇘
“保存工程并且将函数库添加到函数库管理中”
⇘
“保存工程作为一个编译的函数库”(编码)
CoDeSys V2.3 函数库
- 由CoDeSys V2.3版本以及更早的版本创建的函数库 (*.lib)支持更多:
- 一个“旧的”函数库(*.lib)可以通过CoDeSys V3打开从而直接转换为“V3函数库” (*.library)。
- 当打开一个旧工程时,调用旧的函数库,可以选择是否保持这些库或者用其他的库进行替换。如果该工程不改变,那么它调用的旧的函数库将被新的形式替换并且自动的添加到函数资源管理中。如果库中不包含必要的
⇘
“工程信息
”,那么这些库会立即安装。当一个工程中已经处理过包含的就函数库,会将结果自动的保存在工程中,因此如果工程中再次出现旧版本的函数库时
⇘
“打开工程...
”处理不需重复进行,将会自动完成。
- 参阅帮助文档了解如何打开并转化工程以及函数库。
内部和外部 resp. library 模块,以后连接
- 一个“外部函数库”不同于内部函数库 (CoDeSys函数库工程),他是一个通过CoDeSys外部编译器如 ANSI-C/C++ 等编译的函数库文件。它必须是在目标系统上并且在应用程序运行的时候进行连接。占位符的概念 (
⇘
“函数库占位符,函数库配置文件”)用于处理目标系统的连接。
- 为了创建一个完全的外部连接文件,CoDeSys允许生成相应的C框架和C接口文件 (m4 文件格式) 从CoDeSys函数库工程中。使用此功能保证CoDeSys中的函数库和外部函数库一致。参阅调用命令
⇘
“生成运行系统文件”。
- 像CoDeSys V2.3版本中一样,同样的在CoDeSys中可以将函数库编译为一个外部库函数,在运行系统中的应用程序运行之前得到后续连接。更深入的同样可以定义函数库中特殊的模块为“后续连接”。出于调用模块的目的(所有或者部分),函数属性“后续连接”应该被激活 (选项 ("
⇘
外部执行")。
授权库
函数库可以通过一个授权进行保护。授权管理是在
⇘
“授权管理”中进行。
授权的函数库也可以安装到函数资源库管理中,但是在工程中必须将授权的许可证连接到电脑上。如果没有相应的授权文件,会在函数资源管理窗口中弹出一个对话框。 可以在任何位置添加这个库,但是他会被打上一个红色的叉,并且在使用此库中的模块时将不能被编译。在函数库资源管理中的详细对话框中,你会得到一个需要授权的信息。
插图 57: 在函数库管理中的授权函数库没有被授权