0

我需要一个在 Node 中使用的 Modbus 模块,我发现了一个可以完美运行的轻量级解决方案。它的 Modbus-Stack for Node by TooTallNate。(https://github.com/TooTallNate/node-modbus-stack

我实现了它,它似乎工作。使用我的浏览器调用我的节点服务器,然后使用 Wireshark 我看到 Modbus 数据包从我的节点服务器(modbus 主站)传输到另一个设备(modbus 从站),然后我看到另一个 Modbus 数据包从设备传输到节点服务器。

但是服务器永远无法将数据返回到我的浏览器。原来它的节点服务器正在侦听并准备处理“响应”事件,但收到了“错误”事件。当我处理“错误”事件时,我看到以下内容(字符串化):

{"code":"ECONNREFUSED","errno":"ECONNREFUSED","syscall":"connect"}

节点代码:

    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();
        });
    }

这就是我卡住的地方。关于如何调试它的任何想法/提示都会有帮助。这对我来说是一个陌生的领域,所以真的任何事情都会有所帮助。

蒂亚!

尼可

更新:我调用 e.stack 来查看错误调用的沿袭,这就是我得到的:

    Error: connect ECONNREFUSED
        at errnoException (net.js:776:11)
        at Object.afterConnect [as oncomplete] (net.js:767:19)
4

1 回答 1

0

事实证明,我只需要确保没有其他设备试图成为 modbus 设备的主设备;modbus 从站只能有一个主站。

此外,我必须将创建客户端代码移出每当对服务器进行 HTTP 调用时调用的函数,以便 Node 将创建一个客户端作为 modbus 从站,并依赖该客户端进行所有后续 modbus 事务。

于 2013-10-03T00:06:57.833 回答