• 1
新闻资讯
所在位置:首页 > 技术资料

西门子S7-200PLC特殊继电器用法 西门子S7-200编程中子程序需注意什么

发布日期:2017-8-6 12:48:35 浏览次数:3193 [返回]

西门子S7-200PLC特殊继电器用法 西门子S7-200编程中子程序需注意什么

有些辅助继电器具有特殊功能或存储系统的状态变量、有关的控制参数和信息,我们称为特殊标志继电器。用户可以通过特殊标志来沟通PLC与被控对象之间的信 息,如可以读取程序运行过程中的设备状态和运算结果信息,利用这些信息用程序实现一定的控制动作。用户也可通过直接设置某些特殊标志继电器位来使设备实现某种功能。

特殊标志继电器用“SM”表示,特殊标志继电器区根据功能和性质不同具有位、字节、字和双字操作方式。其中SMB0、SMB1为系统状态字,只能读取其中的状态数据,不能改写,可以位寻址。系统状态字中部分常用的标志位说明如下:

SM0.0:始终接通;

SM0.1:首次扫描为1,以后为0,常用来对程序进行初始化;

SM0.2:当机器执行数学运算的结果为负时,该位被置1;

SM0.3:开机后进入RUN方式,该位被置1一个扫描周期;

SM0.4:该位提供一个周期为1分钟的时钟脉冲,30秒为1,30秒为0;

SM0.5:该位提供一个周期为1秒钟的时钟脉冲,0.5秒为1,0.5秒为0;

SM0.6:该位为扫描时钟脉冲,本次扫描为1,下次扫描为0;

SM1.0:当执行某些指令,其结果为0时,将改位置1;

SM1.1:当执行某些指令,其结果溢出或为非法数值时,将改位置1;

SM1.2:当执行数学运算指令,其结果为负数时,将改位置1;

SM1.3:试图除以0时,将改位置1;

S7-200中SM0.0的用法:

1、SM0.0在程序运行时始终为ON。

2、SM0.0是一个无条件的常闭触点,用来启动无条件运行的指令。

只要上电,SM0.0必然是“1”。因此程序中那些不受任何条件限制,必须要执行的指令就用它作为触发触点。

3、问:程序有时要在指令前加SM0.0,为什么不直接连在母线上,不是一样吗?

******答案:

因为,S7-200的指令是不能直接连在“母线”上的,这不符合语法要求。

SM0.0是不可控的触点,适用于无条件触发的场合,并非每个指令都需要SM0.0。在其它场合,要用可控制的触点来触发指令,如I0.0、M0.0或各种比较指令等等。如果没有可控触点可用,就只能用SM0.0。

其他答案:

a、S7200编程中有规定,在输出类指令前必须有触点指令,有的时候输出指令不需要条件直接输出为1,但为了满足这样的编程约定就串连常为1的sm0.0在前面。

b、不同PLC厂家都有自己语法规定,SIEMENS S7-200梯形图就这样要求的,不能母线直接连输出指令(或子程序调用)。

c、一个程序用不用SM0.0在于多方面的需要,如果你不需要也能完成控制要求那不用当然好了。不过对于一些指令你还是非用它不可呢!另外在调试程序时它还是你的好帮手呢!

基本指令

一 关于状态字(SM)

01 SMB0包括8个状态位(SM0.0/SM0.1/SM0.2/SM0.3/SM0.4/SM0.5/SM0.6/SM0.7)

02 SMB1 包含了各种潜在的错误提示,可在执行某些指令或执行出错时由系统自动对相应进行置位或复位.

03 SMB2 在自由接口通信时,自由接口接收字符的缓冲区.

04 SMB3 在自由接口通信时,发现接收到的字符中有奇偶效验错误时,可将SM3.0置位.

05 SMB4 标志中断队列是否溢出或通信接口使用状态.

06 SMB5 标志I/O系统错误.

07 SMB6 CPU模块识别(ID)寄存器.

08 SMB7 系统保留

