我需要在Node中使用Modbus模块,我发现了一个非常轻巧的解决方案。它的Modbus-Stack for TooTallNate。 (https://github.com/TooTallNate/node-modbus-stack)
我实现了它似乎工作。使用我的浏览器我打电话给我的节点服务器,然后使用Wireshark我看到Modbus数据包从我的节点服务器(modbus主机)转到另一个设备(modbus从机)然后我看到另一个Modbus数据包从设备到节点服务器。
但是服务器永远无法将数据返回给我的浏览器。事实证明它的节点服务器正在监听并准备处理“响应”事件但是正在收到“错误”事件。当我处理'错误'事件时,我看到了以下(字符串化):
{ “代码”: “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)
答案 0 :(得分:0)
事实证明,我只需要确保没有其他设备试图成为modbus设备的主人; modbus从站只能有一个主站。
此外,每当对服务器进行HTTP调用时,我都必须将创建客户端代码从调用的函数中移出,以便Node创建一个客户端作为modbus slave,并依赖于所有后续modbus事务。