【分享】写了一个整数转S5TIME格式FC块,时间基数可以设置毫秒,秒,分钟,小时(简单型)

已锁定

菲戈

  • 帖子

    5906
  • 精华

    63
  • 被关注

    587

论坛等级:至圣

注册时间:2009-01-22

黄金 黄金 如何晋级?

【分享】写了一个整数转S5TIME格式FC块,时间基数可以设置毫秒,秒,分钟,小时(简单型)

4917

14

2015-12-09 14:07:05

star star star

用Easy Screen(用户扩展界面)给840D做界面的朋友一定有都会遇到,如果要在HMI设置一个PLC定时器的话一定需要转换。因为HMI数据类型不支持S5TIME格式(S7300 PLC的定时器的时间格式)。这里面就需要用到一个数据类型转换。我参照了FC40自己写了一个整数转S5TIME格式,方便简单应用。

有错误@zhangli0 请指出详细如下:


时基为ms,范围10ms~9990ms

时基为s,范围0~999s

时基为M,范围0~166

时基为h 0~2(这个估计用户不大)

好了,废话不多说了上源码:



FUNCTION FC 140 : S5TIME

TITLE =int  to S5 Time

VERSION : 0.1


VAR_INPUT

  Int_Time : INT ; //输入值及范围H<=2 M<=166 S<=999 10<=MS<=9990 

  Time_base : INT ; //时基 0=:ms,1=:s,2=:m,3=h 

END_VAR

VAR_TEMP

  y_Base : BYTE ;

  W_Temp : WORD ;

  I_Temp : INT ;

END_VAR

BEGIN

NETWORK

TITLE =


      L     #Time_base; 

      L     0; 

      ==I   ; // 单位为ms

      JC    T_MS; 

      L     #Time_base; 

      L     1; 

      ==I   ; // 单位为S

      JC    T_S; 

      L     #Time_base; 

      L     2; 

      ==I   ; // 单位为M

      JC    T_M; 

      L     #Time_base; 

      L     3; 

      ==I   ; // 单位为H

      JC    T_H; 

T_MS: L     0; //时基设置10ms级别

      T     #y_Base; 

      L     #Int_Time; 

      L     0; 

      <I    ; 

      JNB   MID1; //如果小于O,就当0处理

      L     0; 

      T     #I_Temp; 

      JU    MID3; 

MID1: L     #Int_Time; 

      L     9990; 

      >I    ; 

      JNB   MID2; 

      L     999; //如果大于9990,就当9990处理

      T     #I_Temp; 

      JU    MID3; 

MID2: L     #Int_Time; 

      L     L#10; 

      /I    ; 

      T     #I_Temp; 

      JC    MID3; 

T_S:  L     2; 

      T     #y_Base; //时基 设置为1S

      L     #Int_Time; 

      L     0; 

      <I    ; 

      JNB   MID4; //如果小于O,就当0处理

      L     0; 

      T     #I_Temp; 

      JU    MID3; 

MID4: L     #Int_Time; 

      L     999; 

      >I    ; 

      JNB   MID5; 

      L     999; //如果大于999,就当999处理

      T     #I_Temp; 

      JU    MID3; 

MID5: L     #Int_Time; 

      T     #I_Temp; 

      JC    MID3; 

T_M:  L     3; //时基础改成10S

      T     #y_Base; 

      L     #Int_Time; 

      L     0; 

      <I    ; 

      JNB   MID6; //如果小于O,就当0处理

      L     0; 

      T     #I_Temp; 

      JU    MID3; 

MID6: L     #Int_Time; 

      L     166; 

      >I    ; 

      JNB   MID7; 

      L     996; //如果大于166,就166处理

      T     #I_Temp; 

      JC    MID3; 

MID7: L     #Int_Time; 

      L     6; 

      *I    ; 

      T     #I_Temp; 

      JC    MID3; 

T_H:  L     3; 

      T     #y_Base; //时基 设置为10S

      L     #Int_Time; 

      L     0; 

      <I    ; 

      JNB   MID8; //如果小于O,就当0处理

      L     0; 

      T     #I_Temp; 

      JU    MID3; 

MID8: L     #Int_Time; 

      L     2; 

      >I    ; 

      JNB   MID9; 

      L     720; //如果大于166,就166处理

      T     #I_Temp; 

      JC    MID3; 

MID9: L     #Int_Time; 

      L     360; 

      *I    ; 

      T     #I_Temp; 

      JC    MID3; 

MID3: L     #I_Temp; 

      ITB   ; 

      L     #y_Base; // Basis einblenden

      SLW   12; 

      OW    ; 

      T     #RET_VAL; 

NETWORK

TITLE =

END_FUNCTION


【分享】写了一个整数转S5TIME格式FC块,时间基数可以设置毫秒,秒,分钟,小时(简单型) 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SINUMERIK

共有24835条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

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