恭喜,你发布的帖子
发布于 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;
请填写推广理由:
分享
只看
楼主