09 SMB8-SMB21 I/O模块识别和错误寄存器,按字节对形式(相邻两个字节)存储扩展模块0-6的模块类型、I/O类型、I/O点数和测得的各模块I/O错误.

10 SMB22-SMB26 记录系统扫描时间.

11 SMB28-SMB29 存储CPU模块自带的模拟电位器所对应的数字量.

12 SMB30-SMB130 SMB30为自由接口通信时,自由接口0的通信方式控制字节;SMB130为自由接口通信时,自由接口1的通信方式控制字节;两字节可读可写。

13 SMB31-SMB32 永久存储器(EEPROM)写控制.

14 SMB34-SMB35 用于存储定时中断的时间间隔.

15 SMB36-SMB65 高速计数器HSC0、HSC1、HSC2的监视及控制寄存器.

16 SMB66-SMB85 高速脉冲输出(PTO/PWM)的监视及控制寄存器.

17 SMB86-SMB94 自由接口通信时,接口0或接口1接收信息状态寄存器.

18 SMB186-SMB194 自由接口通信时,接口0或接口1接收信息状态寄存器.

19 SMB98-SMB99 标志扩展模块总线错误号.

20 SMB131-SMB165 高速计数器HSC3、HSC4、HSC5的监视及控制寄存器.

21 SMB166-SMB194 高速脉冲输出(PTO)包络定义表.

22 SMB200-SMB299 预留给智能扩展模块,保存其状态信息.

使用西门子S7-200编程中子程序需注意什么

在S7-200编程中,子程序想必大家都用过,使用子程序可以更好地组织程序结构,便于阅读和调试,也可以缩短程序代码。但是使用子程序也有一些需要注意的地方,除了子程序在同一周期内被多次调用时,不能使用上升沿、下降沿、定时器和计数器之外,还有子程序中局部变量的特点,在编程多次调用带参数子程序时要特别注意。下面就是前些天热线上遇到的一个Case,非常有代表性,在这里跟大家分享。

E:您好,西门子技术支持。

C:您好,我想问下,200子程序是不是多次调用时会不好使?

E:不会啊,您是不是在子程序里使用了沿指令或者定时器?

C:没有啊,我就编了一句很简单的开关程序,开关闭合,线圈导通,然后主程序里调用了两次这个子程序,结果第一个I点闭合了,两个Q点都导通了。

E:(心里活动:看来是和子程序的局部变量有关了,估计客户程序逻辑有问题)那请您描述一下您的子程序吧,我帮您看看。

于是客户描述了一下自己的程序,大致了解了之后告知客户我这边测试下,稍后回复。

客户的程序是这样的:

子程序:是个常见的自保持逻辑,接口参数如红框所示。

图. 01

主程序:调用了两次上面的子程序,实现I0.0和I0.1控制Q0.0的闭合和断开,I0.2和I0.3控制Q0.1的闭合和断开。

图. 02

那么在线测试下程序执行情况,发现果然如客户所描述的,I0.0为1后,Q0.0和Q0.1都为1了。见下图.03所示。而如果闭合I0.2,则Q0.0和Q0.1都断开。

图. 03

为什么会这样呢?首先我们先明确子程序局部变量的特点。局部变量的变量类型分为四种:IN,IN_OUT,OUT和TEMP,局部变量存储区是在子程序调用时开辟的,子程序调用完成,局部变量占用的存储空间释放。

我们来分析下客户的子程序。

在主程序第一次调用子程序时,如果I0.0为1,I0.1为0,它们将自身值分别传给输入局部变量#AA和#BB,子程序中程序逻辑执行如下图.04所示。此时局部变量#CC值为1,子程序完成,#CC将值传送到输出参数Q0.0上,使其置1。根据局部变量的特点,子程序第一次调用完成后,局部变量存储区释放。

图.04

