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

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

3天内不再提示

Struct应用案例

机器人及PLC自动化应用 来源:机器人及PLC自动化应用 作者:机器人及PLC自动化 2022-07-25 10:17 次阅读

结构数据类型(Struct)

Struct类型是一种由多个不同数据类型元素组成的数据结构,其元素可以是基本数据类型,也可以是Struct、数组等复杂数据类型以及PLC数据类型(UDT)等。Struct类型嵌套Struct类型的深度限制为 8 级。Struct类型的变量在程序中可作为一个变量整体,也可单独使用组成该Struct的元素。Struct 类型可以在DB、OB/FC/FB接口区、PLC数据类型(UDT) 处定义使用。

Struct数据类型使用非常灵活,随时可以使用,但是相对于PLC数据类型 (UDT) 有以下缺点,所以建议需要使用Struct类型时,可以使用PLC数据类型(UDT)代替。

维护成本增加:如果对一个Struct进行了多次复制,则在更改过程中该Struct也必需进行相应的多次更改。

Struct与 PLC 数据类型(UDT)的相同结构不兼容。

由于系统会检查所有结构元素的类型是否匹配,因而会导致性能下降。

存储空间要求增加:每个Struct都是一个单独的对象,其描述信息将加载到PLC中。

Struct应用案例

1. 单独使用组成该Struct的元素时,和普通的变量没有区别,只是每出现一个Struct的嵌套层级,变量名增加一个前缀,如图1-2所示。

fbe28154-0b5b-11ed-ba43-dac502259ad0.jpg

图1 Struct的定义

fbfc7d16-0b5b-11ed-ba43-dac502259ad0.jpg

图2 Struct的使用

2. Struct可以将一种类型变量放在一起,利于区分,如图3-4所示。

fc0935ba-0b5b-11ed-ba43-dac502259ad0.jpg

图3 原始结构

fc21131a-0b5b-11ed-ba43-dac502259ad0.jpg

图4 增加了Struct类型的结构

图4和图3功能明显相同,但图4相对图3,分类更加清晰。

3. 通讯程序中,通常可以把需要发送的数据放在一个Struct中,即看做一个整体,这样在发送区只需填写一个变量即可,如图5所示。

fc354664-0b5b-11ed-ba43-dac502259ad0.jpg

图5 使用了图4定义的Struct类型

4. MOVE指令支持相同Struct类型的直接传送,如果传送双方是大量数据,并且结构相同,可以先分别将双方数据建立在一个结构,然后用一个MOVE指令一次传送即可,如图6所示。

fc485786-0b5b-11ed-ba43-dac502259ad0.jpg

程序中直接MOVE,即可传送整个Struct,而不需要若干MOVE。并且,即使两边Struct中的对应元素名称不同也可以传送成功,如图7所示。

fc5fb354-0b5b-11ed-ba43-dac502259ad0.jpg

图7 Struct的传送

审核编辑 :李倩

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

    关注

    5010

    文章

    13283

    浏览量

    463198
  • 数据类型
    +关注

    关注

    0

    文章

    236

    浏览量

    13622

原文标题:结构数据类型(Struct)

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

收藏 人收藏

    评论

    相关推荐

    使用DMA写flash后,读取数据出现错位现象,是什么原因导致的?如何解决?

    配置 void dma_init(uint8_t *data_buffer, uint32_t data_length) { dma_single_data_parameter_struct
    发表于 11-13 06:24

    零基础开发小安派-Eyes-S1【外设篇】——PWM

    。#define PWM_POLARITY_ACTIVE_LOW 0#define PWM_POLARITY_ACTIVE_HIGH 11.struct bflb_pwm_v2_config_s说明
    的头像 发表于 11-06 16:10 148次阅读
    零基础开发小安派-Eyes-S1【外设篇】——PWM

    typedef和struct有啥区别

    在C语言中, typedef 和 struct 是两个非常重要的关键字,它们在定义数据结构时扮演着关键的角色。然而,它们之间有一些明显的区别。 1. struct 关键字 struct (结构体
    的头像 发表于 08-20 11:00 1183次阅读

    typedef struct和直接struct的区别

    在C语言中, typedef 和 struct 是两种不同的关键字,它们在定义和使用上有着明显的区别。 typedef struct 和直接 struct 在 C 语言中用于定义结构体类型,但它们在
    的头像 发表于 08-20 10:58 2737次阅读

    rtthread 5.20安装systemview 2.52a出错的原因?

    /SystemView_Src/Config/SEGGER_SYSVIEW_RTThread.c(73): error: no member named \'name\' in \'struct
    发表于 07-12 09:36

    WiFi在最新的RTOS SDK中不起作用是怎么回事?

    */ wifi_set_opmode(STATIONAP_MODE); struct station_config *config = (struct station_config *)malloc
    发表于 07-10 07:11

    stm32h743 lwip freertos socket建立失败的原因?

    connect(sock, (struct sockaddr*) client_addr, sizeof(struct sockaddr)) 每当程序启动首次执行sokcet连接时,总会失败很多次,才能成功建立连接,想咨询会是哪些问题导致的
    发表于 07-05 06:05

    嵌入式中C语言结构体基本实现

    C语言中的数组只能允许程序员定义存储相同类型数据。但是结构是C语言编程中允许您存储不同数据类型的数据。 结构体的定义     要想定义结构,必须用到 struct 关键字,struct的语句格式
    的头像 发表于 05-11 08:49 1018次阅读
    嵌入式中C语言结构体基本实现

    Framebuffer 驱动程序框架

    , name,      struct   fb_info  * info  = =  registered_fb [0]; 例子2: app:  read
    的头像 发表于 05-11 08:49 821次阅读
    Framebuffer 驱动程序框架

    STM32串口发送一个字符,发送和接收的数据不同是怎么回事?

    void usart_Config(void) { /*----------------串口配置----------------*/ GPIO_InitTypeDefGPIO_Struct
    发表于 04-10 06:32

    C语言结构体史上最详细的讲解【软件干货】

    struct结构体数据类型 前言 我们知道,在C语言中有一些基本的数据类型,如 char int float long double string(c99) 等等数据类型,他们可以表示一些事物
    的头像 发表于 03-28 17:52 750次阅读

    TC275有函数返回指针地址明明有地址返回值变成NULL是为什么?

    函数原型:struct udp_pcb *udp_new(void){struct udp_pcb *pcb;LWIP_ASSERT_CORE_LOCKED();pcb = (struct
    发表于 02-06 08:18

    error #148: declaration is incompatible with \"struct PIE_VECT_TABLE PieVectTable\"

    DSP2803x_GlobalVariableDefs.c和DSP2803x_PieVect.h出现冲突,网上的说法是删除其中一个,但现在删除任何一个都会出现一堆变量未定义的错误,这个怎么解决?
    发表于 01-16 15:36

    struct,slice,map是否相等以及几种对比方法的区别

    对比两个struct或者map,slice是否相等是大家经常会有的需求,想必大家也都接触过很多对比的方式,比如==,reflect.DeepEqual(),cmp.Equal()等。
    的头像 发表于 01-08 18:20 687次阅读

    踩坑rust的partial copy导致metrics丢失

    metrics 丢失。在实现中,我们设计了一个 rust 的 struct MonitoredStateStoreIterStats 去收集 LSM iterator 的 metrics,去统计 iterator
    的头像 发表于 01-03 10:02 422次阅读