Arduino Interacted with PLC

Hello Out There,
I am trying to do output LED of PLC ON using Arduino. I have connected both of then through Ethernet.

I tried but not able to find how to do so. Anyone having Idea please help me with this.

Thank you in advance!

Hello jhankhana
Post your current sketch, well formated, with comments and in so called code tags "</>" and a schematic, not a Fritzy diagram, to see how we can help.
Have a nice day and enjoy coding in C++.

1 Like

I am using PLC S7-200 and I have used below code to blink the DO LEDs. It's working.

#include <SPI.h>
#include <Ethernet.h>
#include <elapsedMillis.h>
#include <Settimino.h>

#define interval 2000

// Uncomment next line to perform small and fast data access
#define DO_IT_SMALL
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = 
{ 
  0x90, 0xA2, 0xDA, 0x0F, 0x08, 0xE1 
};

IPAddress Local(192,168,2,51); // Local Address
IPAddress PLC(192,168,2,1);   // PLC Address

unsigned int MyReadBuffer[6],MyWriteBuffer[6];
unsigned char keystatus[17],lednumber,keynumber,keysensecount,readled,writeled;
unsigned int opcount,i;
unsigned int bigendian1,bigendian2,finalbigendian[6],outputdata[6],finalkey[2];
int Result1,Result2,Result3;

elapsedMillis timer0;
S7Client Client;


//----------------------------------------------------------------------
// Setup : Init Ethernet and Serial port
//----------------------------------------------------------------------
void setup() 
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  //
  delay(3000); 
  // Start the Ethernet Library
  Ethernet.begin(mac, Local);
  // Setup Time, someone said me to leave 2000 because some 
  // rubbish compatible boards are a bit deaf.
  delay(3000); 
  //
  Serial.println("");
  Serial.println("Cable connected");  
  Serial.print("Local IP address : ");
  Serial.println(Ethernet.localIP());
}

//-----------------------------
// Prints the Error number
//-----------------------------
void CheckError(int ErrNo)
{
  Serial.print("Error No. 0x");
  Serial.println(ErrNo, HEX);
  
  // Checks if it's a Severe Error => we need to disconnect
  if (ErrNo & 0x00FF)
  {
    Serial.println("SEVERE ERROR, disconnecting.");
    Client.Disconnect(); 
  }
}

//----------------------------------------------------------------------
// Main Loop
//----------------------------------------------------------------------
void loop() 
{
  int Size;
  
  Result1=Client.ConnectTo(PLC, 
                           0,  // Rack (see the doc.)
                           1); // Slot (see the doc.)

    //Data Write
    keysensecount=0;
    for (i = 0; i < 17; i++)
    {
      if(keystatus[i]==HIGH)
      {
        keysensecount++;
        keynumber=i+1;
      }
    }
    if(keysensecount==0 || keysensecount>1)
    {
      keynumber=0;
    }
    finalkey[0]=keynumber;
    outputdata[0] = (finalkey[0]<<8);
    finalkey[0]=(keystatus[7]<<7)|(keystatus[6]<<6)|(keystatus[5]<<5)|(keystatus[4]<<4)|(keystatus[3]<<3)|(keystatus[2]<<2)|(keystatus[1]<<1)|(keystatus[0]<<0);
    finalkey[1]=(keystatus[15]<<7)|(keystatus[14]<<6)|(keystatus[13]<<5)|(keystatus[12]<<4)|(keystatus[11]<<3)|(keystatus[10]<<2)|(keystatus[9]<<1)|(keystatus[8]<<0);
    outputdata[1] = 0xff; //(finalkey[1]<<8)|finalkey[0];
    outputdata[2] = 0xff; // keystatus[16];
    outputdata[3] = 0xff; //0x5678;//22136
    outputdata[4] = 0xff; //0x9abc;//39612
    outputdata[5] = 0xff; //0xdef0;//57072
    
    for (i = 0; i < 6; i++)
    {
      bigendian1=outputdata[i]&0xff;
      bigendian2=outputdata[i]&0xff00;
      MyWriteBuffer[i]=(bigendian1<<8)|(bigendian2>>8); 
    }
    
    Result3=Client.WriteArea(S7AreaDB, // We are requesting DB access
                             1,        // DB Number = 204
                             1,        // Start from byte N.0
                             8,     // We need "Size" bytes
                             &MyWriteBuffer);  // Put them into our target (Buffer or PDU)

   delay(1000);
    for (i = 0; i < 6; i++)
    {
      bigendian1=outputdata[i]&0x00;
      bigendian2=outputdata[i]&0x0000;
      MyWriteBuffer[i]=(bigendian1<<8)|(bigendian2>>8); 
    }

    Result3=Client.WriteArea(S7AreaDB, // We are requesting DB access
                             1,        // DB Number = 204
                             1,        // Start from byte N.0
                             8,     // We need "Size" bytes
                             &MyWriteBuffer);  // Put them into our target (Buffer or PDU)
    delay(1000);
    //Key Status 
      prima_keystatus();
    //  
    if(Result3==0)
    {
      if (writeled == HIGH)
      {
        writeled = LOW;
        digitalWrite(13 , LOW);
      }
      else
      {
        writeled = HIGH;
        digitalWrite(13 , HIGH);
      }
    }
    else
    {
      writeled = LOW;
      digitalWrite(13 , LOW);
      Serial.println("Error in Result3");
      CheckError(Result3);
    }
    
    if (Result3==0)
    {
      delay(50); 
    }
}

