msgMobus Master und Slave

Hallo,

wieder einmal das Thema zum Modbus von mgsModbus.
Ich habe diese zur Zeit nur als Master am laufen und übertrage von einem Arduino Leonardo ETH oder auch von einem ESP daten an eine SPS-> Slave.

Nun komme ich aber ins Straucheln wie ich den Slave Konfiguriere so das er auch Daten empfangen kann.

der Code zu dem ganzen.

#include <Wire.h>
#include <SPI.h>
#include <Ethernet2.h>

#include "MgsModbus.h"

int Sensor = { 5 };
int WS_PIN = { 3 };
int DS_PIN = { 1 };
int Cal_pH, Cal_orp, Cal_ppm;

byte mac[] = { *mac adresse * };
IPAddress OwnIP(eigene IP Adresse);  // IP form Device
IPAddress rIP(MB Slave IP Adresse);  // IP form Server

MgsModbus Mb;
int inByte = 0;  // incoming serial byte

void collect_data()  // übertragen der Werte an den Modbus Slave (SPS) Revolution PI
{
  Mb.MbData[0] = Sensor;  // Analog Pin A5
  Mb.MbData[1] = WS_PIN;  // Analog Pin A1
  Mb.MbData[2] = DS_PIN;  // Analog Pin A2
}  // End of collect_data

void modbus_send() {     // senden der Modbusdaten an den RevPI-Slave
  Mb.Req(MB_FC_WRITE_MULTIPLE_REGISTERS, 21, 6, 0);  // Startadress, Anzahl der Register die Übetragen werden sollen, Value
    Mb.MbmRun();
}  // End of Modbus Send

void loop() {
  if (Serial.available() > 0) {
    // get incoming byte:
    inByte = Serial.read();
    if (inByte == '0') {         // print MbData
     int i = 0;
     int j = 0;
     Serial.println();
      for (i=0;i<5;i++) { //Number of channel
        Serial.print("Mb.MbData["); Serial.print(i); Serial.print("]="); Serial.print(Mb.MbData[i]);
        Serial.print(" BIN: "); 
        for ( j=0;j<16;j++) { // Number of bit
              Serial.print(bitRead(Mb.MbData[i], j));      
        }  
         Serial.println();
       }
       Serial.println();
    } 
 }
}

void modbus_read() {  // empfangen der daten vom MB-Master
  Mb.Req(MB_FC_READ_COILS, 0, 3, 0);
    bitWrite(Mb.MbData[3], 0, Cal_pH);    // lese Bit 0 aus Register 0
    bitWrite(Mb.MbData[3], 1, Cal_orp);   // lese Bit 1 aus Register 0
    bitWrite(Mb.MbData[3], 2, Cal_ppm); // lese Bit 2 aus Register 0
    Mb.MbsRun();

}  // End of Modbus Read
   
void setup() {
  Wire.begin();                               // enable I2C port.
  Ethernet.begin(mac, OwnIP);  // start ethernet interface
  Serial.begin(115200);

  Mb.remSlaveIP = rIP;

  Mb.MbData[0] = 0;  // ACHTUNG BUFFER GRÖSSEN GGF ANPASSEN !!! 12+pos*2 stellen => 
  Mb.MbData[1] = 0;
  Mb.MbData[2] = 0;
}

da es zu wenige Bespiele dazu gibt und die die es gibt teilweise schlecht kommetiert sind suche ich hier nun leider um Hilfe.

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