LM小型可编程控制器软件手册_202103

发布时间:2021-11-23 | 杂志分类:其他
免费制作
更多内容

LM小型可编程控制器软件手册_202103

在“工程”菜单下选择“查看”/“未使用变量”,则会在消息窗口显示如图 3-7-3 所示的信息。 “No unused variables found”表示程序中没有未使用的变量。 图 3-7-3 编译过程(3) 如果程序中出现了未使用的变量,如图 3-7-4 所示,如果有一个多余的变量 a,则会在消 息窗口中显示信息:PLC_PRG(9):a。这表示本程序中检查到了一个未使用的变量 a。 图 3-7-4 编译过程(4) 对于“查看”/“未使用变量”的应用,应该习惯性地在编译通过后进行一下自检。如果存在 未使用的变量,建议删除未使用的变量,有助于程序的正确运行。 另外,也可以直接设置。在“资源”选项卡中,选择“工程选项”/“Build”/“自动检查”,选中 “未用变量”,在编译时会自动检查未使用的变量。... [收起]
[展开]
LM小型可编程控制器软件手册_202103
粉丝: {{bookData.followerCount}}
文本内容
第51页

在“工程”菜单下选择“查看”/“未使用变量”,则会在消息窗口显示如图 3-7-3 所示的信息。 “No unused variables found”表示程序中没有未使用的变量。 图 3-7-3 编译过程(3) 如果程序中出现了未使用的变量,如图 3-7-4 所示,如果有一个多余的变量 a,则会在消 息窗口中显示信息:PLC_PRG(9):a。这表示本程序中检查到了一个未使用的变量 a。 图 3-7-4 编译过程(4) 对于“查看”/“未使用变量”的应用,应该习惯性地在编译通过后进行一下自检。如果存在 未使用的变量,建议删除未使用的变量,有助于程序的正确运行。 另外,也可以直接设置。在“资源”选项卡中,选择“工程选项”/“Build”/“自动检查”,选中 “未用变量”,在编译时会自动检查未使用的变量。 关于编译,请参见 8.1 章节。关于查看未使用变量,请参见 8.2.3 章节。 编译结束后,执行“在线”/“登录”命令进入调试状态。调试分为在线调试和仿真调试两种 方式。在后面的介绍中,将按照在线调试和仿真模式两种方式分别介绍程序的运行情况。 3.8 在线调试 程序下载到 PLC 的 CPU 模块中称为在线调试。编译通过的目标文件在进行下载时,会 将全部目标文件下载到 CPU 模块中,同时将 CPU 模块复位,所有变量返回到初始状态。 在“在线”菜单中选择“登录”,建立本地计算机与 PLC 的 CPU 模块的连接,出现系统下 - 41 -

第52页

载提示信息,如图 3-8-1 所示。 图 3-8-1 下载提示信息 点击“是”按钮,将新程序下载到 PLC 的 CPU 模块中。当出现如图 3-8-2 所示的创建启动 工程提示信息时,点击“是”按钮,下载结束。确保 PLC 断电后再上电,运行此下载工程。 图 3-8-2 创建启动工程提示信息 下载结束后,程序并没有运行,需要手动设置 PLC 程序运行。在菜单栏中打开“在线”下 拉菜单,选择“运行”,或者直接按“F5”功能键,均可实现程序的运行,如图 3-8-3 所示。 图 3-8-3 程序运行 双击“%IX0.0”,按“F7”功能键强制输入值后,使%IX0.0 闭合,程序开始运行,如图 3-8-4 所示。从运行的结果可见,%QX0.0 通道灯输出“1s 断 2s 通”的脉冲信号。 图 3-8-4 强制程序运行 - 42 -

第53页

程序运行情况如下所述。程序启动后,当运行时间 t<1s 时,%QX0.0 尚未闭合,PLC 上 的通道灯%QX0.0 不亮,如图 3-8-5 所示。 图 3-8-5 程序运行情况(1) 程序运行一段时间后,当运行时间 1s<t<3s 时,%QX0.0 闭合,PLC 上的第一个通道 灯%QX0.0 亮,如图 3-8-6 所示。 当运行时间 3s<t<4s 时,触点“M”断开,PLC 上的通道灯%QX0.0 灭。如此反复,%QX0.0 通道灯会出现“1s 亮,并且持续 2s 后再灭,间隔 1s 后又亮”的现象。 图 3-8-6 程序运行情况(2) 3.9 仿真调试 上述程序实现了在线模式下的运行。如果没有连接 PLC 的 CPU 模块,在本地计算机模 拟运行用户程序,称为仿真模式。在菜单栏中打开“在线”下拉菜单,选择“仿真模式”,便进 入了仿真模式下的程序运行过程。在“仿真模式”下,选择登录,如图 3-9-1 所示。“在线”/“仿 真模式”被选中(出现“√”),登录时便会进入仿真模式。 - 43 -

第54页

图 3-9-1 仿真模式 双击“%IX0.0”,按“CTRL+F7”组合功能键输入值,或按“F7”功能键强制值,使%IX0.0 闭合,再按“F5”功能键,使程序运行,如图 3-9-2 所示。仿真模式下程序运行情况与在线模 式下相同。 图 3-9-2 仿真模式下程序运行 关于在线调试和仿真调试的操作,请参见 8.4 章节。 - 44 -

第55页

第4章 存储区与变量 在编程之前,需要了解 LM 系列 PLC 是如何管理数据的。本章为您讲述 LM 系列 PLC 的存储区分配、数据寻址以及变量使用等概念,为编程打下良好的基础。 LM 系列 PLC 的数据存储区分为输入区(I 区)、输出区(Q 区)、M 区、N 区、掉电 保持区共五类,每一类都有自己的特点和使用规则,4.1 章节讲述了各存储区的特点和使用方 法。 4.2 章节讲述了地址的寻址方法和存储规则。在 LM 系列 PLC 的数据存储区中,输入区、 输出区和 M 区属于寻址方式调用的数据区。 和高级语言类似,LM 系列 PLC 也有常量和变量的概念。所谓的常量就是数值不变的数。 4.3 章节详细讲述了常量的分类和使用方法。 变量是 IEC61131-3 标准提出的概念。在程序运行时,其数值会改变的量就是变量。变量 用于初始化、存储和处理用户数据。每个变量都有其固定的数据类型。变量的存储位置可由 用户指定为 I 区、Q 区或 M 区的地址,亦可不指定地址,由系统自行分配。4.4 章节详细讲 述变量的类型和使用方法。 LM 系列 PLC 在数据管理上功能非常强大。4.5 章节和 4.6 章节为您讲述了如何处理数组 以及如何自定义数据类型。 4.1 存储区分配 LM 系列 PLC 的存储区,CPU 的内存被划分为不同的存储区,每一部分存储区都有各自 的特点和使用规则。 存储区包括以下几大类: 输入存储区(I 区) 输入映像区。CPU 及扩展模块的数字量输入占用输入存储区地址,模拟量输入同样也占 用输入存储区地址。另外,一些特殊功能,诸如以太网通讯或者 DP 通讯,也占用输入存储 区的地址。I 区最大可存储 512 个字节。 输入存储区通过寻址方式访问,可以按位、字节、字、双字访问。具体访问方法请参见 4.2 章节。 输入存储区是只读的,并且不能掉电保持。在仿真模拟时,输入存储区的地址可以被输 入,也可以被强制。但是在在线调试时,只能被强制。输入和强制是 PowerPro 在调试时改变 数据的方式,请参见 8.4.9 和 8.4.10 章节。 输出存储区(Q 区) 输出映像区。CPU 及扩展模块的数字量输出占用输出存储区地址,模拟量输出同样也占用输 出存储区地址。另外,一些特殊功能,诸如以太网通讯或者 DP 通讯,也占用输出存储区的 地址。Q 区最大可存储 512 个字节。 输出存储区通过寻址方式访问,可以按位、字节、字、双字访问。具体访问方法请参见 4.2 章节。 输出存储区的数据是可读写的,并且不能掉电保持。在仿真模拟或者在线调试时,该数据区 地址均可以被输入或强制。 M 存储区 M 存储区是 PLC 的中间寄存器区,用于存储和管理中间过程产生的数据或状态。无论 - 45 -

第56页

是位数据,还是字数据,均可以在 M 存储区实现。 M 存储区通过寻址方式访问,可以按位、字节、字、双字访问。LM 系列 PLC 的 M 区共有 8KB,按字节来寻址,M 存储区的范围为 MB0~MB8191。具体访问方法请参见 4.2 章节。 M 存储区的数据地址与输出存储区的性质一样,可读写,也可以被输入或强制。 M 存储区的地址中,部分是具有掉电保持功能的,包括 MB300~MB799。其余地址,均不具 有掉电保持功能。 另外,要特别注意,M 存储区的前 100 个字节,即 MB0~MB99,是被系统用于自诊断的数 据区,可以读取这些存储区的数据,但是不能写入。建议用户在编程时,从 MB100 开始使 用。 N 存储区 N 存储区也属于 PLC 的中间寄存器区,用于存储和管理中间过程产生的数据和状态。与 M 存储区不同的是,N 存储区只能通过变量的方式来访问和调用。关于变量,手册在前几章都 已提到过,关于变量的详细使用方法,请参见 4.4 章节。 N 存储区中的变量地址,是系统自动分配而用户无法指定的。N 区中的变量数据类型不单有 位、字节、字和双字,还有 REAL、TIME、INT 等其他众多数据类型。另外,除了数据变量 外,定义的功能块变量也存储在 N 存储区。关于功能块的概念,请参见 5.1 章节。 N 存储区大小为 24KB,即可以存储 24KB 的变量。N 存储区可以读写,可以被输入和强制。 N 存储区的数据是不能掉电保持的。 R 存储区 R 存储区属于掉电保持区,其调用方式与 N 区一致,也是通过变量的方式访问,无法指 定地址。 R 存储区的大小为 6KB。R 存储区变量可以读写,可以被输入和强制。 变量定义时,假如没有选择保持功能,或者直接在局部变量中定义,则该变量存储在 N 区,若选择了保持功能或直接在保持型变量中定义,则该变量存储于 R 区,具有掉电保持功 能。关于如何定义掉电保持区变量,详细说明请参见 4.4.6 章节。 注意: LM 系列 PLC 有两种方式可以实现数据的掉电保持。一是采用地址方式,选择 M 区的 MB300~MB799 之间的地址即可;另一种采用变量的方式,将变量定义为掉电保持区变量即可。 4.2 地址寻址方式 4.2.1 地址存储映射关系 LM 系列 PLC 的 I 区、Q 区和 M 区是按地址寻址方式访问的,这些存储区都有唯一的、 明确的地址。用户可以通过地址寻址方式,即直接使用该存储区地址的方式,来读取和设置 该存储区的值。 在介绍访问规则之前,需要先了解这些存储区的存储格式。I 区、Q 区和 M 区的存储格 式是一致的,所以这里以 M 区为例说明,如图 4-2-1 所示。 LM 系列 PLC 所有直接寻址的存储区,是按字节存储的。 每个字节包含 8 个位,每 8 个位组成一个字节。每 2 个字节组成一个字,每两个字组成 - 46 -

