Codesys数据结构:1.1 标准数据类型-CODESYS资源下载区-酷德网 - CoDeSys软件教程下载,CoDeSys工控资讯门户 

酷德网

HSC6490-cn中国制造,中国芯~
查看: 2871|回复: 0

Codesys数据结构:1.1 标准数据类型

[复制链接]

该用户从未签到

发表于 2023-4-12 22:37:02 | 显示全部楼层 |阅读模式
一、 标准数据类型概述

这里的标准指的是IEC61131-3,也就是说下面的数据类型是Codesys符合这个标准的数据类型,
IEC 61131-3是由国际电工委员会所制定IEC 61131标准的第3部分,用于规范可编程逻辑控制器(PLC),DCS,IPC,CNC和SCADA的编程系统的标准,应用IEC 61131-3标准已经成为工业控制领域的趋势。 在PLC方面,编辑软件只需符合IEC 61131-3国际标准规范,便可借由符合各项标准的语言架构,进而能建立任何人皆可了解的程序—《百度百科》。
Codesys数据结构:1.1 标准数据类型-1.jpg


二、布尔类型

2.1、表示

布尔类型用关键字 BOOL 表示,它的值只有TRUE 和 FALSE,也可以用1 和 0表示,如下图所示;
  1. VAR
  2.         bTest1 : BOOL := TRUE;
  3.         bTest2 : BOOL := FALSE;
  4.        
  5.         bTest3 : BOOL :=1;
  6.         bTest4 : BOOL :=0;
  7. END_VAR
复制代码
2.2、内存空间

布尔类型内存空间是8位,也就是1个字节,声明一个BOOL类型的变量,会开辟8位的内存空间,虽然它实际上只用1位(也就是最低位), 最低位是0,则为TRUE;最低位是1, 则为FALSE;
2#00000001

Codesys数据结构:1.1 标准数据类型-2.png


2.3、物理空间

内存地址连续的多个BOOL类型变量(例如在结构体中定义8个BOOL变量,或者定义含有8个BOOL变量的数组)每个BOOL类型都开辟一个Byte大小的内存空间,而不会公用一个BYTE空间大小;

Codesys数据结构:1.1 标准数据类型-3.jpg


(1) bool类型结构体

    定义结构体,含有8个bool变量,理想情况下是这个结构体只占一个字节(8位),每一位代表一个bool变量的值,而实际情况却不是,下面进行测试
  1. TYPE DUT :
  2. STRUCT
  3.         mbool_0 : BOOL;
  4.         mbool_1 : BOOL;
  5.         mbool_2 : BOOL;
  6.         mbool_3 : BOOL;
  7.         mbool_4 : BOOL;
  8.         mbool_5 : BOOL;
  9.         mbool_6 : BOOL;
  10.         mbool_7 : BOOL;
  11. END_STRUCT
  12. END_TYPE
复制代码
    定义结构体类型变量,并用 SIZEOF 查看变量所需内存字节大小
SIZEOF 运算符用于定义变量x所需的字节数。SIZEOF 运算符始终产生无符号值
  1. VAR
  2.         mDut : DUT;
  3.         iVar : UINT;
  4. END_VAR
复制代码
  1. iVar :=SIZEOF(mDut);
复制代码
    iVar 结果为: 8(8个字节空间)
(2) bool类型数组

    定义含有8个BOOL变量的数组,用 sizeof查看这个数组变量开辟内存的字节数个数
  1. VAR
  2.         arrTest : ARRAY[0..7] OF BOOL ;
  3.         iVar    : UINT ;
  4. END_VAR
复制代码
  1. iVar :=SIZEOF(arrTest);
复制代码
    iVar 结果为: 8(8个字节空间)
三、整型

Codesys数据结构:1.1 标准数据类型-4.jpg


3.1、表示

观察整型关键字可得出,基本符号为:BYTE 、WORD、 INT
其他符号表示的含义如下:
    S : 是Short的缩写,表示短数据类型,即内存空间为8位;D : 是Double的缩写,表示双数据类型,即内存空间为32位;L:是Long的缩写,表示长数据类型, 即内存空间为64位;U : 是Unsigned的缩写,表示无符号数据类型;
对于L 长数据类型,所占的内存空间要看具体硬件操作系统是否支持64位;
3.2、字节型数据

