发布时间:2021-11-23
|
杂志分类:其他
粉丝:{{bookData.followerCount}}
{{!bookData.isSubscribed?'关注':'取消关注'}}
当主程序和子程序有变量传递时,需要定义一些输入输出变量,或者定义全局变量。关 于变量,请参见 4.4 章节。 7.4.8 添加注释 为了增加程序的可读性,需要给程序、节或者变量和地址添加注释。PowerPro 提供多种 方式用于添加注释。 程序和节的注释 程序的注释与节的注释一致。PowerPro 可以对每一节添加注释,如图 7-4-21 所示。具体 注释方法,请参见 7.4.1 章节。 变量注释 PowerPro 允许对变量进行注释。在定义变量时,可以在变量声明对话框中直接进行注释, 也可以在变量声明区进行注释,如图 7-4-21 所示。 地址注释 假如在程序中用到 I 区、Q 区或 M 区的地址,那么也可以对地址进行注释。在高级菜单 /选项中,选择每一个触点的注释,并操作应用选项后,就可以在梯形图中,对地址参数进行 注释,如图 7-4-21 所示。关于梯形图选项,请参见 7.4.9 章节。 ... [收起]
[展开]
{{!bookData.isSubscribed?'关注':'已关注'}}
粉丝: {{bookData.followerCount}}
文本内容
第101页
返回:当调用 POU 时,可以利用返回,当条件满足后,被调用的 POU 不再继续执 行,而返回调用的 POU 中。 右键菜单/返回,或者在“插入”菜单中选择“返回”,均可插入返回,如图 7-4-19 所示。 图 7-4-19 返回 7.4.7 子程序调用 当程序比较复杂时,往往需要建立许多程序。在前面的章节中曾多次提到,PowerPro 把 程序名为“PLC_PRG”默认为主程序,其余均为子程序。 在调用子程序之前,首先应该建立子程序。关于子程序的建立,请参见 5.2 创建 POU 章 节。建立完子程序后,在主程序中,用使能运算符的形式调用,将运算符关键字修改为子程 序的名字即可,如图 7-4-20 所示。关于使能运算符调用,请参见 7.4.3 章节。 图 7-4-20 子程序调用 - 91 -
第102页
当主程序和子程序有变量传递时,需要定义一些输入输出变量,或者定义全局变量。关 于变量,请参见 4.4 章节。 7.4.8 添加注释 为了增加程序的可读性,需要给程序、节或者变量和地址添加注释。PowerPro 提供多种 方式用于添加注释。 程序和节的注释 程序的注释与节的注释一致。PowerPro 可以对每一节添加注释,如图 7-4-21 所示。具体 注释方法,请参见 7.4.1 章节。 变量注释 PowerPro 允许对变量进行注释。在定义变量时,可以在变量声明对话框中直接进行注释, 也可以在变量声明区进行注释,如图 7-4-21 所示。 地址注释 假如在程序中用到 I 区、Q 区或 M 区的地址,那么也可以对地址进行注释。在高级菜单 /选项中,选择每一个触点的注释,并操作应用选项后,就可以在梯形图中,对地址参数进行 注释,如图 7-4-21 所示。关于梯形图选项,请参见 7.4.9 章节。 图 7-4-21 注释 注意: 添加节的注释与 7.4.6 章节中提到的跳转标签是有区别的。添加注释,必须通过选择右键菜单 /注释或插入菜单/注释来实现。 7.4.9 梯形图选项 打开高级菜单/选项,弹出如图 7-4-22 所示对话框,可以对梯形图显示进行设置。 - 92 -
第103页
图 7-4-22 梯形图选项 最小注释行数和最大注释行数用于选择节注释的行数。 每一个触点的注释用于设置触点的注释行数以及变量名的行数。 自动换行:当一节的长度超过显示长度后,可以自动换行,保证在一个画面中显示 所有的触点、线圈和指令。 输入地址后由变量名替代:当变量定义地址后,在程序中输入地址,则自动变为相 应的变量名。 将触点注释转化为变量名注释:将触点的注释转化为变量名的注释。 显示地址:当变量定义了地址后,在程序中输入变量名,自动显示相应的地址。 显示变量注释:在每一节中,显示该节所使用的变量名、数据类型、地址及注释。 7.4.10 保存文件 在主菜单中选择“文件”/“保存”菜单,或在工具栏中点击“ ”按钮,可以保存当前工 程。 在“文件名”中填入新建工程的文件名,建议使用具有一定实际含义的字母或数字。 “保存类型”选择“*.pro”,工程文件将保存在默认目录\\Hollysys\\PowerPro\\Projects 下,如 图 7-4-23 所示。 - 93 -
第104页
图 7-4-23 保存工程(1) 工程文件保存后,主界面左上角的“(Untitled)*”变为保存的工程文件名,如图 7-4-24 所示。在创建工程的整个过程中,要养成随时存盘的习惯,以免由于误操作而造成数据的丢 失。当工程内容改变未保存时,主界面左上角工程名的后面会出现一个“*”号,保存后“*”号 消失。 图 7-4-24 保存工程(2) 可以使用“工程”/“选项”菜单或者“资源”选项卡中的“工程选项”,来设置系统的某些属性。 使用选择“工程”/“选项”会自动弹出设置对话框。在对话框的左边选定一个分类后,在右边出 现相应的设置选项。所做的更改立即生效,同时被保存入初始化文件中,并在下一次启动系 统时自动载入。 7.5 管理工程菜单 PowerPro 软件以工程文件的形式来保存用户程序,所有的信息都集成存放在以*.pro 为 后缀的工程文件中。PowerPro 软件的默认安装目录结构如图 7-5-1 所示,其中“Library”和 “Projects”分别用来存放库文件和工程文件。系统提供了很多针对工程的操作,帮助用户更好 地管理工程。 - 94 -
第105页
D:\\ :目录 Hollysys PowerPro InstallTarget.exe Library Iecsfc.lib SysLibC16x.lib Util.lib Projects Pro1.pro Pro2.pro 图 7-5-1 软件目录结构 打开主菜单中的“工程”菜单,如图 7-5-2 所示。 图 7-5-2 管理工程菜单 下面介绍几项常用的工程管理命令。 7.5.1 打印工程文件 使用“工程”/“工程文件”命令可以打印整个工程的文档,或者选择其中的一部分打印。工 程文件由工程信息、文档内容、程序和资源等元素构成,如图 7-5-3 所示,其中资源包括全 局变量、PLC 配置、报警配置、工程选项、监视与接收管理器、任务配置和参数管理器等内 容。 - 95 -
第106页
图 7-5-3 打印工程文件 用蓝色高亮可以选择需要打印的区域。如果要选定整个工程,直接在第一行选中工程文 件夹即可。如果只想选定一个单独的对象,点击相应的对象。对象的前面带有加号的为多重 对象,点击加号可扩展。选好后弹出打印对话框,可设置打印属性。可以按照一定的格式打 印一个工程文件。选择“文件”/“打印机设置”,弹出如图 7-5-4 所示的对话框。 图 7-5-4 Documentation Setup 对话框 文件 在文件字段,输入带“.dfr”扩展名的文件名,页面布局会保存在此文件中。保存设置的缺 省文件是 DEFAULT.DFR。 浏览 如果要保存在一个已存在的布局里,可点击“浏览”按钮浏览目录找到所需的文件。 编辑 如果点击“编辑”按钮,设置页的对话框则会出现。选择“插入”/“占位符”,可分别插入页、 程序组织单元名、文件名、日期、内容。选择好插入的内容及位置后,按住鼠标左键,将其 拉伸为矩形后,松开鼠标左键,即可将其放在可打印的页面上和文本区。 为每一个工程开始新页 如果选中“为每一个工程开始一个新页”,则打印时另起新页,否则不另起新页。 为每一个子工程开始新页 如果选中“为每一个子工程开始一个新页”,则打印时另起新页,否则不另起新页。 - 96 -
第107页
打印机设置 使用“打印机设置”按钮,打开打印机设置。点击“属性”,同样可以弹出“打印”对话框。 图 7-5-5 所示为一个自定义的页面布局,分别在相应的位置插入页码(Page)、程序组 织单元名(POUName)、文件名(FileName)、日期(Date)和内容(Content)等占位符, 占位符相当于通过将矩形置于布局中进行占位。在打印输出时,相应的内容会映射在相应位 置处。当布局设置好后,点击“确认”。 如果模板被更改,则 PowerPro 软件会提示是否关闭以前保存的信息。 另外,在“工程”/“选项”/“Desktop”下,如果选中“显示打印边界”,则会在程序的相应范围 内出现红色虚线,以示打印界限。否则,不会显示该虚线。 图 7-5-5 页面布局设置 7.5.2 导入导出工程 “工程”/“导入”、“导出”命令可以导入或导出工程对象,以便在不同的工程文件中交换程 序。在导出文件时,对话框底部的“每个对象对应一个文件”选项,可以选择对象导出到同一 个文件,还是导出到不同的文件中,如图 7-5-6 所示。 - 97 -
第108页
图 7-5-6 导出工程(1) 设定完成后,弹出导出工程对话框,如图 7-5-7 所示。在“目录”下指定导出对象的保存 路径,即在指定目录下生成以*.exp 为扩展名的若干导出文件,同时弹出消息窗口列表,显示 相关信息。 图 7-5-7 导出工程(2) - 98 -
第109页
导入工程对象时,选定导入的文件*.exp,对象即被导入到当前工程的相应窗口中去。如 果在该窗口中,已经有一个同名的对象存在,则会出现对话框,询问是否替换它:“对象已存 在,要替换它吗?”,如图 7-5-8 所示。 图 7-5-8 覆盖提示 导入的对象和导出的结果都存放在*.exp 文件中。通过*.exp 文件,可以在不同的工程之 间搭起一座沟通的桥梁,可以方便地交换工程中的所有对象,如图 7-5-9 所示。 ProjectA ProjectB ProgA ProgB FB1 FBx 导出 FBy FB2 FB2 *.exp文件 FB3 导入 图 7-5-9 导出、导入示意图 7.5.3 合并工程 “工程”/“合并”命令可以把其它工程中的对象合并到当前工程中。打开合并工程对话框, 选定一个工程,弹出该工程的所有对象列表,选择需要合并的对象,如图 7-5-10 所示。 对于库或资源的合并,也会弹出对话框提示是否覆盖。 对于程序的合并,会将新程序添加到原程序列表中。如果合并的程序与当前工程中的程 序同名,则会弹出对话框询问是否覆盖。 图 7-5-10 合并工程 需要注意的是,在合并工程时,系统事件不会被合并。 - 99 -
第110页
7.5.4 比较工程 “工程”/“比较”命令可比较当前工程与另一个工程的所有对象的内容。如果想知道是否在 当前工程中做了修改,那么可以比较当前打开的工程和它的前一个版本。当执行此命令后, 弹出工程比较对话框,如图 7-5-11 所示。 图 7-5-11 比较工程(1) 选定与当前工程比较的目标工程后,弹出比较结果列表,如图 7-5-12 所示。不同颜色的 对象文字代表不同的比较结果,共有五种可能的颜色: 黑色:对象内容相同。 红色:对象内容不一致。 蓝色:当前工程中新增加的对象。 绿色:当前工程中没有的对象。 灰色:两个工程中内容不一致的对象,鼠标双击对象可查看详细内容。 图 7-5-12 比较工程(2) 在具体的程序编写过程中,还可以利用“比较”命令,对修改前后的程序代码进行比较, 如图 7-5-13 所示。在比较模式下,不允许编辑工程对象,所有操作功能禁用。只有关闭了比 较列表窗口,才能对工程进行编辑。 另外,比较工程不支持硬件配置的比较。 - 100 -
第111页
图 7-5-13 比较工程 7.5.5 用户口令 “工程”/“选项”/“Passwords”选项可以设定单一用户口令,保护 CPU 免受未授权的访问, 防止文件被随意地打开和更改,如图 7-5-14 所示。其中“口令”字段为工程设置浏览权限,“写 保护口令”字段中为工程设置更改权限。 图 7-5-14 设定口令选项 输入口令时,对应每一个字符出现一个星号(*),在“确认口令”字段再次输入同样的内 容。设定成功后,下次打开工程时,就需要通过口令验证。如果出现如图 7-5-15 所示的对话 框,说明两次输入口令不一致,需要重新输入。 图 7-5-15 口令错误提示 - 101 -
第112页
对于一个写保护的工程,在没提供口令的情况下是不能被更改的。如果打开一个文件时 系统提示输入写保护口令,而只是简单地点击“取消”按钮,那么工程中所有的编辑设定功能 都禁用,只可以使用编译或仿真等查看功能。 如果存在多个用户,需要定义用户组,为每个用户组分配不同的访问权限。系统共提供 了 8 个用户组,它们对工程对象拥有不同的访问权限。每个用户组的成员都通过口令来确认 身份。“工程”/“用户组命令”用来设定用户组的口令。用户组从 0 到 7,0 组拥有管理员权限, 只有 0 组的成员可以决定其它用户组和对象的口令和访问权,如图 7-5-16 所示。 建立一个新工程时,所有的口令初始状态都是空的。当一个口令被设置为 0 组,用户以 0 组成员的身份进入工程时,就可以对其它级别的组设定口令。如图 7-5-16 所示,在左边的 组合框“用户组”中选定组,在右边输入相应的口令。 图 7-5-16 用户组命令 使用“工程”/“对象”/“属性”命令可以为用户组设置不同的访问权限,如图 7-5-17 所示。访 问权限有三种可用的设置: 无访问权限:对象不允许被此用户组的成员打开。 只读权限:对象能够被此用户组的成员读入,但不能被更改。 完全权限:对象能够被此用户组的成员打开和更改。 访问权限的设置仅对选中的对象有效,每个 POU、硬件配置或全局变量都是对象成员。 如果忘记了口令请及时与制造商联系,口令随工程一起保存。 图 7-5-17 用户操作权限设定 - 102 -
第113页
下面是一个简单的用户组命令的应用例子。 打开“工程”/“对象”/“属性”,设置用户组权限,如图 7-5-18 所示。 设置用户组 0 和 1 的访问权限为完全权限。 设置用户组 2 和 3 的访问权限为只读权限。 设置用户组 4、5、6 和 7 的用户权限为无访问权限。 设定好用户组权限后,分别对各用户组设置相应口令。 图 7-5-18 设定用户组权限属性 这里简单设定用户组口令,如图 7-5-19 所示。 先对“Level 0”进行口令设置,在“口令”空栏处填入“0”,在“口令确认”空栏处填入“0”,点 击“确认”,则“Level0”口令设置完毕。 同样,分别对 Level1、Level2 和 Level3 设置口令。用户组与口令的对应关系设置如表 7-5-1 所示。 由于用户组 4、5、6 和 7 的用户权限为无访问权限,所以无需设置其口令。 图 7-5-19 设定用户组权限口令 表 7-5-1 用户组与口令 用户组 口令 Level 0 0 Level 1 1 Level 2 2 Level 3 3 - 103 -
第114页
分别设置好不同用户组的口令后,在下一次打开程序时,会提示要求输入用户组口令。 对于不同用户组,因其设置的口令不同,可以不同的身份进入程序,而且享有不同的操作权 限。现以“Level0”的用户组进入,输入口令如图 7-5-20 所示。 图 7-5-20 输入用户组权限口令 如果输入的口令与用户组 0 所设置的口令不同时,会出现如图 7-5-21 所示的提示。 图 7-5-21 输入用户组权限口令错误 如果输入的口令与用户组“Level0”所设置的口令一致,则会以用户组“Level0”的身份进 入。对于用户组 Level4、Level5、Level6、Level7 和 Level8 的成员,由于无访问权限,则会 弹出如图 7-5-22 所示的对话框。 图 7-5-22 用户组无访问权限 7.6 工程选项设置 “工程选项”有两种打开方式。一种是点击“工程”下拉菜单中的“选项”,另一种是双击“资 源”选项卡中的“工程选项”,如图 7-6-1 所示。 图 7-6-1 工程选项设置 - 104 -
第115页
打开“工程选项”设置对话框,该选项被分为几大类。每个选项对应右边的不同设置。这 些选项包括: 下载与保存 Load&Save 用户信息 User Information 编辑器 Editor 窗口 Desktop 颜色 Color 目录 Directories 日志 Log 编译 Build 口令 Passwords 源代码下载 Source download 符号配置 Symbol configuration 数据库连接 Database-connection 宏 Macro 在 上 述 选 项 中 , PLC 不 支 持 “ 源 代 码 下 载 Source download” 、 “ 符 号 配 置 Symbol configuration”、“数据库连接 Database-connection”和“宏 Macro”,这里不作介绍。 下面分别对“下载与保存 Load&Save”、“用户信息 User Information”、“编辑器 Editor”、“窗 口 Desktop”、“颜色 Color”、“目录 Directories”、“日志 Log”、“编译 build”和“口令 passwords” 等进行介绍,其余均采用默认值。 7.6.1 下载与保存 在“工程选项”下,选择“Load&Save”选项,在窗口右侧显示其设置选项,如图 7-6-1 所示。 下载与保存“Load&Save”的具体选项设置可以分为如下几类情况。 选中“创建备份”,系统会在保存工程的时候以相同路径建立一个扩展名为“.bak”的备 份文件。通过这种方式可以保存最后一次保存之前的工程文件。 选中“自动保存”,那么工作时,工程会经常不断按照设定的“自动保存时间间隔”, 以扩展名“.asd”保存临时文件。该文件会在程序正常退出时被删除,系统默认的保存 路径为 D:\\Hollysys\\PowerPro\\Projects。如果系统非正常退出(例如电源故障),文 件就会被保留下来。当再次打开程序时,出现如图 7-6-2 所示的消息框,可以选择 是打开自动保存文件还是打开原始文件。 图 7-6-2 自动恢复提示 - 105 -
第116页
选中“编译前保存”,每次执行编译命令前,自动保存“*.asd”临时文件。 选中“需要工程信息”,那么当保存一个新工程或用新名字另存成一个工程时,工程 信息对话框会自动被调用,相当于自动执行“工程”/“项目信息”命令。项目信息包含 工程的标题、目录、作者和版本等信息,作为工程文件的一部分,可打印。 选中“自动装载”,软件在运行时会自动载入上一次最后打开的工程。 选中“退出时提醒启动工程”,如果工程已经改变和下载,但是自从上次下载启动工 程之后没有创建新的启动工程,那么在用户退出前将会弹出如图 7-6-3 所示的对话 框:“自上次下载后,没有创建启动工程,是否退出?”。这里对启动工程加以定义。 所谓“启动工程”,即保存在 PLC 的 flash 中,上电后运行的用户程序。 选中“保存 ENI 许可证”,则会保存 ENI 许可证。 图 7-6-3 “退出时提醒启动工程”对话框 7.6.2 用户信息 在“工程选项”下,选择“user-info”选项,在窗口右侧显示其设置选项。用户信息的具体内 容设置如图 7-6-4 所示。在相应的用户名、姓名缩写和公司等空格处填入相应的用户信息内 容。 图 7-6-4 用户信息 7.6.3 编辑器 在“工程选项”下,选择“Editor”选项,在窗口右侧显示其设置选项。编辑器的设定包括自 动声明、自动格式化、表元素、声明为表、标记、位值等选项,如图 7-6-5 所示。 - 106 -
第117页
图 7-6-5 编辑器选项 选中“自动声明”,那么在用户编辑的程序中一旦出现了没有定义的新变量,系统会 自动弹出对此变量定义的窗口,提示定义变量。 选中“自动格式化”,系统在编辑器中将会执行自动格式,即当编辑完成一行后,这 一行会自动进行格式转化,将小写的操作数用大写表示,插入空格使各列均匀分开。 选中“声明为表”,声明编辑器将以表格的形式出现,如图 7-6-6 所示。用户可以采 用填表的方式定义变量。这张表是卡片索引形式的对话框,共有六张变量卡和一张 信息卡。变量卡分别是 VAR 本地、VAR_INPUT 输入、VAR_OUTPUT 输出、 VAR_IN_OUTPUT 输入/输出、CONSTANT 常数和 RETAIN 保留型变量等。对于每 一个变量,需要设置变量的名称、地址、类型、初始值和注释等字段。INFO 信息 卡自动显示 POU 类型及名称。 图 7-6-6 表格声明 “跳格宽度”设定在编辑器中空格的宽度,缺省的设置是 4 个字符宽。字符的宽度取 决于选择的字体。 “字体”按钮设定工作区域中所有窗口的字体。大字体放大了打印输出的大小,对每 一种编辑器都适用。 “标记”设定在图形编辑器中当前选择是由虚线矩形表示,还是由实线矩形表示,或 是由填充矩形表示。 “位值”设定在线模式下变量(类型 BYTE、WORD 和 DWORD 等)显示的格式是十 进制[D]数,还是二进制[B]数,或是十六进制[H]数。 举例 十进制[D] 二进制[B] 十六进制[H] a=53 a=2#0000 0000 0011 0101 a=16#0035 b=57 b=2#0000 0000 0011 1001 b=16#0039 “禁止复杂类型监视(数组,指针,VAR_IN_OUT)”PLC 不支持此功能。 - 107 -
第118页
选中“显示程序组织单元符”选项,则在程序编辑过程中,如果调用相应的功能块, 会自动添加“PowerPro/Library”路径下的 bmp 文件,丰富功能块内容,增加软件的友 好性。 7.6.4 窗口 在“工程选项”下,选择“Desktop”选项,在窗口右侧显示其设置选项,如图 7-6-7 所示。 图 7-6-7 窗口选项 选中“工具栏”,在主窗口中出现工具栏,显示菜单的常用命令快捷按钮。 选中“状态栏”,在主窗口的最下部出现状态栏。 选中“在线安全模式”,当执行在线命令时,例如“运行”、“停止”、“复位”或“断点” 等在线命令,会弹出确认对话框,再次确认操作。这样可以进一步提高安全性,避 免误操作。 选中“登录前询问通信参数”,则会在登录时提示通讯参数对话框,方便校准通讯参 数,例如参数是否设置及其设置的正确性。这就无须再打开“在线”菜单来设置“通讯 参数”。否则,则不具备此项功能。 在“语言”选项中,只能选择菜单和对话框的显示语言,默认为 English。 选中“显示打印边界”,在每一个编辑窗口,将每页打印纸可打印区域用红色虚线框 出。这个区域的大小取决于打印机属性(纸张、布局)和“Content”区域的大小(文 件/打印机设置),如图 7-6-8 所示。 选中“F4 忽略警告”,当程序编译后,在消息窗口使用快捷键 F4 快速跳转时,会略 过出现警告(warning)的行,只跳到出现错误(error)的行。 图 7-6-8 可打印区域显示 - 108 -
第119页
7.6.5 颜色 在“工程选项”下,选择“Colors”选项,在窗口右侧显示其设置选项,如图 7-6-9 所示。 图 7-6-9 颜色选项 根据用户的需求和习惯,可对系统的某些特定显示颜色进行重新设置。采用颜色标识, 主要针对在线调试的情况,可以直观方便地观察程序当前运行的情况。点击对应选项按钮, 打开颜色对话框,按照特定需求设定相应的颜色。一般情况采用默认值。 “行数”:缺省浅灰色,程序编辑器中网络号或行号的背景颜色。 “当前位置”:缺省红色,在线运行时,遇到断点停止的网络号或行号的背景颜色。 “断点位置”:缺省深灰色,可设置断点的网络号或行号的背景颜色。 “已到达的位置”:缺省绿色,显示流控制时,已执行的网络号或行号的背景颜色。 “设置断点”:缺省浅蓝色,设置了断点的网络号或行号的背景颜色。 “逻辑监视”:缺省深蓝色,在线模式下,数字逻辑 TRUE 的颜色。 7.6.6 目录 在“工程选项”下,选择“Directory”选项,在窗口右侧显示其设置选项,如图 7-6-10 所示。 在“工程”栏内可以设置工程的库、编译文件、配置文件和文件视图等所在的目录。在“目标” 栏内显示“配置文件”所在目录,对于“库”默认为无路径,此项是系统自动生成的,不可修改。 PowerPro 软件安装时自动生成的文件目录会显示在“公用”栏内的库、编译文件、上传文件、 配置文件和文件视图等的目录中。 图 7-6-10 目录 - 109 -
第120页
7.6.7 日志 所谓“日志”表示工程按一定的年月日顺序记录用户所作的一系列动作。其中记录内容包 括登录、运行、初始化、输入值、退出、清除缓存区和无法登录等。在“工程选项”下,选择“Log” 选项,在窗口右侧显示其设置选项,如图 7-6-11 所示。 图 7-6-11 日志选项 选中“工程日志目录”,可以修改工程日志的保存路径,其默认的路径为 D:\\Hollysys\\PowerPro。 “最大工程日志”设定日志窗口中最多显示的在线会话的个数。 选中“激活日志”,在工程中启用日志记录功能,显示日志列表,如图 7-6-12 所示。 在日志中分别记录了登录、运行、初始化、输入值、退出和清除缓存区等一系列用 户动作、状态变化或内部动作。 在线会话 图 7-6-12 日志列表 在“选择”栏中,选定每个在线会话所记录的内容,包括用户动作、状态变化、内部 动作和例外等。 “日志”窗口在“离线”和“在线”两种模式下均可使用。图 7-6-12 所示为一个在离线仿 真模式下产生的日志列表。 7.6.8 编译 在“工程选项”下,选择“Build”选项,在窗口右侧显示其设置选项,如图 7-6-13 所示。 - 110 -
第121页
图 7-6-13 编译 “调试”:当此项被选中时,附加的调试代码会增加代码段长度。当此项未被选中时, 会加快工程的速度,减少代码段长度。另外,只有选中该项,登录后才可以运行“断 点”和“单步”等调试功能。 “常量代替”:每个常量的值是直接下载的,在“在线模式”下,常量的值为绿色,强 制值、输入值和监视常量不再有效。如果此选项无效,则该常量值会通过变量访问 下载到存储区。 “嵌套注释”:允许使用嵌套的注释语句。 举例:嵌套注释 (* a:=inst.out; (*检查*) b:=b+1; *) “数据段数目”:用于设置编译的数据段的个数。 “编辑器版本”:如果选中“最近使用”,会给出最近使用的版本号。 “自动检查”: 选中“未用变量”,在编译时会自动检查未使用的变量。 选中“重叠内存区”,在编译时会自动检查重叠内存区。 选中“同时访问”,在编译时会自动检查同时访问。 选中“多路写输出”,在编译时会自动检查多路写输出。 - 111 -
第122页
“自动检查”与“工程”菜单栏里的“查看”具有同样的功能。唯一不同的是,“工程/查看”只 有在编译后,可以通过“查看”选择要查看的内容,例如未用变量等,而且只能一一查看。而 自动检查则可以选择多项,在编译时一起实现自动检查。 图 7-6-14 所示为当上述四项均选中,在编译时,消息窗口自动生成的检查情况。 图 7-6-14 编译消息 7.6.9 口令 如果程序需要加密,则需要对该程序设置相应的口令。 在“工程选项”下,选择“Passwords”选项,在窗口右侧显示其设置选项,即可设置相应的 口令。口令代码完全根据个人需求自行设置。如果保密性强,建议多设置几位口令代码。在 图 7-6-15 所示的例子中,设置了六位代码的口令,下面介绍其使用方法。 图 7-6-15 口令设置 在对程序进行口令设置且保存后,在下一次打开该程序时,系统会提示要求输入口令。 输入相应的口令,点击“确认”,如图 7-6-16 所示。 - 112 -
第123页
图 7-6-16 输入口令 点击“确认”后,窗口会弹出如图 7-6-17 所示的对话框,要求输入写保护口令。如果所输 入的口令正确,则程序被打开,而且可以进行编辑。 图 7-6-17 输入写保护口令 对于已经加密的程序,如果现在不需要加密,则只需打开“工程选项”\\“Passwords”,将以 前设置的所有密码删除并存盘。当再次打开该程序时,密码保护功能失效。 - 113 -
第124页
第8章 编译与调试 当程序编写完毕后,要对程序进行编译。当编译通过后,才能将程序下载到 PLC 中。本 章主要对 PowerPro 软件的编译与下载过程进行介绍。 8.1 编译 PowerPro 软件的“工程”菜单提供了“编译”和“全部编译”两种编译命令,用于检查程序有 无语法错误,如图 8-1-1 所示。 编译:仅对程序的变化部分进行编译,并更新到原有的目标文件中。 全部编译:与“编译”命令不同,可以完全重新编译整个工程。 清空:清除上次编译和下载的信息。 载入在线修改信息:PLC 不支持此项功能。 图 8-1-1 工程菜单 没有语法错误的程序才能生成可执行的目标文件。编译的结果会显示在消息窗口中,如 图 8-1-2 所示。 常见编译错误信息参见 无错误无警告,编译通过。 发现一个 4001 号错误。 图 8-1-2 编译信息显示 - 114 -
第125页
8.2 显示参考数据 PowerPro 软件的“工程”菜单提供显示一些参考数据的命令,这些命令只有在编译通过后 才有效。 8.2.1 查看调用树 “工程”/“查看调用树”命令可以在一个新窗口中显示当前对象调用程序、函数和功能块的 树型结构,直观地指出当前 POU 与工程中其它 POU 的先后调用关系,如图 8-2-1 所示。工 程必须通过编译,该命令才有效。 图 8-2-1 查看调用树 8.2.2 查看交叉引用列表 “工程”/“查看交叉引用列表”命令可以显示并查看所有应用程序点,如图 8-2-2 所示。所 谓“应用程序点”是指某一个变量、地址或程序在全部工程中的位置。工程必须通过编译,该 命令才有效。 图 8-2-2 查看交叉引用列表 首先需要选择变量(Variable)、地址(Address)或程序(POU)的类别,然后输入名 称,最后点击“获得引用”按钮,在“引用”栏中就得到相应的应用程序点列表,列出该点的信 息。例如,是只读还是可写,是局部变量还是全局变量,变量是否被连到硬件地址上等信息。 - 115 -
第126页
选中交叉参考列表中的一行,按“转到”按钮,或者直接双击此行,程序会在编辑器中显 示出相应的点。通过这种方式,可以任意跳到所需的应用程序点处,而无须进行费时的搜索。 还可以使用“到消息窗口”按钮,使交叉参考列表直接显示在消息窗口中。鼠标双击跳到相应 的程序位置,搜索起来更加方便。 8.2.3 查看 “查看”菜单,仅适用于“仿真模式”下,如图 8-2-3 所示。 图 8-2-3 查看菜单 “查看”/“未使用变量” 编写算法时,常常会删除某个变量,或重新命名某个变量,此时原变量的声明不会被自 动删除,仍保留在声明编辑窗口中。这样,工程里就可能存在只有声明却从未被使用过的变 量,占用内存空间,也不利于变量的管理。 “工程”/“查看”/“未使用变量”命令用来检查工程中是否存在只有声明却没有被使用的变 量。工程必须通过编译,该命令才有效。检查结束后,消息窗口出现所有未使用变量的列表, 如图 8-2-4 所示。 图 8-2-4 查看未使用变量 “查看”/“重叠内存区” 选择此项,工程自动查看重叠内存区。如果没有重叠内存区,则会在消息窗口显示如下 提示:No variables with overlapping memory area found(没有重叠内存区)。 “查看”/“同时访问” 选择此项,工程自动查看有无同时访问,如果没有同时访问,则会在消息窗口显示如下 提示:No concurrent accesses found(没有同时访问情况)。 “查看”/“多路写输出” 选择此项,工程自动查看多路写输出情况,如果没有检查多路写输出情况,则会在消息 窗口显示如下提示:No outputs found which are written to at more than one location(没有多路 写输出)。 - 116 -
第127页
8.3 下载 8.3.1 设备安装与连接 设备安装 首先根据实际工程的需要,选择合适的 CPU 模块和扩展模块。然后根据现场情况确定模 块的安装方式,并初步确定 PLC 的工作方式。最后规划并制定合理的接线方案,将现场的传 感器或执行器连接到 PLC 模块的接线端子上。 连接电缆 根据所选 CPU 模块的型号和类型,连接电源线,如图 8-3-1 所示。电源线接好之后,先 不要接通电源。在检查所有电缆连接无误后,再接通系统电源,并确认 CPU 模块面板上的 RUN 指示灯点亮,并显示正常,以保证 PLC 可靠运行。注意,当电源线连接好之后,应该 把端子盖扣好,以免造成不必要的人身伤害或设备损坏。 图 8-3-1 连接电源线 建立 PC 通讯 通过配套的编程电缆,将 CPU 模块连接到个人计算机(PC)的 RS232 串行通信接口, 建立数据传递通道,如图 8-3-2 所示。由于 CPU 模块的 RS232 串行通讯接口是非隔离的,所 以编程电缆的连接应该在 PLC 上电之前进行。 注意,CPU 模块 LM3108 和 LM3109 有 2 个串口,通过左边的 PORT1 串口将程序下载 到 PLC 中。 图 8-3-2 连接编程电缆 8.3.2 建立通信连接 将编译生成的目标文件下载到 CPU 模块中去,需要配置并选定通讯线路,建立本地计算 机与目标模块之间的通信连接。实现步骤如下所述。点击“在线”菜单中的“通讯参数”,弹出 “Communication Parameters”通讯参数对话框,如图 8-3-3 所示。 - 117 -
第128页
图 8-3-3 通讯参数对话框 点击“Gateway”进入信道参数设置,确认“Connection”通道参数设置为“Local”,点击“OK” 按钮,如图 8-3-4 所示。 图 8-3-4 通道参数设置 确认后返回“Communication Parameters”通讯参数对话框,点击“New”按钮添加新信道, 出现如图 8-3-5 所示的对话框。其中,信道名称默认为“Local_”,通信协议使用缺省的 RS232 协议,点击“OK”按钮返回“Communication Parameters”通讯参数对话框。 信道名称 通讯协议 图 8-3-5 添加新信道 改变通讯速率。连续双击“Baudrate”中“Value”的对应值,使其变为“38400”,如图 8-3-6 所示,点击“OK”按钮确认。这样就建立了本地计算机与 PLC 的 CPU 模块之间的通信连接。 - 118 -
第129页
图 8-3-6 通讯速率设置 8.3.3 程序下载 下载程序 点击“在线”菜单中“登录”,可以实现程序的下载。编译通过的目标文件在进行下载 时,会将全部的目标文件下载到模块中。同时将模块复位,所有变量返回到初始状态。在“在 线”菜单中选定“登录”,建立本地计算机与 CPU 模块的连接,并出现系统提示下载信息,如 图 8-3-7 所示。 图 8-3-7 下载提示信息 当下载的 PLC 程序与 PLC 内部不符的时候,就会弹出该对话框。 如果要更改程序,选择“是”按钮,将新程序下载到 CPU 模块中去。如果不想下载到 PLC 中,只想建立连接,则选择否。 点击“是”按钮,下载到 PLC 后,出现如图 8-3-8 所示的创建启动工程提示信息。启动 工程是指下载至 Flash 中的程序。PLC 为了保证在断电重新上电后,程序不丢失,会在 Flash 中重新创建程序,称为启动程序。 在图 8-3-8 中,点击“是”按钮,确保 PLC 断电后再上电时,运行此下载工程。下载结束。 图 8-3-8 创建启动工程提示信息 - 119 -
第130页
不下载而进入在线监控状态 若不希望下载程序,仅想在线监控 PLC 内的数值,可以在系统提示下载信息时选择“否”, 此时对工程的修改不会被下载到模块中,但可以监控模块中原有程序的运行情况。注意,如 果在线监控之后仍然需要下载程序,可以选择“在线”下拉菜单中的“下载”来实现下载。 登录、下载、创建启动工程的区别 为了解释清楚这几个名词,需要了解一下 PLC 程序的下载过程。PowerPro 需要将编译 好的程序下载到 PLC,首先需要将 PowerPro 与 PLC 之间建立一个连接。“登录”命令的作 用就是将 PLC 和 PowerPro 建立一个连接。建立完连接后,PowerPro 会自动判断程序是否改 变。若程序没有改变,则自动转入在线监控状态,通过 PowerPro 就可以在线监控当前 PLC 的状态。若程序发生了改变,则会提示 “是否要下载新的程序”,选择“否”,则不下载程 序,转入在线监控状态;这时若想下载程序,可以通过在线菜单中的“下载”命令下载程序。 也就是说,“下载”命令只有在登录以后才有效。若选择“是”,则会把修改后的程序下载 指 PLC 的 CPU 内。但是因为 CPU 断电后,数据全部清除,所以为了保证程序在 PLC 重新 上电后依然存在,在下载到 CPU 后,还需要将程序保存到 FLASH 内,这个过程叫创建启动 工程。在下载至 CPU 完成后,PowerPro 还会弹出一个对话框,是否在创建启动工程是停止 目标文件,无论选择是还是否,都会创建启动工程。若选择“取消”,则不会创建启动工程, 这样在断电重新上电后,刚下载的程序不会保存,而是之前保存的原始程序。此时,可以点 击创建启动工程命令,重新往 FLASH 中创建程序。 8.4 调试 系统所支持的调试命令都在“在线”菜单下,并且在调试状态下可以使用,如图 8-4-1 所 示。在调试状态下,系统用不同的默认颜色来代表不同的状态和操作,例如逻辑真(蓝)、 逻辑假(黑)、断点(浅蓝)、流控制(绿色)等等,这些颜色可以在“工程”/“选项”/“Color”中 设定。了解各种颜色的含义,有利于程序的调试和监视。 图 8-4-1 在线菜单 - 120 -
第131页
8.4.1 进入调试状态 执行“在线“/“登录”命令进入调试状态。将程序下载到 PLC 的 CPU 硬件模块中,称为在 线调试状态。如果没有连接硬件模块,在本地计算机模拟运行用户程序,称为仿真模式。“在 线”/“仿真模式”被选中(出现“√”),登录时便会进入仿真模式。 在程序中,如果调用了与 RTS 上硬件相关的功能块,则不可以使用仿真模式。例如,系 统事件不可以使用仿真模式。与 RTS 上硬件相关的功能块包括定制库中的外部扩展功能块和 外部功能块,均不可使用仿真模式。 另外,设定自由口参数后,如果想要恢复原编程系统的下载与调试功能,需要将 RUN/STOP 开关拨到 STOP 位置,才可以进行编程系统登录。 8.4.2 退出调试状态 执行“在线”/“退出”命令退出调试状态,进入编程状态。 8.4.3 运行程序 执行“在线”/“运行”命令,启动下载到模块中的程序,或者启动处于仿真模式下的程序。 一般需要运行程序的情况有以下几种: “在线”/“登录”之后。 用户程序使用“停止”命令终止之后。 用户程序设置了断点之后。 执行一个“单循环”之后。 8.4.4 停止程序 执行“在线”/“停止”命令,暂停程序在模块或在仿真模式下的运行,保存当前变量值。此 时程序仍处于调试状态下,使用“在线”/“运行”命令可重新启动程序,从上次停止的地方开始 继续运行。 8.4.5 复位 如果已经明确地定义了变量的初始值,“复位”命令会把当前变量的值设置为初始值,保 留型变量的值保持当前值。按“F5”键,程序会重新按照复位后的初始值运行。 “冷复位”命令重置所有的变量为初始值,包括保留型变量。只有常量在“冷复位”后 保持原来的值不变。按“F5”键,程序会重新按照冷复位后的初始值运行。 “清空用户程序”命令重置所有的变量为初始值,包括保留型变量和常量,并删除模 块中的用户程序,模块返回到初始状态。 以上命令都会出现对话框,需要进一步确认复位操作,如图 8-4-2 所示。 - 121 -
第132页
图 8-4-2 复位确认对话框 8.4.6 断点 断点是指可以在程序中设置进程停止的地方。通过设置断点,可以在程序的具体地点观 察当前的变量值,便于分段调试程序。 设置断点 执行“在线”/“断点”命令,可在当前位置设置或删除一个断点。断点的设置位置取决于活 动窗口中程序的语言类型。黑色背景的行号(网络号)表示该行可以设置断点,而灰色背景 的行号(网络号)表示该行不可设置断点,如图 8-4-3 所示。 可以设置断点的行 不可设置断点的行 图 8-4-3 断点设置(1) 在 IL 和 ST 中,断点设置在当前光标所在的行。在 FBD 和 LD 中,断点设置在当前被选 定的网络中。在 SFC 中,断点设置在当前选定的步上。 可以直接用鼠标点击黑色背景的行号(网络号)设置或删除断点。如果该行被设置为断 点,对应的行号(网络号)会呈现浅蓝色背景。 当程序运行到达所设置的断点处终止时,相应的行号(网络号)以红色背景来显示。使 用“在线”/“运行”、“跳进”或“跳出”命令,可以继续运行程序。 例如,“登录”后在 0004 行设置一个断点,如图 8-4-4 所示。 - 122 -
第133页
断点 图 8-4-4 断点设置(2) 运行程序,执行到 0004 行断点处时,程序中断,变量 b 保持初始值不变,而上一行的变 量 a 被重新赋值。如图 8-4-5 所示。 图 8-4-5 断点设置(3) 编辑断点 执行“在线”/“断点对话框”命令,弹出如图 8-4-6 所示的断点对话框,可以显示和编辑整 个工程的断点。 设置断点:在“程序组织单元”项中选择一个需要设置断点的程序,在“位置”项中选择设 置断点的行号(网络号),点击“添加”,则断点被添加到列表中。 删除断点:选中断点,点击“删除”,则删除该断点。 查看断点:选中断点,点击“转到”,则立即跳转到编辑器中断点设置的位置。 图8-4-6 设置断点对话框 - 123 -
第134页
当“在线”退出之后,所设置的断点被删除。注意,断点的个数应当限制在 100 以内,如 果超出范围,则会出现如图 8-4-7 所示的提示。 图8-4-7 断点设置(2) 8.4.7 单步 利用单步可以逐步检查程序逻辑的正确性。在对应的活动窗口中,对于不同的编程语言, 单步的含义有所不同。 在 IL 中,执行程序直到下一个 CAL、LD 或者 JMP 命令。 在 ST 中,执行下一个指令。 在 LD 和 FBD 中,执行下一个节。 在 SFC 中,继续执行动作,直到下一步。 执行“在线”/“跳出”或“跳进”命令实现单步执行。当遇到断点时,程序执行当前语句后停 止。当遇到功能块或函数时,“跳出”命令会跳过功能块或函数执行下一条语句,而“跳进”命 令则跳入功能块或函数的内部单步执行。 8.4.8 单循环 执行“在线”/“单循环”命令使程序运行完一个周期后就停止运行。从本质上来说,“单循环” 命令等同于“运行”命令,都可以使用户程序在线运行。只不过“单循环”命令让程序运行完一 个周期后就自动停止,而“运行”命令让程序循环运行,直到执行“停止”命令为止。 8.4.9 变量输入值 设定新值 在调试状态下,用鼠标直接双击声明编辑器中的变量,弹出写变量对话框,如图 8-4-8 所示。在“新值”中填入变量的新值,点击“确认”按钮,当前变量的后面即出现淡蓝色文本标 示的新值。对于布尔型变量,双击后直接在当前值的后面用淡蓝色文本标出 TRUE/FALSE 的状态切换,不使用写变量对话框输入。 激活新值 执行“在线”/“输入值”命令,或使用快捷键“Ctrl+F7”,变量的新值才能被激活,即输入到 模块中。允许对在多个变量写入新值后执行“输入值”命令,将多个新值同时输入模块。 图8-4-8 写变量 - 124 -
第135页
8.4.10 变量强制值 强制值 强制写变量的方法与“输入值”命令一样,先输入新值,然后执行“在线”/“强制值”命令, 或者使用快捷键“F7”写入强制值。 被强制的变量,在程序的每个循环之后都被写入强制值,直到执行“解除强制”命令后为 止。对于“输入值”命令,变量只被写一次,而且允许变量被其它程序赋值。 当开关量的输入为物理点输入时,例如 I0.0,必须使用强制值,但在仿真模式下可以使 用输入值。允许多个变量写入新值后执行“强制值”命令。 变量被强制时,其值用红色文本表示,如图 8-4-9 所示。 图8-4-9 强制值 通过下面这个例子,可以清楚地看出“输入值”和“强制值”的差别。 程序主体: 输入 a、b 值 强制 c、d 值 运行后显示: “输入值”命令只改变了变量 a、b 的当前值,程序一旦运行起来,变量 a、b 将会按照程 序的设定自行累加,每执行一次,程序重新赋值一次。而“强制值”命令使变量 c、d 在每次程 序执行时都被赋予强制值,所以一直保持 3、4 不变。 解除强制 执行“在线”/“解除强制”命令,终止对变量的强制赋值命令。强制赋值被解除后,变量值 恢复黑色。 输入/强制对话框 执行“在线”/“输入/强制对话框”命令,则会弹出如图 8-4-10 所示的对话框,其中包括监视 列表选项卡和强制列表选项卡。 - 125 -
第136页
图8-4-10 输入/强制对话框 8.4.11 查看调用栈 执行“在线”/“查看调用栈”命令,则会在某个断点处,程序停止执行,显示调用堆栈里的 当前程序的列表,如图 8-4-11 所示。 列表中第一个程序是系统默认的程序,或者是在“任务配置”中设定的第一个被调用的程 序。列表中最后一个程序是当前被执行的程序。 选定了一个程序后,点击“跳转到”按钮,则立即跳到该程序的执行窗口,显示正在被处 理的行或段。 图8-4-11 堆栈调用 8.4.12 显示流控制 如果选择了流控制,“在线”/“显示流控制”菜单命令前会有一个“√”号出现。此后,在当前 循环中,被执行的每一行或每一个网络都会被做上标记,运行的行和行号(或网络号)以绿 色显示。在“单循环”模式下,用该命令可非常直观地看到程序的当前运行流程。 图 8-4-12 所示为一个简单的小程序,定义初值为 0 的整型变量 a。当 a<=0 时累加 1,当 a>0 时累加 2。 - 126 -
第137页
图8-4-12 程序示例(1) “登录”后选中“显示流控制”命令,然后选择“单循环”方式。由于 a 的初值为 0,所以在第 一次运行时,a 满足条件<=0,累加 1,当前 a 值变为 1。“显示流控制”命令将本次循环执行 的行(2 行和 3 行)用绿色标示,如图 8-4-13 所示。 图8-4-13 程序示例(2) 再次选择“单循环”,此时由于 a 的值已经变为 1,满足程序中“ELSE”的条件,累加 2, 当前值变为 3。“显示流控制”命令将本次循环执行的行(2 行和 5 行)用绿色标示,如图 8-4-14 所示。 图8-4-14 程序示例(3) 8.4.13 监视与接收管理器 在对象组织器的“资源”选项卡中,可以打开监视与接收管理器的窗口,如图 8-4-15 所示。 在调试过程中,可以在监视与接收管理器的窗口中集中监控工程中各程序的变量。监视与接 收管理器可以将数值预置入某个变量,然后把它们作为一组发送到模块。同样,当前模块的 值可以读入和存储在监视与接收管理器中。 - 127 -
第138页
图8-4-15 监视与接收管理器 创建监视列表 在监视与接收管理器的列表区(左区)点击鼠标右键,从弹出的菜单中选择“增加监视列 表”,并为列表输入合适的名称,点击“确认”。也可通过执行“插入”/“增加监视列表”命令创建 监视列表。 修改监视列表名称 执行“重命名监视变量”,可以改变监视列表的名称。 选择监控变量 选择“输入帮助”,或者利用编辑菜单,列出工程中已定义了的所有变量,用鼠标选择即 可将变量加入到监视列表中。 保存监视列表 执行“存监视列表”,可以保存监视列表,扩展名为“*.wtc”。 导入监视列表 执行“取监视列表”,可以重新载入已经保存的监视列表。 激活监视列表 使“激活”之前出现符号“√”,激活监视列表,才可以监控列表中的变量。创建监视列表的 各项功能仅在未激活前有效。 修改变量值 执行“写入批处理数据”,可以将变量的值改写为设置的变量值。 读取变量值 执行“读出批处理数据”,可以读取变量的当前值。 - 128 -
第139页
第9章 IEC 编程基础 PowerPro 软件遵循国际电工技术委员会(International Electrotechnical Commission,缩写 为 IEC)的 IEC61131-3 标准。之前在 7.4 章节,讲述了 LD 语言编程的规范,本章主要介绍 FBD、IL、ST、SFC 及 CFC 等其他 IEC 标准编程语言。 9.1 功能块图 FBD FBD 是功能块图(Function Block Diagram)的简称。FBD 是一种图形化的编程语言,与 LD 的结构类似。FBD 由一系列“节”组成,每“节”由一系列方块组成。每“节”完成一段相对独 立的运算,这些运算可以包括逻辑表达式、算术表达式、功能块、连线、输入、输出、跳转 和返回等,如图 9-1-1 所示。 图 9-1-1 功能块图语言 9.1.1 光标位置 通过虚线矩形框确认当前的光标位置。下面介绍可能的光标位置,便于在使用“插入”菜 单下的各项命令时识别当前位置。 文本(光标位置 1): 输入(光标位置 2): 操作符、函数或功能块(光标位置 3): 输出(光标位置 4,后面紧跟着赋值或跳转): - 129 -
第140页
赋值、跳转或返回的线段交叉点(光标位置 5): 节的末尾输出端(光标位置 6): 赋值前面的交叉线(光标位置 7): 9.1.2 操作说明 添加“输入” 快捷菜单: 。在当前光标位置插入一个函数或功能块的输入端。 对于某些运算符,输入的数量是变化的,有时需要扩展运算符的输入。例如,ADD 可以 是两个数相加,也可以是更多的数相加。选中输入(光标位置 2),插入的新输入成为功能 块的第一个输入。如果要插入一个位于末端位置的输入,必须选中功能块本身(光标位置 3)。 插入的输入缺省值为文本“???”。点击选中文本,改变成所需要的常量或变量。对此可以使用 输入辅助。 在需要的时候,增加功能块的输入可以大大简化程序,如图 9-1-2 所示。 图 9-1-2 扩展输入端 如何快速切换输入端?位于运算符右边的分支与函数的第一个输入端相连,但此时需要 改为与第二个输入端相连。可以选中第一个输入执行命令“编辑”/“剪切”。然后选中第二 个输入执行命令“编辑”/“粘贴”。这样,此分支连接到第二个输入端。 添加“输出” 快捷菜单: 。在当前光标位置插入一个功能块的输出端。 对于某些功能块,输出的数量可能是变化的。此命令可以扩展功能块的输出。 - 130 -
第141页
插入“运算符” 快捷菜单: 。在当前位置插入一个运算符。 如果输入被选中(光标位置 2),运算符被插入到输入的前面。此运算符的第一个输入 连接到选中输入的左边分支,新运算符的输出连接到选中的输入。 如果输出被选中(光标位置 4),运算符被插入到输出的后面。此运算符的第一个输入 连接到选中的输出,新运算符的输出连接到原来连接的分支上。 如果运算符、函数或功能块被选中(光标位置 3),旧的元素被新的运算符代替。分支 的连接与没有被替换之前的情形相同。如果旧元素有比新运算符分支更多,那么多余的分支 将被删除。 如果一个跳转或返回被选中,那么运算符会插入到跳转或返回之前。运算符的第一个输 入与选中的元素的左边的分支相连,运算符的输出连接到选中元素的右边的分支。 如果“节”的最后一个光标位置被选中(光标位置 6),那么运算符会被插入到最后一个 元素之后,运算符的第一个输入连接到选中位置的左边分支。 被插入的运算符缺省总是 AND。选中关键字,可以把 AND 转换成其它的运算符。也可 以借助“提示输入”从运算符类型列表中选择所要的运算符。新运算符的输入端将被自动连接 到前面分支上。所有没有连接的输入端都标以“???”,可以将其删除或改变成所要的常量或变 量。 添加“赋值” 快捷菜单: 。插入一个赋值符号,将运算符的结果赋值输出。 根据当前选中位置的不同,插入的位置也有所不同。具体地说,赋值符号插入到输入(光 标位置 2)的前面,在输出(光标位置 4)的后面,在交叉线(光标位置 5)的前面,在节的 末尾(光标位置 6)的后面。 为了给一个已存在的赋值插入一个附加赋值,使用“输出”命令。 设置“跳转” 快捷菜单: 。设置一个跳转。如果条件为真,则跳转到指定位置。 根据选中的位置,插入到输入的前面(光标位置 2)、输出的后面(光标位置 4)、交叉 线的前面(光标位置 5)或节末尾(光标位置 6)的后面。 对于插入的跳转,可以被赋给它的标签代替。 插入“返回” 快捷菜单: 。插入一个返回。 在当前 POU 被其它 POU 调用,且返回条件为真时,返回到调用它的 POU。 根据选中的位置,插入到选中的输入的前面(光标位置 2)、选中的输出的后面(光标 位置 4)、选中的交叉线前面(光标位置 5)或“节”的末尾(光标位置 6)。 “反向”操作 快捷菜单: 。反向输入、输出、跳转或返回指令。 反向的图标是一个连接的小圆。如果光标选中输入(光标位置 2),那么输入被反向。 - 131 -
第142页
如果选中输出(光标位置 4),那么输出被反向。如果选中跳转或返回,那么跳转或返回的 输入端被反向。再次执行反向命令,则取消反向。 “置位/复位”操作 快捷菜单: 。定义输出为置位输出或复位输出。 置位输出显示为 S,复位输出显示为 R,如图 9-1-3 所示。如果输出 TRUE 值,则置位端 设为 TRUE 并一直保持此值。如果输出 FALSE,则复位端设为 FALSE 并一直保持此值。此 命令多次交替执行,输出在置位、复位和正常值之间交替。 图 9-1-3 置位与复位 FBD 语言的简单应用示例如图 9-1-4 所示。本程序可以产生“1s 断 2s 通”的脉冲信号。 图 9-1-4 FBD 语言示例 9.2 指令列表 IL 指令列表(IL)是一种汇编语言风格的编程语言,程序不易阅读,但执行速度最快。IL - 132 -
第143页
语言包含一系列的指令,每条指令占据一行,包含一个运算符和一个或多个用逗号隔开的操 作数。操作数之间用逗号分隔。每行开始可以有标签,标签后要有冒号。每行结束可以有注 释,注释用“(* *)”括起来。每行指令之间可以插入空行。IL 编辑器是一种文本编辑器, 具有常见 Windows 文本编辑器的功能,点击菜单栏或鼠标右键可以进行编辑。 9.2.1 操作说明 打开“插入”菜单,选择所要插入的内容,如图 9-2-1 所示。 图 9-2-1 “插入”菜单 “插入”/“操作符” 在编程区任何位置点击此命令,从弹出窗口中选择所需的操作符,例如“ABS”。 “插入”/“操作数” 在编程区任何位置点击此命令,从弹出窗口中选择所需的操作数,点击“确认”。 “插入”/“函数” 在编程区任何位置点击此命令,从弹出窗口中选择所需的函数,点击“确认”。 “插入”/“功能块” 在编程区任何位置点击此命令,从弹出窗口中选择所需的功能块,点击“确认”。 9.2.2 程序举例 举例 下面是一个用 IL 语言实现的简单运算程序。 声明: VAR A:REAL; B:REAL; C:REAL; END_VAR 程序: LD 10 (*将数字 10 赋予当前值*) ADD A (*当前值与变量 A 加运算后结果存入当前值*) GE B (*当前值与变量 B 进行大于等于比较*) JMPC Next1 (*上一表达式结果为真,则跳转至标志 Next1 处*) - 133 -
第144页
LD A (*将变量 A 的值赋予当前值*) ADD B (*当前值与变量 B 加运算后结果存入当前值*) ST C (*将当前值赋予变量 C*) JMP Next2 (*无条件跳转至标志 Next2 处*) Next1: (*标志*) LD A (*将变量 A 的值赋予当前值*) SUB B (*当前值与变量 B 减运算后结果存入当前值*) ST C (*将当前值赋予变量 C*) Next2: (*标志*) IL 语言支持两种修饰符 C 和 N。C 表示条件执行,只有当前一个表达式的值为真(TRUE) 时,指令才被执行。N 与 JMP、CAL 和 RET 连用时表示条件非执行,只有当前一个表达式 的值为假(FALSE)时,指令才被执行;其它情况下,表示操作数取负。表 5-4-1 列出了 IL 的所有运算符以及它们的修饰符和相应意义。 表9-2-1 IL语言运算符列表 运算符 修饰符 意义 将操作数赋予当前值 LD N 将当前值赋予操作数 如果当前结果是 TRUE,把布尔型操作数置为 TRUE ST N 如果当前结果是 TRUE,把布尔型操作数置为 FALSE 位逻辑运算符 AND S 位逻辑运算符 OR 位逻辑运算符 XOR R 加 减 AND N、( 乘 除 OR N、( >大于判断 >=大于等于判断 XOR N、( =等于判断 <>不等于判断 ADD ( <=小于等于判断 <小于判断 SUB ( 转移到标签 调用其它 POU MUL ( 退出 POU 并且返回到调用处 计算延迟操作 DIV ( GT ( GE ( EQ ( NE ( LE ( LT ( JMP C、N CAL C、N RET C、N ) 举例 以下是利用修饰符进行 IL 编程的例子: LD TRUE (*将 TRUE 赋予当前值*) - 134 -
第145页
ANDN BOOL1 (*BOOL1 变量取反后与当前值进行与运算*) JMPC mark (*如果结果是真,那么跳转到标签“mark”处*) LDN BOOL2 (*将 BOOL2 取反后赋予当前值*) ST ERG (*将当前值存入 ERG*) Mark: LD BOOL2 (*将 BOOL2 赋予当前值 *) ST ERG (*将当前值存入 ERG*) 如果在运算符之后插入括号,那么括号里的值可以看成是一个操作数。例如: LD 2 MUL 2 ADD 3 ST ERG 运行后 ERG 的值是 7。但是,如果加入一对圆括号: LD 2 MUL (2 ADD 3 ) ST ERG 运行后 ERG 的值是 10,MUL 运算符只有到“)”才执行,等同于执行 MUL 5。 举例 IL 语言简单应用示例如图 9-2-2 所示。本程序产生“1s 断 2s 通”的脉冲信号 图 9-2-2 IL 语言示例 - 135 -
第146页
9.3 结构化文本 ST 结构化文本(ST)可以执行选择语句(IF…THEN…ELSE)和循环语句(WHILE…DO), 类似于 PASCAL 和 BASIC 等高级语言。 9.3.1 ST 表达式 ST 语言中的表达式由运算符和操作数组成。操作数可以是常量、变量、函数调用或另一 个表达式。表达式的计算通过执行具有不同优先级的运算符完成。有最高优先级的运算符先 被执行,然后依次执行下一个优先级的运算符,直到所有的运算符被处理完。有相同优先级 的运算符按从左到右的顺序执行。ST 语言的运算符如表 9-3-1 所示。 表9-3-1 ST语言运算符 运算 符号 优先级 放入圆括号 (表达式) 最高优先级 函数名(参数列表) 函数调用 最弱优先级 求幂 EXPT 求负 - 求补 乘积 NOT 除 * 取模 / 加 减 MOD 比较 + 相等 - 不等 逻辑与 <、>、<=、>= = 逻辑异或 <> 逻辑或 AND XOR OR 9.3.2 ST 指令 例子 A:=B; CV := CV + 1; C:=SIN(X); ST 语言的指令如表 9-3-2 所示。 TP(IN:= %IX0.5, PT:=t#30); 表9-3-2 ST语言指令 A:=TP.Q; 指令类型 RETURN; 赋值 D:=B*B; 调用功能块并且赋初值 使用功能块输出 返回 IF - 136 -
第147页
CASE IF D<0.0 THEN C:=A; FOR循环 ELSE IF D=0.0 THEN WHILE循环 C:=B; REPEAT循环 ELSE C:=D; 退出程序 空指令 END_IF; CASE INT1 OF 1: BOOL1 := TRUE; 2: BOOL2 := TRUE; ELSE BOOL1 := FALSE; BOOL2 := FALSE; END_CASE; J:=101; FOR I:=1 TO 100 BY 2 DO IF ARR[ I] = 70 THEN J:=I; EXIT; END_IF; END_FOR; J:=1; WHILE J<= 100 AND ARR[ J] <> 70 DO J:=J+2; END_WHILE J:=-1; REPEAT J:=J+2; UNTIL J= 101 OR ARR[ J] = 70 END_REPEAT; EXIT; ; 赋值 执行赋值操作时,等号左边是操作数(变量或地址),右边是被赋予的表达式的值。例 如:Var1 := Var2 * 10; 调用功能块 通过写入功能块实例的名字,并且在随后的圆括号中赋给参数值来调用功能块。 举例 变量声明: TPInst:TP; VarBOOL1: BOOL; - 137 -
第148页
VarBOOL2: BOOL; 程序: TPInst(IN:= VarBOOL1,PT:= T#5s);(*参数 IN 和 PT 设定时钟脉冲的触发信号和高电平 的长度*) VarBOOL2:=TPInst.Q;(*输出脉冲值 Q 赋给变量 VarBOOL2*) 返回指令 返回指令可以根据条件退出 POU。 IF 指令 使用 IF 指令可以检查条件,根据条件执行相应的指令。 语法: IF <逻辑表达式> THEN <IF 指令> {ELSIF <逻辑表达式 1> THEN <ELSE IF 指令 1> ELSIF <逻辑表达式 n> THEN <ELSE IF 指令 n> ELSE <ELSE 指令>} END_IF; 其中{}的部分可选。 如果<逻辑表达式>返回 TRUE,那么只有<IF 指令>被执行,其它的指令不被执行。同样, 从<逻辑表达式 1>开始,相继执行逻辑表达式,直到其中一个表达式返回 TRUE 为止,返回 TRUE 的逻辑表达式对应的指令被执行。 如果没有逻辑表达式生成 TRUE,那么只有<ELSE 指令>被执行。 举例 IF temp<17 THEN heating_on := TRUE; ELSE heating_on := FALSE; END_IF; 这里,如果温度低于 17 度,打开加热器,反之则保持关闭状态。 CASE 指令 使用 CASE 指令,可以在结构中用一个相同的条件变量表示几个条件指令。 语法: CASE <Var1> OF <Value1>: <指令 1> <Value2>: <指令 2> <Value3, Value4, Value5>: <指令 3> <Value6 .. Value10>: <指令 4> ... <Value n>: <指令 n> ELSE <ELSE 指令> - 138 -
第149页
END_CASE; CASE 指令根据下面的模型来执行: 如果变量<Var1>有值<值 i>,那么<指令 i>被执行。 如果变量<Var1>没有任何指定的值,那么<ELSE 指令>被执行。 如果变量的几个值都需要执行相同的指令,那么可以把几个值相继写在一起,并且用逗号分 开。这样,就会有相同的执行指令。 如果对于变量的一个范围需要执行相同的指令,可以写入初值和终值,中间用两个点分开。 这样,条件就会有相同的执行。 举例 CASE INT1 OF 1, 5: BOOL1 := TRUE; BOOL3 := FALSE; 2: BOOL2 := FALSE; BOOL3 := TRUE; 10..20: BOOL1 := TRUE; BOOL3:= TRUE; ELSE BOOL1 := NOT BOOL1; BOOL2 := BOOL1 OR BOOL2; END_CASE; FOR 循环 使用 FOR 循环,可以编写循环过程。 语法: INT_Var :INT; FOR <INT_Var> := <INIT_VALUE> TO <END_VALUE> {BY <Step Size>} DO <Instructions> END_FOR; 其中{}的部分可选。 只要计数<INT_Var>不大于<END_VAULE>,指令就会被执行。指令执行之前,首先检查这 个条件,如果<INIT_VALUE>大于<END_VALUE>,指令就永远不会被执行。 当指令被执行时,<INT_Var>总是增加步长<Step Size>。步长可以是任意的整数值。如果不 写步长,缺省值是 1。当<INT_Var>大于<END_VALUE>时,循环结束。 举例 FOR Counter:=1 TO 5 BY 1 DO Var1:=Var1*2; END_FOR; Erg:=Var1; 假定 Var1 的缺省值是 1,那么循环结束后,Var1 的值为 32。 注意,<END_VALUE>一定不能等于计数变量<INT_VAR>的极限值。如果计数变量的类型是 SINT(范围从-128-127),<END_VALUE>是 127,则会进入死循环。 - 139 -
第150页
WHILE 循环 WHILE 循环用起来很象 FOR 循环,不同的是,结束条件可以是任意的逻辑表达式。指 定一个条件,当条件满足的时候,循环被执行。 语法: WHILE <逻辑表达式> <指令> END_WHILE; 只要<逻辑表达式>的值返回 TRUE,<指令>就会被重复执行。如果在第一次计算时,<逻辑 表达式>的值已经是 FALSE,那么指令永远不会被执行。如果<逻辑表达式>的值永远不会是 FALSE,那么<指令>被无休止的执行,产生一个相对时间延迟。 举例 WHILE counter<>0 DO Var1 := Var1*2; Counter := Counter-1; END_WHILE 在一定意义上,WHILE 和 REPEAT 循环比 FOR 循环功能更强大。因为不需要在执行循环之 前计算循环次数。因此,在有些情况下,用这两种循环就可以了。然而,如果清楚知道循环 次数,那么 FOR 循环更好。 REPEAT 循环 REPEAT 循环不同于 WHILE 循环,因为只有在指令执行以后才检查中断条件。无论结束条 件怎样,循环至少执行一次。 语法: REPEAT <指令> UNTIL <逻辑表达式> END_REPEAT; 直到<逻辑表达式>的值返回 TRUE,<指令>才停止执行。如果在第一次计算时,<逻辑表达 式>产生 TRUE,那么<指令>只被执行一次,如果<逻辑表达式>不会产生 TRUE,那么<指令> 将无休止的循环,导致相对时延。 举例 REPEAT Var1 := Var1*2; Counter := Counter-1; UNTIL Counter=0 END_REPEAT; EXIT 指令 如果 EXIT 指令出现在 FOR、WHILE、REPEAT 循环中,那么不管中断条件如何,EXIT 出 现时循环终止。 举例 - 140 -
百万用户使用云展网进行电子书册制作,只要您有文档,即可一键上传,自动生成链接和二维码(独立电子书),支持分享到微信和网站!
更多案例
百万用户使用云展网进行电子书册制作,只要您有文档,即可一键上传,自动生成链接和二维码(独立电子书),支持分享到微信和网站!
{e.stopPropagation()}">
x
{{toast}}