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

    关注

    5001

    文章

    12934

    浏览量

    459166
  • 数据类型
    +关注

    关注

    0

    文章

    236

    浏览量

    13567

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

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

收藏 人收藏

    评论

    相关推荐

    typedef和struct有啥区别

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

    typedef struct和直接struct的区别

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

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

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

    C语言结构体(struct)用法详解

    在实际的开发过程中,一组数据往往具有不同的数据类型,此时数组是不能够满足需求了。因为数组中各元素的类型必须是一致的。为了解决这个需求,C中给出了另一种数据类型-结构体,每一个成员可以是任意一种数据类型。
    的头像 发表于 11-15 16:11 1502次阅读
    C语言结构体(<b class='flag-5'>struct</b>)用法详解

    ROS中如何设置消息信息

    ( "geometry_msgs/Twist" , "DataFormat" , "struct" ) twist = struct with fields: MessageType
    的头像 发表于 11-15 14:55 290次阅读
    ROS中如何设置消息信息

    如何查看一个线程的ID

    1.什么是线程? linux内核中是没有线程这个概念的,而是轻量级进程的概念:LWP。一般我们所说的线程概念是C库当中的概念。 1.1线程是怎样描述的? 线程实际上也是一个task_struct
    的头像 发表于 11-13 14:38 955次阅读
    如何查看一个线程的ID

    linux系统中三个关键结构体

    struct inode结构体和struct file结构体 都是用来描述文件信息的,struct inode结构体是描述静态的文件,struct file结构体描述动态的文件(也就是
    发表于 10-15 11:04 246次阅读

    结构体struct和联合体union的区别?

    结构体struct和联合体union的区别?
    发表于 10-11 08:21

    CSON使用实例:定义数据模型

    CSON使用实例 声明结构体: /** 项目结构体 */ struct project{ int id ; char *name;}; /** 仓库结构体 */ struct hub{ int id
    的头像 发表于 10-07 11:10 1550次阅读

    Linux驱动高精度定时器hrtimer

    初始化一个 ktime 对象,常用方法如下: ktime_t t = ktime_set( secs , nsecs) ; 高分辨率 hrtimer 结构体定义如下: struct hrtimer
    的头像 发表于 10-04 15:32 506次阅读

    linux设备模型数据结构分析

    结构体吧: struct kobject { const char *name; /* 名字,对应sysfs下的一个目录 */ struct list_head entry ; /* kobject中
    的头像 发表于 09-28 14:44 410次阅读
    linux设备模型数据结构分析

    Linux clock子系统是什么

    API接口,使其可以屏蔽底层硬件差异。提供给consumer操作的API如下: struct clk *clk_get( struct device *dev, const char *id); struct clk *devm
    的头像 发表于 09-27 14:25 651次阅读
    Linux clock子系统是什么

    在驱动中创建sysfs接口完整例子

    led_status_show ( struct device *dev, struct device_attribute *attr, char *buf ) { return sprintf(buf
    的头像 发表于 09-27 11:46 381次阅读

    Linux驱动proc新接口介绍

    # include # include # include struct proc_dir_entry * my_proc_entry ; static int proc_clk_show (struct
    的头像 发表于 09-27 11:29 320次阅读

    Linux驱动函数接口说明

    函数接口说明 创建目录、文件函数: /* 创建目录 */ struct dentry *debugfs_create_dir( const char *name, struct dentry
    的头像 发表于 09-27 11:20 376次阅读