[西门子] 西门子1200PLC蛋糕配方案例

[复制链接]
查看84331 | 回复0 | 2024-8-20 10:20:29 | 显示全部楼层 |阅读模式

1. 定义一个 PLC 数据类型(UDT)

配方数据块的设计需灵活包含数组结构,这些数组能够模拟菜谱中的复杂配料列表,既支持一维也支持多维数组形式,以适应不同层级和类型的配方参数。数组中的每个元素均基于PLC支持的数据类型或自定义结构体构建,确保数据在PLC系统中的有效存储与处理。首先,我们来创建一个PLC数据类型,用来定义配方中的配料组成,我们以制造蛋糕为例,如图1所示。



图1.定义 PLC 数据类型

数据模板定义了后续配方数据块中反复使用的数据类型,这些类型构成了配方成分的基础结构。在创建不同的产品配方时,我们只需输入共用的成分名称及其数据类型,然后通过调整这些成分的具体数值来区分各个配方。这样,一个统一的数据模板能够灵活支持多个实例配方的生成,每个配方因其成分数值的不同而独一无二。

2. 使用 PLC 数据类型创建配方数据块

我们设定了一个全局性的配方数据块,名为“DB1_蛋糕配方”,并在其属性中特别指定了“仅存储在装载内存中”的选项,以确保数据处理的效率。在“DB1_蛋糕配方”中,我们定义了一个数组类型的变量,该数组的元素类型为自定义的“蛋糕配方”结构体。数组的大小被设置为0到7的限值,意味着可以存储最多8个不同的蛋糕配方。这一设计提供了灵活性,允许根据实际需求调整配方数量,满足多样化的生产需求。

注意,如果需要使用RecipeExport和RecipeImport导入导出,配方DB块的名称中尽量不出现中文字符,否则在WEB页面操作会略微麻烦一些,具体详见配方数据的管理。本例为显示直观,所以使用了“DB1_蛋糕配方”的名字。



图2.定义数据块属性



图3.创建配方数据块

3. 在工作存储器中创建活动配方 DB,并通过“READ_DBL”和“WRIT_DBL”指令实现对装载存储区配方数据块的读写操作

我们准备了一个全局数据块“DB2_活动配方”,位于工作存储器中,专门用于配方数据的实时写入与读取操作。该数据块的数据类型直接设定为“蛋糕配方”,这样可以直接与我们的配方结构体相匹配,便于数据的直接交互与处理,如图4所示。



图4.添加活动配方块

确定后,就可以得到活动配方数据块,该块只由一组配方组成,如图5所示。



图5.活动配方数据块

注意,因为指令“READ_DBL”和“WRIT_DBL”的缘故,要求活动配方数据块与配方数据块的优化属性必须相同,即都同时是优化数据块,或者同时是非优化数据块。

将此DB块作为连接工作存储器与装载存储器中配方数据的关键接口,使用“WRIT_DBL”指令可即时将当前活动的配方数据从工作区写入到装载区的配方DB块中,反之,“READ_DBL”指令则能迅速从装载区读取配方数据至工作区的活动配方DB块,实现配方数据的动态读写操作。

4. 导出配方数据块

S7-1200 V4.0及以上版本的CPU支持RecipeExport与RecipeImport指令,方便地将配方数据块导入导出,便于通过EXCEL或ASCII编辑器等电脑工具进行灵活编辑与管理。

对于S7-1200 V4.0之前的版本,用户通常需直接在配方数据块中设置初始配方值,因此可跳过部分步骤直接操作。在本例中,若需在编程中调用RecipeExport或RecipeImport功能,建议先创建一个DB块(如"DB3_操作"),其中定义必要的结构体(如"Export")及请求、状态等变量,以支持这些操作的调用。调用可在主程序OB1中通过LAD实现,亦可在FC/FB或FB的多重背景中灵活使用,编程语言则不限于LAD,FBD、SCL亦可,如图6所示。



图6. 建立结构体

在 OB1 调用RecipeExport,以及捕捉是否完成及错误代码等程序,如图7所示。





图7.调用RecipeExport指令

5. 配方csv文件的导入和导出

通过Web服务器或存储卡,用户可轻松实现CSV文件的导入导出,进而在Excel等电脑上的软件中便捷地编辑配方数据。

6. 导入配方数据块

配方文件经WEB上传或存储卡导入后,可进一步导入配方数据块。类似地,在"DB3操作" DB块中构建与"Export"结构相同的"Import"结构体及其相关变量,用于RecipeImport的请求与状态管理,如图8所示。



图8. 建立结构体

在 OB1 调用RecipeImport,以及捕捉是否完成及错误代码等程序,如图9所示。思路同第4步。





图9.调用RecipeImport指令

7. 读取配方数据

配方数据在PLC装载存储器中编辑或设置后,需通过READ_DBL指令读取。在"DB3操作" DB块中定义Int型变量Index作为配方编号,范围限定在0至7,以匹配配方数组索引。此编号既可在HMI界面上设定,也可通过程序逻辑设置。同时,在"DB3_操作" DB块中构建"Read"结构体及其变量,用于READ_DBL操作的请求与状态监控,如图10所示。



图10.建立Index变量及结构体

利用数组索引功能,通过设定Index变量的值来指定需从配方数组中读取的配方编号,并将其内容传输至活动配方数据块。例如,若需加载配方0至活动配方,则将Index设为0;若需配方1,则Index设为1,以此类推。具体实现程序如图11所示。



图11.读配方

然后就可以直接使用活动配方了,不论是程序中,还是HMI画面中。例如本例中,当Index=0时,读出的活动配方DB,如图12所示。



图12.活动配方数据

8. 在线修改配方

若需微调配方数据而非全面更新,可利用WRIT_DBL指令直接在PLC中修改。通过DB块"DB3_操作"的Index变量指定待修改配方,此变量亦可在HMI界面上设定。在HMI上,用户可选择配方编号,将活动配方映射至IO域以便修改,随后通过按钮触发READ_DBL读取配方,修改后,再触发WRIT_DBL将更新后的活动配方写回指定配方编号位置,如图13所示为操作界面示例。



图13.HMI画面

同样在DB块"DB3_操作",建立结构体"Write",以及相关变量,结构同"Read",用于WRIT_DBL的请求与状态位,如图14所示。



图14.建立结构体

最后,通过数组索引功能,将已修改的活动配方数据写入到配方数组中的指定位置。具体地,设置Index变量为欲修改的配方编号(如0表示配方0),修改活动配方数据块后,执行写入操作。如需修改其他配方,只需更改Index值并重复上述过程,如图15所示为相应程序示例。



图15.写配方

本例如图16所示,读出Index为0的配方,然后修改黄油数据为2.0,点击“写入配方”按钮即可修改配方DB的值。



图16.HMI修改数据

到这里我们蛋糕配方案例就结束啦,同学们跟上老师的节奏了吗?

来源:技成培训网,作者:胡志豪,未经允许不得转载
免费领取

小编今天整理了西门子案例及学习资料、三菱案例及学习资料、热门仿真软件、PLC培训课件等电气人必备资料,扫描下方二维码即可领取!




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则