Kit điều khiển công suất đối tượng: Bộ điều khiển đối tượng lò nhiệt đã được tích hợp vào Kit điều khiển trung tâm có dạng như Hình 1: Hình 1: Kit đối tượng điều khiển công suất lò nhi
Trang 1THÍ NGHIỆM ĐO LƯỜNG & ĐIỀU KHIỂN
BẰNG MÁY TÍNH BTN #3: GIAO TIẾP MODBUS TCP/IP VỚI PLC S7-1200
THÁNG 4 NĂM 2022
BỘ MÔN TỰ ĐỘNG, KHOA ĐIỆN ĐIỆN TỬ - ĐẠI HỌC BÁCH KHOA TP.HCM
Trang 2
BTN 3: GIAO TIẾP MODBUS TCP/IP VỚI PLC S7-1200
I MỤC ĐÍCH THÍ NGHIỆM:
• Giúp sinh viên củng cố kiến thức thiết lập và lập trình giao diện kết nối ngoại vi qua cổng LAN
• Nắm bắt và hiểu sâu về giao thức truyền thông Modbus TCP/IP
• Lập trình giao tiếp dữ liệu với giao thức Modbus TCP/IP trên phần mềm
• Cấu hình và sử dụng lệnh Modbus TCP/IP trên PLC S7-1200
• Lập trình thu thập dữ liệu thông qua kết nối TCP/IP
• Nắm bắt cấu trúc phần cứng của hệ thống điều khiển nhiệt độ và lập trình, kiểm chứng
và đánh giá chất lượng điều khiển hệ thống điều khiển nhiệt độ
II CHUẨN BỊ THÍ NGHIỆM:
Trước khi học thí nghiệm, sinh viên cần tìm hiểu trước các nội dung sau:
- Tìm hiểu về giao thức MODBUS, bao gồm cả MODBUS RTU, ASCII và TCP/IP
- Tìm hiểu cách lập trình PLC S7-1200 là một MODBUS Server
- Tìm hiểu cách lập trình giao diện máy tính bằng ngôn ngữ C# trên Visual Studio, giao tiếp TCP/IP với PLC S7-1200
- Tìm hiểu cách điều khiển mô hình lò nhiệt (sinh viên có thể tham khảo bài 4 Thí nghiệm Lý thuyết Điều khiển nâng cao)
III GIỚI THIỆU MÔ HÌNH THÍ NGHIỆM
A Kit thí nghiệm trung tâm – Sinh viên xem trong Bài thí nghiệm 1
B Kit điều khiển công suất đối tượng:
Bộ điều khiển đối tượng lò nhiệt đã được tích hợp vào Kit điều khiển trung tâm có dạng như Hình 1:
Hình 1: Kit đối tượng điều khiển công suất lò nhiệt
Trang 3- Tín hiệu GND là mass chung giữa kit điều khiển trung tâm và kit đối tượng (đã được nối ngầm)
- PLS1 là tín hiệu điều khiển công suất lò nhiệt, trong đó mức cao (24V) là kích mở
lò nhiệt, mức thấp (0V) là ngắt lò nhiệt
- Lưu ý: Để lò nhiệt hoạt động thì núm vặn nhiệt độ phải giữ nguyên một mức trong
suốt quá trình hoạt động (nên đặt ở mức nhiệt độ cao nhất là 230 độ), núm vặn
hẹn giờ phải được vặn khỏi vị trí 0
IV THÍ NGHIỆM:
A Thí nghiệm 1: Kết nối Modbus giữa PLC và PC
Đầu tiên, sinh viên phải lập trình PLC để cấu hình thiết bị này là một MODBUS
Server Sinh viên tham khảo Bài thí nghiệm 1 để biết cách tạo một project mới trong
TIA Portal Sau khi tạo project mới, lập trình các bước tiếp theo như sau:
Tạo data block cấu hình hoạt động Modbus Server:
Trong trường CONNECT, thiết lập các thông số khởi tạo như sau (các thông số còn lại giữ nguyên):
- InterfaceId = 64
- ID = 64
- LocalPort = 502
Trang 4Tạo data block trao đỗi dữ liệu giữa PLC và máy tính như sau:
Trong chương trình chính, gọi hàm Modbus server V4.0 như sau (sinh viên có thể tìm trong Instructions à Communication à Others à Modbus TCP à MB_SERVER)
Sau khi hoàn tất, sinh viên nạp chương trình xuống PLC
Trang 5Tiếp theo, sinh viên lập trình kết nối Modbus TCP giữa PC và PLC đọc và ghi multi register với function code 16 (write multi registers) và 03 (read holding registers)
Thiết kế giao diện có dạng như hình dưới:
Thực hiện chương trình C# cho phép đọc và ghi 6 thanh ghi dữ liệu từ PLC như giao diện trên
- Địa chỉ PLC kết nối là 192.168.0.1, Port 502 cho kết nối Modbus
- Nút nhấn Write điều khiển ghi dữ liệu vào xuống PLC
- Nút nhấn Read yêu cầu đọc nội dung các thanh ghi từ PLC
- Địa chỉ bắt đầu ghi và đọc được thiết lập ở nội dung Start Address
Hướng dẫn thực hiện:
- Để kết nối theo chuẩn TCP/IP, cần sử dụng các thư viện hỗ trợ sau:
using System.Net;
using System.Net.Sockets;
Trang 6- Khởi tạo và kết nối
this.mSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
this.bufferReceiver = new byte[READ_BUFFER_SIZE];
this.bufferSender = new byte[WRITE_BUFFER_SIZE];
this.mSocket.SendBufferSize = READ_BUFFER_SIZE;
this.mSocket.ReceiveBufferSize = WRITE_BUFFER_SIZE;
IPEndPoint sever = new IPEndPoint(IPAddress.Parse(txtIPAddress.Text),
this.mSocket.Connect(sever);
Dựa trên giao thức Modbus, thông tin địa chỉ, mã lệnh, và dữ liệu được thiết lập bởi các hàm ghi và đọc dữ liệu như sau:
- Hàm tạo khung truyền Modbus cho thao tác ghi dữ liệu
private byte[] WriteMultipleRegistersMsg(ushort id, byte slaveAddress, ushort
starAddress, byte function, byte[] values)
{
int byteCount = values.Length;
byte[] frame = new byte[13 + byteCount];
frame[0] = (byte)(id >> 8);
frame[1] = (byte)id;
frame[8] = (byte)(starAddress >> 8);
frame[9] = (byte)starAddress;
ushort amount = (ushort)(byteCount / 2);
frame[10] = (byte)(amount >> 8);
frame[11] = (byte)amount;
frame[12] = (byte)byteCount;
Array.Copy(values, 0, frame, 13, byteCount);
return frame;
}
- Hàm tạo protocol Modbus cho thao tác đọc dữ liệu
private byte[] ReadHoldingRegisterMsg(ushort id, byte slaveAddress, ushort starAddress,
byte function, uint numberOfPoints)
{
byte[] frame = new byte[12];
Trang 7frame[0] = (byte)(id >> 8);
frame[1] = (byte)id;
frame[8] = (byte)(starAddress >> 8);
frame[9] = (byte)starAddress;
frame[10] = (byte)(numberOfPoints >> 8);
frame[11] = (byte)numberOfPoints;
Trang 8private const int READ_BUFFER_SIZE = 50;
private const int WRITE_BUFFER_SIZE = 50;
private byte[] bufferReceiver = null;
private byte[] bufferSender = null;
private Socket mSocket = null;
public void Connect()
Trang 10throw new Exception("06/0x06: Slave Device Busy.");
string result = string.Empty;
foreach (var item in data)
Trang 11string result = string.Empty;
result = string.Format("Register {0}: ", data);
//Convert a Byte Array To an Int Array
public static short[] ConvertByteArrayToIntArray(byte[] bytes)
//Convert a Int To a Byte Array
public static byte[] ConvertIntToByteArray(short value)
//Convert a Int Array To a Byte Array
public static byte[] ConvertIntArrayToByteArray(ushort[] value)
{
byte[] arr = new byte[value.Length*2];
int counter = 0;
Trang 12for (int cnt = 0; cnt < value.Length; cnt++)
Trang 13int byteCount = values.Length;
byte[] frame = new byte[13 + byteCount];
Trang 14ushort startAddress = (ushort)txtWrAddress.Value;
ushort value1 = (ushort)Convert.ToInt16(txtReg1.Text);
ushort value2 = (ushort)Convert.ToInt16(txtReg2.Text);
ushort value3 = (ushort)Convert.ToInt16(txtReg3.Text);
ushort value4 = (ushort)Convert.ToInt16(txtReg4.Text);
ushort value5 = (ushort)Convert.ToInt16(txtReg5.Text);
ushort value6 = (ushort)Convert.ToInt16(txtReg6.Text);
ushort[] input = new ushort[6] { value1, value2, value3, value4, value5, value6 };
byte[] values = ConvertIntArrayToByteArray(input);
txtError.Text = string.Empty;
byte[] frame = WriteMultipleRegistersMsg(id, slaveAddress, startAddress, function, values);
txtSendMess.Text = Display(frame);
Trang 15byte[] buffReceiver = this.Read();
int SizeByte = bufferReceiver[8];
byte[] byteMsg = null;
if (function != bufferReceiver[7])
{
byte[] errorbytes = new byte[3];
Array.Copy(bufferReceiver, 6, errorbytes, 0, errorbytes.Length);
this.CheckValidate(errorbytes);
byteMsg = new byte[9];
Array.Copy(bufferReceiver, 0, byteMsg, 0, byteMsg.Length);
}
else
{
byteMsg = new byte[READ_BUFFER_SIZE];
Array.Copy(bufferReceiver, 0, byteMsg, 0, byteMsg.Length);
Trang 16byte[] buffReceiver = this.Read();
int SizeByte = bufferReceiver[8];
short[] temp = null;
if (function != bufferReceiver[7])
{
byte[] byteMsg = new byte[9];
Array.Copy(bufferReceiver, 0, byteMsg, 0, byteMsg.Length);
txtRecMess.Text = Display(byteMsg);
byte[] errorbytes = new byte[3];
Array.Copy(bufferReceiver, 6, errorbytes, 0, errorbytes.Length);
this.CheckValidate(errorbytes);
}
else
{
byte[] byteMsg = new byte[9 + SizeByte];
Array.Copy(bufferReceiver, 0, byteMsg, 0, byteMsg.Length);
byte[] data = new byte[SizeByte];
txtRecMess.Text = Display(byteMsg);
Array.Copy(bufferReceiver, 9, data, 0, data.Length);
temp = ConvertByteArrayToIntArray(data);
Trang 17}
if (temp == null) return;
string result = string.Empty;
foreach (var item in temp)
- Chạy chương trình và kiểm tra truy xuất dữ liệu giữa PLC và máy tính (mở đồng
thời chương trình giao diện máy tính và chức năng Monitoring trong TIA Portal
để kiểm tra dữ liệu BUFF)
- Báo cáo kết quả với thầy/cô hướng dẫn thí nghiệm
Trang 18B Thí nghiệm 2: Xây dựng các bộ điều khiển ON-OFF và PID cho mô hình
lò nhiệt
1 Điều khiển ON-OFF cho mô hình lò nhiệt Chuẩn bị thí nghiệm:
Ø Đấu dây kết nối giữa lò nhiệt và Panel điều khiển như sau:
o Nối ngõ ra Q0.0 với xung PLS1 của Bộ công suất
o Nối tín hiệu Analog từ bộ transmitter vào ngõ vào Analog AI1
Ø Tính toán thông số nhiệt độ:
o Transmitter cho ra điện áp từ 2V đến 10V tương ứng với nhiệt độ từ 0oC đến
500oC
o Giá trị chuyển đổi ADC nằm trong ô nhớ IW64 của PLC
o Giá trị của IW64 tại 10V là 27648
Như vậy có thể biến đổi tuyến tính từ giá trị của thanh ghi IW64 ra nhiệt độ theo công thức:
𝑡 = 𝑎 + 𝑏 ∗ 𝐼𝑊64 Sinh viên dựa vào các dữ kiện đã cho để xác định a và b
Ø Thiết lập thời gian hẹn giờ của lò nhiệt là 60 phút, núm vặn nhiệt độ nên đặt mức cao
- Chu kì lấy mẫu là 0.5s
- Việc điều khiển được thực hiện từ máy tính thông qua việc ghi tín hiệu điều khiển vào thanh ghi BUFF.data[0]
- Tín hiệu nhiệt độ được gửi lên PC thông qua thanh ghi BUFF.data[6]
- Sử dụng công cụ Chart (hoặc ZedGraph) để vẽ đồ thị nhiệt độ theo thời gian
- Từ kết quả thu được, sinh viên tính hệ số của bộ điều khiển PID theo công thức:
Trang 192 Điều khiển PID mô hình lò nhiệt Hướng dẫn thiết lập PWM cho mô hình lò nhiệt:
- Để điều khiển lò nhiệt với tỉ lệ phần trăm công suất trải dài từ 0% đến 100%, có thể sử dụng nhiều cách khác nhau Một phương án đơn giản trước đây là đóng mở theo chu kì điều khiển, ví dụ cần đưa 60% công suất cho lò nhiệt thì có thể lập trình trong 100 chu kì lấy mẫu thì 60 chu kì mở lò nhiệt và 40 chu kì đóng Phương
án này thường gọi là lập trình PWM phần mềm (software PWM), thường tiêu tốn nhiều thời gian để lập trình và chỉ hữu dụng khi phần cứng không có ngoại vi PWM (ví dụ như vi điều khiển 8051) Đối với thiết bị PLC S7-1200 có hỗ trợ sẵn
PWM nên có thể sử dụng trực tiếp chức năng này để tiết kiệm thời gian hơn
- Sinh viên có thể thiết lập PWM trên chân P0.0 của PLC S7-1200 theo các bước sau Đầu tiên, vào Device configuration à Properties à General à Pulse Generators (PTO/PWM) à PTO1/PWM1, chọn Enable this pulse generator để
kích hoạt chức năng PTO/PWM
Trang 20- Chuyển sang tab Parameter assignment, sinh viên thiết lập như hình dưới để cấu hình chức năng PWM
- Kiểm tra ngõ ra PWM là chân Q0.0 trong tab Hardware outputs
- Kiểm tra thanh ghi để điều khiển PWM là thanh ghi QW1000 trong tab I/O addresses
Trang 21- Kiểm tra thông số HID trong tab Hardware identifier
- Trong chương trình chính: tạo hàm CTRL_PWM để cấu hình điều khiển PWM như hình dưới Trong đó ngõ vào PWM chính là thông số HID đã kiểm tra ở phía trên
- Để cập nhật thông số trong mỗi chu kì, ghi giá trị điều khiển vào thanh ghi QW1000 Lưu ý rằng với cấu hình như đã hướng dẫn ở trên, thanh ghi QW1000 bằng 0 tương ứng với việc ngắt lò nhiệt hoàn toàn (0% công suất), thanh ghi QW1000 bằng 100 ứng với việc cấp 100% công suất
Yêu cầu điều khiển PID cho mô hình lò nhiệt:
- Điều khiển PID cho hệ thống lò nhiệt, nhiệt độ đặt do người dùng nhập vào trên giao diện máy tính
- Chu kì lấy mẫu là 0.2s
- Các thông số của bộ điều khiển xác định theo công thức ở phần điều khiển OFF, phương trình của bộ điều khiển PID trong miền rời rạc như sau (trong đó k
ON-là thời điểm hiện tại, k-1 ON-là trước đó 1 chu kì lấy mẫu):
Trang 22- Việc điều khiển được thực hiện từ máy tính thông qua việc ghi tín hiệu điều khiển (là phần trăm công suất) vào thanh ghi BUFF.data[0]
- Tín hiệu nhiệt độ được gửi lên PC thông qua thanh ghi BUFF.data[6]
- Ngoài ra, các thông số KP, TI, TD có thể được người dùng nhập vào trên giao diện máy tính
- Sử dụng công cụ Chart (hoặc ZedGraph) để vẽ đồ thị nhiệt độ theo thời gian
Lưu ý: sinh viên phải thực hiện scale tín hiệu điều khiển u(k) từ 0 đến 1 thành phần trăm
công suất từ 0 đến 100 phần trăm
Nội dung Báo cáo thí nghiệm:
- Trình bày giải thuật điều khiển ON/OFF được thực hiện ở thí nghiệm 2.1?
- Trình bày giải thuật điều khiển PID được thực hiện ở thí nghiệm 2.2?
- (Các) đoạn Chương trình liên quan đến thuật toán điều khiển ON/OFF?
- (Các) đoạn Chương trình liên quan đến thuật toán điều khiển PID?
- Nêu cách thiết lập PLC hoạt động phát xung PWM, chương trình PLC nhận lệnh và thực hiện điều khiển PWM?
- Trình bày các giải pháp khác có thực hiện cho 2 bài toán ở thí nghiệm 2.1 và 2.2
Trang 23Bảng nhận xét, đánh giá của GV Thông tin Sinh viên:
Nhóm:
Họ và Tên SV:
MSSV:
Các Nhiệm vụ và nội dung thực hiện trong buổi thí nghiệm:
Đánh giá của GV:
STT Tiêu chí Mức 1 Mức 2 Mức 3 Mức 4 Mức 5
1 Chuẩn bị Bài TN
2 Mức đô hoàn thành BTN
3 Mức độ nắm bắt nội dung thí nghiệm
4 Mức độ giải quyết các bài toán trực tiếp của GVHD
5 Nội dung báo cáo thí nghiệm
6 Mức độ trả lời các câu hỏi trong BTN
7 Tính sáng tạo của giải thuật đề xuất
8 Liên kết giữa các thành viên trong nhóm
Các ý kiến khác: