Giới thiệu về S-Function

Một phần của tài liệu Xây dựng thư viện các mô hình đối tượng của quá trình công nghệ phục vụ nghiên cứu và giảng dạy (Trang 50)

S-Function viết tắt của system-functions (những chức năng hệ thống) cung cấp một kỹ thuật (mechanism) mạnh mẽ cho việc mở rộng các tính năng trong môi trường Simulink. Một S-Function là một ngôn ngữ máy tính mô tả một khối Simulink được viết bằng MATLAB, C, C++ hoặc Fortran. Hàm S-function được viết bằng C, C++ và Fortran được biên dịch thành những file MEX sử dụng tính năng câu lệnh mex. Cũng như những file MEX khác, những S-Function được liên kết động những chương trình con mà bộ thông dịch MATLAB có thể tự động nạp và thực thi.

Những S-Function sử dụng một cú pháp gọi đặc biệt được gọi là S-Function API mà cho phép ta có thể tương tác với bộ máy Simulink. Sự tương tác này rất giống với sự tương tác mà diễn ra giữa bộ máy Simulink và những khối Simulink được xây dựng sẵn.

Những hàm S-Function với hình dạng chung có thể là những hệ thống liên tục, rời rạc hoặc hệ thống lai. Bằng cách theo sau một tập những luật đơn giản, chúng ta có thể thực hiện một thuật toán trong một S-Function và sử dụng khối S-Function đó vào trong một mô hình Simulink. Sau khi chúng ta viết hàm S-function và đặt

tên cho nó trong khối S-Function (nằm trong thư viện User-Defined Functions), ta có thể tùy biến giao diện sử dụng nhờ thủ thuật Masking.

Ta có thể sử dụng S-Function với Real-Time Workshop. Chúng ta cũng có thể tùy biến việc phát mã cho những S-function bằng cách viết thêm file TLC (Target Language Compiler)

3.1.1. Những phƣơng pháp xây dựng S-Function

Ta có thể xây dựng S-function theo một trong 5 cách dưới đây:

Level-1 MATLAB S-Function cung cấp một giao diện MATLAB đơn giản

tương tác với một bộ phận nhỏ hàm API được dùng cho S-Function. Level-2 MATLAB S-Functions thay thế cho Level-1 MATLAB S-Function.

Level-2 MATLAB S-Function cung cấp truy nhập tới một tập sâu hơn

những hàm API của S-function và hỗ trợ phát mã. Trong hầu hết các trường hợp, sử dụng Level-2 MATLAB S-function khi bạn muốn xây dựng S- Function trong MATLAB.

C MEX S-Function viết tay cung cấp tính năng lập trình cao nhất. Chúng

ta có thể xây dựng thuật toán như một C MEX S-Function hoặc viết một trình bao bọc để gọi những mã C, C++, hoặc Fortran tồn tại. Viết một S- Function mới yêu cầu kiến thức về API của S-Function, và nếu muốn phát mã cho S-Function, chúng ta cần viết thêm một file TLC.

The S-Function Builder là một giao diện người sử dụng cho phép lập trình

một tập con những tính năng của S-Function. Nếu là người mới viết C MEX S-Function, ta có thể sử dụng S-Function Builder để xây dựng S- Function hoặc kết hợp những mã C, C++ có sẵn mà không phải sử dụng những API của S-Function. S-Function Buider có thể tạo file TLC trong quá trình phát mã sử dụng cho Real-Time Workshop.

The Legacy Code Tool là một tập những lệnh MATLAB giúp ta tạo ra một

Builder, Legacy Code Tool có thể tạo file TLC trong quá trình phát mã. Công cụ Legacy Code Tool cung cấp truy nhập tới một số lượng ít những phương thức trong API hơn S-Function Builder hoặc C MEX S-function viết tay.

3.1.2. Cấu trúc cơ bản của một chƣơng trình viết bằng C MEX S-Function

