Arrays 节点红色全局数组变量-Get/Set似乎不起作用

Arrays 节点红色全局数组变量-Get/Set似乎不起作用,arrays,variables,global,node-red,Arrays,Variables,Global,Node Red,在节点红色中工作。我可以跨节点和流使用常规全局变量,没有问题。但是,您希望使用全局数组变量 方法A所需功能 我一次读取16个数据点(type=double),并希望它们成为索引0-15,然后下面的节点将更新索引16-31;然后在最后两个节点中选择32-45和46-64 但是,节点Red不允许从索引#16开始的第二个节点更新数组。我得到“TypeError:无法读取未定义属性'indexOf'的”错误 代替方法A,我可以有四个不同的16索引全局数组。然而,访问它们会产生不稳定的结果。尝试访问索引[

在节点红色中工作。我可以跨节点和流使用常规全局变量,没有问题。但是,您希望使用全局数组变量

方法A所需功能 我一次读取16个数据点(type=double),并希望它们成为索引0-15,然后下面的节点将更新索引16-31;然后在最后两个节点中选择32-45和46-64

但是,节点Red不允许从索引#16开始的第二个节点更新数组。我得到“TypeError:无法读取未定义属性'indexOf'的”错误

代替方法A,我可以有四个不同的16索引全局数组。然而,访问它们会产生不稳定的结果。尝试访问索引[n]返回来自其他索引的值,即
global.get(“变量”[0])
返回
variable[10]
global.get(“变量”[1])
返回
variable[27]
中的值

这说明了以下问题:

以下是我的示例流:

