对象:符号配置
您可以使用符号配置为项目变量创建符号描述。点击
向设备树中添加符号配置对象,然后定义特定的默认设置。提示
为了向 OPC UA 服务器提供符号,我们建议使用新的配置编辑器 IEC 符号组配置 为了 CODESYS 3.5 SP18 和更高。
双击 符号配置 对象打开符号配置编辑器。
对话框:添加符号配置
功能:此对话框用于定义默认值 符号配置 目的。
称呼: 菜单;应用程序对象的上下文菜单
在 XML 中包含注释 | 导出带有分配给变量的注释的符号文件 |
支持 OPC UA 功能 | 注意:此选项的可用性和可编辑性取决于设备。
|
有关布局选项的更多信息和示例,请参阅下一节“符号配置编辑器”。 | |
兼容布局 | 此设置用于旧项目的兼容性。为客户端创建的数据布局尽可能与编译器内部创建的布局匹配。 |
优化布局 | 推荐用于新项目 以与内部编译器布局分离的优化形式计算输出布局 不会为未发布的元素生成任何间隙,并严格满足数据类型的内存对齐要求需要编译器版本 3.5.7.0 或更高版本。 |
符号配置编辑器
该编辑器包括一个包含选定变量的表格和一个用于编辑的菜单栏。
看法 | 您可以使用此按钮激活和停用配置编辑器中使用的以下类别的变量:
此过滤器还列出了已通过以下方式在符号文件中标记为导出的变量: 这 属性 列显示了编译指示设置了哪些访问权限。 |
建造 | 编译项目 当前在配置编辑器中准备变量的要求 未对齐的数据仅适用于未对齐的内存访问如果符号配置包含未对齐的值或设备的符号 才不是 支持所需的(未对齐的)内存访问,则设置错误。 将显示以下消息: 组件 <名字> 符号类型的 <符号类型名称> 没有内存对齐就无法发布。 这可以防止潜在的错误代码下载到控制器,从而导致控制器发生不可预测的崩溃。 |
下载 | 如果您使用的设备支持其自己的应用程序文件进行符号配置,则工具栏中也可以使用此按钮。 当您在在线模式下更改符号配置时,您可以下载新的 |
设置 |
|
工具 | 保存 XSD 方案文件:此命令打开用于在文件系统中保存文件的标准对话框。使用此命令,您可以准备符号文件的 XSD 格式,例如用于外部程序。 |
访问权 | 您可以通过单击符号中的符号来更改符号的访问权限 访问权 柱子。 . 访问权限图标(按升序排列)
注意:如果控制器具有用户管理功能,您可以使用符号集来定义对相同符号的特定于客户端的访问权限。 |
最大 | 该符号的最大访问权限 |
属性 | 如果访问权限是按属性分配的,则此处会显示相应的图标。 |
类型 | 离开 CODESYS V3.5 SP6 还显示别名数据类型。 例子: |
会员 | 您还可以通过在列中激活结构化数据类型的变量来激活它们 符号 添加到符号配置。这最初会导致: CODESYS 为所有“成员”变量导出符号。通过按钮 注意:此选择适用于导出符号的该数据类型的所有实例。 如果无法选择结构化类型的成员,则星号 ( |
列表框 | 已定义的符号集 |
| 打开 添加新符号集 用于指定该集合的名称的对话框 |
| 打开对话框 添加所选符号组的副本。 为列表框中选定的集创建一个副本。您可以更改默认名称( |
| 打开 重命名选定的符号集 用于为列表框中选定的集指定另一个名称的对话框 |
| 打开一个对话框,提示是否应删除列表框中选定的符号集 |
配置符号权限 | 打开 符号权利 设备编辑器的选项卡 登录后,您可以为每个用户组(客户端)分配对列表框中所选符号集的不同访问权限。 |
有关更多信息,请参阅: 选项卡:符号权限
对话框:注释和属性
启用扩展 OPC UA 信息 | 注意:此选项的可用性和可编辑性取决于设备。
如果 OPC UA 设置处于活动状态,还可以包含注释和属性等附加信息。 . 启用 OPC UA 设置后,属性将根据以下规则包含在符号表中:
|
包含评论 | 要求: 启用扩展 OPC UA 信息 被激活。
|
包含属性 | |
还包括类型节点的注释和属性 | 要求: 包含评论 被激活。
|
包含命名空间节点标志 |
|
包含评论 |
在编译器版本 V3.5.5.x 至 V3.5.8.0 中,这包括设置 更喜欢文档注释。 |
包含属性 |
|
还包括类型节点的注释和属性 |
|
要求: 包含评论 被激活。 | |
包括文档评论 包括正常评论 始终包含两种类型的评论 更喜欢文档评论,回退到普通评论 更喜欢普通评论,回退到文档评论 | 这些选项确定保存在符号配置中的注释。 |
要求: 包含属性 被激活。 | |
包括所有属性 包括以以下开头的属性 使用正则表达式过滤属性 | 定义保存在符号配置中的属性 |
匹配简单标识符 | 存在主要是因为向后兼容旧版本以模拟旧行为 |
设置:配置与 IEC 任务的同步
对于同步一致访问,符号客户端在处理读或写请求时在运行时等待,直到找到没有执行 IEC 任务的时间。当检测到此间隙时,将阻止重新启动 IEC 任务,直到复制了变量列表的所有值。然后,IEC 任务再次照常进行。同步访问可能会导致 IEC 任务延迟启动,表现为抖动增加。由于运行时中的所有应用程序均由通用调度程序管理,因此实时行为的这种潜在损害会影响设备上的所有应用程序。设备的所有应用程序都会受到影响,无论它们是否包含符号配置或是否已从一个或多个下载到控制器 CODESYS 项目。因此,仅当运行时允许在访问时下载到控制器的所有应用程序时,运行时才允许同步一致性访问。
提示
该设置位于符号配置的编辑器中 设置 菜单。此外,当您单击 特性 命令,然后选择 选项 打开的对话框中的选项卡。
对于没有符号配置的应用程序,只能在属性对话框中找到该设置。
重要
更改设置后,必须重新加载通过下载或在线更改下载到设备的所有应用程序,并更新所有启动应用程序。
在什么情况下需要同步一致访问?
通常,显示值不需要一致的值,因为更改值源自哪个 IEC 任务周期基本上无关。它与很少改变的值完全无关。即使在写入时也几乎没有硬一致性要求,因为通常机器必须处于一种待机模式(例如在写入配方时),在这种模式下无法直接访问作为配方写入的值。
相比之下,对于数据库链接保存生产数据来说,一致的值尤为必要。然而,对于时钟机器,这些值必须与生产计时同步(每个生产的产品设置一个值),并且与一项或多项 IEC 任务的参考不一致。就机器时钟而言,IEC 应用程序必须已确保一致性。为此,生产周期中出现的值通常收集在全局变量列表中。在循环结束时,符号客户端通过附加变量(BOOL
或计数器)表示机器周期已结束且值有效。现在,客户有机会归档生产周期中的值。根据需要,还可以通过释放变量以相反的方向显示成功读取,以便在生产数据无法归档时也可以停止生产。同步一致访问对于此用例来说不是必需的,也没有帮助,因为同步是在应用程序级别执行的。
相比之下,符号客户端的同步一致访问通常应用于流程工业中,系统连续运行而无需生产时钟,例如在 60 秒的固定时间范围内一致且循环地写入过程值时。这可以通过类似于时钟机器(见上文)的应用程序级别上的同步或通过同步一致符号访问的同步来完成。后者的优点是 IEC 程序中无需实现任何逻辑,并且访问完全由客户端控制。
小心
由于抖动增加,同步一致监控不适合运动或实时关键应用。由于这些原因,只有在绝对必要时才应该释放和使用同步一致访问。
如果客户端使用此设置启用的同步一致访问,该客户端也会受到影响。一方面,根据运行时系统的调度程序,读/写访问的响应时间可能会更加不稳定,因为您可能仍然需要等待 IEC 任务执行的间隙。此外,如果 IEC 任务运行很长时间(在几百毫秒的范围内),或者一个或多个 IEC 任务在较长一段时间内(在几100 毫秒),几乎是 100%。因此,这些值的可用性还取决于 IEC 应用程序对控制的利用。
此外,如果客户端在要读取或写入的变量列表的定义中遵守以下规定,则可以最大限度地减少对自身和运行时的影响:
仅对那些绝对一致需要的变量进行同步一致访问
必须一致的变量和可能不一致的变量的单独变量列表
将具有多个一致变量的变量列表分成几个较小的列表
选择尽可能大的循环读取值的读取间隔
支持当前配置和可能的纠正措施
符号表中标记为红色的条目显示它们配置为导出到符号文件但当前在应用程序中无效的变量。造成这种情况的原因可能是声明已从块中删除。
在版本 3.5.8.0 及更高版本中,如果 IEC 代码中未使用已配置符号的变量,或者在 I/O 变量的情况下未映射,则编辑器中会出现警告。此外,编译器还会在符号配置中指示从过时的库版本引用的变量。
重要
默认情况下,程序代码中未使用的对象变量保持未编译状态,因此在符号配置中不可用。
这 始终链接 POU 属性已选择。
这
{attribute 'linkalways'}
使用了编译指示。
有关更多信息,请参阅: 对话框:属性:构建 和 对话框:属性:选项:控制器
数据布局类型的示例
未发布所有成员的大型结构示例:
STRUCT {attribute 'symbol':='readwrite'} PublicNumber : INT; {attribute 'symbol':='none'} InternalData : ARRAY[0..100] OF BYTE; {attribute 'symbol':='readwrite'} SecondNumber : INT; {attribute 'symbol':='none'} MoreData : ARRAY[0..100] OF BYTE; END_STRUCT END_TYPE
符号文件中的结果条目(注意“size
“ 和 ”byteoffset
”):
<TypeUserDef name="T_GrosseStruktur" size="208" nativesize="208" typeclass="Userdef" pouclass="STRUCTURE" iecname="GrosseStruktur"> <UserDefElement iecname="PublicNumber" type="T_INT" byteoffset="0" vartype="VAR" /> <UserDefElement iecname="SecondNumber" type="T_INT" byteoffset="104" vartype="VAR" /> </TypeUserDef>>
<TypeUserDef name="T_GrosseStruktur" size="4" nativesize="208" typeclass="Userdef" pouclass="STRUCTURE" iecname="GrosseStruktur"> <UserDefElement iecname="PublicNumber" type="T_INT" byteoffset="0" vartype="VAR" /<UserDefElement iecname="PublicNumber" type="T_INT" byteoffset="0" vartype="VAR" /> <UserDefElement iecname="SecondNumber" type="T_INT" byteoffset="2" vartype="VAR" /> </TypeUserDef>
以下机制可能会导致成员内存错位:
{attribute 'relative_offset':='…'}
给会员
{attribute 'pack_mode':='…'}
在结构声明中
Target setting 'memory-layout\pack-mode'
在设备描述中
{attribute 'pack_mode':='1'} TYPE UngeradeAdressen : STRUCT {attribute 'relative_offset':='3'} {attribute 'symbol':='readwrite'} PublicNumber : INT; {attribute 'symbol':='readwrite'} PublicValue : LREAL; END_STRUCT EMDTYPE
符号文件中的结果条目; (注意“size
“ 和 ”byteoffset
”):
<TypeUserDef name="T_UngeradeAdressen" size="13" nativesize="13" typeclass="Userdef" pouclass="STRUCTURE" iecname="UngeradeAdressen"> <UserDefElement iecname="PublicNumber" type="T_INT" byteoffset="3" vartype="VAR"> <UserDefElement iecname="PublicValue" type="T_LREAL" byteoffset="5" vartype="VAR" /> </TypeUserDef>
<TypeUserDef name="T_UngeradeAdressen" size="16" nativesize="13" typeclass="Userdef" pouclass="STRUCTURE" iecname="UngeradeAdressen"> <UserDefElement iecname="PublicNumber" type="T_INT" byteoffset="0" vartype="VAR" /> <UserDefElement iecname="PublicValue" type="T_LREAL" byteoffset="8" vartype="VAR" /> </TypeUserDef>
// Each POU contains some implicit variables, which do not get published. Depending on the data type these might cause memory gaps of different sizes. FUNCTION_BLOCK POUx IMPLEMENTS SomeInterface VAR_INPUT in : INT; END_VAR VAR_OUTPUT out : INT; END_VAR VAR END_VAR
每个 POU 都包含一些隐式变量,这些变量不会被发布。如果它是这样的数据类型 __XWORD
,则不同大小的内存间隙会导致客户端数据布局,具体取决于系统是 64 位还是 32 位。
64 位和 32 位符号文件中的结果条目; (注意“size
“ 和 ”byteoffset
”):
符号文件、功能块、兼容性布局选项、64 位
<TypeUserDef name="T_Baustein" size="24" nativesize="24" typeclass="Userdef" pouclass="FUNCTION_BLOCK" iecname="Baustein"> <UserDefElement iecname="in" type="T_INT" byteoffset="16" vartype="VAR_INPUT" /> <UserDefElement iecname="out" type="T_INT" byteoffset="18" vartype="VAR_OUTPUT" /> </TypeUserDef>
符号文件、功能块、优化布局选项、64 位
<TypeUserDef name="T_Baustein" size="4" nativesize="24" typeclass="Userdef" pouclass="FUNCTION_BLOCK" iecname="Baustein">> <UserDefElement iecname="in" type="T_INT" byteoffset="0" vartype="VAR_INPUT" /> <UserDefElement iecname="out" type="T_INT" byteoffset="2" vartype="VAR_OUTPUT" /> </TypeUserDef>
符号文件、功能块、兼容性布局选项、32 位
<TypeUserDef name="T_Baustein" size="12" nativesize="12" typeclass="Userdef" pouclass="FUNCTION_BLOCK" iecname="Baustein"> <UserDefElement iecname="in" type="T_INT" byteoffset="8" vartype="VAR_INPUT" /> <UserDefElement iecname="out" type="T_INT" byteoffset="10" vartype="VAR_OUTPUT" /> </TypeUserDef>
符号文件、功能块、优化布局选项、32 位
<TypeUserDef name="T_Baustein" size="4" nativesize="12" typeclass="Userdef" pouclass="FUNCTION_BLOCK" iecname="Baustein"> <UserDefElement iecname="in" type="T_INT" byteoffset="0" vartype="VAR_INPUT" /> <UserDefElement iecname="out" type="T_INT" byteoffset="2" vartype="VAR_OUTPUT" /> </TypeUserDef>
有关更多信息,请参阅: 符号配置。