电液控制求助
力士乐变量泵 电流控制200ma - 560ma 变量泵带马达 想用pid使马达转速稳定3000转每分钟 想用codesys编写,LeftRam( Resistance:=EEVale.LeftRamResistance , (*左抛投泵的电阻==*)DLMax:=EEVale.LeftRam_PumpDLMax , (*左抛投泵的最大电流 560*)
DLMin:=EEVale.LeftRam_PumpDLMin , (*左抛投泵的最小电流 200*)
MaxSp:=EEVale.Left_MotoMaxSp , (* 左抛投泵最大转速可按实际值标定3000*)
MixSp:=EEVale.Left_MotoMixSp , (* 左抛投泵最小转速可按实际值标定500*)
ShijiRPM:=midvar.u_LeftRamHeadSP, (*实际左抛投转速 midvar.u_LeftRamHeadSP*)
setmax_xianzhiSP:=3000 , (*左抛投限制最大转速数值 可以调整的*)
setmix_xianzhiSP:=300 ,
OutPwm=> );
LeftRamHead_out:=LeftRam.OutPwm; (*左抛投PWM XM2.3==*)
VAR_INPUT
Resistance:UINT; (*电阻*)
DLMax:UINT; (*最大电流*)
DLMin:UINT; (*最小电流*)
MaxSp:UINT; (*最大转速*)
MixSp:UINT; (*最小转速*)
ShijiRPM:UINT; (*实际转速*)
setmax_xianzhiSP:UINT;(*设置最大限制转速值*)
setmix_xianzhiSP:UINT;(*设置最小限制转速值*)
END_VAR
VAR_OUTPUT
OutPwm:UINT; (*pwm输出*)
END_VAR
VAR
S_MaxCurrent:UINT; (*系统最大电流*)
M_CurrentBuf:REAL;(*电流缓存*)
A:REAL; (*系数*)
Buf:INT;
addcurrent:BYTE;(*增加电流值*)
END_VAR
S_MaxCurrent:=REAL_TO_UINT( (WORD_TO_REAL (Voltage/10)*1000.0)/ UINT_TO_REAL(Resistance)); (*系统最大电流ma*)
(*A:=UINT_TO_REAL ((MaxSp -MixSp) / (DLMax - DLMin ) ) ; (* 转速差/ 电流差*)*)
A:=UINT_TO_REAL ( (DLMax - DLMin ) / (MaxSp -MixSp) ) ; (*电流差 转速差/ 3000-500/560-200 6.94*)
(*
M_CurrentBuf:=A* UINT_TO_REAL((ShijiRPM - MixSp)) + UINT_TO_REAL( DLMin); (*缓存电流*)
*)
addcurrent:= REAL_TO_BYTE( UINT_TO_REAL((MaxSp-ShijiRPM))/10.0/100.0 *A ); (*。可根据实际情况调整 这个值是人为 加的一个 值*)
IFShijiRPM >=setmax_xianzhiSPTHEN (*如果抛投实际转速大于 3300转,关闭抛投*)
M_CurrentBuf:=0;
ELSIF ShijiRPM<3000THEN
M_CurrentBuf:=A* UINT_TO_REAL((ShijiRPM - MixSp)) + UINT_TO_REAL( DLMin)+addcurrent; (*缓存电流*)
END_IF
Buf:=REAL_TO_INT(( M_CurrentBuf/UINT_TO_REAL(S_MaxCurrent)) *32767.0);
OutPwm:=Buf;
大家有没有比较好的控制方式与方法 ,希望给予帮助 工程机械行走控制,大家谁做过类似的项目,可以共同探讨一下 本帖最后由 Hero 于 2018-6-19 11:24 编辑
:D这样写代码,可读性太差,没人原意看,没救了 你用方块图啊,有专门PID模块这个控制很简单啊,你不就是在马达上带了速度传感器然后做闭环控制马达转速恒定嘛。有问题可以加微信76369809 有专门PID模块这个控制很简单
页:
[1]