相对于内置闪存和内置RAM中的用户程序区、参数区,内置RAM中的I/O存储器区是用户使用最多的区域。简言之,I/O存储器区的作用就相当于联锁电路中的继电器,使用编程软件对I/O存储器区中的通道和位进行操作。
1.I/O存储器区的构成
CP1系列PLC的I/O存储器区是由字(通道)、字节、数字、位构成的,16个位组成一个字,8个位组成一个字节,4个位组成一个数字。通常I/O存储器区是由若干连续字构成的,一个字又是由2个字节或4个数字,即16个位组成的,关系如图2-33所示。一般术语中,“最高位”通常指1个字中的最左位,“最低位”指1个字中的最右位。
图2-33 字(通道)结构
2.I/O存储器区数据结构
如图2-33所示,PLC内部数据通道每一位存储的都是二进制数的“0”或“1”。而相对于用户,如果一位一位地给通道赋值会非常烦琐。因此,欧姆龙PLC内部提供了多种数据形式。
(1)无符号数据形式
无符号数据总是表示正的数,在数据通道中,系统默认均为无符号数据。无符号数据有三种数据类型,分别是十六进制、十进制和BCD数。
从图2-33可知,一个数据通道由4个数字构成,每4个二进制数可以表示为1个十六进制数,因此输入一个4位十六进制数可以对一个数据通道的每一位赋值。十六进制里的0~9相当于十进制的0~9,十六进制的A~F相当于十进制数的10~15。在每个数字中,每一位都有自己对应的权值,当对应位内数字为1时,其对应的权值有效;当对应位内数字为0时,其对应的权值无效。每个数字内部的数值等于对应每一个有效权值之和,最后将对应权值之和转化为十六进制数,就是该数字需要输入的数据。依次将4个数字全部转换,就得到了所输入的一个4位十六进制数。一个数据通道最大值为FFFFH,双通道最大值为FFFFFFFFH。当所要输入数据为无符号十六进制数时,数据前需要加“#”符号。计算流程如图2-34所示,具体数制对应见表2-31。
图2-34 无符号十六进制数计算示例
表2-31 BCD码、十六进制数、十进制数、二进制数对照表
十进制是用户最习惯的数制,但是PLC内部通道存储的是二进制或十六进制数。所以当以十进制格式输入数据时,PLC通道中的每一位仍然是二进制数。由此可知,一个通道存储十进制数的容量等于十六进制数容量的转化值,即0(0000H)~65535(FFFFH)。双通道8位数字的数据范围为0(00000000H)~4294967295(FFFFFFFFH),当输入数据为无符号十进制数时,数据前需要加“&”符号。(www.xing528.com)
在定时器或计数器设定值输入时,使用者通常习惯十进制方式计算需要输入的数据。由上一节得知,即便向数据通道中输入十进制数,PLC内部每个字中依然是十六进制数。所以使用者需要将设定的数据转化成十六进制数,然后再进行赋值。这样的做法会大大增加使用者的工作量。
BCD码是用4位二进制码的组合代表十进制数的0~9,BCD码与其他数制数值对照关系见表2-31。4位二进制数码有16种组合,原则上可任选其中的10种作为代码,分别代表十进制中的0~9十个数。当用户使用定时器或计数器指令时,可以将定时器或计数器的计数方式设定为BCD方式,则定时器或计数器就会按照十进制数在对应设定值通道内以BCD码形式保存。当数据以BCD码存储时,数据前需要加“#”符号。
(2)带符号数据形式
带符号数据形式可以在通道内表达正数或负数。与无符号数据输入方式相比,其不同之处只在于将通道中第15位作为符号位;当第15位上是0时,整个通道数据为正,当第15位上是1时,整个通道数据为负。带符号数据输入方式有两种,即带符号十六进制数和带符号十进制数。
带符号十六进制数的正数范围是0000H~7FFFH,将其转化为十进制数的方法与无符号十六进制数相同。负数范围是8000H~FFFFH,将其转化为十进制数的方法是将通道内每一位取反,然后加1,所得的十六进制数再按照无符号十六进制数的方法转化成十进制数,结果数据为通道内负数的绝对值。输入带符号十六进制数时需在数据前加“#”号。对应关系如图2-35所示。
图2-35 带符号十六进制数计算示例
在带符号十进制数方式下,用户可以直接将带符号的十进制数输入通道内。单通道正数范围是0~32767,负数范围是-32768~-1;双通道正数范围是0~2147483647,负数范围是-2147483648~-1。输入带符号十进制数时需在数据前加“+”或“-”符号。
需要注意以下几点:
①在输入的数据前需添加相应数据类型符号,此时系统才能认定为数字。否则系统认定为通道地址。
②例如输入十六进制数ABC9,在无符号和有符号十六进制数中,其数值均为ABC9,但是在无符号十进制数中数值为43977,而在有符号十进制数中却为-21559。所以,当使用带符号数据方式输入数据后,观察通道内的数据需切换到相应的数据类型。
③由于无符号和有符号十六进制数无法明示通道内数值的正负,因此建议用户在查寻通道内的有符号数据时,将数据显示模式切换为有符号十进制数以便查找。
④当定时器和计数器设定值以无符号十六进制或者无符号十进制输入设定值时,需将定时器和计数器执行方式设定为二进制数,且定时器与计数器将会按照十六进制数运行。当以无符号BCD码输入设定值时,需要将定时器和计数器执行方式设定为BCD码,且所有定时器和计数器设定值输入方式均相同。有符号数据不能给定时器和计数器赋值。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。