But, Again need help.
I want to read from DI LEDs. I have connected switch to it. What I want to do is when turn on LED that number should be printed. What I have wrote is not working.
It would be great to have guidance on the same.

Thanks in Advance!


#include <SPI.h>
#include <Ethernet.h>
#include <elapsedMillis.h>
#include <Settimino.h>

#define interval 2000

// Uncomment next line to perform small and fast data access
#define DO_IT_SMALL
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = 
{ 
  0x90, 0xA2, 0xDA, 0x0F, 0x08, 0xE1 
};

IPAddress Local(192,168,2,51); // Local Address
IPAddress PLC(192,168,2,1);   // PLC Address

unsigned int MyReadBuffer[6],MyWriteBuffer[6];
unsigned char keystatus[17],lednumber,keynumber,keysensecount,readled,writeled;
unsigned int opcount,i;
unsigned int bigendian1,bigendian2,finalbigendian[6],outputdata[6],finalkey[2];
int Result1,Result2,Result3;

bool bit1 = 0;
bool bit2 = 0;
bool bit3 = 0;
bool bit4 = 0;

elapsedMillis timer0;
S7Client Client;

//-----------------------------
//Prima
//-----------------------------
void lednumber_output(void)
{
  //lednumber=(finalbigendian[5]<<5)|(finalbigendian[4]<<4)|(finalbigendian[3]<<3)|(finalbigendian[2]<<2)|(finalbigendian[1]<<1)|(finalbigendian[0]<<0);
  if (keystatus[16] == HIGH)
  {
    lednumber=0;
  }
  //LED Output  
  switch(lednumber)
  {
  case 1:
    digitalWrite(22, HIGH);
    break;
  case 2:
    digitalWrite(21, HIGH);
    break;
  case 3:
    digitalWrite(20, HIGH);
    break;
  case 4:
    digitalWrite(2, HIGH);
    break;
  case 5:
    digitalWrite(3, HIGH);
    break;
  case 6:
    digitalWrite(8, HIGH);
    break;
  case 7:
    digitalWrite(9, HIGH);
    break;
  case 8:
    digitalWrite(6, HIGH);
    break;
  case 9:
    digitalWrite(7, HIGH);
    break;
  case 10:
    digitalWrite(25, HIGH);
    break;
  case 11:
    digitalWrite(23, HIGH);
    break;
  case 12:
    digitalWrite(32, HIGH);
    break;
  case 13:
    digitalWrite(34, HIGH);
    break;
  case 14:
    digitalWrite(36, HIGH);
    break;
  case 15:
    digitalWrite(5, HIGH);
    break;
  case 16:
    digitalWrite(48, HIGH);
    break;
  case 17:
    digitalWrite(46, HIGH);
    break;
  case 18:
    digitalWrite(38, HIGH);
    break;
  case 19:
    digitalWrite(30, HIGH);
    break;
  case 20:
    digitalWrite(28, HIGH);
    break;
  case 21:
    digitalWrite(26, HIGH);
    break;
  case 22:
    digitalWrite(40, HIGH);
    break;
  case 23:
    digitalWrite(42, HIGH);
    break;
  case 24:
    digitalWrite(44, HIGH);
    break;
  case 25:
    digitalWrite(24, HIGH);
    break;
  case 26:
    digitalWrite(33, HIGH);
    break;
  case 27:
    digitalWrite(35, HIGH);
    break;
  case 28:
    digitalWrite(37, HIGH);
    break;
  case 29:
    digitalWrite(39, HIGH);
    break;
  case 30:
    digitalWrite(41, HIGH);
    break;
  case 31:
    digitalWrite(43, HIGH);
    break;
  case 32:
    digitalWrite(45, HIGH);
    break;
  case 33:
    digitalWrite(47, HIGH);
    break;
  case 34:
    digitalWrite(49, HIGH);
    break;
  case 35:
    digitalWrite(27, HIGH);
    break;
  case 36:
    digitalWrite(31, HIGH);
    break;
  case 37:
    digitalWrite(29, HIGH);
    break;
  default:
    digitalWrite(2 , LOW);
    digitalWrite(3 , LOW);
    digitalWrite(5 , LOW);
    digitalWrite(6 , LOW);
    digitalWrite(7 , LOW);
    digitalWrite(8 , LOW);
    digitalWrite(9 , LOW);
    for (opcount = 0; opcount < 15; opcount++)
    {
      digitalWrite(20 + (opcount * 2), LOW);
      digitalWrite(21 + (opcount * 2), LOW);
    }
    break;
  }
}
//-----------------------------
//Prima
//-----------------------------
void prima_output(void)
{
  unsigned int ledbit;
  //LED-1
  ledbit=finalbigendian[0]&0x01;
  if(ledbit==0)
    digitalWrite(22, LOW);
  else
    digitalWrite(22, HIGH);
  //LED-2
  ledbit=finalbigendian[0]&0x02;
  if(ledbit==0)
    digitalWrite(21, LOW);
  else
    digitalWrite(21, HIGH);
  //LED-3
  ledbit=finalbigendian[0]&0x04;
  if(ledbit==0)
    digitalWrite(20, LOW);
  else
    digitalWrite(20, HIGH);
  //LED-4
  ledbit=finalbigendian[0]&0x08;
  if(ledbit==0)
    digitalWrite(2, LOW);
  else
    digitalWrite(2, HIGH);
  //LED-5
  ledbit=finalbigendian[0]&0x10;
  if(ledbit==0)
    digitalWrite(3, LOW);
  else
    digitalWrite(3, HIGH);
  //LED-6
  ledbit=finalbigendian[0]&0x20;
  if(ledbit==0)
    digitalWrite(8, LOW);
  else
    digitalWrite(8, HIGH);
  //LED-7
  ledbit=finalbigendian[0]&0x40;
  if(ledbit==0)
    digitalWrite(9, LOW);
  else
    digitalWrite(9, HIGH);
  //LED-8
  ledbit=finalbigendian[0]&0x80;
  if(ledbit==0)
    digitalWrite(6, LOW);
  else
    digitalWrite(6, HIGH);
  //LED-9
  ledbit=finalbigendian[0]&0x0100;
  if(ledbit==0)
    digitalWrite(7, LOW);
  else
    digitalWrite(7, HIGH);
  //LED-10
  ledbit=finalbigendian[0]&0x0200;
  if(ledbit==0)
    digitalWrite(25, LOW);
  else
    digitalWrite(25, HIGH);
  //LED-11
  ledbit=finalbigendian[0]&0x0400;
  if(ledbit==0)
    digitalWrite(23, LOW);
  else
    digitalWrite(23, HIGH);
  //LED-12
  ledbit=finalbigendian[0]&0x0800;
  if(ledbit==0)
    digitalWrite(32, LOW);
  else
    digitalWrite(32, HIGH);
  //LED-13
  ledbit=finalbigendian[0]&0x1000;
  if(ledbit==0)
    digitalWrite(34, LOW);
  else
    digitalWrite(34, HIGH);
  //LED-14
  ledbit=finalbigendian[0]&0x2000;
  if(ledbit==0)
    digitalWrite(36, LOW);
  else
    digitalWrite(36, HIGH);
  //LED-15
  ledbit=finalbigendian[0]&0x4000;
  if(ledbit==0)
    digitalWrite(5, LOW);
  else
    digitalWrite(5, HIGH);
  //LED-16
  ledbit=finalbigendian[0]&0x8000;
  if(ledbit==0)
    digitalWrite(48, LOW);
  else
    digitalWrite(48, HIGH);
  
  //LED-17
  ledbit=finalbigendian[1]&0x01;
  if(ledbit==0)
    digitalWrite(46, LOW);
  else
    digitalWrite(46, HIGH);
  //LED-18
  ledbit=finalbigendian[1]&0x02;
  if(ledbit==0)
    digitalWrite(38, LOW);
  else
    digitalWrite(38, HIGH);
  //LED-19
  ledbit=finalbigendian[1]&0x04;
  if(ledbit==0)
    digitalWrite(30, LOW);
  else
    digitalWrite(30, HIGH);
  //LED-20
  ledbit=finalbigendian[1]&0x08;
  if(ledbit==0)
    digitalWrite(28, LOW);
  else
    digitalWrite(28, HIGH);
  //LED-21
  ledbit=finalbigendian[1]&0x10;
  if(ledbit==0)
    digitalWrite(26, LOW);
  else
    digitalWrite(26, HIGH);
  //LED-22
  ledbit=finalbigendian[1]&0x20;
  if(ledbit==0)
    digitalWrite(40, LOW);
  else
    digitalWrite(40, HIGH);
  //LED-23
  ledbit=finalbigendian[1]&0x40;
  if(ledbit==0)
    digitalWrite(42, LOW);
  else
    digitalWrite(42, HIGH);
  //LED-24
  ledbit=finalbigendian[1]&0x80;
  if(ledbit==0)
    digitalWrite(44, LOW);
  else
    digitalWrite(44, HIGH);
  //LED-25
  ledbit=finalbigendian[1]&0x0100;
  if(ledbit==0)
    digitalWrite(24, LOW);
  else
    digitalWrite(24, HIGH);
  //LED-26
  ledbit=finalbigendian[1]&0x0200;
  if(ledbit==0)
    digitalWrite(33, LOW);
  else
    digitalWrite(33, HIGH);
  //LED-27
  ledbit=finalbigendian[1]&0x0400;
  if(ledbit==0)
    digitalWrite(35, LOW);
  else
    digitalWrite(35, HIGH);
  //LED-28
  ledbit=finalbigendian[1]&0x0800;
  if(ledbit==0)
    digitalWrite(37, LOW);
  else
    digitalWrite(37, HIGH);
  //LED-29
  ledbit=finalbigendian[1]&0x1000;
  if(ledbit==0)
    digitalWrite(39, LOW);
  else
    digitalWrite(39, HIGH);
  //LED-30
  ledbit=finalbigendian[1]&0x2000;
  if(ledbit==0)
    digitalWrite(41, LOW);
  else
    digitalWrite(41, HIGH);
  //LED-31
  ledbit=finalbigendian[1]&0x4000;
  if(ledbit==0)
    digitalWrite(43, LOW);
  else
    digitalWrite(43, HIGH);
  //LED-32
  ledbit=finalbigendian[1]&0x8000;
  if(ledbit==0)
    digitalWrite(45, LOW);
  else
    digitalWrite(45, HIGH);
  
  //LED-33
  ledbit=finalbigendian[2]&0x01;
  if(ledbit==0)
    digitalWrite(47, LOW);
  else
    digitalWrite(47, HIGH);
  //LED-34
  ledbit=finalbigendian[2]&0x02;
  if(ledbit==0)
    digitalWrite(49, LOW);
  else
    digitalWrite(49, HIGH);
  //LED-35
  ledbit=finalbigendian[2]&0x04;
  if(ledbit==0)
    digitalWrite(27, LOW);
  else
    digitalWrite(27, HIGH);
  //LED-36
  ledbit=finalbigendian[2]&0x08;
  if(ledbit==0)
    digitalWrite(31, LOW);
  else
    digitalWrite(31, HIGH);
  //LED-37
  ledbit=finalbigendian[2]&0x10;
  if(ledbit==0)
    digitalWrite(29, LOW);
  else
    digitalWrite(29, HIGH);
}
//-----------------------------
//Prima
//-----------------------------
void prima_keystatus(void)
{
  keystatus[0] = digitalRead(A9);
  keystatus[1] = digitalRead(A8);
  keystatus[2] = digitalRead(A4);
  keystatus[3] = digitalRead(A3);
  keystatus[4] = digitalRead(A13);
  keystatus[5] = digitalRead(A14);
  keystatus[6] = digitalRead(A5);
  keystatus[7] = digitalRead(A10);
  keystatus[8] = digitalRead(A0);
  keystatus[9] = digitalRead(11);
  keystatus[10] = digitalRead(A15);
  keystatus[11] = digitalRead(A12);
  keystatus[12] = digitalRead(A11);
  keystatus[13] = digitalRead(A7);
  keystatus[14] = digitalRead(A6);
  keystatus[15] = digitalRead(A2);
  keystatus[16] = digitalRead(A1);
}
//----------------------------------------------------------------------
// Setup : Init Ethernet and Serial port
//----------------------------------------------------------------------
void setup() 
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  //
  delay(3000); 
  // Start the Ethernet Library
  Ethernet.begin(mac, Local);
  // Setup Time, someone said me to leave 2000 because some 
  // rubbish compatible boards are a bit deaf.
  delay(3000); 
  //
  Serial.println("");
  Serial.println("Cable connected");  
  Serial.print("Local IP address : ");
  Serial.println(Ethernet.localIP());
  
  timer0 = 0;
  //Digital Input
  pinMode(A0, INPUT);
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
  pinMode(A3, INPUT);
  pinMode(A4, INPUT);
  pinMode(A5, INPUT);
  pinMode(A6, INPUT);
  pinMode(A7, INPUT);
  pinMode(A8, INPUT);
  pinMode(A9, INPUT);
  pinMode(A10, INPUT);
  pinMode(A11, INPUT);
  pinMode(A12, INPUT);
  pinMode(A13, INPUT);
  pinMode(A14, INPUT);
  pinMode(A15, INPUT);
  pinMode(11, INPUT);
  //Digital Output
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  for (opcount = 20; opcount < 50; opcount++)
  {
    pinMode(opcount, OUTPUT);
  }
  //Digital Output OFF
  digitalWrite(2 , LOW);
  digitalWrite(3 , LOW);
  digitalWrite(5 , LOW);
  digitalWrite(6 , LOW);
  digitalWrite(7 , LOW);
  digitalWrite(8 , LOW);
  digitalWrite(9 , LOW);
  digitalWrite(12 , LOW);
  digitalWrite(13 , LOW);
  for (opcount = 0; opcount < 15; opcount++)
  {
    digitalWrite(20 + (opcount * 2), LOW);
    digitalWrite(21 + (opcount * 2), LOW);
  }
  readled=LOW;
  writeled=LOW;
}

//-----------------------------
// Prints the Error number
//-----------------------------
void CheckError(int ErrNo)
{
  Serial.print("Error No. 0x");
  Serial.println(ErrNo, HEX);
  
  // Checks if it's a Severe Error => we need to disconnect
  if (ErrNo & 0x00FF)
  {
    Serial.println("SEVERE ERROR, disconnecting.");
    Client.Disconnect(); 
  }
}
//////
void PLC_Read(){
                if(Client.Connected)
                        { //if we are connected to our PLC...
                   int Result=Client.ReadArea(S7AreaDB,1,1,8,&MyReadBuffer); //we can get the data from PLC and store it to Buffer array
                   if(Result==0){
                                 bit1 = S7.BitAt(MyReadBuffer,0,0); Serial.print("the value of bit1 is: "); Serial.println(bit1);
                                 bit2 = S7.BitAt(MyReadBuffer,0,1); Serial.print("the value of bit2 is: "); Serial.println(bit2);
                                 bit3 = S7.BitAt(MyReadBuffer,0,2); Serial.print("the value of bit3 is: "); Serial.println(bit3);
                                 bit4 = S7.BitAt(MyReadBuffer,0,3); Serial.print("the value of bit4 is: "); Serial.println(bit4);

                                  /*   integer1 = S7.IntegerAt(Buffer,2);Serial.print("the value of integer1 is: "); Serial.println(integer1);
                                  integer2 = S7.IntegerAt(Buffer,4);Serial.print("the value of integer2 is: "); Serial.println(integer2);

                                   word1= S7.WordAt(Buffer,6);Serial.print("the value of word1 is: "); Serial.println(word1);
                                   word2 = S7.WordAt(Buffer,8);Serial.print("the value of word2 is: "); Serial.println(word2);

                                   dint1 = S7.DintAt(Buffer,10);Serial.print("the value of dint1 is: "); Serial.println(dint1);
                                   dint2 = S7.DintAt(Buffer,14);Serial.print("the value of dint2 is: "); Serial.println(dint2);

                                   real1 = S7.FloatAt(Buffer,18);Serial.print("the value of real1 is: "); Serial.println(real1);
                                   real2 = S7.FloatAt(Buffer,22);Serial.print("the value of real2 is: "); Serial.println(real2);*/

                                   Serial.println();
                                  }
                          }
                }
  /////
//----------------------------------------------------------------------
// Main Loop
//----------------------------------------------------------------------
void loop() 
{
  int Size;
  
  Result1=Client.ConnectTo(PLC, 
                           0,  // Rack (see the doc.)
                           1); // Slot (see the doc.)

 if(Result1==0)
  {
    Result2=Client.ReadArea(S7AreaDB, // We are requesting DB access
                            1,        // DB Number = 203
                            1,        // Start from byte N.0
                            8,      // We need "Size" bytes
                            &MyReadBuffer);  // Put them into our target (Buffer or PDU)
    unsigned char i;
    for (i = 0; i < 6; i++)
    {
        bigendian1=MyReadBuffer[i]&0xff;
        bigendian2=MyReadBuffer[i]&0xff00;
        finalbigendian[i]=(bigendian1<<8) | (bigendian2>>8);
    }
    //Data Write
    keysensecount=0;
    for (i = 0; i < 17; i++)
    {
      if(keystatus[i]==HIGH)
      {
        keysensecount++;
        keynumber=i+1;
      }
    }
    if(keysensecount==0 || keysensecount>1)
    {
      keynumber=0;
    }
    finalkey[0]=keynumber;
    outputdata[0] = (finalkey[0]<<8);
    finalkey[0]=(keystatus[7]<<7)|(keystatus[6]<<6)|(keystatus[5]<<5)|(keystatus[4]<<4)|(keystatus[3]<<3)|(keystatus[2]<<2)|(keystatus[1]<<1)|(keystatus[0]<<0);
    finalkey[1]=(keystatus[15]<<7)|(keystatus[14]<<6)|(keystatus[13]<<5)|(keystatus[12]<<4)|(keystatus[11]<<3)|(keystatus[10]<<2)|(keystatus[9]<<1)|(keystatus[8]<<0);
    outputdata[1] = 0xff; //(finalkey[1]<<8)|finalkey[0];
    outputdata[2] = 0xff; // keystatus[16];
    outputdata[3] = 0xff; //0x5678;//22136
    outputdata[4] = 0xff; //0x9abc;//39612
    outputdata[5] = 0xff; //0xdef0;//57072
    
    for (i = 0; i < 6; i++)
    {
      bigendian1=outputdata[i]&0xff;
      bigendian2=outputdata[i]&0xff00;
      MyWriteBuffer[i]=(bigendian1<<8)|(bigendian2>>8); 
    }
    
    Result3=Client.WriteArea(S7AreaDB, // We are requesting DB access
                             1,        // DB Number = 204
                             1,        // Start from byte N.0
                             8,     // We need "Size" bytes
                             &MyWriteBuffer);  // Put them into our target (Buffer or PDU)

   delay(1000);
    for (i = 0; i < 6; i++)
    {
      bigendian1=outputdata[i]&0x00;
      bigendian2=outputdata[i]&0x0000;
      MyWriteBuffer[i]=(bigendian1<<8)|(bigendian2>>8); 
    }

    Result3=Client.WriteArea(S7AreaDB, // We are requesting DB access
                             1,        // DB Number = 204
                             1,        // Start from byte N.0
                             8,     // We need "Size" bytes
                             &MyWriteBuffer);  // Put them into our target (Buffer or PDU)
    delay(1000);
    //Key Status 
      prima_keystatus();
    //  
    if(Result2==0)
    {
   /*  switch (Result2)
     {
      case 1:
      Serial.println("1");
      break;
      case 2:
      Serial.println("2");
      break;
     }
     if (readled == HIGH)
      {
        readled = LOW;
        digitalWrite(12 , LOW);
      }
      else
      {
        readled = HIGH;
        digitalWrite(12 , HIGH);
      }*/
      PLC_Read();
    }
    else
    {
      readled = LOW;
      digitalWrite(12 , LOW);
      Serial.println("Error in Result2");
      CheckError(Result2);
    }
    
    if(Result3==0)
    {
      if (writeled == HIGH)
      {
        writeled = LOW;
        digitalWrite(13 , LOW);
      }
      else
      {
        writeled = HIGH;
        digitalWrite(13 , HIGH);
      }
    }
    else
    {
      writeled = LOW;
      digitalWrite(13 , LOW);
      Serial.println("Error in Result3");
      CheckError(Result3);
    }
    
    if (Result2 && Result3==0)
    {
      delay(50); 
    }
  }
  else
  {
    digitalWrite(12 , LOW);
    digitalWrite(13 , LOW);
    Serial.println("Error in Result1");
    CheckError(Result1);
    Ethernet.begin(mac, Local);
    delay(3000); 
  }
}

Still I am not able to find my mistake in reading portion.
Kindly guide me regarding the same.

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