您现在的位置是:首页 > PLC技术 > PLC技术

S7-300/400日期时间中断组织块

来源:艾特贸易2017-06-05

简介S7-400CPU 可以使用的日期时间中断 OB(OB10~OB17) 的个数与 CPU 的型号有关。 CPU 318 只能使用 OB10 和 OB11 ,其余的 S7-300 CPU 只能使用 OB10 。 日期时间中断 OB 可以在某一特定的日期和时间执行

    S7-400CPU可以使用的日期时间中断OB(OB10~OB17)的个数与CPU的型号有关。CPU 318只能使用OB10OB11,其余的S7-300 CPU只能使用OB10

    日期时间中断OB可以在某一特定的日期和时间执行一次,也可以从设定的日期时间开始,周期性地重复执行,例如每分钟、每小时,每天、甚至每年执行一次。可以用SFC 28~SFC 30取消、重新设置或激活日期时间中断。

    只有设置了中断的参数,并且在相应的组织块中有用户程序存在,日期时间中断才能被执行。如果不满足上述条件,操作系统将会在诊断缓冲区中产生一个错误信息,并执行异步错误处理。如果设置从131日开始每月执行一次OB10,只在有31天的那些月启动它。

    日期时间中断在PLC暖启动或热启动时被激活,而且只能在PLC启动过程结束之后才能执行。暖启动后必须重新设置日期时间中断。

    为了启动日期时间中断,用户首先必须设置日期时间中断的参数,然后再激活它。有以下三种方法可以启动日期时间中断:

   1)在用户程序中用SFC 28SET_TINT”和SFC 30ACT_TINT”设置和激活日期时间中断(见例6-2)。

   2)STEP 7中打开硬件组态工具,双击机架中CPU模块所在的行,打开设置CPU属性的对话框,点击“时刻中断”(日期时间中断)选项卡(见图6-20),设置启动时间日期中断的日期和时间,选中“激活”多选框,在“执行”列表框中选择执行方式。将硬件组态数据下载到CPU中,可以实现日期时间中断的自动启动。

    6-20    日期时间中断的组态

   3)用上述方法设置日期时间中断的参数,但是不选择“激活”,而是在用户程序中用SFC30ACT_TINT”激活日期时间中断。

    可以调用SFC 31QRY_TINT”,通过状态字节来查询设置了哪些日期时间中断,以及这些中断什么时候发生。

   SFC 28SET_TINT”用来设置日期时间中断,参数“PERIOD”如果为十六进制数W#16#0000W#16#0201W#16#0401W#16#1001W#16#1201W#16#1401W#16#1801W#16#2001,分别表示执行一次、每分钟、每小时、每天、每周、每月、每年和月末执行一次日期时间中断。

    可以用SFC 29CAN_TINT”取消(禁止)日期时间中断,用SFC 30ACT_TINT”重新激活日期时间中断。

    【例6-2  I0.0的上升沿时启动日期时间中断OB10,用I0.1禁止日期时间中断,从2008888时开始,每分钟中断一次,每次中断将MW21

    STEP 7中生成项目“OB10例程”。下面是用STL编写的OB1的程序代码,它有一个用户生成的临时局部变量“OUT_TIME_DATE”。

   IEC功能D_TOD_TD( FC3)在程序编辑器左边窗口的文件夹\Libraries\Standard  Library\IEC Function Blocks中。程序段1:查询OB10的状态

   CALLQRY_TINT   //调用SFC 31,查询日期时间中断OB10的状态

   OB NR  =10    //日期时间中断OB的编号

   RET_VAL=MW208    //保存执行时可能出现的错误代码,为0时无错误

   STATUS  =MW16    //保存日期时间中断的状态字,MB17为低字节

程序段2:合并日期时间

   CALL  D_TOD_DT   //调用IEC功能FC 3

   IN1    =D#2008-8-8    //设置启动中断的日期

   IN2    =TOD#800.0    //设置启动中断的时间

   RET VAL=#OUT TIMEDATE//将日期和时间合并

程序段3:在I0.0的上升沿设置和激活日期时间中断

   A    1    0.0

   FP    M    1.0   //检测I0.0的上升沿

   AN    M    17.2   //如果日期时间中断未被激活,M17.2的常闭触点闭合

   A    M17.4    //如果装载了日期时间中断OBM17.4的常开触点闭合

   JNB  m005    //没有同时满足以上3个条件则跳转

   CALLSET TINT   //同时满足则调用SFC 28,设置日期时间中断参数

   OB NR  =10    //日期时间中断OB编号

   SDT    =#OUT_TIME_DATE  //启动中断的时间,秒和毫秒被省略(置为0)

   PERIOD  =W#16#201    //设置产生中断的周期为每分钟一次

   RET VAL=MW200    //保存执行时可能出现的错误代码,为0时无错误

   CALL  ACT TINT   //调用SFC 30,激活日期时间中断

   OB NR  =10    //日期时间中断OB编号

   RET_VAL=MW204    //保存执行时可能出现的错误代码,为0时无错误

m005    NOP    0

程序段4:在I0.1的上升沿禁止日期时间中断

   A    1    0.1

   FP    M    1.1   //检测I0.1的上升沿

   JNB    m004    //不是I0.1的上升沿则跳转

   CALL    CAN TINT   //调用SFC 29,禁止日期时间中断

   OB NR  =10    //日期时间中断OB编号

   RET VAL=MW210    //保存执行时可能出现的故障代码,为0时无故障

m004    NOP    0

    下面是用STL编写的OB10中断程序,每分钟MW2被加1一次。

程序段1

   LMW  2

   +    1

   TMW  2

    可以用PLCSIM仿真软件运行上述例程,运行时监视M 17.2M 17.4MW2M 17.21时表示日期时间中断被激活,M17.41时表示已经装载了日期时间中断组织块OB10。用I0.0激活日期时间中断,M17.2变为1状态,如果超过设置的时间,每分钟MW2将被加1。用I0.1禁止日期时间中断,M17.2变为0状态,MW2停止加1