Tổng hợpBài viết chia sẻ
Hướng Dẫn Kết Nối PLC Delta Với C#

Bài viết này sẽ hướng dẫn bạn cách kết nối PLC Delta với phần mềm lập trình C#, sử dụng chuẩn truyền thông Modbus RTU hoặc Modbus TCP, phục vụ các ứng dụng như SCADA mini, giám sát dữ liệu, hoặc điều khiển thiết bị từ xa.
Tổng quan về kết nối giữa PLC và C#
Khi bạn muốn đọc hoặc ghi dữ liệu từ PLC bằng phần mềm C#, bạn cần đảm bảo 3 yếu tố:
- Chuẩn giao tiếp: Modbus RTU (qua cổng COM/USB) hoặc Modbus TCP (qua mạng Ethernet).
- Cấu hình PLC đúng địa chỉ truyền thông (Slave ID, tốc độ baud, parity, v.v.).
- C# sử dụng thư viện kết nối PLC Delta với C# do bên Tuhocplc.com phát triển
Các Bước Kết Nối PLC Delta với C#
Bước 1: Cấu hình PLC Delta
Giả sử bạn đang sử dụng dòng PLC Delta DVP, bạn cần cấu hình cổng COM (RS-485 hoặc RS-232) để truyền thông.
- Mở phần mềm WPLSoft
- Vào Device Settings > Communication Port
- Thiết lập như sau:
- Protocol: Modbus ASCII
- Baud Rate: 9600
- Data Bits: 7
- Parity: None
- Stop Bit: 1
- Station No (Slave ID): 1
Bước 2: Kết nối phần cứng
Tùy theo chuẩn truyền thông, bạn cần kết nối cáp phù hợp:
- Bạn có thể kết Plc với máy tính bằng cáp nạp chương trình
- Sử dụng cổng Com để kết nối với máy tính thông qua USB – 485
- Xác định Cáp hoặc Usb đã kết nối với máy tính bằng cổng Com số mấy ? (Xác định trong Comport máy tính)
Bước 3: Tạo project C# và thêm thư viện Modbus
- Tạo Windows Forms App nhớ dùng .Net Frame Work các bạn nhé
- Add thư viện kết nối do bên mình cung cấp, thư viện tên tuhocplc.dll
Video Hướng Dẫn cách Code kết Nối Plc Với C# – Phần 1
Video Hướng Dẫn cách Code kết Nối Plc Với C# – Phần 2
Đoạn Code Trong C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Tuhocplc.PLC.Delta;
namespace PLCDelta
{
public partial class Form1 : Form
{
private ComDVP_Delta ES2 = null;
private byte address = 1;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
LoadComPorts();
}
private void LoadComPorts()
{
cb_Com.Items.Clear();
string[] ports = SerialPort.GetPortNames();
Array.Sort(ports);
foreach (string port in ports)
{
try
{
using (SerialPort sp = new SerialPort(port))
{
sp.Open();
if (sp.IsOpen)
{
cb_Com.Items.Add(port);
sp.Close();
}
}
}
catch
{
// Port đang bị chiếm hoặc không dùng được
}
}
if (cb_Com.Items.Count > 0)
cb_Com.SelectedIndex = 0;
}
private void btn_connect_Click(object sender, EventArgs e)
{
try
{
int speed = int.Parse(cb_speed.Text.ToString());
int data = int.Parse(cb_data.Text.ToString());
ES2 = new ComDVP_Delta(cb_Com.Text, speed, data, System.IO.Ports.StopBits.One, System.IO.Ports.Parity.Even);
ES2.Connection();
btn_connect.BackColor = Color.Lime;
}
catch(Exception ex)
{
MessageBox.Show(this, ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void btn_BitOn_Click(object sender, EventArgs e)
{
try
{
ES2.WriteMemoryBit(address, txt_AddressBit.Text, true);
}
catch(Exception ex)
{
MessageBox.Show(this, ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void btn_BitOff_Click(object sender, EventArgs e)
{
try
{
ES2.WriteMemoryBit(address, txt_AddressBit.Text, false);
}
catch (Exception ex)
{
MessageBox.Show(this, ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void btn_readBit_Click(object sender, EventArgs e)
{
try
{
byte[] values = ES2.ReadMemoryBits(address, "Y0", 7);// Đọc 7 Bits từ Y0 trở đi
bool[] result = Bit.ToArray(values);
Label[] labels = new Label[] { lb_Y0, lb_Y1, lb_Y2, lb_Y3, lb_Y4, lb_Y5, lb_Y6 };
for(int i = 0; i < result.Length && i < labels.Length; i++)
{
labels[i].BackColor = result[i] ? Color.Lime : Color.Gray;
}
}
catch (Exception ex)
{
MessageBox.Show(this, ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void btn_WriteWord_Click(object sender, EventArgs e)
{
try
{
short value = Convert.ToInt16(txt_ValueWord.Text);
ES2.MemoryAreaWrite(address, txt_AdressWord.Text, value);
}
catch(Exception ex)
{
MessageBox.Show(this, ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void btn_readWord_Click(object sender, EventArgs e)
{
try
{
ES2.MemoryAreaRead(address, "D0", 5, out ushort[] values);
txt_D0.Text = values[0].ToString();
txt_D1.Text = values[1].ToString();
txt_D2.Text = values[2].ToString();
txt_D3.Text = values[3].ToString();
txt_D4.Text = values[4].ToString();
}
catch (Exception ex)
{
MessageBox.Show(this, ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}




