0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

西门子博途:ARRAY变量的结构

机器人及PLC自动化应用 来源:机器人及PLC自动化应用 2023-06-12 09:59 次阅读

在非优化块中,ARRAY 变量不得在字限值处开始。即,在偶数地址的字节处开始。ARRAY 变量将使用该存储空间,直到下一个字限值处。

在优化块中,ARRAY 所需的空间与结构中最宽元素所需的空间相同。例如,ARRAY of BYTE 位于一个字节的限值处,而 ARRAY of LREAL 则位于一个 8 字节的限值处。

一维数组中 ARRAY 变量的结构:

39937e62-0855-11ee-962d-dac502259ad0.png

数据类型为 BOOL 的元素从最低有效位处开始。数据类型为 BYTE 和 CHAR 的元素从右侧字节处开始。各元素按顺序排列。

多维数组中 ARRAY 变量的结构:

39e1d166-0855-11ee-962d-dac502259ad0.png

在多维数组中,各元素从第一个维度开始,逐行(逐维)存储。在位和字节元素中,新维度通常从下一个字节处开始。在其它数据类型的元素中,新维度通常从在非优化块中的下一个字(下一个偶数字节)开始。

在优化块中,每个维度所需的空间大小与第一维度的相同。

寻址 ARRAY 元素

ARRAY 元素是使用固定可变下标进行寻址。ARRAY 变量的元素的处理方式与相同数据类型的变量相同。

元素的下标在方括号中指定。该下标包含 ARRAY 各维度的一个整数值(固定下标)或一个变量(可变下标)。

使用固定下标寻址 ARRAY 元素

使用固定下标寻址 ARRAY 元素的具体方式如下所示:

3a1ffc20-0855-11ee-962d-dac502259ad0.png

使用可变下标寻址 ARRAY 元素 也通过一个变量对 ARRAY 元素进行寻址,变量的值仅在运行过程计算。该变量可以是采用绝对地址或符号地址寻址的整型数据类型的全局或局部变量。这种寻址方式也支持多维 ARRAY 和子数组寻址方式。(<数组名>[i, j, k...]) 被调用块中的变量发生更改时,不会影响 in/out 参数处作为实参创建并使用可变下标寻址的 ARRAY 元素。该值将写回与读取时相同的 ARRAY 元素中,并在调用过程中进行传递。 使用下标变量寻址 ARRAY 元素,如下所示: 3add203e-0855-11ee-962d-dac502259ad0.png   传递 ARRAY 数据类型的变量 如果 ARRAY 中各元素的数据类型与形参的数据类型相同,则可将其作为实参进行传递 ARRAY 数据类型的变量可作为参数进行传递。如果块中的输入参数为 ARRAY 数据类型,则传递 ARRAY 时的结构必须与实参的相同。即,数据类型、维数和域元素的个数都必须相同。 如果 ARRAY 的结构完全相同,则可相互分配。即,数据类型、维数和数组元素的个数都必须相同。ARRAY 的名称不必相同。

传递 ARRAY [*] 数据类型的变量

ARRAY[*] 可用于声明函数或函数块参数中限值可变的 ARRAY。创建块时,可定义 ARRAY 的限值。之后,在运行过程中调用该数组后之后将对该限值进行传递。

下图显示了使用 ARRAY[*] 数据类型输入参数的两次块调用。在这两次调用中,传递的 ARRAY 长度不同。

3b269dae-0855-11ee-962d-dac502259ad0.png

传递灵活限值 ARRAY 时的应用规则 在本示例中,将创建函数“BlockWithArrayStarIn_FC”,从而可在后期进行调用: 3b74a3e6-0855-11ee-962d-dac502259ad0.png 如果维数与数据类型都匹配,则可将 ARRAY[*] 指定给 ARRAY[*]。但在此过程中,不能传递单个 ARRAY 元素:

声明函数块“BlockCaller_FB”,并调用函数“BlockWithArrayStarIn_FC”:

3b74a3e6-0855-11ee-962d-dac502259ad0.png 如果维数与数据类型匹配,则可将已知限值的 ARRAY 指定给 ARRAY[*]。在此过程中,也可指定单个的 ARRAY 元素。

声明函数块“BlockCallerFixLimits_FB”,并调用函数“BlockWithArrayStarIn_FC”两次:

3c134ae6-0855-11ee-962d-dac502259ad0.png 可将 ARRAY[*] 指定给 VARIANT。在此过程中,也可指定单个的 ARRAY 元素。   3c96178c-0855-11ee-962d-dac502259ad0.png 多维数组的寻址示例:

说明

ARRAY 数据类型的变量最多支持 6 维。该规则与一维数组的规则相同。数组维数将写入声明中的方括号内,并使用逗号进行分隔。在多维数组中,各元素从第一维度开始存储。