第57页

一个双字。 图 4-2-1 M 区存储格式 诸如:%MX2.7 表示%MB2 的第 8 个位。 %MW12 表示有%MB12 和%MB13 两个字节组成的字。 这些存储区的地址,可以按位、字节、字或双字来访问,数据类型为 BOOL、BYTE、 WORD 和 DWORD。要了解这些数据类型的范围,请查看 4.4.2 章节。假如需要使用 INT 或 者 REAL 等其他数据类型,需要使用变量方式访问,具体内容也请参见 4.4 章节。 要注意,按不同数据类型访问,数据存储区可能是重叠的。诸如%MW0 的数值为 3, 则%MB0 的值也为 3,%MX0.0 的值为 TRUE,%MX0.1 的值也为 TRUE。又或者在程序中强 制%MX0.0 为 TRUE,因为%MX0.0 是%MB0、%MW0 和%MD0 的第一个位,则同时,这些 存储地址的值也被强制为 1。 对于 I 区和 Q 区,也是同样的存储方式。I 区和 Q 区的地址和实际 DI/DO 点如何对应, 请参见 7.3 章节。 注意: 按字寻址方式访问,因为一个字由两个字节组成,其数字必为偶数,不能为奇数。如:%MB0 和%MB1 组成一个字%MW0,下一个字则为%MW2,而不是%MW1。%MW1 是无效的地址。按 双字寻址也遵守此规则。 4.2.2 地址访问格式 按 IEC61131-3 标准,所有的直接地址都从“%”开始。以 M 区为例,如表 4-2-1 所示。 表 4-2-1 地址访问格式 %MXm.n 格式 X 表示是按位寻址; 描述 m 表示在 M 存储区中的字节编号; n 表示位于该字节的第几位,范围为 0~7 位寻址 BOOL %MX0.3、%MX100.0、%MX3212.7 数据类型 示例 - 47 -

第58页

字节 格式 %MBm 寻址 描述 B 表示按字节寻址 m 表示在 M 存储区中的字节编号 字寻址 数据类型 BYTE 示例 %MB103、%MB2000 双字 格式 %MWm 寻址 描述 W 表示按字寻址 m 表示在该字存储单元中的首字节的地址,注意 m 必须为偶数 数据类型 WORD 示例 %MW150、%MW3000 格式 %MDm 描述 D 表示按双字寻址 m 表示在该双字存储单元中的首字节的地址,注意 m 必须为偶数 数据类型 DWORD 示例 %MD300、%MD432 对于 I 区、Q 区,则把表中的 M 替换为 I 或 Q 即可。 表 4-2-2 为这三个数据区的范围,超过这个范围的地址视为无效的地址。 表 4-2-2 数据存储区及范围 存储区 范围(按字节) I 存储区 %IB0~%IB511(最大为 512 字节,具体大小根据 PLC 确定) Q 存储区 %QB0~%QB511(最大为 512 字节,具体大小根据 PLC 确定) M 存储区 %MB0~%MB8191 再次强调的是 M 存储区大小为 8KB,即从%MB0~%MB8191。其中,%MB0~%MB99 作为 PLC 的内部诊断区,建议用户不要使用。%MB300~%MB799 具有掉电保持功能,其余 存储区不具有掉电保持功能。 4.3 常量 在 PLC 编程的时候,可能经常要用到一些数值不变的参数,诸如定时器的时间、换算的 比例参数等,这些数值不变的参数称为常量。LM 系列 PLC 支持多种数据类型的常量,常见 的常量:布尔型、时间型、数字型等,如表 4-3-1 所示。 表 4-3-1 常量的分类及表示方法 常量类型 表示方法 布尔型 描述 布尔常量只有两个:逻辑值 TRUE 和 FALSE(也可表示为 1 和 0),TRUE 示例 等价于 1,FALSE 等价于 0。 TRUE、0 - 48 -

第59页

数字常量的数值可以是二进制、十进制、八进制和十六进制。如果整数值 描述 不是十进制值,可以用“进制”加符号“#”放在整数值前面来表示。十进制的 示例 10 至 15 在十六进制中表示为 A 至 F。 整数型 14 (*十进制数 14*) 2#1001_0011 (*二进制数 1001_0011*) 8#67 (*八进制数 67*) 16#AE (*十六进制数 AE*) 描述 实数常量用十进制小数和指数来表示,遵循标准的科学计数法格式。实数 示例 实数型 常量的数据类型是 REAL。 7.4 (*实数 7.4*) 1.64e+009 (*实数 1.64e+009*) 时间常量一般用来操作时间,由“T#”(或“t#”)加上“时间值”构成,时间值 描述 的单位包括天(d)、小时(h)、分(m)、秒(s)和毫秒(ms)。注意, 它们的正确顺序为 d、h、m、s、ms。 T#18ms (*18 毫秒的一个时间常量*) 时间型 T#100s12ms (*100 秒 12 毫秒的一个时间常量,高单位允许超限*) t#12h34m15s (*12 小时 34 分 15 秒的一个常量*) 示例 下面是错误的时间常量: t#5m68s (*低单位不允许超限*) 15ms (*没有 T# *) t#4ms13d (*顺序错误*) 时刻常量用于存储当前时刻,由“TOD#”(“tod#”、“TIME_OF_DAY#”或 描述 “time_of_day#”)加上“时刻值”构成。时刻值的格式为:小时:分钟:秒(可 时刻型 示例 以用实数形式输入秒)。 日期型 描述 示例 TOD#00:00:00 (*时刻常量为 0 点 0 时 0 分*) TIME_OF_DAY#15:36:30.123 (*时刻常量为 15 点 36 分 30.123 秒*) 日期常量由“D#”(“d#”、“DATE#”或“date#”)加上“日期值”构成。 DATE#2005-05-06 (*日期常量 2005 年 5 月 6 日*) d#1980-09-22 (*日期常量 1980 年 9 月 22 日*) 描述 日期常量和时刻常量 合并起来称为日期时刻常量,由 “DT#”( “dt#”、 “DATE_AND_TIME#”或“date_and_time#”)加上“日期时刻值”构成。 日期时刻型 DT#1980-09-22-15:45:18 示例 (*时刻日期常量为 1980 年 9 月 22 日 15 点 45 分 18 秒*) date_and_time#2001-03-09-00:00:00 (*时刻日期常量为 2001 年 3 月 9 日 0 点 0 分 0 秒*) 描述 字符串常量在两个单引号之间,可以包含空格和特殊字符。 示例 字符串型 'Abby and Craig' (*字符串 Abby and Craig *) ':-)' (*字符串:-)*) 注意: PowerPro 不区分大小写,诸如 T#3s 和 t#3s 属于同一常数,TRUE 和 true 均可以表示布尔 型常量。 - 49 -

第60页

4.4 变量 所谓变量,就是用字母、数字和下划线组成的一个标识符。 按照数据类型的不同,变量可以分为标准类型和用户自定义类型。其中标准类型包括布 尔型(BOOL)、整型(INT)、实型(REAL)、字符串型(STRING)以及时间型(TIME) 等。自定义类型包括结构体(STRUCT)和枚举(ENUM)。 按照使用范围的不同,变量可以分为全局变量和局部变量。局部变量只在整个工程的一 部分程序中有效,其它程序不能引用。全局变量则可以被整个工程的任意程序引用,在整个 工程中均有效。 按照属性的不同,变量分为中间变量、输入型变量、输出型变量、输入输出型变量等。 按照能否掉电保护,变量分为保持型变量和非保持型变量。 4.4.1 变量命名规则 变量命名必须遵循如下的规则:  必须以一个字母或者单一的下划线开始,随后是一定数量的字母、数字或下划线。  字母与大小写无关,ABC 和 abc 被认为是同一个变量。  关键字不能用于变量名。PowerPro 定义了一些关键字,关键字是标准的标识符,其 作用和命名已在系统中自动定义,PowerPro 的关键词如表 4-4-1 所示。 表 4-4-1 关键词表 ARRAY FUNCTION TYPE AT FUNCTION_BLOCK VAR CONSTANT OF VAR_ACCESS END_FUNCTION PERSISTENT VAR_CONFIG END_FUNCTION_BLOCK PROGRAM VAR_EXTERNAL END_PROGRAM READ_ONLY VAR_GLOBAL END_STRUCT READ_WRITE VAR_IN_OUT END_TYPE RETAIN VAR_INPUT END_VAR STRUCT VAR_OUTPUT 4.4.2 变量数据类型 PowerPro 软件支持的变量数据类型包括标准类型和用户自定义类型。在 PLC 软件中可 以查到所支持的标准类型,具体方法如下:选择“编辑”菜单下的“输入变量”,弹出“Help Manager”对话框,再用鼠标左键单击“Standard Types”即可。关于自定义数据类型,请参见 4.6 章节。 PowerPro 支持的标准数据类型及范围,如表 4-4-2 所示。 表 4-4-2 变量数据类型 类型 类型名称 数据下限 数据上限 存储 备注 空间 BOOL 布尔型 0 1 1bit BYTE 字节型 0 255 8 Bit WORD 字型 0 65535 16 Bit DWORD 双字型 0 4294967295 32Bit - 50 -

