机械荟萃山庄

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 56|回复: 0

欲用西门子 1200PLC 实现如下功能

[复制链接]

3万

主题

3万

帖子

23万

积分

超级版主

Rank: 8Rank: 8

积分
235958
发表于 昨天 11:36 | 显示全部楼层 |阅读模式


问



答
按 TIA Portal + S7-1200 的常规做法:
在 PLC 数据类型里新建一个 UDT,名字叫 typeTank,每个水罐的东西都收在里面,这样后面 50 个罐就是一个数组。
再建一个全局 DB,名字叫 DB_Tank,保持默认的优化块访问。
始数据按罐号存,排序结果单独放 sorted,这一点很重要,不能为了方便显示而把原始数组搅乱。

功能 1,温度从高到低并带罐号。
新建一个 FC,名字叫 FC_Sort,语言选 SCL。排序要解决的核心是温度和罐号一起走,不能只排温度,所以用选择排序,交换的是整个结构,罐号自然跟着温度走。

功能 2,到温度启动阀和泵。
新建一个 FB,名字叫 FB_TankControl,用一个 FOR 循环把 50 个罐统一处理。这里加了回差,不然温度在设定点附近晃,阀和泵会嗒嗒嗒来回跳。

PT100 直接配 SM1231 RTD 模块,在设备组态里把模块通道类型设成对应的 RTD,比如 PT100 标准型,温度单位选摄氏度,模块读上来的数就能直接当温度用,不用再写缩放,读出来搬进 tank.tempAct 就行。如果你用的是 4 到 20 毫安的温度变送器配普通模拟量模块,那就得用 NORM_X 加 SCALE_X 把原始值换算成实际温度,50 路就循环处理 50 次。
OB100 里做初始化,把罐号 1 到 50 先写好,回差给默认值。OB1 里按这个顺序调,先读温度,再做控制,最后排序显示,对应西门子把输入、逻辑、输出分开的习惯。

显示排序用一个表格控件,数据源绑定 DB_Tank.sorted,50 行,每行两列分别是罐号和温度,刷新就是排完序的从高到低顺序。设定值在另一个画面做一个 50 行的表格,I/O 字段绑定 tank.tempSet,模式设成输入,操作工直接改,想让设定值断电不丢,就在 DB 里把这一组变量的 Retain 勾上。再放自动手动切换和 50 个阀、泵的手动按钮、故障指示灯。

50 个阀加 50 个泵是 100 个数字量输出,本体那点 DQ 远远不够,要按模块点数扩展,比如 16 点一块的 DQ 模块要 7 块左右,具体看你选的型号,在设备组态里加完模块,把 valveCmd、pumpCmd 和实际 Q 点对应好,输出再统一写一次到硬件。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|机械荟萃山庄 ( 辽ICP备16011317号-1 )

GMT+8, 2026-11-3 07:19 , Processed in 0.079787 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表