Codesys数据结构(2):标准数据类型

CODESYS开发教程6-关键字及变量类型 这是一篇写给新手的关于CODESYS开发环境的小白教程,一看就懂...... 阅读详情
AI摘要

本文详细解释了IEC61131-3标准在工业控制编程中的应用,包括布尔类型(TRUE/FALSE、内存空间和物理空间)、整型(BYTE、WORD、INT等)、实数、字符串和时间数据类型(如TIME、TIME_OF_DAY等),以及相关功能块的描述。,

一、 标准数据类型概述

这里的标准指的是IEC61131-3,也就是说下面的数据类型是Codesys符合这个标准的数据类型,

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

在这里插入图片描述

二、布尔类型

2.1、表示

布尔类型用关键字 BOOL 表示,它的值只有TRUE 和 FALSE,也可以用1 和 0表示,如下图所示;

VAR
	bTest1 : BOOL := TRUE;
	bTest2 : BOOL := FALSE;
	
	bTest3 : BOOL := 1;
	bTest4 : BOOL := 0;
END_VAR
2.2、内存空间

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

2#00000001
在这里插入图片描述

2.3、物理空间

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

(1) bool类型结构体
  • 定义结构体,含有8个bool变量,理想情况下是这个结构体只占一个字节(8位),每一位代表一个bool变量的值,而实际情况却不是,下面进行测试
TYPE DUT :
STRUCT
	mbool_0 : BOOL;
	mbool_1 : BOOL;
	mbool_2 : BOOL;
	mbool_3 : BOOL;
	mbool_4 : BOOL;
	mbool_5 : BOOL;
	mbool_6 : BOOL;
	mbool_7 : BOOL;
END_STRUCT
END_TYPE
  • 定义结构体类型变量,并用 SIZEOF 查看变量所需内存字节大小

SIZEOF 运算符用于定义变量x所需的字节数。SIZEOF 运算符始终产生无符号值

VAR
	mDut : DUT;
	iVar : UINT;
END_VAR
iVar := SIZEOF(mDut);
  • iVar 结果为: 8(8个字节空间)
(2) bool类型数组
  • 定义含有8个BOOL变量的数组,用 sizeof查看这个数组变量开辟内存的字节数个数
VAR
	arrTest : ARRAY[0..7] OF BOOL ;
	iVar    : UINT ;
END_VAR
iVar := SIZEOF(arrTest);
  • iVar 结果为: 8(8个字节空间)

三、整型

在这里插入图片描述

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同时发生;

TYPE ErrorEum :
(
	error_1 := 2#00000001,
	error_2 := 2#00000010,
	error_3 := 2#00000100,
	error_4 := 2#00001000,
	error_5 := 2#00010000,
	error_6 := 2#00100000,
	error_7 := 2#01000000
)WORD;
END_TYPE