第61页

SINT 短整型 -128 127 8 Bit 单精度浮点数 USINT 无符号短整型 0 255 8 Bit 示例: INT 整型 -32768 32767 16 Bit Time1 : TIME := t#3s; UINT 无符号整型 0 65535 16 Bit 示例: DINT 长整型 -2147483648 2147483647 32 Bit Tod1 : TOD : = UDINT 无符号长整型 0 4294967295 32 Bit TOD#00:00:00; REAL 实数型 -3.402823E+38 3.402823E+38 32Bit 示例: TIME 时间型 32Bit Date1 : DATE : = D#2008-8-8; TOD 时刻型 示例: DT1 : DT : = DATE 日期型 dt#2008-08-08-20:08:08; 示例: DT 日期时刻型 Str:STRING(35):=„hi‟; 示例: STRING 字符串型 Arr1:ARRAY[1..5]OF ARRAY 数组 BYTE:=1,2,3,4,5; 4.4.3 变量定义 在使用变量之前,必须先对变量进行定义。PowerPro 针对变量不同的功能,规定了不同 的变量类型。在定义变量时,不单要定义数据类型,还要定义变量类型。 在 PowerPro 中,变量可以被定义为很多类型,如:全局变量、局部变量、输入变量、输 出变量等。具体变量类型如表 4-4-3 所示。 表 4-4-3 变量类型 数据类型 变量类型 局部变量,仅在该程序中使用。在其余程序中可以定义相同名称的变量,被认为是 VAR 两个变量。 输入变量。当调用程序时,输入变量用于实现调用程序时的参数传递。在调用程序 VAR_INPUT 时,可以将参数通过输入变量传递至子程序或其余 POU 中,具体参见 5.3 章节。 输出变量。当调用程序时,输出变量用于实现调用程序时的参数传递。在调用程序 VAR_OUTPUT 时,可以将参数通过输出变量传递至调用该 POU 的程序中,具体参见 5.3 章节。 VAR_IN_OUTPUT 输入/输出变量。VAR_INPUT 和 VAR_OUTPUT 变量的组合。同样用于参数传递。 VAR_GLOBAL 全局变量。若该变量定义为全局变量,则在任何程序中均可使用该变量。同时,不 能再定义名称相同的变量。 - 51 -

第62页

VAR、VAR_INPUT、VAR_OUTPUT、VAR_IN_OUTPUT、VAR_GLOBAL 是用于标识 变量类型的关键词。定义时根据可需要对类别进行选择, 变量的声明有两种方式:自动声明和手动声明。 自动定义变量 系统支持变量自动定义功能。当程序中出现一个新变量时,系统会自动弹出对话框,要 求进行变量定义,如图 4-4-1 所示。其中类别、名字和类型是必须的。 图 4-4-1 自动定义变量 自动定义变量对话框的各项含义,如下所述:  类别:类型选择。各类型区别请参见表 4-4-3,如:希望定义的变量在所有的 POU 中都能使用,则定义为全局变量,选择类型 VAR_GLOBAL。  名字:声明变量的名称,即标识符。关于变量命名的规则,请参见 4.4.1 章节。  类型:数据类型选择。可以直接在输入框中输入,也可以点击 按钮,然后在弹 出的对话框中选择数据类型。各类数据类型请参见 4.4.2 章节。  符号表:只有在“ 类别” 选择“VAR_GLOBAL” 时,符号表才可选。默认选项为 “Global_Variables”。当定义一个全局变量时,在“资源”选项卡中打开“全局变量”文 件夹,可以看到“Global_Variables”,双击“Global_Variables”,刚定义的全局变量便 显示在这里,如图 4-4-2 所示。  初始值:变量的初始值。这里可以填入一个与变量数据类型对应的常量,完成变量 的初始化。  地址:定义变量的地址。  注释:变量的含义。 图 4-4-2 声明变量的代码部分 在自动定义变量时,需要注意以下几点:  变量可以被指定一个地址,地址的格式与 4.2 章节所讲述的一致。当变量指定地址 时,变量存储于该地址所指定的数据区,如图 4-4-1 所示的变量定义,则该变量 temp 存储于 M 存储区,与%MW100 占用同一存储区地址。在程序中,采用直接寻址方 - 52 -

第63页

式改变%MW100 的值,则该变量 temp 相应改变。变量定义时,也可以不指定地址,则该变 量存储于 N 存储区。 在定义时,可以设置变量的初始值,初始值是一个常量,其类型应与变量的类型一致。诸如 定义一时间类型变量,则初始值应是一个时间常量,例如 t#5s。定义初始值后,当 PLC 在上 电瞬间,变量被赋值为初始值。 自动定义变量后,将会在变量声明部分会显示刚定义的变量的声明。若定义了图 4-4-1 所示 的变量,则在变量声明区有如下声明: PROGRAM PLC_PRG VAR Temp AT %MW100: WORD := 30; (*温度参数*) END_VAR 若定义的变量是全局变量,则会显示在资源选项中的全局变量中,而不是在变量 声明区。  变量自动定义时,在自动定义对话框右下角有两个选项:常量和保持。当选择常量, 则将该变量作为一个常量,程序中无法再改变其数值。当选择保持型变量时,表示 将该变量设置为具有掉电保持功能,该变量存储在 R 存储区。  新建变量时,系统可以自动定义。但当变量被删除时,定义语句不会自动删除,继 续保留在编辑器中,因此要注意变量不能定义重复。可使用“工程”/“查看”/“未使用 变量”命令查找到这些无用的变量声明。具体使用方法请参见 8.2.3 章节。 手动定义变量 所谓的手动定义变量,就是不通过自动定义对话框进行定义,而是手动在变量声明区按 变量声明的格式和规定添加变量。 变量声明的一般格式: <标识符> {AT<地址>} : <数据类型> {: = <初始值>}; 其中在{ }中的部分是可选的。 定义不同类型的变量,需要在不同的位置进行定义。诸如:定义局部变量,需要在 VAR 和 END_VAR 之间定义,而定义输入变量,需要在 VAR INPUT 和 END_VAR 之间定义。 变量声明区也可以定义为表格形式。在“工程”/“选项”/“Editor”对话框里选中“声明为表” 项,或在程序编辑区选中右键菜单项“定义为表格”,声明编辑器会显示成表格的形式,如图 4-4-3 所示。 图 4-4-3 表格声明变量 - 53 -

第64页

在表格形式的声明编辑器中,在最初设置时,“名称”字段缺省为“Name”,“类型”字段缺 省为“BOOL”。根据需要可以自行更改这些设置,变量名和类型是完成声明变量所必需的选 项。 去除右键命令“表格声明”前的“√”,可切换至常规形式。 表格声明变量以简洁的填表方式代替了常规的语句声明方式,建议初学者使用自动变量 定义或表格定义。 变量调用和地址调用方式的区别 当采用“变量+地址”方式定义变量,与直接地址调用类似,但是两者还是有区别的。 直接地址调用的数据类型可为 BOOL、BYTE、WORD、DWORD 等类型,而用“变量+地址” 的方式调用,可定义的数据类型比直接地址调用方式多。 例如:需要定义一 REAL 型变量,其地址为%MD100。若直接使用地址%MD100,其数 据类型为 DWORD 型而不是 REAL 型。此时就需要用“变量+地址”的方式定义一个数据类 型为 REAL 型的变量,地址为%MW100(只需填入初始地址,长度根据数据类型自动判断), 从而实现了在%MD100 上定义一个 REAL 型变量。 4.4.4 保持型变量 在很多工程中,通常需要数据具有掉电保持功能,使 PLC 断电后数据不丢失。在定义变 量时,可以直接定义变量为保持型变量,此时变量自动保存于 R 存储区,具有掉电保持功能。 在自动定义时,在自动定义对话框的右下角,选择“保持”选项,变量就自动定义为保 持型变量。在手动定义时,将变量定义在 VAR_RETAIN 和 END_VAR 之间,也可以定义该 变量为掉电保持变量。 前面讲到存储区(4.1 章节)时曾提到,M 区的部分地址(%MB300~%MB799)同样具 有掉电保持功能。将变量定义为保持型变量与将数据放入地址在%MB300~%MB799 的存储 区内,具有相同的效果。 4.4.5 指针变量 指针变量是一类特殊的变量。LM 系列 PLC 中,所有的存储区都占用 CPU 的地址,这个地 址被称为绝对地址。不管是 I 区、Q 区、M 区还是 N 区和 R 区,都占用 CPU 的一部分地址。 而 I 区、Q 区和 M 区通过寻址访问的地址,诸如%MW100,可以认为是相对地址。指针是指 数据区的绝对地址而不是相对地址。 相邻的两个相对地址,其绝对地址也是相邻的。因为 LM 系列 PLC 的存储区是按字节存储的, 因此假如%MW100 的绝对地址为 pt,则%MW102 的绝对地址为 pt+2。%MW200 的绝对地址 就是 pt+100。 在编程时,假如利用指针的这种关系,可以很方便地实现一些比较复杂的功能。在使用之前, 同样需要定义指针变量。 指针变量的定义与其他数据类型定义类似,只是其数据类型为 POINTER TO <数据类型> 指针定义的语法格式: <指针名> : POINTER TO <数据类型/功能块>; 示例: pt:POINTER TO INT; (*定义一个整型数据的指针 pt*) Var_int1:INT := 5; (*定义整型变量 Var_int1,使其等于 5*) - 54 -

第65页

