Bac nao biet cach tao khoi moi trong matlab su dung S-Function Builder xin chi cho em voi. Em co bai tap :tao khoi PID trong S-Function Builder,cac bac giup em, em dang can gap lam, doi on cac bac nhieu!
Thông báo
Collapse
No announcement yet.
Giup em tao khoi moi trong Matlab su dung S-Function Builder
Collapse
X
-
S-function builder là công cụ giúp người dùng có thể tạo S-function một cách tự động thông qua việc đưa vào tên khối, tham số, đầu vào-ra, viết một số hàm cần thiết để tạo một S-Function. Ngoài ra bạn cũng có thể tạo bằng tay bằng cách lập trình dạng mex-file để tạo các khối mới tuỳ ý thích. Bạn có thể tham khảo chi tiết trong phần help của matlab, ở đây có rất nhiều ví dụ về cách tạo ra một S-functionViet Nguyen
AC2/K47-hut
-
Con viec thiet ke bo PID nhu ban noi, ta hoan toan co the dung khoi Subsystem. Sau day la chi tiet cach lam khoi PID thuc te bang cach dung Subsystem:
Viet Nguyen
AC2/K47-hut
Comment
-
Làm với Subsystem cũng đơn giản thôi. Bác xem thử xem nha:Nguyên văn bởi viettuan224 Xem bài viếtSao em không xem được hướng dẫn của bác vậy.Giúp em đi!Attached FilesViet Nguyen
AC2/K47-hut
Comment
-
Sau đây mình sẽ hướng dẫn bạn tạo một S-function cho bộ điều khiển PID. So sánh kết quả thu được so với cách tạo bằng subsystem.
- Đây là mã mà mình viết cho realPID:
Code:/*================================ Ham S-function mo ta dong hoc cua khau PID thuc te===========================*/ #define S_FUNCTION_NAME realPID #define S_FUNCTION_LEVEL 2 #include <math.h> #include "simstruc.h" #include "mat.h" #define U(element) (*uPtrs[element]) // con tro toi cong vao /*Dinh nghia cac tham so cua khoi*/ #define Kp mxGetPr(ssGetSFcnParam(S,0)) // tham so thu nhat #define Ki mxGetPr(ssGetSFcnParam(S,1)) // tham so thu hai #define Kd mxGetPr(ssGetSFcnParam(S,2)) // tham so thu ba #define ANFA mxGetPr(ssGetSFcnParam(S,3)) // tham so thu tu /*khoi tao kich co cho khoi*/ static void mdlInitializeSizes(SimStruct *S){ int ninputs=1; // be rong tin hieu cong vao int noutputs=1;// be rong tin hieu cong ra int nstates=2; // so trang thai lien tuc cua khoi ssSetNumSFcnParams( S, 4); // thiet lap so tham so cho khoi if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) { return;// neu so tham so nguoi dung dua vao ma khong bang voi yeu cau thi thoat ngay } ssSetNumContStates( S, nstates); // thiet lap so trang thai lien tuc ssSetNumDiscStates( S, 0); // thiet lap so trang thai gian doan if (!ssSetNumInputPorts(S, 1)){ return;// neu khong thiet lap duoc so cong vao la 1 thi thoat ngay } ssSetInputPortWidth(S, 0, ninputs); // thiet lap be rong tin hieu cong vao ssSetInputPortDirectFeedThrough(S, 0, 1); // thiet lap trang thai co xuyen xuot if (!ssSetNumOutputPorts(S, 1)){ return;// neu khong thiet lap duoc so cong ra la 1 thi thoat ngay } ssSetOutputPortWidth(S, 0, noutputs); // thiet lap be rong tin hieu cong ra ssSetNumSampleTimes( S, 1); // thiet lap so thoi gian trich mau ssSetNumRWork( S, 0); /* number of real work vector elements */ ssSetNumIWork( S, 0); /* number of integer work vector elements */ ssSetNumPWork( S, 0); /* number of pointer work vector elements */ ssSetNumModes( S, 0); ssSetNumNonsampledZCs( S, 0); /* Take care when specifying exception free code - see sfuntmpl.doc */ ssSetOptions(S, SS_OPTION_EXCEPTION_FREE_CODE); } /* ham khoi tao thoi gian*/ static void mdlInitializeSampleTimes(SimStruct *S){ ssSetSampleTime(S, 0, CONTINUOUS_SAMPLE_TIME); ssSetOffsetTime(S, 0, 0.0); } /*khoi tao dieu kien ban dau*/ #define MDL_INITIALIZE_CONDITIONS static void mdlInitializeConditions(SimStruct *S){ int i,nstates=2; real_T *x0 = ssGetContStates(S); for(i=0;i<nstates;i++){ x0[i] = 0; } } /*tinh toan dau ra*/ static void mdlOutputs(SimStruct *S, int tid){ real_T *y=ssGetOutputPortRealSignal(S,0); real_T *x=ssGetContStates(S); InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0); double kp,ki,kd,anfa; kp=Kp[0]; ki=Ki[0]; kd=Kd[0]; anfa=ANFA[0]; y[0]=ki/anfa*x[0]+(ki-kd/anfa/anfa-kp/anfa)*x[1]+(kd/anfa+kp)*U(0); } /*tinh dao ham*/ #define MDL_DERIVATIVES static void mdlDerivatives(SimStruct *S){ real_T *dx = ssGetdX(S); real_T *x = ssGetContStates(S); InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0); double anfa=ANFA[0]; dx[0]=x[1]; dx[1]= -1/anfa*x[1]+U(0); } /*ket thuc*/ static void mdlTerminate(SimStruct *S){ } /*ma o cuoi moi S-function luon nhu sau*/ #ifdef MATLAB_MEX_FILE /* Is this being compiled as a MEX-file? */ #include "simulink.c" /* mex-file interface mechanism */ #else #include "cg_sfun.h" /* Code generation registration func */ #endifViet Nguyen
AC2/K47-hut
Comment
-
Công việc tiếp theo là dịch file realPID.c ra dạng .dll
Bước 1:
Chọn trình biêm dịch bằng lệnh: >>mex -setup
Khi đó matlab sẽ hiển thị ra các trình biên dịch có trong máy của bạn, chỉ cần chọn 1 trình biên dịch và bấm enter là OK
Bước 2:
Dịch file realPID.c ra dạng .dll bằng lệnh: >>mex realPID.c
(lưu ý trước khi dịch bạn copy file vào thư mục work của Matlab, hoặc một thư mục bất kì nhưng phải chỉ đường dẫn thư mục đó cho matlab nhé: >>cd 'đường dẫn của thu mục')
Bước 3:
Sau khi dịch xong rồi ta tiến hành mô phỏng, lôi các khối cần thiết trong simulink ra nhé: subsystem,...
Sau đây mình up lên toàn bộ quá trình làm để ai quan tâm thì theo dõi nhé:Viet Nguyen
AC2/K47-hut
Comment
-
Ok nếu có gì mình làm được liên quan đến lĩnh vực này thì sẽ post lên nhé. Nhân đây mình có bài toán này cho bạn đây, bạn có thể làm nó như bước đi ban đầu trong lĩnh vực thiết kế S-Function nhé:
- Mô hình hoá cho bình mức một vào một ra bằng phương pháp lý thuyết
- có điều kiện thì kiểm chứng bằng thực nghiệm nhé
- tiến hành lập trình trên S-Function
- tiến hành mô phỏng
- thiết kế điều khiển
Gợi ý cho bạn là: đối tượng bình mức mà mình cho dưới đây có dạng hàm truyền là khâu quán tính tích phân: G(s)=K/s/(1+Ts). Khi ra được như thế này rồi thì việc lập trình là hoàn toàn đơn giản.
Chúc thành công!
Last edited by hero_ac; 09-05-2007, 18:21.Viet Nguyen
AC2/K47-hut
Comment
-
Bạn nào muốn tìm hiểu về cách dùng S-Function thì đọc tài liệu nè nè. Rất tốt cho người mới bắt đầu làm quen với S-Function.Nguyên văn bởi viettuan224 Xem bài viếtBac nao biet cach tao khoi moi trong matlab su dung S-Function Builder xin chi cho em voi. Em co bai tap :tao khoi PID trong S-Function Builder,cac bac giup em, em dang can gap lam, doi on cac bac nhieu!
Comment
-
Bạn nào muốn tìm hiểu về cách dùng S-Function thì đọc tài liệu nè nè. Rất tốt cho người mới bắt đầu làm quen với S-Function.Nguyên văn bởi viettuan224 Xem bài viếtBac nao biet cach tao khoi moi trong matlab su dung S-Function Builder xin chi cho em voi. Em co bai tap :tao khoi PID trong S-Function Builder,cac bac giup em, em dang can gap lam, doi on cac bac nhieu!
MatlabTutorialPart5
Mình upload lên ko được. Mọi người tự down nhé
Dễ lắm.Hi
Comment
-
chao bạn tuanbs
cái này đơn giảnNguyên văn bởi tuanbs Xem bài viếte muốn tạo khối subsystem có bốn đầu vào KP, KI, KD và e thì làm thế nào ạ
bước 1: tạo một model mới bằng Simulink model
bước 2: trong thư viện Simulink block ạn tìm khối Sussystem và input ,output kéo ra thả ngoài mạn hình -> đặt tên lại các khối
bước 3: copy các khối input và output đã tạo -> kích đúp vào khối Sussystem -> past vào bên trong
bước 4: ra ngoài khối Sussystem và nối dây vào
hoàn thành
bạn có thể tự do thiết kế tuy thích
có gì không hiểu cứ liên lạc với mình
tdquang@nippon-seiki.co.jp
Comment
Bài viết mới nhất
Collapse
-
bởi Abril9Chào mọi người, động cơ bước có hộp số (https://www.oyostepper.es/category-2...eductores.html) trên thiết bị của tôi đã được sử dụng khoảng sáu tháng. Gần đây, tôi nhận thấy dầu rò rỉ từ trục đầu ra. Mỡ bôi trơn đã bị chảy và nhỏ giọt...
-
Channel: Các hệ thống tự động hóa khác
Hôm qua, 13:26 -
-
bởi AbirChào mọi người, gần đây tôi có một ý tưởng mới.
Tôi muốn nâng cấp thiết bị của mình để tăng tốc độ, vì vậy tôi đã thay đổi nguồn cấp cho mạch điều khiển từ 24V lên 48V. Động cơ vẫn giữ nguyên và dòng điện định...-
Channel: Điện tử công nghiệp
Hôm qua, 09:49 -
-
bởi nguyendinhvanCó một chi tiết sai cơ bản trong kỹ thuật điện tử....
-
Channel: Tâm tình dân kỹ thuật
26-03-2026, 19:31 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Bài hát mới, nhạc Phật: Về Giữa Chiêm Bao, sáng tác: Hoàng Đình Thường.
[Verse 1] Nhân gian bao thay đổi
ĐỜI là giấc CHIÊM BAO
Người mê lầm tranh đấu
KHỔ ĐAU mãi LUÂN HỒI.
VÔ THƯỜNG nào ai thấu
THAM vơ...-
Channel: Tâm tình dân kỹ thuật
25-03-2026, 19:01 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi davidcopyBạn muốn hỏi nguyên lý làm việc của mạch nào...
-
Channel: Hỗ trợ học tập
24-03-2026, 22:50 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi N_Tu_Hoc_HoiBạn cần sơ đồ mạch ổn áp bao nhiêu Volt, Nếu giống anh bạn guiwr có khả năng ổn áp dùng iC họ 78XX, 79XX. Những mạch này bạn tim kiếm trên google sẽ thấy!!
-
Channel: Hỗ trợ học tập
23-03-2026, 02:32 -
-
bởi chinhnguyen9
Điến âp vào 24V;Điên áp ra 30V;Dòng điện ra 10A
Trên nền tảng mạch Boost thay đổi như sau: cự âm tụ lọc C không nối mas mà nối vào Vc +24V
Mach phản hồi tao điê áp trên tụ lọc này ổn đinh ở 6V
Kết quả:
· Điện áp ra =24V+ 6V=30V
· Công...-
Channel: Hướng dẫn sử dụng diễn đàn
21-03-2026, 19:33 -
-
bởi chinhnguyen92. Các yếu tố để dòng điện đầu ra không bị "thiếu"
Dòng điện đầu ra bị "thiếu" có thể hiểu là không đủ 10A theo yêu cầu hoặc bị sụt áp khi tải thay đổi. Để đảm bảo điều này, bạn cần xem xét các yếu tố sau:
a. Khả năng chịu dòng của cuộn cảm- Dòng bão hòa (I_sat): Như
-
Channel: Hướng dẫn sử dụng diễn đàn
21-03-2026, 19:06 -
bởi chinhnguyen9
1. Tính toán cuộn cảm (Inductor)
Để tính giá trị cuộn cảm, chúng ta cần thực hiện các bước sau:
a. Xác định chu kỳ nhiệm vụ (Duty Cycle - D)
Với mạch tăng áp lý tưởng, chu kỳ nhiệm vụ được tính theo công thức :
D=1-VinVout=1-24V30V=0.2
Vậy D = 0.2 (20%)
b....-
Channel: Hướng dẫn sử dụng diễn đàn
21-03-2026, 19:03 -

Comment