回复:利用OB35自己写的计时器出现小数问题

郑道成

  • 帖子

    40
  • 精华

    0
  • 被关注

    20

论坛等级:游侠

注册时间:2015-05-12

普通 普通 如何晋级?

发布于 2018-03-19 23:47:20

12楼

FUNCTION_BLOCK "DFM_Timer"

TITLE =

{ S7_m_c := 'true'; S7_read_back := 'true' }

AUTHOR : NVS_ZDC

FAMILY : UB_DFM

NAME : DFM_Time

VERSION : 0.1



VAR_INPUT

  SampleTime { S7_sampletime := 'true'; S7_visible := 'false' }: REAL ;

  Factor { S7_m_c := 'true'; S7_read_back := 'true' }: INT ; //0=Sec,1=Min,2=Hou,3=Day

  FullStop { S7_m_c := 'true'; S7_read_back := 'true' }: BOOL ; //0=Not Stop,1=Stop

  Reset { S7_contact := 'true' }: BOOL ; //Reset Timer

  Start { S7_contact := 'true' }: BOOL ; //Start Timer

  SP : REAL ; //Setpoint

END_VAR

VAR_OUTPUT

  Time_Out { S7_m_c := 'true'; S7_contact := 'true' }: REAL ;

  SP_Out : REAL ;

  TimeReached { S7_contact := 'true' }: BOOL ;

  Sec { S7_read_back := 'true'; S7_m_c := 'true' }: REAL ;

  Min { S7_read_back := 'true'; S7_m_c := 'true' }: INT ;

  Hour { S7_m_c := 'true'; S7_read_back := 'true' }: INT ;

  Day { S7_m_c := 'true'; S7_read_back := 'true' }: DINT ;

END_VAR

VAR

  CycleTime : INT ;

  MinTimes : INT ;

  TimeTemp : REAL ;

END_VAR

BEGIN

NETWORK

TITLE =


//Start Timer

      A     #Start; 

      AN(   ; 

      A     #TimeReached; 

      A     #FullStop; 

      )     ; 

      JCN   N01; 

      L     #CycleTime; 

      L     1; 

      +I    ; 

      T     #CycleTime; 

N01:  NOP   0; 


//CycleTimes of 1 Minute

      L     6.000000e+001; 

      L     #SampleTime; 

      /R    ; 

      RND   ; 

      DTB   ; 

      BTI   ; 

      T     #MinTimes; 


//Minute

      L     #CycleTime; 

      L     #MinTimes; 

      >=I   ; 

      JCN   N02; 

      L     0; 

      T     #CycleTime; 

      L     #Min; 

      L     1; 

      +I    ; 

      T     #Min; 

N02:  NOP   0; 


//Second

      L     #CycleTime; 

      ITD   ; 

      DTR   ; 

      L     #SampleTime; 

      *R    ; 

      T     #Sec; 


//Hour

      L     #Min; 

      L     60; 

      >=I   ; 

      JCN   N03; 

      L     0; 

      T     #Min; 

      L     #Hour; 

      L     1; 

      +I    ; 

      T     #Hour; 

N03:  NOP   0; 


//Day

      L     #Hour; 

      L     24; 

      >=I   ; 

      JCN   N04; 

      L     0; 

      T     #Hour; 

      L     #Day; 

      L     L#1; 

      +D    ; 

      T     #Day; 

N04:  NOP   0; 


      A     #Reset; 

      JCN   N05; 

      L     0; 

      T     #CycleTime; 

      T     #Sec; 

      T     #Min; 

      T     #Hour; 

      L     L#0; 

      T     #Day; 

      R     #Reset; 

N05:  NOP   0; 



NETWORK

TITLE =


//Factor==Sec

      L     #Factor; 

      L     0; 

      ==I   ; 

      JCN   N11; 

      L     #Sec; 

      T     #TimeTemp; 

      L     #Min; 

      L     60; 

      *I    ; 

      ITD   ; 

      DTR   ; 

      L     #TimeTemp; 

      +R    ; 

      T     #TimeTemp; 

      L     #Hour; 

      ITD   ; 

      L     L#3600; 

      *D    ; 

      DTR   ; 

      L     #TimeTemp; 

      +R    ; 

      T     #TimeTemp; 

      L     #Day; 

      L     L#86400; 

      *D    ; 

      DTR   ; 

      L     #TimeTemp; 

      +R    ; 

      T     #Time_Out; 

N11:  NOP   0; 


//Factor==Min

      L     #Factor; 

      L     1; 

      ==I   ; 

      JCN   N12; 

      L     #Sec; 

      L     6.000000e+001; 

      /R    ; 

      T     #TimeTemp; 

      L     #Min; 

      ITD   ; 

      DTR   ; 

      L     #TimeTemp; 

      +R    ; 

      T     #TimeTemp; 

      L     #Hour; 

      L     60; 

      *I    ; 

      ITD   ; 

      DTR   ; 

      L     #TimeTemp; 

      +R    ; 

      T     #TimeTemp; 

      L     #Day; 

      L     L#1440; 

      *D    ; 

      DTR   ; 

      L     #TimeTemp; 

      +R    ; 

      T     #Time_Out; 

N12:  NOP   0; 


//Factor==Hour

      L     #Factor; 

      L     2; 

      ==I   ; 

      JCN   N13; 

      L     #Sec; 

      L     3.600000e+003; 

      /R    ; 

      T     #TimeTemp; 

      L     #Min; 

      ITD   ; 

      DTR   ; 

      L     6.000000e+001; 

      /R    ; 

      L     #TimeTemp; 

      +R    ; 

      T     #TimeTemp; 

      L     #Hour; 

      ITD   ; 

      DTR   ; 

      L     #TimeTemp; 

      +R    ; 

      T     #TimeTemp; 

      L     #Day; 

      L     L#24; 

      *D    ; 

      DTR   ; 

      L     #TimeTemp; 

      +R    ; 

      T     #Time_Out; 

N13:  NOP   0; 


//Factor==Day

      L     #Factor; 

      L     3; 

      ==I   ; 

      JCN   N14; 

      L     #Sec; 

      L     8.640000e+004; 

      /R    ; 

      T     #TimeTemp; 

      L     #Min; 

      ITD   ; 

      DTR   ; 

      L     1.440000e+003; 

      /R    ; 

      L     #TimeTemp; 

      +R    ; 

      T     #TimeTemp; 

      L     #Hour; 

      ITD   ; 

      DTR   ; 

      L     2.400000e+001; 

      /R    ; 

      L     #TimeTemp; 

      +R    ; 

      T     #TimeTemp; 

      L     #Day; 

      DTR   ; 

      L     #TimeTemp; 

      +R    ; 

      T     #Time_Out; 

N14:  NOP   0; 


NETWORK

TITLE =


      L     #Time_Out; 

      L     #SP; 

      >=R   ; 

      =     #TimeReached; 

      L     #SP; 

      T     #SP_Out; 


END_FUNCTION_BLOCK


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。