打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
跟着我一起来学习s7-200
【跟着我一起来学习s7-200】01如何学习
首先得明确自己想要学什么品牌的PLC,三菱的,西门子的,还是欧姆龙的,下面我就假如选择了西门子这个品牌为例,再具体明确到学习s7-200,s7-300,还是s7-1200等PLC,再假如我选择的是西门子s7-200的PLC,明确了方向之后就是对一些基础知识的掌握。
所说的基础就是了解s7-200PLC的型号及其区别,系统构成,CPU的硬件结构,而且对其扩展模块也应先有个了解,还有CPU的参数和模块的参数也是应该了解的。再到对s7-200系统的选型,以及系统与模块的安装接线,包括数字量、模拟量的接线等。
等到对这些基础有了一定的了解之后,就是对软件的操作和使用的学习了,对于STEP 7 Micro/WIN 这个软件,首先也要熟悉软件界面,常用工具图标,常用菜单工具,还要熟悉符号表、状态表、数据块、系统块的使用,还有对电脑编程接口的设置以及通讯,程序上传下载的常用操作。
除以上列举之外,还需要知道PLC的工作过程以及程序的结构,掌握数制的转换。在这之后就到掌握存储器以及寻址这方面的知识了,这部分的内容很重要,因为之后的应用基本指令等进行编程时就要经常用到这些内容。当你掌握了存储器和寻址,那么就可以开始学习一下基本指令了,常用的位逻辑指令、传送指令、定时器、计数器、比较指令、整数计算、移位/循环指令等都是需要掌握一下的。对这些基本指令需要平常多练习,并且能够熟练地运用,这才是真的掌握了。
这就是前面所说的基础知识,只有掌握了这些基础之后,你才能更好的学习之后的模拟量处理PID、通讯、高速脉冲输出、配方等。
学习都是循序渐进,一步一步学习的,所以,莫浮躁。
在接下来的日子里,就从基础到应用循序渐进地为大家讲一下s7-200的学习吧。想要学习s7-200的朋友,可以跟着我一起来学习。
【跟着我一起来学习s7-200】02 CPU参数与结构
我们要知道,西门子S7-200 系列PLC是一款小型PLC,它主要有CPU221,CPU222,CPU224,CPU224XP,CPU226等几种型号。而对于每个型号,又有分直流和交流这两种电源供电的CPU类型。也就是说有分“DC/DC/DC”和“AC/DC/DELAY”两种。“DC/DC/DC”表示的是CPU是直流24V供电/数字量输入是直流24V/数字量输出是晶体管直流24V类型的;“AC/DC/DELAY”表示的是CPU是交流220V供电/数字量输入是是直流24V/数字量输出是继电器类型的。这都是首先要知道的东西。
对不同型号的CPU有不同的规格参数,这个参数我们也是需要了解学习的。
要知道不同型号其本机I/O的数量,包括数字量和模拟量的;要知道不同型号其程序存储区和数据存储区的参数要求;还要注意各型号CPU对扩展模块数量的要求,像CPU221是不能扩展模块的,CPU222只能扩展2个模块,而CPU224/CPU224XP/CPU226则最多可以扩展7个模块。
然后是对CPU结构的了解,s7-200系列 PLC它是将CPU、I/O点、存储区和集成电源集成在一个机壳内的,其构造和外形就是下图所看到的样子。
我们可以看到CPU包括了RS485通讯口、可选卡插槽、CPU状态LED灯、数字量输入输出端子、I/O点状态LED灯、CPU电源端子、24VDC传感器输出端子、拨码开关、电位计和扩展模块接口等,如果是CPU224XP的话,还会有模拟量输入输出端子。对CPU结构,我们不仅要知道构造的名称和位置,还要了解各部分的功能。像知道通讯口的功能就是用来通讯,扩展模块接口就是用于连接下一个扩展模块,拨码开关就是用来切换运行或停止状态等等。
【跟着我一起来学习s7-200】03扩展模块
在学习到s7-200 PLC 的CPU结构的时候知道了CPU是有扩展模块接口的,这就提供了扩展模块的功能,而且扩展模块也是非常方便的,只要把扩展模块的接头接到前一个模块的接口就可以了。
S7-200的扩展模块主要有以下几类:数字量模块、模拟量模块、通讯模块、运动控制模块。数字量模块又分为数字量输入模块EM221,数字量输出模块EM222和数字量输入输出模块EM223;模拟量模块有模拟量输入模块EM231(包含了热电阻模块和热电偶模块),模拟量输出模块EM232和模拟量输入输出模块EM235;通讯模块有PROFIBUS从站模块EM277,MODEM模块EM241,工业以太网模块CP243-1和AS-i主站模块CP243-2;还有运动控制模块EM253等。
看到这么多模块,可能会觉得有点害怕,好像很多东西不懂要学习的,但是刚开始就对这些模块先有个大概的了解,刚学习基础的时候用到这些的地方会比较少,等到之后学到有一定基础了,学到通讯、模拟量和运动控制等的时候再来详细学习这些扩展模块的内容。
除此之外,在学习s7-200 PLC 的CPU结构的时候也知道CPU是有一个扩展卡插槽的,这个扩展卡插槽跟前面的扩展模块接口又有什么区别呢?扩展模块还提供有存储卡模块、电池卡模块、时钟电池卡模块,那么这个扩展卡插槽就可以根据自身要求选择插入这几个模块。
而对于CPU的RS485串行通信接口,这个接口是PLC实现人机对话的通道,可以实现CPU与上位计算机的连接,实现PLC与PLC、变频器等外部设备的连接。而S7-200常用的编程设备是RS232/PPI电缆或者USB/PPI电缆,不过更通用的是USB/PPI电缆,因为基本所有电脑都配有了USB接口,要用RS232/PPI电缆的话,只能在电脑具备有RS232串口才能够使用,这也是需要注意的。
【跟着我一起来学习s7-200】04通讯与网络
在对s7-200 PLC的型号,系统构成,CPU的硬件结构,扩展模块有了一定的了解之后,然后是到s7-200的通讯与网络部分。S7-200支持PPI,自由口,AS-i,Profibus,MPI,以太网等协议。
在s7-200系统中,PPI,MPI,Profibus-DP协议都可以在RS-485网络上通信,RS-485是s7-200最常用的通信基础,这些是我们需要了解与学习的。还有,对各种协议的主要特点以及主要应用在什么地方等等也是要知道的,关于这部分的具体介绍,梁老师的《s7-200从入门到精通》的第4课时到第7课时有较为详细的介绍,下面就大概强调一下一些总结性的东西吧。
在应用方面,多个s7-200 PLC通讯选用PPI,也可以用自由口通讯(但不推荐),也可选用以太网(但需要选用CP243-1模块);s7-200要与第三方设备通讯,要使用自由口;s7-200与s7-300/400通讯,对于简单的数据量不大的情况,可以选MPI网络,对于要求高数据量大的情况,选Profibus网络,也可以选以太网;s7-200与触摸屏通讯,一般用MPI或PPI网络。
关于这部分的内容,在对基础的学习时对这些先有个了解也就差不多了,等到时学到做通讯应用的时候再来详细地学习。
然后就到s7-200 CPU及模块参数的学习,这些参数对于我们选型的时候是很重要的。在前面也有发过CPU参数图,除了前面说到的,还有一个要注意的是CPU的供电能力。各型号CPU的供电能力不一样,CPU每扩展一个模块,扩展模块就要消耗一些CPU的供电,所以要注意扩展模块的时候不能超过CPU的供电能力。另外,CPU的电源有两种,一种是5VDC,另一种是24VDC,我们在计算时主要考虑CPU的5VDC电流供应能力就可以了。至于CPU和各个模块的详细参数可以参看一下手册。
那么,关于通讯与网络,CPU及模块参数主要就是这些了。
【跟着我一起来学习s7-200】05系统选型
S7-200系统对于PLC的选型也是很重要的,我们在选型的时候,一般需要考虑几个因素,一个是控制系统的I/O数量和类型,还有通讯、环境、功能等要求,还有系统的复杂程度也是需要考虑的。CPU所能带的I/O数量是由CPU的输入输出过程映像区大小、集成I/O数量、CPU能带的扩展模块数量、5VDC电源带载能力以及CPU所带智能模块对I/O地址的占用这几个因素所决定的。另外对于I/O点的类型,根据其不同类型也有其注意事项,对环境、功能要求等也有些需要注意的地方,具体的注意事项可以参看梁老师的《s7-200从入门到精通》的第11、12课时的内容,里面有详细的讲解到,我在这里就不赘述了。
在课程视频里,梁老师还有举一个选型的例子,例子是这样子的,一个系统需要三台PLC控制。每台36DI(24VDC),25DO(晶体管),8AI(4-20mA电流),2AO(4-20mA电流),控制3个伺服电机(100KHz),连接2台RS485接口的仪表,连接一台触摸屏。三台PLC之间需交换数据(距离20米)。具体选型如何考虑,应该怎么样去选,梁老师都有给出一个较为详细的方法,有空的话可以去看一下这个例子,这样你会对选型有一个更加明确的理解。
【跟着我一起来学习s7-200】06硬件接线
正确的安装接线,对系统正常工作是至关重要的,这也是我们务必要掌握的东西。
那么就先看一下一些总结性的东西,首先CPU是分有DC/DC/DC型和AC/DC/继电器型的,DC/DC/DC型的CPU接24V直流电源,AC/DC/继电器型的CPU接交流电源。再说下来,还有数字量信号的接线、模拟量信号的接线。
对于数字量信号的接线,又有分数字量输入的接线和数字量输出的接线。数字量输入的接线既有直流输入接法,也有交流输入接法。而对于直流数字量输入,既可以是源型接法,也可以是漏型接法。在这里我们需要注意的是西门子源型漏型的说法跟日系PLC是相反的,这个不能搞混了。对于数字量输出分有晶体管输出、继电器输出和可控硅输出,不过可控硅输出的用的比较少,主要知道晶体管输出和继电器输出的就可以了。继电器输出的可以接成直流或交流,而晶体管输出的接成源型,这是我们需要注意的。
对于模拟量信号的接线,在这里就说一下CPU224XP的模拟量信号接线,因为CPU224XP它是集成了2路模拟量输入和1路模拟量输出的,需要注意其中模拟量输入只支持电压信号,模拟量输出可支持电压或电流。另外,模拟量输入接线还需要注意各种线制的不同接法。
以上几部分的接线方法是首先需要掌握的,除此之外,还有对热电阻模块、热电偶模块的接线和网络接线等,至于这部分的内容在这里就不强调了,在梁老师的《s7-200从入门到精通》的第13、14、15课时《安装接线规范》有详细讲解。
下面就附上重点要掌握的接线图。
下面也具体解释一下前面说的源型输入,漏型输入,源型输出,漏型输出等。所说的源型输入接法,即是电流从PLC公共端流入,从输入端流出,即PLC公共端接外接DC电源的正极,是共阳极电路。所说的漏型输入接法,即是电流从PLC的输入端流进,从公共端流出,即公共端外接电源的负极,是共阴极电路。PLC的输出,分为源型输出和漏型输出,如果是源型输出,输出部分的L+端要接电源正极;如果是漏型输出,输出部分的COM端要接电源负极。有一个我们需要注意的是,在s7-200 中除了CPU224XPSI是漏型输出的,其他都是源型输出的。
【跟着我一起来学习s7-200】07熟悉软件
在这之前我们已经学习了s7-200的型号,系统构成,CPU的硬件结构,扩展模块,通讯与网络,CPU及模块参数,系统选型以及安装接线等基础性东西了。在这之后就是对STEP 7 Micro/WIN 这个软件的操作和使用的学习了。在最前面的时候有说到对于这个软件,我们要熟悉软件界面,常用工具图标,常用菜单工具,还要熟悉符号表、状态表、数据块、系统块的使用,还有对电脑编程接口的设置以及通讯,程序上传下载的常用操作等。
对于STEP 7 Micro/WIN,刚安装好时默认是英文界面的,有很多学员会问应该怎么改成中文界面。其实修改方法很简单,选择菜单栏的“Tools – Options – General – Chinese”,再点击确定就可以了。如下图所示。
下面就先熟悉一下软件的界面以及常用工具图标吧。下图就是软件的界面,包括有菜单与工具栏、查看工具栏、指令列表、程序编辑区、程序接口区和信息窗口。
然后再看一下菜单与工具栏,以下是一些常用的工具图标,这是我们刚接触软件时需要认识一下的。
下面也按顺序说明一下图标的功能。
第一个图依次是编译,全部编译,上传,下载。编译就是检查程序的错误,而全部编译是检查程序块数据块和系统块的错误,这几个图标在程序的上传下载时需要用到。
第二个图依次是运行,停止,程序状态监控,暂停程序状态监控,状态表监控,趋势图,暂停趋势图,单次读取,全部写入,强制,取消强制,取消全部强制,读取全部强制。这些图标在我们监控程序的时候会用到。
第三个图依次是插入网络,删除网络,切换POU注释,切换网络注释,切换符号信息表,切换书签,下一个书签,上一个书签,清除全部书签。而这些图标是为了我们可以更方便地查看程序更好地进行调试,有时也不一定非要用到。
第四个图依次是向下连线,向上连线,向左连线,向右连线,触点,线圈,指令盒。这些图标是我们在编写程序的时间经常要用到的,当然你也可以用快捷键,触点的快捷键是F4,线圈的快捷键是F6,指令盒的快捷键是F9,连线的快捷键是Ctrl+键盘的上下左右键。
这就是对软件界面和一些常用工具图标的认识,比较简单,学习起来这应该不是什么难事吧。
【跟着我一起来学习s7-200】08常用菜单工具
在菜单的“文件-设置密码”,这里可以为项目文件设置密码。
在菜单的“查看-属性-保护”,这里可以用密码保护POU。
除此之外,在系统块的“密码”也可以设置权限。到这里就一共有三处可以设密了。对这个可以了解一下。
在菜单的“文件-导入/导出”,这里主要是用于仿真。比如可以导出程序块,保存为awl文件,再将此awl文件用于仿真软件上。虽然西门子官方没有提供仿真软件,但是还是有流传一些仿真软件的。对于现阶段手上没有设备又想要学习一下的朋友可以找到我发的帖子《西门子s7-200仿真软件下载》和《强大的s7-200模拟器(支持通信/模拟量)》进行下载使用。
在菜单的“文件-新建库/添加/删除库”,如其名称所言,可以新建库,添加或删除库。对于库的操作,就留在后面再来学习。
在菜单的“查看”可以看到有STL,梯形图和FBD,在这里可以进行编程语言的切换。比如在使用s7-200仿真软件的时候,仿真软件可能要求要切换到STL,再粘贴到仿真软件里面,这就需要进行编程语言的切换了。
另外,在菜单的“查看”中有符号寻址和符号信息表。符号寻址选中与否可以用来切换是符号寻址还是绝对地址寻址,选中了的话,在程序每个地址旁边会出现其符号名。选中了符号信息表的话,在程序下方会出现符号信息表。
在菜单的“PLC-信息”中,我们可以从中获得PLC版本信息、扫描周期。出错信息、模块信息等。不过必须注意的是只有在电脑跟PLC通讯成功之后才能打开PLC信息的。
在菜单的“PLC-实时时钟”,可以为带实时时钟的CPU设置时间等信息,可以读取PC或者是读取PLC。
另外,在菜单的“PLC-比较”中,可以将项目与PLC进行比较,比较的结果会提示出来,比较一致的会出现已通过,比较不一致的会出现红色字符提示信息。
以上就是一些可能会要用到的菜单工具,是我们需要学习一下的。
【跟着我一起来学习s7-200】09查看工具栏的使用
前面我们已经熟悉了STEP 7 Micro/WIN 这个软件的软件界面,常用工具图标,常用菜单工具,然后就是学习查看工具栏里面的程序块、符号表、状态表、数据块、系统块、交叉引用、通信和设置PG/PC接口的使用,以及程序上传下载的常用操作等了。
首先是程序块。选择程序块后会出现程序编辑区,在这里默认是有一个主程序,一个子程序和一个中断程序的。在程序编辑区点击右键-插入,可以插入子程序或者中断程序,当然,对着指令列表的程序块点击右键-插入,同样可以插入子程序或者中断程序。
在程序编辑区的上方是程序接口区,这里我们要知道主程序和中断程序的变量类型只有临时变量TEMP,它们只能定义临时变量,而子程序的变量类型有四种,分别为输入IN,输出OUT,输入输出IN_OUT,临时变量TEMP。
另外,在指令列表是有指令集的,编辑程序时可以从直接指令集里拖拽出来,当然你也可以使用快捷键。
然后是符号表。在符号表里,我们可以为每个地址赋予一个符号名和注释,这就可以为我们阅读程序带来很大的方便,所以也是需要了解的。在使用符号表的时候要注意一下命名规则,比如首字不能出现数字,不能出现特殊符号等,这些都是需要注意的。
还有是状态表。通过状态表,我们可以监控或者修改CPU的变量。我们只需要在地址处输入需要监控的变量地址,另外,在格式栏中我们还可以选择所监控变量的格式,然后点击工具栏的“状态表监控”,就可以获得当前值了。另外,点击工具栏的“趋势图”,还可以看到变量的变化趋势。
如果我们想要修改变量的值的话,可以在新值这栏输入数值,然后点击工具栏的“全部写入”就可以修改数值了。还有一个需要注意的是,对于数字量输入和模拟量输入,要修改数值的话,是写入不了的,这时候只能强制,点击工具栏的“强制”就可以了,要取消强制的时候就点击“取消强制”。
对于状态表,我们在对程序进行监控的时候是经常会要用到的,这也是需要我们学习的东西。
还有是数据块。在数据块,我们常用来为变量定义初值。因为数据块内的数据下载到CPU中是存放在ROM存储区的,掉电不会丢失。我们在定义初值的时候可以按Ctrl+Enter键换行,它会自动列出下一个变量地址。
【跟着我一起来学习s7-200】10程序上传下载
我们的计算机要与PLC进行连接通讯,首先要做的是设置PG/PC接口。因为我们一般使用的都是PC/PPI编程电缆,所以在设置PG/PC接口时选择“PC/PPI cable(PPI)”,然后点击属性。
然后在属性的PPI中选择传输率,一般是选9.6kbps就可以了,并在本地连接选择连接到USB或COM。
置好PG/PC接口之后,点击查看工具栏的通信,出现通信窗口。点击“双击刷新”之后会自动寻找CPU,找到之后会出现CPU的信息,此时再点一下这个出现的CPU,在地址的远程会自动跳到相应的地址。假如没有操作这步,而远程地址又不是对应的地址,是会出现通信不了的情况的。
通信成功之后,就可以进行程序的上传下载操作了。以下载程序为例,当程序编好之后,点击编译或全部编译,再点击下载就可以了。
刚才在下载程序之前,我们操作了一步“编译”,当编译通过之后,我们就可以打开查看工具栏的交叉引用来查看某个地址在哪里,用的是什么指令等信息。除此之外,还能看到字节使用以及位使用情况。
【跟着我一起来学习s7-200】11系统块的使用
在前几天我们已经学习了程序块、符号表、状态表、数据块的使用,交叉引用、通信和设置PG/PC接口的使用,以及程序上传下载的常用操作等了,还剩下系统块的内容没有学习,那么今天就来学习一下系统块吧。
打开查看工具栏的系统块,我们可以看到有通信端口、断电数据保持、密码、输出表、输入滤波器、脉冲捕捉位、背景时间、EM配置、LED配置、增加存储区,我们看到LED配置、增加存储区旁边有个小叉叉,说明该CPU不支持这两个功能,暂且可以不用理会它。这里我们需要注意的是在系统块设置了参数之后,是需要把系统块下载到CPU才会生效的。
在“通信端口”,我们可以对PLC地址以及波特率等进行设置,注意波特率要与通讯双方设置成一致的。在这里对PLC地址端口等进行了设置之后,下载系统块到CPU。
此时再打开通信,如果远程地址没有更改的话,再点击确认进行通信连接是连接不上的。这样只有点击刷新重新搜索,搜索到之后再点击一下CPU信息,此时远程地址会自动改成设置好的地址。
在“断电数据保持”中,我们可以自己去定义断电数据保持的存储区范围,这里我们要注意的是在s7-200中,MB0-MB13默认是断电不保持的,如果将其设为断电保持的,那么断电后会自动被保存在ROM存储区中。
在“密码”中,我们可以设密。CPU一共有四级密码,每级密码的权限不用相同,我们要注意慎用第4级禁止上载密码,因为设置了该级密码即使有正确的密码也不能上载程序。这样的话就只能点击“PLC-清除”来恢复到默认设置了。
在“输出表”中,在这里可以设置CPU从运行切换到停止状态时数字量输出和模拟量输出的结果。如果将“将输出冻结在最后的状态”处打钩,下面将会变成灰色的。
在“输入滤波”中,可以设置数字量和模拟量输入滤波延时。有个要注意的是CPU224XP是集成了2路模拟量输入的,因此不需要设置输入滤波延时。
在“脉冲捕捉位”中,可以为CPU集成的数字量输入使能脉冲捕捉功能。该功能在对于一些输入信号持续时间很短的情况下会用到。
在“EM配置”中可以显示项目中的智能模块,我们可以在这里查看项目的智能模块分配情况。
至于后面的背景时间、LED配置、增加存储区,一般来说也比较少会用到,所以只要知道一下就行了。关于STEP 7 Micro/WIN软件的使用大概就是这些了,在这里只强调了一下重点并作了些补充,如果学习了还有不明白的地方,可以看一下梁老师的《s7-200从入门到精通》的第16到第20课时,里面有更为详细的讲解。
到现在为止,已经学习了s7-200系统的基础以及软件的使用了,下一步就将是学习PLC工作原理、存储器、寻址以及常用的基本指令了,你准备好了吗?
【跟着我一起来学习s7-200】12工作原理
在前面我们已经学习了s7-200系统的基础以及软件的使用了,现在就是开始学习PLC工作原理、存储器、寻址以及常用的基本指令等了。
首先我们得了解PLC的工作过程,CPU它的工作方式是循环扫描的,是周而复始地执行一系列任务的。当CPU处于RUN模式时,CPU将按顺序执行以下任务:读输入,执行逻辑控制程序,处理通信请求,执行CPU自诊断,写输出。任务循环执行一次则称为一个扫描周期,下图可以很直观的看出CPU执行任务过程。
我们要知道CPU的工作过程是分为五步的:首次扫描—开始循环监视时间—更新输入过程映像区—执行用户程序—更新输出过程映像区。我们会注意到CPU到输入输出寻址时是不是直接访问的,而是访问包含了I/O过程映像的存储区。
那么什么是过程映像区,这个概念很重要,是我们需要了解的,还有在输入采样阶段为什么要先输入到输入映像寄存器以及输出刷新阶段为什么要经过元件映像寄存器,为什么要多一个这样的环节呢,这也是我们需要了解的。关于这个过程映像区在梁老师的《s7-200从入门到精通》的第21课时有给出一个形象的解释。
除了学习CPU的工作原理,我们还要知道CPU程序包括哪些,CPU程序是分为主程序,子程序和中断程序的。我们要注意的是在一个程序中是有且只有一个主程序的,主程序可以调用子程序,而子程序的作用是什么呢?一个好的程序一般会将全部控制功能分为几个子程序块,这样是为了清晰的组织所设计的项目。而所说的中断程序,它与子程序的不同之处在于,中断程序是不能由用户调用的,只能由特定的事件触发的。需要注意的是子程序可以嵌套调用,可以嵌套8层,而中断程序只能调用一层子程序,也就是说它是不能嵌套调用子程序的,这点需要注意。
那么,这就是对PLC工作过程以及s7-200程序结构的了解学习。
【跟着我一起来学习s7-200】13数据与数制
今天就是学习一下数据格式及要求和数制转换,这部分也是我们编程的基础,是我们需要掌握的。
s7-200对数据的格式是有一定要求的,指令和数据之间的格式是只有一致才能正常工作的。那么什么是数据格式呢,数据格式就是指数据的长度和表示方式。
S7-200在寻址时,可以使用不同的数据长度。S7-200在存储单元所存放的数据类型有布尔型、整数型、实数型和字符串型这四种,这是我们需要了解一下的。
对于整数又可以分为无符号整数和有符号整数,那么对于一个有符号数来说,它的最高位是符号位来的,0代表是整数,1代表是负数。下面就列出了几种数据类型的取值范围,大家可以看一下。
那么对于数制,二进制数据是用0和1两个数码来表示的数,也就是一位二进制数是有0和1两种不同的状态的,所以我们是用一位二进制数来表示开关量的。而将二进制数从右往左每四位用一个十六进制来表示,即用4位二进制数来表示1位十六进制数,这样又引入了十六进制数。
对于二进制或十六进制,我们常用在逻辑运算里面,对于日常的计算常用的还是十进制。2#表示二进制,是逢二进一的,10#表示十进制,是逢十进一的,16#表示十六进制,是逢十六进一的。
对进制有了了解之后就是要对进制转换要有一定的了解。比如二进制、十六进制数转换成十进制数以及十进制数转换成二进制、十六进制数,还有二进制与十六进制的互换,都是我们要掌握的,掌握这部分的内容将对以后编程时有很大的帮助,虽然说我们可以用电脑自带的计算机进行转换,但是掌握一下也是很有必要的。
二进制、十六进制数转换成十进制数,我们可以将二进制、十六进制的各位(从右往左第n位)乘以对应的位权( 
 ),并将结果累加求和,可得其大小。比如将2#11011转成十进制数,就是
