1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo TN Kỹ thuật điều khiển

49 366 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 49
Dung lượng 1,51 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Báo cáo TN Kỹ thuật điều khiển

Trang 1

Bài 1: ĐIỀU KHIỂN CÁC PHẦN TỬ KHÍ NÉN

I) Phân biệt các loại cảm biến:

 Cảm biến quang: khi đưa bất cứ vật nào che đầu cảm biến thì cảm biến sẽ lên mức 1

 Càm biến điện dung: khi đưa một vật bất kì lại thật gần thì cảm biến sẽ lên mức 1

 Cảm biến điện cảm : chỉ lên mức 1 khi đưa vật bằng kim loại lại gần

II) Các ví dụ chương trình mẫu:

SW2

Trang 2

#0020//Thiết lập 2 trạng thái đẩy ra và thu vào là ngược nhau

1000 1002 1007

TIM0

TIM1

#0040

Trang 3

//Dùng timer 0 có chu kì 4s để cho phép xi lanh I và J đẩy ra tuần tự nhau

LD 1007AND NOT TIM 000OUT 1000

LD 1007AND TIM 000OUT 1002//Thiết lập chế độ đẩy ra và thu vào của xi lanh I ngược nhau

LD 1000AND 1007OUT 1001//Tạo ra xung chu kì 8s (ON 4s và OFF 4s) cho timer 0

LD 1007AND NOT TIM 001TIM 000

#0040

LD 1007AND TIM 000TIM 001

#0040

3)Thí nghiệm 2D: (mở rộng của 2A,2B,2C):

-Viết chương trình phân loại chai bia,nếu gặp chai lỗi thì cho xi lanh I đẩy ra

để đưa chai lỗi về băng chuyền để sửa chữa,khi đủ 12 chai thì xi lanh J được đẩy từ trên xuống để đóng nút chai

-Dây truyền có dùng cảm biến quang để phát hiện lỗi kẹt chai,nếu quá 30s

ma cảm biến quang ko phát hiện được chai đi qua sẽ hú còi báo động

-Nếu bị mất điện thì bộ đếm số chai sẽ không thay đổi và khi có điện thì vẫn hoạt động bình thường

3

Trang 4

Chương trình LADDER:

1007 00004

TIM0 1000

CB1 CB2

AUTO SW3

SW2

Trang 5

CNT 1

Trang 6

//khi băng chuyền hoạt động,cảm biến quang báo có chai đi ngang(CB1 ON)

và cảm biến dung không báo lỗi chai thì ta bắt đầu đếm số chai xuống.Khi

số chai đếm xuống bằng 0(đủ 12 chai) thì reset số chai đếm về 12

chạy,nếu sau 30s mà không có chai đi ngang (tức bị kẹt chai) timer 3 sẽ on

III) Thực hiện phương án được giao:

Khi nhấn Start (SW2) , hệ thống sẽ thực hiện một cách tuần tự các bước sau:

1/ xi lanh I đẩy ra

Trang 7

2/ xi lanh J đẩy ra

3/ xi lanh K đẩy ra

4/ xi lanh I,J thu vào

5/ xi lanh K thu vào

6/ xi lanh K đẩy ra

7/ xi lanh J đẩy ra

8/ xi lanh I đẩy ra

9/ xi lanh J,K thu vào

10/ xi lanh I thu vào

11/ tắt hệ thống

Mỗi bước cách nhau 1s

Khi nhấn Stop (SW3) hệ thống dừng lại

7

Trang 8

Chương trình Ladder:

1007 00004

1007

TIM2

#0020 1007

TIM3

#0030 1007

Trang 9

//Khi hệ thống đã bắt đầu hoạt động,ta kích cho các timer chạy,mỗi timer tương ứng với mỗi mốc thời gian bắt đầu các bước

LD 1007TIM 001

Trang 10

LD 1007TIM 002

#0020

………

LD 1007TIM 011