那么当主程序第二次调用该子程序时,开辟临时存储空间,但是此时的存储空间与第一次调用时开辟的不一定一致。可是,也有可能由于程序简单,仍然使用第一次调用时占用的存储空间。如果这种情况发生了,那么第一次调用时已经将#CC的L0.2置了1,而此值依旧存在,那么第二次调用时虽然输入参数I0.2和I0.3为0 ,但是#CC(L0.2)为1,由于客户的子程序逻辑有自保持部分,所以最后L0.2的逻辑结果仍然是1。子程序完成后,#CC将值传送到输出参数Q0.1上,使其置1。所以就会出现客户反映的那种问题。

那么该如何避免这种情况呢?

大家是否还记得刚刚介绍局部变量参数类型时除了IN, OUT类型外,还有一种类型叫IN_OUT,这种类型的参数是先读入,然后再写出,这里我们就可以利用它的特点解决上面的问题。

下面对子程序的参数进行修改,将原先的#CC变量类型改为IN_OUT。如下图所示:

图.05

主程序结构不变,如下所示,可以看到由于#CC的类型是IN-OUT,它在子程序块的接口位置也转到了左侧输入侧。

图.06

下面再次将I0.0置1,其他输入都为0,监控程序状态,如图.07所示,可以看到只有Q0.0为1,Q0.1状态为0。而如果将I0.1置1, Q0.0被复位,Q0.1还是0,这样就符合客户的控制要求了。

图.07

同样,如果只给I0.2置1,那么也只有Q0.1会亮,不会再影响Q0.0。

了解了IN_OUT类型变量的特点,就不难分析以上的结果。因为每次调用子程序时,局部变量#CC都会先去读取输入参数Q0.0或Q0.1的状态,所以即使两次调用子程序时,#CC变量使用的同一区域,该区域的值也会在开始被Q点的状态所修改,就不存在两次调用相互影响的情况了。

另外,如果在子程序一开始就添加一条指令,对局部变量#CC进行赋初值(如图.08),也可以避免临时变量区数值不定的问题,您可以尝试测试下。

图.08

所以,在编写200子程序时要特别注意局部变量的特点,一旦出现多次调用不正常的情况,就可以从局部变量的特点出发分析,看看是不是存在隐患。善加利用IN_OUT变量也许可以解决许多问题。

以下是相关提问:

1、如何查看西门子plc中特殊继电器的功能?


特殊标志继电器用“SM”表示,特殊标志继电器区根据功能和性质不同具有位、字节、字和双字操作方式。其中SMB0、SMB1为系统状态字,只能读取其中的状态数据,不能改写,可以位寻址。系统状态字中部分常用的标志位说明如下:SM0.0:始终接通;SM0.1:首次扫描为1,以后为0,常用来对程序进行初始化;SM0.2:当机器执行数学运算的结果为负时,该位被置1; SM0.3:开机后进入RUN方式,该位被置1一个扫描周期;SM0.4:该位提供一个周期为1分钟的时钟脉冲,30秒为1,30秒为0; SM0.5:该位提供一个周期为1秒钟的时钟脉冲,0.5秒为1,0.5秒为0;SM0.6:该位为扫描时钟脉冲,本次扫描为1,下次扫描为0;SM1.0:当执行某些指令,其结果为0时,将改位置1;SM1.1:当执行某些指令,其结果溢出或为非法数值时,将改位置1;SM1.2:当执行数学运算指令,其结果为负数时,将改位置1; SM1.3:试图除以0时,将改位置1;

2、西门子S7-200子程序密码怎么解开的?


只要覆盖“datamanagers200.dll”文件就可以了,不过要注意不同版本MicroWIN 有不同的“datamanagers200.dll”文件。覆盖路径C:\Program Files\Siemens\STEP 7-MicroWIN V4.0\bin

分享给好友: 0
友情链接:西门子(中国) | 厦门力和行光电 | 厦门宾源电子发展有限公司 | 艾默生 | 上海威图电子技术 |
版权所有 © 2015 福建省加一伟业机电有限公司 工信备案: 闽ICP备15001784号-1 公安备案: 技术支持:厦门易尔通网络科技有限公司
在线客服
在线客服 Online Service x

在线客服

QQ在线客服 QQ在线客服

技术支持

点我放大
福建省加一伟业机电有限公司