十进制数转换成二进制、十六进制数,我们可以用除N取余,逆序排列的方法。比如10#8000转换成十六进制,则
所以,10#8000=16#1F40。
而二进制与十六进制的互换,可以按一个口诀来转换。2转16:四位并一,按表查数;16转2:一位变四,按数查表。下面就给出二进制数和十六进制数的对应表。
所以今天就学这么一个数据和数制的内容,你有在学习吗,你学习的怎样了呢?
【跟着我一起来学习s7-200】14位逻辑指令
从最前面开始学习到现在已经学习了s7-200的基础知识,包括系统构成、硬件结构、硬件接线等,以及STEP 7 Micro/WIN软件的使用,还有编程基础,包括工作原理、存储器和寻址等。现在开始就是学习一下s7-200 PLC的指令系统了。
在我们软件的指令列表里面,可以看到有以下这些指令,这里就是所说的指令集。我们可以打开这些文件夹,找到需要用的指令,双击一下指令或者把指令拖拽到编程区就可以了。
 
我们首先学习的是位逻辑指令,我们可以看到在s7-200的位逻辑指令中有常开常闭指令、取反指令、跳变指令(也就是上升沿检测和下降沿检测)、输出线圈指令、置位复位指令、置位优先指令SR,和复位优先指令RS,还有立即指令。我们可以利用这些位逻辑指令编写小程序,练习一下这样来学习。那么我们完全可以利用这些位逻辑指令来编写单按钮启停的程序。下面我们就利用这些位逻辑指令来进行编写。
1、 利用基本逻辑指令
2、 采用置位、复位指令
3、 利用置位优先指令
4、 利用复位优先指令
我们平时可以多找一些小程序的例子,来自己编程看看。这类小程序包括像启保停、正反转控制、单按钮控制、连锁控制、互锁控制、顺序控制等等。我们的一个大项目的程序基本都是由这些小程序组成的,所以掌握这些基础的位逻辑指令的应用是非常重要的。那么我们最近就多多练习一下小程序编程吧。
【跟着我一起来学习s7-200】15程序案例
昨天学习了位逻辑控制指令,也有提到可以自己找一些小程序的例子,包括像启保停、正反转控制、单按钮控制、连锁控制、互锁控制、顺序控制等等这样的例子来练习。那么你有练习吗?不知道你掌握的如何呢?
今天的话就来练习一下难度相对大一点的程序案例,是这样一个五站点呼叫小车的案例,控制要求如下,今天就学习一下案例应该怎么来编程吧。
首先,我们分析一下控制要求,要求是当一个站点按下按钮后,小车会自动进行到呼叫点,也就是到呼叫点就会停止下来。那么其实这里的呼叫按钮就相当于我们启保停的启动按钮,而行程开关就相当于停止按钮,那么在这里就可以做以下这样五个启保停程序。
等到处理完这个要求之后就是处理小车是左行还是右行的控制了。在这里假定小车是停在最右的1号行程开关的,那么按下1号呼叫按钮是无效的,只能是按下2、3、4、5号呼叫按钮,所以在左行的控制程序里面是没有1号呼叫按钮的。假如我们按下2号呼叫按钮,小车会左行,而到了行程开关2又会停下来,然后再按下3号呼叫按钮,小车还会左行,并到相应的行程开关处停下来。如果再按下的是2号呼叫按钮,此时小车的左行不再接通了,而会右行到行程开关2处。这就是程序是先在呼叫按钮上串联一个对应的行程开关,再并联下一个呼叫按钮并做对应的停止行程开关的原因了。
再假定小车在最左的5号行程开关处,按下5号呼叫按钮也是无效的,只能是按下1、2、3、4号呼叫按钮。假如我们按下4号呼叫按钮,小车会右行,而到了行程开关4又会停下来,然后再按下3号呼叫按钮,小车还会右行,并到相应的行程开关处停下来。如果再按下的是4号呼叫按钮,此时小车的右行不再接通了,而会左行到行程开关4处。
这就是对控制要求的分析和程序的分析了。
程序如下:
所以,我们进行编程之前首先要做的是对控制要求进行分析,分析之后才能更好的编写出程序出来。然后还有一个很重要的是启保停电路,经过这个例子也会知道启保停电路是“万能”的了吧?这些都是可以灵活运用的。
【跟着我一起来学习s7-200】16定时器指令
前两天我们学习了位逻辑指令,并做了一下对位逻辑指令应用的练习,想必各位对位逻辑已经有了一定的了解了吧。昨天也有强调要多多练习一下,大家不要忘记了喔。在回顾学过知识的同时,还是要继续向前学习的。那么今天就学习一下s7-200的定时器指令的知识吧。
S7-200提供了256个定时器,定时器号为0-255,共有三种类型:接通延时定时器(TON)、有记忆接通延时定时器(TONR)和断开延时定时器(TOF)。接通延时定时器(TON)用于单一间隔的定时,比如延时启动或延时停机;有记忆接通延时定时器(TONR)则是用于累计多个时间间隔;断开延时定时器(TOF)常用于故障事件后的时间延时。至于这几个定时器具体是如何使用如何计时的,你可以在软件里对着定时器指令按下F1快捷键查找帮助,这个帮助也是很有用的,我们也要学会查找帮助。
定时器对时间间隔计数,这个时间间隔就叫做分辨率,有时也有称它为时基。在我们的S7-200中,定时器有3种分辨率:1ms、10ms、100ms,定时器分类及特征如下图。
我们会看到定时器指令上有定时器号、输入使能、设定值、类型和分辨率,我们要知道的是定时器号和分辨率是搭配好了的,选择了一个定时器号,分辨率会自动就是对应的分辨率的。
我们的定时器的定时时间是有个计算公式的,实际的定时时间等于设定值乘以分辨率。举个例子,假如我们使用是的TON的定时器T37,设定值是10,那么定时时间就是1000ms,也就是1s了。
定时器指令在程序编写过程中是经常要用到的指令,所以我们要掌握好它。因为实际运用中,其实还是接通延时会用的比较多,所以,下面我们便举一下几个接通延时定时器的例子,以便更好地掌握定时器的知识。
1、闪烁电路(方法1)
2、闪烁电路(方法2)
对闪烁电路的程序再拓展一下,可以运用比较指令的来实现闪烁电路,顺便可以掌握一下比较指令的知识。
3、延时启动、延时停机
到这里,那么你对定时器掌握了有多少呢?想必至少了解了定时器的一些基本内容吧。
【跟着我一起来学习s7-200】17计数器指令
前面我们学习了定时器的使用,那么今天就学习一下计数器的使用,在我们编程过程中,定时器计数器指令是我们经常会要用到的指令,这两部分的内容我们要比较熟练地掌握。只有对定时器计时器掌握的比较好了,我们才能够更好地去进行编程。
我们都知道在继电控制线路中,计数器是作为一种仪表在电路中使用的,其基本功能是对输入开关信号进行计数。换种说法来说,计数器就是用来累计输入脉冲的次数。
S7-200的计数器有三种类型:增计数器CTU、减计数器CTD、增/减计数器CTUD。我们从下面的指令可以看到计数器的操作主要有四个方面,一个是计数器的编号,一个是脉冲输入CU/CD,一个是预设值PV,还有复位输入R/LD。我们要注意的是LD是装载复位输入端,它是只用于减计数器的。还有一个注意点是,计数器的预设值的数据类型是INT整型的,范围是-32768~32767。
另外,计数器有两种寻址类型:字和位。字类型用来访问计数器的当前值,位类型用来表示计数器位的状态。那么什么是计数器的当前值,简单的说它就是计数器当前累计的脉冲个数,而计数器状态位就是说当计数器的当前值等于预设值PV时,这个位会被置为“1”。
以上是对计数器的一些概述,下面我们便举一些应用计数器的简单例子,以便更好的掌握计数器的知识。
1、单按钮控制电动机启停
前面的学习中也有学到用位逻辑控制指令来编写这个单按钮控制启停的程序,除了用位逻辑控制指令来实现,我们也可以用计数器来实现这个控制要求。
2、定时器和计数器实现长时间延时
实现长时间延时,我们除了利用定时器接力的方法,我们还可以利用定时器和计数器结合的办法来获得同样的控制结果。
3、24小时时钟控制
我们利用特殊标志位SM0.5以及三个计数器可以实现24小时时钟的控制。 
经过这几个小例子的练习,你对计数器的知识了解 有多少了呢?平时的话也可以多找些小例子来多多练习一下,这样可以掌握地更好喔,试试吧。
【跟着我一起来学习s7-200】18比较指令
昨天学习了计数器指令,那么今天就再继续学习一下比较指令。在我们的应用中,在用计数器的时候必不可少也会要用到比较指令的,所以我们学习了计数器指令之后紧接着就来学习比较指令。
比较指令主要用来比较两个数值或字符串。我们的数值比较指令有:等于=、大于等于>=、小于等于<=、大于>、小于<和不等于<>这6种,而字符串比较指令只有=和<>这两种,这是我们需要注意的。
我们可以看到指令格式是比较符号+数据类型的。我们的数据类型又有几种,一种是字节比较B,一种是整数比较I,一种是双字整数比较D,一种是实数比较R,还有是字符串比较S。以下是在我们编程软件里面指令列表中列出的指令。
对于字节比较,它是两个字节型无符号数的比较;整数比较是用来比较两个有符号字的大小的,比较的两个数我们可以填入变量,也可以填入常数;双字整数比较则用于比较两个有符号双字的大小;实数比较用来比较两个实数的大小,它也是有符号的比较;而字符串比较则是比较两个字符串的ASCII码是否相等。
我们需要注意的是字节比较的范围是0-255,而整数比较的范围是-32768~32767,双字比较的范围是16#80000000~16#7FFFFFFF,注意在使用的时候数值不能超限,不然是会提示有错误的。除此之外,我们在使用字符串比较的时候,是只需要填入整个字符串的首地址就可以了,而不能填入整个字符串的。
下面就举一些对这些比较指令的使用的例子,并也举了些错误例子,可以对照着学习一下。
那么,今天就先学习这么多,明天的话就学习一下计数器指令和比较指令结合在一起的应用吧。你有跟着我的进度来学习吗?
【跟着我一起来学习s7-200】19计数器和比较指令应用
前面学习了计数器指令也学习了比较指令,那么今天就练习一下运用计数器指令和比较指令的编程案例。那么为什么这个案例学习是在学习了比较指令之后再来进行呢?其实我们的应用中,在用计数器的时候必不可少也会要用到比较指令的,所以会将计数器指令和比较指令拉到一起来学习。
下面我们便举一些应用计数器指令和比较指令的简单例子,以便我们可以更好地掌握计数器指令和比较指令的知识。
1、 应用增计数器CTU实现按3次按钮灯亮,再按2次灯灭
以上要求也可以应用减计数器CTD来实现,其实增计数器、减计数器都是类似的,区别就是增计数器是CU使当前值递增,直至32767,减计数器是CU使当前值递减,直至0。不过有一点需要注意的是减计数器的装载端LD为装载预置值,它应该是沿触发的,不然的话会一直装载。下面便用减计数器来实现。
2、 应用增/减计数器实现库存统计与库存情况提示
增/减计数器常用于出库入库等需要增计数又需要减计数的应用中,比如产品的入库出库,停车入库出库等等,所以掌握这部分的知识还是比较重要的。
除了这些例子,你也可以另外再找些例子来多多练习一下。
【跟着我一起来学习s7-200】20定时器、计数器和比较指令应用
前面已经学习了定时器、计数器和比较指令的内容,并且也做了一些小程序的练习,那么今天就再继续巩固一下,做一下这几个指令的综合应用。要想熟练地掌握编程方法,必须得多练习,从易到难,这样一步一步练习,相信不久编程技巧和方法就会有所提高的。
那么下面就拿一两个例子来进行练习一下。
1、五盏灯顺序点亮,每个灯亮2秒,按下启动按钮I0.0第一个灯亮1秒时第二个灯亮,在第二秒时第一个灯灭第三个灯亮,如此循环十次后停止。按下停止按钮所有的灯都不亮。
除了这种编程方法,你还能想的出其他方法吗?多思考一下,自己也来动手练练吧。
2、用一个开关控制一台电动机,开关接通时电动机正转4S、停止4S、反转4S、停止4S,并周而复始。断开开关,电机停止。
当然,也是可以用另外的方法,比如下面给出的应用比较指令的方法。编程的时候能够多想几种方法来实现同种控制要求,这样对自己的提高也是有所帮助的呢。
学到这里的话,主要就是自己多编程练习这样来学习,这样才知道自己在哪有有不足的地方,哪里有不足就补哪里。所以,自己也要多找些例题来练习噢。
【跟着我一起来学习s7-200】21转换指令
前面已经学习了位逻辑指令、定时器指令、计数器指令和比较指令了,并且也做了一些这些指令的应用的例子。那么今天就开始学习新的内容,学习一下转换指令。转换指令主要是用于对数码的格式转换,在编程过程中有时也是会要进行转换会用到的,所以,关于转换指令的内容我们也是要学习一下的。
转换指令也包括有很多种,有字节、整数、双整数和浮点数之间的转换,BCD码与整数之间的转换,ASCII码与十六进制数之间的转换,整数、双整数和浮点数与ASCII码之间的转换,整数,双整数和浮点数与字符串之间的转换,除此之外,还有编码译码和七段数字显示译码等。以上这么多转换指令,最常用的还是字节、整数、双整数和浮点数之间的转换,这是我们必须要掌握的东西。
下面,我们就先看一下字节、整数、双整数和浮点数之间的转换。对于转换,我们可以看到下面的程序里面的中间运算结果是用LW0或LD2进行存储的,所以,中间运算结果用局部存储区的话,这样就不会占用到数据存储区的空间。或者我们也可以用累加器AC进行存储中间运算结果。
对于浮点数转换为双整数的指令,也就是取整指令ROUND和TRUNC,我们要注意的是ROUND指令是将小数部分四舍五入的,而TRUNC指令是将小数部分舍弃的。
对于BCD码与整数之间的转换,这在我们后面要学的的时钟读写指令应用时会用到,这个也是需要掌握一下的。
而至于ASCII码与十六进制之间的转换,整数、双整数和浮点数与ASCII码之间的转换,整数,双整数和浮点数与字符串之间的转换和七段数字显示译码的话相对来说用的少些,可以了解一下。
有一个要注意的是,我们在整数、双整数和浮点数与ASCII码之间的转换指令里面会看到“FMT”,那么这个FMT它是指定小数点右侧的转换精确度的,以及是否将小数点表示为逗号或点号及输出缓冲区的大小。ITA的输出缓冲区是8个字节的,DTA是12个字节,RTA则是由FMT定义的。同样的,在整数,双整数和浮点数与字符串之间的转换指令也有“FMT”,I_S的输出字符串长度是8个字节,DI_S是12个字节,而R_S则是由FMT定义的。因为这几个指令用的较少些,就不举例子了。
而对于编码译码DECO和ENCO指令,DECO指令是将输入字节的低4位所表示的数值置输出字中相应的位为1,其余位都为0;ENCO指令是将输入字最低有效位的位号写入到输出字节中的低4位中。
那么针对以上程序,假如我们在输入字节VB0里面写入一个16#7,那么执行DECO指令后会使得输出字VW2中的第7位置为1,则VW2为16#0010或者2#0000 0000 1000 0000。假如我们在输入字VW4里面写入2#0000 0001 0000 0000,也就是第8位为1,那么执行ENCO指令后会使得输出字节VB6中输出的数值就是8。
那么今天主要就是学习了一下转换指令的使用,这么多指令中我们就主要掌握一下字节、整数、双整数和浮点数之间的转换,BCD码与整数之间的转换以及编码译码指令,至于其他的转换指令则在需要用到的时候查找一下帮助也就可以了。
【跟着我一起来学习s7-200】22算术运算指令
算术运算指令,在我们编程应用过程中算术运算指令也是会要用到的,我们也要掌握一下的。我们的算术运算指令又分为整数计算和浮点数计算,算术运算指令包括有加减乘除运算指令、递增递减指令、平方根指令、自然对数、自然指数指令和三角函数指令等。
对于加减乘除运算指令,ADD_I、SUB_I、MUL_I、DIV_I是整数与整数的运算,ADD_DI、SUB_DI、MUL_DI、DIV_DI是双整数与双整数的运算,ADD_R、SUB_R、MUL_R、DIV_R是实数与实数的运算,我们要注意的是使用指令的时候输入输出的数据类型要跟指令的数据类型一致,不然是会提示有误的。
我们要注意的是对于乘除指令的话,还有MUL和DIV指令,那么这两个指令是整数与双整数的运算,也就是说将两个16位的整数进行相乘或相除,是得出一个32位结果的,同时要注意进行除法运算时是将结果中16位的余数存在高16位,16位的商存在低16位的。举个例子,假设VW8写入1,VW10写入2,指令执行后进行相除的结果是商为0,余数为1,并将余数1存到VW12,商0存到VW14里面(这里VW12就是高16位,VW14就是低16位)。
对于四则运算,应用这些加减乘除运算指令也是比较简单的,这里也就不举例子了,大家也可以随便写些运算公式来进行编写试试。
下面就是学习一下递增递减指令,也就是加1减1指令,这两个指令在编程过程中也是经常会要用到的,这个我们必须得掌握一下。对于递增递减指令,它可以进行加1或者减1的操作,我们要注意的是一般都是用沿触发递增递减指令的。另外,因为递增递减指令有时是会配合传送指令或移位指令等一起使用,这里我们就先学习指令的用法,等后面学了其他指令之后,再来学习对指令的应用。
然后再看一下三角函数指令,三角函数指令有正弦SIN指令、余弦COS指令、正切TAN指令,这几个指令是对角度值进行三角运算,我们要注意的是三角函数的输入角是以弧度为单位的。如果我们要将输入角从角度转换成弧度,我们要用角度乘以0.0174(pi/180),再来计算三角函数。
最后就学习一下平方根指令、自然对数指令和自然指数指令,平方根SQRT指令我们要注意的是它是对32位实数取平方根并产生一个32位实数结果的,自然对数LN指令是对输入的数值进行自然对数计算,自然指数指令是进行e的IN次方指数计算的。下面就举个计算VD0的3次方的例子,以便更好的理解。我们假设VD0为x,那么就相当于是计算的值,其实,那么计算时先取x的自然对数,再乘以3.0,最后再进行e的IN次方指数计算,这样就能计算出结果了。
关于三角函数指令、平方根指令、自然对数/指数指令等,用的也是相对少些的,我们大概知道怎么用就可以了,我们就重点掌握一下四则运算指令和递增递增指令。
【跟着我一起来学习s7-200】23逻辑运算指令
什么是逻辑运算指令呢?逻辑运算指令就是对字节、字和双字进行取反/与/或/异或的操作。取反指令是INV,逻辑与指令是WAND,逻辑或指令是WOR,逻辑异或指令是WXOR。
对于WAND指令,我们可以说它是对信号的屏蔽,它是有0出0,全1出1的;WOR指令,我们可以说它是对信号的组合,它是有1出1,全0为0的;WXOR指令是对信号的转换和检测,它是相同为0,不同为1的,这是我们需要注意的,INV指令是对前面的逻辑运算结果进行取反的操作,前面的结果为1则取反后为0,前面的结果为0则取反后为1。下面便看一下这几个指令的使用。
还有一个值得一提的是,我们可以根据指令的功能还可以进行置位和复位的操作。我们利用逻辑与WAND指令有0出0的功能可以进行复位操作,利用逻辑或WOR指令有1出1的功能可以进行置位操作。下面我们便看一下两个小例子。
第一个是用WAND指令进行复位的例子,在IN1中输入二进制数1111011111101111,因为VW0为VB0 VB1,那么当I0.0接通,执行一次逻辑与运算,这样就将V0.3和V1.4复位了。
第二个是用WOR指令进行置位的例子,在IN1中输入二进制数1000100,那么当I0.1接通,执行一次逻辑或运算,将V4.2和V4.6置位。
那么以上就是我们的逻辑运算指令了,也还算是比较简单的,学习之后你掌握的如何呢。
【跟着我一起来学习s7-200】24传送指令
数据传送指令,传送指令也是我们在编程过程中经常会要使用到的指令,我们也要掌握好它。所谓的传送指令就是把一个存储单元(输入端)的数值复制到另一个存储单元(输出端)里面,我们的传送指令经常是用于对存储单元的清零或者程序的初始化等场合。
传送指令有单个数据传送指令MOV,以及块传送指令BLKMOV,根据数据的类型它又可以分为字节、字、双字或者实数等这几种情况,不过要注意的是块传送指令没有实数类型的指令。除此之外,还有字节交换指令SWAP,字节传送立即读指令和字节传送立即写指令,当然这些指令用的相对较少,对这几个指令我们就先了解一下。
传送指令MOV的输入IN可以是常数、IB、QB、VB、SMB、LB、SB,输出可以是IB、QB、VB、SMB、LB、SB,但是要注意输出是没有常数的,如果输出是常数,那么是会提示错误的。
除此之外,我们在使用传送指令的时候,要注意的是输入和输出的数据类型是要一致的,如果不一致,同样也是会提示错误的。
那么数据块传送指令BLKMOV,它是将字节或字或双字数目N从输入存储单元传送到输出存储单元,也就是说块传送指令它是批量传送的,注意N的范围是1~255,使用的时候要注意不能超限。那么下面这条指令也就是将VB0~VB9的里面的数据传送到VB50~VB59里面。
然后再学习一下字节交换指令SWAP,字节交换指令的功能是交换字的最高位字节和最低位字节,下面就举个例子来说明一下指令的用法,那么以下这条指令是对VW0进行字节交换,因为VW0=VB0 VB1,它是低地址在前高地址在后的,执行了指令之后则变成VB1 VB0,变为高地址在前低地址在后了。
下面再继续看一下字节传送立即读指令和字节传送立即写指令,它跟前面讲到的立即指令是一样的,而且它也是只针对I/O地址的。字节传送立即读指令是对输入I进行读操作,字节传送立即写指令是对输出Q进行写操作。
那么今天就学习了传送指令,传送指令也还算是比较简单的是吧?那么之后就要学习一些相对难一些的指令了,你准备好了吗?
【跟着我一起来学习s7-200】25移位循环指令
移位指令有左移也有右移,移位指令也分有字节、字、双字类型的移位,同样的,循环指令也有左移右移,也有字节、字、双字类型的循环。除此之外,我们也可以在指令列表看到还有SHRB移位寄存器指令。这些指令我们都要灵活地掌握,掌握了这些指令,在以后编程的时候有时可以做到简化程序的效果,所以它还是比较有用的指令。
下面先学习一下移位指令,移位指令格式里面有使能输入、输入、输出和移位位数N。下面就以字节移位指令为例看一下,字节左移SHR_B和字节左移SHL_B指令是将输入字节(或字或双字)数值根据移位位数向左或向右移动,并将结果送输出字节(或字或双字)。我们要注意的是对一个数左移一位相当于乘以2,右移一位相当于除以2。
对于移位指令,我们要注意的是移位指令是对每个移出的位进行自动补0的。如果移位位数大于或等于8(或字操作16或双字操作32),那么数值最多是被移位8(或字操作16或双字操作32)次的。当移位位数大于或等于最大允许值时,其实就相当于进行清零的操作。
除此之外,我们还要注意特殊内存位的使用,对于SM1.0,如果移位结果是零,则SM1.0被置位;对于SM1.1,就是把最后一次移出位的数值被复制到SM1.1,要注意这个前提是移位位数大于0。我们要注意的是SM1.0和SM1.1是会自动复位的。
就以下面这个程序来说明一下指令的使用,这条指令是I0.0接通执行移位操作,它是接通一次移位一次的,若VW200写入的是1110 0010 1010 1101,因为移位位数是3,那么移位的最后结果是0001 0101 0110 1000的。因为移位位数是大于0的,最后一位移出位的数值是1,那么就把SM1.1置为1。
下面再学习一下循环移位指令,循环移位指令格式里面一样是有使能输入、输入、输出和移位位数N的。下面就以字节循环移位指令为例看一下,字节循环左移ROR_B和字节循环左移ROL_B指令是将输入字节(或字或双字)数值根据移位位数向左或向右旋转N位,并将结果送输出字节(或字或双字)。
对于循环移位指令,我们要注意的是如果移位位数大于或等于8(或字操作16或双字操作32),那么执行循环移位之前要先对移位位数N进行模数8(或字操作16或双字操作32)操作,使得移位位数在0~7(或字操作0~15或双字操作0~31)之间,得到一个有效的移位位数。这里说的模数8操作是什么呢?它其实也就是对移位位数N除于8再求余数,举个例子,如果移位位数是20,那么20除于8等于2余4,那么4就是实际移位数目。
我们要知道如果移位位数为0,这指令也就没有什么意义了,它是不执行循环操作的。如果执行循环操作,也就是移位位数大于0,那么旋转的最后一位数值被复制到SM1.1。对于SM1.1,还有如果移位位数不是8(或16或32)的整数倍,那么旋转出的最后一位数值也被复制到SM1.1;对于SM1.0,当需要循环的数值是零时,SM1.0被置位。
就以下面这个程序来说明一下指令的使用,这条指令是I0.0接通执行循环操作,若AC0写入的是0100 0000 0000 0001,因为移位位数是2,那么移位的最后结果是0101 0000 0000 0000的。因为移位位数是大于0的,最后一位移出位的数值是0,那么SM1.1就为0。
下面就以小程序案例的形式讲一下这几个指令。
1、编写跑马灯程序,8个灯从左往右循环点亮,即Q0.0---Q0.7每隔1秒点亮一个灯,周期循环。
2、编写8个灯先全部亮,接着8个灯从左往右依次熄灭,即Q0.0-Q0.7每隔1s熄灭一个灯。
那么这就是移位指令和循环指令了,今天主要是学习指令的基本使用,这里还有移位寄存器指令没有学习,那么明天就学习一下移位寄存器,并且后面再来学一下对这些指令的应用。
【跟着我一起来学习s7-200】26移位寄存器指令
移位寄存器指令SHRB是将DATA数值移入移位寄存器。S_BIT指定移位寄存器的最低位。N指定移位寄存器的长度和移位方向(移位加 = N,移位减 = -N)。移位寄存器的最大长度是64位的,可以正也可以负。我们要注意的是SHRB指令移出的每个位是被放置在溢出内存位(SM1.1)中的。
下面便以以下的程序来讲解指令的使用,用I0.2的上升沿来执行移位寄存器指令,那么就是一个扫描周期移一位的,指令中V100.0是移位寄存器的最低位,I0.3里面存的是0或1的数值,指令指定是移位加的,移位寄存器的长度是4。我们结合下面的时序图和移位的图来看,若V100为0000 0101,因为移位寄存器的长度是4,那么只有0101,当I0.3为1时,执行第一次移位,把1移到移位寄存器的最低位,把移出的位的值0放置到SM1.1中,那么SM1.1为0,当I0.3为0时,执行第二次移位,把0移到移位寄存器的最低位,把移出的位的值1放置到SM1.1中,那么SM1.1为1。
下面再看一个程序案例,更深入地来学习一下这个移位寄存器指令。
1、产品检测分拣机,输送带上的产品经过一台检测装置时,检测装置输出检测结果到I0.0,有产品时为1。I0.1检测产品的好坏,若I0.1为0则产品是好的,若I0.1为1则产品是坏的。在第4个产品位置有一个推产品的气缸Q0.0。若检测的产品为坏时,到达第4个产品位置时,Q0.0输出,气缸动作,产品被推出,1s后气缸退回,传送带继续工作,进行产品的检测。
下面就分析一下程序,检测装置检测到有产品时I0.0为1,I0.1检测产品的好坏,产品坏为1,指定移位寄存器的最低位为M0.0,移位寄存器的长度为4。因为在第4个产品位置有一个气缸Q0.0,若I0.1为1时,到达第4个产品位置时,那么就用M0.3驱动气缸动作,推出产品,同时做了一个定时器定时1s,1s后复位M0.3,气缸退回。
那么这就是对移位寄存器的学习,可能会相对有些难理解,不过不要紧,相信多做一些练习,那就会熟悉的。那么后面就开始学习一下应用以上所学指令的程序案例的编程。
【跟着我一起来学习s7-200】27综合程序应用
前面已经学习了好些指令了,像算术运算指令、逻辑运算指令、传送指令、移位循环指令等,但都没有做一个较综合的应用,那么今天就开始做一两个较为综合的程序案例应用吧。
1、编写出1S内计算出PLC经过多少个扫描周期的程序
下面就分析一下以上的程序,首先对后面要用到的V存储区进行清0,然后做个启保停程序,并做个定时器定时1s,当定时时间到T37的常闭触点断开,使Q0.0断开,后面再用一个Q0.0来驱动一个加1指令,这样就可以计算出Q0.0接通1S的时间内PLC经过多少个扫描周期了。
2、编写能够计算VW0中1的个数的程序
下面也分析一下以上的程序,假如往VW0里面写入的是16#FF,所以首先把16#FF传送到VW0,同时对后面要用来存储个数的存储器VW2和VB4进行清0,然后是做一个字右移,因为移位的位数为1,是大于0 的,这样就把移出位的数值复制到SM1.1,这在前面是有学习到的,把1移到SM1.1一次,也就是SM1.1接通一次,从而执行加1指令,对VW2进行加1操作,因为VW0是有8个1的,那么程序执行完后VW2里面就是8。这里同时做了对VB4进行加1操作,这样是因为字的移位的有效移位最多是16位的,所以在移位指令前面做了一个比较指令VB4<=15。
以上两个例子,正是运用了前面学习到的传送指令、递增指令和移位指令,经过这样的程序案例练习,是否对指令的使用有了更深一层的理解呢。那么你也可以来尝试这样学习一下吧。
【跟着我一起来学习s7-200】28字符串指令
在软件的指令列表里面,我们可以看到还有字符串指令,那么今天就学习一下字符串指令,虽然字符串指令在应用方面可能会用的比较少,但作为s7-200的指令,我们还是要学习一下。字符串指令里面有字符串长度指令、字符串复制指令、复制子字符串指令、字符串连接指令、查找子字符串指令和查找字符串中的字符指令。
那么就先学习一下这些指令,对于字符串连接指令STR_CAT,顾名思义,就是把字符串进行连接起来;字符串长度指令STR_LEN是返回IN指定的字符串长度,也就是计算输入字符串里面有多少个有效字符;字符串复制指令STR_CPY就是直接将IN指定的字符串复制至OUT指定的字符串;而复制子字符串指令它的操作内容除了输入IN输出OUT之外,还有INDX和N,INDX是索引到哪个字符,N是字符数,这个指令是将从输入字符串索引到的字符开始的N个字符输出。下面就看一下指令在程序中的使用。
以上程序在第一个STR_CAT输入字符串“HELLO”,在第二个STR_CAT输入字符串“WORLD”,那么指令执行之后就将“HELLO WORLD”送到VB0里面,后面的SSTR_CPY指令是将“HELLO WORLD”中第7个字符开始的5个字符输出到VB10,那么最后是将“WORLD”输出到VB10的,再执行STR_CPY指令是直接将VB10中的“WORLD”复制到VB100里面,最后的STR_LEN指令是计算VB100里面有多少个字符,VB100里面有5个字符,那么指令执行后VB200输出的就是5。
下面再继续学习一下查找子字符串指令和查找字符串中的字符指令。查找子字符串指令是从OUT定义的字符位置开始,在字符串IN1中找符合IN2的字符串,如果找到一个与字符串IN2完全符合的字符系列,该系列的第一个字符位置被写入到OUT里。如果在字符串IN1中未找到符合IN2的字符串,OUT被设为0。
以上程序首先是对要用的V存储器VB300进行初始化,赋值1,因为位置的计算是以1开始计数的。因VB100里面的字符串是“WORLD”,执行STR_FIND指令后,在字符串VB100中找符合“rld”的字符串,找到后把“rld”字符串的第一个字符的位置写入到VB300里面,那么在VB300中输出的就是3。
而查找字符串中的字符指令从OUT定义的字符位置开始,在字符串IN1中找符合IN2里定义的任何字符,如果找到一个字符与IN2里定义的任何字符一致,那么把找到的第一个字符位置写入到OUT里。如果未找到相符的字符,OUT被设为0。
以上程序首先是对要用的V存储器VB400进行初始化,赋值1,因为位置的计算是以1开始计数的。因VB100里面的字符串是“WORLD”,执行CHR_FIND指令后,在字符串VB100中找符合字符串“lod”的任意字符,找到后把“lod”字符串的第一个字符的位置写入到VB400里面,那么在VB400中输出的就是2。
那么这就是对字符串指令的学习了。因为这些指令用的相对较少些,记不住也没关系,先有个了解,等需要用的时候查找一下帮助看下指令的用法就可以了。
【跟着我一起来学习s7-200】29时钟读写指令
时钟读写指令有读取时钟指令READ_RTC和写时钟指令SET_RTC,读取实时时钟指令READ_RTC是从硬件时钟中读取当前时间和日期,并把它装载到一个以地址T起始的8个字节的存储区中,写时钟指令SET_RTC是将当前时间和日期写入到用T指定的在8个字节存储区开始的硬件时钟中。以地址T起始的8个字节的存储区中存储的数据内容及数值范围如下表,我们要注意的是对于星期的数值,1代表星期日,7代表星期六,而0表示禁止计星期。
我们看一下数据内容为星期的,因为年月日的关系,星期是自动固定了的,所以星期保持默认就好了,所以在实际应用的时候,对于T+5,T+6,T+7经常是不进行设置的。但要注意的是CPU不会检查日期与星期是否合理的,比如2月30日可能会被接受。所以在写入时钟时要确认输入的数据的正确性。
我们要注意的是,对于一个全新的CPU,需先在菜单的“PLC-实时时钟”或者通过写时钟指令给CPU分配一个时间。
在使用时钟读写指令时,有三个点是要注意的,一是,一般是用沿触发设置实时时钟指令的,也就是在驱动条件的上升沿,就把设定的时间写入到PLC里面;二是,读取实时时钟指令用SM0.5来调用,也就是1s读取一次,读取出PLC里面的实时时间;三是,时钟的显示数值是以BCD码(16#无字母的数)形式的。
下面就看一下程序实例。
当我们用状态表监控时,就可以监控到读取的实时时钟信息。这里我用的是CPU224的PLC,我们要注意的是CPU221和CPU222是要另外配时钟卡才具有实时时钟功能的,而CPU224、CPU224XP和CPU226是内置有时钟卡的,所以如果我们用CPU221和CPU222时又没有配时钟卡的话是不支持实时时钟功能的,这样只能选用CPU224、CPU224XP或CPU226的PLC。
那么这就是我们的实时时钟读写指令,应该不会太难理解吧?
【跟着我一起来学习s7-200】30循环跳转指令
程序控制指令有FOR-NEXT循环指令、跳转指令JMP和LBL、顺序控制指令SCR、SCRT和SCRE、子程序返回指令RET、程序结束指令END、转到STOP模式的STOP指令、看门狗复位指令WDR和诊断LED指令DIAG_LED。
我们先看一下FOR-NEXT循环指令,FOR指令必须指定当前循环计数INDX、起始值INIT和结束值FINAL,NEXT指令标记FOR循环的结束。我们要注意的是每条FOR指令都必须对应一条NEXT指令,而循环执行的程序就在FOR-NEXT指令之间的,而且循环是可以嵌套的,它最多可以嵌套8层。
除此之外,我们要注意FOR指令一般用沿触发,每次触发,INDX会赋以INIT的值。假如INIT为1,FINAL为10,那么每执行一次循环体内的程序,INDX值递增加1,直到大于FINAL值,退出循环。
下面再学习一下跳转指令,跳转指令JMP可以使程序从一个地方跳到另外一个地方去执行,LBL指令标记的就是跳转的目的地。对于跳转指令我们要注意的是可以在主程序、子程序或中断例行程序中使用跳转指令,但是不能从主程序跳到子程序或中断程序中去的,跳转必须是跳转到相同的代码段中的。
循环指令和跳转指令在我们编程过程中,有时是会要用到的,所以我们要掌握一下的。那么今天就先学习这两个指令,先消化好再来学习程序控制指令剩下的其他指令。
【跟着我一起来学习s7-200】31程序控制指令
我们看一下顺序控制指令,顺序控制指令可以使程序按照顺序执行,顺序控制指令有SCR、SCRT和SCRE,我们要注意的是SCR指令和SCRE指令是配套使用的。SCR指令的作用是将n引用的S位数值载入SCR,即标记SCR段的开始。SCRT指令的作用是识别要启用的SCR位,即是下一个要设置的n位。SCRE指令的作用是标记SCR段的结束。
我们要注意一下使用SCR的限制,第一,不能把相同的S位用于不同的程序中,举个例子,如果在主程序中使用了S0.0,则不能在子程序中再使用它;第二,不能在SCR段中使用JMP和LBL指令,也不允许在SCR段内跳转,但是可以使用跳转和标签指令在SCR段周围跳转。SCR段之间的跳转,可以使用SCRT或者置位/复位指令;第三,不能在SCR段中使用"END"指令。
下面就看一下顺序控制指令的使用的程序例子。这里的SCRT指令就是跳转,它是跳到S0.1的,也就是置位S0.1并复位S0.0。
下面再学习一下看门狗复位WDR指令,WDR指令重新触发S7-200 CPU的看门狗定时器,扩展扫描允许使用的时间,而不会出现看门狗错误。我们在使用看门狗复位指令时应当小心,如果使用循环指令阻止扫描完成,那么像I/O更新、通讯等程序只有在扫描周期完成后才能执行。如果对程序预计扫描时间将超过500毫秒,可能阻止返回主扫描超过500毫秒,这时就应当使用WDR指令,重新触发看门狗定时器。以下程序就是使用了看门狗复位的例子。
下面看一下子程序返回RET指令,RET指令是根据前一个逻辑终止子程序,并返回主程序的。软件是会自动在子程序最后增加子程序无条件返回指令的,但它不会显示在"子程序POU"里面。
而主程序结束END指令,它是根据前一个逻辑条件终止主程序的,也就是是说在END指令之后的程序是不执行的。同样,软件是会自动在主程序最后增加END指令的。我们要注意的是END指令只能用在主程序里,而不能用在子程序或者中断程序中的。
还有是STOP指令,它可以强制将PLC切换到STOP停止模式。
最后再看一下诊断LED灯DIAG_LED指令,该指令中如果输入参数IN的数值为零,则诊断LED会被设置为不发光。如果输入参数IN的数值大于零,则诊断LED会被设置为发光 (黄色)。下面的程序让诊断LED灯亮0.5s,灭0.5s,那么当输入IN的数值大于零时,诊断LED会被设置为发光(黄色)。
这里这么多个指令,其实可能会要用到的也就是顺序控制指令和看门狗复位指令,我们主要学习一下这两个指令就基本可以了。
【跟着我一起来学习s7-200】32循环跳转应用
前两天学习了程序控制指令,那么今天我们就做一个循环跳转指令的小练习,因为循环跳转指令相对重要些,所以就以一个例子来巩固一下,并综合用到前面学习的一些指令。下面就以从1加到100的求和这样的一个例子来学习一下。
1、应用FOR-NEXT循环指令来实现从1加到100的求和
首先用SM0.1给VW0和VW2分别赋值1和2,再用输入I0.0的上升沿触发FOR-NEXT循环指令,而在循环体里面是先做加法运算,将VW0和VW2进行相加,并把相加的结果送回到VW0,而VW2则是做递增加1操作,如此实现求和运算,注意因为前面赋值为1和2,那么这里循环99次就可以了。下图就是用状态表监控出来的结果,我们看到在VW0的当前值是5050,也就是从1加到100的和就为5050。
2、在FOR-NEXT循环指令的基础上增加了跳转指令来实现从1加到100的求和
这里在FOR-NEXT循环指令的基础上增加了跳转指令,这里主要是为了对指令的使用而编的程序,在这里的程序跟前面的有些区别,在这里是先给VW0和VW2分别赋值为0和1,那么这里循环次数就应该为100次的,这里我们要注意一下。下图就是用状态表监控的结果,同样VW0里面的当前值也为5050。
那么今天就是做这样一个例子,你也可以找些其他例子来练习练习。
【跟着我一起来学习s7-200】33表指令
除了通信指令外,前面我们已经基本把所有指令讲完了,就只剩下表指令了,那么今天我们就学习最后一部分指令,表指令。我们的表指令有后进先出LIFO指令、先进先出FIFO指令、填表指令AD_T_TBL、存储区填充指令FILL_N和查表指令TBL_FIND。
那么什么是表呢,表它其实就是一段存储区域。一个表最多只能有100条数据,每个数据都是16位的。如果表溢出了,SM1.4会被置为1。我们要注意的是一个表中,首地址表示的是这个表的最大数据条数,第二个地址表示的是当前数据条数,从第三个地址往下,才是实际数据。
我们要注意的是要建立表格,首先要为表的最大条目数建立一个条目。如果没有这样做,那么是无法在表格中建立任何条目的。
下面我们先看一下后进先出LIFO指令的使用。
所以,LIFO指令是将表格中的最后一个条目移至输出内存地址,每次执行指令时,表格中的条目数减1。
下面我们再看一下先进先出FIFO指令的使用。
所以,FIFO指令是将表格中的第一个条目移至输出内存地址,表格中的所有其他条目均向上移动一个位置。每次执行指令时,表格中的条目数减1。
下面我们再看一下填表指令AD_T_TBL的使用。
所以,填表指令AD_T_TBL指令是向表格(TBL)中加入字值(DATA),新数据被增加至表格中的最后一个条目,每次向表格中增加新数据后,条目计数加1。我们要注意的是表格最多只可以有100个条目,不包括指定最大条目数和实际条目数这两个条目。如果过度填充表格的话,SM1.4会被置为1。
下面我们再看一下存储区填充指令FILL_N的使用。FILL指令是把包含在地址IN中的数据写入到从地址OUT开始N个连续字地址中。要注意的是数据类型是为字的,且N的范围是1至255。
那么以上的程序其实就是把VW0、VW2、VW4……VW20清零。
下面我们再看一下查表指令TBL_FIND的使用。TBL_FIND指令是在表格(TBL)中搜索符合一定规则的数据。从INDX开始搜索表,寻找符合PTN和CMD的数据。CMD被指定一个1至4的数值,分别代表 =、<>、<、>。如果找到符合条件的数据,那么INDX指向表格中该数的位置。
以上程序就是当I0.0接通时,在表格中搜索等于3130的十六进制数。
那么今天主要就学习了这个表指令。对于表指令也是比较少会用到,我们有个了解就可以了。
【跟着我一起来学习s7-200】34 S7-200库
在我们的编程软件里面具有添加或删除库的功能,只要右键点击一下“库”,选择“添加/删除库”,就可以进行添加和删除库。添加之后库指令就会出现在指令列表里面。当我们要使用库指令时,直接从库指令列表中拖拽出来就可以了。
我们要知道的是我们也可以为子程序生成一个库,我们只要右键点击“库”,选择“新建库”。我们要注意的是要为子程序里用到的每个变量定义符号名。选择新建库后,在跳出的对话框的“组件”项选择子程序并点击添加,在库的属性里面填写库的名字和输出路径,我们一般选择“C:\Program Files\Siemens\STEP 7-MicroWIN V4.0\Lib”这个路径。此外,我们还可以为库程序设置密码。待新建好库之后,同样可以在“添加/删除库”把新建好的库添加到指令列表里面。
另外,我们要注意的是,对于一些库程序,有可能会占用以部分V存储区,这样我们在调用库程序之后要手工分配一些库存储区,右键点击“程序块”,选择“库存储区”,就会弹出“库存储区分配”的对话框,进行分配地址。如果没有分配库存储区,编译时是会报错的。如果库程序没有占有V存储区,那就不需要分配地址。下图就是没有用到V存储区的情况,调用库的时候不会要求分配地址。所以说,不是所有库程序都需要分配库存储区的。
总结一下,我们在使用库时有几点要注意的,一是,待生成库的程序里使用的存储区要连续,以免造成空间浪费;二是,待生成库的程序里的变量都要使用V存储区,而且都要定义符号,如果使用的是M存储区,不会要求分配库地址;三是,分配的库存储区地址不要跟编写的程序地址重复,我们可以选择“建议地址”让软件自动分配,四是,不是所有库程序都需要分配库地址。
至于常用的S7-200库,可以到以下网址进行下载。
【跟着我一起来学习s7-200】35中断
什么是中断呢,中断是一种工作方式,它是为了解决突发事件不能得到及时处理和响应这种问题的。在我们的S7-200中,系统为每个中断事件规定了一个中断事件号,而响应中断事件而执行的程序就叫中断服务程序。
我们要注意的是多个中断事件可以调用同个中断程序,但是一个中断事件不能连接多个中断程序。还有中断服务程序不能再被中断,在中断程序里面只能调用一层子程序,中断程序调用的子程序也不能再被中断。
S7-200CPU支持三类中断事件,一种是通信口中断、I/O中断、定时中断。这几个中断事件中通信中断的优先级是最高的,定时中断的优先级是最低的。我们要注意的是中断程序执行过程中,发生其他中断事件是不会影响中断的执行的,它会按照优先级和发生时序进行排队,如果队列溢出,相应的系统标志位会被置位。我们记住这个原则,优先级高的中断先处理,优先级相同的中断事件是先到的先处理的。下面就附上中断事件号及其优先级表,和中断队列的最多中断数目及中断队列溢出标志位表。
下面我们再看一下中断指令,有中断运行指令ENI、中断禁止指令DISI、从中断指令有条 件返回指令RETI、中断连接指令ATCH、中断分离指令DTCH和清除中断事件指令CLR_EVENT。
中断运行指令ENI是全局性允许所有中断事件。中断禁止指令DISI是全局性禁止所有中断事件。从中断指令有条件返回指令RETI是根据前面的逻辑操作条件,从中断服务程序中返回, 编程软件是会自动在中断程序末尾添加RETI指令的。
中断连接指令ATCH是将中断事件(EVNT)与中断服务程序号码(INT)相联系,并启用中断事件。中断分离指令DTCH是取消中断事件(EVNT)与所有中断服务程序之间的关联,并禁用中断事件。清除中断事件指令CLR_EVENT会删除中断队列中所有类型为EVNT的中断事件,这个指令用于清除不必要的中断。
以上这几个中断指令中,我们主要会用到的只有两个指令,中断连接指令ATCH和中断运行指令ENI。
那么以上就是我们的中断和中断指令的一些基础内容,在学习怎么使用中断指令之前首先做个了解,然后再来详细学习中断指令的使用等。
【跟着我一起来学习s7-200】36中断的使用
我们要知道使用中断的步骤是怎样的,我们使用中断的一般步骤是,第一,在首次扫描时要设置与所连接的中断事件相关的系统存储区,第二,使用ATCH指令将中断事件(EVENT)和中断服务程序号(INT)相联,简单的说就是建立起中断连接,第三,使用ENI指令允许全局中断,也可以说是激活中断,第四,编写中断服务程序。
对于中断程序,平时是禁止执行的,而执行时它是只执行一个扫描周期的。我们还要注意的是,上升沿指令、下降沿指令、定时器、计数器是不能在中断程序中使用的,但是加1指令和减1指令就可以在中断程序中使用。
那么在编程软件里面是在哪里编写中断程序呢,在我们的编程软件,是默认提供了一个空的中断程序INT_0的,我们可以在里面编写中断程序,我们还可以插入中断程序,右键点击“插入-中断”就可以了。我们最多可以插入128个中断,不过肯定是用不完的,用这么多中断就不得了了,因为中断会影响到扫描,所以一般中断都是越少越好,中断程序越短越好的,我们要注意一下。
对于中断使用,还有一下注意事项是我们需要注意的,第一,在中断程序中不能使用DISI、ENI、HDEF、LSCR、END指令;第二,知道程序只需要跟中断事件连接一次,所以ATCH是用SM0.1来触发的。
那么下面我们就具体的看一下中断指令的使用吧。
以上的程序就是用到了I/O中断,在网络1中,SM0.1首次扫描,定义中断事件1(I0.0的下降沿)中断服务程序是INT_0,建立中断连接,然后是ENI全局允许中断。在网络2中,SM5.0是如果出现任何I/O错误,置为1,这里用SM5.0来触发DTCH指令,也就是当检测到I/O错误时,禁止事件1的中断。在网络3中,是用SM5.0来驱动DISI,也就是当检测到I/O错误时,禁止所有中断。而后面的那个网络1是属于中断程序,这条指令的意思是当检测到I/O错误时,从中断服务程序中返回。
下面我们看一个定时中断的程序。
以上的程序就是用到了定时中断,在第一个网络中,首先是SM0.1首次扫描,传送200到特殊标志位SMB34,因为定时中断0的特殊标志位是SBM34,然后是建立中断号0和中断事件10的中断连接,这里也就是设置定时中断0的时间间隔为200ms并连接INT_0到事件10,然后全局允许中断。后面的这个网络是中断程序,对VW100进行加1操作,也就是说每100ms VW100加1。
那么以上就是对中断的一些基本使用。
【跟着我一起来学习s7-200】37中断的应用
前面我们学习了中断的基本概念以及中断的使用,那么今天就做一些对中断的应用。下面就以例子的形式讲一下应用。
1、利用中断做8灯的亮与灭
主程序:
INT_0:
INT_1:
以上程序中的事件号0和2分别代表的是I0.0上升沿中断和I0.1的上升沿中断,与0号事件建立的中断是INT_0,与2号事件建立的中断是INT_1,在INT_0中是传送255到QB0中,而在INT_1中是传送0到QB0中。这样当I0.0的上升沿接通时,那么8灯亮,当I0.1的上升沿接通时,那么8灯灭。
2、利用定时器中断制作高精度定时,显示时分秒
主程序:
中断程序:
以上的程序,在主程序中,首先是SM0.1首次扫描,传送1到特殊标志位SMB34,因为定时中断0的特殊标志位是SBM34,然后是建立中断号INT_0和中断事件10的中断连接,这里也就是设置定时中断0的时间间隔为1ms并连接INT_0到事件10,然后全局允许中断,此外,还对VW0进行清零。在中断程序中首先是进行VW0的加1操作,这里也就是每中断一次加1进行累加。直到VW0大于等于1000,也就是1s时,做一个对VW2的加1操作,那么这里VW2计的就是秒,当VW0大于等于1000时同时对VW0清零进行。直到累加到VW2大于等于60时,做一个对VW4的加1操作,那么这里VW4计的就是分,当VW0大于等于60时同时对VW2清零,直到累加到VW4大于等于60时,做一个对VW6的加1操作,那么这里VW6计的就是时,当VW0大于等于60时同时对VW4清零。那么这样就实现了利用定时器中断制作高精度定时,显示时分秒的功能。
【跟着我一起来学习s7-200】38子程序
子程序,它是备用程序,是调用才执行的,它的作用主要是优化程序结构,节约PLC资源。
在我们的编程软件里面,是默认提供了一个空的子程序SBR_0的,我们还可以创建子程序,在程序编辑区单击右键,选择“插入-子程序”就可以了。插入的此程序会从0开始递增生成,我们要注意的是对于CPU226XM,为SBR_0-SBR_127,对于其余的CPU,为SBR_0-SBR_63。
说到调用子程序,我们的主程序、子程序、中断程序都可以调用子程序。要调用子程序的时候,我们只需要在指令列表中的“调用子程序”文件夹里找到子程序,把它拖拽出来就可以了。如果子程序的局部变量表是有定义参数的,在调用了子程序后修改了局部变量表的话,那么调用指令是无效的,这样只能重新调用子程序。
对于子程序的调用,我们可以分为带参数的子程序调用和不带参数的子程序调用这两种。不带参数的子程序调用的特点有几个,第一是直接在子程序中利用绝对地址进行编程,第二是子程序功能块是没有接口的,第三是不带参数的子程序只能调用一次,这个我们要注意一下,不然会出现双线圈的错误,第四是当跳出子程序时要对内部状态复位或清零。
以下就是不带参数子程序调用的使用的例子。我们可以看到在子程序中利用的是绝对地址的,并且是没有定义接口的。
而带参数的子程序调用是要对局部变量表定义参数的,变量的地址也是有范围的,为LB0-LB31、LW0-LW30、LD0-LD28。子程序的局部变量表中是有IN、OUT、IN_OUT接口的,IN是把外面的数据传到内部,OUT是把内部的数据传到外部,IN_OUT是把外部的数据传到内部,再经过运算后再把数据传到外部。还有TEMP临时变量,TEMP是用于中间运算的,我们要注意的是它是要先赋值后使用的。子程序中凡是运算的中间过程我们都可以用累加器AC0-AC3,它的使用是没有限制的。还有就是带参数的子程序可以多次被调用,在每次调用时可以对不同的变量、数据进行相同的运算或操作。
以下就是带参数子程序调用的使用的例子。我们可以看到我们在子程序的局部变量表里是有定义接口的,定义了3个变量DW1、DW2和SUM,这些变量就是子程序的参数。我们要注意的是子程序的参数是形式参数,这些参数在调用子程序时是被实际的数据替代的。我们看到在变量符号前面有个“#”号,这就是表示这个变量是局部变量。
还有一个我们要注意的是,子程序在调用执行中,调用条件突然断开的话,所有状态会保持当前状态,100ms定时器会暂停计时,1ms和10ms定时器则不受扫描周期控制,会继续计时。
【跟着我一起来学习s7-200】39子程序的应用
1、不带参数的子程序调用
主程序:
自动模式子程序:
手动模式子程序:
维护模式子程序:
以上的程序为不带参数的子程序调用做手动自动维护模式控制的示例程序,I0.7为控制自动模式,I1.0为控制手动模式,I1.1为控制维护模式,三种模式都是设置了互锁的,当I0.7接通,则调用自动模式子程序,执行自动模式的程序,在I0.7的下降沿将0传送至QB0进行清零。同样,对于手动模式和维护模式的控制也是同样道理。注意在这里各个模式的子程序只是做了个起保停程序,里面的程序可以按自己的要求更改。
2、不带参数的子程序调用
主程序:
自动模式子程序:
手动模式子程序:
以上的的程序为不带参数的子程序调用做手动自动模式控制的程序,这里是用了单按钮控制启停的方法,单按钮控制中用的是置位优先SR,按一下I0.7,M0.0接通,从而进入自动模式,再按一下I0.7,M0.0断开,在M0.0的下降沿对QB0和定时器T37进行清零和复位。当M0.0断开时,是进入手动模式的。
3、带参数的子程序调用
主程序:
一号电机管理子程序:
起保停子程序:
以上的程序为带参数的子程序调用的示例程序,首先做了一个起保停子程序,在子程序里是一个电动机运行,延时设定时间报警的程序,具有记录当前时间的功能,除此之外,还有个点动控制。我们看到在子程序的局部变量表里是定义了参数的,启动L0.0、停止L0.1、运行L0.2、点动L0.3、点动运行L0.4、设定时间LW1、当前时间LW3、报警L5.0。还做了一个一号电机管理子程序,子程序中是SM0.0调用起保停程序。最后是在主程序中SM0.0调用这个一号电机管理子程序。所以这个程序中就是主程序调用1号电机管理子程序,而1号电机管理子程序又调用了起保停程序,那么这就是子程序的嵌套调用。
【跟着我一起来学习s7-200】40高速计数器
高速计数器经常被用于距离检测,用于电机转数检测,高速计数器也是一个比较重要的内容,也是比较常会用到的,我们要掌握一下的,那么今天就先对高速计数器的基本内容做个了解。
高速计数器可以对CPU扫描速度无法控制的高速事件进行计数,简单的说就是对高速输入输出信号进行计数。S7-200 CPU内置最多只有6个高速计数器HSC0~HSC5,其中PLC221及PLC222不支持HSC1及HSC2,这里我们要注意一下。高速计数器是有专用输入的,具体的可以参考下表。我们要注意的是同一个输入是不能用于不同的功能的,比如说I0.0,它既可以是普通输入,也可以是中断输入,也可以是高速输入,这三个功能只能选择其中一个,也就是说要是I0.0作为了高速输入用,就不能作为普通输入或中断输入用。
高速计数器大体可以分为四种,第一种是带内部方向控制的单相计数器,这种计数器只有一个计数输入端,其控制计数方向由内部继电器控制,工作模式为模式0、1、2。第二种是带外部方向控制的单相计数器,这种计数器也是只有一个计数输入端,但是是由外部输入控制其计数方向的,工作模式为模式3、4、5。第三种计数器是具有两个时钟输入的双向计数器,这种计数器有两个计数输入端,一个增计数输入端,一个减计数输入端,工作模式为模式6、7、8。第四种计数器是A/B相正交计数器。这种计数器有两个时钟脉冲输入端,一个输入端叫A相,一个输端叫B相。当A相时钟脉冲超前B相时钟脉冲时,计数器进行增计数。当A相时钟脉冲滞后B相时钟脉冲时,计数器进行减计数。这种计数器的工作模式为模式9、10、11。我们可以看到下表,里面的的HSC模式有0,-12,其中模式0-11是用于接收外部输入信号的,模式12是用于Q0.0、Q0.1输出计数的。
下面我们再看一这个表格应该怎么去看,这里的HSC0的专用输入为I0.0、 I0.1、I0.2,假如我们就用HSC0,并且选择的是模式3,那么I0.0就是脉冲输入端,I0.1就是方向控制端。这里的HSC1的专用输入为I0.6、I0.7、I1.0、I1.1,假如我们就用HSC1,并且选择的是模式11,那么I0.6就是A相脉冲输入端,I0.7就是B相脉冲输入断,I1.0是复位端,I01.1是启动端。
下面我们再看一下高速计数器的控制字节,每一个高速计数器都有一个控制字节,该字节的每一位都反映了这个计数器的工作状态,下表就是对应的控制位表。HSC0、HSC1、HSC2、HSC4 这四个计数器的三个控制位bit0、bit1、bit2,是分别用来复原和启动的控制和选择1x或4x速率计数模式,我们要注意的是这三个位只在执行HEDF指令中时才使用。
对于其他位,bit7位为使能,我们一般默认是启用HSC,为1的,bit6位为是否更新当前值,这里可以为1可以为0,bit5位为是否更新设定值,我们一般默认是更新设定值,为1的,bit4位为是否更新方向,我们一般也默认为更新方向,为1的,bit3位为计数方向控制,1是加计数,0是减计数,所以是可以为1可以为0的。
因为一般来说bit6和bit3是可以为1可以为0,其他位一般默认为1,那么这8个位就有四种组合,分别为11111000,11110000,10111000,10110000,那么把二进制数转换成16进制数为16#F8、16#F0、16#B8、16#B0,16#F8为更新当前值加计数,16#F0为更新当前值减计数,16#B8为不更新当前值加计数,16#B0为不更新当前值减计数。这样我们在定义控制字节时可以直接利用16#F8、16#F0、16#B8、16#B0这四个值。
除了定义控制字节,我们还要设置初始值和预设值。每个高速计数器都有一个32位初始值和一个32位预设值,如果我们要向高速计数器载入新初始值和预设值,我们必须设置初始值和预设值的特殊内存字节,然后执行HSC指令,才能将新数值写入到高速计数器中,这是我们要注意的。
那么我们使用高速计数器是有个流程的,第一,定义控制字节;第二,是否有初始值,有要设置初始值的特殊内存字节;第三,是否有预设值,有要设置预设值的特殊内存字节;第四,定义高速计数模式和选择高速计数器;第五,激活高速计数器。我们要注意的是我们在使用高速计数器时,只需要接通一个扫描周期就可以了。
【跟着我一起来学习s7-200】41高速计数器的使用
前面学习了高速计数器的基本内容,包括了解高速计数器和使用高速计数器的流程,那么今天就继续学习一下高速计数器的其他内容。
我们把高速计数器和前面学习的中断结合在一起来学习,对于这个指定中断,我们要知道几个要点的内容,第一,所有计数器模式都支持在HSC的当前值等于预设值时产生一个中断事件;第二,使用外部复位端的计数模式支持外部复位中断;第三,除了模式0、1、2之外,所有计数器模式支持计数方向改变中断。我们在使用时要注意的是当使用外部复位中断时,不要写入初始值,或者是在该中断服务程序中禁止再允许高速计数器。
我们再看一下高速计数器的状态字节。我们要知道每一个高速计数器都有一个状态字节,该字节的每一位都反映了这个计数器的工作状态。这些状态位表示当前计数方向以及当前值是否大于或等于预设值。我们要注意的是只有在执行中断服务程序时,状态位才有效。下面就附上高速计数器的状态位表。
下面我们就看一下HSC指令的使用。
以上程序中,首次扫描首先传送16#F8到SMB47定义控制字节,然后执行HEDF指令定义高速计数模式和选择高速计数器,然后是写入初始值和预设值,然后是ATCH连接中断程序0和中断事件号13,那么就是为计数器当前值CV等于预设值PV连接中断,然后是一个ATCH连接中断程序1和中断事件号14,那么就是连接计数器方向改变中断,然后又是一个ATCH连接中断程序2和中断事件号15,那么就是连接计数器外部复位中断,建立连接中断后要允许全局中断,执行ENI指令,最后是激活高速计数器,执行HSC指令。
那么以上是用HSC指令来编程这个高速计数器的程序,除此之外,我们还可以用向导来生成高速计数器程序。
高速计数器向导可以从菜单栏的“工具-指令向导”里面打开,弹出指令向导对话框后,我们选择“HSC”再点击下一步就可以了。
出现“HSC指令向导”后,我们可以选择配置哪个计数器和选择哪个模式,这里我们选择HC1和模式5,然后点击下一步。
选择计数器和模式之后,我们可以设置计数器的预置值、初始值和计数方向等,这里我们写入预设值为100,其他保持默认,然后点击下一步。
然后我们可以配置中断事件和编程步数,在这里配置的中断事件不是必须的,我们可以根据自己的要求来选择使用,我们要注意的是一个高速计数器最多只能有3个中断事件。
对于当前值等于预置值时产生的中断,我们还可以写入新的预置值和当前值,我们可以定义高速计数器每一步的操作。定义好之后,点击下一步,就会完成向导生成一个子程序HSC_INT。
使用时我们在主程序块中使用SM0.1或边沿触发指令调用这个子程序就可以了。
主程序:
HSC_INIT子程序:
那么以上就是高速计数器的内容,在后面我们再以程序案例的形式来学习一下高速计数器的应用。
【跟着我一起来学习s7-200】42高速计数器的简单应用
前面我们学习了高速计数器的基本内容和使用,那么今天我们就以几个较简单的程序案例来学习一下高速计数器的应用。
1、当高速计数器的计数值大于某设定值时输出Q0.0
主程序:
子程序:
以上的程序中,我们做了一个高速计数器初始化的子程序,定义的是高速计数器HSC0和HSC模式1,同样是前面学习高速计数器使用时的一般步骤,定义控制字节,写入初始值和预设值,定义高速计数模式和选择高速计数器,激活高速计数器。这里我们用的是数据存储区VB10、VD0、VD4,这样就比较方便,我们在监控时可以在状态表里面进行修改数据。在主程序中,用I0.7的上升沿调用高速计数器初始化子程序,并编写控制程序,用一个比较指令比较高速计数器计数值和设定值,然后输出Q0.0。那么当我们接通I0.7时就初始化高速计数器,因为HSC0和模式1对应的脉冲输入断是I0.0,那么当我们接通I0.0时就进行高速脉冲计数,当计数值大于等于设定值时,Q0.0就接通。
2、高速计数器中断小程序
主程序:
子程序:
中断程序:
以上的程序中,同样也做了一个高速计数器初始化的子程序,定义的是高速计数器HSC0和HSC模式1,除了定义控制字节,写入初始值和预设值,定义高速计数模式和选择高速计数器,激活高速计数器之外,还做了高速计数器中断,连接了中断程序0和中断事件12,并全局允许中断。在主程序中,用I0.7的上升沿调用高速计数器初始化子程序,那么当我们接通I0.7时就初始化高速计数器,因为HSC0和模式1对应的脉冲输入断是I0.0,那么当我们接通I0.0时就进行高速脉冲计数。我们可以在VD里面写入预设值,当计数当前值等于预设值时,就进入中断程序0进行执行,Q0.2就接通,然后又进行高速计数器初始化。
那么这就是较简单的高速计数器的应用,那么后面我们再做几个复杂一些的应用。
【跟着我一起来学习s7-200】43高速计数器的实际应用
前面以几个较简单的程序案例学习了一下高速计数器的应用,那么今天就做几个较复杂一些的程序案例,提高一下对高速计数器的应用。
1、用编码器测量电机转速与频率
主程序:
子程序:
中断程序:
以上的程序中,在主程序中,用I0.7的上升沿调用高速计数器初始化子程序,然后做一个高速计数器初始化的子程序,首先是定义控制字节,送16#F8到SMB37,定义为加计数更新当前值,这里没有写入初始值和预设值,定义的是高速计数器HSC0和HSC模式1,然后激活高速计数器,还做了高速计数器中断,我们设置定时中断0的时间间隔为100ms,因为SMB34的定时中断0为中断事件号10,我们建立中断程序0和中断事件10的中断连接,并全局允许中断。
然后再看一下中断程序,因为是100ms的定时中断,每100ms执行一次中断程序。我们就用100ms计算的脉冲个数,再乘以600化成1分钟的脉冲个数,再除于分辨率就是等于转速,程序中的500就是编码器的分辨率。而对于编码器的频率的计算,我们有这样一个公式,频率/工频50Hz=转速/工频下的转速,所以频率=(转速/工频下的转速)*工频50Hz,这里我们先把双整数的转速转换成实数,再除以工频下的转速1488.0,再乘以工频50.0Hz,那么就得到了编码器的频率了。
2、用编码器测量机床位置,不论机床朝正方向移动或朝反方向移动,都能知道机床的当前位置,有一原点位置感应开关I0.7,当原点位置感应开关接通时,机床的当前位置为0。假设编码器的分辨率为1024,丝杆的进给量即转1圈移动的位置为10,计算公式是当前值除以分辨率,再乘于进给量。
主程序:
子程序:
以上的程序中,首先做一个高速计数器初始化的子程序,首先是定义控制字节,送16#F8到SMB37,定义为加计数更新当前值,这里没有写入初始值和预设值,定义的是高速计数器HSC0和HSC模式1,然后激活高速计数器。
在主程序中,用I0.7的上升沿调用高速计数器初始化子程序。然后是做机床朝正方向移动的控制,做个起保停程序,当I0.3接通时,Q0.0接通并自锁,在Q0.0接通的上升沿传送16#B8到SMB37(加计数不更新当前值),同时激活高速计数器。然后是做机床朝反方向移动的控制,做个起保停程序,当I0.4接通时,Q0.1接通并自锁,在Q0.1接通的上升沿传送16#B0到SMB37(减计数不更新当前值),同时激活高速计数器。
后面还做了一个用SM0.1常闭触点的上升沿来调用高速计数器初始化的子程序,并且用SM0.1的常开触点来驱动传送指令传送VD1000的值到SMD38,用SM0.1的常闭触点来驱动传送指令传送HC0的值到VD1000,这里是为了实现停电保持功能。PLC从STOP拨向RUN时,在第一个扫描周期之后会传送HC0的计数值到VD1000里面进行存储,当PLC断电后再从STOP拨向RUN时,SM0.1接通一个扫描周期,把VD1000存储的计数器传到到SMB38,那么当前值就是存储在VD1000里面的值。然后再做一个计算,把双整数HC0的当前值转换成实数,再进行HC0的当前值除以分辨率1024.0,再乘于进给量10.0,这样就可以测量出机床位置。
那么这就是一些复杂些的高速计数器的应用,比较详细的讲了一下,可以理解吗?
【跟着我一起来学习s7-200】44高速计数器的实际应用2
前面做了好几个高速计数器的实际应用,那么今天再看一个程序案例应用吧,对这个案例,我们以两种方法来实现它。通过这些对高速计数器应用的练习,来更好的掌握高速计数器的内容。
1、用比较指令来实现正反转控制,按下启动按钮I0.3,Q0.0输出,电机正转,高速计数器计到50个脉冲后电机停止,过5秒后Q0.1输出,电机反转,计数器计到50个脉冲后电机停止,过5s后又开始电机的正转,如此循环。
主程序:
子程序:
以上的程序中,首先做一个高速计数器初始化的子程序,首先是定义控制字节,送16#F8到SMB37,定义为加计数更新当前值,这里写入初始值为0和预设值为50,定义的是高速计数器HSC0和HSC模式1,然后激活高速计数器。
因为控制要求是按下启动按钮I0.3,Q0.0输出,电机正转。首先就做个起保停程序,I0.3启动串联I0.4停止,来驱动输出Q0.0并做Q0.0的自锁,同时做一个用I0.3的上升沿来调用高速计数器初始化子程序,注意这里的起保停是有做正反转的互锁的。然后再用Q0.0常开触点串联一个HC0大于等于SMD42的比较指令来输出M0.0,并把M0.0的常闭触点串联在起保停程序中,作为高速计数器计到50个脉冲后电机停止。
电机停止过5秒后Q0.1输出,电机反转,那么我们就用M0.0来置位M0.1,再用M0.1常开触点来驱动来驱动定时器T37延时5秒,并用T37常开触点来驱动复位M0.1,这里是为了让定时器定时时间到时复位定时器。然后再用T37常开触点来驱动输出Q0.1并做Q0.1的自锁,同时也用T37的上升沿来调用高速计数器初始子程序。然后再用Q0.1常开触点串联一个HC0大于等于SMD42的比较指令来输出M0.2,并把M0.2的常闭触点串联在起保停程序中,作为高速计数器计到50个脉冲后电机停止。
电机停止过5s后又开始电机的正转,那么我们就用M0.2来置位M0.3,再用M0.3常开触点来驱动来驱动定时器T38延时5秒,并用T38常开触点来驱动复位M0.3,这里也是为了让定时器定时时间到时复位定时器。同时我们用T38常开触点并联在电机正转的控制程序上,这样可以实现循环。
2、用中断来实现正反转控制,按下启动按钮I0.3,Q0.0输出,电机正转,高速计数器计到50个脉冲后电机停止,过5秒后Q0.1输出,电机反转,计数器计到50个脉冲后电机停止,过5s后又开始电机的正转,如此循环。
主程序:
子程序:
中断程序:
以上的程序中,首先做一个高速计数器初始化的子程序,首先是定义控制字节,送16#F8到SMB37,定义为加计数更新当前值,这里写入初始值为0和预设值为50,定义的是高速计数器HSC0和HSC模式1,然后激活高速计数器,还做了高速计数器中断,建立中断程序0和中断事件12的中断连接,并全局允许中断。
在主程序中,用SM0.1的上升沿调用高速计数器初始化子程序,因为控制要求是按下启动按钮I0.3,Q0.0输出,电机正转,就用I0.3常开触点来置位Q0.0,并用I0.3的上升沿激活高速计数器。控制还要求当高速计数器计到50个脉冲后电机停止,那么当计数当前值等于预设值50时就进入中断程序去执行,我们就可以在中断程序中编写用Q0.0常开触点串联Q0.1常闭触点来复位Q0.0并置位M0.0,那么当当前值等于预设值时复位Q0.0电机停止,并置位M0.0,然后又回到主程序进行执行。
电机停止过5秒后Q0.1输出,电机反转,在主程序中用M0.0常开触点驱动定时器T37延时5秒,并用T37常开触点来复位M0.0复位定时器和置位Q0.1,并用T37的上升沿激活高速计数器。当高速计数器计到50个脉冲后电机停止,那么当计数当前值等于预设值50时就进入中断程序去执行,我们就可以在中断程序中编写用Q0.1常开触点串联Q0.0常闭触点来复位Q0.1并置位M0.2,那么当当前值等于预设值时复位Q0.1电机停止,并置位M0.2,然后又回到主程序进行执行。
电机停止过5s后又开始电机的正转,那么我们就用M0.2来驱动来驱动定时器T38延时5秒,并用T38常开触点来驱动复位M0.2,这里也是为了让定时器定时时间到时复位定时器。同时我们用T38常开触点并联在电机正转的控制程序上,这样可以实现循环。
那么以上就是用了两种方法来实现正反转的控制,利用中断的方法可能会难理解一下,但是其实分析清楚执行过程也是不难的,对吗。
【跟着我一起来学习s7-200】45高速脉冲输出
前面学习了高速计数器的内容,紧接着我们就来学习一下高速脉冲输出的内容,高速脉冲输出一般是用在运动控制里面,用来控制步进或伺服,高速脉冲输出也是比较重要的一部分,我们必须得掌握好它。
在S7-200中有两个PTO/PWM高速脉冲发生器,可以产生高速脉冲串(PTO)或脉宽调制信号波形(PWM)。在S7-200中有脉冲输出指令PLS,它用来控制在高速脉冲输出(Q0.0和Q0.1)中提供的高速脉冲串输出(PTO)和脉宽调制(PWM)功能。
PTO/PWM与数字量输出过程映像区共用输出点Q0.0和Q0.1,当在Q0.0或Q0.1上激活了PTO/PWM功能时,是会禁止普通输出点功能的,这时Q0.0或Q0.1的输出波形是不受过程映像区状态、输出点强制值或者立即输出指令的影响的,我们使用状态表或趋势图是监控不了的。
要做高速脉冲输出,我们应该选用24VDC晶体管输出的CPU,而不能选用继电器输出的CPU,这是我们要注意的。高速脉冲输出一般是用在运动控制里面,用来控制步进或伺服。利用高速脉冲输出实现运动控制,除了有PTO、PWM,还有EM253定位模块,这三种方式都可以实现运动控制,不过要注意的是PTO和PWM可以使用脉冲输出指令PLS和向导来实现,而且PTO方式的甚至还可以使用运动控制库指令来实现,而使用EM253定位模块的话就只能通过向导来实现,而不能使用PLS指令或运动控制库指令。
我们先看一下脉冲串操作PTO,PTO是按照给定的脉冲个数和周期输出一串方波(占空比50%)。在使用时,我们要设定其脉冲个数和周期,我们要注意的是设定是周期数应该是偶数,如果设定的周期数为奇数的话,是会引起占空比失真的。
而脉宽调制PWM,它是产生一个占空比变化周期固定的脉冲输出的,我们可以设定其周期和脉宽,我们要注意的是当设定的脉宽等于周期时,输出是一直为ON的,当设定的脉宽等于0时,输出是断开的。
一般来说,使用脉冲串PTO会比较多,所以后面学习时也是重点学习脉冲串PTO的。
【跟着我一起来学习s7-200】46脉冲输出指令
前面简单的介绍了一下高速脉冲输出的内容,包括脉冲串PTO和脉宽调制PWM的内容等,那么今天就学习一下脉冲输出指令PLS以及指令的应用,并且主要针对脉冲串PTO的学习,这是脉冲输出学习的重点,我们必须要掌握好它。
前面有说到脉冲输出指令PLS用于控制在高速脉冲输出(Q0.0和Q0.1)中提供的脉冲串输出PTO和脉宽调制PWM功能。在S7-200中有两个PTO/PWM发生器,而每台PTO/PWM发生器都有一个控制字节的,SMB67控制的是Q0.0的PTO/PWM发生器,而SMB77控制的是Q0.1的PTO/PWM发生器,这个我们要知道的。
脉冲输出指令是会从系统存储器SM(包括控制字节)中读取数据,从而控制PTO/PWM发生器,这样我们就可以通过修改控制字节,然后执行PLS指令,来更改PTO或PWM信号波形。以下就附上PTO/PWM控制寄存器的SM标志表和PTO/PWM控制字节参考表。
我们要注意的是,我们在使用PLS指令时一般是有步骤的。第一步,我们在使能PTO/PWM之前,要对Q0.0、Q0.1的过程映像区清零;第二步,定义控制字节,Q0.0对应SMB67,Q0.1对应SMB77。第三步,写入PTO/PWM相关寄存器的数据,比如SMW68对应的是PTO/PWM周期值(2-65525ms),SMD72对应的是PTO脉冲计数值。第四步,就是连接中断事件和中断程序,并允许中断这步是根据实际情况决定要还是不要的;第五步,执行PLS指令,激活某个脉冲输出,更新控制字节。
当然我们也可以禁止PTO/PWM波形,我们将控制字节的使能位(SMB67.7/SMB77.7)清零,然后执行PLS指令就可以了。我们也可以对周期值、脉宽值和脉冲数进行修改,我们把相应的系统存储器位置1,然后再把修改数据写入到相应的系统存储器里,然后执行PLS指令就可以。
下面就举个PLS指令应用的例子,来更好的掌握PLS指令的使用。
主程序:
高速脉冲输出子程序:
高速计数器子程序:
以上的程序,在主程序的网络一中,首先用SM0.1首次扫描驱动高速计数器子程序进行高速计数初始化,同时对Q0.0的过程映像区清零。在高速计数器子程序中,首先传送16#F8到SMB47定义控制字节定义为更新当前值加计数,然后执行HEDF指令定义高速计数模式12和选择高速计数器0,最后是激活高速计数器,执行HSC指令。
在主程序的网络二中,用I0.2的上升沿才驱动高速脉冲输出子程序,用I0.2的下降沿来驱动一个传送指令,传送0到SMB67,并同时驱动一个PLS指令。在高速脉冲输出子程序中,首先传送16#85到SMB67中定义控制字节,这里选择的是PTO模式、单段、1us/周期、装入周期和脉冲数的情况(控制字节的定义可以参考PTO/PWM控制字节表),并传送100到SMW68中写入周期值,传送100到SMD72中写入脉冲数,最后执行PLS指令。
那么程序会在I0.2接通的上升沿执行周期为100us,100个脉冲数的高速脉冲输出,会在I0.2断开的下降沿禁止PTO波形的输出。
那么以这样一个小例子来讲脉冲输出指令PLS指令的使用,是不是更容易理解一些呢,你可以对照着来学习。
【跟着我一起来学习s7-200】47脉冲输出指令2
前面学习了脉冲输出指令的使用,那么今天还是继续学习一下脉冲输出指令的使用与应用。
通过上次的学习,我们应该已经知道可以通过修改SM存储区(包括控制字节),然后执行PLS指令来改变PTO或PWM波形。除了前面学习的使用步骤和一些使用要点,我们还要知道的就是PTO状态字节的空闲位(SM66.7或SM76.7),它标志着脉冲输出完成。另外,在脉冲输出完成时,我们还可以利用脉冲发送完成中断,使程序跳转到中断服务程序进行执行。那么就补充这几点内容。
下面我们做利用一个脉冲输出指令做电机正反转控制的例子。
主程序:
高速计数器子程序:
高速脉冲输出子程序:
中断程序:
我们首先先做一个高速计数子程序和脉冲输出子程序,在高速计数器子程序中,首先是定义控制字节,送16#F8到SMB37,定义为加计数更新当前值,传送0到SMD38写入初始值,定义的是高速计数器HSC0和HSC模式12,然后激活高速计数器,还做了高速计数器中断,PTO0完成中断的事件为中断事件号19,我们建立中断程序0和中断事件19的中断连接,并全局允许中断。
而在高速脉冲输出子程序里面,我们定义一下接口,定义周期io_time为LW0,为IN类型的,定义脉冲数io_NO为LD2,也是为IN类型的,然后写子程序。首先传送16#85到SMB67中定义控制字节,这里选择的是PTO模式、单段、1us/周期、装入周期和脉冲数的情况(控制字节的定义可以参考PTO/PWM控制字节表),并传送LW0到SMW68中写入周期值,传送LD2到SMD72中写入脉冲数,最后执行PLS指令。那么这样是做了一个带功能参数的子程序,之后在主程序中可以对这个带功能参数的子程序进行调用。
然后我们编写主程序,在主程序的网络一中,首先用SM0.1首次扫描驱动高速计数器子程序进行高速计数初始化,同时对Q0.0的过程映像区清零,同时也对高速脉冲输出进行初始化。在网络中,我们用I0.2的上升沿来驱动立即置位指令,立即置位Q0.2,同时调用高速脉冲输出子程序,周期设为100us,脉冲为10000个,同时还要传送16#F8到SMB37并执行HSC指令进行加计数并更新当前值。那么就就是说当我们接通I0.2时,会在I0.2的上升沿立即置位Q0.2,电机正转,100us发10000个脉冲,同时高速计数器进行加计数。因为建立了脉冲完成中断,那么当脉冲发生完成时,会进入到中断程序进行执行。
那么我们就可以在中断程序中编写反转的控制,因为原来是正转,那么Q0.2是接通的,那么我们就用Q0.2的常开触点来驱动立即复位指令,立即复位Q0.2,同时调用高速脉冲输出子程序,周期设为200us,脉冲为10000个,同时还要传送16#B0到SMB67并执行HSC指令进行减计数并不更新当前值。那么就是说进入中断时会立即复位Q0.2,电机反转,200us发10000个脉冲,同时高速计数器进行减计数。
那么对于这样一个例子会不会比较难以理解呢,如果觉得有些模糊的话,可以回看一下前面中断和高速计数器的内容,这样可以加深印象呢。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
周报121期 | 西门子全系列PLC、HMI、驱动问答集锦!
第10章 常用PLC简介
只要识字,就能学懂PLC,学习技能就是这么简单!
三菱PLC定时器、计数器常见32问
第6章 定时器计数器
欧姆龙PLC说明书2—CP1H中文2
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服