PLC 数组处理难?看这一篇就够了

PLC 数组处理难?看这一篇就够了
JZGKCHINA
工控技术分享平台

引言

在现代工业自动化中,数据处理能力的提升是提高效率和可靠性的重要途径。本文将介绍一个用于数组处理的功能块 PM_ArrayProcessing_v2,它能够执行多种数据分析任务,如排序、最大值、最小值、平均值和中位值的计算。程序使用 ST 语言编写,方便大家移植到自己使用的 PLC 品牌。

本文并没有深入介绍每个功能的实现方法,只提供了代码及部分解释,有兴趣的可以根据代码深入研究一下。程序代码的使用 ST 语言编写,大部分品牌 PLC 都支持 ST 语言,方便大家移植到自己使用的 PLC 品牌。


1

   

程序设计思路

该功能块通过多个按钮触发不同的操作,主要包括:

  • 排序:能够对输入的数组进行从小到大或从大到小的排序。
  • 最大值和最小值:快速找出数组中的最大值和最小值。
  • 平均值:计算数组的平均值。
  • 中位值:找到数组的中位值,并处理奇数和偶数长度的情况。

通过这些功能,用户可以方便地对数组进行全面分析。


2

   

程序代码

FUNCTION_BLOCK PM_ArrayProcessing_v2VAR_INPUT    SortAscBtn : BOOL;    SortDescBtn : BOOL;    MaxBtn : BOOL;    MinBtn : BOOL;    AvgBtn : BOOL;    MedianBtn : BOOL;    InputArray : ARRAY[1..11] OF REAL;END_VARVAR_OUTPUT    SortedAscArray : ARRAY[1..11] OF REAL;    SortedDescArray : ARRAY[1..11] OF REAL;    MaxValue : REAL;    MinValue : REAL;    AvgValue : REAL;    MedianValue : REAL;END_VARVAR    TempArray : ARRAY[1..11] OF REAL;    I, J : INT;    Temp : REAL;    Sum : REAL;    ArrayLength : UINT;END_VAR
(*版本记录:版本 日期 作者 V1 2024-3-21 工控老王 V2 2024-8-09 工控老王*)
// 功能说明:// 对数组进行处理,根据不同功能的按钮,输出排序(从小到大,从大到小)、最大值、最小值、平均值、中位值
ArrayLength := SIZEOF(InputArray) / 4;
FOR I := 1 TO UINT_TO_INT(ArrayLength) DO TempArray[i] := InputArray[i];END_FOR
IF SortAscBtn THEN FOR I := 1 TO UINT_TO_INT(ArrayLength) - 1 DO FOR J := I + 1 TO UINT_TO_INT(ArrayLength) DO IF TempArray[i] > TempArray[j] THEN Temp := TempArray[i]; TempArray[i] := TempArray[j]; TempArray[j] := Temp; END_IF END_FOR END_FOR FOR I := 1 TO UINT_TO_INT(ArrayLength) DO SortedAscArray[I] := TempArray[I]; END_FOREND_IF
IF SortDescBtn THEN FOR I := 1 TO UINT_TO_INT(ArrayLength) - 1 DO FOR J := I + 1 TO UINT_TO_INT(ArrayLength) DO IF TempArray[I] < TempArray[J] THEN Temp := TempArray[I]; TempArray[I] := TempArray[J]; TempArray[J] := Temp; END_IF END_FOR END_FOR FOR I := 1 TO UINT_TO_INT(ArrayLength) DO SortedDescArray[I] := TempArray[I]; END_FOREND_IF
IF MaxBtn THEN MaxValue := InputArray[1]; FOR I := 2 TO UINT_TO_INT(ArrayLength) DO IF InputArray[i] > MaxValue THEN MaxValue := InputArray[i]; END_IF END_FOREND_IF
IF MinBtn THEN MinValue := InputArray[1]; FOR I := 2 TO UINT_TO_INT(ArrayLength) DO IF InputArray[i] < MinValue THEN MinValue := InputArray[i]; END_IF END_FOREND_IF
IF AvgBtn THEN Sum := 0; FOR I := 1 TO UINT_TO_INT(ArrayLength) DO Sum := Sum + InputArray[i]; END_FOR AvgValue := Sum / UINT_TO_INT(ArrayLength);END_IF
IF MedianBtn THEN FOR I := 1 TO UINT_TO_INT(ArrayLength)-1 DO FOR J := I + 1 TO UINT_TO_INT(ArrayLength) DO IF TempArray[I] > TempArray[J] THEN Temp := TempArray[I]; TempArray[I] := TempArray[J]; TempArray[J] := Temp; END_IF END_FOR END_FOR IF UINT_TO_INT(ArrayLength) MOD 2 = 0 THEN MedianValue := (TempArray[UINT_TO_INT(ArrayLength) / 2] + TempArray[UINT_TO_INT(ArrayLength) / 2 + 1]) / 2; ELSE MedianValue := TempArray[UINT_TO_INT(ArrayLength) / 2 + 1]; END_IFEND_IF


3

   

代码解释

  1. 输入与输出:输入包括一个长度为 11 的数组和若干控制按钮,输出则是处理后的数组或计算值。(可根据需求修改数组大小,程序中所有的数组变量都需要修改)
  2. 排序功能:使用简单的冒泡排序法实现排序功能。
  3. 最大值和最小值:通过遍历数组实现。
  4. 平均值:累加数组元素后除以数组长度。
  5. 中位值:先排序,再根据数组长度判断取中间值或中间两个值的平均。
  6. 拓展:用户可以根据自己的情况,只需要简单地修改程序就可以实现不同数组大小的数组分析。

程序运行展示

PLC 数组处理难?看这一篇就够了

输入

PLC 数组处理难?看这一篇就够了

输出


4

   

应用场景

该功能块适用于工业自动化设备的实时数据处理,如生产线传感器数据的分析、质量控制中的数据筛选等。


5

   

开源版本说明

该程序遵循开源原则,任何人都可以使用、修改和分发此代码。在使用前应进行充分的测试,修改代码时,请秉持分享精神,将您的改进和成果进行分享,以便更多人受益。


总结

通过 PM_ArrayProcessing_v2 功能块,用户可以高效地处理和分析数据。其设计简单易懂,适合快速集成到各种工业控制系统中,极大地提高了数据处理的自动化程度和效率。

往期回顾


CODESYS 的简介及环境安装

在 CODESYS 平台,创建你的第一个项目

介绍 CODESYS 编程软件中的变量

CODESYS 编程软件基本语法和运算符介绍

CODESYS 的ST语言实战 – 主备切换及保养提示解决方案

CODESYS 中的字符串及其基本操作

PLC 数组处理难?看这一篇就够了

2024年08月

1.Smart200&V90伺服系统:已更新15课

2.贝加莱直播课程:已更新30课

3.PKS快速入门:初级&中级-全

4.剑指工控经典公开课:已更新35课
5.EPLAN快速入门:初级20课全
PLC 数组处理难?看这一篇就够了

原文始发于微信公众号(剑指工控):PLC 数组处理难?看这一篇就够了

版权声明:admin 发表于 2024年8月17日 上午6:01。
转载请注明:PLC 数组处理难?看这一篇就够了 | CTF导航

相关文章