在S7-200 SMART的编程语言中,大多数指令要同具有一定大小的数据对象一起进行操 作。不同的数据对象具有不同的数据类型,不同的数据类型具有不同的数制和格式选择。程 序中所用的数据可指定一种数据类型。在指定数据类型时,要确定数据大小和数据位结构。
S7-200 SMART的数据类型有以下几种,字符串、布尔型(0或1)、整型和实型(浮点 数)等。任何类型的数据都是以一定格式釆用二进制的形式保存在存储器内。一位二进制数 称为1位(bit),包括“0”或“1”两种状态,表示处理数据的最小单位。可以用一位二进 制数的两种不同取值(“0”或“1”)来表示开关量的两种不同状态。对应于PLC中的编程 元件,如果该位为“1”,则表示梯形图中对应编程元件的线圈有信号流流过,其常开触点接 通,常闭触点断开。如果该位为“0”,则表示梯形图中对应编程元件的线圈没有信号流流 过,其常开触点断开,常闭触点接通。
数据从数据长度上可分为位、字节、字或双字等。8位二进制数组成1个字节(Byte), 其中第0位为最低位(LSB),第7位为最高位(MSB)o两个字节组成1个字(Word),两 个字组成1个双字(Double Word)0 一般用二进制补码形式表示有符号数,其最高位为符号 位。最高位为0时表示正数,为1时表示负数,最大的16位正数为16#7FFF, 16#表示十六 进制数。
S7-200 SMART的基本数据类型及范围如表4-1所示。
数据类型为STRING的字符串由若干个ASCII码字符组成,第一个字节定义字符串的 长度(0〜254),后面的每个字符占一个字节。变量字符串最多255个字节(长度字节加上 254个字符)。
S7-200 SMART每条指令由两部分组成:一部分为操作码,另一部分为操作数。操作码 指出指令的功能,操作数则指明操作码操作的对象。所谓寻址,就是寻找操作数的过程。S7-200 SMART PLC CPU的寻址分为3种:立即寻址、直接寻址和间接寻址。
(1)立即寻址
在一条指令中,如果操作数本身就是操作码所需要处理的具体数据,这种操作的寻址方式就是立即寻址。
如:MOVW 16#1234, VW10
该指令为双操作数指令,第一个操作数称为源操作数,第二个操作数称为目的操作数。 该指令的功能是将十六进制数1234传送到变量存储器VW10中,指令中的源操作数 16#1234即为立即数,其寻址方式就是立即寻址方式。
(2)直接寻址
在一条指令中,如果操作数是以其所在地址形式出现的,这种指令的寻址方式就叫作直接寻址。
如:MOVB VB40, VB50
该指令的功能是将VB40中的字节数据传给VB50,指令中的源操作数的数值在指令中并未给出,只给出了存储操作数的地址VB40,寻址时要到该地址中寻找操作数,这种以给岀操作数地址形式的寻址方式是直接寻址。
1) 位寻址方式。
位存储单元的地址由字节地址和位地址组成,如I1.2,其中区域标识符“I”表示输入, 字节地址为I,位地址为2,如图4-2所示。这种存取方式也称为“字节.位”寻址方式。
2) 字节、字和双字寻址方式。
对字节、字和双字数据,直接寻址时需指明区域标识符、数据类型和存储区域内的首字节地址。例如,输入字节VB10, B表示字节(B是Byte的缩写),10为起始字节地址。相邻的两个字节组成一个字,VW10表示由VB10和VB11组成的1个字,VW10中的V为变量存储区域标识符,W表示字(W是Word的缩写),10为起始字的地址。VD10表示由 VB10〜VB13组成的双字,V为变量存储区域标识符,D表示存取双字(D是Double Word的缩写),10为起始字节的地址。同一地址的字节、字和双字存取操作的比较如图4-3所示。
可以用直接方式进行寻址的存储区包括:输入映像存储区I、输出映像存储区Q、变 量存储区V、位存储区M、定时器存储区T、计数器存储区C、高速计数器HC、累加器 AC、特殊存储器SM、局部存储器L、模拟量输入映像区AI、模拟量输出映像区AQ、顺序控制继电器S。
(3)间接寻址
在一条指令中,如果操作数是以操作数所在地址的地址形式出现的,这种指令的寻址方式就是间接寻址。操作数地址的地址也称为地址指针。地址指针前加"*"。
如:MOVW 2010, *VD20
该指令中,*VD20就是地址指针,在VD20中存放的是一个地址值,而该地址值是源操 作数2010存储的地址。如VD20中存入的是VW0,则该指令的功能是将十进制数2010传送到VW0地址中。
可以用间接方式进行寻址的存储区包括:输入映像存储区I、输出映像存储区Q、变量存储区V、位存储区M、顺序控制继电器S、定时器存储区T、计数器存储区C,其中 T和C仅仅是对于当前值进行间接寻址,而对独立的位值和模拟量值是不能进行间接寻址的。
使用间接寻址对某个存储器单元读、写时,首先要建立地址指针。指针为双字长, 用来存入另一个存储器的地址,只能用V、L或累加器AC做指针。建立指针必须用双字传送指令(MOVD)将需要间接寻址的存储器地址送到指针中,例如:MOVD &VB200, ACE指针也可以为子程序传递参数。&VB200表示VB200的地址,而不是VB200中的值。
1)用指针存取数据。
用指针存取数据时,操作数前加“*”号,表示该操作数为一个指针。图4-4中的*AC1 表示AC1是一个指针,AC1是AC1所指的地址中的数据。此例中,存于VB200和VB201 的数据被传送到累加器AC0的低16位。
2)修改指针。
在间接寻址方式中,指针指示了当前存取数据的地址。连续存取指针所指的数据时,当一个数据已经存入或取出,如果不及时修改指针会出现以后的存取仍使用巳用过的地址,为了使存取地址不重复,必须修改指针。因为指针是32位的数据,应使用双字指令来修改指针值,例如双字加法或双字加1指令。修改时记住需要调整的存储器地址的字节数:存取字节时,指针值加1;存取字时,指针值加2;存取双字时,指针值加4。
知识点词条:数据类型及寻址方式