2013-09-24 2 views
0

Мне нужен модуль Modbus для использования в узле, и я нашел несколько легкое решение, которое прекрасно работает. Его Modbus-Stack для узла TooTallNate. (https://github.com/TooTallNate/node-modbus-stack)Node Modbus Stack ECONNREFUSED

Я реализовал его и, похоже, сработал. Используя мой браузер, я звоню на свой сервер Node, а затем с помощью Wireshark. Я вижу, что пакет Modbus переходит с моего сервера Node (ведущий Modbus) на другое устройство (подчиненное устройство Modbus), тогда я вижу, что другой пакет Modbus переходит от устройства к серверу Node.

Но сервер никогда не сможет вернуть данные в мой браузер. Оказывается, сервер Node прослушивал и готов был обработать событие «ответ», но получал событие «ошибка». Когда я обработал событие 'ошибок' Я увидел следующее (строкового):

{ "код": "ECONNREFUSED", "ERRNO": "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!

Niko

обновление: Я позвонил e.stack, чтобы увидеть происхождение вызовов ошибки и это то, что я получил:

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

ответ

0

Оказывается, что мне просто нужно, чтобы убедиться, что там были никакие другие устройства, пытающиеся стать мастером устройства Modbus; ведомый Modbus может иметь только один мастер.

Также мне пришлось переместить код клиента-создателя из функции, которая была вызвана всякий раз, когда HTTP-запрос был сделан на сервер, чтобы Node создавал один клиент для подчиненного устройства Modbus и полагался на это для всех последующих транзакций Modbus ,

Смежные вопросы