Как контролировать и регистрировать весь трафик Modbus через последовательный порт? - PullRequest
0 голосов
/ 03 октября 2019

Я пытался использовать одно приложение node.js для связи с ПЛК по протоколу MODBUS RTU. Я успешно связался с ПЛК по протоколу MODBUS TCP. Однако, когда я изменил тот же код для MODBUS RTU, у меня возникли трудности с тем, чтобы приложение и ПЛК нашли друг друга.

пакет, который я использовал, является: serialport jsmodbus

В настоящее времяЯ пытался использовать разные эмуляторы Modbus для связи с ПЛК. Один из них, который назывался MODBUS SIM 32, работал, что доказало, что соединение и настройка ПЛК просто в порядке. Однако, когда я выровнял настройки моего приложения node.js с ПЛК, это просто завершило ошибку тайм-аута. Я попробовал с опцией Modbus TCP из того же пакета, и он работал просто отлично. Но когда я переключался на опцию RTU из того же пакета, я всегда получал тайм-аут, за исключением случаев, когда модуль ПЛК перезагружался. Затем я узнал, что он получит что-то через функцию .data, насколько мне известно.

Код, который я использовал для связи MODBUS RTU, выглядит следующим образом:

const Modbus = require('jsmodbus');
const SerialPort = require('serialport');

function connectModbusRtu(baudRate,COMport, parity,dataBits,stopBits) {
  const options = {
    baudRate:baudRate,
    dataBits:dataBits,
    stopBits:stopBits,
    Parity:parity
  };
  const modbusPort = new SerialPort(COMport, options);
  const client = new Modbus.client.RTU(modbusPort, 1);

  modbusPort.on('open', function(){

    if(modbusPort.isOpen){
        console.log('Connection through modbus established.');

        client.writeSingleRegister(1,12)
        .then(function(resp){
            console.log('I wrote the answer.');
            console.log(resp);
        }).catch(function(err){
            console.log('I had it wrong.');
            console.log(err);
        });
    }else{
        console.log('COMport open failure.');
    }

  })

  modbusPort.on('data', function () {
    console.log('------------Data------------');
    console.log(arguments);
})

  modbusPort.on('close',function() {
    console.log('------------CLose------------');
    console.log(arguments);
    modbusPort.open();
  });

  modbusPort.on('error', function() {
    console.log('------------General Error------------');
    console.error;
  });

  return client;
}

module.exports = connectModbusRtu;

и следующий код - это то, что я использовал для Modbus TCP:

const Modbus = require('jsmodbus');
const net = require('net');

function connectModbusTcp(host, port) {
  const modbusSocket = new net.Socket();
  const client = new Modbus.client.TCP(modbusSocket);
  const options = {
    host,
    port
  };

  modbusSocket.on('connect', () =>
    console.log('Connection through modbus established')
  );

  modbusSocket.on('error', console.error);

  modbusSocket.connect(options);

  return client;
}

module.exports = connectModbusTcp;

Основная цель - после того, как основной сценарий вызвал один из вышеуказанных js-сценариев, он сможет передаватьправильная инструкция Modbus через какой-либо канал (RTU / последовательный порт или TCP / ethernet) к модулю ПЛК. Пожалуйста, смотрите следующее для основного скрипта:

const express = require('express');
const connectModbusTcp = require('../../modbus/connectModbusTcp');
const connectModbusRtu = require('../../modbus/connectModbusRtu');

const router = express.Router();

router.post('/', (req, res) => {
  console.log('Establishing modbus connection');
  const client = connectModbusRtu(9600,'COM4','NONE',8,1);
  //const client = connectModbusTcp('192.168.1.124', 502);
  req.app.set('modbusClient', client);
  res.json({ msg: 'Establishing modbus connection' });
});

module.exports = router;

Однако, я мог бы выполнить его безупречно через набор кодов TCP, но не через последовательный порт. Просто интересно, есть ли у кого-то опыт в этой области или у него есть обоснованное предположение, чтобы начать с.

В настоящее время я нахожусь в месте, где я буквально попробую любое мнение.

Спасибо!

Roland

1 Ответ

0 голосов
/ 04 октября 2019

вы создаете скрипт для себя? Мы в нашем офисе можем описать эти пакеты через https://www.virtual -serial-port.org / article / modbus-decoder / . или тебе для других целей?

...