您可以使用符号配置为项目变量创建符号说明。单击“Project Add Object” 向设备树中添加符号配置对象。然后定义特定预置。请参见下面的对话框:“添加符号配置”.
双击“Symbol Configuration” 对象,打开符号配置编辑器。
添加符号配置 "对话框
功能 :此对话框用于定义“Symbol Configuration” 对象的默认值。
请致电 :“项目 添加对象 符号配置” 菜单;应用程序对象的上下文菜单。
“在 XML 中包含注释” |
导出带有变量注释的符号文件。 |
“支持 OPC UA 功能” |
请注意:该选项的可用性和可编辑性取决于设备。
|
有关布局选项的详细信息和示例,请参阅下一节 "符号配置编辑器"。 |
|
“兼容性布局” |
此设置用于兼容旧项目。为客户端创建的数据布局尽可能与编译器内部创建的布局相匹配。 |
“优化布局” |
建议用于新项目。计算与内部编译器布局分离的优化输出布局。不会产生任何未发布元素的间隙,并严格满足数据类型内存对齐的要求。需要 3.5.7.0 或更高版本的编译器。 |
符号配置编辑器
编辑器包括一个包含所选变量的表格和一个用于编辑的菜单栏。
|
您可以使用该按钮激活或禁用配置编辑器中使用的以下变量类别:
|
|
编译项目。要求在配置编辑器中对变量进行当前准备。 |
|
|
“下载” |
如果您使用的设备支持自己的符号配置应用文件,那么工具栏上也有此按钮。如果在联机模式下更改了符号配置,则可以立即将新的 |
“工具” |
“保存 XSD 方案文件” :此命令将打开在文件系统中保存文件的标准对话框。使用该命令,您可以准备符号文件的 XSD 格式,例如用于外部程序。 |
“访问权限” |
单击“访问权限” 列中的符号,即可更改符号的访问权限。 访问权限图标(按升序排列)
请注意:如果控制器有用户管理功能,则可以使用符号集来定义客户对相同符号的访问权限。 |
“最大值” |
该符号的最大访问权限 |
“属性” |
如果访问权限是按属性分配的,则此处会显示相应的图标。 |
“Type” |
别名数据类型也显示在CODESYS V3.5 SP6 及更高版本中。例如: |
“成员” |
在“Symbols” 列中选择符号配置复选框,也可以添加结构化数据类型的变量。这将导致CODESYS 导出所有成员变量符号。不过,在“成员” 栏中,您可以单击省略号按钮 ( |
“列表框” |
已定义的符号集 |
|
打开“Add New Symbol Set” 对话框,为该集合指定名称 |
|
打开“Add Duplicate from Selected Symbol Set” 对话框。为列表框中选择的数据集创建副本。您可以更改默认名称 ( |
|
打开“Rename Selected Symbol Set” 对话框,为列表框中选择的符号集指定另一个名称。 |
|
打开一个对话框,提示是否删除列表框中选择的符号集。 |
“配置符号权限” |
打开设备编辑器的“符号权限” 选项卡。登录后,您可以为每个用户组(客户端)分配不同的访问权限,以访问列表框中选择的符号集。 |
注释和属性 "对话框
“启用扩展的 OPC UA 信息” |
请注意:该选项的可用性和可编辑性取决于设备。
启用 OPC UA 设置后,属性将根据以下规则包含在符号表中:
|
“包括评论” |
要求:“启用扩展 OPC UA 信息” 已激活。
|
“包括属性” |
|
“还包括类型节点的注释和属性” |
要求:“包含注释” 已激活。
|
“包含命名空间节点标志” |
|
“包括评论” |
在编译器 V3.5.5.x 至 V3.5.8.0 版本中,这包括设置“Prefer document-comments” 。 |
“包括属性” |
|
“还包括类型节点的注释和属性” |
要求:“包含注释” 已激活。
|
要求:“包含注释” 已激活。 |
|
“包括文件注释” “包括正常注释 ” “始终包含两种类型的评论” “首选文档注释,退为普通注释” “首选普通注释,退而求其次使用文档注释” |
该选项决定了保存在符号配置中的注释。 |
要求:“包含属性” 已激活。 |
|
“包括所有属性” “包括以” “用正则表达式过滤属性” |
定义保存在符号配置中的属性。 |
“匹配简单标识符” |
它的存在主要是为了向后兼容旧版本,以模拟旧版本的行为。 |
设置:配置与 IEC 任务同步
对于同步一致访问,符号客户端在处理读取或写入请求时会在运行时等待,直到找到没有 IEC 任务执行的时间。当检测到该间隙时,将阻止重新启动 IEC 任务,直到变量列表中的所有值都被复制。然后,IEC 的任务照常重新规划。同步访问会导致 IEC 任务启动延迟,表现为抖动增加。由于运行时中的所有应用程序都由一个通用调度程序管理,这种对实时行为的潜在损害会影响到设备上的所有应用程序。设备的所有应用程序都会受到影响,无论它们是否包含符号配置,也无论它们是从一个或多个CODESYS 项目下载到控制器的。因此,只有在允许访问时下载到控制器的所有应用程序时,运行时才会允许同步一致性访问。
该设置位于“Settings” 菜单的符号配置编辑器中。此外,单击“Properties” 命令,然后在打开的对话框中选择“Options” 选项卡时,该设置也会出现在控制器的上下文菜单中。
对于没有符号配置的应用程序,只能在属性对话框中进行设置。




注意

更改设置后,必须重新加载通过下载或在线更改下载到设备上的所有应用程序,并更新所有启动应用程序。
在哪些情况下需要同步一致访问?
一般来说,显示值不需要一致的数值,因为改变的数值来自哪个 IEC 任务周期大多无关紧要。对于很少变化的数值来说,这完全无关紧要。即使在写入时,也几乎没有硬性的一致性要求,因为通常情况下,机器必须处于一种待机模式(例如在写入配方时),在这种模式下,无法直接访问写入配方的值。
相反,对于保存生产数据的数据库链接来说,一致的数值尤为必要。但是,对于时钟式机器,这些值必须与生产时间同步(每个生产的产品设置一个值),而不能与一个或多个 IEC
任务保持一致。在机器时钟方面,IEC 应用必须确保一致性。为此,生产周期中出现的值通常会被收集到一个全局变量列表中。在周期结束时,符号客户端会通过一个附加变量(BOOL
或计数器)收到机器周期已结束且数值有效的通知。现在,客户有机会将生产周期中的数值存档。根据需要,还可以通过释放变量反向显示成功读数,以便在生产数据无法存档的情况下停止生产。同步一致访问对于这种用例既无必要,也无帮助,因为同步是在应用程序层面进行的。
与此相反,符号客户机的同步一致访问通常应用于流程工业中连续运行的系统中,例如在 60 秒的固定时间内循环一致地写入流程值,而不使用生产时钟。这可以通过类似于时钟机器(见上文)的应用级同步或同步一致的符号访问来实现。后者的优点是无需在 IEC 程序中执行任何逻辑,访问权限完全由客户控制。




小心

由于抖动增加,同步一致监控不适合运动或实时关键应用。因此,只有在绝对必要的情况下,才应释放和使用同步一致访问。
如果客户端使用该设置释放的同步一致访问,则该设置对客户端有影响。根据运行时调度程序的不同,读/写访问的响应时间可能会出现更多抖动,因为系统可能仍需等待 IEC 任务的执行间隙。当 IEC 任务长时间运行(在数百毫秒范围内)或 CPU 负载接近 100%(在数百毫秒范围内)时,读取和/或写入访问仍可能失败。因此,数值的可用性还取决于 IEC 应用对控制器的负载。
此外,如果客户端在定义要读取或写入的变量列表时遵守以下规定,就能最大限度地减少对自身和运行时的影响:
-
只同步一致地访问绝对需要的变量。
-
将必须保持一致的变量和可能不一致的变量分开列出。
-
将包含多个一致变量的变量列表分成多个较小的列表。
-
为循环读取数值选择尽可能大的读取间隔。
支持当前配置和可能的纠正措施
符号表中标为红色的条目表示变量已配置导出到符号文件,但目前在应用程序中无效。原因可能是声明已从程序块中删除。
在 3.5.8.0 及更高版本中,如果 IEC 代码中未使用已配置符号的变量,或未对 I/O 变量进行映射,则编辑器中会出现警告。此外,编译器还会指出过时的库版本中引用的变量 n 符号配置。




注意

程序代码中未使用的对象变量默认保持未编译状态,因此无法在符号配置中使用。
不过,当满足以下条件之一时,CODESYS 会提供来自符号配置中未编译对象的变量:
-
选择“Link always” POU 属性。
-
使用
{attribute 'linkalways'}
pragma。
数据布局类型示例
布局类型示例
以下 IEC 应用程序的示例将说明,由于未发布的符号、内部 "不可见 "指针或设备描述中的 "打包模式 "定义,客户端内存布局中可能会出现间隙。通过“Optimized layout” 设置,可以避免间隙。根据所选布局设置的不同,符号文件包含不同的内存位置大小和偏移信息。
示例:大型结构
// Example of a big structure, where not all members get published : 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_LargeStructure" size="208" nativesize="208" typeclass="Userdef" pouclass="STRUCTURE" iecname="LargeStructure"> <UserDefElement iecname="PublicNumber" type="T_INT" byteoffset="0" vartype="VAR" /> <UserDefElement iecname="SecondNumber" type="T_INT" byteoffset="104" vartype="VAR" /> </TypeUserDef>
符号文件、大型结构、优化布局选项
<TypeUserDef name="T_LargeStructure" size="4" nativesize="208" typeclass="Userdef" pouclass="STRUCTURE" iecname="LargeStructure"> <UserDefElement iecname="PublicNumber" type="T_INT" byteoffset="0" vartype="VAR" /> <UserDefElement iecname="SecondNumber" type="T_INT" byteoffset="2" vartype="VAR" /> </TypeUserDef>
示例:地址不均匀的结构
// The following mechanisms can cause memory misalignment: // - {attribute 'relative_offset':='…'} at a member // - {attribute 'pack_mode':='…'} at a structure declaration // - target setting 'memory-layout\pack-mode' in the device description {attribute 'pack_mode':='1'} TYPE UnevenAddresses: STRUCT {attribute 'relative_offset':='3'} {attribute 'symbol':='readwrite'} PublicNumber : INT; {attribute 'symbol':='readwrite'} PublicValue : LREAL; END_STRUCT END_TYPE
符号文件中的结果条目;注意 "size "和 "byteoffset":
符号文件、地址不均的结构、兼容性布局选项
<TypeUserDef name="T_UnevenAddresses" size="13" nativesize="13" typeclass="Userdef" pouclass="STRUCTURE" iecname="UnevenAddresses"> <UserDefElement iecname="PublicNumber" type="T_INT" byteoffset="3" vartype="VAR" /> <UserDefElement iecname="PublicValue" type="T_LREAL" byteoffset="5" vartype="VAR" /> </TypeUserDef>
符号文件、地址不均的结构、优化布局选项
<TypeUserDef name="T_UnevenAddresses" size="16" nativesize="13" typeclass="Userdef" pouclass="STRUCTURE" iecname="UnevenAddresses"> <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 POU 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_POU" size="24" nativesize="24" typeclass="Userdef" pouclass="FUNCTION_BLOCK" iecname="POU"> <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_POU" size="4" nativesize="24" typeclass="Userdef" pouclass="FUNCTION_BLOCK" iecname="POU"> <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_POU" size="12" nativesize="12" typeclass="Userdef" pouclass="FUNCTION_BLOCK" iecname="POU"> <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_POU" size="4" nativesize="12" typeclass="Userdef" pouclass="FUNCTION_BLOCK" iecname="POU"> <UserDefElement iecname="in" type="T_INT" byteoffset="0" vartype="VAR_INPUT" /> <UserDefElement iecname="out" type="T_INT" byteoffset="2" vartype="VAR_OUTPUT" /> </TypeUserDef>
另见