相关位操作运算符:用于BOOL, BYTE, WORD, DWORD, LWORD类型

  • NOT : 按位取反 ;
    例如: NOT(2#0000001) 结果为 2#11111110
  • AND : 按位与 ,当输入位都为1时,输出才为1,否则为0;
    例如:(2#00000001 )AND(2#00000011)结果为 2#00000001
  • OR : 按位或,当输入的位只要有一个为1,则该位输出为1,否则为0;
    例如:(2#00000101 )OR (2#00000011)结果为 2#00000111
  • XOR:按位异或,当输入的位不一样时,则该位输出为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,表示正数;
VAR
	iTest : SINT := -1 ;(*有符号*)
	uiTest:USINT := 255;(*无符号*)
END_VAR

如下图所示:运行结果值都为2#11111111,也就是说有符号变量值2#11111111对应的十进制为-1,无符号变量值2#11111111对应的十进制为255
在这里插入图片描述

有符号二进制转十进制:

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

四、实数

在这里插入图片描述

4.1 表示
  • REAL 表示 32 位实数类型
  • LREAL 表示 64 位实数类型

由于计算机存储的原因,计算机存储实数类型的数值只是近似值,并不是准确值
在这里插入图片描述
所以并不能用等于作为条件判断 ;

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
    在这里插入图片描述
    在这里插入图片描述

六、时间数据类型

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

6.1、 类型介绍
(1)TIME:

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

tStartTime : TIME :=T#1D7H2M47S200MS;
(2)TIME_OF_DAY :

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

todTime : TIME_OF_DAY :=TOD#20:10:35.101;(*20点10分35秒101毫秒*)
(3)DATE :

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

dateTime : DATE :=D#2022-02-22;(*2022年2月22号*)
(4) DATE_AND_TIME :

数据长度为32位的数据类型,分表率是秒,用来表示日期时间,其数据类型的常量以"DT#"开头,其变量建议使用前缀"dt"标识,比如下面代码中的dateTime。其数值代表:2022年2月22号20点8分10秒

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;

请添加图片描述

codesys工程ST语言学习笔记(七)类型转换 codesys 类型转换 ST语言的类型转换 都是在两个类型中间加个to 例如: STRING_TO_WSTRING('haha: \n'); lreal_to_string(5); 字符串拼接: input2:=concat(joint1,', ');//将’,‘加在joint1的后面; 阅读详情

相关推荐

树莓派-安装codesys

CODESYS 长期专注于工业智能技术、PLC 控制器编程开发工具包套件、复杂运动控制及数字化工厂解决方案的研发、销售和技术服务,基于先进的 .NET 架构和 IEC 61131- 3 国际编程标准,遵照 PLCopen 国际组织制定的技术规范,提供开发 PLC 控制器(自动化控制系统)的完整解决方案,提供实现运动控制、机器人控制、冗余控制(Redundancy)、安全控制(Safety)、人机交互(HMI)、基于 Web Service 的可视化编程等多个目标的自动化软件产品及核心技术。

qq_40821260的博客 2177

01 CODESYS应用基础知识之数据类型

CODESYS、数据基础类型

小王的博客 3万+

CODESYS标准数据类型实战指南:从原理到工业自动化应用

在工业自动化与PLC编程领域,数据类型是构建稳定、高效控制程序的基石。IEC 61131-3标准定义了如BOOL、INT、REAL、WORD等基础类型,其核心设计哲学在于确保程序的确定性、实时性及与硬件寄存器的直接映射能力。理解数据类型的位宽、取值范围及内存布局,对于实现精准的硬件交互、优化内存占用及保障通信可靠性具有关键的技术价值。例如,在模拟量处理、高速计数器及Modbus通信等典型应用场景中,类型选择直接影响数据精度与系统稳定性。本文聚焦于CODESYS平台,深入探讨**标准数据类型**的选型策略与*

weixin_28704565的博客 280

Codesys数据结构(1): 数据类型

Codesys软件是基于IEC61131-3国际标准的控制器开发平台软件;IEC 61131-3 标准包括两部分:编程和变量。编程部分描述了两个重要模型:IEC软件模型和通讯模型。变量部分定义了应用编程中需要的数据类型。计算机处理数据都是二进制处理方式,编译器会将编写的代码翻译成机器语言,在翻译成机器语言过程中,编译器会根据数据类型对对应内存中(01010001)的数据进行解析;一串二进制信息是有很多含义的,可以是字符,可以是正数,也可以是带小数的浮点数,这都是根据数据类型而决定的。

codesys01的博客 1590

CoDeSys系列-2、CoDeSys安装及Windows下创建项目测试

目前CODESYS在国内也有很多城市有办事处,且有国内的网站,所以通过国内的官网下载相关软件会方便很多,对应的一些扩展包也比较方便下载,一些安装教程对应的论坛也比较详细,对于入门CODESYS很有帮助,国内的一些芯片的推广也可以按照这种模式来,官网、IDE、文档、论坛、高速下载网址都是推广芯片很重要的一环。

逍遥游的博客 4007

CoDeSys编程之〈二〉:编程环境、运行时和总线技术

CODESYS Control RTE(即RunTime的缩写,实时系统)是一个基于Windows的、可以通过Codesys V3编程的软PLC系统,它利用CODESYS runtime使操作系统变成功能强大的软PLC。CODESYS软PLC和EtherCAT总线是经典组合,两者都可以集成在工控机上,节省了控制器的硬件成本(当然,这是在不考虑从站成本的情况下),但两者本质上并没有相同之处,是分属两家不同的技术,彼此在开发和使用上也没有严格的依赖关系。CODESYS编程环境的安装比较简单,按照引导完成即可。

2201_76033684的博客 6438

CodeSys平台ST语言编程

CodeSys是有德国的Smart Software Solution GmbH公司开发的,简称3s公司,⽬前最⾼版本为CodeSys V3.5版本。CoDeSys 包括 PLC 编程、可视化 HMI、安全 PLC、控制器实时核、现场总线及运动控制,是⼀个完整的⾃动化软件。它从架构上基本上可以分为三层,应⽤开发层,通信层和设备层。CodeSys实时核作⽤使⽤CodeSys RTE技术,在windows系统中安装PLC CodeSys软件,使得电脑变成⼀台⾼性能的可编程的控制器。数组是有序。

dream熊的博客 9015

CODESYS全面介绍

codesys

realzhangpeng的博客 1704

Codesys标准函数说明

Codesys标准函数说明 【下载地址】Codesys标准函数说明分享 本仓库提供了一个名为“Codesys标准函数说明”的资源文件,该文件详细讲述了Codesys 2.3版本中标准库的使用方法。无论你是初学者还是有经验的开发者,这份文档都是你学习和掌握Codesys编程的必备资料 ...

gitblog_06697的博客 548

Codesys结构变量编程应用(STRUCT类型)

这篇博文主要讲解Codesys环境下如何一步步建立结构类型(SRUCT)变量,自定义变量类型-->右键-->添加对象-->UDT类型-->结构变量(Structure)。博途里面属于用户自动以数据类型(UDT)本质也就是结构变量。......

RXXW_Dor的博客 7226

CODESYS如何判断变量的数据类型

/泛型END_VARVAREND_VAR。

RXXW_Dor的博客 4980

玩转CODESYS 入门篇(一)-- 认识CODESYS

目前codesys + EtherCAT驱动 做运动控制很有优势。现在总线式运动控制基本都是这种配置。 Codesys 号称PLC界的安卓,国内造PLC的 基本都用Codesys内核了。 如:汇川 ,合信, 和利时,英威腾, 台达。 包括国外的: 倍福TC2 施耐德Somachine 力士乐 等等都是Codesys 直观的讲codesys是一个已经写好了运动控制和通讯的软件PLC。 例如:树苺派刷一个Codesys的Runtime应用就可以用Codesys编程当PLC跑程序了...

木牛的博客 10万+

CODESYS之结构体的使用.doc

概念:前面系列文章介绍了基本类型的变量,如BOOL,整形,浮点型,也介绍了数组,数组中各个元素属于同一类型。但是仅仅这些类型还是不够的,有时候还需要把不同类型的数据组合成一个整体以便于引用。结构体可以包含很多数据类型也可以包含数组等。下文简单介绍结构体的使用。

CoDeSys入门实战一起学习(二十):布尔、整型、实数、字符串、时间5大类标准数据类型详解(附实战案例)

CoDeSys的标准数据类型完全遵循IEC61131-3标准,共分为布尔、整型、实数、字符串、时间5大类,是所有PLC程序的“基础积木”。——联合体、长时间、宽字符串、引用、指针,这些高级类型能解决更复杂的编程问题,比如字节整合、高精度计时、间接访问内存等,敬请期待。的类型,仅表示两种状态:TRUE(1)或FALSE(0),对应现场的“开关量”——比如传感器信号、阀门状态、电机启停信号。时间类型用于处理时间、时刻、日期,内部以双字(DWORD)存储,共4种,的类别,用于表示无小数点的整数,核心分。

电工 1552

RingBuffer 环形缓冲区----镜像指示位

称作环形缓冲区,也称作环形队列(circular queue),是一种用于表示一个固定尺寸、头尾相连的缓冲区的数据结构,适合缓存数据流。这个宏定义用于计算向下对齐的地址。size和align。size是要对齐的内存大小,align是所需的对齐大小。这个宏返回一个值,该值是size向下对齐到align边界后的地址。例如,假设我们有一个 32 位的系统,并且我们需要将数据对齐到 64 位的边界。我们可以使用在这个例子中,data数组的大小为 10 个元素,我们需要将其对齐到 8 字节边界。宏返回data。

呵呵哒!的博客 2408

从零部署DeepSeek V4 Flash:NVIDIA DGX Spark实战指南

GPU加速计算已成为现代人工智能基础设施的核心,其原理是通过并行处理架构大幅提升深度学习模型的训练与推理效率。在AI工程实践中,NVIDIA GPU凭借CUDA生态和专用驱动栈,为大规模语言模型部署提供了硬件基础。本文聚焦于企业级AI服务器部署场景,针对NVIDIA DGX Spark多节点系统的硬件初始化、驱动兼容性配置、容器化部署等关键环节,提供从系统层到应用层的完整解决方案。通过vLLM推理框架的实战配置,演示如何将DeepSeek V4 Flash模型高效部署于多GPU环境,涵盖Tensor Par

weixin_32296621的博客 379

【亲测免费】 掌握Codesys编程的必备利器:标准函数说明文档

掌握Codesys编程的必备利器:标准函数说明文档 【下载地址】Codesys标准函数说明分享 本仓库提供了一个名为“Codesys标准函数说明”的资源文件,该文件详细讲述了Codesys 2.3版本中标准库的使用方法。无论你是初学者还是有经验的开发者,这份文档都是你学习和掌握Codesys编程的必备资料 ...

gitblog_06656的博客 548

非模式物种PySCENIC分析流程

外的物种想要做scenic分析的话, 可以使用同源基因转换后再进行分析, 将要分析的物种的gene Symbol转换为人、小鼠或者是果蝇的gene Symbol后进行分析。odiscus sinensis(中华鳖)的基因-细胞的矩阵,进行pyscenic分析的话,可参考以下示例。目前pyscenic分析支持的物种仅为人、小鼠和果蝇,其他物种暂时还没有相应的数据库,因。本教程基于Linux及服务。SCENIC转录因子分析。器中的Rstudio环境。例如我们有一个Pel。

weixin_47195452的博客 934

2.0 你的第一个CODESYS程序

开始之前 数据安全: 为了尽量减少数据安全漏洞的风险,我们建议采取以下组织和技术措施: * 避免从开放网络和互联网访问PLC和控制网络。 * 使用VPN进行远程访问。 * 安装防火墙。 * 如果要在网络上发布可视化文件,请设置密码以防止未经授权的访问。 * 使用最新版本的网关服务器和Web服务器。 安装CODESYS: 注意 安装包括开发系统,CODESYS网关和CODESYS ...

Queen B is Mine 1万+

豆包大模型API调用两种方法

ps: 因为是自用,所以这里图方便采用硬编码密钥的形式;如果有需求/安全风险,建议参考官方教程设置ARK_API_KEY环境变量的方式。坏处是:看别人的教程走了一大圈弯路hh;基础调用的话方法一就可以满足了,也比较方便快捷,容易上手。将 <Model> 替换为 Endpoint ID即可。创建就按照提示填写信息就行,需要实名认证,有免费额度。绿框框里就是Endpoint ID。

kkkkkkkkkasey的博客 1万+

别再死磕Excel了!用Vensim PLE免费版,30分钟搞定你的第一个系统动力学模型

本文介绍如何使用Vensim PLE免费版在30分钟内构建第一个系统动力学模型,无需编程或数学基础。通过个人储蓄增长案例,详细讲解因果回路图绘制、存量流量图创建及方程编写,帮助读者掌握动态系统建模与仿真技巧,适用于理财、项目管理等多种场景。

weixin_29045001的博客 329

Codesys数据结构:时间 标准数据类型

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

codesys01的博客 4535

解决ADS1.2报错Cannot obtain license

报错如下 将licenses文件下的license内容进行修改: 修改为如下内容即可。 # # Generated on 2021-dec-1 by licwizard # PACKAGE ads armlmd 1.200 E32F0DE5161D COMPONENTS="armasm compiler bats armulate axd adwu fromelf armlink codewarrior armsd" INCREMENT ads armlmd 1.200 permanent uncounte

qq_46110320的博客 3463
上一篇: Codesys数据结构(1): 数据类型
下一篇: Codesys 数据结构: 扩展数据类型之bit类型详解
林磊教育
博客等级 码龄3年 405粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值