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
    +关注

    关注

    5052

    文章

    14925

    浏览量

    489369
  • 数据类型
    +关注

    关注

    0

    文章

    238

    浏览量

    14252

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    驱动之路#04:LCD 驱动程序分析(基于RK3576)

        struct device *dev =  // 获取设备指针,简化后续访问    const struct panel_desc_dsi *desc; // DSI面板描述符(预定义或动态
    的头像 发表于 02-17 08:20 1w次阅读
    驱动之路#04:LCD 驱动程序分析(基于RK3576)

    【「Linux 设备驱动开发(第 2 版)」阅读体验】充分发挥硬件潜力

    地址转换以匹配相应的物理内存 在Linux系统中,内核中的每个进程都表示为一个task_struct结构体实例,该结构体实例表征并描述了这个进程。在进程开始运行之前,系统会为其分配一个内存映射表,该表
    发表于 02-04 22:30

    【「Linux 设备驱动开发(第 2 版)」阅读体验】Linux内核平台抽线共和设备驱动程序

    和其他优势,还包括代码可重用性和重构、自动资源释放等。 Linux内核平台抽象和数据结构 device结构体 struct device { struct kobject kobj; struct
    发表于 02-03 21:57

    飞凌嵌入式ElfBoard-系统信息与资源之设置时间

    settimeofday用于设置系统时间函数。1.头文件#include 2.函数原型int settimeofday(const struct timeval *tv, const struct
    发表于 01-19 09:30

    飞凌嵌入式ElfBoard-系统信息与资源之获取时间gettimeofday

    用于获取更高精度的当前时间,包括微秒,适合高精度时间测量。 1.头文件 #include 2.函数原型 int gettimeofday(struct timeval *tv, struct
    发表于 01-19 09:28

    【「Linux 设备驱动开发(第 2 版)」阅读体验】Linux内核开发基础

    。 互斥锁是一个简单的数据结构,包含了一个等待队列和一个自旋锁,其定义如下 struct mutex { atomic_long_towner; raw_spinlock_twait_lock
    发表于 01-12 22:45

    飞凌嵌入式ElfBoard-系统信息与资源之查看系统标识

    uname用于获取系统信息,如操作系统名称、内核版本、硬件架构等。1.头文件#include 2.函数原型int uname(struct utsname *buf);3.参数*buf:一个指向
    发表于 01-08 09:02

    10个例子代码,C语言结构体的高级

    例子代码。 位字段(Bit Fields) #include struct Flags { unsigned int flag1 : 1; unsigned int flag2 : 2
    发表于 01-05 06:32

    飞凌嵌入式ElfBoard-文件的时间属性之utime

    设置文件的访问时间和修改时间(微秒级别)1.头文件#include2.函数原型int utimes(const char *filename, const struct timeval times
    发表于 12-23 08:50

    C语言内存池使用

    struct Person { char name[40]; char phone[20]; struct Person* next; }; void getInput(struct
    发表于 12-11 07:57

    结构体声明与定义

    1、声明 结构体的声明使用struct关键字,如果我们想要把我们的学籍信息组织一下的话,可以这样表示: struct Info { unsigned long identifier;//学号
    发表于 12-11 07:52

    无数据域双向链表的代码

    下面是一个简单的示例,演示了如何使用无数据域双向链表进行插入和访问操作: #include #include// 包含offsetof宏 // 定义节点结构体 struct Node
    发表于 12-11 06:56

    为什么不建议用匿名结构体

    说起匿名结构体,想必大家第一感觉就是看着好高大上的名字,但实际上也就那样。 typedef struct { union { struct { uint8_t bit_0:1
    发表于 12-04 07:39

    C语言结构体使用

    型的数据组合。 结构体的声明与定义 结构体的声明一般形式为: c struct 结构体名{ 成员1; 成员2; ... }; //注意分号 例如: c struct student
    发表于 11-12 08:30

    gd32h737 开启cache程序跑飞是哪里的问题?

    param[out] none retvalnone */ void mpu_config(void) { mpu_region_init_struct mpu_init_struct
    发表于 09-11 08:28