node-modbus-serial
                                
                                 node-modbus-serial copied to clipboard
                                
                                    node-modbus-serial copied to clipboard
                            
                            
                            
                        RTU over socket (second PR)
The previous PR was undone because of a bug, happy to submit patches to work rather than undoing next time.
I've reproduced the issues, tested and issued a patch on this branch, with the help of information provided by @Jalle19.
I'll try to find some time to test this soon
Hello, When I set the timeout and read it twice
client.setTimeout(500); await client.readHoldingRegisters(0,10); await client.readHoldingRegisters(0,10);
It's time out!
I think there may be a problem with the following code
this._port._transactionIdWrite += 1;
Hello, When I set the timeout and read it twice
client.setTimeout(500); await client.readHoldingRegisters(0,10); await client.readHoldingRegisters(0,10);
It's time out!
I think there may be a problem with the following code
this._port._transactionIdWrite += 1;
Do you have a full example please? Here's what I've just tried.
const ModbusRTU = require("../index");
const modbusClient = new ModbusRTU()
modbusClient.setID(1)
modbusClient.setTimeout(500) // 5 seconds
modbusClient.connectRTUBuffered("/dev/pts/5", {
    debug: true,
    baudRate: 19200,
    dataBits: 8,
    parity: 'none',
    stopBits: 1,
}, read);
async function read() {
    await modbusClient.readHoldingRegisters(0,10)
        .then(console.log)
        .catch(console.err);
    await modbusClient.readHoldingRegisters(0,10)
        .then(console.log)
        .catch(console.err);
}
/* eslint-disable no-console, no-unused-vars, spaced-comment */
// create an empty modbus client
const ModbusRTU = require("../index");
const holdingRegisters = {0: 1, 1: 2, 2: 3};
const coils = {};
const inputRegisters = {};
const discreteInputs = {};
const vector = {
    getInputRegister: function(addr) {
        return inputRegisters[addr];
    },
    getMultipleInputRegisters: function(startAddr, length) {
        const values = [];
        for (let i = 0; i < length; i++) {
            values[i] = inputRegisters[startAddr + i];
        }
        return values;
    },
    getDiscreteInput: function(addr) {
        return discreteInputs[addr];
    },
    getHoldingRegister: function(addr) {
        return holdingRegisters[addr];
    },
    setRegister: function(addr, value) {
        holdingRegisters[addr] = value;
        return;
    },
    getMultipleHoldingRegisters: function(startAddr, length) {
        const values = [];
        for (let i = 0; i < length; i++) {
            values[i] = holdingRegisters[startAddr + i];
        }
        return values;
    },
    getCoil: function(addr) {
        return coils[addr];
    },
    setCoil: function(addr, value) {
        coils[addr] = value;
        return coils[addr];
    },
    readDeviceIdentification: function() {
        return {
            0x00: "MyVendorName",
            0x01: "MyProductCode",
            0x02: "MyMajorMinorRevision",
            0x05: "MyModelName",
            0x97: "MyExtendedObject1",
            0xab: "MyExtendedObject2"
        };
    }
};
// set the server to answer for modbus requests
console.log("server listening...");
const serverTCP = new ModbusRTU.ServerSerial(vector,
    {
        port: "/dev/pts/6",
        debug: true,
        unitID: 1
    },
    {
        baudRate: 19200,
        dataBits: 8,
        stopBits: 1,
        parity: "none"
    }
);
serverTCP.on("initialized", function() {
    console.log("initialized");
});
serverTCP.on("socketError", function(err) {
    console.error(err);
    serverTCP.close(closed);
});
function closed() {
    console.log("server closed");
}