Arduino Modbus Kütüphane

rubens

Üye
Katılım
25 Ağustos 2022
Mesajlar
21
Merhaba modbus protokol ile uğraştığım projeme iyi bir kütüphane bulamadım. şuan veri okuma ile ilgili olarak bulduğum en iyi şu kütüphane var ancak burada da write single register gönderdiğimde fonksiyon olarak belirlenen farklı birşey gönderiyor ve bunu değiştiremedim/çalıştıramadım. fonksiyon olarak 06 write single register diye gönderdiğim komutum seri porttan dinlediğimde 10 olarak bir komut atıyor. bilgisi olan arkadaşlarım yardımcı olabilirmi? teşekkürler https://github.com/jecrespo/simple-modbus/tree/master/Modbus RTU libraries for Arduino
 
similatörden dinlediğimde şöyle bir yanıt alıyorum.
01 86 03 02 61
Exception Response
03 = Illegal Data Value
 
Kod:
#include "config.h"
#include <AdafruitIO_Feed.h>
#include <ModbusRTU.h>
#include <Wire.h>
#include <Wifi.h>
#include "SSD1306Wire.h"

#define SERIAL_COMMUNICATION_CONTROL_PIN 19
ModbusRTU mb;

#define LED 9
const int ledPin = 2;
uint16_t res[5];

bool cb(Modbus::ResultCode event, uint16_t transactionId, void *data)
{ // Callback to monitor errors
  if (event != Modbus::EX_SUCCESS)
  {
    Serial.println("Request result: 0x");
    Serial.println(event, HEX);
  }
  return true;
}

AdafruitIO_Feed *analog = io.feed("analog");

SSD1306Wire display(0x3c, 22, 23);
void setup()
{
  Serial.begin(9600);

  Serial2.begin(9600, SERIAL_8N1, 16, 17);
  mb.begin(&Serial2, SERIAL_COMMUNICATION_CONTROL_PIN);
  mb.master();

  while (!Serial)
    ;

  delay(200);
  Serial.print("Connecting to  IO");

  io.connect();

  while (io.status() < AIO_CONNECTED)
  {
    Serial.print("IO Bekleniyor");
    delay(500);
  }
  analog->onMessage(handleMessage);

  Serial.println();
  Serial.print("ESP Board MAC Address:  ");
  Serial.println(io.statusText());

  pinMode(SERIAL_COMMUNICATION_CONTROL_PIN, OUTPUT);
  digitalWrite(SERIAL_COMMUNICATION_CONTROL_PIN, 1);
  digitalWrite(SERIAL_COMMUNICATION_CONTROL_PIN, 0);

  display.init();
  delay(100);
  display.flipScreenVertically();
  display.setFont(ArialMT_Plain_10);
  display.drawString(0, 5, "TEST");

  display.display();

  delay(200);
}

void loop()
{
  io.run();
  mb.task();
  yield();
}

void handleMessage(AdafruitIO_Data *data)
{

  // convert the data to integer
  uint16_t reading = data->toInt();

  Serial.print("received <- ");
  Serial.println(reading);
  //mb.writeHreg(1, 2, &reading, 1, cb); // id, StartAdres, Data, count, cb
  //mb.writeHreg(1, 3, &reading, 1, cb); // orp
  mb.writeHreg(1, 3, &reading, 1, cb); // ph
  display.clear();
  display.drawString(0, 0, "pH=" + String(reading));

  display.display();
   delay(100);
}
 
Screenshot_13.png

01 slave id 06 write komut 00 03 adres 00 01 count 04 26 crc ama sonuna değişik bir veri daha atıyor o veri yüzünden doğrulamıyor slave ama öyle bir veri yok. kod ile ilgili bir sorun varsa onuda çözemedim
 

Forum istatistikleri

Konular
7,285
Mesajlar
123,217
Üyeler
2,939
Son üye
Cano

Son kaynaklar

Son profil mesajları

Freemont2.0 herbokolog Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
Freemont2.0 posta Freemont2.0 wrote on posta's profile.
Merhabalar :)
az bilgili çok meraklı
Prooffy semih_s Prooffy wrote on semih_s's profile.
Merhaba, sizden DSO2C10 hakkında bilgi rica ettim. Yanıtlarsanız sevinirim...
Unal taydin Unal wrote on taydin's profile.
Timur Bey, Arduino kontrollü bir akü şarj cihazı yapmaya çalışıyorum. Aklımdaki fikri basit bir çizim olarak konu açmıştım. Özellikle sizin fikirlerinizi çok önemsiyorum.
Back
Top