邯郸西门子S7-200代理
公司服务、热情周到做人诚信信誉
公司产品、保证全新原装进口
公司流程、保证安全准时发货
公司服务、保证售后服务质量
公司制度、客户确认所需产品型号
公司名称、上海庆惜自动化设备有限公司
公司代理、西门子人机界面、西门子变频器 、西门子伺服系统、西门子数控系统、西门子电机、西门子工业通信、西门子楼宇控制 、西门子电气设备、西门子自动化设备、西门子机电设备的安装、西门子电气设备及配件、数控设备及配件、机电设备、工程机械设备及配件、电线电缆、自动化成套设备及配件、低压电器元件、西门子S7-200 300 400 1200 1500 、西门子触摸屏 西门子直流调速器、西门子电源、西门子各种系列、打造高品质产品、是我永远的追求。
西门子S7-200子程序,多次调用的现象
在S7-200编程中,子程序想必大家都用过,使用子程序可以更好地组织程序结构,便于阅读和调试,也可以缩短程序代码。但是使用子程序也有一些需要注意的地方,除了子程序在同一周期内被多次调用时,不能使用上升沿、下降沿、定时器和计数器之外,还有子程序中局部变量的特点,在编程多次调用带参数子程序时要特别注意。下面就是前些天热线上遇到的一个Case,非常有代表性,
E:您好,西门子技术支持。
C:您好,我想问下,200子程序是不是多次调用时会不好使?
E:不会啊,您是不是在子程序里使用了沿指令或者定时器?
C:没有啊,我就编了一句很简单的开关程序,开关闭合,线圈导通,然后主程序里调用了两次这个子程序,结果个I点闭合了,两个Q点都导通了。
E:(心里活动:看来是和子程序的局部变量有关了,估计客户程序逻辑有问题)那请您描述一下您的子程序吧,我帮您看看。
于是客户描述了一下自己的程序,大致了解了之后告知客户我这边测试下,稍后回复。
客户的程序是这样的:
子程序:是个常见的自保持逻辑,接口参数如红框所示。
先我们先明确子程序局部变量的特点。局部变量的变量类型分为四种:IN,IN_OUT,OUT和TEMP,局部变量存储区是在子程序调用时开辟的,子程序调用完成,局部变量占用的存储空间释放。
我们来分析下客户的子程序。
在主程序次调用子程序时,如果I0.0为1,I0.1为0,它们将自身值分别传给输入局部变量#AA和#BB,子程序中程序逻辑执行如下图.04所示。此时局部变量#CC值为1,子程序完成,#CC将值传送到输出参数Q0.0上,使其置1。根据局部变量的特点,子程序次调用完成后,局部变量存储区释放。
那么当主程序第二次调用该子程序时,开辟临时存储空间,但是此时的存储空间与次调用时开辟的不一定一致。可是,也有可能由于程序简单,仍然使用次调用时占用的存储空间。如果这种情况发生了,那么次调用时已经将#CC的L0.2置了1,而此值依旧存在,那么第二次调用时虽然输入参数I0.2和I0.3为0 ,但是#CC(L0.2)为1,由于客户的子程序逻辑有自保持部分,所以后L0.2的逻辑结果仍然是1。子程序完成后,#CC将值传送到输出参数Q0.1上,使其置1。所以就会出现客户反映的那种问题。
那么该如何避免这种情况呢?
大家是否还记得刚刚介绍局部变量参数类型时除了IN, OUT类型外,还有一种类型叫IN_OUT,这种类型的参数是先读入,然后再写出,这里我们就可以利用它的特点解决上面的问题。
同样,如果只给I0.2置1,那么也只有Q0.1会亮,不会再影响Q0.0。
了解了IN_OUT类型变量的特点,就不难分析以上的结果。因为每次调用子程序时,局部变量#CC都会先去读取输入参数Q0.0或Q0.1的状态,所以即使两次调用子程序时,#CC变量使用的同一区域,该区域的值也会在开始被Q点的状态所修改,就不存在两次调用相互影响的情况了。
另外,如果在子程序一开始就添加一条指令,对局部变量#CC进行赋初值(如图.08),也可以避免临时变量区数值不定的问题,您可以尝试测试下
使用方法:
1.本软件无需安装,解压缩后双击S7_200.exe即可使用;
2.仿真前先用STEP 7 - MicroWIN编写程序,编写完成后在菜单栏“文件”里点击“导出”,弹出一个“导出程序块”的对话框,选择存储路径,填写文件名,保存类型的扩展名为awl,之后点保存;
3.打开仿真软件,输入密码“6596”,双击PLC面板选择CPU型号,点击菜单栏的“程序”,点“装载程序”,在弹出的对话框中选择要装载的程序部分和STEP 7 - MicroWIN的版本号,一般情况下选“全部”就行了,之后“确定”,找到awl文件的路径“打开”导出的程序,在弹出的对话框点击“确定”,再点那个绿色的三角运行按钮让PLC进入运行状态,点击下面那一排输入的小开关给PLC输入信号就可以进行仿真了。
使用教程:
本教程中介绍的是juan luis villanueva设计的英文版S7-200 PLC 仿真软件(V2.0),原版为西班牙语。关于本软件的详细介绍,可以参考http://personales.ya.com/canalPLC。
该仿真软件可以仿真大量的S7-200指令(支持常用的位触点指令、定时器指令、计数器指令、比较指令、逻辑运算指令和大部分的数学运算指令等,但部分指令如顺序控制指令、循环指令、高速计数器指令和通讯指令等尚无法支持,仿真软件支持的仿真指令可参考http://personales.ya.com/canalPLC/interest.htm)。仿真程序提供了数字信号输入开关、两个模拟电位器和LED输出显示,仿真程序同时还支持对TD-200文本显示器的仿真,在实验条件尚不具备的情况下,完全可以作为学S7-200的一个辅助工具。
附图1 仿真软件界面
仿真软件的界面如附图1所示,和所有基于Windows的软件一样,仿真软件上方是菜单,仿真软件的所有功能都有对应的菜单命令;在工件栏中列出了部分常用的命令(如PLC程序加载,启动程序,停止程序、AWL、KOP、DB1和状态观察窗口等)。
常用菜单命令介绍
Program|Load Program:加载仿真程序。(仿真程序梯形图必须为awl文件,数据块必须为dbl或txt文件)
Program|Paste Program(OB1):粘贴梯形图程序
Program|Paste Program(DB1):粘贴数据块
View|Program AWL:查看仿真程序(语句表形式)
View|Program KOP:查看仿真程序(梯形图形式)
View|Data(DB1):查看数据块
View|State Table:启用状态观察窗口
View|TD200:启用TD200仿真
Configuration|CPU Type:设置CPU类型
输入位状态显示:对应的输入端子为1时,相应的LED变为绿色
输出位状态显示:对应的输出端子为1时,相应的LED变为绿色
CPU类型选择:点击该区域可以选择仿真所用的CPU类型
模块扩展区:在空白区域点击,可以加载数字和模拟I/O模块
信号输入开关:用于提供仿真需要的外部数字量输入信号
模拟电位器:用于提供0~255连续变化的数字信号
TD200仿真界面:仿真TD200文本显示器(该版本TD200只具有文本显示功能,不支持数据编辑功能)
准备工作
仿真软件不提供源程序的编辑功能,因此必须和STEP7 Micro/Win程序编辑软件配合使用,即在STEP7 Micro/Win中编辑好源程序后,然后加载到仿真程序中执行。
(1)在STEP7 Micro/Win中编辑好梯形图
(2)利用File|Export命令将梯形图程序导出为扩展名为awl的文件,
(3)如果程序中需要数据块,需要将数据块导出为txt文件。
程序仿真
(1)启动仿真程序。
(2)利用Configuration|CPU Type选择合适的CPU类型,如附图2所示。(仿真软件不同类型的CPU支持的指令略有不同,某些214不支持的仿真指令226可能支持)
附图2 CPU类型的选择
(3)模块扩展(不需要模块扩展的程序该步骤可以省略)
在模块扩展区的空白处点击,弹出模块组态窗口,如附图3所示。在窗口中列出了可以在仿真软件中扩展的模块。选择需要扩展的模块类型后,点击Accept按钮即可。
不同类型CPU可扩展的模块数量是不同的,每一处空白只能添加一种模块。
附图3 模块组态窗口
扩展模块后的仿真软件界面如附图4所示。
附图4 扩展模块后的仿真界面
(4)程序加载
选择仿真程序的Program|Load Program命令,打开加载梯形图程序窗口如附图5所示,仅选择Logic Block(梯形图程序)和Data Block(数据块)。
点击Accept按钮,从文件列表框分别选择awl文件和文本文件(数据块默认的文件格式为dbl文件,可在文件类型选择框中选择