的功能块FB SCL的 VAR_TEMP 一直报Non-existent identifie

已锁定

手机用户20171125719904

  • 帖子

    1
  • 精华

    0
  • 被关注

    0

论坛等级:游民

注册时间:2017-11-25

普通 普通 如何晋级?

的功能块FB SCL的 VAR_TEMP 一直报Non-existent identifie

1885

3

2025-11-23 09:47:04

scl编写的。功能块FB 临时变量已赋予初始值,改为静态变量也不行。请问高人是代码哪里有问题,一直找不到原因

FUNCTION_BLOCK FB666

// Block Parameters

VAR_INPUT

    // Input Parameters

X1: BOOL;

p: REAL;         

I: REAL;          

PVfeedback: INT;    

SP: REAL  ;    // 

PID_upperlimit: REAL;

PID_downlimit: REAL;

deadzone: REAL;

END_VAR


VAR_IN_OUT

    // I/O Parameters

END_VAR

VAR_OUTPUT

    // Output Parameters

X2: BOOL;

feedbackprocess: REAL ; //反馈过程值

outputprocess: REAL;  //输出控制值

pidoutput: INT;

END_VAR

VAR_TEMP

    // Temporary Variables

END_VAR

VAR

    // Static Variables

    feedbacktemp: REAL:= 0.0;

   current_offset: REAL:= 0.0;

   current_value: REAL:= 0.0;

   last_value: REAL:= 0.0;

   outputtemp: REAL:= 0.0;

   last_offset: REAL:= 0.0;

END_VAR

    // Statement Section

    #feedbacktemp := INT_TO_REAL(#PVfeedback);//反馈值转成浮点数存入到临时存储区。

#feedbackprocess := (#feedbacktemp - 0.0) / 27648.0 * (#PID_upperlimit - #PID_downlimit) + #PID_downlimit;//反馈过程值处理公式。

#current_offset := #SP - #feedbackprocess;//算出当前误差值。

IF  ABS(#offset)<#deadzone THEN//PID死区大于当前误差的绝对值时。(使用绝对值表示无论是整数还是负数都不允许超出比较范围)。

    #current_value := last_value;      //如果上述条件成立,当前输出值为0.

ELSIF  ABS(#current_offset)>=#deadzone THEN//PID死区小于等于当前误差,执行下面公式。

    #current_value := #p * (#current_offset - #last_offset) + #I * #current_offset;//此公式在S7-200PID课程有讲,PID输出=p值*(当前误差-上次误差)+积分*当前误差。

END_IF;

#outputprocess := #current_value;//将当前值输出值传送到输出控制值,再进行下一步处理。

IF #outputprocess > #PID_upperlimit THEN//如果输出控制值大于PID上限值。

    #outputprocess := #PID_upperlimit;//将上限值写入输出控制值。

ELSIF #outputprocess < #PID_downlimit THEN//如果输出控制值小于PID下限值。

    #outputprocess := #PID_downlimit;//将下限值写入输出控制值。

END_IF;

#last_offset := #current_offset;//处理完成将当前误差写入上次误差。

#last_value := #outputprocess;//处理完成将输出控制值写入上次输出值。

#outputtemp := (#outputprocess - #PID_downlimit) / (#PID_upperlimit - #PID_downlimit) * 27648.0 + 0.0;//PID输出处理成0.0--27648.0范围。

#pidoutput := REAL_TO_INT(#outputtemp);//再小数0.0--27648.0转换成16位整数0-27648范围  


END_FUNCTION_BLOCK


的功能块FB SCL的 VAR_TEMP 一直报Non-existent identifie 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54814条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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