prisme-flow
Version:
prisme platform flow engine
34 lines (31 loc) • 1.01 kB
JavaScript
/**
* Created by prisme.io on 09/06/2017.
*/
module.exports = function (RED) {
'use strict'
var Controller = require('node-pid-controller')
function PIDcontrolNode (n) {
RED.nodes.createNode(this, n)
this.target = n.target
this.kp = n.kp
this.ki = n.ki
this.kd = n.kd
var node = this
node.ctr = new Controller(node.kp, node.ki, node.kd)
node.ctr.setTarget(node.target)
this.status({fill: 'blue', shape: 'dot', text: 'set point:' + node.target})
var tgt = node.target
this.on('input', function (msg) {
if (msg.hasOwnProperty('setpoint')) {
tgt = Number(msg.setpoint)
node.ctr.setTarget(tgt)
this.status({fill: 'blue', shape: 'dot', text: 'set point:' + tgt})
} else if (!isNaN(msg.payload)) {
msg.payload = node.ctr.update(Number(msg.payload))
msg.topic = 'pid'
node.send(msg)
} else { node.warn('Non numeric input') }
})
}
RED.nodes.registerType('pid control', PIDcontrolNode)
}