[西门子] 西门子 200smart子程序编程要点

[复制链接]
查看226 | 回复0 | 2024-7-10 19:47:34 | 显示全部楼层 |阅读模式
>
01
什么是子程序子程序一般用在结构化程序编程中,用于需要多次反复执行相同任务的地方,只需要编写一次子程序,别的程序在需要子程序的时候调用它,而无需重编写该程序。在编写复杂的PLC程序时,一般把程序框架划分为几个符合工艺控制的子程序块,子程序使得程序结构简单清晰,易于维护。


子程序未调用时,不会执行子程序中的指令,因此使用子程序可以减少扫描时间。在编程运用中有些程序内容需要被反复使用,可以设计成子程序的形式,并为每个子程序赋以不同的编号,在程序执行的过程中,可随时调用某个编号的子程序。


比如20台电机的起保停程序,可以通过一台台电机编写相关程序,这样重复的工作量比较大。这里,同样的结构,改变里面的软元件,一台电机改一次,效率低下。可以通过局部变量,设计出程序框架,做成子程序库。后面反复调用,一个电机调用一次,只需要改写按钮的输入点,接触器的输出点就可以,编程效率大大提高。

02
子程序编程要点在子程序中应尽量使用局部变量,避免使用全局变量(如I、Q、M、SM、Al、AQ、V、T、C、S、AC等存储器中的绝对地址),防止与其他POU地址冲突,这样做可以很方便地将子程序移植到其他项目。



子程序在执行到末尾时自动返回,不必加返回指令。当子程序返回时,返回到原主程序出口的下一条指令执行,继续向下扫描程序。子程序不能使用跳转语句跳入、跳出。200 SMART最多可以调用128个子程序,子程序中可以再调用子程序,一共可以嵌套8层 ,子程序可以带参数调用,在子程序的局部变量表中设置参数的类型。


在软件编程中,不用输入RET指令,由软件自动加在每个子程序的结束处,在子程序中不能使用END指令。不能在SBR0中调用SBR0(子程序调用本身)



为子程序定义参数
根据子程序有无参数,可以将子程序分为有参子程序和无参子程序,子程序需要带有参数时,要在该子程序的局部变量表中来定义参数。带参数子程序在程序的两边会出现输入和输出的参数引脚。



IN类型:传入子程序



IN/OUT类型:传入/传出子程序型,调用子程序时,将指定地址的参数传入子程序,子程序执行结束时,将得到的结果值返回到同一个地址。



OUT类型:传出子程序型。



TEMP类型:暂时型,也叫临时变量。用于在子程序内部暂时存储数据,不能用来与主程序传递参数数据。



变量的数据类型:BOOL、BYTE、WORD、DWORD、INT、DINT、 REAL
03
创建子程序实例采用子程序编程的方式编写简单的电动机起保停控制。


(1)打开STEP 7-MicroWIN SMART软件建立对应的局部变量表,如下图所示。




(2)程序的设计编写



(3)MIAN主程序中调用编写好的子程序





子程序库的创建
(1)在编程软件指令树中找到“库”右键选择“创建库”。





(2)输入新建库的名称以及库的保存路径。



(3)选择要创建库对应的程序块后点击添加。





(4)可以根据需要选择是否对其库文件进行密码保护。



(5)选择想要生成的版本。




(6)选择“打开库文件夹”会显示刚刚创建的库文件。


(7)选择“刷新库”后关闭软件后再次打开软件,找到库。会出现刚刚创建的库。





(8)根据需要反复不断的调用库文件,只需选择不同的实参即可。








子程序运用常见问题

1、无条件调用指令或子程序时,使用SM0.0作为使能条件,否则编译程序时可能会出现语法错误。


2、不再激活调用子程序时,则子程序不再执行,但是子程序输出保持在子程序最后一次执行的状态。



当M0.0为‘1’时,子程序执行,CPU_输入0有信号时,CPU_输出0有信号输出。此时将M0.0复位,则子程序不再执行,输出OUT1保持子程序最后一次执行的状态,不会被自动复位。


4、使用定时器或计数器的子程序,在同一时刻被调用多次或者相同编号的定时器或计数器被多个子程序使用,且同一时刻这些子程序有两个或者以上被调用,那么定时器或者计数器资源会因重叠使用而相互影响,造成程序逻辑等方面的错误。




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则