斜坡函数发生器的SCL文件转自
http://www.ad.siemens.com.cn/club/bbs/post_history.aspx?b_id=4&a_id=505300&s_id=25&num=4
FUNCTION_BLOCK FB100
TITLE ="斜坡发生器"
KNOW_HOW_PROTECT
AUTHOR : xxzzw
VERSION : 1.0
//加减速时间 > 10S
VAR_INPUT
InValue : INT ;
AddTime : REAL ; //单位:S
DecTime : REAL ; //单位:S
TimeElapse : INT ; //单位:ms
En : BOOL := TRUE;
END_VAR
VAR_OUTPUT
OutValue : INT ;
END_VAR
VAR
TimeTemp : INT ;
RTemp : REAL ;
END_VAR
VAR_TEMP
tempint : INT ;
badd : BOOL ;
b_add : BOOL ;
END_VAR
BEGIN
NETWORK
TITLE =
A #En;
JC _001;
L 0;
T #OutValue;
T #TimeTemp;
L 0.000000e+000;
T #RTemp;
BE ;
_001: NOP 0;
L #AddTime;
L 3.000000e+000;
BEC ;
L #DecTime;
L 3.000000e+000;
BEC ;
NETWORK
TITLE =
//程式每100ms计算一次
L #TimeElapse;
L #TimeTemp;
+I ;
T #TimeTemp;
L 100;
BEC ;
L #TimeTemp;
L 100;
-I ;
T #TimeTemp;
L #InValue;
L #OutValue;
==I ;
BEC ;
NETWORK
TITLE =
// In Out In > Out
// 零 正 X -DEC
// 零 负 X +DEC
// 正 正 1 +ADD
// 正 正 0 -DEC
// 正 负 X +DEC
// 负 正 X -DEC
// 负 负 1 -ADD
// 负 负 0 +DEC
L #InValue;
L 0;
<>I ;
JC _300;
//输入为零时
L #OutValue;
L 0;
>I ;
JC _010;
L 1.638400e+003; //输入为零输出为负
L #DecTime;
/R ;
JU _002;
_010: L -1.638400e+003; //输入为零输出为正
L #DecTime;
/R ;
JU _002;
_300: L #InValue;
L 0;
JC _400;
//输入为正时
L #OutValue;
L 0;
JC _302;
L #InValue;
L #OutValue;
>I ;
JC _301;
L -1.638400e+003; //输入为正输出为正,输入<输出
L #DecTime;
/R ;
JU _002;
_301: L 1.638400e+003; //输入为正输出为正,输入>输出
L #AddTime;
/R ;
JU _002;
_302: L 1.638400e+003; //输入为正,输出为负
L #DecTime;
/R ;
JU _002;
_400: L #OutValue;
L 0;
<=I ;
JC _401;
L -1.638400e+003; //输入为负,输出为正-DEC
L #DecTime;
/R ;
JU _002;
_401: L #InValue;
L #OutValue;
>I ;
JC _402;
L -1.638400e+003; //输入为负,输出为负,输入< 输出
L #AddTime;
/R ;
JU _002;
_402: L 1.638400e+003; //输入为负,输出为负,输入>输出
L #DecTime;
/R ;
_002: L #RTemp;
+R ;
T #RTemp;
L 3.276700e+004;
>=R ;
JC _003;
TAK ;
L -3.276800e+004;
<=R ;
JC _003;
TAK ;
_003: T #RTemp;
RND ;
T #OutValue;
//防抖动功能
L #AddTime;
L #DecTime;
>R ;
JC _004;
TAK ;
_004: L 1.638400e+003;
TAK ;
/R ;
RND ;
T #tempint;
L #InValue;
L #OutValue;
-I ;
JP _005;
NEGI ;
_005: L #tempint;
>I ;
BEC ;
L #InValue;
T #OutValue;
END_FUNCTION_BLOCK