PLC 编程:随机控制多个闪烁灯的亮灯顺序
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
目标: 在 Timelow 和 timehigh 不变的情况下,使这些灯第一次亮起的顺序随机。
解决方案:
我们可以使用一个数组来存储这些变量,并使用随机数生成器随机选择一个变量进行操作。
以下是实现方法:
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
代码解释:
- 我们创建了一个名为
arr的数组,其中包含所有闪烁灯变量。 rand变量用于生成随机数。index变量用于跟踪当前亮起的灯。- 在主循环中,我们首先生成一个 1 到 8 之间的随机数。
- 然后,我们使用随机数作为索引访问数组
arr,并调用对应变量的AT(1)方法使其亮起。 - 接着,我们更新
index变量,使其指向下一个灯。 - 最后,我们调用
arr[index].AT(0)方法关闭上一个亮起的灯。
通过这种方式,我们可以实现在每次循环中随机选择一个灯进行点亮,从而实现随机的亮灯顺序。
原文地址: https://www.cveoy.top/t/topic/jkFm 著作权归作者所有。请勿转载和采集!