zhaoheshuai 发表于 2017-1-16 11:55:51

电液控制求助

力士乐变量泵      电流控制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;



zhaoheshuai 发表于 2017-1-16 11:56:34

大家有没有比较好的控制方式与方法   ,希望给予帮助

zhaoheshuai 发表于 2017-1-17 10:28:05

工程机械行走控制,大家谁做过类似的项目,可以共同探讨一下

Hero 发表于 2018-6-19 11:22:39

本帖最后由 Hero 于 2018-6-19 11:24 编辑

:D这样写代码,可读性太差,没人原意看,没救了

chander 发表于 2018-8-17 13:29:34

你用方块图啊,有专门PID模块这个控制很简单啊,你不就是在马达上带了速度传感器然后做闭环控制马达转速恒定嘛。有问题可以加微信76369809

zxcvb2012201 发表于 2021-7-11 15:45:08

有专门PID模块这个控制很简单
页: [1]
查看完整版本: 电液控制求助