BYTE、WORD、DWORD、LWORD都是无符号类型。
常规用法举例说明:比如用来做为枚举值,每一位表示一个情况;
定义一个WORD类型的枚举值,每一位表示一种错误,这样 2#00000011 就表示error_1和error_2同时发生;
  1. TYPE ErrorEum :(
  2.         error_1 :=2#00000001,
  3.         error_2 :=2#00000010,
  4.         error_3 :=2#00000100,
  5.         error_4 :=2#00001000,
  6.         error_5 :=2#00010000,
  7.         error_6 :=2#00100000,
  8.         error_7 :=2#01000000)WORD;
  9. END_TYPE
复制代码
相关位操作运算符:用于BOOL, BYTE, WORD, DWORD, LWORD类型

    NOT : 按位取反 ;
    例如: NOT(2#0000001) 结果为 2#11111110AND : 按位与 ,当输入位都为1时,输出才为1,否则为0;
    例如:(2#00000001 )AND(2#00000011)结果为 2#00000001OR : 按位或,当输入的位只要有一个为1,则该位输出为1,否则为0;
    例如:(2#00000101 )OR (2#00000011)结果为 2#00000111XOR:按位异或,当输入的位不一样时,则该位输出为1,否则为0;
    例如:(2#00000111 )XOR (2#00000011)结果为 2#00000100
相关位移运算符:用于BYTE, WORD, DWORD, LWORD类型

    SHL(in,n):右移运算符,in指的是操作数,n指的是向右移动的位数
    例如:byVar:byte:=2#10001100; SHL(byVar,2)的结果为2#00100011;SHR (in,n):左移运算符,in指的是操作数,n指的是向左移动的位数
    例如:byVar:byte:=2#10001100;SHR(byVar,2)的结果为2#00110000;ROL(in,n):循环右移运算符,把最右边移出去的位添加到最左边位置
    例如:byVar:byte:=2#10001001; ROL(byVar,2)的结果为2#01100010;ROR(in,n):循环左移运算符,把最左边移出去的位添加到最右边位置
    例如: byVar:byte:=2#10001001; ROR(byVar,2)的结果为2#00100110;
3.3、符号数据类型说明

    SINT,INT,DINT,LINT表示有符号的数据整型;UINT,UINT,UDINT,ULINT表示无符号的数据整型;有无符号的区别在于最高位;无符号数据类型的最高位表示数据本身,是一个数值;有符号数据类型最高位表示正负数的标识,最高位如果位1,表示负数,最高位为0,表示正数;
  1. VAR
  2.         iTest : SINT :=-1;(*有符号*)
  3.         uiTest:USINT :=255;(*无符号*)
  4. END_VAR
复制代码
如下图所示:运行结果值都为2#11111111,也就是说有符号变量值2#11111111对应的十进制为-1,无符号变量值2#11111111对应的十进制为255

Codesys数据结构:1.1 标准数据类型-5.png


有符号二进制转十进制:
    (1) 最高位为0 : 表示正数,直接进行二进制转换
    例如SINT变量的值 2#00000011,转为十进制为3(2) 最高位为1: 符号位不参与运算:==> 先减去1 ==> 取反 ==>转换
    例如SINT变量的值 2#11111111,先减1为2#11111110,取反为2#10000001,转十进制为-1(最高位1表示负号);
四、实数

Codesys数据结构:1.1 标准数据类型-6.png


4.1 表示

    REAL 表示 32 位实数类型LREAL 表示 64 位实数类型
由于计算机存储的原因,计算机存储实数类型的数值只是近似值,并不是准确值

Codesys数据结构:1.1 标准数据类型-7.png

所以并不能用等于作为条件判断 ;
4.2 存储

存储:整数部分+小数部分
例如 18.19
整数部分:二进制 00010010
小数部分:通过不断乘2实现转换
0.192 = 0.36 小于1,当前为取0;
0.36
2 = 0.72 小于1,当前为取0;
0.722 = 1.04 大于1,当前为取1;
0.04
2 = 0.08 小于1,当前为取0;
…
0010…
五、字符串

    字符串在声明变量的时候,可以自定义字符的大小
    str : STRING(50) ;//显示50个字符
    字符串声明变量的时候,如果没有自定义字符大小,默认为80个字符;
    给字符串变量赋值时,如果超过其字符个数大小,会从右边截断;
    str: STRING(5) :='123456789' ;输出结果为‘12345’
    字符串中每个字符为1个字节,字符串结尾会自动添加一个结束特殊字符,因此字符串变量的内存大小位:(n+1)字节
    str : STRING(50) ; SIZEOF(str) 结果为: 51
    字符串大小不受限制,即String(n) 中的n没有限制,可以是1000;
    -字符串中每个字符都用1个byte表示,1个byte取值区间为0~255,一个256个数,每个字符对应一个数,也就是只能表示256个字符,其对应关系采用ASCII码对照表:例如65 对应字符A

    Codesys数据结构:1.1 标准数据类型-8.jpg

    Codesys数据结构:1.1 标准数据类型-9.jpg


六、时间数据类型

如图所示,一共有四种类型可以表示时间,但是每种类型的表示时间的分辨率不同,我们经常用到的是TIME类型,精确到毫秒

Codesys数据结构:1.1 标准数据类型-10.png


6.1、 类型介绍

(1)TIME:

长度为32位的时间数据类型,分别率为毫秒,其数据类型的常量以"T#"开头,其变量建议使用前缀"t"标识,比如下面代码中的tStartTime。
其中 "D"表示天,"H"表示小时,"M"表示分钟,"S"表示秒,"MS"表示毫秒
  1. tStartTime : TIME :=T#1D7H2M47S200MS;
复制代码
(2)TIME_OF_DAY :

数据长度为32位的数据类型,分表率是毫秒,用来表示一天的时钟时间,其数据类型的常量以"TOD#"开头,其变量建议使用前缀"tod"标识,比如下面代码中的todTime。其数值代表:20点10分35秒101毫秒
  1. todTime : TIME_OF_DAY :=TOD#20:10:35.101;(*20点10分35秒101毫秒*)
复制代码
(3)DATE :

数据长度为32位的数据类型,分表率是天,用来表示日期,其数据类型的常量以"D#"或者"DATE"开头,其变量建议使用前缀"date"标识,比如下面代码中的dateTime。其数值代表:2022年2月22号
  1. dateTime : DATE :=D#2022-02-22;(*2022年2月22号*)
复制代码
(4) DATE_AND_TIME :

数据长度为32位的数据类型,分表率是秒,用来表示日期时间,其数据类型的常量以"DT#"开头,其变量建议使用前缀"dt"标识,比如下面代码中的dateTime。其数值代表:2022年2月22号20点8分10秒
  1. dtTime : DATE_AND_TIME:= DT#2022-02-22-20:08:10;(*2022年2月22号20点8分10秒*)
复制代码
6.2、 相关功能块说明

(1)TOF(IN,PT,Q,ET): 延时断开功能块;

    当输入IN从TRUE变为FALSE,ET开始从0计时,Q为TRUE;当记录时间ET >= 设置时间PT时,Q为FALSE;在中间过程中,如果IN从FALSE置为TRUE,ET清空为0,Q为TRUE;

(2) TON(IN,PT,Q,ET): 延时导通功能块;

    当输入IN从FALSE变为TRUE,ET开始从0计时,Q为FALSE;当记录时间ET >= 设置时间PT时,Q为TRUE一直到IN为FALSE;在中间过程中,如果IN从TRUE置为FALSE,ET清空为0,Q为FALSE;

(3)TP(IN,PT,Q,ET) : 脉冲定时器

    如果IN为FALSE,Q为FALSE, ET为0;只要IN变为TRUE,定时器开始启动,ET开始计时直到到达PT,Q为TRUE;在定时器运行中,IN即使变为FALSE,ET 也会不断计时直到到达PT,在此过程中Q也保持为TRUE;

(4) RTC(EN,PDT,Q,CDT):

    当输入ET变为TRUE时,CDT会以设置时间PDT为起点开始计时,Q输出为TRUE;当输入ET变为FALSE时,CDT初始化为默认值,Q输出为FALSE;

+10
不赞一个?
打赏鼓励一下!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则


顶部qrcode底部
关注酷德网订阅号,获取更多资讯!

QQ|Archiver|手机版|小黑屋|酷德论坛 ( 苏ICP备16065247号-1 )|网站地图

GMT+8, 2026-11-9 03:46 , Processed in 0.174515 second(s), 50 queries .

酷德网

© 2001-2013 Hicodesys. 技术支持 by 酷德网

快速回复 返回顶部 返回列表