csphhing 发表于 2022-5-27 10:50:10

求教!NodeRED里的Loop节点如何控制启动停止?

最近研究一个设备需要给它逐条循环 发送代码,逐条发送已经用split 节点实现了。然后后面想用 loop节点(node-red-contrib-loop) 来时代码循环发送,没想到出发循环之后无法停止,不知道哪里错了,求高人指点,真心拜谢!!本人不懂代码,研究了好久都没解决,特来求教。

前面的部分去掉了,只循环一个字符消息。

不知道这样连接是否正确,我试过其他连接方式都没有循环输出。


loop节点也没有设置,就是默认的。


按照说明文档,当有 break 命令注入时 就会停止,我试过好几种写法仍然无法停止。



注入的break 也进入了循环



[{"id":"24b722dec35294cf","type":"tab","label":"流程 1","disabled":false,"info":"","env":[]},{"id":"0723c60fa376e15c","type":"loop","z":"24b722dec35294cf","name":"","kind":"fcnt","count":"","initial":"1","step":"1","condition":"","conditionType":"js","when":"before","enumeration":"enum","enumerationType":"msg","limit":"","loopPayload":"loop-index","finalPayload":"final-count","x":630,"y":320,"wires":[["1ae11afc1d1b6946"],[]]},{"id":"7836154a88986f0b","type":"delay","z":"24b722dec35294cf","name":"","pauseType":"rate","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":true,"outputs":1,"x":630,"y":220,"wires":[["0723c60fa376e15c"]]},{"id":"1ae11afc1d1b6946","type":"debug","z":"24b722dec35294cf","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":950,"y":320,"wires":[]},{"id":"b5251f09dbaabbbc","type":"inject","z":"24b722dec35294cf","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"break","payloadType":"str","x":350,"y":340,"wires":[["0723c60fa376e15c"]]},{"id":"661c461a4312b893","type":"inject","z":"24b722dec35294cf","name":"","props":[{"p":"command","v":"break","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":350,"y":400,"wires":[["0723c60fa376e15c"]]},{"id":"fad02c4e294cd213","type":"inject","z":"24b722dec35294cf","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"AAAAAAABBBBBBB","payloadType":"str","x":340,"y":240,"wires":[["0723c60fa376e15c"]]}]

请教如何控制loop,或者有没有其他可以控制 开始、暂停的循环方式?

neroxps 发表于 2022-5-27 13:19:22

循环用 link 就完了。

csphhing 发表于 2022-5-27 18:06:43

neroxps 发表于 2022-5-27 13:19
循环用 link 就完了。

请教 link 如何控制开始、停止?

neroxps 发表于 2022-5-28 16:59:38

csphhing 发表于 2022-5-27 18:06
请教 link 如何控制开始、停止?

自己写 switch 判断咯。

zhanfu86 发表于 2022-12-12 17:30:20

link不会用。。 还是用loop 吧,判断登出是按 msg.command = "break"; 来控制的

jjcs 发表于 2022-12-12 21:44:43

loop的循环在第二个输出,上面是输出最后循环结束的状态

jjcs 发表于 2022-12-12 21:45:55

loop节点作者详细介绍了使用方法,又关上有视频,

yjl 发表于 2024-4-18 10:08:09

本帖最后由 yjl 于 2024-4-18 16:44 编辑

时隔两年我才开始学习
不得不说,你是个真大佬啊,能以这种奇特的方式完成死循环,我真是想不到!!loop循环第一个输出是循环执行完的输出(相当于循环结束后的操作),第二个输出是循环过程的输出(相当于循环本身要做的事情)
拿for循环举个例子: for i in “AAABBB” :print(i) ,print("end")
loop的第一个输出相当于要执行print("end") ,第二输出相当于要执行 print(i)
你直接把第一个输出延时1秒后又给了loop作为输入,那就相当于每循环一次后又给自己一个新的循环,这就形成了死循环;正确的做法是把第二个输出处理后再给loop作为输入。
另外,关于你说的文档中的break和restart指令,按照文档应该是判断msg的command属性,而不是判断payload属性,所以你在inject中对payload注入break是没有用的
我也试了,给msg添加了command属性并赋值字符串break,并不能终止循环,我也不知道为啥

页: [1]
查看完整版本: 求教!NodeRED里的Loop节点如何控制启动停止?