Var_int2:INT; (*定义整型变量 Var_int2*) pt := ADR(Var_int1); (*取出 Var_int1 变量的地址,将地址值赋给 pt*) Var_int2:= pt^; (*将指针 pt 所指地址的值赋给 Var_int2,即 Var_int2=5*) 举例说明指针的用法: 在 M 数据区的%MW100 开始的地址中,存放了 100 个 WORD 型变量,现在需要将这些值转 移至%MW300 开始的 100 个字内,使其具有掉电保持功能。 因为数据区比较长,采用指针方式,可以很方便地实现数据区的转移。 这里需要定义两个指针变量 pt1 和 pt2,一个指向%MW100,另一个指向%MW300。这里还 需要用到一个取地址指令 ADR 和读取指针数值指令^,关于这两个指令的详细信息,请参见 《指令手册》。 变量定义如下: VAR m: INT; pt1: POINTER TO WORD; pt2: POINTER TO WORD; END_VAR 其中变量 m 用于传输 100 个字节。 在这里采用 ST 方式编写程序,关于 ST 语言编程,请参见 9.3 章节。 采用一个 FOR 循环语句,每次循环,pt1 和 pt2 的值均加 2(因为是 WORD 类型指针),然 后将 pt1 的值赋值给 pt2 即可。 具体程序如下: pt1:=ADR(%MW100); pt2:=ADR(%MW300); FOR m:=1 TO 100 BY 1 DO pt2^:=pt1^; pt1:=pt1+2; pt2:=pt2+2; END_FOR 4.5 数组 PowerPro 对数据的管理功能是非常强大的。他不但支持多种数据类型,也支持多维数据。 在编程时,可以根据基本数据类型来定义一维、二维和三维数组。数组可以采用自动定义, 也可以在变量声明区手动定义。 数组的标识符为 ARRAY。数组定义的语法格式: <数组名> : ARRAY [<L1>..<U1>, <L2>..<U2>, <L3>..<U3>] OF <基本数据类型>; 其中 L1、L2 和 L3 表示字段范围的最小值,U1、U2 和 U3 表示字段范围的最大值。字 段范围必须是整数。假如是一维数组,则只需设置 L1 和 U1 即可;假如是二维数组,则需要 设置 L1、U1 和 L2、U2;假如是三维数组,则 L1、U1、L2、U2 和 L3、U3 均需定义。 - 55 -

第66页

下图为定义一个数组元素数量为 10 的一个一维数组的自动定义对话框: 图 4-5-1 数组自动定义 在数组定义的同时,给数组中的元素赋值称为初始化数组。在数组定义时,可以初始化 数组中所有元素,也可以不进行初始化。  举例:定义数组 Card_game: ARRAY [1..13, 1..4] OF INT; (*定义一个整型的二维数组 Card_game*)  举例:数组的完全初始化 Arr1:ARRAY [1..5] OF BYTE:= 1,2,3,4,5; Arr2:ARRAY [1..2,1..2] OF INT := 1,3(7) ; (*即 1,7,7,7 的缩写形式*) Arr3:ARRAY [1..2,1..2,1..2] OF INT := 2(0),4(4),2,3;(*即 0,0,4,4,4,4,2,3 的缩写形式*)  举例:数组的部分初始化 Arr1:ARRAY [1..10] OF BYTE:= 1,2; 对于那些没有预先赋值的元素,按照基本数据类型的缺省初始值进行初始化。在此例中, 元素[3]到[10]被初始化为 0。 4.6 自定义数据类型 在一些实际应用场合,需要用到一些配方数据。每组配方包含很多参数,而这些参数的数据 类型是不同的,诸如可能包含 REAL 型、WORD 型或 TIME 型等,那么这里使用自定义数据 类型就能非常方便地实现配方数据的管理。 在 2.5.2 节曾经提到过自定义数据类型。在对象组织器的数据类型选项卡中,就可以自定义数 据类型。 首先,点击右键,新建一数据类型,命名规则同变量命名规则。命名完之后,该标志符就可 以作为一个结构用来表示这个数据类型。 结构变量以关键字 TYPE 和 STRUCT 开始,关键字 END_STRUCT 和 END_TYPE 结束。 定义结构变量的语法格式: TYPE <结构名>: STRUCT <变量声明 1> <变量声明 2> - 56 -

第67页

... <变量声明 n> END_STRUCT END_TYPE 结构是一种可以在整个工程中被识别的数据类型,而且可以象引用标准数据类型一样引用结 构。唯一的限制是,结构变量不能指定地址,即不允许进行 AT 声明。 举例:定义名为 Polygonline 的结构 TYPE Polygonline: STRUCT Start:ARRAY [1..2] OF INT; Point1:ARRAY [1..2] OF INT; Point2:ARRAY [1..2] OF INT; Point3:ARRAY [1..2] OF INT; Point4:ARRAY [1..2] OF INT; End:ARRAY [1..2] OF INT; END_STRUCT END_TYPE 举例:初始化结构 P1:Polygonline:=(Start:=3,3,Point1:=5,2,Point2:=7,3,Point3:=8,5,Point4:=5,7,End:=3,5); 举例:结构数组的初始化 TYPE STRUCT1: STRUCT p1:int; p2:int; p3:dword; END_STRUCT END_TYPE A1[1..3] OF STRUCT1:=(p1:=1,p2:=10,p3:= 3),(p1:=2,p2:=0,p3:=2),(p1:=4,p2:=5,p3:=1); 访问结构成员的语法: <结构名>.<结构成员名> 举例 如果结构名为 Week,其中的一个成员名为 Monday,则可以用下面的形式访问该成员: Week.Monday - 57 -

第68页

第5章 程序组织单元(POU) 本章主要讲述了 PowerPro 的一个重要概念—程序组织单元(POU)。程序组织单元是组 成工程的基本结构。任何复杂的工程都是由众多 POU 组成的,POU 包括程序、功能块和函 数。 5.1 章节讲述了 POU 的一些基本概念,使得读者对 POU 的概念有一定的了解。 5.2 章节讲述了 POU 的建立,5.3 章节讲述了 POU 之间的调用,这两节重点讲述了 POU 的使用规则。5.4 章节讲述了 PowerPro 软件如何管理 POU。 在本章的学习过程中,若遇到一些概念和规则不易理解,建议初学者可以跳过这些内容, 同时在学习过程中采用“边学习、边练习”的方式,这样有助于更快地理解本章的内容。同 时建议在学习后面的内容时也采取这种方法。 5.1 POU 的基本概念 POU 是程序组织单元(Program Organization Unit)的简称。POU 可以是函数(Function)、 功能块(Function Block)或程序(Program)。其中程序和功能块的编程语言可以是 LD、FBD、 IL、ST、SFC 及 CFC。函数的编程语言可以是 LD、FBD、IL、ST 及 CFC,但不能是 SFC。 关于 POU 的编程语言,请参见第九章。 5.1.1 POU 的类型 POU 分为程序(Program)、功能块(Function Block)和函数(Function)等三种类型。  程序(Program) 程序是为了完成某项任务而编写的语句序列,是一组指令的集合。程序是唯一可执 行的 POU,是逻辑执行的主体。程序可以通过任务组态来激活,也可以通过其它程 序来调用。  功能块(Function Block) 功能块是预先编好的、实现某种运算的程序。功能块本身不能单独执行,只能由程 序调用功能块执行。在执行时,输入量可以是一个或多个值,输出量可以是一个或 多个执行结果。与函数不同,功能块本身没有返回值。  函数(Function) 函数也是预先编好的、实现某种运算的程序。函数在执行时,会针对一系列特定的 输入,产生一个输出结果,这个输出结果被赋给函数本身,称为返回值。函数只能 被其它 POU 调用,函数本身不能单独执行。 5.1.2 POU 的调用 POU 的调用有两种方法。  被其它已经调用的 POU 来调用。  通过任务配置来调用,这种方法仅限于程序调用。当程序中没有进行任务配置时, 系统会自动调用主程序 PLC_PRG。 POU 的调用要遵循以下原则,如图 5-1-1 所示。 - 58 -

第69页

 程序可以调用函数、功能块和其它程序。  功能块可以调用函数和其它功能块。  函数可以调用函数。 程序 (Program) 函数 功能块 程序 (Function) (Function Block) (Program) 函数 函数 功能块 (Function) (Function) (Function Block) 图 5-1-1 POU 的调用 5.1.3 POU 的组成 POU 包含一个声明部分和一个代码部分(程序区)。用户创建 POU 时,必须编辑这两 部分。  声明部分:在变量区创建、显示 POU 变量。用户可在引用变量之前进行定义,也可 以在引用时利用变量定义对话框定义。无论是局部变量还是全局变量,在变量定义 过程中必须遵循一定的格式,具体的格式参见 4.4 章节。  代码部分:在程序区创建,是 POU 的主体,用户可以选用 IEC 标准编程语言来编 写。 5.1.4 主程序 PLC_PRG 程序 PLC_PRG 被默认为主程序,是一个特殊的 POU。每个工程必须包含这个主程序才 能正常运行。系统默认每个控制周期调用一次这个 POU,不需要进行额外的任务组态。所以, 工程必须以 PLC_PRG 为主程序,通过它来实现对其它 POU 的调用。 5.2 创建 POU 5.2.1 创建程序 在对象组织器中选中“程序”选项卡,在程序列表中点击右键,弹出管理 POU 菜单,管理 POU 菜单的详细介绍详见 2.5.1 章节。选择“添加”,如果列表中无 POU,则新 POU 名默认为 “PLC_PRG”。在弹出的“创建 POU”对话框中,选择“POU 类型”为“程序”;“POU 语言”可以选 择 IL、LD、FBD、SFC、ST、CFC 之一;“新 POU 名”为程序名,如输入 Fct,名字尽量采用 能反映其实际功能的字符,便于识别;点击“确认”,便创建了程序“Fct(PRG)”。如图 5-2-1 所示。 - 59 -

第70页

