回复:步进顺序控制的表驱动法实现

'Razor

西门子1847工业学习平台

  • 帖子

    3544
  • 精华

    46
  • 被关注

    233

论坛等级:至圣

注册时间:2008-03-31

钻石 钻石 如何晋级?

发布于 2017-10-31 18:03:49

12楼

上面的原始程序用LAD和STL确实给自己加了不少负载,尤其是ANY的应用方面,有不少的坑,整体程序用SCL编写了一下,做了一些更改,输入变量由原来的ANY现在直接改成了ARRAY,代码量少了不少,复杂度也降了一大截,已经仿真验证,代码如下:

#work := (#start AND (#actualInput = 1)OR #work)AND (#stepsOver = FALSE OR #auto) AND (#stop = FALSE); //工作起动停止逻辑

IF #work THEN   //如果开始工作

    

    #inputValue := #inputTable[#stepNumber];    //读取输入值表

    #input_table_value := #inputValue;

    #feedbackType := #feedbackTable[#stepNumber];   //读取反馈信号类型值表

    #feedback_table_value := #feedbackType;

    #actualOutput := #outputTable[#stepNumber]; //读取虚拟输出值直接传送到实际输出通道

    #output_table_value := #actualOutput;

    

    

    IF #feedbackType = 0 THEN   //如果反馈信号上升沿有效

        #countInput := #inputValue AND #actualInput;

    ELSE    //如果反馈信号下降沿有效

        #countInput := #inputValue AND(NOT #actualInput);

    END_IF;

    

    #step_Number := #stepNumber;

    IF #countInput = #inputValue THEN //如果单步完成,激活下一步

        #step := TRUE;

        #stepNumber := #stepNumber + 1; //步数加一

        IF #stepNumber = #totalSteps  THEN

            #stepsOver := TRUE;//大循环完成

            #stepNumber := 0;

            IF #auto THEN

                #stepNumber := 0;

            ELSE

                #work := 0;

            END_IF;

        END_IF;

    END_IF;

ELSE

    #actualOutput := 0;

    #stepNumber := 0;

    #step_Number := #stepNumber;

END_IF;


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

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54775条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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