Một C MEX S-Function phải cung cấp thông tin về hàm cho bộ máy Simulink trong quá trình mô phỏng. Khi quá trình mô phỏng tiến hành, bộ máy Simulink, bộ giải ODE, và C MEX S-Function tương tác để thực hiện những nhiệm vụ cụ thể. Những tác vụ này bao gồm việc định nghĩa những điều kiện khởi tạo, đặc tính của khối, tính toán đạo hàm, những trạng thái rời rạc và những đầu ra.

Giống như M-file S-Function, Simulink tương tác với C MEX S-Function bằng cách gọi những phương thức gọi hàm mà S-Function thực thi. Mỗi phương thức thực hiện một tác vụ đã được định nghĩa trước đó, như tính toán đầu ra của khối, được yêu cầu mô phỏng khối mà chức năng của nó S-Function định nghĩa. Tuy nhiên, S-Function tự do thực hiện những tác vụ này trong mỗi phương thức gọi hàm theo tính năng S-Function thực thi. Ví dụ, phương thức mdlOutputs phải tính toán đầu ra của khối tại thời điểm mô phỏng hiện thời. Tuy nhiên, S-Function có thể tính toán những đầu ra này trong bất cứ cách nào mà thích hợp cho hàm. API dựa trên việc gọi hàm này cho phép tạo S-Function, và vì vậy có thể tạo những khối tùy ý với những chức năng mong muốn.

Tập những phương thức gọi hàm mà C MEX S-Function có thể thi hành rộng hơn so với M-file S-Function. Phần phụ lục liệt kê tất cả các phương thức gọi hàm mà C MEX S-Function có thể thực hiện. C MEX S-Function được yêu cầu thực hiện chỉ một tập con nhỏ của những phương thức gọi hàm trong S-Function API. Nếu khối xây dựng không thực thi một tính năng đặc biệt, như tín hiệu ma trận, thì nó sẽ không chứa những phương thức gọi hàm được cần đến để thực thi tính năng đó. Điều này cho phép ta có thể tạo những khối đơn giản rất nhanh chóng.

Cấu trúc tổng quát của một C MEX S-Function được chỉ ra dưới đây:

#define S_FUNCTION_NAME your_sfunction_name_here

#define S_FUNCTION_LEVEL 2 #include "simstruc.h"

static void mdlInitializeSizes(SimStruct *S) {

}

<additional S-function routines/code>

static void mdlTerminate(SimStruct *S) {

}

#ifdef MATLAB_MEX_FILE /* Is this file being compiled as a MEX-file? */

#include "simulink.c" /* MEX-file interface mechanism */ #else

#include "cg_sfun.h" /* Code generation registration function */

#endif

Cấu trúc chương trình gồm 3 phần chính: Những định nghĩa và bao hàm (defines and includes), khối phương thức gọi hàm và mã kết thúc (trailer).

Định nghĩa và bao hàm (Defines and includes)

Cấu trúc đơn giản nhất của khối này như sau:

#define S_FUNCTION_NAME your_sfunction_name_here

#define S_FUNCTION_LEVEL 2 #include "simstruc.h"

Lời dẫn define đầu tiên chỉ ra tên của hàm S-Function. Tên này sau được lưu lại và được sử dụng để khai báo trong trường tên S-Function trong hộp thoại S-

Function Block's Parameters. Lời dẫn define thứ hai chỉ ra rằng S-Function sử dụng định dạng Level 2.

Sau những lời dẫn định nghĩa tên và định dạng sử dụng là lời dẫn bao hàm.

simstruc.h là một file header mà giúp ta truy nhập tới cấu trúc dữ liệu SimStruct và những hàm API MATLAB.

File simstruc.h định nghĩa cấu trúc dữ liệu, được gọi là là SimStruct mà Simulink sử dụng để duy trì thông tin về S-Function. File simstruc.h cũng định nghĩa những macro cho phép những file MEX có thể thiết lập và lấy giá trị (ví dụ như tín hiệu vào ra khối) từ SimStruct.

Khối phƣơng thức gọi hàm

