s7-200
ORGANIZATION_BLOCK 主程序:OB1
TITLE=程序注释
BEGIN
Network 1
LD I00
O M00
AN I01
= M00
Network 2
LD M00
LPS
AN T37
TON T37, 10
LPP
EU
S Q00, 1
Network 3
LD T37
SHRB Q02, Q00, 3
子程序和中断服务程序
子程序和中断服务程序都是程序的组织结构,它们和主程序一起被称为POU(程序组织单元)。
在S7-200中,每个POU可以单独加密,保护作者的知识产权。
子程序
子程序可以把整个用户程序按照功能进行结构化的组织。一个“好”的程序总是把全部的控制功能分为几个符合工艺控制规律的子功能块,每个子功能块可以由一个或多个子程序组成。这样的结构也非常有利于分步调试,以免许多功能综合在一起无法判断问题的所在;而且,几个类似的项目也只需要对同一个程序作不多的修改就能适用。
子程序在调用时会保持当前的逻辑运算结果,但是不保存累加器(ACx)的内容
子程序在执行到末尾时自动返回,不必加返回指令;在子程序中间也可以使用条件返回指令
子程序不能使用跳转语句跳入、跳出
子程序返回时,回到调用子程序的指令后面,继续执行上一级程序
S7-200 CPU最多可以调用64个子程序(CPU226为128个)
子程序可以嵌套调用,即子程序中再调用子程序,一共可以嵌套8层
在中断服务程序中不能欠套调用子程序,被中断服务程序调用的子程序中不能再出现子程序调用
子程序可以带参数调用,在子程序的局部变量表中设置参数的类型;一共可以带16个参数(形式参数)
有关子程序的详情,请看《S7-200系统手册》相关部分。
中断服务程序
中断功能是S7-200的重要功能,用及时处理与用户程序的执行时序无关的 *** 作,或者不能事先预测何时发生的“事件”。
S7-200中使用中断服务程序来响应这些内部、外部的中断事件。中断服务程序需要通过用户编程与特定的中断事件联系起来,才能工作。中断程序与子程序最大的不同是,中断服务程序不能由用户程序调用,而只能由特定的事件触发执行。
无法准确预测何时执行中断服务程序。
中断服务程序只有由用户程序把中断服务程序标号(名称)与中断事件联系起来,并且开放系统中断后才能进入等待中断并随时执行的状态
多个中断事件可以连接同一个中断服务程序;一个中断服务程序只能连接一个中断事件
中断服务程序也可由用户程序取消与中断事件的连接;队列中的特定中断事件可以被指令取消;也可用指令禁止全部中断
中断程序只需与中断事件连接一次,除非需要重新连接
进入中断服务程序时,S7-200的 *** 作系统会“保护现场”,从中断程序返回时,仍然恢复当时的程序执行状态
中断事件各有不同的优先级别
中断服务程序不能再被中断。中断程序执行时,如果再有中断事件发生,会按照发生的时间顺序和优先级排队
中断服务程序执行到末尾会自动返回,也可以由逻辑控制中途返回
S7-200 CPU最多可以使用128个中断程序,中断程序不能嵌套
在中断程序中只能调用一层子程序,中断程序中的子程序不能嵌套,否则会出错
中断程序应短小而简单,执行时对其他处理不要延时过长,即越短越好
在《S7-200系统手册》中有关中断指令的叙述十分详细,建议初学者仔细阅读。
跳转至标签(JMP)指令对程序中的指定标签(n)执行分支 *** 作。跳转接受时,堆栈顶值始终为逻辑1。标签(LBL)指令标记跳转目的地(n)的位置。您可以在主程序、子程序或中断例行程序中使用"跳转"指令。"跳转"及其对应的"标签"指令必须始终位于相同的代码段中(主程序、子程序或中断例行程序)。您不能从主程序跳转至子程序或中断例行程序中的标签,与此相似,您也不能从子程序或中断例行程序跳转至该子程序或中断例行程序之外的标签。您可以在SCR段中使用"跳转"指令,但对应的"标签"指令必须位于相同的SCR段内
常问问题
使用子程序时,为何动作只能执行一次,或者某些状态不能结束?
如果发生动作不能重复执行,或者状态不能结束(像锁死了一样),而这些功能都与子程序有关时,请检查是否有条件调用子程序。调用子程序的条件在上述动作执行后,或者进入某个状态后不再有效,无法再次“激活”,而脱离上述状态或复位的指令正好在子程序内,必然造成上述的现象。
另可参见:定时器在条件调用的子程序中
带形式参数的子程序,定义为OUT类型的变量为何会在多次调用子程序时互相干扰?
那是因为定义为OUT类型的形式参数又在子程序内部参与了运算。凡是此类参数都应当定义为IN_OUT类型。
与中断服务程序有关的计算任务,为何会偶尔得出不正确的结果?
出现这种现象的原因多是在主(子)程序和中断程序之间传递数据的机制不当。
中断程序可能在任何时刻执行,如果此时主程序(或子程序)正在对中断程序使用的数据进行 *** 作,其中间结果可能带入中断程序,造成计算结果的变化;同样地,在中断程序中产生数据也对主(子)程序中的计算有类似影响。
解决办法是保证可能产生中间结果的数据不直接参与计算:
使用STL指令计算单个中断程序使用的数据
在梯形图(LAD)编程时,用MOV(传送)指令准备最后的数据(单个数据)
准备成批的数据时,先禁止中断,完成后再允许中断
简单的数据准备或者结果计算可直接放在中断程序中进行
详情请看《S7-200系统手册》的中断指令相关章节。
中断服务程序看起来没有执行?
可以在中断程序中加一个测试程序段,如使用SM00(常为“1”)将一个输出点置位(使用Set指令),观察是否进入中断服务程序。
中断程序不执行,多数原因是初始化(连接中断事件和中断程序)的问题,或者没有“开中断”。
应该使用SM01(或沿触发)执行一次初始化,然后开中断。
什么时候执行子程序和什么时候执行中断程序并无定数,是控制对象和需求而定。中断程序由对应的中断事件触发,比如定时器、计数器或者通信等。200系列一共有33个中断事件。它和跳转指令有本质的区别的,主要体现在中断事件的产生和触发不受主程序扫描时间的影响,有更高更快的优先级
高速运算和处理的时候需要用到中断程序
以上就是关于控制3盏灯循环点亮,时间间隔1秒,有启动和停止按钮 (PLC编程 梯形图) 求大侠援助啊全部的内容,包括:控制3盏灯循环点亮,时间间隔1秒,有启动和停止按钮 (PLC编程 梯形图) 求大侠援助啊、请西门子plc高手回答,中断与跳转的区别、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)