求助版主及高手关于液压伺服控制的源程序注解老外的源程序值得探讨!!!

已锁定

li4guang

  • 帖子

    4
  • 精华

    0
  • 被关注

    1

论坛等级:新手

注册时间:2007-09-15

普通 普通 如何晋级?

求助版主及高手关于液压伺服控制的源程序注解老外的源程序值得探讨!!!

745

1

2007-10-19 05:00:07

各同仁好,我现在有一个关于液压伺服阀控制的程序一直看不太明白,还望各位能给予答.


我公司有一矫直机,分为入口和出口两组液压缸,每组两个液压缸,每个液压缸有一个压力传感器和一个位移传感器作为闭环反馈,分别由各自的伺服板控制;
以下就是其中一组缸的控制程序,我能看懂的就把它注解一下,
不懂的我就留在那里或其后提问,还望高手解答!!

FUNCTION_BLOCK FB1201

TITLE = 'Control command calculation and application to SV (HGC cylinders)'//功能块标题
VERSION : '0.0'
//KNOW_HOW_PROTECT
AUTHOR : BAUDOU
NAME : SV_OUT
FAMILY : HGC

VAR_INPUT //变量声明

// Inputs
FORCE_DS : REAL; // HGC force Drive side (Tons)//从现场压力传感器传送过来的压力,这是入口一组当中的传动侧
FORCE_NDS : REAL; // HGC force Non Drive side (Tons))//从现场压力传感器传送过来的压力,这是入口一组当中的非传动侧

MAX_FORCE_CONTROL : REAL; // Maximum force on position controller (tons) (High value --> function not used)
AVE_CTRL_RESET : BOOL; // Used for tilting control during quick opening//用于当液压缸回缩时的同步控制
FOR_TOT_MODE_SW : BOOL; // Total force control mode (1=)//这是一个标志位,由1时是压力控制模式,0时是位置控制模式
FORCE_TOT_CTRL_EXIT : REAL; // Output of total force PD controller
POS_AVE_CTRL_EXIT : REAL; // Output of average position PD controller
FOR_DIF_MODE_SW : BOOL; // Differential force control mode (1=)
FORCE_DIF_CTRL_EXIT : REAL; // Output of differential force PD controller
POS_DIF_CTRL_EXIT : REAL; // Output of differential position PD controller
GAIN_OUT_NDS : REAL; // SV Linearisation screwing gain Non Drive Side
GAIN_IN_NDS : REAL; // SV Linearisation unscrewing gain Non Drive Side//gain应该是什么含意
GAIN_OUT_DS : REAL; // SV Linearisation screwing gain Drive Side
GAIN_IN_DS : REAL; // SV Linearisation unscrewing gain Drive Side
OFFSET_SV_NDS : REAL; // Bias compensation Non Drive Side
OFFSET_SV_DS : REAL; // Bias compensation Drive Side//bias这个单词在这里应该是什么意思?

// Parameters
MAX_FORCE_EF : REAL; // Maximum force control efficiency//这两个参数的作用??
SV_CMD_SCALE : INT := 100; // Scale of SV

END_VAR

VAR_OUTPUT
FORCE_LIM : BOOL; // Force limitation active
SV_SAT_FOR_DIF_CTRL : BOOL; // SV command saturated in order to keep differential controller efficiency
SV_CMD_NDS_NoBias : REAL; // Command to SV Non Drive Side without bias compensation//这一组带bias的输出和下面一组不带bias的输出有何区别????
SV_CMD_DS_NoBias : REAL; // Command to SV Non Drive Side without bias compensation
SV_CMD_NDS : REAL; // Command to SV Non Drive Side //与上面带bias的输出对应.在调用这个块的程序中使用的就是这一组输出.
SV_CMD_DS : REAL; // Command to SV Non Drive Side //这组输出在什么情况下为0???

END_VAR

VAR_TEMP
Temp1 : REAL;
Temp2 : REAL;
Temp3 : REAL;
Temp4 : REAL;
Temp5 : REAL;
Temp6 : REAL;
Temp7 : REAL;
Temp8 : REAL;
Temp9 : REAL;
Temp10 : REAL;
Temp11 : REAL;
Temp12 : REAL;
Delta : REAL;

END_VAR

VAR
Sense_SV_DS : REAL := 100000;//在这里定义有何意义??
Sense_SV_NDS : REAL := 100000;

END_VAR

BEGIN
//Force limitation
IF FORCE_DS >= FORCE_NDS THEN
Temp1 := FORCE_DS;
ELSE
Temp1 := FORCE_NDS;
END_IF;

Temp2 := (MAX_FORCE_CONTROL - Temp1) * MAX_FORCE_EF;//比较两侧压力,大的一侧参与temp2的计算,这组公式的意思是什么???
//End

IF FOR_TOT_MODE_SW THEN
Temp3 := FORCE_TOT_CTRL_EXIT;
ELSE
Temp3 := POS_AVE_CTRL_EXIT;
END_IF;

IF FOR_DIF_MODE_SW THEN
Temp4 := FORCE_DIF_CTRL_EXIT;
ELSE
Temp4 := POS_DIF_CTRL_EXIT;
END_IF;