#0110//dựa vào yêu cầu ta có xi lanh I sẽ đẩy ra khi timer 1 ON và thu vào khi timer 4 ON,và lại đẩy ra khi timer 8 ON thu vào khi timer 10 ON

//Tương tự ta có xi lanh J đẩy ra khi timer 2 ON và thu vào khi timer 4

ON,tiếp tục đẩy ra khi timer 7 ON,thu vào khi timer 9 ON

Trang 11

Bài 2: ĐIỀU KHIỂN DÙNG PLC OMRON

KEEP(11) 20002

TIM1 00003

PAUSE

S

R 20002

20002

IL(02)

10001 TIM1

10000

Trang 12

10001 00000

20000

25313

CMP(20)

#0010 25506

20001

IL(03)

Trang 13

//Bắt đầu đoạn chương trình trong hàm khóa

//Nếu đã delay đủ 5s và băng tải thùng dừng thì cho băng tải táo chạy

Trang 14

CMP 00000#0010//dừng hệ thống khi bộ so sánh báo đã đếm đủ 10 thùng (25506 ON)

LD 25506OUT 20001//dừng đoạn chương trình trong hàm khóa

ILC

II) Thực hiện phương án được giao:

Sau khi nhấn Start, hệ thống sẽ tự động đóng gói 1 thùng 5 táo Sau đó hệ thống nghỉ trong 10s Kế tiếp đóng liên tục 3 thùng theo thứ tự gồm 3 táo, 2 táo và

1 táo Hệ thống sẽ dừng hoàn toàn sau khi thực hiện xong tất cả các bước trên hoặckhi ta nhấn Stop

Khi hệ thống đang trong trạng thái dừng, nếu ta nhấn Start, hệ thống sẽ thực hiện lại tất cả công việc theo thứ tự như trên

Chương trình LADDER:

Trang 17

17

Trang 18

Chương trình danh sách lệnh:

//Để giải quyết bài toán ta chia bài toán ra làm 2 giai đoạn,giai đoạn sau khi nhấn START và giai đoạn sau khi TIMER 0 ON tức là sau khi ngừng hệ thống 10s

//giai đoạn đầu sẽ chạy với biến tự giữ 20000

//giai đoạn sau sẽ chạy với biến timer 0

//thiết lập điều kiện cho băng tải táo chạy:

+biến hoạt động của giai đoạn 1 hoặc 2 đã ON (20000 và TIMER 0 ON)

+băng tải thùng phải đang dừng

LD 200.00

AND NOT 100.01

LD NOT 200.01

OR TIM000

Trang 19

AND LDOUT 100.00//thiết lập các Counter đếm số thứ tự thùng tới (1 4) và Counter đếm số táo cho mỗi thùng:

LD 000.00 //Counter 7 đếm 5 táo cho thùng 1

LD NOT 000.07CNT 007 005

LD CNT020 //Counter 8 đếm 3 táo cho thùng 2AND 000.00

LD NOT 000.07CNT 008 003

LD CNT002 //Counter 9 đếm 2 táo cho thùng 3AND 000.00

LD NOT 000.07CNT 009 002

LD CNT003 //Counter 10 đếm 1 táo cho thùng 4AND 000.00

LD NOT 000.07CNT 010 001

LD 000.07 //Counter 20 ON khi đã có 2 thùng qua

LD 000.01CNT 020 002

LD 000.07 //Counter 2 ON khi đã có 3 thùng qua

LD 000.01CNT 002 003

LD 000.07 //Counter 3 ON khi đã có 4 thùng qua

LD 000.01CNT 003 004//Thiết lập điều kiện chạy cho băng tải thùng: gồm 5 điều kiện tương ứng cho từng trường hợp

LD NOT 200.01AND CNT007

Trang 21

CÁC PHƯƠNG PHÁP ĐIỀU KHIỂN CỔ ĐIỂN

I) Đoạn chương trình mẫu:

// Sự kiện khi khởi động chương trình

BOOL CBai3_3Dlg::OnInitDialog()

