回复:求助:写了一个累加的FC(从1加到100求和),没有成功,关键还看

已锁定

'Razor

西门子1847工业学习平台

  • 帖子

    3208
  • 精华

    41
  • 被关注

    222

论坛等级:至圣

注册时间:2008-03-31

钻石 钻石 如何晋级?

发布于 2024-05-17 22:37:46

10楼

FUNCTION_BLOCK "FB_GetSumOfArithmeticProgression"

TITLE = FB_GetArithmeticProgressionSum

{ S7_Optimized_Access := 'TRUE' }

VERSION : 0.1

//求公差为1的等差数列之和

   VAR_INPUT

      "begin" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : DInt;

      last { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : DInt;

   END_VAR


   VAR_OUTPUT

      error : Bool;

      sum { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : DInt;

   END_VAR


   VAR

      statOldBegin : DInt;

      statOldLast : DInt;

      statIndex : DInt;

      statError : Bool;

      statSum : DInt;

   END_VAR


   VAR_TEMP

      tempBegin : DInt;

      tempLast : DInt;

      tempIndex : DInt;

      tempSum : DInt;

   END_VAR


   VAR CONSTANT

      INCREMENT : DInt := 16#1;

      ZERO : DInt := 16#0;

   END_VAR



BEGIN

   REGION INITIALIZATION  

     

       #tempBegin := #begin;

       #tempLast := #last;

       

       #statOldBegin := #ZERO;

       #statOldLast := #ZERO;

       #statIndex := #ZERO;

       #statError := FALSE;

       #statSum := #ZERO;

       

   END_REGION

   

   REGION LOGIC & CONTROL

       

       #statError := #tempBegin > #tempLast;

       

       IF #statError = FALSE OR #tempBegin <> #statOldBegin OR #tempLast <> #statOldLast THEN    //no error and setpoint has changed,then calculate the sum

           IF #statIndex <> #tempLast THEN

               FOR #tempIndex := #tempBegin TO #tempLast BY #INCREMENT DO

                   #statSum := #statSum + #tempIndex;

                   #statIndex := #tempIndex;

               END_FOR;

           END_IF;

           

           #statOldBegin := #tempBegin;

           #statOldLast := #tempLast;

       END_IF;

       

   END_REGION

   

   REGION OUTPUTS

       #error := #statError;

       #sum := #statSum;

   END_REGION

   

   

   

   

END_FUNCTION_BLOCK




少即是多
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15112条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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