2017-02-27 69 views
0

我一直試圖做的,因爲天一個簡單的數字比較在我的功能節點,但我真的沒有,爲什麼它不工作的想法。我有一個接受兩個值的函數節點。我甚至將它從對象轉換爲數字,但仍然無法進行比較。請在這裏找到完整的流程:如何比較節點紅色中功能節點中的數值?

[{"id":"39421a3d.5cda36","type":"function","z":"251d0ac6.958a36","name":"getL1MagneticCount","func":"msg.payload = {\"getCarCount1\":msg.payload};\nreturn msg;","outputs":1,"noerr":0,"x":586.6666259765625,"y":606.6666259765625,"wires":[["31136d74.228fb2"]]},{"id":"a171070a.1ba198","type":"function","z":"251d0ac6.958a36","name":"getL2MagneticCount","func":"msg.payload = {\"getCarCount2\":msg.payload.Car};\nreturn msg;","outputs":1,"noerr":0,"x":586.6666259765625,"y":719.9999732971191,"wires":[["31136d74.228fb2"]]},{"id":"31136d74.228fb2","type":"function","z":"251d0ac6.958a36","name":"comparison","func":"var count1 = Number(msg.payload.getCarCount1);\nvar count2 = Number(msg.payload.getCarCount2);\n\nif(count1 >= count2){\n console.log(\"In\");\n msg.payload = msg.payload.getCarCount1;\n return [msg,null];\n \n} else {\n console.log(\"Out\");\n msg.payload = msg.payload.getCarCount2;\n return [null,msg];\n \n}","outputs":"2","noerr":0,"x":824.4443950653076,"y":663.3333148956299,"wires":[["57c8e7b7.c948e8"],["10b4a39f.16338c"]]},{"id":"57c8e7b7.c948e8","type":"debug","z":"251d0ac6.958a36","name":"","active":true,"console":"false","complete":"payload","x":1025.5556182861328,"y":626.6666140556335,"wires":[]},{"id":"10b4a39f.16338c","type":"debug","z":"251d0ac6.958a36","name":"","active":true,"console":"false","complete":"false","x":1028.8889236450195,"y":709.9999084472656,"wires":[]},{"id":"1a6938ca.0d2bf7","type":"inject","z":"251d0ac6.958a36","name":"","topic":"","payload":"3","payloadType":"str","repeat":"","crontab":"","once":false,"x":256.6666679382324,"y":605.555606842041,"wires":[["39421a3d.5cda36"]]},{"id":"d23e60e5.adb83","type":"inject","z":"251d0ac6.958a36","name":"","topic":"","payload":"0","payloadType":"str","repeat":"","crontab":"","once":false,"x":254.66665649414062,"y":719.5555419921875,"wires":[["a171070a.1ba198"]]}] 

請告訴我我的錯誤在哪裏。非常感謝你。

回答

0

的問題是,每個輸入消息被作爲功能節點獨立事件來處理,這樣你就永遠只能有1個值的每個消息到達時間進行比較。

您需要做的是利用context來存儲每個消息之間的值。類似這樣的:

//get stored values if present 
var count1 = context.get("count1"); 
var count2 = context.get("count2"); 

if (msg.payload.hasOwnProperty("getCarCount1")) { 
    count1 = msg.payload.getCarCount1; 
    context.set("count1", count1); 
} 

if (msg.payload.hasOwnProperty("getCarCount2")) { 
    count2 = msg.payload.getCarCount2; 
    context.set("count2", count2); 
} 

if (count1 != undefined && count2 != undefined) { 
    if(count1 >= count2){ 
    console.log("In"); 
    msg.payload = count1; 
    return [msg,null]; 
    } else { 
    console.log("Out"); 
    msg.payload = count2; 
    return [null,msg]; 
    } 
} 
+0

感謝您的及時回覆。實際上,我的輸入都是從串口連續讀取數據。爲了解決這個問題,我用時間戳代替了它。我的串口飼料在其進入getMagneticCount功能每隔20毫秒這就是數據。 我應該上傳整個流程嗎? –

+0

不要緊數據的速度有多快進來,主要是同 – hardillb

+0

啊ok了!我現在明白了背後的邏輯。代碼的工作非常感謝! –