位(布尔)、字节、字、双字、整数、双整数、浮点数、字符串、时间、数组、指针……这些都是PLC的数据类型。是不是感觉很复杂?
其实在PLC的数字世界里这很简单,在它的底层逻辑中,一切数据最终都归结为两种状态:0与1。
- 位
其中的每一个0或者1就是一个位,英文名bit(比特),位是PLC可寻址的最小数据单元。
在PLC的世界里,没有那么多的弯弯绕,每个位只能存储0或1,也就是非黑即白,不是开就是关。
而占用一个位的数据类型一般是布尔(BOOL),一般用X代表位寻址。
为了便于操作,PLC帮你能操作的每一个位都起了一个名字。
例如:
西门子PLC中的i0.0/M2.1/v3.2/db1.dbx2.0/q4.5,
三菱PLC中的X0 、Y1 M10,这些都是位。
- 字节
连续8个位组成一个字节,字节英文名Byte,拜特。咱们平时说的KB,MB,GB中的B,就是这玩意!
注意,一定要和比特做好区分。毕竟,一个英文字符需要的是一个字节存储。字节寻址时一般yao 用字母B。
同样为了便于你操作,PLC又帮你为每一个位划分了区域,规定了他们的站队位置,并且为每一排做了个标号。
对于西门子PLC来说,每一排就是一个字节,如IB0表示输入字节0,包含I0.0~I0.7;MB10表示内部存储器字节10,包含m10.0~m10.7;vb20,DB1.DBB0也是表示一个字节。
但是三菱FX系列PLC中并没有标准的字节类型数据,要想进行字节数据的相关操作,可能需要你自己构造。
1字节=8个位,那么8个位存在多少种组合呢?没错,是2的8次方种,也就是256种。
所以,一个字节的无符号数据范围是0~255。
那么为题来了,如果一个字节的数值是255,你再给他 + 1,结果会是多少呢?
- 字
两个连续的字节,组成一个字,Word, 这不就是一个英语单词最短要俩字母吗?一个字有16个位,也就是一个字可以包含2的16次方=6,5536个数字,对应无符号数范围就是0~6,5535。
字寻址时一般要用字母W。
西门子PLC中的MW6就是一个字,他是由MB6和MB7组成;MW7也是一个字,他是由MB7和MB8组成。
而三菱PLC中的D0,他就是D0。因为它每一排就是一个字。
既然字是两个字节组成的,那这两个字节就有高低先后之分。MW6到底是6在前还是7在前呢,不同的厂家设计可能不一样。如果你在使用字类型数据时,出现组态软件读取的值不对,那么就有可能是字节的排列顺序不一样,你可以尝试对高低字节进行交换。当然也有可能你交叉引用了,就像MW6和MW7都会引用MB7。
- 双字
双字,顾名思义,就是俩个字,double word,由4字节也就是32个位构成,无符号数范围是0~42,9496,7295。一般用于大容量数据处理,其实浮点数也属于大容量数据。
双字寻址时一般要用字母D。
对于西门子PLC,一个双字MD5包含MW5和MW7两个字。
对于三菱PLC,貌似没法一眼看出一个地址变量是不是双字,一个字你可用D0存储,一个双字你也可以用D0,至于它到底是字还是双字由你使用的指令决定,如果指令是32位指令,他会自动把D1给你附上组成一个双字。
双字同样存在高低字节交换和交叉引用问题。
- 其他
其实,看到这里,你已经把PLC的数据类型都学完了。
至于,什么整数、双整数、浮点数、字符串、时间、数组、指针等等,这些类型,都是上边这几种类型的衍生和复合。
其中,整数就是把字的第一位设置为符号位,它的取值范围就变成了(-3,2768~3,2767),双整数同理。
浮点数是在双字中设置了符号位、指数和尾数。
而字符串是一组以字符个数开头的字节数据。数组同理。
这些数据的具体实现原理,无特殊情况基本不用细究,看看说明书的,只要不超范围,直接拿来用就行了。