西门子PLC结构化编程_模拟量转换FC标准块
文章目录前言一、功能概述二、程序编写1. 新建数据类型“1_AnalogInPutType”2. 新建FC块“FC611_AnalogInPutConver”3. 编程三、程序调用总结前言之前我们分享过基于西门子博途V17平台的模拟量只读转换标准块《西门子PLC结构化编程_优化后的模拟量只读转换标准块》该程序使用FB功能块编写实际项目中发现每次调用都会生成一个背景数据块当模拟量较多时程序变得十分冗杂故本文在原程序基础上重新编写了FC块并对原始程序进行了优化。一、功能概述模拟量输入转换并设置超量程0-27648报警当输入值0或27648时输出值为0或27648同时报警设置采样频率正常情况下每个扫描周期计算一次加上采样周期后在每个设定时间内计算一次比如间隔300ms计算一次即需要每个300ms周期内产生一个高电平和一个低电平此程序将高电平所占时间设置为10ms则低电平时间为290ms均值滤波设置滤波次数(20次)一阶低通滤波滤波系数0.0-1.0采样周期范围0.01当设置为0.01时实际采样周期和程序扫描周期保持一致采样周期越大输出值曲线越平滑但滞后性会越大该参数同时作用于均值滤波算法和一阶低通滤波算法均值滤波次数范围1-20当设置为1时均值滤波功能失效一阶低通滤波器对高频信号有较大的阻碍作用对低频信号阻碍作用较低本程序滤波器算法基于后向差分法一阶低通滤波器参数范围0.0-1.0不包括0.0参数越小曲线越平滑但时效性越差参数越大滤波效果越差当设置为1.0时一阶低通滤波功能失效当CPU启动时的第一个扫描周期或按下“初始化按钮”后将模拟量参数设置为默认值其它情况下可在上位机界面修改当有多个模拟量时可将“外部初始化按钮”关联同一个变量当该变量置位时所有模拟量参数设定值同时初始化可设置死区值当模拟量实际值小于设定值时不进行报警。二、程序编写1. 新建数据类型“1_AnalogInPutType”图12. 新建FC块“FC611_AnalogInPutConver”建立如下引脚变量图23. 编程// 初始化设定// 参数赋值#Analog.InPut.AI_IN:#AI_IN;#Analog.InPut.IN_MIN:#IN_MIN;#Analog.InPut.IN_MAX:#IN_MAX;#Analog.HMI.ModeOut:#ModeOut;IF #FirstScan OR #Analog.HMI.InitialSet OR #HMIInitialSet THEN#Analog.HMI.OUT_MAX:#OUT_MAX;#Analog.HMI.OUT_MIN:#OUT_MIN;#Analog.HMI.LL_Set:#LL_Set;#Analog.HMI.L_Set:#L_Set;#Analog.HMI.H_Set:#H_Set;#Analog.HMI.HH_Set:#HH_Set;#Analog.HMI.CY_CYCLE:#CY_CYCLE;#Analog.HMI.Filt_Times:#Filt_Times;#Analog.HMI.ModeFilter:#ModeFilter;#Analog.HMI.Alpha:#Alpha;// #Analog.HMI.InitialSet : 0; // 初始化设定按钮自复位// #HMIInitialSet : 0; // 外部初始化设定按钮自复位END_IF;// 把浮点数转换为时间IF #Analog.HMI.CY_CYCLE0.01THEN#Analog.HMI.CY_CYCLE:0.01;END_IF;#Analog.Temp.CYCLE_Time:DINT_TO_TIME(REAL_TO_DINT(#Analog.HMI.CY_CYCLE*1000.0)-10);//DINT 1000转成TIME表示1S若CY_CYCLE1则实际时间为1s//“-10”是为了将1S分割成990ms低电平和10ms高电平注意这里调用了自定义边沿检测标准块“FC610_EdgeTrigger”见文章《西门子PLC结构化编程_自定义边沿检测功能块》。// 超量程报警IF #Analog.InPut.AI_IN#Analog.InPut.IN_MIN THEN#Analog.InPut.AI_IN:#Analog.InPut.IN_MIN;#Analog.Temp.Over_Alarm_L:1;ELSE#Analog.Temp.Over_Alarm_L:0;END_IF;IF #Analog.InPut.AI_IN#Analog.InPut.IN_MAX THEN#Analog.InPut.AI_IN:#Analog.InPut.IN_MAX;#Analog.Temp.Over_Alarm_H:1;ELSE#Analog.Temp.Over_Alarm_H:0;END_IF;IF #Analog.Temp.Over_Alarm_L OR #Analog.Temp.Over_Alarm_H THEN#Analog.HMI.Over_Alarm:1;#Analog.HMI.PV:99999.0;ELSIF(NOT #Analog.Temp.Over_Alarm_L)AND(NOT #Analog.Temp.Over_Alarm_H)THEN#Analog.HMI.Over_Alarm:0;END_IF;// 计算输出值// 计算没有经过滤波的4~20mA信号输出值#Analog.OutPut.OUT_Mode0:((INT_TO_REAL(#Analog.InPut.AI_IN-#Analog.InPut.IN_MIN)/INT_TO_REAL(#Analog.InPut.IN_MAX-#Analog.InPut.IN_MIN))*(#Analog.HMI.OUT_MAX-#Analog.HMI.OUT_MIN))#Analog.HMI.OUT_MIN;// 计算没有经过滤波的热电阻PT100信号输出值#Analog.OutPut.OUT_Mode1:INT_TO_REAL(#Analog.InPut.AI_IN)/10.0;// 模式选择及输出IF #Analog.HMI.ModeOut THEN#Analog.OutPut.OUT:#Analog.OutPut.OUT_Mode1;ELSE#Analog.OutPut.OUT:#Analog.OutPut.OUT_Mode0;END_IF;IF #Analog.Temp.TempBool2 THEN REGION 均值滤波 IF #Analog.HMI.Filt_Times20THEN#Analog.HMI.Filt_Times:20;END_IF;IF #Analog.HMI.Filt_Times1THEN#Analog.HMI.Filt_Times:1;END_IF;FOR #Analog.Temp.N:#Analog.HMI.Filt_Times TO1BY-1DO//从最后一个值开始依次将数组中的后一个值倒序赋给前一个值#Analog.Temp.Filts[#Analog.Temp.N]:#Analog.Temp.Filts[#Analog.Temp.N-1];END_FOR;#Analog.Temp.Filts[0]:#Analog.OutPut.OUT;//将输出值赋给数组中的第一个值#Analog.Temp.SUM:0;FOR #Analog.Temp.N:0TO #Analog.HMI.Filt_Times-1DO//计算滤波数组的和#Analog.Temp.SUM:#Analog.Temp.SUM#Analog.Temp.Filts[#Analog.Temp.N];END_FOR;#Analog.OutPut.MeanFilter_OUT:#Analog.Temp.SUM/#Analog.HMI.Filt_Times;//计算平均值END_REGION REGION 一阶低通滤波 IF #Analog.HMI.Alpha1.0THEN#Analog.HMI.Alpha:1.0;END_IF;IF #Analog.HMI.Alpha0.0THEN#Analog.HMI.Alpha:0.01;END_IF;#Analog.OutPut.RCFilter_OUT:(1.0-#Analog.HMI.Alpha)*#Analog.Temp.RCFilter_OUT_PreTime#Analog.HMI.Alpha*#Analog.OutPut.OUT;#Analog.Temp.RCFilter_OUT_PreTime:#Analog.OutPut.RCFilter_OUT;END_REGION END_IF;// 滤波器选择IF NOT #Analog.HMI.Over_Alarm THEN IF #Analog.HMI.ModeFilter THEN#Analog.HMI.PV:#Analog.OutPut.RCFilter_OUT;ELSE#Analog.HMI.PV:#Analog.OutPut.MeanFilter_OUT;END_IF;END_IF;// 复位IF #Analog.HMI.HMI_Rst THEN#Analog.HMI.LL_Latch:0;#Analog.HMI.L_Latch:0;#Analog.HMI.H_Latch:0;#Analog.HMI.HH_Latch:0;#Analog.HMI.LL_Alarm:0;#Analog.HMI.L_Alarm:0;#Analog.HMI.H_Alarm:0;#Analog.HMI.HH_Alarm:0;END_IF;#Analog.HMI.HMI_Rst:#Analog.HMI.HMI_Rst AND NOT #Analog.Temp.TempBool3;#Analog.HMI.InitialSet:#Analog.HMI.InitialSet AND NOT #Analog.Temp.TempBool4;#HMIInitialSet:#HMIInitialSet AND NOT #Analog.Temp.TempBool5;#Analog.Temp.TempBool3:#Analog.HMI.HMI_Rst;#Analog.Temp.TempBool4:#Analog.HMI.InitialSet;#Analog.Temp.TempBool5:#HMIInitialSet;三、程序调用创建一个DB块用来存放所有的模拟量数据。图3在主程序段中调用“FC611_AnalogInPutConver”并关联对应变量示例如下图4总结本文进一步优化了模拟量转换标准块。