图 5-2-1 创建程序 5.2.2 创建功能块 功能块的创建和程序类似。在对象组织器中选中“程序”选项卡,在程序列表中点击右键, 选择“添加”。在弹出的“创建 POU”对话框中,选择“POU 类型”为“功能块”,然后进行编程语 言的选择和命名即可。 5.2.3 创建函数 函数的外形结构与功能块类似,区别是函数只有一个输出端,以下说明如何创建函数。 在对象组织器中选中“程序”,选择“添加”。在弹出的“创建 POU”对话框中,选择“POU 类型”为“函数”,“返回类型”、“POU 语言”和“新 POU 名”可根据需要选择和输入,如图 5-2-2 所示。如果新 POU 名为“Fct”,则“Fct”即为函数名。通常,命名要尽量采用能反映其实际用 途的字符,便于识别。 图 5-2-2 自定义函数(1) 设置好后,自动生成函数结构体,可以在里面添加所需要的内容,如图 5-2-3 所示。 - 60 -

第71页

图 5-2-3 自定义函数(2) 下面以制作一个数学计算式为例来介绍函数的编写,如图 5-2-4 所示。从 VAR_INPUT 到第一个 END_VAR 之间用于定义输入变量,从 VAR 到第二个 END_VAR 之间用于定义中 间变量,下方窗口进行函数算法编写。 图 5-2-4 自定义函数(3) 编写完毕保存。编译通过后,可以在其它程序中直接调用,如图 5-2-5 所示。 图 5-2-5 自定义函数(4) - 61 -

第72页

5.3 调用 POU 关于 POU 的调用方法和调用原则在 5.1.2 中已经介绍,下面分别讲述了如何调用程序、 功能块和函数。 5.3.1 调用程序 程 序 是唯 一可 执行 的 POU。程 序可 以调 用功 能块 和 函数 。程 序的 声明 以关 键 字 PROGRAM 开始,如图 5-3-1 所示。 图 5-3-1 程序举例 程序可以被其它程序调用,但不允许在函数中调用程序。 可以采用不同语言调用上述程序“PRGExample”。如果调用使程序的输出值发生变化,程 序会保持这个结果,直到下一次被调用。 IL 语言调用: CAL PRGExample LD PRGexample.PAR ST ERG ST 语言调用: PRGExample; Erg := PRGexample.PAR; FBD 语言调用: LD 语言调用: - 62 -

第73页

5.3.2 调用功能块  功能块 一个功能块是一个 POU,本身没有返回值,输出一个或多个值。功能块声明以关键字 FUNCTION_BLOCK 开始。在图 5-3-2 中,用 IL 编写了一个功能块 FUB,有两个输入变量和 两个输出变量。其中一个输出是两个输入的乘积,另一个输出是相等比较结果。 图 5-3-2 功能块举例 功能块实例声明 要想调用功能块,必须对功能块进行实例声明。例如定义一个名称为 INSTANZ 的 FUB 功能 块,实例声明如下: INSTANZ:FUB; 实例针对功能块而言,每个功能块实例就是一个独立的、可完成特定逻辑功能的活动对象。 不同的程序、不同的任务都可以定义和调用功能块的应用实例,每个调用实例都占用独立的 内存,保留独立的逻辑状态。通过定义实例实现对功能块的调用。 从外部只能改变功能块输入和输出参数。不允许对功能块的内部变量直接赋值。功能块实例 名可以作为函数或功能块的输入。 调用功能块 功能块的调用,只改变功能块实例中的值,结果只有当相同实例被调用时才起作用。通过输 入“实例名.变量名”,调用功能块中的变量。 在文本语言 IL 和 ST 中,可以在功能块实例名后加圆括号,设置输入参数的初始值。和声明 变量时初始化一样,赋值使用符号“:=”。 对于 SFC 语言,功能块调用只能发生在单步运行方式下。 功能块执行以后,所有的值都保留到下次执行之前保持不变。由于功能块中存在中间变量, 使表面上相同的输入参数实际上可能输出不同的输出值。 采用不同语言调用上述功能块 FUB 如图 5-3-3 所示。乘积的结果保存在变量 ERG 中,比较 的结果保存在 QUAD 中。 - 63 -

第74页

IL 语言调用 ST 语言调用(声明部分与 IL 相同) FBD 语言调用(声明部分与 IL 相同) 图 5-3-3 功能块调用  “功能块”与“使能运算符”区别解析 介绍了功能块之后,下面介绍使能运算符,以便进一步区分功能块与使能运算符的区别。 在前面提到过二者的大体区别是功能块与使能运算符的调用方式不同。对于功能块,其自备 使能端,不论是否使能,在程序运行时,均会执行该功能块。然而对于使能运算符,只有在 使能端 EN 有效时,才可以调用该使能运算符。但是对于具体的应用则没有介绍,这里用 LD 语言编写一个简单程序进行介绍,如图 5-3-4 所示。 从图 5-3-4 中可以看到,通电延时计时器 T1 的输入端 IN 相当于使能运算符的使能端, - 64 -

第75页

即所谓的自备使能端。程序开始运行时,当延时 1s 后,%QX0.0 便置 1,PLC 中的对应通道 Q0.0 灯变亮。然而对于使能运算符 ADD,在添加使能运算符时就产生其使能端 EN,只有使 能端有效时,方可调用此使能运算符。即只有当%IX0.0 为 1 时,ADD 使能运算符才会运行。 图 5-3-4 功能块与使能运算符 5.3.3 调用函数 一个函数是一个 POU。函数执行时,会对一系列特定的输入产生唯一数据类型的输出结 果。相对于功能块而言,函数只有一个输出结果,没有任何内部条件。也就是说,只要给定 相同的输入参数,调用函数必定得到相同的运算结果。平时所使用的各种数学运算,例如 SIN(X)等就是典型的函数类型。当定义函数时,函数必须接收一个数据类型作为返回值(返 回数据类型)。函数的计算结果赋给函数本身,即函数的输出变量就是函数名本身。函数定 义以关键字 FUNCTION 开始。 在图 5-3-5 中,用 IL 语言编写了函数 Fct,有三个输入变量,返回的结果是前两个数的 乘积除以第三个数。调用时,函数相当于表达式里的一个运算符,可以赋初值。 图 5-3-5 函数举例  举例:调用上述函数 Fct - 65 -

第76页

IL 语言调用: LD 7 Fct 4,2 ST Result ST 语言调用: Result := Fct(7, 4, 2); FBD 语言调用: 在 SFC 语言中,函数调用只能用单步或转化来实现。  举例 下面再列举几个函数调用的例子。 例 1:定义函数 CheckBounds,用这个函数来检查工程变量范围的溢出情况,如图 5-3-6 所示。 图 5-3-6 函数调用举例(1) 例 2:如果在工程中定义了名为 CheckDivByte、CheckDivWord、CheckDivDWord 和 CheckDivReal 的变量,图 5-3-7 所示为实现 CheckDivReal 函数的例子。 图 5-3-7 函数调用举例(2) - 66 -

第77页

运算符 DIV 使用函数 CheckDivReal 的输出作为除数,如图 5-3-8 所示。避免被 0 除,除 数 d 由原值 0 强制成 1,除的结果是 799。 图 5-3-8 函数调用举例(3) 5.4 管理 POU 菜单 在 PowerPro 软件主界面对象组织器的“程序”选项卡中,在程序列表中选择相应的程序, 点击鼠标右键,弹出管理 POU 菜单,如图 5-4-1 所示。在 2.5.1 章节对菜单的各项功能进行 了简单介绍。 图 5-4-1 管理 POU 菜单 - 67 -

第78页

5.4.1 添加动作 动作代表某种功能,隶属于某个程序或功能块,可以被其他的程序或功能块调用。调用 动作的格式为:“程序名.动作名”,“实例名.动作名”。调用动作中变量的格式为“程序名.动作 名.变量名”,“实例名.动作名.变量名”。 例如,用 LD 语言编写程序 PLC_PRG 和 PRG_1,程序 PRG_1 所隶属的动作 ACT1 也用 LD 语言编写,再让程序 PLC_PRG 调用动作 ACT1 的步骤如下: 首先,编写程序 PRG_1,在程序 PRG_1 下单击右键弹出管理 POU 菜单,选择“添加动 作”,弹出 New Action 对话框,确定动作的编程语言以及动作名,命名要尽量采用能反映其 实际用途的字符,便于识别。点击“确认”,如图 5-4-2 所示。 图 5-4-2 创建动作 创建完动作 ACT1,并添加在程序 PRG_1 下,接下来可根据需要在程序区编写动作,如 图 5-4-3 所示。 图 5-4-3 动作 ACT1 动作创建完后,可通过“程序名.动作名”,在主程序 PLC_PRG 中调用 PRG_1 所隶属的动 作 ACT1,并通过“程序名.动作名.变量名”引用动作的变量 PRG_1.ACT1.CQ1。如图 5-4-4 所 示。 - 68 -

第79页

图 5-4-4 主程序调用动作 注意: 由于动作隶属于程序或功能块,所以动作中的变量在所隶属的程序或功能块变量区中声明, 即动作自身无变量区。 5.4.2 建立文件夹 对于较大的工程,为了便于管理和查阅,程序、数据类型和全局变量可以统一地组织在 文件夹中,并且可以设置多级文件夹(前面带有加号)。通过拖拉可以在对象组织器的范围 内移动程序,点中程序并按住鼠标左键拖到指定的位置即可,如图 5-4-2 所示。文件夹使工 程的组织构架更加清楚,对程序没有任何影响。“新建组”命令在对象组织器中插入一个新文 件夹。如果某个文件夹被选中,新建文件夹“New Folder”将创建在它的下层。如果某个文件 被选中,新建文件夹“New Folder”将在它的同层创建。 图 5-4-5 文件夹 - 69 -

第80页

