0

ノードで使用する Modbus モジュールが必要でしたが、完全に機能するやや軽量のソリューションを見つけました。TooTallNate による Node 用の Modbus-Stack。( https://github.com/TooTallNate/node-modbus-stack )

私はそれを実装しましたが、うまくいくようです。ブラウザを使用してノード サーバーに呼び出しを行い、次に Wireshark を使用して、Modbus パケットがノード サーバー (modbus マスター) から別のデバイス (modbus スレーブ) に送信されるのを確認し、別の Modbus パケットがデバイスからノード サーバーに送信されるのを確認します。

しかし、サーバーがデータをブラウザに返すことは決してありません。Node サーバーはリッスンしており、'response' イベントを処理する準備ができていましたが、'error' イベントを取得していました。「エラー」イベントを処理すると、次のように表示されました (文字列化):

{"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 スレーブは 1 つのマスターのみを持つことができます。

また、HTTP 呼び出しがサーバーに対して行われるたびに呼び出される関数からクライアント作成コードを移動して、Node が modbus スレーブとなるクライアントを 1 つ作成し、以降のすべての modbus トランザクションでそれに依存するようにする必要がありました。

于 2013-10-03T00:06:57.833 に答える