最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如何监视和控制台记录所有串行端口Modbus流量?

运维笔记admin7浏览0评论

如何监视和控制台记录所有串行端口Modbus流量?

如何监视和控制台记录所有串行端口Modbus流量?

我一直在尝试使用一个node.js应用程序通过MODBUS RTU协议与PLC通信。我已经通过MODBUS TCP协议成功与PLC通信。但是,当我将相同的代码修改为MODBUS RTU时,我遇到了使应用程序和PLC相互查找的困难。

我一直使用的软件包是:串行端口jsmodbus

当前,我尝试使用不同的Modbus仿真器与PLC通信。其中之一被称为MODBUS SIM 32,可以证明连接和PLC设置都很好。但是,当我将node.js应用程序的设置与PLC对齐时,它刚刚结束了超时错误。我已经尝试过使用同一程序包中的Modbus TCP选项,并且效果很好。但是,当我从同一软件包切换到RTU选项时,除重新启动PLC单元外,总是会出现超时。然后我发现它会通过.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脚本之一的主脚本之后,它应能够通过任何通道(RTU /串行端口或TCP /以太网)将正确的Modbus指令传递给PLC单元。请参见以下主要脚本:

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代码集(而不是串行端口)完美地执行它。只是想知道是否有人在这个领域有经验,或者有一个有根据的猜测。

目前,我确实可以尝试任何意见。

谢谢!

罗兰

回答如下:

您是否为自己创建了一个脚本?我们在办公室可以通过https://www.virtual-serial-port/article/modbus-decoder/描述这些程序包。还是出于其他目的?

发布评论

评论列表(0)

  1. 暂无评论