PLC 编程:随机控制多个闪烁灯的亮灯顺序

假设我们有以下 PLC 变量,它们控制着多个闪烁灯:

VAR
    blk: Blink :=(Timelow:=T#8S, timehigh:=T#10000MS);
    b9k: Blink :=(Timelow:=T#8S, timehigh:=T#9000MS);
    b2k: Blink :=(Timelow:=T#8S, timehigh:=T#8000MS);
    b3k: Blink :=(Timelow:=T#8S, timehigh:=T#7000MS);
    b4k: Blink :=(Timelow:=T#8S, timehigh:=T#6000MS);
    b5k: Blink :=(Timelow:=T#8S, timehigh:=T#5000MS);
    b6k: Blink :=(Timelow:=T#8S, timehigh:=T#4000MS);
    b7k: Blink :=(Timelow:=T#8S, timehigh:=T#3000MS);
END_VAR

目标:Timelowtimehigh 不变的情况下,使这些灯第一次亮起的顺序随机。

解决方案:

我们可以使用一个数组来存储这些变量,并使用随机数生成器随机选择一个变量进行操作。

以下是实现方法:

PROGRAM PLC_PRG
VAR
    blk: Blink :=(Timelow:=T#8S, timehigh:=T#10000MS);
    b9k: Blink :=(Timelow:=T#8S, timehigh:=T#9000MS);
    b2k: Blink :=(Timelow:=T#8S, timehigh:=T#8000MS);
    b3k: Blink :=(Timelow:=T#8S, timehigh:=T#7000MS);
    b4k: Blink :=(Timelow:=T#8S, timehigh:=T#6000MS);
    b5k: Blink :=(Timelow:=T#8S, timehigh:=T#5000MS);
    b6k: Blink :=(Timelow:=T#8S, timehigh:=T#4000MS);
    b7k: Blink :=(Timelow:=T#8S, timehigh:=T#3000MS);
    
    arr: ARRAY[1..8] OF Blink := [blk, b9k, b2k, b3k, b4k, b5k, b6k, b7k];
    rand: RAND;
    index: INT := 1;
END_VAR

// 在主循环中随机选择一个变量进行操作
WHILE TRUE DO
    rand := RAND(1, 8); // 生成1~8之间的随机数
    arr[rand].AT(1); // 选择随机数索引对应的变量进行操作
    index := (index MOD 8) + 1; // 更新索引
    arr[index].AT(0); // 关闭上一个变量的灯
END_WHILE

END_PROGRAM

代码解释:

  1. 我们创建了一个名为 arr 的数组,其中包含所有闪烁灯变量。
  2. rand 变量用于生成随机数。
  3. index 变量用于跟踪当前亮起的灯。
  4. 在主循环中,我们首先生成一个 1 到 8 之间的随机数。
  5. 然后,我们使用随机数作为索引访问数组 arr,并调用对应变量的 AT(1) 方法使其亮起。
  6. 接着,我们更新 index 变量,使其指向下一个灯。
  7. 最后,我们调用 arr[index].AT(0) 方法关闭上一个亮起的灯。

通过这种方式,我们可以实现在每次循环中随机选择一个灯进行点亮,从而实现随机的亮灯顺序。


原文地址: https://www.cveoy.top/t/topic/jkFm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录