核心内容摘要
经典永恒,回忆之选——芭乐视app下载旧版本免费官网苹果,重温那些动人的时光
在PLC项目开发中随着程序复杂度的提升仅用标准类型和扩展类型会出现两个问题变量太多太杂比如一台电机有型号、电压、电流、运行状态等多个参数单独声明变量会导致变量表混乱难以维护数据关联性差比如多个温度采集点、多个电机的参数单独声明的变量无法体现“关联性”程序可读性差。
而CoDeSys的自定义数据类型就是为解决这些问题而生——允许开发者根据项目需求将标准类型/扩展类型组合成新的、自定义的类型核心包括数组、结构体、枚举、子范围还有组合后的结构体数组。
自定义数据类型的核心优势是结构化、模块化、可复用——用结构体封装设备参数用枚举定义状态用数组批量处理同类型数据让程序从“一堆零散变量”变成“清晰的结构化模块”后期维护、修改只需调整自定义类型大幅提升开发效率。
本文将详解5种核心自定义数据类型结合工业实战案例电机参数封装、设备状态定义、温度采集批量处理讲透声明、使用、实战技巧让你的PLC程序更专业。
数组ARRAY批量处理同类型数据的“神器”核心概念数组是有序的同类型数据集合将多个相同类型的变量整合为一个整体通过下标访问单个元素——比如10个温度采集点无需声明nTemp1~nTemp10只需声明一个数组nTemp[
.10]通过下标nTemp[1]、nTemp[2]访问大幅简化变量声明和批量处理。
CoDeSys数组特性支持一维、二维、三维最大三维满足绝大多数工业场景下标可自定义如[
.9]、[
.10]建议从1开始更符合工业编程习惯元素类型可为任意标准/扩展/自定义类型如INT、REAL、结构体、枚举可通过数组向导快速声明无需手动写语法。
一维数组最常用批量处理单维度数据声明格式数组名:ARRAY[下限..上限] OF 数据类型;核心用途批量处理单维度数据如多个温度采集点、多个电机的运行频率。
实战案例10个温度采集点的批量初始化CoffeeScriptVAREND_VAR
二维数组二维表格数据如矩阵、多设备多参数核心概念二维数组可看作“数组的数组”比如a[
.2,
.4]表示2行4列的二维表格第一维表示“设备号”第二维表示“设备参数号”。
实战案例2台电机每台4个运行参数转速、电流、电压、温度CoffeeScriptVAREND_VAR
三维数组三维空间数据如多产线多设备多参数声明格式a[
.2,
.3,
.4] OF REAL;2条产线、3台设备、4个参数工业场景中使用较少按需选择。
数组的核心技巧与避坑初始化技巧声明时直接赋值支持批量重复赋值内存存储规则一维数组按下标顺序存储二维数组按行存储先存第一行再存第二行越界保护添加CheckBounds函数右键Application→添加对象→用于隐含检查的POU防止数组下标越界导致程序崩溃数组向导复杂数组用向导快速声明输入助手→数组向导选择维度、上下限、数据类型自动生成代码避免语法错误。
结构体STRUCT封装不同类型数据模块化管理核心概念结构体是不同类型数据的有机集合用于将与某一对象相关的所有参数不同类型封装成一个整体——比如一台电机的参数包括型号DWORD、厂家STRING、额定电压REAL、额定电流REAL、运行状态BOOL这些参数类型不同但都属于“电机”这个对象用结构体封装后可作为一个整体声明、赋值、传递实现模块化管理。
核心优势关联性强将对象的所有参数封装在一起体现数据的内在联系可复用定义一次结构体可在程序中多次声明变量如多台电机共用同一个电机结构体易维护修改对象参数时只需修改结构体定义无需逐个修改变量语法简洁通过变量名.成员名访问参数如stMotor.Product_ID。
声明与使用步骤经典工业案例电机参数封装新建结构体DUT右键Application→添加对象→DUT选择结构命名为Motor定义结构体成员按实际需求添加不同类型的成员命名规范如Nominal_Voltage表示额定电压程序中声明结构体变量可声明单个变量或数组结构体数组后续讲解访问结构体成员通过变量名.成员名进行赋值/读取。
实战案例1定义电机结构体新建结构体DUT命名为Motor实战案例2声明并使用电机结构体变量结构体的高级用法嵌套结构体结构体成员可嵌套另一个结构体实现更复杂的对象封装——比如“产线”结构体包含“产线编号”和多个“电机结构体”示例// 先定义电机结构体Motor如上// 再定义产线结构体嵌套Motor结构体// 使用访问产线1的1号电机额定电压
结构体数组批量管理多对象工业场景核心用法核心概念结构体数组是结构体和数组的结合用于批量管理多个同类型对象——比如一条产线有10台电机每台电机都用Motor结构体封装此时只需声明一个Motor类型的数组stMotor[
.10]即可批量管理10台电机的所有参数是工业项目中最常用的自定义数据类型组合。
实战案例一条产线有3台电机批量管理电机参数// 已定义电机结构体Motor如上VAREND_VAR✅ 核心优势批量初始化、批量遍历、单独访问兼顾灵活性和模块化适合多设备的PLC项目。
枚举ENUM定义离散状态让程序更易读、更易维护核心概念枚举是离散状态的集合用于将一组具有明确含义的离散值如设备运行状态、故障类型定义为一个枚举类型枚举变量只能取集合中的值——比如设备的运行状态包括停止、运行、故障、待机用枚举定义后可声明eRunStatus:RunStatus变量值只能是Stop、Run、Fault、Standby而非模糊的
0、
1、
3。
核心优势程序可读性大幅提升IF eStatus Fault THEN比IF eStatus 2 THEN更易理解无需注释避免错误赋值枚举变量只能取定义的状态值赋值其他值会编译报错易维护修改状态时只需修改枚举定义无需逐个修改程序中的数值。
声明与使用步骤新建枚举DUT右键Application→添加对象→DUT选择枚举定义枚举成员指定成员名称可手动赋值如Sun:0默认从0开始递增程序中声明枚举变量赋值并使用。
实战案例1定义设备运行状态枚举// 新建枚举DUT命名为RunStatusTYPE RunStatus :(Stop:0, // 停止赋值0Run, // 运行默认1Fault, // 故障默认2Standby // 待机默认
INT; // 基本类型默认INT可指定为UINT/DINT等END_TYPE// 程序中声明并使用VAReMotorStatus:RunStatus; // 电机运行状态RunStatus类型END_VAR// 赋值电机故障eMotorStatus : Fault;// 逻辑判断电机故障时报警IF eMotorStatus Fault THENbAlarm : TRUE; // 报警灯亮END_IF实战案例2定义星期枚举实现周期状态切换CoffeeScript// 星期枚举手动赋值TYPE Weekday :(Sun:0,Mon,Tue,Wed,Thu,Fri,Sat) INT;END_TYPE// 程序中实现每个周期切换一次星期VAReWeek:Weekday : Sun;END_VAR// 周期切换eWeek : eWeek 1;IF eWeek Sat THENeWeek : Sun;END_IF
子范围SUBRANGE限定数值范围实现软件钳位核心概念子范围是某一整型的取值子集用于将变量的取值范围限定在指定的上下限之间——比如将模拟量输出的数值限定在01000将计数器的值限定在010000赋值超出范围的值时会自动被钳位到上下限需添加范围校验函数实现软件级的数值范围保护。
核心用途模拟量输入/输出的范围限定如
mA对应
限定变量0~1000计数器、定时器的数值范围限定避免死循环设备参数的范围限定如电机转速限定0~3000r/min。
声明与使用步骤新建子范围DUT右键Application→添加对象→DUT选择子范围定义子范围指定基本类型只能是整型如INT、UINT、下限和上限添加范围校验函数CheckRangeSigned有符号和CheckRangeUnsigned无符号实现自动钳位程序中声明子范围变量赋值并使用。
实战案例1限定模拟量输出范围0~1000CoffeeScript// 新建子范围DUT命名为AO_Range基本类型INT0~1000TYPE AO_Range :INT RANGE 0 TO 1000;END_TYPE// 程序中声明并使用VARnAO_Value:AO_Range; // 模拟量输出值0~1000nTemp:INT : 1200; // 临时变量超出范围END_VAR// 赋值1200超出0~1000自动钳位到1000nAO_Value : nTemp; // nAO_Value 1000实战案例2限定计数器范围避免死循环CoffeeScript// 子范围UINT0~10000TYPE Counter_Range :UINT RANGE 0 TO 10000;END_TYPE// 程序中使用避免FOR循环死循环VARnCounter:Counter_Range : 0;END_VAR// 循环nCounter最大为10000不会超出避免死循环FOR nCounter:0 TO 20000 DO// 循环逻辑END_FOR核心避坑点子范围的基本类型只能是整型SINT/USINT/INT/UINT等不支持REAL/LREAL必须添加范围校验函数右键Application→添加对象→用于隐含检查的POU否则赋值超出范围会编译报错添加后会自动钳位子范围变量可直接与基本类型变量运算自动兼容。
总结自定义数据类型是CoDeSys工业项目开发的核心让程序从“零散变量”升级为“结构化模块”核心使用原则批量处理同类型数据用数组一维/二维/三维按需选择封装不同类型的对象参数用结构体实现模块化管理支持嵌套批量管理多对象用结构体数组工业场景最常用兼顾灵活与规范定义离散状态用枚举提升程序可读性避免错误赋值限定数值范围用子范围实现软件钳位保护设备和程序。
掌握这些自定义数据类型你就能写出结构清晰、易维护、可复用的PLC程序适配从小型设备到大型产线的所有项目。
下一篇我们将带来CoDeSys数据类型的实战