下表列出了二维 ARRAY 数据类型的变量声明:

名称 数据类型 注释
Betr_Temp ARRAY[1..2, 1..3] of INT 1,1,4(0) 数据类型为 ARRAY 的二维变量包含有 6 个元素。前两个元素的值为“1”,其余四个元素的值为“0”。

下图显示了声明为 ARRAY 数据类型的变量结构: 3cc7ab08-0855-11ee-962d-dac502259ad0.png

访问元素

通过下标,可访问各元素的值。可使用常量或变量作为下标。例如,第一个元素的下标为 [1,1],第四个数组元素的下标为 [2,1]。例如,访问第四个元素的值时,需要在程序中声明“Station[2,1]”。

通过 ARRAY[*] 计算两个矢量标积的示例 明 标积是为两个矢量进行赋值的一种数学运算(标量)。 两个矢量的标积将得到一个标量变量,且定义如下: 3ceb337a-0855-11ee-962d-dac502259ad0.png 这里,∝ 是矢量 和 之间的角度。

标积的计算示例:

3ceb337a-0855-11ee-962d-dac502259ad0.png

在本示例中,结果为数字 22。

在以下编程示例中,可确定如何使用 ARRAY[*] 以及 ARRAY 的灵活边界值计算两个矢量的标积。此处,函数“ScalarProduct_FC”将用作具体标积的计算模板。

在该编程示例中,需要具有以下对象:

两个数据块和和一个 PLC 数据类型 (UDT),用于管理矢量数据。

函数,包含计算标积的程序代码

指令“LOWER_BOUND”和“UPPER_BOUND”,用于读取 ARRAY 的边界。

组织块,用于计算标积

操作步骤

在本示例中,使用了多个矢量(即,1 维数组)。当然,其它计算(如,矩阵乘法)可使用多维数组。

要计算标积,请执行以下操作步骤:

创建 PLC 数据类型 (UDT)“VectorArrays_UDT”:
3d6b0d7a-0855-11ee-962d-dac502259ad0.png
3d6b0d7a-0855-11ee-962d-dac502259ad0.png
两个数组“VectorD5Coordinates”和“VectorE13Coordinates”提供计算标积所需的数据。
基于PLC 数据类型“VectorArrays_UDT”PLC 数据类型创建数据块“VectorArrays1_DB”:
3db6e952-0855-11ee-962d-dac502259ad0.png
3db6e952-0855-11ee-962d-dac502259ad0.png
创建第二个“VectorArrays2_DB”数据块。除“VectorArrays_UDT”PLC 数据类型的矢量外,该数据块中还包含两个其它矢量:
3defc934-0855-11ee-962d-dac502259ad0.png
3defc934-0855-11ee-962d-dac502259ad0.png
现已创建了计算标积所需的数据。
创建函数“ScalarProduct_FC”,作为创建计算标积时计算操作步骤的模板:
接口
3e34a8ba-0855-11ee-962d-dac502259ad0.png
3e34a8ba-0855-11ee-962d-dac502259ad0.png
程序代码:
3e6d6e16-0855-11ee-962d-dac502259ad0.png
3e6d6e16-0855-11ee-962d-dac502259ad0.png
在第 1 到 4 行中,查询矢量 1 和矢量 2 的 ARRAY 上/下边界。之后,即可确定两个矢量 ARRAY 的关联数。由于仅当待相乘的两个矢量关联数相等时,才能建立标积,因此需使用第 6 行到第 9 行。
如果 ARRAY 的上/下边界不同,则函数“ScalarProduct_FC”将生成函数值“-1”并退出程序块 (RETURN)。
如果 ARRAY 的上/下边界相同,则变量 #Sum 将初始化为值“0”(第 10 行),并执行标积计算操作(第 11 到 13 行)。
使用事件类“Program cycle”,创建“Main_OB”组织块。在第 4 步中创建的函数“ScalarProduct_FC”将作为标积计算“Main_OB”中的模板:
块接口:
3ea43cf2-0855-11ee-962d-dac502259ad0.png
3ea43cf2-0855-11ee-962d-dac502259ad0.png
程序代码:
3ee6eb4c-0855-11ee-962d-dac502259ad0.png
3ee6eb4c-0855-11ee-962d-dac502259ad0.png

3f305b1a-0855-11ee-962d-dac502259ad0.jpg      

创建函数“BlockWithVariantIn_FC”,从而可在后期调用:

3c533d9a-0855-11ee-962d-dac502259ad0.png

声明函数“BlockWithArrayStarInVariant_FC”,并调用函数“BlockWithVariantIn_FC”:

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 西门子
    +关注

    关注

    93

    文章

    3007

    浏览量

    115611
  • 存储
    +关注

    关注

    13

    文章

    4257

    浏览量

    85646
  • 变量
    +关注

    关注

    0

    文章

    613

    浏览量

    28327

