以下是引用wgefwgef在2018/9/18 11:56:33的发言:
你好像没明白我的意思。
您的编程水平太弱了,您甚至于Codesys都没有整明白。
首先,以您在Codesys中的经验来说,您前面说只要调用类似P()就可以了,我想您是混淆了功能块,功能和程序组织块之间的区别。
在Codesys中,功能块与功能必须在程序组织块中才能被调用,而要执行程序组织块,则需要将程序组织块分配给任务。
而同样,如果要在程序块中调用其它程序块,那么通俗的做法有以下2种:
方式一:建立事件任务并将需要调用的程序块分配给事件任务,然后在主程序中对触发事件任务的变量进行操作。
而通过主程序对全局变量进行操作,从而触发事件任务。
也就是我写的LD X0,OUT Y0,Y0在三菱中作为输入输出地址,其本身就是全局变量,局部变量的有效范围无法触发程序块外的事件任务。
方式二:将要调用的程序块也分配给循环任务,而在其内部程序块中写入诸如:
IF AAA THEN
Program;
END_IF;
这样的条件调用语句来变相的实现程序块与程序块之间的调用。
方式一和方式二的区别在于:
方式二作为循环任务,会始终被扫描,因此即使不调用,其仍然占用扫描时间。
方式一虽然不占用扫描时间,但是对于PLC厂家来说,事件任务并非无限增加,因此在数量超出时,牺牲扫描时间来拓展事件任务。
就从您的Codesys来说,您的Codesys的编程还有很长的路要走。
Good Luck~