//Tilting control in case of quick opening
IF AVE_CTRL_RESET THEN
Temp5 := 0;
Temp6 := 0;
ELSE
Temp5 := Temp3;
Temp6 := 0.9 * SV_CMD_SCALE;
END_IF;

//Limitation by force control
IF Temp5 >= Temp2 THEN
Temp7 := Temp2;
FORCE_LIM := 1;
ELSE
Temp7 := Temp5;
FORCE_LIM := 0;
END_IF;

(* //Limitation for SV scaling depending on linearisation gains
IF Sense_SV_NDS >= Sense_SV_DS THEN
Temp9 := Sense_SV_DS;
ELSE
Temp9 := Sense_SV_NDS;
END_IF;

Temp10 := Temp6 / Temp9;

IF Temp7 < -Temp10 THEN
Temp8 := -Temp10; //这一段没用
SV_SAT_FOR_DIF_CTRL := 1;
ELSIF Temp7 > Temp10 THEN
Temp8 := Temp10;
SV_SAT_FOR_DIF_CTRL := 1;
ELSE
Temp8 := Temp7;
SV_SAT_FOR_DIF_CTRL := 0;
END_IF;
*)

Temp8 := Temp7;

//SV command without bias compensation
SV_CMD_NDS_NoBias := Temp8 - Temp4;//sv_cmd_nobias在这里到底是意义??
SV_CMD_DS_NoBias := Temp8 + Temp4;

//NDS SV sense
IF SV_CMD_NDS_NoBias >= 0 THEN
Sense_SV_NDS := GAIN_OUT_NDS;//GAIN_OUT_NDS应该如何理解??
ELSE
Sense_SV_NDS := GAIN_IN_NDS;
END_IF;

//DS SV sense
IF SV_CMD_DS_NoBias >= 0 THEN
Sense_SV_DS := GAIN_OUT_DS;
ELSE
Sense_SV_DS := GAIN_IN_DS;
END_IF;

IF AVE_CTRL_RESET THEN
Temp11 := 0;
ELSE
Temp11 := -SV_CMD_SCALE;
END_IF;

//SV out
SV_CMD_NDS := SV_CMD_NDS_NoBias * Sense_SV_NDS + OFFSET_SV_NDS;//最终的输出由三个值计算而得,这三个值sv_cmd_nds_nobias,
sense_sv_nds,offset_sv_nds代表什么意思与现场有关系吗??
SV_CMD_DS := SV_CMD_DS_NoBias * Sense_SV_DS + OFFSET_SV_DS;

(*// Final limitations
IF SV_CMD_NDS > SV_CMD_SCALE THEN
SV_CMD_NDS := SV_CMD_SCALE;
ELSIF SV_CMD_NDS < Temp11 THEN
SV_CMD_NDS := Temp11;
END_IF;
//这一段没用到
IF SV_CMD_DS > SV_CMD_SCALE THEN
SV_CMD_DS := SV_CMD_SCALE;
ELSIF SV_CMD_DS < Temp11 THEN
SV_CMD_DS := Temp11;
END_IF;
*)

//Limitation taking into account full tilting correction for symetry
IF ABS(SV_CMD_NDS) > ABS(SV_CMD_DS) THEN
IF SV_CMD_NDS > SV_CMD_SCALE & SV_CMD_SCALE - OFFSET_SV_NDS <> 0 THEN
Delta := (SV_CMD_NDS_NoBias * Sense_SV_NDS) / (SV_CMD_SCALE - OFFSET_SV_NDS);
ELSIF SV_CMD_NDS < Temp11 & Temp11 - OFFSET_SV_NDS <> 0 THEN
Delta := (SV_CMD_NDS_NoBias * Sense_SV_NDS) / (Temp11 - OFFSET_SV_NDS);
ELSE
Delta := 1;
END_IF;
ELSE
IF SV_CMD_DS > SV_CMD_SCALE & SV_CMD_SCALE - OFFSET_SV_DS <> 0 THEN
Delta := (SV_CMD_DS_NoBias * Sense_SV_DS) / (SV_CMD_SCALE - OFFSET_SV_DS);
ELSIF SV_CMD_DS < Temp11 & Temp11 - OFFSET_SV_DS <> 0 THEN
Delta := (SV_CMD_DS_NoBias * Sense_SV_DS) / (Temp11 - OFFSET_SV_DS);
ELSE
Delta := 1;
END_IF;
END_IF;

SV_CMD_NDS := ((SV_CMD_NDS_NoBias * Sense_SV_NDS)/Delta) + OFFSET_SV_NDS;//这里的sv_cmd_nds与上面一段的
SV_CMD_DS := SV_CMD_DS_NoBias *
Sense_SV_DS + OFFSET_SV_DS的最终区别在哪里???
在什么情况下使用上面一组输出??在何种情况下使用此组作为输出???
SV_CMD_DS := ((SV_CMD_DS_NoBias * Sense_SV_DS)/Delta) + OFFSET_SV_DS;

END_FUNCTION_BLOCK

求助版主及高手关于液压伺服控制的源程序注解老外的源程序值得探讨!!! 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54756条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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