S7-1200中对位的操作方式比较灵活,既有通常对直接位变量的各种操作,也有对字节,字及双字的位进行操作,以下对各种情况进行说明。
1)位变量的绝对地址引用
对位于I,Q,M区的绝对地址位变量是直接引用其的绝对地址,如I0.1,Q3.5,M10.3等;对位于DB区的绝对地址,需先在DB中声明,再引用绝对地址,如DB1.DBX2.0,如未声明即引用,会发生编译警告。

上例中绝对地址DB1.DBX40.1未在数据块DB1中声明,故在引用时出错;
引用绝对地址时,依照好的编程习惯,要先在PLC或数据块变量表中对绝对地址先赋予变量名。
总的来说,引用绝对有如下几种情况:
1.1 I区:引用格式为I0.1
1.2 Q区:引用格式为Q0.1
1.3 M区:引用格式为M10.0
1.4 DB区,分为:
1.4.1 在DB中定义的位变量,引用格式形如DB1.DBX40.0
1.4.2 在DB中定义元素为Bool型的数组arrayBool[0..n],引用格式形如DB1.DBX0.1,其符号寻址为”标准数据块名”.arrayBool1[n]
1.4.3 FB的背景数据块同样适用于以上2条调用情况。
2)符号寻址
符号寻址有几种情况,最普通的是使用对应绝对地址的变量名,此变量名在PLC变量表或数据块(含全局数据块及背景数据块);
其二是在程序块中定义字节,字或双字变量,然后以“变量名.Xn”类似形式引用其位变量,注意变量名可以是PLC变量名,DB变量名或FB/FB的接口区变量;
其三是在FB/FC接口区声明变量时对变量进行覆盖,以数组形式进行覆盖,然后在程序中直接引用数组元素即可进行位变量引用,此方法还可进行间接寻址(即数组下标可为变量)。
以上第一种情况比较容易理解,在此不以例子来说明,以下重点针对第二种及第三种情况进行举例说明。
2.1 符号变量的部分调用
符号变量的部分调用称为”slice”调用,是指定义了一个变量(如长度为双字),则可以对其以部分引用,如以位,字节或字对其引用。
以下以定义一个字变量,然后对其以位引用,分以下几种存储区域说明:
2.1.1 I/Q/M存储区:形式为 “intPLCTag1”.xn,其中intPLCTag1为PLC变量名
2.1.2 DB存储区:形式为 “标准数据块”.int1.xn,其中int1为DB“标准数据块”中变量名
2.1.3 FB/FC接口区:形式为 #intTag1.xn,其中intTag1为接口区变量
说明:接口区变量以前辍#标注,PLC变量或DB变量以双引号标注。
但是,使用V11编程及V2.2硬件时,在SCL编程时,只能对接口区参数进行slice引用。使用V12则不会出现此问题。

2.2变量覆盖位引用
只有以标准模式(与S7-300/400兼容)形式调用DB的FB或FC(或FB中保持性为“在IDB中设置”的变量)才能创建变量覆盖,当以位元素数组覆盖变量时,即可对该变量进行位引用。

上例中intTemp1为FB的临时变量,用于传送数组下标。intTag1为FB的输入变量,atintTag1[0..15]为其覆盖变量,其元素为Bool型,对其数组元素的引用即可体现位变量调用。
上例作用相当于部分引用形式的 #intTag1.Xn,但不同之处是可以通过变更数组下标来实现间接寻址,而变量名的部分引用则不能变更。