我在TwinCAT3中傻瓜尝试并熟悉ST。我现在有一个简单的问题。
说我有8个LED。每个分配给输出1-8。现在我希望能够发送一个如下所示的字节:10101010。让我们调用该变量来保存该字节setOUTPUTS。 我是否会按照以下方式将setOUTPUTS初始化为
bsetOUTPUTS := BYTE;
在初始化该变量后,我如何循环将每个LED设置为相应的位?
例如:setOUTPUTS = 10001000,我将如何循环通过setOUTPUTS变量将LED 8和LED 4设置为ON,而将其他LED设置为OFF。
如果这不可能,使用数组的替代方法是什么?
谢谢!
答案 0 :(得分:1)
您可以将setOutputs变量的每个位与通过setOutputs长度移位的位进行比较:
FOR i := 0 TO 7 DO
out[i] := setOutputs AND SHL(1, i);
END_FOR;
答案 1 :(得分:0)
要初始化一个字节
setOUTPUTS : BYTE:=86; (* equiavlent to 01010101 *)
您可以根据位设置输出,如下所示
out1 := setOUTPUTS.0; (* bit 0 of byte *)
out2:=setOUTPUTS.1; (* bit 1 of byte *)
你可能认为你可以做一些事情,比如遍历字节中的位
FOR i:=0 TO 8 BY 1 DO
(* out is an array of outputs *)
out[i] := setOUTPUTS.i;
END_FOR
但遗憾的是你无法做到这一点。据我所知,单独设置它们是实现这一目标的唯一方法。
答案 2 :(得分:0)