变量表
通过变量表,可定义对特定 POU 局部有效的变量。 在以下情况下使用局部变量:
● 您要创建不引用地址或全局符号的可移值子例程。 ● 您要使用临时变量(声明为 TEMP 的局部变量)进行计算,以便释放 PLC 存储器。 ● 您要为子例程定义输入和输出。 如果以上描述对您的具体情况不适用,则无需使用局部变量;可在符号表 (页 105)中定义 符号值,从而将其全部设置为全局变量。
了解局部变量
您可以使用程序编辑器的变量表来分配对个别子例程或中断例程唯一的变量。 局部变量可用作传递至子例程的参数,并可用于增加子例程的移植性或重新使用子例程。 程序中的每个 POU (页 93) 都有自身的变量表,并占 L 存储器的 64 个字节(如果在 LAD 或 FBD 中编程,则占 60 个字节)。 借助局部变量表,可对特定范围内的变量进行定 义: 局部变量仅在创建时所处的 POU 内部有效。 相反,在每个 POU 中均有效的全局符 号只能在符号表中定义。 当您为全局符号和局部变量使用相同的符号名时(例如 INPUT1),在定义局部变量的 POU 中局部定义优先,在其他 POU 中使用全局定义。 在局部变量表中进行分配时,指定声明类型(TEMP、IN、IN_OUT 或 OUT)和数据类 型,但不要指定存储器地址;程序编辑器自动在 L 存储器中为所有局部变量分配存储器位 置。 变量表符号地址分配将符号名称与存储相关数据值的 L 存储器地址进行关联。 局部变量 表不支持对符号名称直接赋值的符号常数(这在符号/全局变量表中是允许的)。
说明
PLC 不会将本地数据值初始化为零。 您必须在程序逻辑中初始化所用局部变量。
局部变量的声明类型
可进行的局部变量分配类型取决于在其中进行分配的 POU。 主程序 (OB1)、中断例程和 子例程可使用临时 (TEMP) 变量。 只有在执行块时,临时变量才可用,块执行完成后, 临时变量可被覆盖。 数据值可以作为参数与子例程间进行传递,具体如下所述: ● 如果要将数据值传递至子例程,则在子例程变量表中创建一个变量,并将其声明类型 指定为 IN。 ● 如果要将子例程中建立的数据值传回至调用例程,则在子例程的变量表中创建一个变 量,并将其声明类型指定为 OUT。 ● 如果要将初始数据值传递至子例程,则执行一项可修改数据值的操作,并将修改后的 结果传回至调用例程,然后在子例程变量表中创建一个变量,并将其声明类型指定为 IN_OUT。
声明类型 说明
IN 调用 POU 提供的输入参数。 OUT 返回到调用 POU 的输出参数。 IN_OUT 参数,其值由调用 POU 提供、由子例程修改,然后返回到调用 POU。 TEMP 临时保存在局部数据堆栈中的临时变量。 一旦 POU 完全执行,临时变 量值不再可用。 在两次 POU 执行之间,临时变量不保持其值。
局部变量的数据类型检查
将局部变量作为子例程参数传递时,在该子例程局部变量表中指定的数据类型必须与调用 POU 中值的数据类型相匹配。
示例
您从 OB1 调用 SBR0,将称为 INPUT1 的全局符号用作子例程的输入参数。 在 SBR0 的局部变量表中,您已经将一个称为 FIRST 的局部变量定义为输入参数。 当 OB1 调用 SBR0 时,INPUT1 的值被传递至 FIRST。 INPUT1 和 FIRST 的数据类型必须匹配。 如果 INPUT1 是实数,FIRST 也是实数,则数据类型匹配。 如果 INPUT1 是实数,但 FIRST 是整数,则数据类型不匹配,只有纠正了这一错误,程序才能编译。
查看变量表
要查看在程序编辑器中选择的 POU 的变量表,在“视图”(View) 菜单的“窗口”(Windows) 区域中,从“组件”(Component) 下拉列表中选择“变量表”(Variable table)。
说明 可将变量表放在快速访问工具栏 (页 93)上以便于访问。
在变量表中赋值
说明
在程序中使用局部变量之前,先在变量表中赋值。 在程序中使用符号名时,程序编辑器 首先检查相应 POU 的局部变量表,然后检查符号表。 如果符号名在这两处均未定义,程 序编辑器则将之视为未定义的全局符号;此类符号用绿色波浪下划线加以指示。 程序编 辑器不会自动重新读取变量表并对您的程序逻辑做出更正。 如果以后进行定义该符号名 称的数据类型分配(在局部变量表中),必须在符号名称前手动插入一个井号 (#),例如: #UndefinedLocalVar(在程序逻辑中)。 因此,在使用之前声明变量可将编程工作量降 至低。 每个子例程调用的输入/输出参数的大限制是 16。如果尝试下载一个超出此项限制的程 序,STEP 7-Micro/WIN SMART 返回错误。
要在变量表中赋值,按以下步骤操作。 1. 确保正确的 POU 在程序编辑器窗口中显示(如有必要,通过单击所需 POU 的选项 卡)。 (由于每个 POU 都有自己的变量表,所以需要确保对正确的 POU 赋值。) 2. 如果变量表尚不可见,则将其显示出来,方法是在“视图”(View) 菜单的“窗 口”(Windows) 区域内,从“组件”(Component) 下拉列表中选择“变量表”(Variable Table)。 3. 选择变量类型与要定义的变量类型相符的行,然后在“符号”(Symbol) 字段输入变量名 称。 如果在 OB1 或中断例程中赋值,变量表只含 TEMP 变量。 如果在子例程中赋 值,变量表包含 IN、IN_OUT、OUT 和 TEMP 变量。 在变量表中不要在名称前加上 星号。 井号只用在程序代码中的局部变量前。
说明
局部变量名称多可包含 23 个字母数字字符和下划线。 也允许包含扩展字符(ASCII 128 至 ASCII 255)。 个字符使用字母和扩充字符。 不允许使用关键字作为 符号名,也不允许使用以数字开头的名称,或者包含非字母数字或扩展字符集中的字 符的名称。 局部变量名称下载到 CPU 存储器并存储在其中。 使用较长的变量名称可能会降低可 用于存储程序的存储器。 4. 在“数据类型”(Data Type) 字段中单击鼠标指针,并使用列表框为局部变量选择适当的 数据类型。
说明
将局部变量指定为子例程参数时,必须确保分配给局部变量的数据类型不与子例程调 用中正在使用的操作数发生冲突。 5. 也可提供注释,描述局部变量。 为“符号”(Symbol) 和“数据类型”(Data Type) 字段提供值后,程序编辑器自动将 L 存储器 地址分配给局部变量。
输入附加变量
变量表显示固定数目的局部变量行。要在表中添加更多行数,需在变量类型表中选择要添 加的行,然后单击变量表窗口中的“插入”(Insert) 按钮 。 系统将自动在所选行的上方生 成新行,其变量类型与所选变量类型相同。 还可右键单击现有行,然后从上下文菜单中选择“插入 > 行”(Insert > Row) 或“插入 > 下一 行”(Insert > Row Below) 来添加行。
删除变量
要删除局部变量,需在变量表中选中此变量,然后单击“删除”(Delete) 按钮 。 也可删 除一行,方法是右键单击该行,然后从上下文菜单中选择“删除 > 行”(Delete > Row)。