西门子s7-200系列PLC变量存储区的结构及 在分组轮流控制中的应用
一、引言
熟练使用一款PLC进行编程设计和调试,掌握其数据存储区的结构是非常有必要的。尽管主流的PLC产品大同小异,学习和实践能够触类旁通,但在基础而又关键的存储区特点上,仍各有区别。当你理解透PLC的数据存储结构时,就可以游刃有余解决一些数据处理问题。
二、西门子s7-200系列PLC存储器
西门子s7-200系列PLC的存储器,包括输入输出映像寄存器I、Q、AI、AQ,内部标志寄存器M、内部特殊标志寄存器SM、变量存储器V、局部变量存储器L、顺序控制继电器存储器S、累加器AC、定时器存储器T、计数器存储器C以及高速计数存储器HC。
2.1 数据编址方式
存储器由很多存储单元构成,每个单元都有唯一的地址,可以依据存储器地址来存取数据。存储器地址格式分为四种:位、字节、字、双字。

以变量存储器V存储器为例,位为数字量布尔型,值为0或1,或者True或False两种状态,形如V11.0、V128.7。

字节包括8个位,字包含2个字节,而双字包含2个字。西门子PLC字和双字对于其字节和字的结构上有着自己的特点——低字节(低字)在高位上。例如VW100,高字节是VB100,低字节是VB101;VD100,高字是VW100,低字是VW102。
2.2 举个栗子

具体到“位”来讲,对于VD100(32位双字),高位MSB到低位LSB依次为V100.7...V100.0,V101.7...V101.0,V102.7...V102.0,V103.7...V103.0。假如VW100=1234H,那么VB100=12H,VB101=34H。
三、在分组轮流控制中的应用
理解了PLC数据存储器存储结构,就能够熟练掌握各种数据处理,比如数据格式转换、数值运算、数据通信等等。有些小技巧,可以利用数据存储结构的特点,化繁为简,提高编程效率。
3.1 池*2单双次数轮流反冲洗
这里提供两个编程小案例,也是项目中遇到的,希望对大家有所启发。一是污水处理项目中,两个深度处理池在给定周期和时间,自动轮流排泥。

首先对反冲洗计数,次数存储在计数存储器C13中,格式为Word型。接下来问题来了,怎么确定反冲洗次数的奇偶呢?不管是编子程序计算,还有采用小技巧都必须将反冲洗次数C13传送给便于数据处理的存储器,比如变量存储器V,如C13赋值给VW10。那怎么判断VW10中数值的奇偶性呢?其实只需要判断其最后一个位是0还是1就可以了,0为偶数,1为奇数。VW10最后一个位怎么表示?这时你就必须理解西门子s7-200 PLC的数据存储结构了。

VW10的最低位可以反映奇偶性,这个位便是V11.0。因为VW10高字节是VB10,低字节是VB11。如果编小程序判断数值奇偶,小学老师教导过我们,把这个数除以2,然后看有没有余数能不能整除——也行,不过挺麻烦的。
3.2 排泥阀*9分组轮流排泥
再举个例子,和上一个有些类似,这次是深度处理池有9个排泥阀,在排泥周期和时间下,需三三分组(147、258、369)轮流打开排泥。

对排泥次数计数,C14赋值给VW20,根据其最低两位的组合,可以确定四种组合方式,而且是依次轮流变换的:00-->01-->10-->11-->00。

不管VW20也就是排泥次数怎么累加变化,其最低两位都是这么变化的,而且是依次轮流的。这样我们就可以根据这两位的组合产生标志位M13.1、M13.2、M13.3。然后在相应的排泥阀开阀逻辑中并入这几个点位,就可以了。

四、总结
西门子系列PLC的数据存储区有着属于自己的特点,s7-200系列,比如CPU226或是Smart系列特有的变量存储器V,以及1200系列及s7-300系列的数据块DB,其存储器寻址都是一脉相承的:低字节在高位,高字节在低位。
基于这种特点,在处理Modbus浮点数通信时,需要交换双字的高低字;又比如在组态触摸屏报警时,处理报警字与报警位的关系,同样需要准确理解西门子PLC的存储区结构。而本文中提到的两个小应用,希望对大家在编程中有所启发。