我需要在Node中使用Modbus模塊,並且我發現了一個輕量級的解決方案,可以很好地工作。其通過TooTallNate爲其節點提供Modbus-Stack。 (https://github.com/TooTallNate/node-modbus-stack)節點Modbus堆棧ECONNREFUSED
我實現了它,它似乎工作。使用我的瀏覽器,我打電話給我的節點服務器,然後使用Wireshark我看到Modbus數據包從我的節點服務器(modbus master)轉到另一個設備(modbus slave),然後我看到另一個Modbus數據包從設備轉移到節點服務器。
但服務器永遠無法將數據返回到我的瀏覽器。發現它的Node服務器正在偵聽並準備好處理'響應'事件,但得到'錯誤'事件。當我處理的 '錯誤' 事件中,我看到了以下(字符串化):
{ 「代碼」: 「ECONNREFUSED」, 「錯誤號」: 「ECONNREFUSED」, 「系統調用」: 「連接」}
節點代碼:
var http = require("http");
var querystring = require("querystring");
var url = require("url");
var fs = require("fs");
var RIR = require("modbus-stack").FUNCTION_CODES.READ_HOLDING_REGISTERS;
http.createServer(onRequest).listen(8080);
function onRequest(request, response) {
var query = url.parse(request.url).query;
var path = url.parse(request.url).pathname;
var wants;
if(path == '/mbust'){
mbReturn(function(data){
response.writeHead(200,{"content-Type":"text"});
response.end(data);
});
}
else{
wants = 'unknown request'+" "+path+" "+query;
response.end(wants);
}
}
function mbReturn(pasd){
var client = require("client").createClient(502,'192.168.1.199');
var req = client.request(RIR,2000,1);
req.on('response',function(registers){
pasd(registers);
client.end();
});
req.on('error',function(e){
pasd(JSON.stringify(e));
client.end();
});
}
這就是我卡住的地方。任何關於如何調試的想法/提示都會有幫助。對我來說,這是一種陌生的領域,所以任何事情都會有所幫助。
TIA!
尼科
更新:我叫e.stack看到錯誤調用的血統,這就是我的了:
Error: connect ECONNREFUSED
at errnoException (net.js:776:11)
at Object.afterConnect [as oncomplete] (net.js:767:19)