相关新闻

cosign签名 + SLSA溯源介绍(SLSA Provenance溯源声明、Keyless模式、OIDC联合身份、Sigstore)

cosign签名 + SLSA溯源介绍(SLSA Provenance溯源声明、Keyless模式、OIDC联合身份、Sigstore)

维度企业做法我们评价部署凭据OIDC 联合身份,无长期密钥长期 ed25519 forced command⚠️ 落后,但裸 VPS 无 IAM 可联合镜像引用digest 钉死digest 钉死✅ 很多团队还在部署 :latest镜像可信cosign 签名 SLSA 溯源 准入控制拒绝未签名仅 Trivy 扫描❌…

2026/10/12 16:42:20 阅读更多 →
2026朝阳危房鉴定检测怎么选?老旧房危房鉴定靠谱机构 TOP 结构安全检测+ 报告可查 电话汇总

2026朝阳危房鉴定检测怎么选?老旧房危房鉴定靠谱机构 TOP 结构安全检测+ 报告可查 电话汇总

朝阳区老旧房屋密集,危房鉴定机构虽多却鱼龙混杂,老旧小区业主、乡镇自建房住户、商铺经营者、园区厂房及学校医院都亟需权威安全评估。市面上不少无资质机构出具的报告无法通过住建审核,小编实地走访筛选本地正规第三方危房鉴定实验室&#…

