1.循环执行组织块
需要连续执行的程序应放在主程序OB1中,CPU在RUN模式时循环执行OB1,可以在OB1中调用FC和FB。
如果用户程序生成了其他程序循环OB,则CPU按OB编号的顺序执行它们,首先执行主程序OB1,然后执行编号大于等于123的程序循环OB。一般只需要一个程序循环组织块。
打开STEP7 Basic的项目视图,生成一个名为“组织块例程”的新项目。双击项目树中的“添加新设备”,添加一个新设备,CPU的型号为CPU 1214C。
打开项目视图中的文件夹“\PLC_ l\程序块”,双击其中的“添加新块”,点击打开的对话框中的“组织块”按钮(见图5.33),选中列表中的“Program cycle”,生成一个程序循环组织块,OB默认的编号为123。语言为LAD(梯形图)。块的名称为默认的Main_1。点击“确认”按钮,OB 块被自动生成,可以在项目树的文件夹“\PLC_l\程序块”中看到新生成的OB123。
图5.33 生成程序循环组织块
分别在OB1和OB123中输入简单的程序(见图5.34和图5.35)。将它们下载到CPU,将CPU切换到RUN模式后,可以用I0.4和I0.5分别控制Q0.1和Ql.0,说明OB1和OB123均被循环执行。
图5.34 OB1的程序
图5.35 OB123的程序
2.启动组织块
启动组织块用于系统初始化,CPU从STOP切换到RUN时,执行一次启动OB。执行完后,开始执行程序循环OB1。允许生成多个启动OB,默认的是OB100,其他启动OB的编号应大于等于123。一般只需要使用一个启动组织块。
在项目“组织块例程”中,用上述方法生成启动(Startup)组织块OBl00和OB124。
分别在启动组织块OB100和OB124中生成初始化程序(见图5.36)。将它们下载到CPU,将CPU切换到RUN模式后,可以看到QB0的值被OB100初始化为7,其最低3位为l。如图5.37所示。
图5.36
图5.37 QB0监视值
该项目的M区没有设置保持功能,暖启动时M区的存储单元的值均为0。启动时分别调用了一次OB100和OB124,INC指令使MB14和MBl6的值加l。生成和打开监视表,看到MB14和MB16的值均为1,说明只执行了一次OB100和OB124。
3.循环中断组织块
在设定的时间间隔,循环中断(Syclic interrupt)组织块被周期性地执行。最多可以组态4个循环中断事件,循环中断OB的编号大于等于30。
在项目Interrupt中,用上述方法生成循环中断组织块OB30(见图5.38)。在 OB 的巡视窗口的“属性”选项卡中,循环中断的时间间隔(循环时间)的默认值为 100 ms,将它修改为1000 ms,相位偏移(相移,默认值为0)用于错开不同时间间隔的几个循环中断OB,使它们不会被同时执行,以减少连续执行循环中断OB的时间。
图5.38中的程序用于控制8位彩灯循环移位,I0.2控制彩灯是否移位,I0.3控制移位的方向。I0.3为0状态时彩灯左移,为1状态时彩灯右移。(www.xing528.com)
将代码块下载到CPU,将CPU切换到RUN模式。扳动I0.2和I0.3对应的小开关,通过CPU模块上输出点的LED,可以观察到用I0.2和I0.3控制彩灯循环移位的情况。
图5.38 循环中断组织块OB30
4.SRT_DINT与CANI_DINT指令
定时器指令的定时误差较大,如果需要高精度的延时,可以使用时间延迟中断。在过程事件出现后,延时一定的时间再执行时间延迟(Time delay)OB。在指令SRT_DINT的EN使能输入的上升沿,启动延时过程。用该指令的参数DTIME(1~60 000 ms)来设置延时时间(见图5.39)。在时间延迟中断OB中使用计数器,可以得到比60 s更长的延迟时间。用参数OB_NR来指定延迟时间到时调用的 OB 的编号,S7-1200 未使用参数 SIGN,可以设置任意的值。RET_VAL是指令执行的状态代码。
图5.39 上升沿中断组织块OB40程序
在I0.0的上升沿中断组织块OB40的界面区生成局部变量RET1和RET2,数据类型为Int,用来作指令的输出参数RET_VAL(返回值)的实参(见图5.39)。
5.时间延迟中断组织块
可以组态最多4个延时中断事件,时间延迟OB的编号应大于等于20。在项目“组织块例程”中生成硬件中断组织块OB40、时间延迟组织块OB20和数据块DB1。
在I0.0上升沿调用的OB40中启动时间延迟(见图5.39),同时读取PLC的实时时间。定时时间到时调用时间延迟组织块OB20,再次读取实时时间。两次读取的实时时间的差值与时间延迟中断的输入参数DTIME(定时时间)比较,可以得到时间延迟中断的定时精度。
双击项目树中的“设备和组态”,打开设备视图,首先选中CPU,打开工作区下面的巡视窗口的“属性”选项卡,选中左边的“数字输入”的通道0(即I0.0,见图5.40),用复选框启用上升沿检测功能。点击选择框“硬件中断”右边的▼按钮,用下拉式列表将名为“Hardware interrupt”的OB40指定给I0.0的上升沿中断事件。
图5.40 组态硬件中断
在OB40中调用SRT_DINT(见图 5.39),启动时间延迟中断的定时,同时调用指令RD_LOC_T,读取PLC的实时时钟的日期时间,保存在输入参数OUT指定的DB1的变量DT1中,其起始地址为DBB0(见图5.41)。
图5.41 数据块中的日期时间值
在时间延迟中断组织块OB20和OB1的界面区生成局部变量RET1,数据类型为Int,用来作指令的参数RET_VAL的实参(见图5.42和图5.43)。调用RD_LOC_T指令读取日期时间,保存在输出参数OUT指定的DBl的变量DT2中,其起始地址为DBB12。同时立即置位物理输出点Q0.4:P。
图5.42 时间延迟中断组织块OB20的程序
图5.43 OB1中取消时间延迟的程序
将程序块和组态信息下载到CPU,将CPU切换到RUN模式。用外接的小开关使I0.0变为l状态,CPU调用硬件中断组织块OB40。10 s后SRT_DINT启动的定时时间到,CPU调用时间延迟中断组织块OB20,Q0.4被立即置位。双击打开项目树中的DB1,点击工具栏上的按钮,启动在线监视功能。可以看到指令SRT_DINT启动定时和定时时间到两次读取的实时时间的差值为10.000 110 s(见图5.41),与时间延迟的设置值10 s相比,定时精度是相当高的。
用I0.4外接的小开关产生一个脉冲信号,将Q0.4复位。用外接的小开关使I0.0变为l状态,CPU调用硬件中断组织块OB40,再次启动时间延迟中断的定时。在定时期间,用外接的小开关使I0.1变为l状态,调用指令CAN_DINT(见图5.43),时间延迟中断被取消,不会调用OB20,l0s的延迟时间到了后,Q0.4不会变为1状态。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。