{

CDialog::OnInitDialog();

// Set the icon for this dialog The framework does this automatically

CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle

int cxIcon = GetSystemMetrics(SM_CXICON);

int cyIcon = GetSystemMetrics(SM_CYICON);

CRect rect;

GetClientRect(&rect);

int x = (rect.Width() - cxIcon + 1) / 2;

int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon dc.DrawIcon(x, y, m_hIcon);

// The system calls this to obtain the cursor to display while the user drags

// the minimized window.

Trang 22

// when the application's main window is not a dialog

SetIcon(m_hIcon, TRUE); // Set big icon

SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here

Trang 23

// If you add a minimize button to your dialog, you will need the code below

// to draw the icon For MFC applications using the document/view model,

// this is automatically done for you by the framework.

// CSetting message handlers

// Sự kiện khi nhấn nút Start

void CBai3_3Dlg::OnStart()

{

// TODO: Add your control notification handler code here

// Select and Open Device

if(!flag) DRV_SelectDevice(m_hWnd,FALSE,&m_DeviceNume, m_DeviceName);

ptAIVoltageIn.TrigMode = 0; // internal trigger

ptAIVoltageIn.voltage = (FLOAT far *)&Input;

// configures the gain for the specifed analog output channel

Trang 24

s.Format("%0.2lf",pw);

// Pwr = 100 ; this->SetDlgItemText(IDC_POWER, s);

Scope2.Channels[0].Data.AddYPoint(Pwr);

}

dwCurrentTime = GetTickCount()- gdwStartTime;

Trang 25

// TODO: If this is a RICHEDIT control, the control will not

// send this notification unless you override the CDialog::OnInitDialog()

// function and call CRichEditCtrl().SetEventMask()

// with the ENM_CHANGE flag ORed into the mask.

// TODO: Add your control notification handler code her

}

void CSetting::OnChangeT0()

{

// TODO: If this is a RICHEDIT control, the control will not

// send this notification unless you override the CDialog::OnInitDialog()

// function and call CRichEditCtrl().SetEventMask()

// with the ENM_CHANGE flag ORed into the mask.

// TODO: Add your control notification handler code here

}

II) Các đoạn chương trình điều khiển ON-OFF và PID:

25

Trang 26

1) Điều khiển PID:

- Đoạn đọc tín hiệu nhiệt độ:

DRV_AIVoltageIn(DriverHandle,(LPT_AIVoltageIn)&ptAIVoltageIn);

- Đoạn tính và xuất tín hiệu điều khiển:

Error = Temp - 62.5*Input;

2) Điều khiển ON-OFF:

- Đoạn đọc tín hiệu nhiệt độ:

// read input data

DRV_AIVoltageIn(DriverHandle,(LPT_AIVoltageIn)&ptAIVoltageIn);

- Đoạn tính và xuất tín hiệu điều khiển:

// write output data

ptAOConfig.chan = gwChannelOutput ;

Trang 27

a=KL/T=7.5 T i =2L=100 T d =0.5L=25

K p =1,20/a=0.16 K i =K p /T i =1.6*10 -3 K d =K p *T d =4

2) Khảo sát vòng kín với bộ điều khiển PID:

Khảo sát với các hệ số PID tính được từ vòng hở:

Đáp ứng thu được:

27

Trang 28

Khảo sát với các hệ số PID mặc định:

Độ vọt lố (%)

Sai số xác lập ( 0 C)

Hệ số tìm được 75 550 122.5 9

Hệ số mặc định 70 450 112.5 5

3) Khảo sát vòng kín với bộ điều khiển ON-OFF:

Vẽ các đáp ứng lần lượt với các vùng trễ Db là 1 o C , 0.2 o C

Trang 29

Bảng giá trị:

29

Trang 30

Độ vọt lố (%)

Sai số xác lập ( 0 C)

=> Nhận xét:

- Ở điều khiển ON-OFF khi độ rộng vùng chết càng nhỏ thì sai số xác lập càng nhỏ.

