CODESYS Development System > 参考,用户接口 > 对象 > “符号配置”对象 |
您可以使用符号配置为工程变量创建符号描述点击工程 ➔ 添加对象将符号配置对象添加到设备树然后定义特定的预设请参见下面的对话框:添加符号配置。
如果使用设备应用,则适用以下条件:设备应用程序本身不能具有符号配置但是,提供了来自设备应用程序的符号以供其子应用程序的符号配置中选择。 |
双击符号配置对象以打开符号配置编辑器。
功能:此对话框用于定义符号配置对象的默认设置。
调用:工程 ➔ 添加对象 ➔ 符号配置菜单;应用程序对象的上下文菜单。
在XML中包含注释 | 导出具有变量注释的符号文件。 |
支持OPC UA功能 | 注意:此选项的可用性和可编辑性取决于设备。 :下载符号配置时,还会将其他信息下载到控制器。以下信息对于操作OPC UA服务器是必需的。
|
在设备应用中添加库占位符(推荐,但可能会触发下载) | 当使用设备应用时,此选项相关: 符号配置库的库引用(可在应用程序下方的库管理器中找到)也插入到设备应用程序的库管理器中。这样做的好处是,不再必须将库数据与应用程序一起下载到控制器。将它们与设备应用程序一起下载一次,作为其他全局数据。有关更多信息,请参见有关使用设备应用程序的章节。 |
.客户端数据布局
有关布局选项的详细信息和示例,请参见下一节“符号配置编辑器”。 | |
兼容性布局 | 此设置用于兼容旧工程。为客户端创建的数据布局尽可能与编译器内部创建的布局匹配。 |
优化布局 | 推荐用于新工程。以与内部编译器布局分离的优化形式计算输出布局。不会对未发布的元素产生任何间隙,并严格满足数据类型的内存对齐要求。需要编译器版本3.5.7.0或更高版本。 |
编辑器包括一个带有选定变量的表和一个用于编辑的菜单栏。
.菜单栏
视图 | .您可以使用此按钮来激活和停用配置编辑器中使用的以下类别的变量:
|
编译 | 编译工程当前在配置编辑器中准备变量的要求。 |
设置 |
|
下载 | 如果您使用支持其自己的应用程序文件进行符号配置的设备,则该按钮在工具栏中也可用。如果在在线模式下更改符号配置,则可以立即将新<application name>._symbols文件加载到PLC。 |
工具 | 保存XSD格式文件:此命令将打开用于在文件系统中保存文件的标准对话框。使用此命令,您可以准备符号文件的XSD格式,例如供外部程序使用。 将库占位符添加到设备应用程序中(推荐,但可能会触发下载):使用设备应用程序时,此选项相关。符号配置库的库引用(可在应用程序下方的库管理器中找到)也插入到设备应用程序的库管理器中。关更多信息,请参见添加符号配置对话框中的同名选项说明。 |
.符号表
访问权限 | 您可以通过单击访问权限列中的符号来更改符号的访问权限。 .访问权限图标(升序排列)
注意:如果控制器具有用户管理,则可以使用符号集为相同的符号定义特定于客户端的访问权限。 |
最大值 | 该符号的最大访问权限 |
属性 | 如果访问权限是按属性分配的,则在此处显示相应的图标。 |
类型 | 别名数据类型也显示在CODESYS V3.5 SP6和更高版本中。例如:MY_INT : INT用于使用数据类型MY_INT(类型INT)声明的变量。 |
成员 | 您也可以通过在符号列中选中符号配置复选框来添加结构化数据类型的变量这将导致CODESYS导出所有成员变量符号。但是,在成员列中,您可以单击省略号按钮()以仅选择特定的结构部件。注意:此选择适用于此数据类型的所有导出符号的实例。如果无法选择结构化类型的成员,则成员的复选框中将显示一个星号()以指示该类型的所有可导出成员都已导出。 |
.用于符号集配置的工具栏
列表框 | 已经定义的符号集 |
添加新的符号集 | 打开添加新符号集对话框,以为此集指定名称 |
从所选符号集中添加重复项 | 打开从选定的符号集添加重复项对话框。将为下拉列表中选择的集创建一个副本。您可以更改默认名称(<group name>_duplicate)。 |
重命名所选符号集 | 打开重命名选定的符号集对话框以为下拉列表中选定的集指定其他名称。 |
删除选定的符号集 | 打开一个对话框,提示是否应删除在下拉列表中选择的符号集。 |
配置符号权限 | 打开设备编辑器的符号权限选项卡。在此登录后,可以为每个用户组(客户端)分配不同的访问权限,以对下拉列表中选择的符号集进行分配。 |
.符号表内容
启用扩展的OPC UA信息 | 注意:此选项的可用性和可编辑性取决于设备。 :符号表中包含可以由OPC UA服务器评估的其他信息。这包括用户定义的数据类型的继承信息和命名空间节点标志。如果OPC UA设置处于活动状态,则还可以包含其他信息,例如注释和属性。 .启用OPC UA设置后,将根据以下规则将属性包括在符号表中:
|
包含注释 | 要求:启用扩展的OPC UA信息已激活。 : 注释和属性也保存在符号表中。 |
包含属性 | |
还包含类型节点的注释和属性 | 要求:包括注释已激活。 :还包括类型节点的信息(用户定义的类型,例如STRUCT和ENUM元素)。 :仅直接导出的变量具有注释和属性。 |
.XML符号文件内容
包括命名空间节点标志 | :命名空间节点标志提供了有关命名空间中节点起源的其他信息。激活OPC UA时,节点标志始终在符号表中。但是,由于某些有缺陷的解析器对此文件有问题,因此可以取消将其包含在XML文件中。 |
包含注释 | :注释也可以保存在XML文件中。 在从V3.5.5.x到V3.5.8.0的编译器版本中,这包括设置首选文档注释。 |
包含属性 | :属性也可以保存在符号文件中。 |
还包含类型节点的注释和属性 | 要求:包括注释已激活。 :还包括类型节点的信息(用户定义的类型,例如STRUCT和ENUM元素)。 :仅直接导出的变量具有注释和属性。 |
对于同步一致的访问,符号客户端在处理读取或写入请求时会在运行时系统中等待,直到找到没有执行IEC任务的时间为止。当检测到此间隙时,将阻止重新启动IEC任务,直到已复制变量列表的所有值。然后,像往常一样再次计划IEC任务。同步访问会导致IEC任务的启动延迟,这表现为抖动增加。由于运行时系统中的所有应用程序均由公共调度程序管理,因此这种实时行为的潜在损害会影响设备上的所有应用程序。设备的所有应用程序都会受到影响,无论它们是否包含符号配置,或者它们是否已从一个或多个CODESYS工程下载到控制器中。因此,运行时系统仅允许同步包含访问,前提是它允许所有包含在访问时下载到控制器的应用程序。
该设置位于设置菜单的符号配置的编辑器中。此外,当您单击属性命令,然后在打开的对话框中选择选项选项卡时,该设置也位于控制器的上下文菜单中。 对于没有符号配置的应用程序,只能在属性对话框中找到该设置。 |
更改设置后,必须重新加载通过下载或联机更改下载到设备的所有应用程序,并更新所有启动应用程序。 |
在哪些情况下需要同步一致访问?
通常,无需为可视化值提供一致的值,因为与更改的值源自哪个IEC任务周期无关。很少更改值完全无关紧要。即使在写入时,也几乎没有硬性一致性要求,因为通常机器必须处于一种待机模式(例如,在编写配方时),在该模式下不能直接访问作为配方写入的值。
相反,一致的值对于数据库链接保存生产数据特别重要。但是,对于时钟控制的机器,这些值必须与生产时间同步(每个生产的产品设置一个值),并且与一个或多个IEC任务的参考不一致。关于机器时钟,IEC应用程序必须已经确保了一致性。为此,通常在全局变量列表中收集在生产周期中出现的值。在周期结束时,符号客户端通过一个附加变量(BOOL或计数器)表明机器周期已结束且值有效。现在,客户有机会归档生产周期中的值。根据需要,也可以通过释放变量以相反的方向显示成功的读数,以便在无法存储生产数据的情况下也可以停止生产。对于此用例,同步一致的访问不是必需的,也无济于事,因为同步发生在应用程序级别。
相反,例如,当过程值在固定的60s周期内被一致且周期性地写入时,符号客户端的同步一致访问通常用于具有连续运行系统且没有生产时钟的过程工业中,该过程工业通常在过程工业中使用。这可以通过类似于时钟控制的机器的应用程序级别上的同步(请参见上文)或通过同步一致符号访问的同步来进行。后者的优点是,IEC程序中无需执行任何逻辑,并且访问完全由客户端控制。
由于抖动增加,同步一致的监视不适合运动或实时关键应用。由于这些原因,仅在绝对必要时,才应释放并使用同步一致访问。 |
如果客户端使用此设置释放的同步一致访问,则它将对客户端产生影响。取决于运行时系统的调度程序,此处的响应时间可能会增加读写访问的抖动,因为系统可能仍必须等待IEC任务的执行间隔。当IEC任务长时间运行(在几百毫秒的范围内)或CPU负载长时间(一个或多个IEC任务)接近100%时,读和/或写访问仍可能失败。范围为100毫秒)。因此,值的可用性还取决于IEC应用程序对控制器的负载。
此外,如果客户端在要读取或写入的变量列表的定义中遵循以下规定,则可以最大程度地减少对其自身和对运行时系统的影响:
符号表中以红色标记的条目显示已配置为导出到符号文件的变量,但当前在应用程序中无效。原因可能是声明已从块中删除。
在3.5.8.0及更高版本中,如果已配置符号的变量未在IEC代码中使用或在I / O变量中未映射,则在编辑器中将显示警告。此外,编译器还指示符号配置中从过时的库版本引用的变量。
程序代码中未使用的对象变量默认情况下保持未编译状态,因此在符号配置中不可用。 .但是,当满足以下条件之一时,CODESYS在符号配置中提供来自未编译对象的变量:
|
.布局类型示例
来自IEC应用程序的以下示例将显示间隙如何导致由未发布的符号,内部“不可见”指针或设备描述中的“打包模式”定义引起的客户端内存布局。通过优化布局设置,可以避免出现间隙。符号文件包含有关存储位置的大小和偏移的不同信息,具体取决于所选的布局设置。
.例如:大型结构
//大型结构的示例,其中并非所有成员都被发布:
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
符号文件中的结果条目;注意大小和字节偏移量:
.符号文件,大型结构,兼容性布局选项
<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>
.例如:地址不均匀的结构
//以下机制可能导致内存未对齐:
// - {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
符号文件中的结果条目;注意大小和字节偏移量:
.符号文件,地址不均匀的结构,兼容性布局选项
<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>
.例如:功能块
//每个POU都包含一些隐式变量,这些变量不会被发布。根据数据类型,这可能会导致不同大小的内存间隙。
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位;注意大小和字节偏移量:
.符号文件,功能块,兼容性布局选项,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>