本。用过TIA博途的人会发现,在S7-1200/1500创建的DB块(默认属性)中的变量是没有偏移地址的,这种变量我们称之为优化的DB变量。工程师们肯定会有这样一个疑问:如果优化DB变量和西门子标准地址互相传送,地址的对应关系会有变化吗?
比如说,如果将优化的DB块中创建的DWord变量,在程序中使用片段(slice)访问的方式操作了部分bit位,后续还将DWord变量写入MD(M存储器)变量中,那么其中bit位的对应情况是怎样的呢?
举一个简单的例子:
在S7-1200中创建优化的DB1,并创建3个变量:data,A,B,如图1:

图1.优化访问的DB块变量
在OB1中,位地址“数据块_1”.A和“数据块_1”.B分别串联了片段访问的“数据块_1”.data.%X0和“数据块_1”.data.%X10,并且将“数据块_1”.data传送到MD0中,如图2:

图2. 应用片段访问置位DWord变量的相关bit位
当在S7-1200中修改“数据块_1”.A和“数据块_1”.B为true时,如果按bit位的顺序进行排列,也许你会认为M区中对应的是M0.0和M1.2将被设置为true?

那么结果是不是这样的呢?请继续往下看。
看一下优化数据块中,是如何将存储区(例如Byte,Word或DWord)划分为更小的存储区(例如bit),这种划分方式也称为存储器分片,使用片段访问可方便地对操作数按位、字节、字进行访问。如图3:

图3.bit位在优化访问的变量中的排布
从图中可见,对于DWord的32个bit位,从右往左依次是X0——>X31。
详细信息可点击阅读原文进行了解。

我们再看一下标准地址的存储顺序,例如MD0,由字节MB0~MB3组成,MB0为Zui高字节,MB3为Zui低字节,这是西门子专有的存储方式:“高位低存”(也许,这种存储方式突然就颠覆了您之前的认识!)。
MB0在Zui左侧,M0.7Zui高位,往右顺序排列为M0.6……M0.0。MD0中各bit位的排列顺序如下,M0.7为Zui高位,M3.0为Zui低位。如图4:

图4.bit位在标准地址访问中的排布
通过上述的对应分析,不难看出,优化变量中的X0和X10位,传送到MD0时,应该是M3.0和M2.2。
并且,在监控表中将MD0的32个bit全部展开监视,也验证了这个结果。如图5:

图5.监视MD0的32个bit位