S7-200 SMART V3 指针不能放在DB2区的bug
我在开发中发现一个V3的bug。如果将指针放到DB2区,使用指令MOV_R时会报错。提示“错误 35: (操作数 2) 指令操作数的存储区无效.”
下面是编译结果:
正在编译UDT...
已编译 0 个错误
正在编译全局变量表...
用户变量区: 840 (字节)
已编译 0 个错误,0 个警告
正在编译程序块...
MAIN (OB1)
SBR_0 (SBR0)
INT_0 (INT0)
FB_解析房 (FB0)
程序段 6,行 1,列 2:错误 35: (操作数 2) 指令操作数的存储区无效.
FB_预热房 (FB1)
块大小 = 0(字节),1 个错误,0 个警告
正在编译数据页...
块大小 = 0(字节),0 个错误,0 个警告
正在编译系统块...
已编译的块,0 个错误,0 个警告
错误总计:1,警告总计:0
代码如下:



如果改为VD4000就没有问题了。

我查了好几遍文档,都没有提到这方面的限制。
编译后,所有未绑定到地址的全局变量和 FB 实例的地址均在 DB2 区域中分配。
DB2 区域的大小为 1 MB。
在状态图表和程序状态中,均可读写、强制和取消强制 DB2 区域中的变量。
DB2 区域中所有类型的变量均可使用所有指令,其中包括布尔数组和复杂类型,如 SBR(结构化缓冲区读取)。
DB2 区域最多支持 128
个用于强制的基本类型 (BOOL/BYTE/WORD/INT/DWORD/DINT/REAL)
变量或变量成员。如果强制使用复杂类型变量或变量成员,则计数包括所有基本数据类型节点成员变量。
这是文档中的相关解释。
如果有不同见解,可以回贴。