为什么要区分数据类型
现实生活中我们可以随意在纸上写出一串数字,并运用小学学过的知识准确识别出数字的大小。但在计算机中,受到机器运算方式和存储空间的限制,必须将数据分成不同的组织形式,以便进行更高效的运算,每种数据类型所占存储空间不同,可表示的数值范围也不同。
PLC编程需要认识的基本数据类型
学习PLC编程需要熟知以下数据类型
按数据类型的所占存储空间的大小进行分类如下:
从上图可以看出,除字符串数据类型,其他数据类型都是按照位的长度来分类的。其实不论是什么数据类型,存储后只要以二进制的形式查看,都是1/8/16/32等二进制位的0或1组合。
相同的二进制数按照不同的规则解析,可以解析成不同类型的数据,可表示的数据大小最终受限于所占用的存储空间的大小。
PLC中的变量
PLC中变量的概念可以认为是一个用于存储数据的存储空间,空间的内容可变,所以称为变量。
由于PLC的数据存储器已经被明确划分好了种类和范围,我们可以直接使用这些明确的存储区而不需要像计算机编程那样先声明一个某类型的变量再在后面的程序中使用。
在西门子PLC编程只需要指定出变量的存储区类型,地址索引和长度,而变量的类型(用哪种规则解析)是由具体调用的指令来和子程序的接口来定义的。
指令区分数据类型,匹配相应的变量长度。例如ADD_I指令会将长16位(2个字节)的变量按整型来处理计算,ADD_DI指令会将长32位(4个字节)的变量按双整型来处理计算,而ADD_R指令会将长32位(4个字节)的变量按浮点数来处理计算。
下图左边的子程序形参类型决定了实参变量的类型,在调用子程序时,会按照形参定义的数据类型处理对应长度的变量。
变量的寻址
因为各种存储空间已经被划分好,不需要再定义,那么我们怎样才能找到这片存储空间呢?这就是寻址的概念。西门子PLC的寻址方式分为两种,直接寻址和间接寻址。直接寻址又可以分为两种,绝对寻址和符号寻址。
直接寻址
PLC的数据存储空间,这里总结出直接访问数据存储空间的三个要素,存储区类型,地址索引和长度。
例如如果访问的是V0.0,其中V代表存储器类型是V存储器,0代表存储器索引值,.0代表访问的长度是1个位并且指出是第0个位。
例如如果访问的是VB1,其中V代表存储器类型是V存储器,1代表存储器索引值,B代表访问的长度是1个字节。
例如如果访问的是VW2,其中V代表存储器类型是V存储器,2代表存储器索引值,W代表访问的长度是1个字(2个字节)。
例如如果访问的是VD4,其中V代表存储器类型是V存储器,4代表存储器索引值,D代表访问的长度是1个双字(4个字节)。
如果访问的是VD0,,其中V代表存储器类型是V存储器,0代表存储器索引值,D代表访问的长度是1个双字(4个字节),这次访问包含了V0.0-V3.7共32个位区域,VB0-VB3共4个字节区域,VW0-VW2共2个字区域。
绝对寻址
绝对寻址直接指出存储区类型,地址索引和访问长度即可。
符号寻址
为绝对地址定义一个符号,同时添加相应的注释。符号也是可以用来寻址的,即通过符号名称找到对应的地址,例如在编程时可以通过“瞬时流量1”这个符号名称来找到VD6000这个地址。符号表中定义变量是不需要指定变量的数据类型的,而变量的类型(用哪种规则解析)是由具体调用的指令来和子程序的接口来确定的。其中地址的基本要素也是存储区类型,地址索引和访问长度。
在程序中直接使用符号名称来指代某个变量,在定义符号表时已经定义了数据存储器的类型,地址索引和访问长度。
直接寻址的两种方式单独显示即同时显示的切换方法如下
间接寻址
你可以将指针想象成一辆自动取送货的小车,变量是货架上的一个个货位,只需要将货位号发给小车,小车就能找到这个位置来取送货物。
间接寻址的过程是,首先定义一个指针变量,让指针变量指向存储区的纯数值索引。再通过指针访问这个存储区,通过改变指针数值,指向另一个存储区,再访问另一个存储区。
指针是包含另一个存储位置地址的双字存储位置。只能将 V 存储位置、L 存储位置或累加器寄存器(AC1、AC2、AC3)用作指针。要创建指针,必须使用“移动双字”指令,将间接寻址的存储位置地址移至指针位置。指针还可以作为参数传递至子程序。
注意:修改指针值时,切记调整所访问数据的大小:访问字节时,指针值加 1;访问定时器或计数器的字或当前值时,指针值加 2;访问双字时,指针值加 4。
哪些存储区支持间接寻址
S7-200 SMART 允许指针访问下列存储区:I、Q、V、M、S、T(仅限当前值)、C(仅限当前值)、SM、AI 和 AQ。单个位或访问 HC、L 或 AC 存储区不支持间接寻址访问。
总结
直接寻址时,绝对寻址和符号寻址这两种方式本质是三要素,一般在编程中,不需要监视的临时变量,中间过渡变量可以采用绝对寻址的方法来使用,需要监视的变量更适合符号寻址,也方便调试监控。而间接寻址更适合批量操作一定区域的变量,特别是与循环指令配合使用。
相关文章