- 
                Notifications
    You must be signed in to change notification settings 
- Fork 135
Open
Labels
type: imperfectionPerceived defect in any part of projectPerceived defect in any part of project
Description
My sketch below is based on the Kitchen Sink example.
If I run the code with delay(5) at the beginning and at the end of the loop, everything is working fine, without I am running into timeout issue during readInputRegisterValues();
Any idea what is wrong with my code or is this a bug?
Slave settings:
Baud rate: 9600
Parity bits: None
/*
  Modbus RTU Client Kitchen Sink
  This sketch creates a Modbus RTU Client and demonstrates
  how to use various Modbus Client APIs.
  Circuit:
   - MKR board
   - MKR 485 shield
     - ISO GND connected to GND of the Modbus RTU server
     - Y connected to A/Y of the Modbus RTU server
     - Z connected to B/Z of the Modbus RTU server
     - Jumper positions
       - FULL set to OFF
       - Z \/\/ Y set to ON
  created 18 July 2018
  by Sandeep Mistry
*/
#include <ArduinoRS485.h>  // ArduinoModbus depends on the ArduinoRS485 library
#include <ArduinoModbus.h>
int counter = 0;
byte readModbus1 = 0;
byte writeModbus1 = 0;
void setup() {
  Serial.begin(9600);
  while (!Serial)
    ;
  Serial.println("Modbus RTU Client Kitchen Sink");
  // start the Modbus RTU client
  if (!ModbusRTUClient.begin(9600, SERIAL_8N1)) {
    Serial.println("Failed to start Modbus RTU Client!");
    while (1)
      ;
  }
}
void loop() {
  readInputRegisterValues();
  counter++;
  //delay(5);
  if ((bitRead(readModbus1, 0) == 0) && (bitRead(readModbus1, 1) == 0) && (bitRead(readModbus1, 2) == 0) && (bitRead(readModbus1, 3) == 0) && (bitRead(readModbus1, 4) == 0) && (bitRead(readModbus1, 5) == 0) && (bitRead(readModbus1, 6) == 0) && (bitRead(readModbus1, 7) == 0)) {
    ModbusRTUClient.beginTransmission(01, COILS, 0x00, 8);
    for (int i = 0; i < 8; i++) {
      ModbusRTUClient.write(0);
    }
    if (!ModbusRTUClient.endTransmission()) {
      Serial.print(F("failed!1 "));
      Serial.println(ModbusRTUClient.lastError());
    } else {
      Serial.println(F("success1"));
    }
  }
  if (bitRead(readModbus1, 0) == 1) {
    Serial.println(F("Bit3 ist gesetzt"));
  }
  if ((bitRead(readModbus1, 0) == 1) || (bitRead(readModbus1, 1) == 1) || (bitRead(readModbus1, 2) == 1) || (bitRead(readModbus1, 3) == 1) || (bitRead(readModbus1, 4) == 1) || (bitRead(readModbus1, 5) == 1) || (bitRead(readModbus1, 6) == 1) || (bitRead(readModbus1, 7) == 1)) {
    writeModbus1 = bitWrite(writeModbus1, 0, 1);            //Update of relevant bits
    writeModbus1 = bitWrite(writeModbus1, 2, 1);            //Update of relevant bits
    writeModbus1 = bitWrite(writeModbus1, 7, 1);            //Update of relevant bits
    ModbusRTUClient.beginTransmission(01, COILS, 0x00, 8);  //Start Modbus communication
    for (int i = 0; i < 8; i++) {
      ModbusRTUClient.write(bitRead(writeModbus1, i));  //writes full byte on the Modbus
    }
    if (!ModbusRTUClient.endTransmission()) {
      Serial.print(F("failed!2 "));
      Serial.println(ModbusRTUClient.lastError());
    } else {
      Serial.println(F("success2"));
    }
  }
  //delay(5);
  //Serial.println();
}
void readInputRegisterValues() {
  Serial.print("Reading input register values ... ");
  // read 10 discrete input values from (slave) id 42,
  if (!ModbusRTUClient.requestFrom(1, DISCRETE_INPUTS, 0x00, 8)) {
    Serial.print("failed!3 ");
    Serial.println(ModbusRTUClient.lastError());
  } else {
    Serial.println("success3");
    while (ModbusRTUClient.available()) {
      readModbus1 = ModbusRTUClient.read();
      Serial.print(readModbus1);
    }
    Serial.println();
  }
}Metadata
Metadata
Assignees
Labels
type: imperfectionPerceived defect in any part of projectPerceived defect in any part of project