第五章 变量及数据
变量 变量是在程序执行期间可以修改的以BOOL, WORD, DWORD等为类型的内存实体。 定位变量是或者与I/O模块输入输出通道相关联的变量,或者是与内存引用相关联的变量. 例如, 变量 Water_pressure 与内存字 %MW102相关联. Water_pressure 就是定位变量. 非定位变量是既不与I/O模块也不与内存引用相关联的变量 (其在存储器内的位置不可知). 没有与地址关联的变量为非定位变量.
变量 (续) 公共变量是应用于功能块的变量. 这些变量把数值传递到功能块. 它们用于设定功能块参数. 私有变量是一些功能块使用的变量. 这些变量不能通过应用程序存储. I/ODDT 是输入/输出导出数据类型(Input/Output Derived Data Type)的缩写. I/ODDT 设计为结构化数据类型,代表一个PLC模块的通道. 每个专用模块拥有它自己的 I/ODDT. 常数是 位于常数域 (%K)中的INT, DINT 或 REAL 类型变量, 或直接寻址变量 (%KW, %KD, 或 %KF). 在程序执行期间不能修改.
通用数据类型和范围 BOOL/EBOOL : 布尔变量必须为 FALSE (0) 或 TRUE (1). EBOOL 处理强制和边沿检测 WORD : 代表 “位串16”, 意味着数据长度为 16 位 INT : 代表整型数. 数值范围从 -32768 至 +32767 UINT : 代表无符号整型数. 数值范围从 0 至 65535 REAL : 代表浮点值. 数值范围从 -3.40e+38 至 3.40e+38
输入文本型数值 文本型数值用于给管脚赋值, 或给变量赋值常数, 但不意味着可以由程序更改. 可以输入文本型数值 二进制 2#1111111111111111 八进制 8#177777 十进制 65535 (不需要 10# ) 十六进制 16#FFFF 以上数值都相等, 它们只是输入格式不同
变量名称 最长 32 个字符, 可以以数字开头 非定位变量 不带硬件地址的标签名称 非定位变量不能周期设定. 如果在项目中需要周期设定变量,使用定位变量 定位变量 带硬件地址的标签名称 (静态 RAM) 常量 具有写保护功能的变量 用于给变量赋固定值
配置, 寻址和变量赋值 硬件 状态内存 变量列表 程序
直接寻址 每个直接地址有一个在序列中指示位置的参考值,或者是输入地址 (只读) 或者是输出地址 (读 / 写). 0x / %QXx 区域 = 位输出 (离散) – 例 1: 000001 是离散输出1 – 例 2: %QX00001 是输出位 1 1x / %IXx 区域 = 位输入 (离散) – 例 1: 100017 是离散输入 17 – 例 2: %IX00017 是输入位 17 3x / %IWx 区域 = 寄存器输入, – 例 1: 300300 是寄存器输入 300 – 例 2: %IW000300 是输入字 300 4x / %QWx 区域 = 寄存器输出, – 例 1: 400029 是寄存器输出 29 – 例 2: %QW00029 是输出字 29
变量和 FB 实例目录 存储 变量 (基本和导出)和功能块实例 Variables Directory: The Variables and FB instances directory of the structured view of the project allows you to access the variables (EDT, DDT, IODDT) and the function block instances (EFB, DFB). The illustration above shows an example of a directory tree of the Variables and FB instances directory . Accessible Utilities The Variables and FB instances directory allows you access to the following utilities, which can be reached via the context-sensitive menu:
编辑变量 在 同一个工具中作变量的类型定义和实例声明 3 2 1 标识符 双击单元进入编辑模式 非定位变量 数据类型 定位变量 Types definition and instances declaration in ONE TOOL Copy/Cut/Paste functionality Search variable Hyperlink on the comment of any variable Columns customization Display of all data properties in a specific window Contract/Expand structured data (1) Sorting by type, symbol, address... (2) Filtering (3) Select type from a list or from the variable type selection Drag-drop facilities between editors and outside Unity Pro UNDO feature on one level (last modification) Import/export Concerning Variables: Promote the symbol usage Symbolize all simple or structured objects Associated topological mapping and/or initial value I/O variable automatic symbolization 1 定位变量
过滤 1 3 2 通用类型 (EDT, ...) 或变量名称可以直接过滤 使用变量属性的漏斗过滤器 (类型, 注释, 地址,...) (1) Funnel filter allows versatile displays of a part of the variables database. The name of the column to be filtered can be selected and a condition must be given, the condition can be inverted by a check box. In the upper example, the filter will display All the variables including Alarm in the beginning of the comment and the type is different from INT. (2) The name of the variable can be directly filtered. Jokers, like ? (any character) or *(all characters) can replace characters (3) Direct filtering on the general type of the variable is also possible by checking boxes EDT, DDT or IODDT.
配置显示列 1 1 2 2 配置显示列 用户可以根据需要来配置想要显示的变量参数列. 列的显示顺序可以通过右侧按钮调整 选中名称前面的检查框可以显示相关列 . 1 1 2 2
数据属性 (续) 变量的所有参数可以在数据属性窗口中显示.
编辑数据类型 数据类型可以从以前使用过的类型列表中选择 或通过按 […] 按钮从变量类型中直接选择 1 2 2 1
IODDT 5 2 1 3 4 使用完整的 I/O 结构数据将模块通道映射到变量上 The specific type IODDT allows you to map a complete I/O structure (1) from a module channel (2) directly with one data name (3). (It is platform dependant) Automatically the structure is mapped to the input/output bits and words (4). An Alias (5) can be used to give a user name to a particular structure variable. IODDT allows you to program without a physical address, that simplifies the creation of standard modules, mapping can be done after the import.
编辑导出功能块 (DFB) 4 1 3 - DFB 程序段 2 定义用户功能块类型 Function Blocks Types (DFB): (1) Creation of all DFB variable types: in, out, in / out, private, public (2) Nested DFBs (3) Creation of the DFB program: sections in LD, FBD, IL and ST. Multiple sections are possible in one DFB (4) Analyze and code generation, a little icon informs you that the DFB is under work. (5) Versioning and Library management
编辑功能块 (EFB, DFB) 使用功能块实例 2 1 Function Blocks (EFB, DFB): Symbolize and display Function Blocks instances in customer Application The symbolization of function blocks can be done during the programming directly in the program editor. .
导出数据类型 定义数组或结构类型 1 2 3 A derived data type is a definition of a structure of any predefined type (EDT, DDT). They can be nested (up to eight levels), including arrays (up to 6 dimensions) of elementary data types (1) or derived data types (3).
变量类型 (DDT) 使用数组或结构实例 4 1 Structure or array definition 2 Nested structures DDTs can be used as any elementary data type to define an instance of a variable. They can be mapped on physical memory if needed (4).
导出功能 可以使用不同选项导出整个程序段: 包含导出数据类型 (DDT) 包含导出功能块 (DFB) 包含子程序 1 2 3 1 2 3 Unity Pro offers a large possibility of export and import files. The files format used for the export/import functions is the XML standard, that allows you to create or use the export files easily from third party tools. The export files of the following modules are possible : Complete application, including configuration. Sections in all languages (LD, ST, IL, FBD, SFC) Derived Function Blocks (DFB) Derived Data Type (DDT) Variables Operator Screens Configuration in FNES format
导出功能 (续) DDT 或 DFB 实例可以与相关类型同时导出,便于在新程序中的重复使用 导出DDT变量类型 导出DFB变量类型 1 2
导入功能 使用向导可以改变变量、程序段的命名, ... 或映射地址 可以导入应用程序的部分或全部. Unity Pro 提供两种导入模式: 直接导入, 组件导入与导出时的状态完全相同. 通过导入向导 (1), 可以修改变量,程序段的名称, 以及改变映射的地址.
在程序中编辑 变量可以在任何编辑器直接创建 : 当输入变量时, 智能分析器检查可用性 如果变量不存在,会弹出窗口,建议用户创建变量 可以在编辑器中调用数据属性窗口以显示和修 改对象属性 窗口在选择时更新
I/O 对象 在硬件配置中提供新的服务 选择和显示由模块或CPU 管理的所有对象 单击创建 IODDT 或拓扑 EDT 变量 The following table summarizes the different functionalities according to the type of device associated with the tab:
I/O 对象编辑 1 选择对象类型 更新网格表 选择其中一部分 定义前缀 创建变量 2 3 4 5
I/O 对象的人机工程学 I/O 对象在变量中映射或在程序中使用的采用粗体显示 可以只关注使用过的变量 :点击 Filter on usage 按钮
实 验
实验一 基本变量的定义 步骤 动作 1 双击 Variables & FB instances 文件夹,访问数据编辑器。 2 作下述定位变量定义: 为本地机架的140 ACI 04000 的第16个通道定义1个变量,变量名为 anain_16 (提示,变量地址为%IW1.4.16 或者 % IW36,数据类型为 INT ) 为本地机架的140 DDO 35300 的第32个通道定义1个变量,变量名为 disout_32 (提示,变量地址为%Q1.5.32 或者 %M64,数据类型为 EBOOL ) 为 RIO 机架的140 ACO 13000 的第8个通道定义1个变量,变量名为 anaout_8 (提示,变量地址为%QW\2.2\1.2.8 或者 %MW17,数据类型为 EBOOL ) 为 DIO 机架的140 DDI 35300 的第32个通道定义1个变量,变量名为 disin_32 (提示,变量地址为%I\3.1\1.2.32 或者 %I96,数据类型为 EBOOL ) 定义一个变量 VAR1,类型为 REAL, 地址为 %MW50。 定义一个变量 VAR2,类型为 EBOOL, 地址为 %M50。 3 作下述非定位变量定义: 定义变量 RUN、 STOP、 BOX 、RUNNING、flash,类型均为 EBOOL 定义变量 TIMER1,类型为 TIME 定义变量 COUNTER1,类型为 UDINT 定义变量 reset1,类型为 BOOL
实验二 复杂数据类型和变量的定义 步骤 动作 1 双击 Variables & FB instances 文件夹,访问数据编辑器。 2 定义一个包含16个 元素的 Word 类型的数组,变量名为 VAR3,首地址为 %MW150。 3 选择 DDT Types 选项卡,定义一个导出数据类型 MOTOR,包含下列元素: Motor_Start,BOOL 类型 Motor_Stop,BOOL 类型 Motor_running,BOOL 类型 Motor_ Delay,TIME 类型 Motor_Counter,UDINT 类型 4 选择 Variables 选项卡,定义一个变量 VAR4,数据类型为 MOTOR,首地址为 %MW180 5 修改导出数据类型 MOTOR,添加一个元素为 Motor_Speed,数据类型为 Real。 6 右键 MOTOR,选择 Analyze Type,观察变量 VAR4的元素及地址变化。