2026/10/13 20:42:02 阅读更多 →
降AI率工具怎么挑才不会踩坑?付款前问清这四条退款条款再下单。

降AI率工具怎么挑才不会踩坑?付款前问清这四条退款条款再下单。

降AI率工具怎么挑才不会踩坑?付款前问清这四条退款条款再下单。 你现在的状态大概是这样:手机里存了七八个链接,小红书刷到的、同学发的、搜索出来的,每一个页面都写着效果显著。评论区一半人说真好用,一半人说骗钱&am…

2026/10/8 21:10:46 阅读更多 →

最新新闻

稳定细胞系构建与高表达克隆筛选:从瞬时转染到稳定株的完整指南

稳定细胞系构建与高表达克隆筛选:从瞬时转染到稳定株的完整指南

上个月接了一个蛋白药物早期研发的需求。对方上来就问:稳定细胞系构建怎么收费,能不能顺便帮筛几个高表达克隆。多聊了几句我才搞清楚,他们刚用瞬时转染跑完一轮预实验,分泌量看着不错,团队内部已经把预算和排期都排到…

2026/10/14 10:11:49 阅读更多 →
PTA C++编程题解题攻略:常见题型与踩坑经验总结

PTA C++编程题解题攻略:常见题型与踩坑经验总结

1. 拿到PTA编程题,先别急着敲代码这些年我在某高校带过好几轮C上机课,也帮着学弟学妹们辅导过不少PTA的作业题,发现大多数人卡住的原因其实不是代码能力不够,而是打心底里没把“编程题”当成一道需要审题、拆解的工程题来做。大一…

2026/10/14 10:11:49 阅读更多 →
自托管PS5游戏库与硬件维护:一个极简Web面板的设计实践

自托管PS5游戏库与硬件维护:一个极简Web面板的设计实践

任何一台PS5,玩久了都会攒出一堆散乱的数字资产:买过的游戏、还没补的DLC、借给朋友的光盘、上次清灰的时间、某个账号里卡在80%的奖杯列表。身边不少人用Excel或者手机备忘录在记,但一旦跨设备、跨主机、跨朋友借还,很快就乱成一…

2026/10/14 10:11:49 阅读更多 →
LiteLLM实战:统一大模型API接入与代理网关部署指南

LiteLLM实战:统一大模型API接入与代理网关部署指南

如果你手上同时要接好几家大模型的 API,估计你早就被“每家一套请求格式、鉴权方式、限流策略”磨到没脾气。litellm就是干这个的:一个 Python 库,也是一个可以独立部署的代理网关,把各家大模型接口统一成一套调用方式&#xff0c…

2026/10/14 10:11:49 阅读更多 →
Excel SUMIFS函数详解:多条件求和高阶技巧

Excel SUMIFS函数详解:多条件求和高阶技巧

1. 为什么需要SUMIFS函数? 刚接触Excel那会儿,我经常被各种销售报表折磨得焦头烂额。记得有次老板让我统计"华东地区手机品类在Q2的销售额",我硬是用了三个辅助列才勉强算出来。直到后来发现了SUMIFS这个神器,才发现原来…

2026/10/14 10:11:49 阅读更多 →
Django+Flask智能营销系统:银行数字化转型实战

Django+Flask智能营销系统:银行数字化转型实战

1. 项目背景与核心价值在金融数字化转型浪潮中,银行业务营销正从传统人工经验驱动转向数据智能驱动。这个基于DjangoFlask的智能营销系统,正是利用爬虫技术获取多维金融数据,通过大数据分析生成客户画像,最终以可视化大屏呈现营销…

2026/10/14 10:10:46 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →