我对结构化文本非常陌生,所以请原谅我的简单问题。
我正在使用OpenPLC创建这个简单的程序。我一直跟随从下面的链接,创建流动的灯光,简单的程序与结构化的文本。在这段视频中,他们使用了5 and,并用case语句对其进行控制。但是,我的问题是,如果我的程序需要打开100盏灯,我应该如何更改代码?我应该用循环吗?多么?
发布于 2022-09-26 18:22:30
是的,您可以使用for loops等使程序更“动态”。
不幸的是,大多数PLC不允许您动态访问他们的数字输出。这意味着,在最后,您必须编写代码,将数组的值(您将循环通过)转换为数字输出。
发布于 2022-09-27 03:59:08
有几种方法可以做到这一点。首先,让我向您展示如何创造追逐光最多16。
PROGRAM PLC_PRG
VAR
iNumOfLights : INT := 6;
fbCounter : CTU := ;
fbTicker : BLINK := (ENABLE := TRUE, TIMELOW := T#100MS, TIMEHIGH := T#1S);
wOut: WORD;
END_VAR
fbTicker();
fbCounter(CU := fbTicker.OUT, RESET := fbCounter.Q, PV := iNumOfLights);
wOut := SHL(2#0000_0000_0000_0001, fbCounter.CV);
A := wOut.0;
B := wOut.1;
C := wOut.2;
D := wOut.3;
E := wOut.4;
F := wOut.5;
G := wOut.6;
END_PROGRAM或者,如果您知道输出地址,则可以直接对输出进行处理。
PROGRAM PLC_PRG
VAR
iNumOfLights : INT := 6;
fbCounter : CTU := ;
fbTicker : BLINK := (ENABLE := TRUE, TIMELOW := T#100MS, TIMEHIGH := T#1S);
wOut AT %QB0.1: WORD;
END_VAR
fbTicker();
fbCounter(CU := fbTicker.OUT, RESET := fbCounter.Q, PV := iNumOfLights);
wOut := SHL(2#0000_0000_0000_0001, fbCounter.CV);
END_PROGRAM你也可以通过类似的方式改变追逐灯的类型。
IF fbCounter.CV = 0 THEN
wOut := 0;
END_IF;
wOut := wOut OR SHL(2#0000_0000_0000_0001, fbCounter.CV);现在这背后是什么。SHl运算符将1移动到设置数字的左边。例如,SHL(2#0000_0000_0000_0001, 3)将导致2#0000_0000_0000_1000。因此,我们将其分配给wOut,然后通过wOut.[n]访问各个位。
https://stackoverflow.com/questions/73855131
复制相似问题