关于sfc0和sfc1的问题

已锁定

dragonwill

  • 帖子

    2
  • 精华

    0
  • 被关注

    0

论坛等级:新手

注册时间:2005-04-21

普通 普通 如何晋级?

关于sfc0和sfc1的问题

810

4

2005-11-23 11:14:07

//Addresses Used


//Address  Meaning
//I      0.0 Input to read a variable time into MD 0
//I      0.1 Input to set the time
//MW 0 Date, can be changed via STATUS VAR
//MD  2 Time, can be changed via STATUS VAR
//MW 6 Current date
//MW 8 Current day
//MD  10     Current time of day
//***********************************************************************************


FUNCTION FC 10 : VOID


TITLE = CPU- Set and read CPU time


VERSION : 1.0


VAR_TEMP


IN_TIME : TIME_OF_DAY ; //TOD actual parameter
OUT_TIME : TIME_OF_DAY ; //TOD actual parameter
IN_DATE : DATE ; //DATE actual parameter
OUT_DATE : DATE ; //DATE actual parameter
IN_TIME_DATE  : DATE_AND_TIME ;  //DT actual parameter
OUT_TIME_DATE  : DATE_AND_TIME ; //DT actual parameter
CUR_RETVAL : INT ; //Current return value
END_VAR


BEGIN


NETWORK
TITLE = Save the required time and date
// in the temporary variables
 L D#1997-1-20 ; //Specify date as constant
 AN I 0.0 ;  //if I 0.0 = 0; variable value in MW 0 if I 0.0 = 1
 JC nko1 ;
 L MW 0 ;  //Specify value in MW 0 as date
    //(change via STATUS VAR)
nko1: T #IN_DATE ; 
 L TOD#13:30:0.0 ; // Specify time as constant
 AN I 0.0 ;  // if I 0.0=0; variable value in MD 2 if I 0.0 = 1
 JC nko2 ;
 L MD 2;   // Specify value in MD 2 as time


//(change via STATUS VAR)
nko2: T #IN_TIME ;  


NETWORK
TITLE = Combine date and time
// to the output variable (format DATE_AND_TIME)
 CALL FC 3  // Standard FC3 "D_TOD_DT" (conversion D and TOD
    // to DT)
   (IN1  := #IN_DATE, //Combines date from input variable (format DATE)
    IN2  := #IN_TIME, //and time from input variable
    RET_VAL := #IN_TIME_DATE); //(Format TIME_OF_DAY)
    //to form output variable
    //(format DATE_AND_TIME)


NETWORK
TITLE = Set time at positive edge


A I 0.1 ;  // Set time if positive edge at I 0.1
 FP M 255.1 ;
 = M 255.0 ;  // Edge memory bit



NETWORK
TITLE = Set time at positive edge
 A      I  0.1 ;  //Set time if positive edge at I 0.1
 FP    M 255.1 ;   
 = M 255.0 ; //Edge memory bit


NETWORK
TITLE = Set the time
 A M 255.0 ;  // Set time if M 255.0=1 (positive edge)
 JNB _005 ; 
 CALL SFC 0  // SFC 0 "SET_CLK" (set time-of-day interrupt)
   (PDT  := #IN_TIME_DATE, // Current date and time
    RET_VAL := MW 200); // Contains error code (if SFC processing faulty)
_005: A BR;
 = Q 4.0 ;  // Q 4.0=1 if setting time OK


NETWORK
TITLE = Read time
 CALL SFC 1  // SFC 1 "READ_CLK" (read time)
   (RET_VAL := #CUR_RETVAL , // Contains error code
    //(if SFC processing faulty)
    CDT  := #OUT_TIME_DATE);  // Contains read time
    // and date (format DT)


NETWORK
TITLE = Extract date from format DATE_AND_TIME
 CALL FC 6  //FC6 "DT_DATE" (conversion DT to DATE)
   (IN  := #OUT_TIME_DATE, // Read time and date
    //(format DT)
    RET_VAL := #OUT_DATE); // Output variable in format DATE
    //(current date)


NETWORK
TITLE = Display current date
 L #OUT_DATE ;
 T MW 6 ;  // Display current date in MW 6


NETWORK
TITLE = Extract day from format DATE_AND_TIME
 CALL FC 7  // FC7 "DT_DAY" (conversion DT to DAY)
   (IN  := #OUT_TIME_DATE, // Read time and date
    //(format DT)
    RET_VAL := MW 8) // Display current day in MW 8


NETWORK
TITLE = Extract time from format DATE_AND_TIME
 CALL FC 8  // FC8 "DT_TOD" (conversion DT to TOD)
   (IN  := #OUT_TIME_DATE,  //Read time and date
    //(format DT)
    RET_VAL := #OUT_TIME); //Output variable in format TOD
    //(current time of day)


NETWORK
TITLE = Display current time
 L #OUT_TIME ;
 T MD 10 ;  //Display current time of day in MD 10


END_FUNCTION


//***********************************************************************************
ORGANIZATION_BLOCK OB 1
TITLE = Call FC10
VERSION : 1.0


VAR_TEMP
 SYSTEM : ARRAY [1..20] OF BYTE ;
END_VAR


BEGIN


 CALL FC 10 ;


END_ORGANIZATION_BLOCK


 


 


NETWORK
TITLE = Set time at positive edge


A I 0.1 ;  // Set time if positive edge at I 0.1
 FP M 255.1 ;
 = M 255.0 ;  // Edge memory bit



NETWORK
TITLE = Set time at positive edge
 A      I  0.1 ;  //Set time if positive edge at I 0.1
 FP    M 255.1 ;   
 = M 255.0 ; //Edge memory bit



这是sfc0中帮助中的代码,这段代码中为什么这里要写两编呢?谁能帮我看看

关于sfc0和sfc1的问题 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54617条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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