Bài thí nghiệm 1 : Khảo sát hoạt động của ngõ vào và ngõ ra Thí nghiệm 1.1: Làm quen PLC với bài toán điều khiển START/STOP - Lập trình Ladder: - Kết quả: Chương trình chạy đúng.. Thí ng
Trang 1TRƯỜNG ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA TPHCM
Khoa Điện-Điện tử
***
BÁO CÁO THÍ NGHIỆM
ĐO LƯỜNG VÀ ĐIỀU KHIỂN BẰNG MÁY TÍNH
GVHD: Trần Hoàng Khôi NguyênNhóm A02_thứ 7 tiết 10,11,12 Tổ 8:
Trang 2BÀI THÍ NGHIỆM 1 BÀI THÍ NGHIỆM LẬP TRÌNH PLC S7-1200 – CÁC ỨNG DỤNG
LẬP TRÌNH CƠ BẢN
I Bài thí nghiệm 1 : Khảo sát hoạt động của ngõ vào và ngõ ra
Thí nghiệm 1.1: Làm quen PLC với bài toán điều khiển START/STOP
- Lập trình Ladder:
- Kết quả: Chương trình chạy đúng.
Thí nghiệm 1.2: Điều khiền hoạt động với các điều kiện ngõ vào khác nhau.
Yêu cầu: Điều khiển các đèn ngõ ra theo điều kiện cùa ngõ vào như sau:
- Default: 8 LED ngõ ra nhấp nháy chu kỳ 2s
- Nhấn nút BT1, đèn LED sáng theo thứ tự từ trái sang phải, mỗi đèn sáng trong thời gian 1s
- Nhấn nút BT2, đèn LED sáng theo thứ tự từ phải sang trái, mỗi đèn sáng trong thời gian 0.5s
Giải thuật và chương trình:
- Cho biến LED (QB0) quản lý giá trị các bit LED1-8 (Q0.0-Q0.7)
Trang 3- Tạo khối Function Block startup OB100 để truyền sẵn giá trị 255 (hoặc 16#FF vào QB0) để bật 8 đèn khi Run PLC.
- Ở Main OB1:
BT1 và BT2 tương ứng để set các trạng thái STATE_1 ( trái sang phải)
và STATE_2 (phải sang trái)
Khi ở chế độ mặc định, trong mỗi 1s (xung được tạo bởi M100.7 tương ứng 0.5Hz) thì QB0 lần lượt được truyền các giá trị 0 và 255 để led nhấp nháy với chu kỳ 2s
Trang 4 Ở STATE_1, với mỗi cạnh lênh của xung 0.5Hz ( tạo bởi MB100.7) ta có tín hiệu IN để dịch bit sang phải với khối ROR trong 1s:
Với STATE_2, ta cũng làm tương tự với xung 2Hz( tạo bởi MB100.3) để dịch bit sang trái trong 0.5s:
- Kết quả: Mạch hoạt động đúng yêu cầu.
II Bài thí nghiệm 2 : Giả lập hoạt động của máy trạng thái
Thí nghiệm 2.2 Viết chương trình phân loại sản phẩm với tín hiệu giả lập.
Mô phỏng đối tượng:
Trang 9Viết chương trình phân loại sản phẩn với tín hiệu giả lập được:
- Chọn phương pháp 1: Giải quyết bài toán theo phương pháp tuần tự với bộ tín hiệu ngõ vào là CB1_CB2_CB3; ngõ ra là N_TB_D.
- Giải thích: Khi đi vào chương trình, nếu có tín hiệu xung cạnh lên của cảm biến 1 thì bắt đầu kiểm tra trạng thái của sản phẩm Cho nó rơi vào trạng thái ngắn Tiếp theo, nếu có cả CB1 và CB2 cùng bị chặn thì là sản phẩm trung bình Cuối cùng, nếu CB1 và CB3 cùng bị chặn thì sản phẩm dài Nếu có hàng mới đi và thì bắt đầu lại chương trình.
- Lập trình Ladder:
Trang 10Khối điều kiện:
Trang 11Khối trạng thái:
Trang 13Sau khi nhận được cảm biến 3 thì bắt đầu xét trạng thái và báo đèn tín hiệu
- Nhận xét: chương trình chỉ đúng khi có từng sản phẩm đi vào, kiểm tra sản phẩm này xong mới kiểm tra sản phẩm khác.
Trang 14* Đề xuất giải thuật tối ưu, hoàn thiện giải thuật cho thí nghiệm 2.1:
- Nhận xét chương trình mô phỏng băng tải ở trên:
Chương trình mô phỏng ở trên có thể mô phỏng lần lượt các lạo sản phẩm trong cùng một lúc, tuy nhiên vẫn chưa chỉnh được tốc độ băng truyền.
- Phương pháp:
Sử dụng gán biến cho các thời gian so sánh ở trên để mô phỏng tốc độ của băng truyền Tăng thời gian Timer ứng với tốc độ chậm nhất có thể của băng tải.
* Lập bảng so sánh ưu khuyết điển của các phương án thí nghiệm trong thí nghiệm 2.2?
Có tính hệ thống Chưa hệ thống, mỗi khi
muốn thay đổi thì phải xét lại từng trường hợp.
Các yếu tố lỗi có thể
phát sinh
Nếu sản phẩm đang kiểm tra chưa chạy xong mà có sản phẩm tiếp theo đi vào thì sẽ kiểm tra được sản phẩm đó.
Vì kiểm tra được các trạng thái của điều kiện nên cho
dù trong bất cứ trường hợp nào thì cũng có thể phát hiện được sản phẩm cho dù có nhiều sản phẩm liên tiếp.
BÀI THÍ NGHIỆM 2 TRUYỀN THÔNG NỐI TIẾP PC VỚI PLC
I Thí nghiệm 1 : Làm quen với PLC S7-200
Yêu cầu 1.1 :
Trang 15Thực hiện bài toán điều khiển đèn giao thông với các thông số đèn : XA=30s, VA=3s, DA=43s, XB=40s, VB=3s,DB=33s
Code chương trình Step 7 Microwin
Network 1 // Network Title
Trang 17Yêu cầu 1.2: Cải tiến chương trình của thí nghiệm 1.1 hoạt động theo các chế
Trang 18Network 1 // Network Title // Network Comment
LDN T37
AN I0.5
************************ Network 3
LD T38
Trang 19AN T39
AN I0.5
************************ Network 6
LDN T38
AN I0.5
************************ Network 8
LD SM0.0
Trang 20Thí nghiệm cho kết quả của đèn giao thông sáng đúng yêu cầu
SW1 hoặc SW2 tác động: kết quả giống như thí nghiệm 1, chỉ có chu kì đèn sáng tắt thay đổi.
Trang 21Khi SW3 tác động: đèn vàng nhấp nháy chu kì 1 s
Trang 23II Thí nghiệm 2 : Giao tiếp giữa PC và PLC sử dụng ngắt nhận kí tự,
truyền thông qua PORT0, giao thức “9600,N,8”
Yêu cầu 2.1: Thực hiện Liên kết đơn giản giữa PLC và PC
Code C# trên Visual Studio 2013.
Theo tài liệu hướng dẫn
Trang 25private delegate void SetDeleg(string text); }
}
Chương trình PLC Step 7 Microwin
Kết quả
Trang 26Kết quả thí nghiệm : Kết quả truyền nhận giữa máy tính và thiết bị đúng với yêu cầu bài thí nghiệm đặt ra.
BÀI THÍ NGHIỆM 3 GIAO TIẾP TCP/IP
Trang 27I Thí nghiệm 1 : Kết nối Modbus giữa PLC và PC
Giao diện phần mềm:
Trang 28Kết quả thí nghiệm:
Chương trình chạy đúng với yêu cầu đề bài.
Thay đổi 1 vài giá trị ở monitor value
Trang 29Kết quả nhận được:
Trang 30II Thí nghiệm 2 : Phát triển thí nghiệm 1 điều khiển nhiệt độ
Thí nghiệm 2.1: Điều khiển ON/OFF lò nhiệt, vùng trễ ± 30C , Nhiệt độ đặt
600C Chu kỳ lấy mẫu 0.5s
- Sử dụng thanh ghi BUFF.data[0] điều khiển đóng ngắt lò nhiệt.
- Tín nhiệu nhiệt độ IW64 được đọc về PC thông qua thanh ghi BUFF.data[6].
- Bài toán điều khiển được thực hiện từ PC.
- Vẽ đồ thị quan sát nhiệt độ đặt và nhiệt độ thực
Giải thuật điều khiển ON-OFF
Tín hiệu nhiệt độ được đọc về PC qua thanh ghi BUFF.data[6].
Nếu nhiệt độ lớn hơn 60 thì ghi xuống BUFF.data[0] mức 0 lò nhiệt OFF Nếu nhiệt độ lớn nhỏ 60 thì ghi xuống BUFF.data[0] mức 1 lò nhiệt ON.
Chương trình PLC đọc và ghi dữ liệu như thí nghiệm 1.
PC nhận dữ liệu phản hồi mỗi 100ms, tính toán tín hiệu điều khiển & gửi xuống PLC.
Trang 31Thuận toán điều khiển on/off
Trong ngắt Timer, nhận dữ liệu nhiệt độ từ PLC, sau đó gọi hàm tính toán giá trị điều khiển rồi truyền xuống PLC Tạo 1 “Char” trong ngắt Timer
Kết quả thí nghiệm:
Trang 33Yêu cầu 2.2: Điều khiển PID lò nhiệt, thời gian lấy mẫu 0.2s; các thông số Kp,
Ki, Kd sinh viên tự chọn Công suất ngõ ra thay đổi từ 0-100%
- Sử dụng thanh ghi BUFF.data[0] là thông số % công suất cung cấp cho lò nhiệt.
Trang 34- Sử dụng phương pháp điều rộng xung PWM với thông số độ rộng xung từ BUFF.data[0], chu kỳ xung PWM là 1s
- Tín hiệu nhiệt độ IW64 được đọc về PC thông qua thanh ghi BUFF.data[6]
- Bài toán điều khiển được thực hiện từ PC.
- Vẽ đồ thị quan sát nhiệt độ đặt và nhiệt đô thực.
Điều khiển PID
xung với PLC, tần số 10 Hz
Trang 36Kết quả thí nghiệm: Thí nghiệm 2.1,
BÀI THÍ NGHIỆM 4:
LẬP TRÌNH CARD USB GIAO TIẾP VỚI MÁY TÍNH
I Thí nghiệm 1: Lập trình vi điều khiển sử dụng keil C:
#include <math.h>
#include <stdio.h>
#include "stm32f3xx_hal.h"
#include "main.h"
Trang 37#include "driver.h"
#include "usb_device.h"
#include "usbd_custom_hid_if.h"
- Tiến hành add các thư viện cần thiết để lập trình.
static uint8_t DI_value;
static float AO_value[2];
static int AI_value[3];
static uint32_t C0_value;
static uint32_t DO_pwm_frequency[3];
static uint16_t Ts_ms =100;//ms
static uint8_t usb_rx_buffer[64];
static uint8_t usb_tx_buffer[17];
static volatile uint8_t usb_tx_flag = 0;
static volatile uint8_t usb_rx_flag = 0;
- Khai báo các biến toàn cục
usb_tx_flag =0;
DI_value = DI_Read_All();
C0_value = Counter_Read();
AI_Read_All(AI_value);
Trang 38- Sau đó chương trình sẽ vào hàm “while(1)”, Kiểm tra cờ “usb_tx_flag”, nếu bằng 1 thì thì reset lại cờ về 0 sau đó thiết lập các hàm để truyền đi các giá trị DI, AI, và giá trị của counter.
Trang 39}break;
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,1);
DO_pwm_frequency[i]=(uint32_t)(usb_rx_buffer[i+1]);}
DO_pwm_set_frequency(DO_pwm_frequency);
break;
}case 'G':/* ADC 18 bit gain */
Trang 40HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,1);
Ts_ms = ((int)usb_rx_buffer[1]<<8) + (int)usb_rx_buffer[2];Sample_Timer_Set_Period(Ts_ms);
}}
} }
- Nếu “buffer[13]” nhận về là kí tự ‘R’ thì reset lại giá trị của counter
- Nếu nhận được kí tự ‘F’ thì thiết lập tần số PWM
- Nếu nhận được kí tự ‘G’ thì thiết lập độ lợi cho ADC 18 bit
- Nếu nhận được kí tự ‘T’ thì thiết lập thời gian lấy mẫu
Trang 41/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state */ while(1)
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* USER CODE BEGIN 6 */
/* User can add his own implementation to report the file name and line number, tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
Trang 42/* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */
II Thí nghiệm 2: Tạo winform app C#:
Giao diện lập trình trên C#using System;
Trang 43byte[] AO_0 = new byte[2];
byte[] AO_1 = new byte[2];
//
double AI_0_VALUE;
double AI_1_VALUE;
Trang 44double AI_2_VALUE;
int ai_0_value;
int ai_1_value;
int ai_2_value;
byte[] AI_0_value = new byte[4];
byte[] AI_1_value = new byte[4];
byte[] AI_2_value = new byte[4];
double pPart = 0, iPart = 0, dPart = 0;
bool enablePID = false;
- Khai báo các biến để sử dụng
public Form1()
{
InitializeComponent();
}
#region Declaring Global Variable
public static UsbDevice myUsbDevice, myUsbDevice_temp; UsbEndpointReader reader;
UsbEndpointWriter writer;
IAsyncResult result;
Trang 45#endregion Declaring Global Variable
- Khai báo biến toàn cục để đọc, ghi dữ liệu trên USB
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
Trang 46private void btnconnection_Click(object sender, EventArgs e)
UsbRegDeviceList allDevices = UsbDevice.AllDevices;
foreach (UsbRegistry usbRegistry in allDevices)
Trang 48//Set Interrupt service rountie for reader complete event
reader.DataReceived += (OnRxEndPointData);
reader.DataReceivedEnabled = true;
}
#endregion USB_DATA_RECEIVER_INIT
#region USB EXIT
private void Usb_exit()
Trang 49#endregion USB EXIT
#region USB DATA RECEIVER INTERRUPT SERVICE ROUNTIE Action<byte[]> UsbReceiverAction;
private void OnRxEndPointData(object sender, EndpointDataEventArgs e) {
- Chương trình ngắt để nhận dữ liệu từ USB
private void Usb_exit()
Trang 50- Chương trình khi USB exit.
private void PWM0_CheckedChanged(object sender, EventArgs e) {
Trang 51private void PWM6_CheckedChanged(object sender, EventArgs e)
Trang 54- Đoạn chương trình phục vụ khi các checkbox được check và các giá trị của textbox thay đổi.
private void F0_TextChanged(object sender, EventArgs e)
{
if (F0.Text == "")
Trang 58{
#region Case Check
if (checkBox1.Checked & checkBox1.Enabled) {
Trang 60byte[] data_send = { 14, 78, DO_value[0], DO_value[1], DO_value[2], DO_value[3],
DO_value[4], DO_value[5], DO_value[6], DO_value[7], AO_0[0], AO_0[1], AO_1[0], AO_1[1], reC0 }; try
Trang 61iPart += Ki * pidError * Ts_text / 1000;
dPart = Kd * (pidError - pidPreError)/((double)Ts_text / 1000);
Trang 62- Chương trình bổ sung để điều khiển ở chế độ PID
Kết quả sau khi chạy mô phỏng:
Trang 63- Với giá trị setpoint = 30 ta nhận được giá trị counter là 28