设为首页
收藏本站
PLC技术网
开启辅助访问
切换到宽版
登录
注册哦
只需一步,快速开始
微信扫码登录
门户
Portal
论坛
BBS
导读
Guide
排行榜
Ranklist
搜索
搜索
本版
文章
帖子
用户
PLC论坛-全力打造可编程控制器专业技术论坛
»
论坛
›
工控技术交流区
›
『国外:三菱/西门子/欧姆龙/松下』
›
流量累计计算(FB块封装内置简易滤波算法)——CODESYS ...
返回列表
发新帖
[CodeSys]
流量累计计算(FB块封装内置简易滤波算法)——CODESYS
[复制链接]
20788
|
0
|
2024-11-7 08:43:02
|
显示全部楼层
|
阅读模式
在工业自动化领域,PLC(可编程逻辑控制器)有时也会被用来进行流量的累计计算。这通常涉及到液体或气体等介质通过管道时的体积或质量测量。流量累计计算对于过程控制非常重要,因为它可以帮助企业追踪物料使用情况、成本核算以及生产效率分析。要实现基于PLC的流量累计计算,一般需要以下几个步骤:
传感器选择与安装:首先需要确定合适的流量计类型(如涡轮流量计、电磁流量计、超声波流量计等),并正确地将其安装到工艺流程中适当的位置上。流量计的作用是将流经管道内的物质转换为电信号输出。
信号处理:流量计产生的信号可能需要经过适当的放大、滤波等预处理后才能输入给PLC。这部分工作可以通过专用的信号转换模块来完成。
程序编写:
数据采集:在PLC程序中配置相应的输入点以读取来自流量计的信号。
单位换算:根据实际应用需求,将原始信号值转换成有意义的物理量(如升/分钟、立方米/小时等)。
累加运算:通过编程实现流量值随时间累积的过程。这一步骤可能涉及到定时器的设置,确保按照特定的时间间隔更新累计值。
结果展示:最终的累计结果可以通过连接至PLC的HMI(人机界面)显示出来,或者通过网络发送到其他系统进行进一步分析。
测试与调试:完成上述设置之后,还需要对整个系统进行全面的测试,确保所有组件正常工作,并且能够准确可靠地执行流量累计功能。
一、FB块的封装
IF run THEN relay:=1;END_IF
IF run = 0 THEN relay:=0;initial:=0;END_IF
// 数字滤波部分IF relay = 1 THENflow_VAL_1:=flow_VAL/36000; //采集的是M3/H 转换成 M3/S
IF initial = 1 AND relay =1 THEN //初始化完成后采集
FOR i:=1 TO Filter_Length BY 1 DO
FLOW_DATA
:=flow_VAL_1;
END_FOR
END_IF;
IF initial = 0 AND relay =1 THEN //初始流量采集
FOR i:=1 TO Array_length BY 1 DO
FLOW_DATA
:=flow_VAL_1;
END_FOR initial:=1;END_IF;
FLOW_DATA_MAX:=0; //最大值滤波FOR i:=1 TO Array_length BY 1 DO
IF FLOW_DATA_MAX<FLOW_DATA
THEN
FLOW_DATA_MAX:=FLOW_DATA
;
END_IF
END_FOR
FLOW_DATA_MIN:=FLOW_DATA_MAX; //最小值滤波
FOR i:=1 TO Array_length BY 1 DO
IF FLOW_DATA_MIN>FLOW_DATA
THEN
FLOW_DATA_MIN:=FLOW_DATA
;
END_IF
END_FOR
FLOW_DATA_SUM:=0; //数据求和求平均部分
FOR i:=1 TO Array_length BY 1 DO
FLOW_DATA_SUM:=FLOW_DATA
+FLOW_DATA_SUM;
END_FOR
FLOW_DATA_Average:=(FLOW_DATA_SUM-FLOW_DATA_MIN-FLOW_DATA_MAX)/(Array_length-2);
//滑动滤波数据交换
FOR i:=1 TO (Array_length-Filter_Length) BY 1 DO
FLOW_DATA_1
:=FLOW_DATA
;
END_FOR
FOR i:=1 TO (Array_length-Filter_Length) BY 1 DO
FLOW_DATA[i+Filter_Length]:=FLOW_DATA_1
;
END_FOR
//数字滤波强度计算
IF Array_length>=10 THEN
IF Filter_strength>3 THEN
Filter_strength:=3; END_IF;
Filter_Length:=( Array_length/10)*2*Filter_strength;
END_IF
IF Array_length<10 THEN IF Filter_strength>2 THEN
Filter_strength:=2; END_IF; Filter_Length:=2*Filter_strength;
END_IF
// 流量采集TON_0(IN:= NOT TON_0.Q AND relay , PT:=Cycle_ms);
IF TON_0.Q THEN
Cycle_Real:=TIME_TO_REAL(Cycle_ms);
Accum:=(Last_Value+flow_VAL_1)*Cycle_Real/2+Accum;
flow_out_put:=Accum;
Last_Value:=flow_VAL_1;
END_IF
END_IF
// 流量清零
IF Reset THEN //清零
Last_Value:=0.000000E000;
Accum:=0.000000E000;
flow_out_put:=0.000000E000;
END_IF
二、实际效果展示
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
注册哦
x
回复
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册哦
本版积分规则
发表回复
回帖后跳转到最后一页
王同学玩工控
回复楼主
返回列表
『国外:三菱/西门子/欧姆龙/松下』
『国产:台达/汇川/信捷产品交流区』