回复:关于用FB41实现斜坡函数对设备进行连续控制

maiker

  • 帖子

    2
  • 精华

    0
  • 被关注

    3

论坛等级:新手

注册时间:2009-07-13

普通 普通 如何晋级?

发布于 2009-07-13 15:54:26

0楼

这是我翻译的一个德国程序的ramp功能,大家用一下看怎么样,有问题可反馈

(* 启动后,根据初始实际值,每次在设定的间隔时间到达后,递增设定的值,然后输出,直到最终的设定值到达。
AVal:输入的实际值
AS.SetVal:通过Ramp功能最终达到的值
AS.HI_Step_Val:正向值增量
TS.HI_Step_time: 正向值增量间隔时间
AS.LO_Step_Val:负向值增量
TS.LO_Step_time: 负向值增量间隔时间
Start:RAMP启动,一旦为0,将屏蔽ramp功能

Step_Val:输出每一次RAMP后的实际值,该值将用于控制最终的阀,其执行代码在OB35中每间隔100ms被调用一次。
Finish:表示RAMP结束

在ramp完成后,Finish会输出,若希望AS.SetVal修改后再次启动ramp,或者直接需要再次ramp,则必须重新给定Start信号。
*)
FUNCTION_BLOCK Av_Ramp
TITLE = 'ramp function'
VERSION:'1.0'
AUTHOR:Parker
NAME: Ramper
FAMILY: Av
VAR_INPUT // Input Parameters
Start:Bool:=0; //start ramp(if=0,Transfer End-Setpoit to Actual Setpoint)
AVal:Real:=0; //Analog value setpoint
END_VAR

VAR_OUTPUT // Output Parameters
Step_Val:Real:=0; //Setpoint Actual step value
Finish:Bool:=0; //finish ramp
END_VAR

VAR_IN_OUT // input/Output Parameters
END_VAR

VAR // Static Variables
AS:STRUCT //Data Structure of Analog Setpoints
SetVal:Real:=0; //Analog value setpoint(the final reach value)
HI_Step_Val:Real:=0; //Ramp Value step High(+)
LO_Step_Val:Real:=0; //Ramp Value step Low (-)
END_STRUCT;
AA:STRUCT //Data Structure of Analog Actual Values
CurrVal:Real:=0; //output value memory
END_STRUCT;
TS:STRUCT //Data Structure of Timer Setpoints
HI_Step_time:Int:=0; //Ramp Time high (+)
LO_Step_time:Int:=0; //Ramp Time Low(-)
END_STRUCT;
TA:STRUCT //Data Structure of Timer Actual Values
HI_Step_time:Int:=0; //Ramp Time high (+)
LO_Step_time:INT:=0; //Ramp Time Low(-)
END_STRUCT;
IM:STRUCT //Data structure of Internal Flags
Imp_Start:Bool:=0; //start impulse flag
HI_Time_Reach:BOOL:=0; //HI time reach
LO_Time_Reach:BOOL:=0; //LO time reach
END_STRUCT;
END_VAR

VAR_TEMP // Temporary Variables
Imp_Start_Tmp:Bool; //start impulse flag
END_VAR

(*-----------------------------Check start raise edge signal-------------------------------------*)
Imp_Start_Tmp:=Start & NOT IM.Imp_Start;
IM.Imp_Start:=Start;
(*-----------------------------in the first scan,load start value to ramp-------------------------------------*)
IF Imp_Start_Tmp THEN
AA.CurrVal:=AVal;
END_IF;
(*-----------------------------Step +-------------------------------------*)
IF AS.HI_Step_Val>0 & TS.HI_Step_time>0 & NOT Finish THEN
IF Start & IM.HI_Time_Reach & AA.CurrVal IF AA.CurrVal+AS.HI_Step_Val<=AS.SetVal THEN
AA.CurrVal:=AA.CurrVal+AS.HI_Step_Val;
ELSE
AA.CurrVal:=AS.SetVal;
END_IF;
END_IF;
END_IF;
(*------------------------reset HI time----------------------------------*)
IF AA.CurrVal>=AS.SetVal OR IM.HI_Time_Reach OR NOT Start THEN
IM.HI_Time_Reach:=0;
TA.HI_Step_time:=0;
END_IF;
(*-----------------------------Step - -------------------------------------*)
IF AS.LO_Step_Val>0 & TS.LO_Step_time>0 & NOT Finish THEN
IF Start & IM.LO_Time_Reach & AA.CurrVal>AS.SetVal THEN
IF AA.CurrVal-AS.HI_Step_Val>=AS.SetVal THEN
AA.CurrVal:=AA.CurrVal-AS.LO_Step_Val;
ELSE
AA.CurrVal:=AS.SetVal;
END_IF;
END_IF;
END_IF;
(*------------------------reset LO time----------------------------------*)
IF AA.CurrVal<=AS.SetVal OR IM.LO_Time_Reach OR NOT Start THEN
IM.LO_Time_Reach:=0;
TA.LO_Step_time:=0;
END_IF;
(*------------------------finish ramp----------------------------------*)
IF AA.CurrVal=AS.SetVal THEN
Finish:=1;
END_IF;
IF NOT Start THEN
Finish:=0;
END_IF;
(*------------------------no use ramp----------------------------------*)
IF NOT Start THEN
AA.CurrVal:=AS.SetVal;
END_IF;
(*------------------------output the step value----------------------------------*)
Step_Val:=AA.CurrVal;
(*------------------------HI Timer----------------------------------*)
IF NOT IM.HI_Time_Reach & "IP_1Sec" & Start & AA.CurrVal IF TA.HI_Step_time TA.HI_Step_time:=TA.HI_Step_time+1;
ELSE
IM.HI_Time_Reach:=1;
END_IF;
END_IF;
(*------------------------LO Timer----------------------------------*)
IF NOT IM.LO_Time_Reach & "IP_1Sec" & Start & AA.CurrVal>AS.SetVal THEN
IF TA.LO_Step_time TA.LO_Step_time:=TA.LO_Step_time+1;
ELSE
IM.LO_Time_Reach:=1;
END_IF;
END_IF;
END_FUNCTION_BLOCK
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54760条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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