西门子博图编程:自定义数据类型

14 篇文章 2 订阅
13 篇文章 6 订阅

回忆起以前项目中上位机和HMI中使用画面弹窗功能,本文谈谈在博图里面自定义数据类型的使用。
创建新的数据类型
新的数据类型有啥用呢?举个例子,假设有8台电机,这8台电机用变频器来控制,那么每台电机用到的数据有:

名称数据类型
运行反馈bool
故障信号bool
运行bool
频率real

古典方法
“古典“的情况下,变量表中M一个一个的加,VD一个接一个的用。稍微会点技巧的人用地址自动分配功能和外部Excel编辑配合使用,不会太浪费时间。但是变量太多,地址自动分配完后,后期的编程中难免会出幺蛾子。
在这里插入图片描述
流行方法
DB数据块在博图编程中应该是越来越流行了,所以很多人会创建一个DB数据块,然后继续在里面堆变量。这么做的好处是如果你使用默认的“优化的块访问”,那么就不用纠结地址问题,软件会自动优化分配。
在这里插入图片描述
如果你不嫌麻烦,你可以创建多个DB块,分开放置每个电机的参数,那在调用的时候就比较舒服了。
在这里插入图片描述
然而,会遇到另外一个问题:如果我想每个电机增加一个参数,那还是得一个一个地调整。
在这里插入图片描述

新建数据类型
好,那么为了便于后期的程序修改或调整,可以采用创建新的数据类型来解决这个问题。

  1. 新建数据类型,名称为motorType,里面创建三个bool,一个real变量。SCL程序如下:(我习惯用SCL了)
TYPE "motorType"
VERSION : 0.1
   STRUCT
      motorRunning : Bool;   //  motor running(feedback singal)
      motorErr : Bool;   // VFD error singal
      motorStart : Bool;   // motor start
      motorFrequence : Real := 0.0;   // motor speed
   END_STRUCT;
END_TYPE

在这里插入图片描述
2.创建DB数据块Motor,新建数据motor1,数据类型为motorType。然后依次新建motor2、motor3…
在这里插入图片描述
3. 如果后期想增添电机参数,可以更改数据类型定义,那么DB数据块会报错,此时只需进行更新就可解决。
如下图,在数据类型中新添一个变量motorStop 在这里插入图片描述
此时刚才建立的数据块会报错
在这里插入图片描述
单机更新接口图标,数据块根据刚才修改的数据类型进行了更新
在这里插入图片描述
这种方式特别方便,基本不用去修改原先的PLC程序中的变量。
在这里插入图片描述
本文参考了付老湿的blog,感谢!

  • 9
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
博图西门子公司推出的一种PLC编程语言,程序块是博图中的一种编程元素,用于实现特定的功能。在博图中,可以使用数据类型来定义变量,以便在程序块中使用。下面是关于博图和程序块数据类型的介绍: 博图是一种基于图形化编程的PLC编程语言,它使用图形符号来表示程序块和变量,使得程序的编写更加直观和易于理解。博图中的程序块可以分为功能块和组态块两种类型,其中功能块用于实现具体的功能,而组态块则用于配置PLC的硬件和软件环境。 程序块数据类型博图中的一种数据类型,它可以用于定义变量的类型和结构。在程序块中,可以使用数据类型来定义变量,以便在程序块中使用。程序块数据类型可以包含多个变量,每个变量可以是不同的数据类型,例如bool、int、real等。程序块数据类型的定义可以在程序块中进行,也可以在全局数据块中进行。 下面是一个示例程序,演示了如何在博图中使用程序块数据类型: ```ladder logic FUNCTION_BLOCK Motor VAR_INPUT motorRunning : BOOL; // 电机运行状态 motorErr : BOOL; // 电机故障状态 motorStart : BOOL; // 电机启动状态 motorFrequence : REAL; // 电机频率 END_VAR VAR_OUTPUT motorStop : BOOL; // 电机停止状态 END_VAR VAR // 定义一个程序块数据类型 TYPE motorType : STRUCT motorRunning : BOOL; // 电机运行状态 motorErr : BOOL; // 电机故障状态 motorStart : BOOL; // 电机启动状态 motorFrequence : REAL; // 电机频率 END_STRUCT END_TYPE // 定义一个变量,类型为motorType motorData : motorType; END_VAR // 程序块的逻辑实现 IF motorStart THEN motorData.motorRunning := TRUE; motorData.motorFrequence := motorFrequence; ELSE motorData.motorRunning := FALSE; END_IF IF motorErr THEN motorData.motorErr := TRUE; motorData.motorRunning := FALSE; ELSE motorData.motorErr := FALSE; END_IF motorStop := NOT motorData.motorRunning; END_FUNCTION_BLOCK ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值