5.4.3 转换语言 右键快捷菜单中的“转换”命令,可以把当前程序语言转换成 IL、FBD 或 LD 中的一种。 该命令对程序、函数、功能块均适用。进行转换前,工程必须通过编译。在“目标语言”中, 选择希望转化的语言。如果需要给程序重新命名,则程序名必须是工程中未被使用过的,如 果与其它已有程序重名,则无法实现转换。如果新程序名与被转换的程序名相同,则原程序 将被新程序覆盖。选定后,新的程序自动添加到程序列表中。 注意: 语言转换过程中会产生一些无用的语句,如果需要在不同语言间多次频繁转换,请先删除转 换过程中产生的无用语句,以避免不必要的麻烦。 不同语言之间的转换,很好地体现了编程语言的可移植性,但需要注意以下几点:  多层嵌套的 ST 直接转化为 LD 很困难,IF、THEN、CASE、FOR、WHILE 和 REPEAT 格式的语句不能直接转化为功能块网络。  IL 语言转化为其它语言是非常困难的,除非指令表操作符的使用范围及书写格式受 到严格的限制,才有可能实现转化。其它语言则较容易转化为 IL 语言。  FBD 语言的大部分程序能够转化 IL 和 LD 语言。  LD 语言、FBD 语言和 IL 语言之间可以相互转化。  ST 语言可以转化为 LD、FBD 或 IL 语言,ST 程序也能够容易地转化为函数、功能 块及其相关的参数值。 从 ST 语言转化到 LD 语言的一个例子如图 5-4-3 所示。 图 5-4-6 程序语言转化 - 70 -

第81页

第6章 PLC 工作方式 在学习了 PLC 管理数据和 POU 之后,还需要了解 PLC 是怎么工作的。6.1 章节就为您 描述了 PLC 的工作方式,请仔细阅读,将有助于更好地理解程序的执行过程。 任务是 LM 系列 PLC 的一个概念。所谓的任务是指 PLC 所要执行的内容。一般来讲, PLC 是按程序循环扫描,若需要产生中断或触发其他事件,则需在任务配置中进行设置。若 需了解任务配置的过程,请参见 6.2 章节。 6.1 PLC 的工作过程 PLC 以扫描方式工作。所谓扫描是指 CPU 连续执行用户程序和任务的循环过程。PLC 的工作过程一般可以分为输入采样、程序执行和输出刷新等三个阶段,如图 6-1-1 所示。 图6-1-1 PLC工作过程  输入采样阶段 PLC 以扫描工作方式,按顺序将所有信号读入到寄存输入状态的输入映像寄存器中存储, 这一过程称为采样。在本工作周期内,此采样结果的内容不会改变,而且采样结果将在 PLC 执行程序时被使用。  程序执行阶段 PLC 按顺序对程序进行扫描,即从上到下和从左到右地扫描每条指令,并分别从输入映 像寄存器和输出映像寄存器中获取所需的数据,进行运算和处理。再将程序执行结果写入寄 存执行结果的输出映像寄存器中保存。注意,在整个程序未执行完毕之前,程序执行结果不 会送到输出端口上。  输出刷新阶段 在执行完所有用户程序后,PLC 将映像寄存器中的内容送入到寄存输出状态的输出锁存 器中,再去驱动用户设备,这就是输出刷新。 PLC 重复执行上述三个阶段。每重复一次的时间称为一个扫描周期。在一个扫描周期中, PLC 的输入扫描时间和输出刷新时间一般小于 1ms,而程序执行时间因程序长度的不同而不 同。PLC 的一个扫描周期一般在几十毫秒之内。 PLC 的一个工作扫描周期主要分为上述三个阶段。但是严格来说,还应当包括下述三个 过程,这三个过程都是在输入扫描过程之后进行的。 1、系统自检测。检查程序执行是否正确,如果超时则停止 CPU 工作。 2、与编程器 PowePro 交换信息。在使用编程器输入和调试程序时才执行这一过程。 - 71 -

第82页

3、网络通信。当 PLC 配置有网络通信模块时,与通信对象进行数据交换。 当 PLC 投入运行后,重复完成以上三个阶段的工作,即采用循环扫描工作过程,如图 6-1-2 所示。PLC 工作的主要特点是输入信号集中批处理、执行过程集中批处理和输出控制集 中批处理。PLC 的这种“串行”工作方式,可以避免继电器—接触器控制系统中触点竞争和时 序失配的问题,这是 PLC 可靠性高的原因之一。但是,循环扫描工作过程会导致输出相对输 入在时间上的滞后,这是 PLC 的缺点之一。 图6-1-2 PLC扫描工作方式 PLC 在执行程序时所使用的状态值不是直接从实际输入端口获得的,而是来源于输入映 像寄存器和输出映像寄存器。输入映像寄存器的状态值取决于上一个扫描周期从输入端子采 样取得的数据,并在程序执行阶段保持不变。输出映像寄存器中的状态值取决于执行程序输 出指令的结果。输出锁存器中的状态值是上一个扫描周期的刷新阶段从输出映像寄存器转入 的。 还需指出一点,在 PLC 中经常采用一种称之为“看门狗”(Watch dog)的定时监视器来 监视 PLC 的实际工作周期是否超出预定的时间,以避免 PLC 在执行程序的过程中进入死循 环,或 PLC 执行非预定的程序而造成系统瘫痪。 注意: 默认状态下,LM 系列 PLC 自动启动看门狗功能,当程序扫描时间超过 500ms 时,系统认为进 入死循环,将重新启动,此时,PLC 的 ERR 灯以比较慢的速度闪六下,然后程序复位,重新开始 执行。 6.2 任务配置 对于一个工程,可以根据需要配置多个任务,调用不同的程序。在通常情况下,建议只 定义一个任务,并通过它调用主程序,其它程序则通过主程序来间接调用。这种调用方法只 有程序可以使用,功能块和函数不能这样调用。 严格地说,如果没有使用任务配置,在单任务环境中,系统默认 PLC_PRG 为主程序, 自动且唯一调用它,通过它实现对其它程序的调用。如果使用任务配置,程序的调用依赖于 任务分配。在一般情况下,PLC 控制单任务环境即可满足要求,不需要进行任务配置。 6.2.1 配置任务 在“资源”选项卡中双击“任务配置”,右侧弹出任务配置窗口,鼠标右键点击窗口中的“任 务配置”项,选择“Append Task”项,如图 6-2-1 所示。 - 72 -

第83页

图 6-2-1 任务配置 在弹出的“Taskattributes”窗口中可以分别填入“任务名”、优先级“Priority”、“时间间隔” 等信息,如图 6-2-2 所示。 图 6-2-2 任务属性  任务名 任务的名字,以字母加数字的方式任意填写。  Priority 任务的优先级。对于 LM 系列 PLC 不区分优先级,先配置的任务先调用,所以采用默认 值,不需进行任何修改。  类型 循环:周期地处理任务,周期定义在“属性”的“间隔”中。如果选择“循环”类型,则会发 现在新建任务“NewTask”的左侧出现“ ”图标。 自由运行:只要启动程序,就处理任务,运行一次后自动重新启动程序,如此循环。如 果选择“自由运行”类型,则会发现在新建任务“NewTask”的左侧出现“ ”图标。 - 73 -

第84页

事件触发: PLC 不支持此项功能。 外部事件触发:PLC 不支持此项功能。  属性 间隔:当“类型”中选择“循环”时,要填入间隔时间。任务包含的程序运行的周期根据控 制速度的需要填写。填写时注意在前面加“t#”(固定格式),单位可选 ms 毫秒、s 秒、m 分 钟、h 小时、d 天等。 6.2.2 系统事件 系统事件用于在工程中调用 POU,而不是用于在任务中调用 POU。当相应事件触发时, 调用相应的 POU,例如 T2、T3、T4 定时器溢出和快速外部中断脉冲到达等都会产生中断, 调用相应的事件。 在“资源”选项卡中双击“任务配置”,右侧弹出任务配置窗口,点击窗口中“任务配置”下 的“System events”,右边窗口显示所有可用的系统事件,如图 6-2-3 所示。在右边窗口中选择 需要使用的系统事件,即在系统事件的前面方框里打勾,然后在该系统事件后面的“called POU”处,填入当事件触发时需要调用的程序。 图 6-2-3 System events 对话框 当使用中断时,就需要进行系统事件配置。具体请参见 10.2 章节。 注意: 系统事件不支持仿真模式,只有在程序编译通过且登录运行后,才会响应该事件。 6.2.3 任务调用程序 鼠标右键点击“Task”项,在弹出的菜单上选择“Append Program Call”,弹出“程序调用” 对话框,如图 6-2-4 所示。 - 74 -

第85页

图 6-2-4 添加程序(1) 鼠标点击如图 6-2-5 中的省略号,选择需要调用的程序,点击“确认”按钮返回,程序即 被任务所调用。 图 6-2-5 添加程序(2) 图 6-2-6 所示的例子是一个名称为“task”、优先级为“1”、时间周期为“5ms”的任务,通过 这个任务调用 reset 程序。 图 6-2-6 任务配置示例 - 75 -

第86页

第7章 创建和管理工程 在介绍了 PowerPro 软件的编程环境之后,本章将介绍如何创建一个工程。工程包含 PLC 程序中的所有对象,包括 POU、数据类型、资源和算法等。创建一个新工程的顺序是可以灵 活掌握的,基本步骤主要包括目标设置、创建主程序、硬件配置和保存工程等。 7.1 目标设置 在主界面中点击“文件”/“新建”菜单,或在工具栏中点击“ ”按钮,随之出现“目标 设置”对话框。“目标”是指 PLC 的存储空间,目标设置是指根据所选择的 PLC 的存储空间 来进行配置。 在“配置”栏中选中“HOLLiAS-LEC G3 CPU Extend”,此目标为程序存储空间为 120KB 的 CPU 所选用的设置。点击“确认”按钮,如图 7-1-1 所示。 如果所使用的模块为存储空间 28KB 的 CPU,则需选择“HOLLiAS-LEC G3 CPU”。若 不确定模块的程序存储空间大小,请参见附录。 若需要编写库指令,则应选择 None。关于库的制作,请参见 7.4.5 章节。 图 7-1-1 选择目标 随后弹出“目标设置”窗口,默认设置已能满足绝大多数应用需求,点击“确认”按钮即可, 如图 7-1-2 所示。 图 7-1-2 目标配置 - 76 -

第87页

