引用simonvic 的回复内容:不是,如果是你自己定义的,并且未在程序中赋值,那么它的值是不确定的。是随机分配的一个地址,原来是什么就是什么了,有可能是0,更有可能不是。
要是同一个 FC 块 ,调用两个实例,那么如果内部给 #temp1,#temp2 赋值,他的值可能是 最有一次调用哪个值!
我就吃过这个亏! 其实 FB 同样存在这样的 临时变量问题, 西门子的FB 好像背景 DB 只是 FB 的输入输出形参的地址;
也就是 临时变量和 FC 分配机制一样,我猜测可能是这样! 但是 Omron 的 是FB 块,是给每个实例 的 所有的变量都给分配实际的固定的地址!所以,西门子的这点 内存管理 不够好!而且封装的也太多,没有给用户提供一种 手动分配地址的机制!
楼上这位前辈,我感觉 300 PLC 的 DB 块数据 先定义后使用 ,不方便,而且300的指令 对数据类型做严格的 类型检查,l例如: 同是 16位 WORD 变量,300 严格 分 INT 和WORD 类型, 更让我苦恼的是 300 PLC 类型太多, BYTE, WORD ,DWORD,INT ,UINT ,DINT,REAL., TIMER,STRING,STRUCT,UDT,等等!这么多的类型 ,难道使用到的变量 需要这些类型时, 要定义这么多 DB 块么? 而且300 的好像支持 20个DB块。 更致命的是 你使用DB 块变量时,用一段时间,不知道DB块 地址用了多少,哪个地址,等到一会要用 不同的类型 DB 数据时, 我就想不起来用到哪个地址了,这样很容易造成地址重复使用? 对编程带来不便, 西门子的 300 的地址管理 我个人觉得 不是很完美。它自己把数据分配机制封装的太深,导致用户很难理解 地址用了多少?用在哪了?等等!应该留给用户手动分配地址的机会!
可能我还不太熟悉300 ,你平时是怎么用DB 块的,如何 提高编程效率?