Author: Syed Shanu
India
In this article I will explain how to communicate with PLC (Programmable
Logic Controller). I started my PLC
communication program using
.NET from 2007.
For basic understanding of what is PLC
use Google, because basically iam not a PLC
Engineer or Electrical Engineer, but I will explain to you about how
to connect PLC using .NET
programs, how to read data from PLC,
and how to write data to PLC. My
sample programs are all based on MELSEC PLC
using TCP/IP Communication.
There are different Kind of PLC
available like MELSEC ,SIMENS and etc,For each
PLC Communication there are different type of
protocols available. Today in this demo program I have used TCP IP
Communication for MELSEC PLC.
Here I have mentioned .NET programs instead of a language in
.NET. This has meaning because today in my article you will find 4
Zip files:
-
ShanuMelsecPLCComponent.ZIP contains the
PLC component DLL source code. I started
PLC communication
programming in 2007. At that time I was coding using
VB.NET. I created my own Winsock component using VB.NET. Even
now for PLC communication I
am using the same Winsock component MelsecPLC.dll in my projects
for PLC communication. In
that component I have created simple functions as
Connect ,Disconnect , Read , Write ,
and a DataArrival event.
In my sample project I have attached I have used the same DLL.
-
ShanuPLCC#.NetSample.ZIP contains a C# sample program that
demonstrates how to connect, read,
and write
to PLC using MelsecPLC.dll.
-
ShanuPLCVB.NetSample.ZIP contains a VB.NET sample program that
demonstrates how to connect, read,
and write to PLC using MelsecPLC.dll.
-
ShanuPLCWPF.Net.ZIP contains a WPF sample program that
demonstrates how to connect, read,
and write to
PLC using MelsecPLC.dll.
Before we are start PLC communication
programming, I like to explain to you the read and write
processes in PLC communication.
Read Data from PLC
PLC Read Command: To
read data from PLC we need to
send the command to PLC,
basically the command we send will be like this:
"500000FF03FF000018000A04010000D*0095000001";
Collapse | Copy
Code
String cmd = "";
cmd = cmd + "5000" ; cmd = cmd + "00" ; cmd = cmd + "FF" ; cmd = cmd + "03FF" ; cmd = cmd + "00" ; cmd = cmd + "001C" ;cmd = cmd + "000A"; cmd = cmd + "0401"; cmd = cmd + "0000" ;cmd = cmd +"D*" ;cmd = cmd + "009500"; cmd = cmd + "0001";
Write data to PLC
PLC Write Command: To write data
to PLC we need to send the
command to PLC, basically the
command we send will be like this:
"500000FF03FF00001C000A14010000D*0095010002".
Collapse | Copy
Code
String cmd = "";
cmd = cmd + "5000";cmd = cmd + "00";cmd = cmd + "FF";cmd = cmd + "03FF";cmd = cmd + "00";cmd = cmd + "001C";cmd = cmd + "000A";cmd = cmd + "1401";cmd = cmd + "0000";cmd = cmd + "D*";cmd = cmd + "009501"; cmd = cmd + "0002";
You can see the difference, to read
we use "0401" and "009500" but for write we use "1401" and "009501".
The detailed code will be listed below.
2
I have attached VB.NET, C#.NET, and WPF sample programs for
PLC communication in this
article but for explanation here I have used C# code. Here I have
used my component MelsecPLC.dll in
the test project. First add MelsecPLC.dll to
your project.
1. Delcare MelsecPLC.dll in form
Collapse | Copy
Code
using MelsecPLC;
2. Variable Declarations
Collapse | Copy
Code
public MelsecPLC.Winsock winsock1; string Jig01;
3. Connect (PLC Connection)
For connection we need the PLC
IP address. Here my PLC IP
address is “10.126.224.221”. Enter the local port and remote port.
Here I have used “1027” for the local port and “8000” for Remote
port. In the form load, we call the PLCConnect function
and we create a MelsecPLC DataArrival event.
The DataArrival event
will be triggered when PLC sends data to PC (our computer).
The detailed connect functions and DataArrival declaration in the
form load is listed below.
Collapse | Copy
Code
private void Form1_Load(object sender, EventArgs e)
{
winsock1Connect();
winsock1.DataArrival +=
new MelsecPLC.Winsock.DataArrivalEventHandler(winsock1_DataArrival);
timer1.Enabled = true;
timer1.Start();
}
private void winsock1Connect()
{
try
{
if (winsock1.GetState.ToString() != "Connected")
{
winsock1.LocalPort = 1027;
winsock1.RemoteIP ="10.126.224.221";
int a = 8000;
winsock1.RemotePort = 8000;
winsock1.Connect();
}
}
catch (Exception ex)
{
}
}
4. DataArrival Event
In the DataArrival event
we get the actual data send by the PLC
after Read Signal is sent to PLC.
This event will trigger whenever PLC
sends data to the PC. To get data from PLC
we use the winsock1.GetData() method.
Collapse | Copy
Code
private void winsock1_DataArrival(MelsecPLC.Winsock sender, int BytesTotal)
{
String s = String.Empty;
winsock1.GetData(ref s);
Jig01 = s;
}
5. Read Data from PLC
To read data from PLC we need to
send the signal to PLC for data
read. I have explained the read functions in my article
introduction. To send read signal to PLC
here we use the winsock1.Send() method.
Collapse | Copy
Code
private void btnRead_Click(object sender, EventArgs e)
{
if (winsock1.GetState.ToString() != "Connected")
{
winsock1Connect();
}
String cmd = "";
String OutAddress = "0001";
cmd = "";
cmd = cmd + "5000" ; cmd = cmd + "00" ; cmd = cmd + "FF" ; cmd = cmd + "03FF" ; cmd = cmd + "00" ; cmd = cmd + "001C" ; cmd = cmd + "000A"; cmd = cmd + "0401"; cmd = cmd + "0000" ; cmd = cmd +"D*" ; cmd = cmd + "009500"; cmd = cmd + OutAddress; winsock1.Send(cmd);
}
6. Write Data to PLC
To write data to PLC we need to
send the signal to PLC for data
write. I have explained the write functions in my article
introduction. To send a write signal to PLC here we use the winsock1.Send() method.
Collapse | Copy
Code
private void btnWrite_Click(object sender, EventArgs e)
{
if (winsock1.GetState.ToString() != "Connected")
{
winsock1Connect();
}
String cmd = "";
String OutAddress = txtWrite.Text.Trim();
cmd = "";
cmd = cmd + "5000"; cmd = cmd + "00"; cmd = cmd + "FF"; cmd = cmd + "03FF"; cmd = cmd + "00"; cmd = cmd + "001C"; cmd = cmd + "000A"; cmd = cmd + "1401"; cmd = cmd + "0000"; cmd = cmd + "D*"; cmd = cmd + "009501"; cmd = cmd + OutAddress; winsock1.Send(cmd);
}
3
I love to work and play with the HMI (Human Interface Program). I
have worked with several HMI programs using C#, like
PLC, Sensor Programming, and
Nutrunner tool communication program. I want the end users who read
this article to benefit from this program.
News:
1
UCanCode Advance E-XD++
CAD Drawing and Printing Solution
Source Code Solution for C/C++, .NET V2023 is released!
2
UCanCode Advance E-XD++
HMI & SCADA Source Code Solution for C/C++, .NET V2023 is released!
3
UCanCode
Advance E-XD++ GIS SVG Drawing and Printing Solution
Source Code Solution for C/C++, .NET V2023 is released!
PLC_Programming_VB.zip
Shanu_PLC_Csharp.Net_Sample.zip |