Phần tiếp theo của S-Function chứa những sự thực thi của những phương thức gọi hàm được yêu cầu.

static void mdlInitializeSizes(SimStruct *S) {

}

<additional S-function routines/code>

static void mdlTerminate(SimStruct *S) {

}

mdlInitializeSizes là chương trình con đầu tiên mà Simulink gọi khi tương tác với S- Function. Simulink sau đó gọi những phương thức S-Function khác (tất cả bắt đầu với mdl). Cuối quá trình mô phỏng, Simulink sẽ gọi mdlTerminate.

Cuối chương trình S-Function, thêm đoạn mã sau đây theo kèm để xác định S- Function sử dụng cho Simulink hay Real-Time Workshop.

#ifdef MATLAB_MEX_FILE #include "simulink.c"

#else

#include "cg_sfun.h" #endif

Đoạn mã này được yêu cầu cuối mỗi S-Function. Nếu bỏ qua, mọi nỗ lực biên dịch S-Function sẽ bị hủy bỏ với một thông điệp báo lỗi failure during build of exports file

3.1.3. Những phƣơng thức gọi hàm S-Function (S-Function Callback Methods) Bảng 3.1. Các phương thức gọi hàm

mdlCheckParameters Kiểm tra tính hợp lệ các tham số của S- Function.

mdlDerivatives Tính toán các vi phân của S-Functions.

mdlDisable Đáp ứng việc vô hiệu hóa một hệ thống đang hoạt động chứa khối này.

mdlEnable Đáp ứng việc cho phép một hệ thống đang

hoạt động chứa khối này.

mdlGetSimState Trả lại một cấu trúc dữ liệu MATLAB chứa

trạng thái mô phỏng S-Function như cấu trúc ma trận hay mảng các ô nhớ (cell array)

mdlGetTimeOfNextVarHit Chỉ định thời gian của bước thời gian tiếp theo.

mdlInitializeConditions Khởi tạo véc tơ trạng thái cho S-Function.

mdlInitializeSampleTimes Chỉ định thời gian trích mẫu mà S-Function hoạt động

mdlInitializeSizes Chỉ định số đầu vào, đầu ra, các tham số, và các đặc điểm khác của S-Function

mdlOutputs Tính toán đầu ra cho khối chứa S-Function.

mdlProcessParameter Xử lý các tham số S-Function

mdlProjection Thay đổi tùy biến bộ giải các biến trạng thái của hệ thống để hợp lý hơn cho các quan hệ với thời gian biến đổi.

mdlRTW Tạo ra dữ liệu phát mã.

mdlSetDefaultPortComplexSignals Thiết lập kiểu dữ liệu số (thực, phức hoặc kế thừa) cho các cổng mà kiểu dữ liệu không thể được xác định từ các kết nối khối.

mdlSetDefaultPortDataTypes Thiết lập kiểu dữ liệu cho các cổng mà dữ liệu của chúng không thể xác định từ kết nối khối.

mdlSetDefaultPortDimensionInfo Thiết lập cỡ hay số chiều của tín hiệu được chấp nhận hoặc phát ra bởi các cổng của S- Function.

mdlSetInputPortComplexSignal Thiết lập kiểu số (thực, phức, hoặc kế thừa) những tín hiệu được chấp nhận bởi cổng vào.

mdlSetInputPortDataType Thiết lập kiểu dữ liệu cho những tín hiệu được chấp nhận bởi một cổng vào.

mdlSetInputPortDimensionInfo Thiết lập số chiều cho tín hiệu được chấp nhật bởi cổng vào.

mdlSetInputPortDimensionsModeFcn Truyền chế độ kích cỡ

mdlSetInputPortFrameData Chỉ định liệu cổng vào có chấp nhận kiểu dữ liệu khung.

mdlSetInputPortSampleTime Thiết lập thời gian trích mẫu cho cổng vào mà thừa hưởng thời gian trích mẫu từ cổng nó được nối tới.

mdlSetInputPortWidth Thiết lập độ rộng cổng vào mà chấp nhận tín hiệu véc tơ. (1-D)

mdlSetOutputPortComplexSignal Thiết lập kiểu số (thực, phức, hoặc kế thừa) cho tín hiệu được chấp nhận bởi một cổng ra.

mdlSetOutputPortDataType Thiết lập kiểu dữ liệu của những tín hiệu được phát ra bởi một cổng ra.

nhận bởi một cổng ra.

mdlSetOutputPortSampleTime Thiết lập thời gian trích mẫu cho cổng ra mà thừa hưởng thời gian trích mẫu từ cổng nó được nối tới.

mdlSetOutputPortWidth Thiết lập độ rộng cổng ra mà chấp nhận tín hiệu véc tơ. (1-D)

mdlSetSimState Thiết lập trạng thái mô phỏng của S- Function bằng cách phục hồi SimState.

mdlSetWorkWidths Chỉ định kích cỡ của những vec tơ công việc (work vectors) và tạo những tham số thi hành (run-time) được yêu cầu bởi S- Function.

mdlSimStatusChange Đáp ứng tới một sự dừng hoặc tiếp tục của quá trình mô phỏng một mô hình mà chứa S-Function này.

mdlStart Khởi tạo những vecto trạng thái của S-

Function

mdlTerminate Thực thi bất cứ hành động nào được yêu cầu tại lúc kết thúc mô phỏng

mdlUpdate Cập nhật các trạng thái của một khối

mdlZeroCrossings Cập nhật vecto zero-crossing

3.2. Xây dựng thƣ viện

3.2.1. Các hệ thống tích trữ chất lỏng

3.2.1.1. Hệ thống một bình mức một đầu vào

Chức năng:

Mô phỏng hệ thống một bình mức với một van vào và một van ra. Sơ đồ hệ thống một bình mức được biểu diễn trong Hình 3.1:

h out F in F A Hình 3.1. Hệ thống một bình mức một

đầu vào một đầu ra Hình 3.2.

Khối Simulink Single Tank

Mô tả khối:

 Tên khối: SINGLE TANK

 Số đầu vào: 3

o In ValveOut Valve là các van điều khiển lưu lượng vào và ra. o Max Flow là lưu lượng tối đa cung cấp cho bình mức. Max Flow

thể là một hằng hoặc là một hàm tùy ý.

 Số đầu ra: 3

o Level là mức chất lỏng trong bình, chính là chiều cao của khối chất lỏng (không phải thể tích).

o In Flow và Out Flow là lưu lượng vào và ra.

Across Sectional Area of Tank: diện tích bề mặt cắt ngang của bình tính theo đơn vị .

Valve Coefficient: Hệ số là hệ số tỉ lệ trong công thức √ √ tính theo đơn vị .

Initial Level: Mức chất lỏng ban đầu trong bình, đơn vị tính theo

m.

Hình 3.3. Tham số khối Single Tank

Các yêu cầu cần xử lý chung liên quan tới van và lƣu lƣợng:

 Các đầu vào In ValveOut Valve là độ mở van tương ứng, nhận các giá trị thực trong khoảng 0.0 tới 1.0. Giá trị 0.0 tương ứng với trường hợp van đóng hoàn toàn, giá trị 1.0 tương ứng với trường hợp van mở hoàn toàn (100%).

 Các van không đáp ứng tức thời với giá trị van đặt vào mà phải thay đổi dần dần đến giá trị mong muốn đó. Muốn vậy ta có thể tích hợp trong khối hoặc xây dựng một khối động học cho van. Trong trường hợp này ta sử dụng phương án xây dựng riêng một khối động học cho van.

 Lưu lượng được tính bằng tích của độ mở van và giá trị lưu lượng tối đa. Lưu lượng tối đa vào phụ thuộc nguồn cung cấp chất lỏng. Lưu lượng tối đa ra phụ thuộc vào mức chất lỏng trong bình theo công thức √