[{"id":"ee1694d.7df4768","type":"i2c in","z":"d556390c.391838","name":"Read Camera","address":"105","command":"128","count":"32","x":240,"y":1480,"wires":[["9e27949c.512c28"]]},{"id":"d9eaa7a4.7f0ed8","type":"inject","z":"d556390c.391838","name":"ON","topic":"1","payload":"1","payloadType":"str","repeat":"","crontab":"","once":false,"x":70,"y":1480,"wires":[["ee1694d.7df4768"]]},{"id":"6dc0727a.4cf53c","type":"i2c in","z":"d556390c.391838","name":"Read Camera","address":"105","command":"160","count":"32","x":240,"y":1520,"wires":[["a7ac4b94.44ce58"]]},{"id":"d6d80973.784148","type":"i2c in","z":"d556390c.391838","name":"Read Camera","address":"105","command":"192","count":"32","x":240,"y":1560,"wires":[["b90d910d.8e743","ebeeb439.54cf18"]]},{"id":"b90d910d.8e743","type":"i2c in","z":"d556390c.391838","name":"Read Camera","address":"105","command":"224","count":"32","x":240,"y":1600,"wires":[["2f7b8dde.7a9902"]]},{"id":"6b1509e2.8bd4d8","type":"debug","z":"d556390c.391838","name":"Row 3,4","active":true,"console":"false","complete":"payload","x":1020,"y":1520,"wires":[]},{"id":"a828b6d2.40da08","type":"delay","z":"d556390c.391838","name":"","pauseType":"delay","timeout":"50","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":98,"y":1656,"wires":[["d6d80973.784148"]]},{"id":"ad0a1424.eaae08","type":"function","z":"d556390c.391838","name":"Save Global variables for Temperature","func":"global.set(\"RangeTemperaturesA\", 0);\n\nfor(i=0; i<16; i++){\n global.set(\"RangeTemperaturesA\"[i], msg.payload[i]);   \n}\n\nreturn msg;","outputs":1,"noerr":0,"x":750,"y":1480,"wires":[["6b810d97.0beee4","6dc0727a.4cf53c"]]},{"id":"d386a34f.525d2","type":"function","z":"d556390c.391838","name":"Save Global variables for Temperature","func":"for(i=0; i<16; i++){\n    global.set(\"RangeTemperatureB\"[i], msg.payload[i]);   \n}\n\nreturn msg;","outputs":1,"noerr":0,"x":750,"y":1520,"wires":[["6b1509e2.8bd4d8"]]},{"id":"11c935c.be330ca","type":"function","z":"d556390c.391838","name":"Save Global variables for Temperature","func":"for(i=0; i<16; i++){\n global.set(\"RangeTemperatureC\"[i], msg.payload[i]);   \n}\n\nreturn msg;","outputs":1,"noerr":0,"x":750,"y":1560,"wires":[[]]},{"id":"294185a.d5fe67a","type":"function","z":"d556390c.391838","name":"Save Global variables for Temperature","func":"for(i=0; i<16; i++){\n global.set(\"RangeTemperatureD\"[i], msg.payload[i]);   \n}\n\nreturn msg;","outputs":1,"noerr":0,"x":750,"y":1600,"wires":[[]]},{"id":"3ffa9e84.cba002","type":"function","z":"d556390c.391838","name":"Find Max Temperature","func":"//n = Math.max(... global.get(\"RangeTemperature\"));\n\nreturn {payload: global.get(\"RangeTemperature\")};","outputs":1,"noerr":0,"x":900,"y":1660,"wires":[[]]},{"id":"9e27949c.512c28","type":"function","z":"d556390c.391838","name":"Get Temps full row","func":"var gridEye = [];\nvar loop=0;\n\nfor(n=0; n<32; n+=2){\n    gridEye[loop] = ((msg.payload[n+1]<<8) | msg.payload[n]) * 0.25;\n    //convert to F\n    gridEye[loop] = ((5.0/3.0) * gridEye[loop] + 32.0).toFixed(2);\n    //add right bitshit to reduce noise\n    loop++;\n}\nmsg.payload=gridEye;\n\nreturn msg;","outputs":1,"noerr":0,"x":490,"y":1480,"wires":[["ad0a1424.eaae08"]]},{"id":"a7ac4b94.44ce58","type":"function","z":"d556390c.391838","name":"Get Temps full row","func":"var gridEye = []; //16-byte array with temperature readings\nvar loop=0;\n\nfor(n=0; n<32; n+=2){\n    // Get raw values - bitshift left 8 bits then bitwise OR.\n    // then take new value and multiply by 0.25 since it reads in 1/4 degree C\n    gridEye[loop] = ((msg.payload[n+1]<<8) | msg.payload[n]) * 0.25;\n    //convert to F\n    gridEye[loop] = ((5.0/3.0) * gridEye[loop] + 32.0).toFixed(2);\n    loop++;\n}\n\nmsg.payload=gridEye;\n\nreturn msg;","outputs":1,"noerr":0,"x":490,"y":1520,"wires":[["d386a34f.525d2"]]},{"id":"ebeeb439.54cf18","type":"function","z":"d556390c.391838","name":"Get Temps full row","func":"var gridEye = [];\nvar loop=0;\n/*\nvar pixel = 4;\nvar tmp = ((msg.payload[pixel*2 + 1]<<8) | msg.payload[pixel*2])*0.25; \n//gridEye reads in .25 degree C\ntmp = ((5/3 * tmp) + 32.0); //convert to F\n*/\n\nfor(n=0; n<32; n+=2){\n    gridEye[loop] = ((msg.payload[n+1]<<8) | msg.payload[n]) * 0.25;\n    //convert to F\n    gridEye[loop] = ((5.0/3.0) * gridEye[loop] + 32.0).toFixed(2);\n    //add right bitshit to reduce noise\n    loop++;\n}\n/*\nfor(n=0; n<8; n++){\n    gridEye[n]= ((n/35536 * 60 ) + 20);\n    //convert to F\n    //gridEye[n] = (((5.0/3.0) * gridEye[n]) + 32).toFixed(2);\n}\n*/\nmsg.payload=gridEye;\n\nreturn msg;","outputs":1,"noerr":0,"x":490,"y":1560,"wires":[["11c935c.be330ca"]]},{"id":"2f7b8dde.7a9902","type":"function","z":"d556390c.391838","name":"Get Temps full row","func":"var gridEye = [];\nvar loop=0;\n/*\nvar pixel = 4;\nvar tmp = ((msg.payload[pixel*2 + 1]<<8) | msg.payload[pixel*2])*0.25; \n//gridEye reads in .25 degree C\ntmp = ((5/3 * tmp) + 32.0); //convert to F\n*/\n\nfor(n=0; n<32; n+=2){\n    gridEye[loop] = ((msg.payload[n+1]<<8) | msg.payload[n]) * 0.25;\n    //convert to F\n    gridEye[loop] = ((5.0/3.0) * gridEye[loop] + 32.0).toFixed(2);\n    //add right bitshit to reduce noise\n    loop++;\n}\n/*\nfor(n=0; n<8; n++){\n    gridEye[n]= ((n/35536 * 60 ) + 20);\n    //convert to F\n    //gridEye[n] = (((5.0/3.0) * gridEye[n]) + 32).toFixed(2);\n}\n*/\nmsg.payload=gridEye;\n\nreturn msg;","outputs":1,"noerr":0,"x":490,"y":1600,"wires":[["294185a.d5fe67a"]]},{"id":"a0de3101.0c307","type":"function","z":"d556390c.391838","name":"Read from A","func":"var p = global.get(\"RangeTemperaturesA\"[1]);\nmsg.payload = p;\nreturn msg;","outputs":1,"noerr":0,"x":510,"y":1780,"wires":[["dbb0935d.742f7"]]},{"id":"dbb0935d.742f7","type":"debug","z":"d556390c.391838","name":"test A","active":true,"console":"false","complete":"payload","x":670,"y":1860,"wires":[]},{"id":"f6c50374.59f","type":"function","z":"d556390c.391838","name":"Read from B","func":"var n = global.get(\"RangeTemperatureB\"[0]);\nreturn {payload: n};","outputs":1,"noerr":0,"x":770,"y":1780,"wires":[["3e8947bc.be49b8"]]},{"id":"6b810d97.0beee4","type":"debug","z":"d556390c.391838","name":"Row 1,2","active":true,"console":"false","complete":"payload","x":1020,"y":1480,"wires":[]},{"id":"3e8947bc.be49b8","type":"debug","z":"d556390c.391838","name":"test b","active":true,"console":"false","complete":"payload","x":910,"y":1860,"wires":[]},{"id":"23da3f7f.1c4f8","type":"inject","z":"d556390c.391838","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":340,"y":1780,"wires":[["a0de3101.0c307"]]},{"id":"2a146fa7.577fc","type":"inject","z":"d556390c.391838","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":580,"y":1720,"wires":[["f6c50374.59f"]]}]
示例代码:

for(i=0; i<16; i++){
 global.set("RangeTemperaturesA"[i], i); 
 node.warn("Value: " + i);
}
return msg;
for(n=0; n<16; n++){
node.warn("Value: " + global.get("RangeTemperaturesA")[n] + "; Count: " + n);
}
return msg;
示例代码:

for(i=0; i<16; i++){
 global.set("RangeTemperaturesA"[i], i); 
 node.warn("Value: " + i);
}
return msg;
for(n=0; n<16; n++){
node.warn("Value: " + global.get("RangeTemperaturesA")[n] + "; Count: " + n);
}
return msg;

for(n=0;n问题是由于您试图处理单个数组项的方式造成的

使用代码:
global.get(“variable”[0])
,您要求它使用字符串
“variable”
的第0个元素作为传递给
get
函数的参数。换句话说,它相当于:
global.get(“v”)
类似地,
global.get(“variable”[2])
将等同于
global.get(“r”)

您应该在引号内移动数组索引:

global.get("variable[0]");
或者访问
get
函数结果的第0个元素:

global.get("variable")[0];
您尝试如何使用
set
功能也是如此

更新以反映对问题的编辑

使用
global.set()
的尝试均不正确:

  • global.set(“RangeTemperaturesA”,i)[i]
    -这里您将全局属性
    RangeTemperaturesA
    设置为
    i
    的值。函数
    set
    不返回任何内容,因此尝试将其视为数组是错误的

  • < L> >代码> Global .SET(“RangeTestAutoReS[i]”,i);这是三中最接近的,但是,您正在设置字符串文字>代码> RangeTimeAutuRuS[i] /COD> > JavaScript不知道您希望在该字符串中间的<代码> i>代码>是本地变量的值<代码> i>代码>

  • global.set(“RangeTemperaturesA”[i],i);
    -否。这与您在原始问题中遇到的错误相同。
    “RangeTemperaturesA”[i]
    将求值为字符串
    RangeTemperaturesA
    的第i个字符

要正确执行此操作,您需要使用
“RangeTimperaturesa[“+i+”]”
作为键:

global.set("RangeTemperaturesA["+i+"]", i);
i
为0时,将生成键
RangeTemperaturesA[0]

这同样适用于
global.get

var myValue = global.get("RangeTemperaturesA["+i+"]");
所有这些示例都假设您已经将
范围温度a
设置为数组:

global.set("RangeTemperaturesA",[]);

问题是由于您试图处理单个数组项的方式造成的

使用代码:
global.get(“variable”[0])
,您要求它使用字符串
“variable”
的第0个元素作为传递给
get
函数的参数。换句话说,它相当于:
global.get(“v”)
类似地,
global.get(“variable”[2])
将等同于
global.get(“r”)

您应该在引号内移动数组索引:

global.get("variable[0]");
或者访问
get
函数结果的第0个元素:

global.get("variable")[0];
您尝试如何使用
set
功能也是如此

更新以反映对问题的编辑

使用
global.set()
的尝试均不正确:

  • global.set(“RangeTemperaturesA”,i)[i]
    -这里您将全局属性
    RangeTemperaturesA
    设置为
    i
    的值。函数
    set
    不返回任何内容,因此尝试将其视为数组是错误的

  • < L> >代码> Global .SET(“RangeTestAutoReS[i]”,i);这是三中最接近的,但是,您正在设置字符串文字>代码> RangeTimeAutuRuS[i] /COD> > JavaScript不知道您希望在该字符串中间的<代码> i>代码>是本地变量的值<代码> i>代码>

  • global.set(“RangeTemperaturesA”[i],i);
    -否。这与您在原始问题中遇到的错误相同。
    “RangeTemperaturesA”[i]
    将求值为字符串
    RangeTemperaturesA
    的第i个字符

要正确执行此操作,您需要使用
“RangeTimperaturesa[“+i+”]”
作为键:

global.set("RangeTemperaturesA["+i+"]", i);
i
为0时,将生成键
RangeTemperaturesA[0]

这同样适用于
global.get

var myValue = global.get("RangeTemperaturesA["+i+"]");
所有这些示例都假设您已经将
范围温度a
设置为数组:

global.set("RangeTemperaturesA",[]);

在按照您的建议进行了快速测试之后,我在上面添加了一个编辑。啊-我现在明白了。索引必须出现在引号之外。另一个缺少的键是您提到的最后一部分-第一次使用global.set初始化数组(“RangeTemperaturesA”,[]);在按照您的建议进行快速测试后,我在上面添加了一个编辑。啊-我现在明白了。索引必须出现在引号之外。另一个缺少的键是您提到的最后一部分-第一次使用global.set初始化数组(“RangeTemperaturesA”,[]);