Skip to content

Instantly share code, notes, and snippets.

@checor
Created June 12, 2017 18:07
Show Gist options
  • Save checor/6217b145a6601f6aff81da1cd6df092d to your computer and use it in GitHub Desktop.
Save checor/6217b145a6601f6aff81da1cd6df092d to your computer and use it in GitHub Desktop.
Modbus simulator
var mode = "Stop"
var encoder1 = 0
var encoder2 = 0
var step = 0
var down = true
var interval_id = null
function main(){
mode = "Stop"
encoder1 = 0
encoder2 = 0
interval_id = setInterval(bajada, 4000) //Bajar cada 4 segundos
}
function bajada(){
if(mode === "Stop"){
down = false
encoder1 += 1
mode = "Down"
console.log("Down")
console.log(encoder1, encoder2)
}
else if(mode === "Down"){
if(encoder1 === 10 && encoder2 === 10){
down = true
mode = "Up"
console.log("Got all the way down")
clearInterval(interval_id)
subida()
return
}
if(encoder1 < 10) encoder1++
if(encoder2 < 10) encoder2++
console.log(encoder1, encoder2)
}
}
function subida(){
setTimeout(main, 10000) // Esperar 10 segundos para subir
}
main()
var ModbusRTU = require("modbus-serial");
var vector = {
getInputRegister: function(addr, unitID) {
return addr;
},
getHoldingRegister: function(addr, unitID) {
if(addr === 1000)
return encoder1 * 1024
else if(addr === 1004)
return encoder2 * 1024
else
return addr + 8000;
},
getCoil: function(addr, unitID) {
if(addr == 0)
return down
else
return (addr % 2) === 0;
},
setRegister: function(addr, value, unitID) {
console.log("set register", addr, value, unitID); return;
},
setCoil: function(addr, value, unitID) {
console.log("set coil", addr, value, unitID); return;
}
};
// set the server to answer for modbus requests
console.log("ModbusTCP listening on modbus://0.0.0.0:8502");
var serverTCP = new ModbusRTU.ServerTCP(vector, { host: "0.0.0.0", port: 8502, debug: true, unitID: 1 });
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment