PLC中的数据类型有哪些?
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PLC 的数据类型
在工业自动化的控制系统中,PLC 可编程逻辑控制器是一种非常常见的控制器,比较有名的PLC 品牌,国外有西门子、三菱、欧姆龙、施耐德等,国内有信捷、台达等;
PLC 作为工业现场使用的控制器,具有安全稳定的特性,适用于工业现场复杂的生产环境以及对于通讯的实时性的高要求;
对于工厂的制造设备来说,数据的传输,是非常重要的,一般来说,一个完整的工厂内,充满了各种传感器、仪器仪表、执行器、驱动器、电机等元器件,它们之间通过电线或总线连接,将现场设备产生的实时生产数据,传送到PLC 中,经过PLC 中的程序的处理,最终输出到现场的各个执行器,形成了一个周而复始的自动化过程;
如果我们要使用PLC 来进行编程,首先就要了解PLC 的可使用的数据类型有哪些
我们以西门子S7-1200系列的PLC 为例,来进行说明;西门子的PLC 市场占有率在所以PLC 品牌中居首位,是十分具有代表性的品牌
我们先来看1200的基本数据类型,包括:
1、位和位序列:
位和位序列主要包括以下类型:位Bit 、字节Byte 、字Word 、双字DWORD,西门子官方将这四类综合在一起,是因为这四个数据类型都是由位组成;
首先来说“位”,即一个Bit,也就是布尔量BOOL,其数值为二进制的0或者1,其详细信息可见下图1,众所周知,计算机是一个二进制的系统,这是所有计算的基础,无论什么数据,最终都会转化为二进制,才能被计算机的芯片识别,PLC 也是一种计算机,所以,也是以二进制为基础的;位数据可以表示一个传感器的状态,比如0表示无信号,1 表示有信号,也可以作为输出状态,比如0表示电磁阀或电机无输出,1表示阀体动作或电机运行,等等,在PLC 中,特别是梯形图逻辑中,位数据是最常用的一种数据类型,尽管每个位只能表示两个状态,但当多个位逻辑组合在一起,就可以形成一个复杂的逻辑条件,从而实现复杂的动作控制;
Bit
第二个是“字节”
,即一个Byte,
在对应关系上,每个字节有8
个位Bit,如果写成等式
,即:1 Byte=8
Bits;
Byte : Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
假设Byte0,在西门子PLC 中,可以表示为MB0或者QB0等,其中M 、Q 为存储区域类型,如M 为中间存储区,Q 为输出存储区;
以M 区为例,上面的Byte 可以表示为:MB0=0000 1001一个字节中的位从左到右,依次从高位到低位,即:M0.0=1Bit0,M0.1=0Bit1,M0.2=0Bit2,M0.3=1Bit3,M0.4=0Bit4,M0.5=0Bit5,M0.6=0Bit6,M0.7=0Bit 7;其中M0.0、M0.1等写法是字节MB0中的各个位的表示形式;
因为一个字节有8个位,所以每个字节的数值就不只0或者1这么简单,它至多可以表示2的8次方个值,十进制范围为0~255,或者-128~+127;
第三个是字,即一个Word,与字节类似,只不过字的位数更多,有16位,写成等式为:1 Word=16 Bits,也可以写成1 Word= 2 Bytes;可以说,有了对字节的了解,那么字也不成问题,简单理解,就是两个字节加起来,即是一个字;
不过,在西门子的PLC中,关于字的位数据表示,有一个值得注意的问题,即所谓“大端”、“小端”问题;
这么来说,1 Word由两个字节组成,以M区举例,写成MW0,也就是MB0+MB1;请看下面的表示:
MB0:bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
MW0:bit15 bit14 bit13 bit12 bit11 bit 10 bit9 bit8 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
如果按照从左到右,从高位到低位的顺序,bit15-bit8应该是MB1,bit7-bit0应该是MB0,这样一一对应,也就是所谓的“小端”模式,然而,西门子采用的是大端模式,也就是说,bit15-bit8表示的是MB0,bit7-bit0表示的是MB1,依旧是从左到右,不过是写成:
Bit15 bit8 bit7 bit0
这个地方容易造成的困惑在于,当你把word当做一个整体时,比如MW0,这时如果让你表示MW0的第8个位是多少,你可能需要注意,它应该是M0.0,而不是M1.0;
第四个是双字,即DWord,与字节和字的关系类似,双字就是两个字的组合,即1 DWord= 2 Word,注意,双字也是“大端”模式,所以,在表示其中的某一位时,需要特别注意;
以上是位以及位序列的数据类型的说明,下图1中有详细的列举,可以说位以及位序列的数据类型,是最常用的数据类型之一;而且,这些数据类型不只是在PLC中有此概念,它们是整个计算机系统的基本概念;
图1
2、整数数据类型
在1200中,整数分为USint8位无符号、Sint8位有符号、Uint16位无符号、Int16位
有符号、UDint32位无符号、Dint32位有符号六种;
顾名思义,整数类型是用来表示整数数值的,其实,整数数据类型完全可以放在上面的位数据类型中一起说明,从本质上来说,它与位序列的byte、Word、Dword没有区别,只是在PLC中,整数数据被专门表示用于整数值的运算;
3、浮点型实数数据类型
S7-1200中,实数类型有两种,分别是Real32位、LReal64位,即32位单精度、64位双精度实数; 二者的差别除了数值表示范围之外,最主要的事显示精度的区别,其中Real类型,即单精度实数,最高可以显示6位有效数字,而LReal类型,最高可显示15位有效数字,从精度上来说,有非常大的提升,适用于对于精度要求非常高的使用场景;
这里需要注意的地方,就是精度,实际上,当你使用浮点数进行运算的时候,大多数时候也会对精度有所要求,这时候,如果对精度要求超过6位数时,就要特别注意,单精度实数的运算问题,最好采用双精度;
4、时间和日期数据类型
PLC作为工业控制器,对于定时器这类指令的需求,是非常大的,在S7-1200中,西门子提供了专用于时间和日期显示的数据类型,分别是:
Time:32位
Date:16位
Time of Day:32位
本质上,日期数据只是一种表示形式,其基础依旧是以位为基础的数据,
TIME 数据作为有符号双整数存储,基本单位为毫秒;存储的数值是多少,就代表
有多少ms; 编辑时可以选择性使用日期d、小时h、分钟m、秒s 和毫秒ms 作为单位;
不需要指定全部时间单位; 例如,T5h10s 和500h 均有效;所有指定单位值的组合值不能超过以毫秒表示的时间日期类型的上限或下限-2,147,483,648 ms 到+2,147,483,647 ms;
DATE 数据作为无符号整数值存储,被解释为添加到基础日期1990 年1 月1 日的天数,用以获取指定日期; 编辑器格式必须指定年、月和日;
TOD TIME_OF_DAY 数据作为无符号双整数值存储,被解释为自指定日期的凌晨算起的毫秒数凌晨= 0 ms; 必须指定小时24 小时/天、分钟和秒; 可以选择指定小数秒格式;
其他数据类型:
1、结构数据类型Struct
上面所说的,都是1200的基本数据类型,而实际使用中,对于数据的使用是多样的,有的时候,可能需要将多个基本数据类型集中在一起,最大的优点,是一种数据管理,即方便将某个元素的多种属性集中在一起,方便编程人员进行数据调用和管理;
Struct可以嵌套,最多8层,实际上,它与西门子的另一种数据类型UDT自定义数据比较类似,但相比之下,有一些缺点:
•维护成本增加:如果对一个Struct进行了多次复制,则在更改过程中该Struct也必需进行相应的多次更改;
•Struct与PLC 数据类型UDT的相同结构不兼容;
•由于系统会检查所有结构元素的类型是否匹配,因而会导致性能下降;
•存储空间要求增加:每个Struct都是一个单独的对象,其描述信息将加载到PLC中;所以,需要使用Struct类型时,也可以使用PLC数据类型UDT代替;
2、UDT
PLC数据类型UDT
从TIA 博途V11 开始,S7-1200 支持PLC数据类型UDT;
UDT类型是一种由多个不同数据类型元素组成的数据结构,元素可以是基本数据类型,也可以是STRUCT、数组等复杂数据类型以及其它UDT等;UDT类型嵌套UDT类型的深度限制为8 级;
UDT类型可以在DB、OB/FC/FB接口区处使用;从TIA 博途V13SP1 开
始,S7-1200 V4.0开始,PLC变量表中的I和Q也可以使用UDT类型;
UDT类型可在程序中统一更改和重复使用,一旦某UDT类型发生修改,执行软件全部编译可以自动更新所有使用该数据类型的变量;
定义为UDT类型的变量在程序中可作为一个变量整体使用,也可单独使用组成该变量的元素;此外还可以在新建DB块时,直接创建UDT类型的DB,该DB只包含一个UDT类型的变量;
UDT类型作为整体使用时,可以与Variant、DB_ANY类型及相关指令默契配合; 理论上来说,UDT是Struct类型的升级替代,功能基本完全兼容Struct类型;
UDT建立及应用案例
1. 新建UDT
点击CPU菜单下,PLC数据类型中的“添加新数据类型”按钮,如图1所示;
图1 新建UDT
2. 在弹出页面可以添加需要的变量、类型、起始值、注释等,如图2所示;
图2 定义UDT内的变量
3. 在图2红框处右键属性常规,可以修改该数据类型的名称,如图3所示;
图3 修改UDT名称
4. DB中使用,如图4所示;
图4 定义UDT类型的变量
5. 程序中使用,类似于Struct,如图5所示;图5 UDT的使用
6. 根据UDT定义DB块,如图6所示;
图6 建立UDT类型的DB
此时打开DB块,可以发现和在DB中新建UDT变量差了层级,在使用内部变量没有太多差别;并且这种方式下,除非修改UDT,否则无法更改DB块中的内容,如图7所示,变量均为灰色;重要用途:参见;
图7 UDT类型的DB展开
7. 从TIA 博途V14SP1开始,相同结构,但不同名称的UDT的变量,可以直接复制,如图8-11所示;
图8 定义不同名称的UDT,但内部变量类型相同
图9 使用UDT建立变量
图10 UDT类型间的MOVE
SCL的版本程序,如图11所示
图11 SCL版本程序
UDT在PLC变量表的应用
实现功能:将Profinet IO通讯中的I点送入DB,将DB送入Q点,如图12-16所示;
1. 建立I点和Q点两个UDT,元素变量类型及排布设置参照通讯对象
图12 I点定义的UDT
图13 Q点定义的UDT
2. PLC变量表和DB块使用UDT
图14 PLC变量表中使用图12-13定义的UDT
图14 DB块中使用的UDT类型定义变量
3. 写MOVE程序传递
图16 程序详情
SCL版本程序如图17所示;图17 SCL版本程序。