运动PLC的编程风格不同

时间:2017-03-01 08:30:47

标签: motion plc

对于用ST编写的motionPLC项目,我使用了很多这样的步进结构化函数:

stepNum := 1;

CASE stepNum OF
1: (* Move axis to upper positon *)
    axis.in.position := 0;
    axis.start := true;
    IF(axis.out.position = 0) THEN
        stepNum := 2;
    END_IF
2: (* Do something else *)

此方法背后的目标是能够等待驱动器完成其任务,然后再转到下一个任务。

这可行,但随着程序变得越来越复杂,并且步骤并不总是需要顺序(您可以从等待状态,到运行状态,到故障状态再到等待状态),代码开始看起来更像是在qBASIC时代写的意大利面条代码。

是否还有其他样式来编写此程序,使我能够等待驱动器完成其任务,但是这不会让人感到如此错综复杂?

如果这个问题“过于宽泛”,请告诉我,我不知道还能在哪里问。

2 个答案:

答案 0 :(得分:1)

老实说,case声明是我找到的最好的方式来实现你所说的。但是,您可以将functionfunction block中的功能组合在一起,以减少每个步骤中编写的代码量...或者在case中使用迷你function blocks语句来减少一个地方的代码量使其更具“可读性”。

答案 1 :(得分:1)

我同意mrsargent,并且case语句是在循环运行的程序中实现状态机的好方法。

我建议您也为您的州使用枚举而不是数值。在下面的示例中,motorState是枚举类型的变量,与具有数值相比,它使代码更易于阅读。

class Other(models.Model):
    poster = models.ImageField(upload_to="articlepic", blank=True)
    text = models.CharField(max_length=300, blank=False)
    created_at = models.DateTimeField("created at", auto_now_add=True)