欢迎光临
我们一直在努力

CODESYS编程实现:二分查找算法-在自动化设备大数据中的原理与应用

引言

在自动化设备中,二分查找和三分查找是实现快速、精确控制的关键算法,但二者的应用场景有本质区别。简单来说,二分查找主要解决“查找目标值”的问题,而三分查找则擅长解决“寻找最优值”的问题。

为了让你快速了解,下面的表格对比了它们在实际应用中的核心差异:

应用维度
二分查找
三分查找
核心任务 在有序数据中快速定位特定目标 在单峰/单谷函数中高效寻找极值(如最清晰点、最高效率点)
典型场景 参数表查询、故障区间定位、数据索引 视觉自动对焦、过程参数优化、寻找最佳工作点
在自动化中的价值 提升控制系统的响应速度和实时性 加快优化搜索过程,提高调参精度与效率
设备应用实例 1. PLC查询预设参数表。 2. 在激光超声检测中快速定位缺陷区间。 在半导体检测设备中,用于快速搜索使图像最清晰的焦面位置。

在讲解算法背景、原理、编程语言实现以及应用场景等之前,本人先通过一个小案例,带大家直观理解二分查找法的优势。

案例说明如下:

①创建一个数组,含一百万条数据,按照序号分别循环写入数据。

②使用Case语句,创建三种模式:模式0-不查找任何数据,模式1-按顺序查找数据,模式2-按二分法查找数据;

③顺序或二分法查找内容时,分别赋值查找的数值1,99999,999999;

④实时监控三种模式下的循环扫描周期值(平均值)。

⑤编程环境使用CODESYS仿真,自由循环,并添加Trace数据。

程序代码如下:

PROGRAM PLC_PRG
VAR
records: ARRAY[1..1000000] OF REAL;//一百万数据
Mid:LINT;
Left:LINT;
Right:LINT;
targetTemp:REAL;
tolerance:REAL;//容差0
foundIndex :LINT:=-1;
i:LINT;
Mode:INT;
END_VAR

FOR i:=1 TO 1000000 DO
records[i]:=i;
END_FOR;

Mid:=0;
Left:=1;
Right:=1000000;
foundIndex:=-1;

//此程序给定目标值需在此内
CASE Mode OF

1://顺序法
WHILE Left<=Right AND foundIndex = -1 DO
mid := Mid +1 ; //顺序查找
IF ABS(records[Mid]-targetTemp)=tolerance THEN
foundIndex:=Mid;//找到目标
END_IF
END_WHILE

2:
//二分查找法
WHILE Left<=Right AND foundIndex = -1 DO
mid := (left + right) / 2; // 自动取整
IF ABS(records[Mid]-targetTemp)=tolerance THEN
foundIndex := mid; // 找到目标
END_IF
IF records[Mid]<targetTemp THEN
Left :=Mid+1;//在左侧
END_IF;
IF records[Mid]>targetTemp THEN
Right :=Mid-1;//在右侧
END_IF;
END_WHILE;

END_CASE

实现效果如下:

测试环境使用Codesys仿真,为了实验的严谨性,每次重新测试都进行了冷复位,而且为了确保不受“程序”影响,测试的逻辑也进行了调整,且等运行趋势确定后再进行模式切换。

测试序列
步骤顺序
当前模式
当前目标值
观察到的“时间差”特点 (相对值)
第一次测试 1 模式 0 0 基准点
2 模式 1 1 与“模式2,目标值1”基本相同
3 模式 1 99999 比 步骤2 慢约 100 μs
4 模式 2 1 与“模式1,目标值1”基本相同
5 模式 2 99999 与 步骤4 相比基本不变
第二次测试 1 模式 0 0 基准点
2 模式 2 1 与“模式1,目标值1”基本相同
3 模式 2 99999 与 步骤2 相比基本不变
4 模式 1 1 与“模式2,目标值1”基本相同
5 模式 1 99999 比 步骤4 慢约 100 μs
第三次测试 1 模式 0 0 基准点
2 模式 2 1 与“模式1,目标值1”基本相同
3 模式 2 999999 与 步骤2 相比基本不变
4 模式 1 1 与“模式2,目标值1”基本相同
5 模式 1
赞(0)
未经允许不得转载:171主机测评 » CODESYS编程实现:二分查找算法-在自动化设备大数据中的原理与应用
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址