首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结构化文本中的流动灯

结构化文本中的流动灯
EN

Stack Overflow用户
提问于 2022-09-26 13:47:21
回答 2查看 58关注 0票数 0

我对结构化文本非常陌生,所以请原谅我的简单问题。

我正在使用OpenPLC创建这个简单的程序。我一直跟随从下面的链接,创建流动的灯光,简单的程序与结构化的文本。在这段视频中,他们使用了5 and,并用case语句对其进行控制。但是,我的问题是,如果我的程序需要打开100盏灯,我应该如何更改代码?我应该用循环吗?多么?

https://www.youtube.com/watch?v=PXnaULHpxC8&t=25s

EN

回答 2

Stack Overflow用户

发布于 2022-09-26 18:22:30

是的,您可以使用for loops等使程序更“动态”。

不幸的是,大多数PLC不允许您动态访问他们的数字输出。这意味着,在最后,您必须编写代码,将数组的值(您将循环通过)转换为数字输出。

票数 0
EN

Stack Overflow用户

发布于 2022-09-27 03:59:08

有几种方法可以做到这一点。首先,让我向您展示如何创造追逐光最多16。

代码语言:javascript
复制
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

或者,如果您知道输出地址,则可以直接对输出进行处理。

代码语言:javascript
复制
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

你也可以通过类似的方式改变追逐灯的类型。

代码语言:javascript
复制
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]访问各个位。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73855131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档