因为数据的内容可以转化为程序的内容。例如数据D0=K100。那么可以在程序中用初始化写MOV K100 D0。所以假如你编一个属于二次开发的程序,程序是不断的根据数据块的内容去执行相应指令的话。那么你的程序可能只有几百B。但是通过调用数K的数据是可以完成非常可观的工作的。
我说说一个比较接近,但是有不是很贴切的事实。
变频器的简易PLC控制。当用户写参数段号;频率;经历时间;段号;频率;经历时间;……只要经历时间不写“0”就认为程序一直没有结束。经历时间写9999就认为是从头开始循环。那你说。他的程序可有多短啊?所控制的动作可以多复杂啊?
引用4月23日“芳季”的话:<请程序用调用数据的原始数据的块大小也列出来。因为这也是程序的不可分割部分。应该计算列入程序空间。>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
①、我这样理解“芳季”所讲的 “数据的块大小”:
“数据块”是指连续的若干个数据寄存器构成的区域。“数据的块大小”是指可能被程序调用到的区域中寄存器的个数(即:数据的个数)。我认为“数据块大小(即:数据个数)”与其数据的“数值大小”是不同的两个概念。
②、我这样理解“芳季”所讲的“程序空间”:
“程序空间”是指程序量的大小。
我们知道:PLC的程序容量是有最大容量限制的。它由PLC实体硬件的内存容量来决定其大小。不同品牌的PLC描述其最大程序容量的术语可能不同。譬如:用三菱的术语来描述,是程序“步”的多少;还有其它品牌,有的用多少“W”即:多少个“字”来描述;有的用多少“I”即:多少条“指令”来描述;还有的是用多少“B”即:多少“字节”来描述。
三菱各系列PLC的程序最大容量各不相同。
FX0的最大程序容量为:800步; FX1(旧版)为:1K步; FX0s为:800步;FX1s为:2000步;FX1n为:8000步;FX2n为:8000步;FX3U为:64000步。
可见,一个指定的PLC,其最大能容纳的程序量是有限的。为了希望在有限的内存空间里写出能完成更丰富、更强大的功能的程序来,所以,我们平常要练习怎样把PLC程序写得“简练”一些!还有另一个重要的原因是:PLC每执行一个“程序步”是需要一点时间的,程序量愈大,则程序的周期扫描时间就愈长。这样就很不利于提高PLC的控制“实时性”!所以,即便PLC的内存容量相对于我们的控制程序来说是足够的大,我们为了使控制过程有很好的“实时性”,也力争要把程序写得简短一些!
“芳季”的这句<请程序用数据的原始数据的块大小也列出来。因为这也是程序的不可分割部分。应该计算入程序空间。>给我的感觉是:他认为看一个指定功能的程序是不是写得简练,不能单看这个程序所占“步”数的多少(“步”数的多少在一定程度上反映了程序的周期扫描时间的长短),还要看“数据的块大小”(即:数据个数),要把“数据个数”也计算入程序空间(即程序“步”数)中去。这样计算出来的“程序量”才能完整的反映出程序量的大小来。
“芳季”所谓的“应该计算入程序空间”是怎样的一种“计算”呢?该不是说“用减法的计算”吧?!
如果是“用减法的计算”,则:把“数据的块大小”“计算入程序空间”才会得出这个奇怪的结论:合计的程序量“只有几百B”!
我猜想“芳季”是想“用加法来计算”!把“数据的块大小”加算到一个指定程序的“步”数中去。如果“数据的块大小”的“数目”较大,则,“用加法”来计算入程序空间所得的结论就会是:合计的程序空间比实际的程序量变得“较大”了!
可是,事实上却是:前一页第81楼的那个更为简练的只有26 步(未计END)的调用程序,不论是调用30个数据(15×2),还是调用40个数据(20×2),它的程序量就都是26步!而且其扫描周期时间也不会有什么不同!
譬如如有这样一个程序(片断):
LD X0
OUT T0 K600
LD T0
OUT Y0
END
和这样的另一个程序(片断):
LD X0
OUT T0 D500
LD T0
OUT Y0
END ( D500是一个停电保持的数据寄存器,其中的内容是用编程工具直接写进去的“k600 ”)
这两个程序片断除了计时器T0的设定值的表达方式不同(上面一个片断中T0设定值是用“立即数”直接指定的;下面一个片断中T0的设定值是用数据寄存器D500间接指定的)之外,所有的内容都是相同的。
根据三菱的编程手册对指令的解释,这两个片断分别所实现的功能及各指令的执行“步”数都完全是一样的!
所以,不管程序中是否用到数据寄存器D500,两个程序的大小(即两个片断各自所占的程序空间)都是一样的!
在FX2n上,不管计时器的设定值是用“立即数”直接指定,还是用数据寄存器间接指定,“OUT T (K) ”和“OUT T (D) ”的ON状态的执行时间都是43微秒,OFF状态的执行时间都是38微秒。用“步”的概念来表达,两者的指令“步”数都是3(步)。完全没有差别!
最好相互称呼“网友”!
回复“刘存刚”在楼上的问题:
PLC刚上电,或者刚从STOP转入RUN,M8002(最初运行脉冲)在第一个周期的开头把V0清零。(在FX2n的操作手册中记载:变址寄存器V、Z是
保持型数据寄存器。但我最近发现:事实上它们的“保持”并不是“停电保持”。所以,如果没有“LD M8002 ”这条指令,刚上电时V 中的内容也
是“0”,但是,如果要求PLC每次从STOP转入RUN的时候,程序都要从“0时段”开始运行。则这条“LD M8002 ”指令就不能少了!)而且在这
最初的一个周期开始的时候,D0中的内容也是“0”。所以,当程序最初扫描至“步”号为“9”的这条指令“LDI T0 ”时,计时器T0的驱动条件成
立,最初扫描至“OUT T0 D0 ”指令时,计时器T0的触点动作。接下来程序扫描至“步”号为“13 ”的“LD T0 ”这条指令时,这个触点
为:ON,为接下来的3条功能指令的执行建立起条件,这“INC V0 ”放置在其它两条传送指令的前面,当然是先执行了!INC指令给V0加1之后再
用作两条传送指令的操作数变址修饰,所以在这第一个周期里“D519V0”所表达的操作数就是“D520 ”啦!同理,这第一个周期里“D539V0 ”所
表达的操作数就是“D540 ”。