- Bộ điều khiển PID cho sai số nhỏ hơn so với bộ điều khiển ON-OFF.Chất lượng bộ điều khiển PID tốt hơn nhiều so với ON-OFF.

Câu hỏi thêm: làm cho “mịn” đặc tuyến khi điều khiển ON-OFF (đoạn nhấp nhô đều

nhau ở 2 bên giá trị xác lập)

Trang 31

I) Các đoạn chương trình mẫu :

// Đoạn chương trình đọc xung:

PT_DioReadPortByte ptDioReadPortByte0,ptDioReadPortByte1;

USHORT DataLo,DataHi;

double Pulse;

double Delta_Pulse;

static double PrevPulse;

// read low byte

ptDioReadPortByte0.port = 0;

ptDioReadPortByte0.value = (USHORT far *)&DataLo;

// read high byte

ptDioReadPortByte1.port = 1;

ptDioReadPortByte1.value = (USHORT far *)&DataHi;

DRV_DioReadPortByte(DriverHandle,(LPT_DioReadPortByte)&ptDioReadPortByte0);

DRV_DioReadPortByte(DriverHandle,(LPT_DioReadPortByte)&ptDioReadPortByte1);

Pulse = DataHi*256 + DataLo;

Delta_Pulse = Pulse - PrevPulse;

PrevPulse = Pulse;

// processing counter overflow

if(Delta_Pulse>+32768) Delta_Pulse = Delta_Pulse - 65536;

if(Delta_Pulse<-32768) Delta_Pulse = Delta_Pulse + 65536;

// -//configure input and output of the PCI card

if(!flag) DRV_SelectDevice(m_hWnd,FALSE,&m_DeviceNume, m_DeviceName); DRV_DeviceOpen(m_DeviceNume,&DriverHandle);

// configures the gain for the specifed analog input channel

ptAIVoltageIn.TrigMode = 0; // internal trigger

ptAIVoltageIn.voltage = (FLOAT far *)&Input;

// configures the gain for the specifed analog output channel

ptAOConfig.chan = gwChannelOutput;

ptAOConfig.RefSrc = 0; // reference source internal

ptAOConfig.MaxValue = MaxValueOut;

31

Trang 32

//Đoạn tính tín hiệu điều khiển:

double CBAI4Dlg::PID(double currentspeed)

{

static double u[2];

static double e[3];

e[2] = SetSpeed - currentspeed;

u[1] = u[0] + a0*e[2] + a1*e[1] + a2*e[0];

// Đoạn xuất tín hiệu điều khiển:

void CBAI4Dlg::OnTimer(UINT nIDEvent)

Trang 34

this->SetDlgItemText(IDC_STATIC_SETSPEED, s);

CDialog::OnTimer(nIDEvent);

}

II) Tiến hành thí nghiệm:

1)Điều khiển tốc độ động cơ:

 Thí nghiệm với Kp thay đổi,Ki=0.015,Kd=1e-6:

Kp 0.001 0.002 0.003 0.004 0.005 0.006 0.007Thời gian lên (s)

Trang 35

+ Trường hợp Kp=0.002:

 Thí Nghiệm với Ki thay đổi,Kp=0.0004,Kd=e^(-6):

35

Trang 37

2) Điều khiển vị trí động cơ:

 Thí Nghiệm với Ki=0.05,Kp=0.002,Kd=0.025

Thời gian lên 0.07s

Thời gian xl (s) 1.6s

Độ vọt lố (%) 15%

Sai số xl (v/p) 0.41

37

Trang 38

III) Nhận xét ảnh hưởng của các thành phần Kp , Ki , Kd của bộ

điều khiển PID:

Khi tăng Kp : sai số xác lập càng nhỏ, thời gian xác lập tăng, độ vọt lố càng

cao Khi tăng Kp thì các cực của hệ thống nói chung có xu huớng di chuyển