原文标题:西门子博途 :ARRAY 变量的结构

文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    北京回收西门子组态软件

    回收西门子变频器SINAMICS V10系列变频器回收西门子触摸屏回收西门子组态软件回收西门子
    发表于 05-27 12:16

    西门子1200码垛机程序应用

    西门子1200码垛机、立体仓库程序(带注释),程序应用到变频器、触摸屏、步进电机、工业机器人、视觉相机。
    发表于 09-03 07:42

    畅销西门子助听器价格表_西门子助听器价格大全

    畅销西门子助听器价格表_西门子助听器价格大全 1、西门子盒式助听器 AMIGA 176AO Pocket AMIGA 176AO 西门子助听器价格:441元
    发表于 08-23 12:19 1.4w次阅读
    畅销<b class='flag-5'>西门子</b>助听器价格表_<b class='flag-5'>西门子</b>助听器价格大全

    西门子大赛1200电梯参考程序

    西门子大赛1200电梯参考程序,V13文件.有需要的加油!
    发表于 06-22 15:56 183次下载

    解析ABB机器人与西门子S7-1200 profinet通讯

    西门子软件中做PLC硬件组态,设置以太网连接。
    的头像 发表于 01-18 16:55 4.9w次阅读
    解析ABB机器人与<b class='flag-5'>西门子</b>S7-1200 profinet通讯

    详解编程实现S7300与西门子触摸屏通讯

    目前国内流行用昆仑通泰或者威纶通触摸屏做项目,一方面价格便宜,另一方面编程简单。但西门子屏也经常会被用到,所以不得不学。简单写一下会用图建立西门子触摸屏和S7300PLC的通讯。
    的头像 发表于 05-05 11:37 1.7w次阅读

    西门子变频器的基本结构

    西门子变频器的基本结构说明。
    发表于 04-22 14:52 44次下载

    西门子PLC编程软件下载

    西门子PLC编程软件TIA V13 SP1 SIMATIC_WinCC_Runtime_Professional_SP1_for_V13---江西工控论坛有下载密码www.jx-gongkong.com
    发表于 03-01 11:04 60次下载

    Unity3D与西门子PLC通讯

    本文是做实体PLC和Unity的通讯,如果没有实体PLC可以参考我之前的文上位机与西门子TIA的PROFINET通讯仿真(虚拟通讯),这篇
    发表于 04-19 11:43 6次下载
    Unity3D与<b class='flag-5'>西门子</b>PLC通讯

    如何在平台调试西门子G120变频器

      随着工业自动化迈向智能化越来越近,科技工作者不断的突破,近年在传动领域,采用工业以太网(Profinet)和变频器通讯非常广泛,今天我们简单的介绍下在平台调试西门子G120变频器。
    的头像 发表于 04-25 10:17 2.8w次阅读
    如何在<b class='flag-5'>博</b><b class='flag-5'>途</b>平台调试<b class='flag-5'>西门子</b>G120变频器

    西门子:PLC变量

    PLC 变量表包含在整个 CPU 范围有效的变量和符号常量的定义。系统会为项目中使用的每个 CPU 自动创建一个 PLC 变量表。可以创建其它变量表用于对
    的头像 发表于 06-14 10:32 8570次阅读
    <b class='flag-5'>西门子</b><b class='flag-5'>博</b><b class='flag-5'>途</b>:PLC<b class='flag-5'>变量</b>

    大型西门子PLC程序结构示例

    大型的西门子PLC程序结构示例。
    的头像 发表于 07-06 10:34 1287次阅读

    西门子1200/1500PLC单按钮启停控制10种设计方法

    西门子1200/1500PLC单按钮启停控制10种设计方法
    的头像 发表于 08-31 09:14 7740次阅读
    <b class='flag-5'>西门子</b><b class='flag-5'>博</b><b class='flag-5'>途</b>1200/1500PLC单按钮启停控制10种设计方法

    西门子plc单按钮启停的十种方法(1200/1500PLC)

    西门子1200/1500PLC单按钮启停控制10种设计方法
    发表于 08-31 09:15 6247次阅读
    <b class='flag-5'>西门子</b>plc单按钮启停的十种方法(<b class='flag-5'>博</b><b class='flag-5'>途</b>1200/1500PLC)

    如何在平台调试西门子G120变频器

    随着工业自动化迈向智能化越来越近,科技工作者不断的突破,近年在传动领域,采用工业以太网(Profinet)和变频器通讯非常广泛,今天我们简单的介绍下在平台调试西门子G120变频器。
    发表于 09-07 12:50 4697次阅读
    如何在<b class='flag-5'>博</b><b class='flag-5'>途</b>平台调试<b class='flag-5'>西门子</b>G120变频器