我正在使用M3 Soft为Crozet Millenium 3开发PLC程序,但我的问题一般是关于SFC / Grafcet功能。 SFC循环可以一次运行多个令牌吗?提出这个问题的另一种方法是,在一个循环中一次可以激活多个步骤,例如,当激活初始步骤,然后在循环完成之前再次激活它?
答案 0 :(得分:0)
证监会只是(black token) Petri nets。原则上,可以与其他州并行启用任何州。
诀窍是得到一个状态以这种方式启用;安排这种情况并不总是很容易。
想象一下,我们有状态SF1,SF2 ...... SFn。可以安排SF1启用SF2和SF3(使用HORIZONTALBAR符号,在更多关于并行性的一般文献中通常称为FORK)。这很典型。现在SF2可以启用SF4,启用SF5 ......最后启用SFk。你可以让SFk启用SF1,所以现在顺序功能网中有一个循环。但是,如果我可以让SF1使能SF2使能... SFk,我当然可以构建一个SFC,其中SF1使能SF3和SF2,这将启用SF1。如果我这样做,我可以让 SF1启用SF1和SF3 。现在SF1重复制造状态使能,每次触发SF3。
无论如何,我可以用Petri网做到这一点。也许语言标准禁止SFC这样做,如果它这样做,它们将不如Petri网那么强大,那将是愚蠢的。
对于使用GOTO的程序,存在SFC状态的任意网络的模拟。你可以编写很难理解的GOTOful程序;这并不意味着GOTO很糟糕,只是你可以滥用任何东西。 (实际上,任意GOTO都允许构建有限状态机,如果你没有SFC,它们真的很有用。人们大多数编写的是结构良好的代码,带有标准的受控GOTO元素(例如,IF-THEN-ELSE) -ENDIF,WHILE DO END,...)完全嵌套在另一个上。
同样,可以构建FORKful petri网/ SFC。通常这些很难理解,所以除非它有一些非常重要的目的,否则人们倾向于用干净嵌套的FORK -... JOIN对构建SFC。在这样的图表中,您不会“在循环完成之前再次激活一个状态。”