STEP7断点调试功能对PLC的探索与研究

来源 :科技创新导报 | 被引量 : 0次 | 上传用户:QQQ16416
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:PLC(程序逻辑控制器)采用循环扫描的方式执行用户程序,逻辑执行状态和数据运行结果监视,需借助断点功能或其他工具对PLC的存储器和寄存器等内部存储器进行查询。该文借助西门子编程软件STEP7断点功能,阐述如何在程序调试中设置断点,通过断点操作,逐步执行程序,观察程序运行时状态字和累加器的数值改变,既可监视程序的运行情况,又可查看程序数据块、背景数据块、堆栈指针等数值的变化,通过实际的逻辑结果监视和数据实时查询,对PLC的运行过程进行分析与探索,揭示PLC的工作原理。
  关键词:断点功能 PLC测试 循环处理 存储器 寄存器
  中图分类号:TP31 文献标识码:A 文章编号:1674-098X(2015)12(b)-0100-06
  随着科学技术的发展,以微处理器为基础的工业用PLC(程序逻辑控制器),已经广泛应用于各种机械设备及生产线过程的自动化控制系统中,它功能强大、使用方便,成为当代工业自动化领域的主要技术支柱之一。目前各厂商推出的PLC产品,基本结构相同,工作原理相似,随着国际标准化编程语言IEC61131-3的推出,编程方式也趋于统一,但不同品牌又各有特点,针对不同的应用领域,开发出专用的功能模块,对PLC性能进行优化;编程软件的辅助功能也在进行功能拓展,应用于特殊的编程、测试、仿真等。
  西门子公司编程软件STEP7中的断点调试功能,以其功能强大、操作简单、设置方便、界面友好等特点,成为最好的探索PLC工作原理的工具之一,通过断点调试功能结合PLC SIM仿真软件或在线监控PLC硬件运行,可以分解程序运行步骤,观察累加器和状态字寄存器、块寄存器、输入/输出变量、位存储器等内部核心器件的运行状态,了解PLC的工作过程。
  1 PLC的运行工作过程
  PLC的程序分为操作系统和用户程序,操作系统用来处理PLC的启动、刷新输入/输出过程映像区、调用用户程序、处理中断和错误、管理存储区和通讯等任务。PLC采用循环扫描方式执行由若干条指令组成的用户程序,指令在存贮器中顺序排列。从第一条指令开始,逐条顺序执行,直至扫描到最后一条,其间还会执行跳转指令和块调用指令,在执行指令时,从输入/输出过程映像区或其他存储区读入数据,按指令执行相应逻辑运算、算术运算,运算的结果写入指定的存储区域,因此与程序执行相关的执行器存储区的内容会随着程序的执行而变化,观察和跟踪这些核心器件内数据的变化过程,可以实现了解PLC的运行过程和工作原理的目的。
  2 STEP7断点测试功能
  STEP7的断点测试功能是在程序运行过程中产生断点,该功能的初衷是调试程序,在设备运行初期或出现故障时,通过断点操作,逐行在线扫描程序,同时观察寄存器里状态字的变化,累加器、存储器中数据的运算以及检测程序的运行结果,从而查找编程错误或故障点,最终解决问题。正是这样逐步观察程序运行的过程,为探索PLC的运行原理提供了技术手段。
  2.1 断点测试功能的内容
  在STEP7测试模式下,断点的限制数目可以通过选项设置,使用断点可以在用户程序的指定点停止程序处理。当PLC在程序中执行到断点时,CPU会切换到STOP模式。基于断点,可以逐步运行程序处理,检测每条语句执行的结果,并通过窗口显示PLC内部寄存器的内容、状态和数值,如图1所示。
  2.2 断点测试功能设置步骤
  此例使用西门子的S7 PLC SIM仿真器进行演示,使用真实PLC时,要尽量隔离I/O信号,如果必须在线调试程序,就要做好相关设备的防护措施,减少设备误动作造成的损害。注意:并非所有的PLC都可以使用断点测试功能,测试前要查阅相关可编程控制器的文档,确定PLC是否支持该功能。
  2.2.1 设置断点测试运行模式
  在西门子STEP7编程软件中打开需要调试的程序,在编程窗口使用调试/操作……菜单命令,就会打开操作窗口,如图2所示,可以在过程操作和测试操作之间选择需要的操作模式。
  两种模式是有区别的,过程操作模式下,测试功能程序状态被限定为要保证在扫描周期时间上处理的程序最少,这就意味着不允许任何子程序调用,也不能进行HOLD测试和单步执行程序。测试操作模式下,所有的测试功能都可用,且不受限制,PLC扫描周期时间会明显增加,这是因为,需要手动控制程序的进程,并且程序回路中的语句状态在每个周期都被记录。
  2.2.2 设置程序状态
  通过离线/在线伙伴命令按钮,可以切换PLC的离线/在线状态,只有PLC处于在线状态时,才能运行断点测试功能,此时,顶部状态栏会显示为浅蓝色,用来区分离线/在线状态,如图3所示。
  2.2.3 在程序中设置断点
  将PLC设置为在线状态后,使用视图>断点栏命令可以调出断点工具栏,按钮功能如图4所示。
  将光标移动到需要测试或观察的程序行前端,点击设置/删除断点按钮,即可在此处设置断点测试的起点,该程序行前端出现一个空心圆圈标记,如图5所示,再点击断点激活(开/关),断点变为实心圆圈标记,同时弹出图1所示的PLC寄存器内容窗口。
  此时要将PLC切换到RUN-P模式,然后点击下一个语句按钮,即可显示一个箭头,指向要运行的程序,随着按钮的点击,程序逐步开始执行,执行过程中的状态和运行数据都可以通过PLC寄存器内容窗口观察到,直至程序结束。注意:断点测试只能在STL视图模式下进行。建议不要调用整个程序进行调试,而是逐个调用功能块,应当从调用子程序体系最深的嵌套层开始。
  3 断点测试实例
  为了能够全面了解断点测试功能,在编写的测试程序中尽量涉及PLC的典型应用实例,包括逻辑判断、数据运算、子程序调用、数据块调用、背景数据块等,基本能够满足对PLC运行和工作原理的探索与研究。   3.1 编写测试程序
  3.1.1 测试程序的功能
  基于以上目的,编写一个按钮控制16盏灯的测试程序,当按钮按下2次后16盏灯全亮,当按钮按到第3次时16盏灯全灭,然后重新开始循环,具体过程如下。
  (1)在主程序OB1中满足M0.0=1条件后,调用子程序功能块FB1,背景数据块为DB3。
  (2)在子程序FB1功能块中点击按钮I0.0,点击次数记录在全局数据块DB1的DB1.DBW0中。
  (3)调用结束,回到主程序OB1。
  (4)如果DB1.DBW0>=1(记录到按钮按下次数为1或以上),将DB2.DBW0赋值为1。
  (5)DB1.DBW0和DB2.DBW0相加,计算结果送到MW100中。
  (6)如果MW100>=3(即按钮按下2次),PQW0控制下的16盏灯全亮。
  (7)如果MW100>=4(即按钮按下3次),PQW0控制下的16盏灯全灭,此时DB1.DBW0、DB2.DBW0、MW100复位为0,程序结束。
  3.1.2 程序控制逻辑
  程序逻辑如图6所示。
  满足M0.0=1条件后,程序跳转到功能FB1,完成按钮计数后,转回主程序,再对计数进行判断,满足条件灯亮,否则灯灭。
  3.1.3 编写程序
  首先编写子程序FB1功能块,在变量声明表中设置内部变量,“a”为布尔型数据,“zhongjian”为整数型数据。
  在FB1中编写程序如下:
  程序段1
  A I 0.0
  FP #a
  CU C 1
  BLD 101
  A M 0.3
  L C#1
  S C 1
  A M 0.4
  R C 1
  L C 1
  T #zhongjian
  NOP 0
  NOP 0
  程序段2
  L #zhongjian
  T DB1.DBW 0
  NOP 0
  在OB1中编写主程序,在程序段1中有条件调用功能块FB1,会提示自动生成背景数据块,这里指定的背景数据块为DB3。
  程序段1
  A M 0.0
  JNB _001
  CALL FB 1 , DB3
  a :=M0.1
  zhongjian:=DB1.DBW2
  _001: NOP 0
  程序段2
  A(
  L DB1.DBW 0
  L 1
  >=I
  )
  JNB _002
  L 1
  T DB2.DBW 0
  _002: NOP 0
  程序段3
  L DB1.DBW 0
  L DB2.DBW 0
  +I
  T MW 100
  NOP 0
  程序段4
  L MW 100
  L 4
  >=I
  = M 0.4
  程序段5
  A M 0.4
  = L 20.0
  A L 20.0
  JNB _003
  L 0
  T MW 100
  _003: NOP 0
  A L 20.0
  JNB _004
  L 0
  T DB1.DBW 2
  _004: NOP 0
  A L 20.0
  JNB _005
  L 0
  T DB2.DBW 0
  _005: NOP 0
  程序段6
  L MW 100
  L 3
  >=I
  JN noze
  L DW#16#FFFF
  T PQW 0
  JU next
  noze: L 0
  T PQW 0
  next: NOP 0
  3.2 测试程序下载和运行
  保存编写完成的程序,STEP7会对编写的程序进行检测,如果发现问题会给出错误提示,帮助编程人员修改程序,然后下载到PLC的装载存储器中,工作时,由CPU调度指挥,将程序和系统存储器中的数据放在工作存储器中运行,再将结果送回各个系统存储器,具体功能如下。
  3.2.1 装载存储器
  编写的程序和系统数据(组态、连接和模块参数)被下载到CPU的装载存储器内。程序运行时,CPU把程序中的可执行部分复制到工作存储器内。随PLC的型号不同,装载存储器可能是RAM和FEPROM等。
  3.2.2 工作存储器
  集成高速存取的RAM存储器,用于存储CPU运行时的用户程序和数据。在CPU断电或复位操作时,RAM中的程序会被清除。
  3.2.3 系统存储器
  系统存储器是CPU为用户程序提供的存储器组件,被划分为若干个地址区域,用于存放用户程序的操作数据,如过程映像输入/输出、位存储器、定时器、计数器、数据块与背景数据块、块堆栈、中断堆栈和诊断缓冲区等,该区域还提供临时存储器,可以存放程序块的临时数据,当用户生成块时,可以声明临时变量,该区域只在执行该块时有效,执行完后被覆盖,该例在FB1功能块中声明的布尔量“a”和整数“zhongjian”即为临时变量。   如图7所示:扫描循环开始时,CPU读取过程映像输入/输出区域里的I0.0(按钮)的输入信号,在计数器存取区域记录FB1功能块中点击按钮的次数,并存储在临时存储器里,背景数据块DB3与之相关联,然后送到共享数据块DB1中的DB1.DBW0,同时使共享数据块DB2中的DB2.DBW0等于1,DB1.DBW0与DB2.DBW0相加,结果送到位存储器MW100中,通过对MW100的判断,如果大于等于3,将FF赋值给过程映像输入/输出区域PQW0,控制16盏灯全部亮起,如果大于等于4,则将0赋值给PQW0,灯全部灭。
  4 断点测试过程
  CPU中的状态字寄存器和累加器寄存器担负着PLC的程序控制和数值运行,通过断点测试可以观察到状态字的状态变化与控制程序运行的对应关系,以及累加器寄存器中数值的计算过程。
  4.1 运行测试程序
  在OB1的程序段1中设置断点,在线开始测试,该行程序是一个条件调用,当M0.0=0时,程序向下进行,当M0.0=1时,调用FB1功能块。
  当M0.0=0时,状态字寄存器的/FC=0,表示一行程序的开始,STA=1,与命令A相对应,随着程序执行到第二行,/FC=1,表示程序正在执行中,继续执行时,由于没有满足调用条件,程序没有执行调用FB1功能块,而是直接跳过,进入下一段程序。
  当M0.0=1时,程序执行到第二行,状态字寄存器/FC=1、STA=1、ROL=1,状态为存储的是寻址位的状态,逻辑位为1,表示能流可以到达该运算处(满足条件),可以跳转,两种条件下状态字寄存器对比如图8所示。
  程序执行到第三行时,状态字寄存器/FC=1、STA=1、ROL=1,表示程序重新开始,因此,一行程序的开始并不是以段落和行来划分的,而是由状态字根据程序执行的状态,结合状态位、逻辑位的结果来决定的。此时要点击“执行调用”按钮,程序执行调用,自动在编程窗口打开FB1程序块,箭头指示到程序段1的第一行,此时在PLC寄存器内容中可以看到,背景数据块为DB3。
  在FB1中,当I0.0=0时,/FC=1、STA=0、BR=1、ROL=0,程序执行到此处时,逻辑结果为0;当I0.0=1时, /FC=1、STA=1、BR=1、ROL=1,说明程序执行到该行时,对I0.0的信号做出状态和逻辑判断,逻辑结果为1,在随后执行的程序中计数器值为1,记录到按钮的点击次数,其余程序与此类同,不再分析。
  4.2 状态字寄存器
  通过上面的实例,可以看出状态字是一个16位的寄存器(高7位未用),用于存储CPU执行指令的状态。状态字中的某些位用于决定指令是否执行和以什么样的方式执行,此时,状态字中的变化为了解程序的运行提供了参考,指示程序运行的情况,而且,位逻辑指令和字逻辑指令还可以访问和检测状态字,将状态位信号直接集成到程序中,控制程序执行的流程。
  状态字的每个位都与程序运行相关,如图9所示。
  4.2.1 /FC:首位检测位
  第0位称为首次检测位,FC前面的斜杠表示对FC取反,用于判断一个逻辑串(一系列的逻辑运算指令)的起止。 /FC为0,表明一个新逻辑串的开始,逻辑串指令执行过程中/FC为1,逻辑串指令结束时,/FC位清零。
  4.2.2 RLO:逻辑运算结果位
  第1位为RLO,位称为逻辑运算结果(Result of Logic Operation)。该位用来存储执行位逻辑指令或比较指令的结果。RLO的状态为1,表示有能流流过运算点处;为0则表示无能流流过该点。可以用RLO触发跳转指令。
  4.2.3 STAT:状态位
  第2位为状态位,用以保存被寻址位的值。状态位不能用指令检测,它只是在程序测试中被CPU解释并使用。如果一条指令是对存储区操作的位逻辑指令,则无论是对该位的读或写操作,STA总是与该位的值取得一致;对不访问存储区的位逻辑指令来说,STA位没有意义,此时它总被置为1。
  4.2.4 BR:二进制结果位
  第8位为二进制结果位,它将字处理程序与位处理联系起来,在一段既有位操作又有字操作的程序中,用于表示字逻辑是否正确。如果字逻辑指令或者功能、功能块出现错误,把BR置为0,能流中断,下条指令不被执行。字逻辑指令或者功能、功能块被正确执行后,使BR位为1,能流就可以传递到下条指令。
  其余的OR、OV、OS、CC0、CC1位也与指令的逻辑操作和字运算等相关联,都可以通过逻辑位来访问,作为状态位常开/常闭触点用于编程。
  4.3 程序运算测试
  在FB1功能块将记录的按钮动作次数送入DB1.DBW 0中(为了更清楚地分析数据,假设这里已经记录了两次,即DB1.DBW 0=2),并返回OB1,运行到到程序段3 L DB1.DBW 0时,先将DB1.DBW 0中的数值2内容装入ACCU1(全局数据块为DB1),再执行L DB2.DBW 0,将数值1装入ACCU1(全局数据块为DB2),ACCU1原来的2移动到ACCU2中,执行整数相加命令后,结果送入ACCU1,此时ACCU1=3,ACCU执行前后对比如图10所示。
  4.4 CPU的累加器
  从上面的测试可以看出,累加器是CPU中的专用寄存器。S7_300有两个累加器,S7_400有4个累加器,数据的传送与变换一般通过累加器进行,而不是在存储区进行,还可以把操作数送入累加器,在累加器中进行运算和处理,处理后的运算结果保存在累加器1中,并可传送到存储区。数据运行原理如图11所示。
  5 结语
  通过西门子STEP7断点功能测试,为观察PLC程序运行找到了一种技术途径。编辑完成的程序下载到装载存储器,再将程序和系统存储器中的数据调入工作存储器中运行,由CPU状态寄存器里的控制字控制执行程序,由累加器完成数据运算和数据传递,使人们对PLC的工作原理有了更深入的了解。
  参考文献
  [1]廖常初.S7-300/400PLC应用技术[M].北京:机械工业出版社,2008.
  [2]王安兵.什么是状态字?状态字的作用[J/OL].百度文库:http://wenku.baidu.com/link?url=F-IF3lCjaiR80vvTiuLIaJgUvs0YepwAJls-a8ZqvID1Hub0m1g9MuAgDcFvUEXaV9imLPyjNIi-E4-oh1PfWNMy9dsdQPnE0Ycr28JTpkS.
  [3]刘玉蓉.西门子状态字九个位的含义[J/OL].技成文章:http://www.diangon.com/wenku/PLC/ximenzi/201308/00004968.html.