7.2 创建主程序 每一个工程都必须在程序中建立一个主程序。主程序调用其它子程序。在新建工程时, 系统会自动指定一个名字为“PLC_PRG”的程序作为用户程序的主程序,不得更改。否则,用 户程序无法正常运行。 目标设置完成后,会自动弹出“创建 POU”对话框,如图 7-2-1 所示。POU 程序语言可选 IL、LD、FBD、SFC、ST 或 CFC 中的任意一种,这里选用梯形图 LD 语言。在“POU 类型” 中选择“程序”,主程序名默认为“PLC_PRG”,点击“确认”按钮。 图 7-2-1 创建主程序“PLC_PRG” 7.3 硬件模块配置 PLC 系统通过硬件模块(包括 CPU 模块和扩展模块)采集和处理现场的数据。输入通 道采集现场的数据,输出通道控制生产过程中的电气设备。为了完成采集和控制任务,需要 根据具体的工程,对 PLC 系统的硬件模块进行相应的配置。 7.3.1 配置 CPU 模块 在“资源”选项卡中选择“PLC 配置”,弹出配置界面。点击鼠标右键,选择 CPU 模块的型 号,建立“PLC Configuration”结构树。例如选择 LM3107 模块,如图 7-3-1 所示。 CPU 模块的 I/O 具有固定的 I/O 地址。例如 CPU 模块 LM3107 共有 14 个 DI 通道和 10 个 DO 通道,其中: 输 入 部 分 以 字 为 单 位 , 从 %IW0 开 始 , 每 个 输 入 通 道 占 一 个 位 , 存 储 地 址 依 次 为:%IX0.0、%IX0.1、.......、%IX0.7、%IX1.1、%IX1.2、........、%IX1.7,其中前 14 个地址 为有效地址。 输 出 部 分以 字 为 单位 , 从 %QW0 开 始 ,每 个 输出 通 道 占一 个 位 ,存 储 地址 依 次 为:%QX0.0、%QX0.1、........、%QX0.7、%QX1.0、%QX1.1、......、%QX1.7,其中前 10 个 地址为有效地址。 - 77 -

第88页

图 7-3-1 LM3107 基本参数设置 对于 CPU 的输入通道来讲,需要配置其输入通道的滤波参数。输入通道的滤波参数设置 如图 7-3-2 所示,其默认值为“32”,如果需要修改此参数,可在“Value”中选择。 打开“模块参数”选项,该“模块参数”可以设置输入通道的滤波参数,其中每个字段的具 体含义为:  Index:表示模块参数索引号。  Name:表示模块参数,对应于相应输入通道。  Value:设置输入通道滤波参数,默认为 32,可以修改此值。  Default:输入通道滤波参数默认值为 32。 对“滤波参数”的定义如下:若采集数据在 32 次扫描周期内维持原数据不变,即采集数 据有效,完成滤波。这里是指对开关量进行滤波的次数,即:滤波次数为 32 次。 滤波参数对于高速输入通道是无效的。在用到高速输入通道的地方,无需设置相应通道 的滤波参数。即便做了相应设置,对高速输入通道也是无影响的。 其他 CPU 模块的参数配置与此类似。根据实际控制要求,选择合适的 CPU 模块后,便 可以添加所需的扩展模块。 图 7-3-2 LM3107 模块参数设置 - 78 -

第89页

7.3.2 配置扩展模块 在选择 CPU 模块后,便要添加所需的扩展模块。在 CPU 模块上点击鼠标右键,出现模 块操作对话框,选择其中的“Append Subelement”项,从弹出的扩展模块列表中选择所需的模 块,如图 7-3-3 所示。例如,如果选择添加“LM3230”模块,则会在“PLC Configuration”下显 示添加的模块,如图 7-3-4 所示。 图 7-3-3 添加扩展模块(1) 图 7-3-4 添加扩展模块(2) CPU 模块和扩展模块的每一个 I/O 通道都对应一个实际的物理设备,其对应关系反映在 随模块同时显示的“基本参数”中。“基本参数”包括节点号、输入地址、输出地址和诊断地址 等信息,如图 7-3-5 所示。其中“节点号”表示模块硬件连接的先后次序,扩展模块根据连接 次序,依次为“0”、“1”、“2”等,用户不可随意更改。“输入地址”和“输出地址”表示模块通道 对应 I/O 存储区的起始地址。 图 7-3-5 扩展模块的基本参数 扩展模块地址受其节点号、输入地址、输出地址和模块类型的影响。例如,如果四路模 拟量输入模块 LM3310 为 CPU 模块 LM3107 后边第一个扩展模块,则通道地址分别 为%IW2、%IW4、%IW6 和%IW8。双击模块或点击其前面的“+”号,可以看到模块的类型及 各通道的具体 I/O 地址。 - 79 -

第90页

配置好模块后,如果需要,还可以对模块进行 I/O 变量定义以便访问。双击字符“AT”, 激活变量名输入框,键入变量名即可。“AT”后面的字符“%”表示地址,即“%”后面的字符为 “AT”前面变量名的地址。 如果需要,还可以为某些通道定义总体的名字,例如 CPU 模块的“%IW0”默认定义为“I”, 这样可以用“I.0”直接访问第一个输入点,而无需写成“%IX0.0”。另外,也可以为各通道分别 定义变量名,如图 7-3-6 中,将“%IX0.0”定义为“start”,将“%IW2”定义为“temp1”。 图 7-3-6 I/O 变量定义 当光标点击在“PLC Configuration”处时,可以看到在窗口的右侧有一“设置”选项卡,其具 体选项包括“自动计算地址”、“检查重叠地址”和“在工程中保存组态文件”等,如图 7-3-7 所示, 其中每个选项的具体含义为:  选中“自动计算地址”,表示“基本参数”中的节点号、输入地址、输出地址和诊断地 址可以根据模块硬件连接的先后次序自动排序。  选中“检查重叠地址”,可以方便地检查出在编程中不小心定义的重叠地址,有利于 程序被编译成功。  选中“在工程中保存组态文件”,可以方便地在工程中保存组态文件。 图 7-3-7“设置”选项卡 关于扩展模块的参数配置,请参见《硬件手册》,关于模拟量模块的应用,请参见 10.3 章节。 7.4 程序编写 在完成 PLC 配置后,可以开始进行程序编写。在新建程序时,可以选择程序的编程语言, 包括 IL、LD、ST、SFC、FBD、CFC 等。在这里,以常用的 LD 语言为例,介绍 PowerPro 编程的规范。其余语言编程规范,请参见第九章。 LD 是梯形图(Ladder Diagram)的简称。LD 是一种图形化的编程语言。用 LD 可以方 便地构造逻辑运算。LD 主要由触点、线圈、功能块和连接线等编程元件组成。LD 通过水平 线和垂直线连接成平面网状图。一般称最左边的垂直线为“能量线”,其状态永远是真(TRUE)。 各编程元件以一定的规则互相连接,最终连接到这条能量线上,形成一个个“节”、“段”或“网 络”,完成特定的逻辑运算,如图 7-4-1 所示。 - 80 -

第91页

标签 注释 节 能量线 图 7-4-1 梯形图编辑器 在工作区域的代码部分点击右键,在右键快捷菜单中可以看到当前状态常用的命令,如 图 7-4-2 所示。  前节、后节:在光标所在当前节的前面或后面增加空节。  串联、并联:在光标位置添加与之串联或并联的触点。  功能块:在光标位置插入功能块。  输出:在光标所在点添加线圈。  使能运算符:在光标位置添加带有使能端的 IEC 运算符、函数、功能块或子程序。  跳转:设置一个跳转。如果条件为真,则跳转。  返回:如果当前 POU 被其它 POU 调用,当返回条件为真时,返回到调用它的 POU。  注释:可以在每一节中加入注释,增加程序的可读性。 图 7-4-2 右键快捷菜单 7.4.1 节的操作 节是 PowerPro 中的一个重要概念,他是程序的基本单位,每个 POU 都是由节组成。  添加节 “插入”/“前节”、“后节”命令在 LD 编辑器中添加一个新节。等同于右键菜单的“前节”、“后 节”。 - 81 -

第92页

 插入节注释 每 个 节 可 有 多 行 节 注 释 。 “ 插 入 ”/“ 注 释 ” 命 令 可 在 当前 节 插 入 一 个 注 释 , 默 认 文 本 为 “Comment”。在“高级”/“选项”的“最大注释”字段中,可以设定输入节注释使用的最大行数(缺 省值是 7)。在“最小注释”字段中可设定输入节注释使用的最小行数(缺省值是 0),如图 7-4-3 所示。例如,如果输入数字 2,那么在每一个节起始的标签行之后会有两个空行。如果 最小注释大于 0,系统会自动留出注释行,点击注释行可直接输入注释。与程序文本相比, 注释文本显示为灰色。 图 7-4-3 注释设定 7.4.2 添加触点和线圈  插入“触点” 快捷菜单: 。在当前位置前串联插入一个触点。 如果标记位置是一个线圈或触点和线圈之间的连接线,那么新的触点会被顺序连接到前 一个触点。 触点标记文本缺省值为“???”。点击文本输入所要的变量或常量。此时,可以使用输入助 手(快捷键 F2),直接从变量列表中选择输入,如图 7-4-4 所示。 图 7-4-4 变量列表  插入“并联触点” 快捷菜单: 。在光标的标记位置处并联插入一个触点。 如果标记位置是一个线圈或触点和线圈之间的连接线,那么新的触点会并联到触点上。 触点标记文本缺省值为“???”。点击文本输入所要的变量或常量。此时,可以使用“输入 变量”(快捷键 F2),直接从变量列表中选择输入,如图 7-4-4 所示。  添加“线圈” 快捷菜单: 。在光标的标记位置输出一个线圈。 如果标记位置是一段位于触点和线圈之间的连接线,那么新线圈平行插入到线圈下面。 如果标记位置是一个线圈,那么新线圈平行插入到上面。 - 82 -

第93页

