回复:写了一个插值计算的小程序,但是运行起来总是不对,请教高手哪里有问题?

海上漂2

  • 帖子

    2088
  • 精华

    0
  • 被关注

    36

论坛等级:奇侠

注册时间:2020-04-09

钻石 钻石 如何晋级?

发布于 2026-05-26 14:38:30

14楼

展开查看
以下是引用海上漂2在2026-05-26 13:12:52的发言 >13楼

那就使用1200   不要浪费大家的时间

以下是引用pphsy在2026-05-26 09:35:40的发言 >11楼:其实要实现的就是这...

引用11楼详细内容:

其实要实现的就是这段程序要完成的功能,只不过200smart用不了这么高级的SCL语言,STL实现起来比较麻烦
FUNCTION "Calc_Air_by_Fuel"

{ S7_Optimized_Access := 'TRUE' }


VAR_INPUT

    Fuel_Open : REAL;                     // 当前燃油开度

    P_Fuel    : ARRAY[0..9] OF REAL;      // 燃油分段点

    P_Air     : ARRAY[0..9] OF REAL;      // 风门分段点

END_VAR


VAR_OUTPUT

    Air_Open : REAL;                      // 风门开度输出

END_VAR


VAR

    i           : INT := 1;

    LowerIndex  : INT;

    UpperIndex  : INT;

    Slope       : REAL;

END_VAR


BEGIN

// ========== 边界处理 ==========

IF Fuel_Open <= P_Fuel[0] THEN

    Air_Open := P_Air[0];

    RETURN;

END_IF;


IF Fuel_Open >= P_Fuel[9] THEN

    Air_Open := P_Air[9];

    RETURN;

END_IF;



// ========== 查找所在区间 ==========

FOR i := 1 TO 9 DO

    IF Fuel_Open <= P_Fuel[i] THEN

        LowerIndex := i - 1;

        UpperIndex := i;

        EXIT;

    END_IF;

END_FOR;



// ========== 线性插值计算 ==========

Slope := (P_Air[UpperIndex] - P_Air[LowerIndex]) /

         (P_Fuel[UpperIndex] - P_Fuel[LowerIndex]);


Air_Open := P_Air[LowerIndex] +

            Slope * (Fuel_Open - P_Fuel[LowerIndex]);



// ========== 限幅保护 ==========

Air_Open := LIMIT(0.0, Air_Open, 100.0);


END_FUNCTION_BLOCK


飘过   不要浪费时间 在这个帖子上

13070952128
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有9426条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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