其他文献
全国八届人大五次会议的召开,给西南人民带来了新的希望。其中位于重庆东部的万县市,更是力争抢抓机遇、奋力拼搏,在新的时期获得新的发展。万县市地处三峡工程库区腹心,是重
农村公路沥青路面的质量和使用寿命很大程度上与日常养护有关,通过及时的良好的日常养护可以有效地减缓路面损坏状况的发展.延长路面的寿命,降低全寿命周期成本。路面日常养护和
The electronic waste (e-waste) is increasingly flooding Asia,especially China.E-waste could precipitate a growing volume of toxic input to the local environment
期刊
历史是过去、现在和未来连接的纽带,是不容否定的客观存在。历史虚无主义假借"解读""反思"历史的口号,抹黑革命领袖及英雄人物、颂扬反面人物,戏说红色经典、鼓吹西方普世价
广元史称利州,是川北地区的交通枢纽及毗邻地区物资集散地和贸易中心。1985年建市以来,广元持续、健康、稳定的发展,已为广元今后的加快发展奠定了雄厚的物资基础。为创造广
目前我国运力结构和运输能力均有了明显改善和提高,全国营业性客货运输车辆已达400多万辆,保持了较好的上升势头。这一形势也对如何加强和改善行业管理、积极培育和发展道路
近十年,世界旅游市场正在发生变化。亚洲市场已从以接待为主转向接待与输出并举,洲内游客比重迅速加大,已占据主导地位。其中最突出的特点是东亚太地区旅游业的迅速崛起,预计
期刊
据香港消息,一名年仅15岁的外籍电脑神童成功地避开保安的耳目,混入香港科技大学的学生电脑中心,入侵科大的电脑系统并删除了部份纪录而被捕。该顽童15岁,澳大利亚籍,抵港仅
期刊
在发育营养正常促进剂水身体 andcould 过分地宣传的浮游动物的 Cyclops 没被象氯化 dueto 一样的常规消毒过程有效地使失去活性它的更强壮的抵抗到 oxidation.In 这研究,一个
装的水不能更安全,或更健康,混合物比龙头 water.The presentstudies 证明那苯乙烯和某其它芳香连续地沥滤在与 PS 的接触为 packaging.Water sapmles 局部地使用的 frompoly