线圈标记文本缺省值为“???”。点击文本输入所要的变量或常量。此时,可以使用“输入 变量”(快捷键 F2),直接从变量列表中选择输入,如图 7-4-4 所示。 线圈只能是并联的,从左向右传递逻辑值,并且把值保存到合适的逻辑变量中。可以预 置状态 ON(对应逻辑变量 TRUE 值)或者 OFF(对应逻辑变量 FALSE 值)。  “取反”操作 快捷菜单: 。触点和线圈取非。 如果线圈取非,则取非后的值会被保存到对应的逻辑变量中。如果触点取非,只有当逻 辑值是 FALSE 时,才能连通。  “置位/复位”操作 快捷菜单: 。线圈可以定义成置位或者复位状态。 用线圈符号(S)表示一个置位线圈,一旦设置为 TRUE 值,置位线圈将一直保持为 TRUE, 直到被重新复位。 用线圈符号(R)表示一个复位线圈,一旦设置为 FALSE 值,复位线圈将一直保持为 FALSE,直到被重新置位。 7.4.3 添加指令 PowerPro 的指令主要有两种调用形式:功能块和使能运算符。下面分别讲述这两者的使 用方法。  使能运算符调用 在 PowerPro 的指令系统中,一些标准指令,诸如初等运算指令、比较指令、移位指令、 赋值指令、类型转换指令、逻辑运算指令等,都应采用使能运算符形式调用。 右键菜单/使能运算符,或者在“插入”菜单中选择“使能运算符”,均可插入使能运算符。 当插入一个使能运算符时,会出现带有一个 EN 标志的使能输入端。使能输入端 EN 的 输入为 BOOL 类型。当使能输入端 EN 为 TRUE 值时,运算才被执行,如图 7-4-5 所示。 图 7-4-5 插入使能运算符 当选择插入使能运算符时,系统默认的指令为“AND”,可以选中运算符关键字“AND”, 直接更改为所要求的指令,诸如赋值指令“MOVE”,也可以借助帮助来输入使能运算符的关 键字。用鼠标激活运算符关键字,按下快捷键 F2,或者调用主菜单“编辑”/“输入变量”命令, 在弹出的帮助窗口中选择合适的运算符,便添加了相应的使能运算符,如图 7-4-6 所示。 - 83 -

第94页

图 7-4-6 自动提示输入运算符  功能块调用 包括定时器、计数器、边沿触发器、通讯、高速输入输出、模拟量处理指令等在内的指 令,应采用功能块的形式调用。 在使用功能块调用这些指令之前,首先需要了解库的概念。PowerPro 软件中,把用来实 现这些常用功能的指令集合起来建立专门的库。假如要使用某些指令,首先需要添加该指令 的库。关于库的概念及使用,请参见 7.4.4 节。 在添加完相应的库以后,可以在程序中用功能块形式调用该指令。右键菜单/功能块,或 者在“插入”菜单中选择“功能块”,弹出如图 7-4-7 所示的对话框,根据库选择所需要的指令即 可。 图 7-4-7 添加功能块指令 在应用中经常会混淆“功能块”与“使能运算符”的概念。其实二者是有严格区别的,“功能 块”与“使能运算符”具有不同的调用形式。对于“功能块”,其自带使能端,无论是否使能,在 程序运行时均会执行该功能块。对于“使能运算符”,只有在使能端 EN 有效时,才可以调用 该使能运算符。 - 84 -

第95页

注意: 在调用功能块指令时,需要对该功能块进行实例声明,与变量定义类似,需要定义一个变量,数据 类型自动默认为该功能块类型。一个程序中假如用到多个该指令,其声明的变量应不同。 7.4.4 添加库 编写 PLC 程序的过程中,经常会引用一些指令或者功能块,如字符串处理指令、触发器 功能块、计数器功能块、PID 控制功能块等等。在 PowerPro 软件中,把用来实现这些常用功 能的指令和功能块集合起来进行分类,然后建立专门的库。 库是指令与功能块的集合,所有的库都包含“库名.lib”文件(包含指令和功能块的输入输 出代码),调用指令和功能块只需载入相应的“库名.lib”文件。 最常用的库主要有标准库(Standard.lib)、应用库(Util.lib、Util_no_Real.lib)、系统库 (SysLibC16x.lib、SyslibCallBack.lib)等。标准库和系统库在建立工程时就自动添加到程序 中,可以直接调用,其它库则需要添加到工程后才可以调用。系统提供的所有库文件都以库 文件*.lib 的形式存在于\\Hollysys\\PowerPro\\Library 目录下。  库管理器 库管理器用来管理库函数和功能块,包含了系统提供的所有标准函数和功能块。选择“窗 口”/“库管理器”选项,打开库管理器,如图 7-4-8 所示。 库管理器可以显示所有和当前工程连接的库,可以像使用用户自定义的程序、功能块、 函数、数据类型和变量一样使用函数库里的程序、功能块、函数、数据类型和变量。 图 7-4-8 打开库管理器 标准库管理器窗口分成 4 个区域,如图 7-4-9 所示。绑定到工程的库列表位于左上区域, 左下区域显示所选择库的程序、数据类型或全局变量。选择一个函数或功能块后,其变量声 明出现在库管理器的右上区域,右下区域是函数或功能块的图形显示。 学会查看函数库是非常重要的。在函数库中,给出了一些关于该函数非常重要的信息, 例如,该函数中有几个输入变量及中间变量,它们各自的数据类型是什么,有哪些中间变量 是必须赋予初始值的以及变量的注释等等。 - 85 -

第96页

库 列变 表量 声 明 程 序 图 形 显 示 图 7-4-9 库管理器窗口  添加库 当库列表区的库文件已不能满足目前的编程需要时,则需要添加库。注意,由于 Util.lib 和 Util_no_Real.lib 的数据类型有冲突,会产生编译错误,不允许同时添加。使用库时,需要 保证相应的库文件存在于如下目录:PowerPro 安装目录\\Library\\。添加库的过程如下所述: 使用“插入”/“添加库”命令,或在库管理器窗口的库列表位置选择鼠标右键菜单命令“添加库”, 如图 7-4-10 所示。 图 7-4-10 添加库 选择所需要的库文件,点击“打开”。不论哪种库,只需要打开对应的*.lib 文件即可,如 图 7-4-11 所示。 - 86 -

第97页

图 7-4-11 打开库 上面所选择的库被添加到库列表中,如图 7-4-12 所示。注意,凡是添加到库管理器的库 都会占用用户程序空间,所以建议用户只添加所使用的库。 图 7-4-12 显示库  删除库 使用“编辑”/“删除”命令,或选择鼠标右键菜单“删除”,可以从工程和库管理器中删除已 添加的库。 注意: 在新建工程后,PowerPro 自动添加了标准库(Standard.lib)和系统库(SyslibCallBack.lib), 其余库文件需要手动添加。 - 87 -

第98页

7.4.5 库的制作 在工程实施中,如果有一些算法或逻辑是大量重复的,而且可以应用于多个工程中,则 可以将这部分逻辑制作成库,以方便于程序编写、工程维护管理及技术资源共享。还可以加 上口令,以保护库的具体实现算法和逻辑不被查看和修改。以下将介绍制作库的过程: 首先新建一个工程,“目标设置”中“配置”选“None”,如图 7-4-13 所示。 图 7-4-13 自定义库(1) 确认后,弹出“创建 POU”窗口,如图 7-4-14 所示。“POU 类型”选择“功能块”。根据需要 填写“新 POU 名”,一般来说命名要尽量采用能反映其实际用途的字符。在图 7-3-2 中,“POU 语言”选择了 ST,“新 POU 名”为“Generate_CRC”,即 CRC 校验。 图 7-4-14 自定义库(2) 设置完毕后自动生成一个功能块结构体,可以先保存为库文件,再往里面添加所需要的 内容。保存时注意要存在PowerPro\\Library目录下,文件名根据需要定义,保存类型要选择内 部库(Internal Library),如图7-4-15所示,使算法逻辑在库文件中实现。还有一种是外部库 (External Library),其算法逻辑在模块中实现,库文件中只定义使用的变量。 - 88 -

第99页

图 7-4-15 自定义库(3)  举例 本例是专为产生 CRC16 校验而制作的一个 ST 语言的自定义库,如图 7-4-16 所示。 编译通过后,就可以在其它的工程中使用此库。使用前注意在库管理器中先要加入此库。 如果想要在其它的计算机上使用此库,则只需要将此库文件复制到其它计算机的软件安 装目录 PowerPro\\Library 下,再添加到工程中即可。 一个库中可以包括多个功能块或函数。如果想要添加功能块或函数,只需打开库文件, 在程序中添加新的功能块即可。 注意,库中的功能块不允许递归调用,即不允许自己调用自己。 图 7-4-16 自定义库(4) - 89 -

第100页

对于自定义库,可以加口令保护。这与对程序加密的原理相同,只需在“资源”选项卡中, 选中“工程选项”,打开“Passwords”,设定相应的口令,即可实现加密,如图7-4-17所示。 图 7-4-17 自定义库加密 7.4.6 跳转和返回 跳转和返回都是对程序扫描顺序的改变。在正常情况下,PLC 将根据主程序中节的顺序 进行扫描。  跳转:当条件满足后,则跳转至相应的节。 右键菜单/跳转,或者在“插入”菜单中选择“跳转”,均可插入跳转命令,如图 7-4-18 所示。 插入跳转后,需要输入跳转标签(默认为“Label”)。跳转标签用于识别跳转目的地。如 图所示,则跳转条件满足后,直接跳转至第三节,不再执行第二节的程序。 每个网络都有一个标签,缺省为空。标签在每个网络的首行,鼠标直接点击,即可输入 标签。 图 7-4-18 跳转 - 90 -

百万用户使用云展网进行电子书册制作,只要您有文档,即可一键上传,自动生成链接和二维码(独立电子书),支持分享到微信和网站!
收藏
转发
下载
免费制作
其他案例
更多案例
免费制作
x
{{item.desc}}
下载
{{item.title}}
{{toast}}