版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
倍福TwinCAT基础教程2.2数组(ST语言)对应教程:TwinCAT常见类型使用和转换-数组,基于IEC61131-3标准,TwinCAT2/3通用,TC3推荐使用。一、数组是什么数组:同类型变量的连续集合,用下标索引访问。
✅元素可以是:BOOL/BYTE/INT/REAL/STRING/结构体DUT,甚至功能块FB。
✅下标可以不从0开始(和C语言最大区别),下限、上限自定义。语法st
数组名:ARRAY[下限..上限]OF数据类型;下限≤上限,必须是整数元素数量=上限-下限+11.一维数组示例st
VAR
arr0:ARRAY[0..500]OFINT;//下标0~500,共501个元素(从0开始)
arr1:ARRAY[1..10]OFINT;//下标1~10,共10个元素(工控常用,从1起始)
arrBool:ARRAY[1..8]OFBOOL;
arrByte:ARRAY[0..7]OFBYTE;
END_VAR访问单个元素:arr1[1]:=123;2.多维数组(二维、三维)两种写法等效:st
//写法1:逗号分隔(推荐,直观)
arr2D:ARRAY[1..3,1..4]OFINT;
//写法2:数组嵌套
arr2D_2:ARRAY[1..3]OFARRAY[1..4]OFINT;访问:arr2D[2,3]:=99;三维数组:st
arr3D:ARRAY[1..2,1..3,1..4]OFREAL;二、数组初始化(声明时直接赋值)st
VAR
arrA:ARRAY[1..5]OFINT:=1,2,3,4,5;//逐个赋值
arrB:ARRAY[1..5]OFINT:=3(0);//3个0→0,0,0,0,0;剩余自动填0
arrC:ARRAY[1..2,1..2]OFINT:=1,2,3,4;//二维按顺序展开
END_VAR3(0)代表连续3个元素赋值0,简写语法,批量初始化很方便。三、循环遍历数组(FOR循环,最常用)st
VAR
arr1:ARRAY[0..500]OFINT;
i:INT;
END_VAR
//循环写入
FORi:=0TO500DO
arr1[i]:=i;
END_FOR
//循环读取
FORi:=0TO500DO
IFarr1[i]>100THEN
//逻辑处理
END_IF
END_FOR⚠️重点:数组越界!
如果i超出数组定义的上下限,PLC会直接报异常、停机。TwinCAT3可以开启CheckBounds边界检查,在线调试捕获越界错误。四、数组常用内置函数(TwinCAT)SIZEOF(变量):返回字节长度st
len:UDINT:=SIZEOF(arr1);//得到数组总字节数ADR(数组名):获取数组首地址(指针,用于内存拷贝、MEMSET)st
pArr:POINTERTOINT:=ADR(arr1);MEMSET:批量清零数组(适合大批量数组)st
MEMSET(destAddr:=ADR(arr1),fillByte:=0,n:=SIZEOF(arr1));五、数组的类型转换(本节重点:常见类型转换)❗不能直接把整个数组强制转换成另一个类型数组,只能逐个元素转换;
若内存字节对齐一致,可以用指针/联合体UNION做内存映射(BYTE数组与其它类型互转,通讯场景高频)。示例1:INT数组↔REAL数组,元素逐个转换st
VAR
arrInt:ARRAY[1..5]OFINT;
arrReal:ARRAY[1..5]OFREAL;
i:INT;
END_VAR
FORi:=1TO5DO
arrReal[i]:=REAL(arrInt[i]);//INT转REAL
arrInt[i]:=INT(arrReal[i]);//REAL转INT,小数截断
END_FOR示例2:BYTE数组和INT内存映射(通讯,字节流解析)用UNION联合体,同一块内存,用不同类型读取,不做数值转换,直接按内存解析st
TYPEUNION_Buf:
UNION
arrByte:ARRAY[0..1]OFBYTE;
valInt:INT;
END_UNION
END_TYPE
VAR
uBuf:UNION_Buf;
END_VAR
uBuf.arrByte[0]:=16#12;
uBuf.arrByte[1]:=16#34;
//uBuf.valInt直接读出16#3412(大小端需要注意!倍福默认小端)⚠️联合体只是内存别名,不是安全类型转换,跨设备通讯务必注意大小端。六、数组作为函数/FB的输入输出st
FUNCTIONF_SumArray:INT
VAR_INPUT
arrIn:ARRAY[1..10]OFINT;//数组作为输入
END_VAR
VAR
i:INT;
END_VAR
F_SumArray:=0;
FORi:=1TO10DO
F_SumArray:=F_SumArray+arrIn[i];
END_FOR
END_FUNCTION注意:TC3推荐尽量用VAR_IN_OUT传递大数组,避免拷贝大量数据,减少PLC周期负载。七、常见坑&注意事项下标范围:定义是[1..10],不能写arr[0],越界直接报错。数组拷贝:arrA:=arrB整个数组直接赋值,TwinCAT支持,会逐个元素复制。数组大小:超大数组(几万点以上)会占用PLC内存,增加扫描周期。BOOL数组:BOOL是1字节,不是1bit;位操作要用BIT数组或BYTE位访问。HMI可视化:HMI访问数组,下标必须是常
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《谱时代强音》教学设计-2026-2027学年鲁教版(五四学制)(新教材)初中美术六年级上册
- 人教版二年级数学下册《找规律》
- 8.3-实现天气手环功能- 上
- 2026年河北唐山中国水电首郡3营销方案
- 云南省多校联考2026届高三上学期9月月考语文试卷(含答案)
- 工程设计丶制造与材料选择课件
- 开学第一课班会记录
- 医院输血科年终考核试题及答案
- 垂体瘤围手术期护理
- 乳业物流优化案例分析
- 2025年基层农产品质检岗笔试真题附答案
- 2026学年九年级化学上册第一单元核心考点第一次月考含答案及解析
- 中科曙光入职测试答案
- 2026年河北省“西学中”结业考试模拟试题(含解析)
- 高考物理疑难题《多次碰撞》含答案
- 团餐内部管理制度范本大全
- 无人机在警务实战中的应用
- Excel常用技巧培训
- 企事业单位保密工作手册(标准版)
- 高职司法口才课件
- 化工厂设备安全安装方案书
评论
0/150
提交评论