一段精彩的S7-400程序1 点击:554 | 回复:3



苏邑波

    
  • 精华:1帖
  • 求助:0帖
  • 帖子:11帖 | 272回
  • 年度积分:0
  • 历史总积分:444
  • 注册:2004年7月06日
发表于:2010-05-19 22:46:33
楼主

set K1 and K2 constants based upon BIPOLAR
SET                                                                                           // if(BIPOLAR=0)
A #BIPOLAR                                                                             // .
JC EL01                                                                                   // {
L 0.000000e+000                                                                  // K1=0
T #K1                                                                                        // .
JU EI01                                                                                 // } else {
EL01: L -2.764800e+004                                                  // K1=-27648.0
T #K1                                                                                     // .
EI01: NOP 0        &




苏邑波

  • 精华:1帖
  • 求助:0帖
  • 帖子:11帖 | 272回
  • 年度积分:0
  • 历史总积分:444
  • 注册:2004年7月06日
发表于:2010-05-19 22:47:17
1楼
set K1 and K2 constants based upon BIPOLAR
SET // if(BIPOLAR=0)
A #BIPOLAR // .
JC EL01 // {
L 0.000000e+000 // K1=0
T #K1 // .
JU EI01 // } else {
EL01: L -2.764800e+004 // K1=-27648.0
T #K1 // .
EI01: NOP 0 // }
L 2.764800e+004 // K2=+27648.0
T #K2 // .

// convert input (IN) to real

L #IN // ACC1=IN
ITD // convert to double integer
DTR // convert to real
T #IN_REAL // IN_REAL-IN as a real

// determine SPAN = HI_LIM - LO_LIM

L #HI_LIM // SPAN=HI_LIM-LO_LIM
L #LO_LIM // .
-R // .
T #SPAN // .

// If the input value is outside the K1 and K2 range, the output
// is clamped to the nearer of either the LO_LIM or the HI_LIM
// and an error is logged. If the input value is exactly at a limit the
// output will be set to the computed limit with no error returned.
// changed 2/14/00 by ERI per RQ210693
L #IN_REAL // if(IN_REAL<K1)
L #K1 // .
>=R // .
JC EL02 // {
L 8 // error
T #RET_VAL // .
L #LO_LIM // ACC1=LO_LIM
T #OUT // OUT=ACC1
JU FAIL // error
EL02: POP // } else {
L #K2 // if(IN_REAL>K2)
<=R // .
JC EI04 // {
L 8 // error
T #RET_VAL // .
L #HI_LIM // ACC1=HI_LIM
T #OUT // OUT=ACC1
JU FAIL // error
EI04: NOP 0 // }
NOP 0 // }

// scale the input

L #K2 // TEMP1=K2-K1
L #K1 // .
-R // .
T #TEMP1 // .
L #IN_REAL // IN_REAL-K1
L #K1 // .
-R // .
L #TEMP1 // divide by TEMP1
/R // .
L #SPAN // multiply by SPAN
*R // .
L #LO_LIM // add LO_LIM
+R // .
T #OUT // OUT=scale(IN_REAL)

// set BR bit : no error-set BR bit to 1; with error-set BR bit to 0.

L 0 // return error code 0
T #RET_VAL
SET // RLO = 1 (NO ERROR)
JU SVBR //
FAIL: CLR // RLO = 0 (ERROR)
SVBR: SAVE // BR = RLO

caoyc1120

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:13
  • 注册:2009年4月10日
发表于:2010-08-15 11:27:51
2楼

楼主,你发的这段程序我看不太懂啊

苏邑波

  • 精华:1帖
  • 求助:0帖
  • 帖子:11帖 | 272回
  • 年度积分:0
  • 历史总积分:444
  • 注册:2004年7月06日
发表于:2015-01-12 13:03:02
3楼

多看看西门子例程,搞清每个命令,就会懂了


热门招聘
相关主题

官方公众号

智造工程师