ra xa trục thực Nếu tăng Kp quá giá trị hệ số khuếch đại giới hạn thì hệ thống sẽ trở nên mất ổn định (dao động)

Khi tăng Ki : làm chậm đáp ứng quá độ thời gian xác lập tăng , độ vọt lố

tăng , sai số xác lập giảm Do hệ số khuếch đại của khâu PI bằng vô cùng tại tần số bằng 0 nên khâu PI có thể làm cho sai số của tín hiệu vào là hàm nấc của hệ thống không có khâu vi phân lý tưởng bằng 0 Ngoài ra, do khâu PI làmột bộ lọc thông thấp nên nó còn có tác dụng triệt tiêu nhiễu tần số cao tác động vào hệ thống

Khi tăng Kd : đáp ứng của hệ thống càng nhanh ,thời gian lên ngắn,nhưng

thời gian xác lập tăng , độ vọt lố tăng và sai số xác lập tăng

Bài 5:ĐIỀU KHIỂN THÍCH NGHI TỐC ĐỘ ĐỘNG CƠ DC

Trang 39

I) Yêu cầu của thầy:

Tạo thêm 1 nút nhấn REVERSE để đảo chiều quay của động cơ nhưng chỉ nhấn REVERSE được 1 lần

II) Các đoạn chương trình mẫu của giải thuật PID thích nghi:

//Đoạn đọc tín hiệu xung:

double CBAI4Dlg::DataPulse()