Mô hình động học cho quá trình:

3.2.1.2. Hệ thống một bình mức hai đầu vào

Chức năng:

Mô phỏng hệ thống một bình mức với hai van vào và một van ra. Sơ đồ hệ thống một bình mức được biểu diễn trong Hình 3.4

w1 w2

w h

Hình 3.4. Hệ thống một bình mức hai

đầu vào một đầu ra

Hình 3.5. Khối Simulink Single Tank

2

Mô tả khối:

 Tên khối: SINGLE TANK V2

 Số đầu vào: 5

o Valve 1, Valve 2 là các van điều khiển lưu lượng vào và Valve 3 là các van điều khiển lưu lượng ra.

o Max Flow 1, Max Flow 2 là lưu lượng tối đa cung cấp cho bình mức tương ứng với đầu vào 1 và 2. Max Flow có thể là một hằng hoặc là một hàm tùy ý.

 Số đầu ra: 4

o Level là mức chất lỏng trong bình, chính là chiều cao của khối chất lỏng (không phải thể tích).

o Flow 1 Flow 2 là lưu lượng vào và Flow 3 là lưu lượng ra khỏi bình.

Các tham số của khối:

Across Sectional Area of Tank: diện tích bề mặt cắt ngang của bình tính theo đơn vị .

Density of Liquid: Khối lượng riêng của chất lỏng. Đơn vị tính là  Valve Coefficient: Hệ số là hệ số tỉ lệ trong công thức √ √ , trong trường hợp này ta tính theo lưu lượng khối lượng nên đơn vị tính theo đơn vị .

Initial Level: Mức chất lỏng ban đầu trong bình, đơn vị tính theo .

Hình 3.6. Tham số khối Single Tank 2

Mô hình động học cho quá trình:

3.2.1.3. Hệ thống hai bình mức tương tác

Chức năng:

Mô phỏng hệ thống hai bình mức tương tác với một van vào, một van nối thông hai bình và một van ra. Sơ đồ hệ thống hai bình mức tương tác được biểu diễn trong hình dưới:

h1 A1 A2 h2 0 F 1 F 2 F

Hình 3.7. Hệ thống hai bình mức Hình 3.8. Khối Simulink Two Tanks

Mô tả khối:

 Tên khối: TWO TANKS

 Số đầu vào: 4

o Valve 1 là van điều khiển lưu lượng vào bình 1, Valve 2 là van điều chỉnh lưu lượng giữa bình 1 và bình 2 và Valve 3 là các van điều khiển lưu lượng ra bình 2.

o Max Flow là lưu lượng tối đa cung cấp cho bình mức. Max Flow có thể là một hằng hoặc là một hàm tùy ý.

 Số đầu ra: 5

o Level 1, Level 2 tương ứng là mức chất lỏng trong bình 1 và 2, chính là chiều cao của khối chất lỏng (không phải thể tích).

o Flow 1 là lưu lượng thể tích vào bình 1, Flow 2 là lưu lượng chảy nối thông giữa hai bình và Flow 3 là lưu lượng ra khỏi bình 2.

Across Sectional Area of Tank1, 2: diện tích bề mặt cắt ngang của bình 1 và 2 tương ứng tính theo đơn vị .  Valve Coefficient 1, 2: Hệ số là hệ số tỉ lệ trong công thức √ √ tính theo đơn vị . Trong trường hợp này là hai hệ số tương ứng với

Valve 2Valve 3

Initial Level 1, 2: Mức chất lỏng ban đầu trong bình tương ứng với bình 1 và 2, đơn vị tính theo .

Hình 3.9. Tham số khối Two Tanks

Mô hình động học cho quá trình:

( √ )

3.2.2. Các quá trình pha trộn Chức năng: Chức năng:

Một phần của tài liệu Xây dựng thư viện các mô hình đối tượng của quá trình công nghệ phục vụ nghiên cứu và giảng dạy (Trang 50)

Tải bản đầy đủ (PDF)

(155 trang)