This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Universal Modbus TCP/RTU Slave
#72
Multiple resident scripts can't share the same RS-485 port. It should be enough just to block writing as needed.

Replace the whole handlers.writeregister function with this, modify writeallowed logic as needed.
Code:
local function writeallowed(slaveid)
  if slaveid == 1 then
    return grp.getvalue('1/1/1')
  elseif slaveid == 2 then
    return grp.getvalue('1/1/2')
  end
end

handlers.writeregister = function(slaveid, fncode, data)
  if #data ~= 4 then
    return
  end

  local addr = touint16(data, 1)
  local map = getmapping(slaveid, fncode)

  if not map or not map[ addr ] then
    return excodes.illegaldataaddress
  end

  local mapobj = map[ addr ]

  if mapobj.len ~= 1 then
    return excodes.illegaldataaddress
  end

  if writeallowed(slaveid) then
    writevalue(mapobj, data, 3)
  end

  return data
end

Replace the whole handlers.writeregisters function with this.
Code:
handlers.writeregisters = function(slaveid, fncode, data)
  if #data < 5 then
    return
  end

  local addr = touint16(data, 1)
  local count = touint16(data, 3)
  local bytes = touint8(data, 5)

  if #data ~= (bytes + 5) then
    return
  end

  if count == 0 or count > limits.writeregisters or bytes ~= count * 2 then
    return excodes.illegaldataaddress
  end

  local map = getmapping(slaveid, fncode)

  if not map then
    return excodes.illegaldataaddress
  end

  if writeallowed(slaveid) then
    for i = 0, (count - 1) do
      local mapobj = map[ addr + i ]

      if mapobj and not mapobj.readonly then
        local offset = 6 + i * 2
        writevalue(mapobj, data, offset)
      end
    end
  end

  return data:sub(1, 4)
end
Reply


Messages In This Thread
Universal Modbus TCP/RTU Slave - by Daniel - 07.10.2022, 12:55
RE: Universal Modbus TCP Slave - by palomino - 07.10.2022, 17:30
RE: Universal Modbus TCP Slave - by Daniel - 07.10.2022, 17:53
RE: Universal Modbus TCP Slave - by Daniel - 07.10.2022, 17:55
RE: Universal Modbus TCP Slave - by palomino - 10.10.2022, 13:39
RE: Universal Modbus TCP Slave - by Daniel - 10.10.2022, 13:44
RE: Universal Modbus TCP Slave - by palomino - 11.10.2022, 16:22
RE: Universal Modbus TCP Slave - by palomino - 23.02.2023, 12:44
RE: Universal Modbus TCP Slave - by admin - 23.02.2023, 12:47
RE: Universal Modbus TCP Slave - by palomino - 24.02.2023, 12:41
RE: Universal Modbus TCP Slave - by admin - 24.02.2023, 12:48
RE: Universal Modbus TCP Slave - by palomino - 27.02.2023, 13:02
RE: Universal Modbus TCP Slave - by Daniel - 27.02.2023, 13:10
RE: Universal Modbus TCP Slave - by palomino - 27.02.2023, 14:00
RE: Universal Modbus TCP Slave - by Daniel - 27.02.2023, 14:03
RE: Universal Modbus TCP Slave - by palomino - 28.02.2023, 02:32
RE: Universal Modbus TCP Slave - by admin - 28.02.2023, 07:02
RE: Universal Modbus TCP Slave - by Fahd - 06.03.2023, 14:11
RE: Universal Modbus TCP Slave - by Daniel - 06.03.2023, 14:35
RE: Universal Modbus TCP Slave - by Fahd - 06.03.2023, 14:50
RE: Universal Modbus TCP Slave - by Daniel - 06.03.2023, 14:55
RE: Universal Modbus TCP Slave - by Daniel - 06.03.2023, 15:16
RE: Universal Modbus TCP Slave - by Fahd - 07.03.2023, 07:59
RE: Universal Modbus TCP Slave - by rw_echo - 14.03.2023, 05:22
RE: Universal Modbus TCP Slave - by Daniel - 07.03.2023, 11:55
RE: Universal Modbus TCP Slave - by rw_echo - 07.03.2023, 12:32
RE: Universal Modbus TCP Slave - by Daniel - 07.03.2023, 12:34
RE: Universal Modbus TCP Slave - by rw_echo - 07.03.2023, 12:49
RE: Universal Modbus TCP Slave - by Daniel - 07.03.2023, 12:59
RE: Universal Modbus TCP Slave - by David - 13.03.2023, 15:40
RE: Universal Modbus TCP Slave - by admin - 13.03.2023, 15:42
RE: Universal Modbus TCP Slave - by David - 13.03.2023, 15:58
RE: Universal Modbus TCP Slave - by Daniel - 13.03.2023, 16:00
RE: Universal Modbus TCP Slave - by David - 13.03.2023, 16:07
RE: Universal Modbus TCP Slave - by Daniel - 13.03.2023, 16:15
RE: Universal Modbus TCP Slave - by David - 13.03.2023, 16:32
RE: Universal Modbus TCP Slave - by Daniel - 13.03.2023, 16:41
RE: Universal Modbus TCP Slave - by admin - 13.03.2023, 16:45
RE: Universal Modbus TCP Slave - by David - 13.03.2023, 19:31
RE: Universal Modbus TCP Slave - by admin - 14.03.2023, 06:18
RE: Universal Modbus TCP Slave - by rw_echo - 14.03.2023, 07:39
RE: Universal Modbus TCP Slave - by Fahd - 14.03.2023, 08:27
RE: Universal Modbus TCP Slave - by admin - 14.03.2023, 08:15
RE: Universal Modbus TCP Slave - by rw_echo - 14.03.2023, 08:35
RE: Universal Modbus TCP Slave - by admin - 14.03.2023, 08:35
RE: Universal Modbus TCP/RTU Slave - by admin - 06.06.2023, 15:34
RE: Universal Modbus TCP/RTU Slave - by admin - 12.06.2023, 08:59
RE: Universal Modbus TCP/RTU Slave - by admin - 28.03.2024, 08:26
RE: Universal Modbus TCP/RTU Slave - by admin - 12.06.2024, 05:26
RE: Universal Modbus RTU - by Ranjeet - 14.06.2024, 07:24
RE: Universal Modbus TCP/RTU Slave - by admin - 12.07.2024, 07:14
RE: Universal Modbus TCP/RTU Slave - by admin - 16.04.2025, 07:06
RE: Universal Modbus TCP/RTU Slave - by admin - 22.04.2025, 05:32
RE: Universal Modbus TCP/RTU Slave - by admin - 22.04.2025, 09:01

Forum Jump: