How to communication PLC and Microcontroller?
This article about communication between PLC and Microcontroller, for PLC use Allen Bradley PLC and Microcontroller use Arduino with chip from Atmel.
On Allen Bradley PLC use Micrologix 1000 and DF1 Protocol, and use software: Arduino IDE for programming on microcontroller, download from arduino.cc/en/main/software.
In this application use keypad input on microcontroller and display to output on micrologix 1000 of allen bradley PLC.
Connection between Keypad, Arduino Microcontroller, Male RS232 Module, PLC Cable and Micrologix PLC:
How does it work:
1. Press the Number "0", then the output O:0/0 is lit on the Micrologix PLC.
2. Press the Number "1", then the output O:0/1 is lit on the Micrologix PLC.
3. Press the Number "2", then the output O:0/2 is lit on the Micrologix PLC.
4. Press the Number "3", then the output O:0/3 is lit on the Micrologix PLC.
5. Press the Number "4", then the output O:0/4 is lit on the Micrologix PLC.
6. Press the Number "5", then the output O:0/5 is lit on the Micrologix PLC.
7. Press the Number "6", then the output O:0/6 is lit on the Micrologix PLC.
8. Press the Number "7", then the output O:0/7 is lit on the Micrologix PLC.
9. Press the Number "8", then the output O:0/8 is lit on the Micrologix PLC.
10. Press the Number "9", then the output O:0/9 is lit on the Micrologix PLC.
Character to the value to compare in PLC Programming:
1. The character "0": The value to compare in the PLC is 48
2. The character "1": The value to compare in the PLC is 49
3. The character "2": The value to compare in the PLC is 50
4. The character "3": The value to compare in the PLC is 51
5. The character "4": The value to compare in the PLC is 52
6. The character "5": The value to compare in the PLC is 53
7. The character "6": The value to compare in the PLC is 54
8. The character "7": The value to compare in the PLC is 55
9. The character "8": The value to compare in the PLC is 56
10. The character "9": The value to compare in the PLC is 57
PLC Ladder Diagram:
Download Project File:
1. Arduino Microcontroller Programming: click here
2. PLC Ladder Programming: click here
3. Keypad Library, click here
Copy-Paste Keypad Library to Folder C:\Program Files (x86)\Arduino\libraries
Arduino Code:
#include
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte colPins[COLS] = {5, 4, 3, 2};
byte rowPins[ROWS] = {9, 8, 7, 6};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int data = 0;
static unsigned int CRC16table[] = {0x0,0xc0c1,0xc181,0x140,0xc301,0x3c0,0x280, 0xc241,
0xc601, 0x6c0, 0x780, 0xc741, 0x500, 0xc5c1, 0xc481, 0x440,
0xcc01, 0xcc0, 0xd80, 0xcd41, 0xf00, 0xcfc1, 0xce81, 0xe40,
0xa00, 0xcac1, 0xcb81, 0xb40, 0xc901, 0x9c0, 0x880,
0xc841, 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81,
0x1a40, 0x1e00, 0xdec1, 0xdf81, 0x1f40,
0xdd01, 0x1dc0, 0x1c80, 0xdc41, 0x1400, 0xd4c1, 0xd581, 0x1540,
0xd701, 0x17c0, 0x1680, 0xd641, 0xd201, 0x12c0, 0x1380, 0xd341,
0x1100, 0xd1c1, 0xd081, 0x1040, 0xf001, 0x30c0, 0x3180, 0xf141,
0x3300, 0xf3c1, 0xf281, 0x3240, 0x3600, 0xf6c1, 0xf781, 0x3740,
0xf501, 0x35c0, 0x3480, 0xf441, 0x3c00, 0xfcc1, 0xfd81,
0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41, 0xfa01, 0x3ac0, 0x3b80,
0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, 0x2800,
0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, 0xee01,
0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40, 0xe401,
0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, 0x2200,
0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, 0xa001,
0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, 0x6600,
0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441, 0x6c00,
0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, 0xaa01,
0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, 0x7800,
0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41, 0xbe01,
0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40, 0xb401,
0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, 0x7200,
0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, 0x5000,
0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241, 0x9601,
0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, 0x9c01,
0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, 0x5a00,
0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841, 0x8801,
0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, 0x4e00,
0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, 0x4400,
0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, 0x8201,
0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040};
int Order_Inc = random(1, 127);
void setup(){
Serial.begin(9600);
}
void loop(){
char key = keypad.getKey();
if(keypad.getState()==1 || keypad.getState()==2){
if (key != NO_KEY){
data = key;
}
}else{
data =0;
}
SendData(data);
}
void SendData(int data) {
byte writedata[20];
if (Order_Inc < 65535)
{
Order_Inc += 1;
}else{
Order_Inc = 1;
}
writedata[0] = (byte)0x10;
writedata[1] = (byte)0x2;
writedata[2] = (byte)0;
writedata[3] = (byte)0;
writedata[4] = (byte)0xf;
writedata[5] = (byte)0;
writedata[6] = (byte)(Order_Inc & 255);
writedata[7] = (byte)(Order_Inc >> 8);
writedata[8] = (byte)0xaa;
writedata[9] = (byte)2;
writedata[10] = (byte)7;
writedata[11] = (byte)0x89;
writedata[12] = (byte)0;
writedata[13] = (byte)0;
writedata[14] = (byte)(data & 0xff);
writedata[15] = (byte)((data >> 8) & 0xff);
byte dataforcrc[14];
for (int i = 2; i<=15; i++)
{
dataforcrc[i-2] = writedata[i];
}
//CRC Computations
unsigned int CRC = 0;
byte bytT = 0;
for (int i = 0; i <14 i="" p=""> {
bytT = (byte)((CRC & 0xff) ^ dataforcrc[i]);
CRC = (unsigned int)((CRC >> 8) ^ CRC16table[bytT]);
}
bytT = (byte)(CRC & 0xff ^ 3);
CRC = (unsigned int)((CRC >> 8) ^ CRC16table[bytT]);
writedata[16] = 0x10;
writedata[17] = 0x3;
writedata[18] = (byte)(CRC & 255);
writedata[19] = (byte)(CRC >> 8);
byte ACK[] = { 0x10, 0x6 };
Serial.write(ACK, sizeof(ACK));
delay(100);
Serial.write(writedata, sizeof(writedata));
delay(200);
}
14>
Labels:
Allen Bradley PLC
Allen-Bradley MicroLogix
Arduino
Arduino Microcontroller
Microcontroller
MicroLogix 1000
PLC and Arduino
PLC Application
Allen Bradley PLC
Allen-Bradley MicroLogix
Arduino
Arduino Microcontroller
Microcontroller
MicroLogix 1000
PLC and Arduino
PLC Application