{

PT_DioReadPortByte ptDioReadPortByte0,ptDioReadPortByte1;

USHORT DataLo,DataHi;

doublePulse;

doubleDelta_Pulse;

//static double PrevPulse;

// read low byte ptDioReadPortByte0.port = 0;

ptDioReadPortByte0.value = (USHORT far *)&DataLo;

// read high byte ptDioReadPortByte1.port = 1;

ptDioReadPortByte1.value = (USHORT far *)&DataHi;

DRV_DioReadPortByte(DriverHandle,(LPT_DioReadPortByte)&ptDioReadPort Byte0);

DRV_DioReadPortByte(DriverHandle,(LPT_DioReadPortByte)&ptDioReadPort Byte1);

Pulse = DataHi*256 + DataLo;

Delta_Pulse = Pulse - PrevPulse;

Trang 40

//Đoạn tính tín hiệu điều khiển:

double CBAI4Dlg::PID(double currentspeed)

{

static double u[2]; //u[0]: u(k-1); u[1]: u(k)

static double e[3]; //e[0] la` e1(k), e[1]: e1(k-1), e[2]: e1(k-2)

*/

/* Tinh' e2

//*/

if(Output<=2.4) e2 = 2.5-(2695.0-SetSpeed-25)/1133.8+Output; // 50ms (0V->2.5V)

//if(u<2.4) e = 2.4-(2696.5-dat)/1135.9-u; // 50ms (0V->2.5V) (them 2.3V)

if(Output>2.4 & Output<2.6) e2 = 2.5;

if(Output>=2.6) e2 = 2.6-(2897.7- SetSpeed)/1135.4+Output; // 50ms (2.5V->5V)

//sai lech dau vao tinh theo ap

// e[2] = USetSpeed - etemp;

/* Tinh e1(k) tuc la e[2]*/

if(Output<=2.4) e[2] = 2.4-(2695.0-(SetSpeed - currentspeed-25))/1133.8; // 50ms (0V->2.5V)

// if(u<2.4) e_omega0 = 2.4-(2696.5-(dat - s/T1))/1135.9; // 50ms (0V->2.5V)

if(Output>2.4 & Output<2.6) e[2] = 2.5;

if(Output>=2.6) e[2] = 2.6-(2897.7-(SetSpeed –

Trang 41

currentspeed))/1135.4; // 50ms (2.5V->5V)

//sai lech tinh theo ap giua toc do dat va tin hieu dieu khien

// Output = 2.5 - Output;

// e2 = -USetSpeed + Output;

for(i1 =0;i1<3; i1++)

//Cong thuc cap nhat thong so: an[k+1] = an[k] +beta*e2[k]*e1[k-n]

a[i1][1] = a[i1][0] + beta*e[2-i1]*e2;

u[1] = u[0] + a[0][1]*e[2] + a[1][1]*e[1] + a[2][1]*e[0];

//Đoạn xuất tín hiệu điều khiển:

void CBAI4Dlg::OnTimer(UINT nIDEvent)

m_speed = DataPulse()*speedratio/T0;

updatespeed[MAXUPDATE-1] = m_speed;

for(i=0; i<MAXUPDATE; i++){

avrspeed+= updatespeed[i];}

avrspeed = avrspeed/MAXUPDATE; //TINH TRUNG BINH DE TRANH' NHIEU

for (i=0; i<MAXUPDATE-1; i++)

updatespeed[i] = updatespeed[i+1];

Output = (float)PID(avrspeed);//********************************

41

Trang 42

if(i<1000) {

Trang 43

Thời gianxác lập(s)

Độvọt lố(%)

Sai sốXác lập(v/p)

43

Trang 44

 Thí nghiệm với tốc độ đặt 1000(v/p):

Bộ

Điều Khiển

Thời gianlên(s)

Thời gianxác lập(s)

Độvọt lố(%)

Sai sốXác lập(v/p)

Trang 46

Thí nghiệm với tốc độ đặt 2000(v/p):

Bộ

Điều Khiển

Thời gianlên(s)

Thời gianxác lập(s)

Độvọt lố(%)

Sai sốXác lập(v/p)

Thời gianxác lập(s)

Độvọt lố(%)

Sai sốXác lập(v/p)

Trang 47

 Thí nghiệm với tốc độ đặt -2000(v/p):

47

Trang 48

Điều Khiển lên(s) xác lập(s) vọt lố(%) Xác lập(v/p)

Trang 49

Nhận xét và so sánh giữa bộ PID thích nghi và PID thường :

 Trong tất cả các trường hợp điều khiển với tốc độ đặt cho trước thì bộ điều khiển thích nghi luôn có thời gian xác lập rất nhanh so với bộ điều khiển PID thường Thời gian lên và thời gian xác lập của bộ điều khiển thích nghi luôn bé hơn ½ thời gian lên và xác lập của bộ điều khiển PID thường

 Đồng thời bộ điều khiển thích nghi luôn cho sai số xác lập bằng 0 do các hệ

số Kp,Kd,Ki sẽ được tự chỉnh định sao sai số ngỏ ra bằng 0

 Tuy nhiên trong một số trường hợp thì bộ điều khiển thích nghi có độ vọt lố khá lớn, gấp đôi so với độ vọt lố của bộ điều khiển PID thông thường

 Hệ số thích nghi  phản ánh tốc độ thích nghi của bộ điều khiển:

-Nếu  lớn thì hệ thống sẽ hội tụ nhanh nhưng độ vọt lố cũng tăng theo, hệ thống nhạy với nhiễu

-Nếu nhỏ thì ngược lại,hệ thống sẽ hội tụ chậm nhưng độ vọt lố cũng sẽ giảm xuống

=> Ta phải chọn hệ sốsao cho thích hợp để có thể chấp nhận tốc độ hội tụ

và độ vọt lố là đạt yêu cầu so với thực tế

 Quan sát cuối cùng là kết quả của thí nghiệm thực tế ta thấy được khả năng điều khiển tín hiệu ngỏ ra bám theo tín hiệu đặt của bộ điều khiển thích nghi

là rất tốt Đó chính là lý do tại sao bộ điều khiển thích nghi được sử dụng trong các trường hợp đòi hỏi độ chính xác cao và thời gian đáp ứng nhỏ

49

Ngày đăng: 17/07/2015, 12:32

HÌNH ẢNH LIÊN QUAN

Bảng giá trị: - Báo cáo TN Kỹ thuật điều khiển
Bảng gi á trị: (Trang 29)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w