ModbusRTU Library für Leonardo gesucht

Hallo

Ich baue gerade eine Anlage und benutze dazu codesys als softplc auf dem rpi.. Dabei muss ich einige spulen per pwm ansteuern, da der rpi das nicht kann muss ich auf den arduino als remoteIO ausweichen. Um das ganze nach "insustriestandard" miteinander komunizieren zu lassen wollte ich modbusrtu benutzen, leider finde ich nichts brauchbares was mit dem Leonardo funktioniert. Hab einige libs gefunden jedoch funktionieren die nicht mit dem Leonardo oder sind veraltet... Deswegen wollte ich mich erkundigen obs das was aktuelles gibt bei dem die meisten modbus funktion codes implementiert sind? mfg

Hallo, schon probiert? Gruß und Spaß Andreas

Danke, also complilieren geht aber sonst nix.. gibts de dokumentation dazu?

Welche Func Codes brauchst du denn? Was hat der Leo so besonderes an sich dass manche Libs damit nicht zurechtkommen? Bei mir lief diese Lib einwandfrei, wie viele andere die ich getestet hatte.

Hab das example so abgeändert dass alle analog inputs und alle pwm outputs angespochen werden

#include "SimpleModbusSlave.h"

#define  PWM0 3  
#define  PWM1 5 
#define  PWM2 6  
#define  PWM3 9  
#define  PWM4 10  
#define  PWM5 11  
#define  PWM6 13  
#define  ADC0 A0  
#define  ADC1 A1  
#define  ADC2 A2  
#define  ADC3 A3  
#define  ADC4 A4  
#define  ADC5 A5  

enum 
{     
  ADC_0,     
  ADC_1,     
  ADC_2,     
  ADC_3,     
  ADC_4,     
  ADC_5,     
  PWM_0,
  PWM_1,
  PWM_2,
  PWM_3,
  PWM_4,
  PWM_5,
  PWM_6,
  HOLDING_REGS_SIZE 
};

unsigned int holdingRegs[HOLDING_REGS_SIZE];

void setup()
{
  modbus_configure(115200, SERIAL_8N1, 1, 2, HOLDING_REGS_SIZE, holdingRegs);    
  pinMode(PWM0, OUTPUT);
  pinMode(PWM1, OUTPUT);
  pinMode(PWM2, OUTPUT);
  pinMode(PWM3, OUTPUT);
  pinMode(PWM4, OUTPUT);
  pinMode(PWM5, OUTPUT);
  pinMode(PWM6, OUTPUT);
}

void loop()
{
  modbus_update();
  holdingRegs[ADC_0] = analogRead(ADC0); // update data to be read by the master to adjust the PWM
  holdingRegs[ADC_1] = analogRead(ADC1); // update data to be read by the master to adjust the PWM
  holdingRegs[ADC_2] = analogRead(ADC2); // update data to be read by the master to adjust the PWM
  holdingRegs[ADC_3] = analogRead(ADC3); // update data to be read by the master to adjust the PWM
  holdingRegs[ADC_4] = analogRead(ADC4); // update data to be read by the master to adjust the PWM
  holdingRegs[ADC_5] = analogRead(ADC5); // update data to be read by the master to adjust the PWM
  analogWrite(PWM0, holdingRegs[PWM_0]>>2); // constrain adc value from the arduino master to 255
  analogWrite(PWM1, holdingRegs[PWM_1]>>2); // constrain adc value from the arduino master to 255
  analogWrite(PWM2, holdingRegs[PWM_2]>>2); // constrain adc value from the arduino master to 255
  analogWrite(PWM3, holdingRegs[PWM_3]>>2); // constrain adc value from the arduino master to 255
  analogWrite(PWM4, holdingRegs[PWM_4]>>2); // constrain adc value from the arduino master to 255
  analogWrite(PWM5, holdingRegs[PWM_5]>>2); // constrain adc value from the arduino master to 255
  analogWrite(PWM6, holdingRegs[PWM_6]>>2); // constrain adc value from the arduino master to 255
}

Wenn ich mit dem Test-tool di komunikation testen will dann kommt nix zurück.. muss ich den pin2 mit 5v verbinden dass der antwortet oder woran liegts? was ist die Startadresse? Muss ich die serialpins verwenden oder geht usb auch?

Hallo, Quelle Gruß und Spaß Andreas