ModbusRTUSlave cannot get data unique

Hi I am using Arduino mega2560 with RS485 module (max485). Library link that I used for modbusRTU: ModbusRTUSlave/README.md at main · CMB27/ModbusRTUSlave · GitHub.
My problem is when I send the data from master for specific slave ID all slaves take the data. I couldnt handle how I can take the data for specified slave . I mean if the master sends data for slave 1 ,only slave 1 should use the message, others should be ignore. But in the code, it doesnt work as implemented so all slaves take same data.
Here is Master Code:

from pymodbus.client import ModbusSerialClient
import time

# Modbus RTU cihazı oluştur
client = ModbusSerialClient(method='rtu', port='/dev/ttyUSB0', baudrate=115200)
client.connect()

# Veri yazma işlemi
def write_data():
    slave_address = 1  # Slave adresi
    register_start_address = 2  # Başlangıç register adresi
    register_count = 15  # Kayıt sayısı
    # data = list(range(register_count))  # 0'dan 14'e kadar olan değerleri içeren bir liste oluştur
    data = [1,5,5,5,5,5,5,5,5,5,5,5,5]
    try:
        # Holding register'lara (0'dan başlayarak) veri yaz
        client.write_registers(register_start_address, data, unit=slave_address)
        print("Data sent successfully:", data)
    except Exception as e:
        print("Error:", e)

# Ana döngü
while True:
    # Veriyi gönder
    write_data()
    
    # Bekleme süresi
    time.sleep(1)

Here is Slave 1 Code:

#include <ModbusRTUSlave.h>

const byte dePin = 4; // RS485 DE/RE pin
const int REGISTER_COUNT = 15; // Kayıt sayısı

ModbusRTUSlave modbus(Serial3, dePin); // Serial3 kullanarak Modbus RTU slave oluştur

uint16_t holdingRegisters[REGISTER_COUNT]; // Tutma registerları

void setup() {
  Serial.begin(115200); // Seri bağlantı başlat, baud rate: 19200
  modbus.configureHoldingRegisters(holdingRegisters, 1); // Tutma registerlarını yapılandır
  modbus.begin(1, 115200); // Slave cihazı başlat (ID: 1, Baud rate: 19200)
}

void loop() {
  modbus.poll(); // Modbus isteklerini işle

  // Tutma registerlarını yazdır
  for (int i = 0; i < REGISTER_COUNT; ++i) {
    Serial.print("Holding Register ");
    Serial.print(i);
    Serial.print(": ");
    Serial.println(holdingRegisters[i]);
  
  }
  Serial.println("********");
}

Here is Slave 2 Code:

#include <ModbusRTUSlave.h>

const byte dePin = 4; // RS485 DE/RE pin
const int REGISTER_COUNT = 15; // Kayıt sayısı

ModbusRTUSlave modbus(Serial3, dePin); // Serial3 kullanarak Modbus RTU slave oluştur

uint16_t holdingRegisters[REGISTER_COUNT]; // Tutma registerları

void setup() {
  Serial.begin(115200); // Seri bağlantı başlat, baud rate: 19200
  modbus.configureHoldingRegisters(holdingRegisters, 1); // Tutma registerlarını yapılandır
  modbus.begin(2, 115200); // Slave cihazı başlat (ID: 2, Baud rate: 19200)
}

void loop() {
  modbus.poll(); // Modbus isteklerini işle

  // Tutma registerlarını yazdır
  for (int i = 0; i < REGISTER_COUNT; ++i) {
    Serial.print("Holding Register ");
    Serial.print(i);
    Serial.print(": ");
    Serial.println(holdingRegisters[i]);
  
  }
  Serial.println("********");
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.