Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 138 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
138
Dung lượng
2,14 MB
Nội dung
Chương MÔ PHỎNG BẰNG SIMULINK POWER SYSTEM BLOCKSET VÀ GUI §1 MƠ PHỎNG BẰNG SIMULINK 1.1 Khỏi động Simulink Khởi động Simulink cách lick vào icon Simulink Matlab toolbar hay đánh lệnh Simulink cửa sổ Matlab Lúc hình xuất cửa sổ Simulink Library Browser, có thư viện khối cùa Simulink 1.2 Tạo mơ hình Để tạo mơ hình mói, click vào icon cửa sổ Simulink Library Browser hay chọn menu File —» New —> Model cửa sổ Matlab 1.3 Thay đổi mơ hình dã có Click vào icon cửa sổ Simulink Library Browser hay chọn Open cửa sổ Matlab File chứa mơ hình mở ta thay đổi thông số thân mơ hình 1.4 Chọn đối tượng Để chọn đối tượng, click lên Khi đối tượng có hình chữ nhật có góc hạt bao quanh 1.5 Chọn nhiều đối tượng Có thể chọn nhiều đối tượng lúc cách dùng phím Shift nháy chuột hay vẽ đường bao quanh đối tượng cách bấin chuột kéo thành hình chữ nhật thả hình chữ nhật bao lấy đối tượng cần chọn 1.6 Chọn tất đối tượng Để chọn tất đối tượng cửa sổ ta chọn menu Edit —> Select All 1.7 Các khối Khối phần tử mà Simulink dùng để tạo mị hình Có thể mơ hình hố hộ thống dộng học cách tạo mối liên hệ khối theo cách thích hợp Khi tạo mơ hình cần thấy khối cùa Simulink có hai loại bản: 126 - Các khối khơng nhìn thấy dóng vai trị quan trọng việc mơ hệ thống Nếu thêm hay loại bỏ khối khơng nhìn thấy thuộc tính mơ hình thay đổi - Các khối nhìn thấy khơng đóng vai trị quan trọng mơ hình hóa, chúng giúp ta xây dựng mơ hình cách trực quan đổ hoạ Một vài khối Simulink thấy số trường hợp lại không thấy số trường hợp khác Các khối gọi khối nhìn thấy có điều kiện 1.8 Copy khối từ cửa sổ sang cửa sổ Khác i Khi xây dựng mơ hình, thường phải copy khối từ thư viện khối II Simulink sang cửa sổ mơ hình Để làm việc cần thực bước sau: - Mở cửa sổ thư viện khối, - Kéo khối muốn dùng từ cửa sổ thư viện vào cửa sổ mị hình thả Ị Có thể copy khối cách dùng lệnh Copy Paste menu Edit qua buóc sau: - Chọn khối muốn copy - Chọn Copy từ menu Edit - Làm cho cửa sổ cần copy hoạt động - Chọn Paste từ menu Edit Simulink gán tên cho copy Nếu khối mơ hình tên giống thư viện Simulink Nếu thứ hay thứ sau có số hay 2, v.v Trên cửa sổ mõ hình có lưới, để hiển thị lưới từ cửa sổ Matlab gõ vào: set-param( ‘Cmodel name>’ showgrid’ on ’) Để thay đổi khoảng cách ò lưới ta dùng lệnh: set-param (‘ y gridspacing’,) Ví dụ: Để thay đổi lưới thành 20 pixels, gõ lệnh: set-param (‘Y gridspacing\20) Đê nhân khối giữ phím Ctrl, kéo khối tới vị trí khác thả 1.9 Mô tả thông số khối Đê mô tả thông sô cùa khối dùng hộp thoại Block Properties Đê hiển thị hộp thoại ta chọn khối chọn Block Properties từ menu Edit Có thê nhắp đúp chuột lên khối để hiển thị hộp thoại Hộp thoại Block Properties góm: 127 - Description: Mơ tả ngắn gọn mục đích khối, - Priority: Thực quyén ưu tiên khối so với khối khấc tron^í mơ hình, - Tag: Trường văn lưu với khối, - Open function: Các hàm Matlab gọi mờ khối này, - Attributes format string: Thông số mô tả thông số hiển thị icon khối 1.10 Deleting Blocks Muốn xoá hay nhiều khối, chọn khối nhấn phím Del 1.11 Thay đổi hướng khối Có thể xoay hướng khối cách vào menu Format sau dó: - Chọn Flip Block dể quay khối 180°, - Chọn Rotate Block dể quay khối 90° 1.12 Định lại kích thước khối Để thay dổi kích thước khối, đưa trỏ chuột vào góc khối bấm kéo kích thước mong muốn thả 1.13 Xử lí tên khối Mỗi khối có tên, phải phải chứa kí tự Mặc định tên khối nằm khối Với tên khối ta thực thao tác sau đây: - Thay đổi tên khối cách bấm chuột vào tên có nhập lại tên Nếu muốn thay đổi font chữ dùng cho tên khối chọn khối, vào menu Format chọn Font - Thay đổi vị trí đặt tên khối từ lên hay ngược lại cách kéo tên khối tới vị trí mong muốn - Khơng cho hiển thị tên khối cách vào menu Format chọn Hide Names hay Show Names 1.14 Hiển thị thông số bên khối Simulink hiển thị hay nhiều thơng số bên khối Để làm điều ta nhập vào dòng trường Attributes format string hộp thoại Block Properties 1.15 Cắt khối Để cắt khối khịi sơ dồ ta bấm phím Shift kéo khối đến vị trí 128 1.16 Nhập xuâ't vectơ Hầu hết khối chấp nhận đại lượng đầu vào vectơ hay vô hướng biến đổi thành đại lượng đầu vectơ hay vơ hướng Có thể xác định đầu vào nhận đại lượng vectơ cách chọn mục Wide Vector Lines từ menu Format Khi tùy chọn chọn, đường nhận vectơ vẽ đậm đường mang sô' liệu vô hướng Nếu thay đổi mơ hình sau chọn Wide Vector Lines phải cập nhật hình vẽ cách chọn Update Diagram từ menu Edit, khởi động lại Simulink để cập nhật sơ đồ 1.17 Mả rộng vô hướng đầu vào thông sô' Mở rộng vô hướng biến dổi đại lượng vô hướng thành vectơ với số phần tử không thay đổi Simulink áp dụng mờ rộng vô hướng cho đại luợng vào thông số hẩu hết khối M rộng đầu vào: Khi dùng khối với nhiều đầu vào trộn lẫn đại lượng vectơ đại lượng vô hướng Lúc đầu vào vô hướng mờ rộng thành vectơ với số phẩn tử đầu vào vectơ, phẩn tử đểu có trị số M rộng thơng số: Có thể dặt thơng số khối vectơ hố thành đại lượng vectơ hay đại lượng vô hướng Khi đặt thõng số vectơ, phần tử thông số kết hợp với phẩn tử tương ứng vectơ đầu vào, Simulink áp dụng mở rộng vô hướng để biến đổi chúng thành vectơ có kích thước phù hợp 1.18 Gán độ ưu tiên cho khối Có thể gán độ ưu tiên cho khối khơng nhìn thấy mơ hình Khối có độ ưu tiên cao đánh giá trước khối có độ ưu tiên nhị Độ ưu tiên dược gán cách dùng lệnh tương tác hay dùng chương trình Để dùng chương trình ta sử dụng lệnh: set-param(b,'Priori tyVnO b khối n số nguyên, số càns thấp, độ ưu tiên cao Để gán đ ộ ưu tiên bàng lệ n h ta nhập đ ộ LIU tiên v o trường Priority tron g hộp thoại Block Priorities khối 1.19 sử dụng Drop Shadows Có thể thèm Drop Shadow vào khối chọn cách chọn Show Drop Shadow tìr menu Format 129 1.20 Tạo thư viện Để tạo thư viện, chọn Library từ menu New menu File Simulinl hiển thị cửa sổ mới, có tên Library: untitled 1.21 MỞ thư viện có Khi mờ thư viện, tự động khố lại khơng thể thay đổi thành phẩn thư viện Muốn mở khoá ta chọn Unlock từ menu Edit 1.22 Copy khối từ thư viện vào mơ hình Có thể copy khối từ thư viện vào mơ hình copy hay paste, hay kéo thả vào cửa sổ mơ hình 1.23 Vẽ dường nối khối Để nối cổng khối với cổng vào khối khác ta thực sau: - Đặt trỏ chuột cổng khối đầu tiên, trỏ có dạng dấu +, - Nhấn giữ chuột, - Kéo trỏ chuột tới cổng vào khối thứ hai, - Thả chuột Để vẽ đường gấp khúc, nhấn phím Shift vẽ 1.24 Vẽ đường nhánh Đường nhánh đường nối từ đường có mang tín hiệu cùa tỏi cổng vào khối Để thêm đường nhánh ta thực sau: - Đưa trỏ chuột tới đường cần phân nhánh, - Nhấn phím chuột thời nhấn phím Ctrl, - Kéo trỏ chuột tới cổng vào thời thả chuột phím Ctrl Tuy nhiên, dùng phím phải chuột thay dùng phím Ctrl phím trái chuột 1.25 Chèn khối vào đường Có thể chèn khối vào đường cách kéo thả khối lên đường nối Khối chèn vào có đẩu vào đầu 1.26 Nhãn tín hiệu Nhãn tín hiệu đê ghi cho mơ hình Nhãn nằm trẽn hay đường nối nằm ngang, bên phái hay bên trái đường nối ihẳng đứng 130 - Để tạo nhãn tín hiệu, bấm đúp chuột lên đường nối ghi nhãn - Để di chuyển nhãn, sửa nhãn, click lên nhãn đánh nh ãn sau xóa nhãn cũ 1.27 Ghi Ghi đoạn văn cung cấp thịng tin mơ hình Có thể thêm ghi vào chỗ mơ hình - Để tạo ghi chú, nhấn đúp chuột vào vùng trống mơ hình, hình xuất hình chữ nhật có nháy đánh văn ghi vào khung - Khi muốn di chuyển phần ghi đến vị trí khác, bấm chuột vào kéo đến vị trí thả chuột - Để sửa ghi chú, bấm chuột vào đê hiển thị khung văn bắt đẩu sửa 1.28 Các kiểu liệu Simulink chấp nhận kiểu liệu sau: Double số thực với độ xác gấp đơi single số thực với độ xấc đơn int8 số ngun có dấu bit uint8 sô' nguyên không dấu bit ĩnt 16 số nguyên có dấu 16 bit uintló số nguyên khơng dấu 16 bit int32 số ngun có dấu 32 bit uint32 số nguyên không dấu 32 bit Các khối chấp nhận kiểu liệu double Khi nhập vào tham số khối, kiểu liệu mò tả lệnh: type(value), với type tên kiểu liệu value giá trị cùa tham số Ví dụ 1: Single( 1.0) liệu số thực có trị int8(2) liệu sơ' ngun có trị int32(3+2i) liệu số phức, phẩn thực phần sô nguyên 32 bit Tạo tín hiệu có kiêu d ữ liệu mó tả: Có Ihể đem vào mơ hình tín hiệu có kiểu liệu mơ tả phương pháp sau đây: - Nạp tín hiệu có kiểu liệu mong muốn từ Matlab 131 - Tạo khối đặt thông sô' có kiểu liệu mong muốn - Sừ dụng khối biến đổi kiểu liệu H iển thị kiểu liệu cổng: Để hiển thị kiểu liệu cùa cổng Iroiig mơ hình, chọn Port Data Types từ menu Format 1.29 Tín hiệu phức Mặc định giá trị tín hiệu Simulink số thực Tuy nhiên mơ hình tạo xử lí tín hiệu số phức Có thể đưa tín hiệu số phức vào mơ hình phương pháp sau: - Nạp tín hiệu phức từ Matlab - Tạo khối mơ hình cho giá trị phức - Tạo tín hiệu thực tương ứng với phần thực phần ảo tín hiệu phức kết hợp phần thành tín hiệu phức cách sử dụng khối biến đổi tín hiệu thực - ảo thành tín hiệu phức Có thể xử lí tín hiệu phức nhờ khối chấp nhận tín hiệu phức Phẩn lớn khối Simulink chấp nhận tín hiệu vào số phức 1.30 Tạo hệ thống Tạo m ột hệ thống cách thêm khôi hệ thông con: Đê tạo khối hệ thống trước thêm khối ta phải thêm khối hệ thống vào mơ hình thêm khối tạo nên hệ thống vào khối hệ thống cách sau: - Copy khối hệ thống từ thư viện Signal & System vào mị hình - Mờ khối hệ thống cách click đúp lên - Trong cứa sổ khối rỗng, tạo hệ thống Sử dụng khối inport dế biểu diễn đầu vào khối outport đê biểu diễn đầu Tạo hệ thống cách nhóm khói có: Nếu mơ hình có sơ khối mà ta muốn nhóm thành khối hệ thống nhóm khơi thành khối hệ thống cách bao khối đường nối chúng bẳng đường đứt nét (bấm chuột kéo từ góc đến góc khối) chuột, chọn Create Subsystem tìr menu Edit Gán nhãn cho cơng hệ thông con: Simulink gán nhãn cho cổng cùa hệ thống Nhãn tên cùa khối inport outport nối khối hệ thốna với khối bên ngồi qua cổng Có dấu nhãn bàng cách chọn khối hệ thông chọn Hide Port Labels từ menu Format 132 Có thể dấu hay nhiều nhãn cách chọn khối inport hay outport thích hợp khối hệ thống chọn Hide Name từ menu Format 1.31 Một số ví dụ mơ 1.31.1 Mõ phóng phương trình Phương trình dùng để biến đổi độ Celcius thành độ Fahrenheit : T°F = (9/5)T°C + 32 Trước hết khảo sát khối cần để tạo mơ hình: - Khối ramp thư viện Sources để input tín hiệu nhiệt độ, - Khối Constant thư viện Sources đê tạo số 32, - Khối Gain thư viện Math để tạo hệ số 9/5, - Khối Sum thư viện Math để cộng hai đại lượng, - Khối Scope thư viện Sinks để hiển thị kết Tiếp đưa khối vào cửa sổ mơ hình, gán giá trị thông số cho Gain ! Constant cách nhấp đúp lên chúng để mờ khối Sau nối khối - Khối Ramp đưa nhiệt độ Celcius mơ hình Mờ khối thay đổi giá trị khởi gán Initial output - Khối Gain nhàn nhiệt độ với hệ số 9/5 - Khối Sum cộng giá trị 32 với kết đưa nhiệt độ Fahrenheit - Khối Scope để xem kết Sơ đổ mõ hình 5.1 Bây Start từ menu Simulation dể chạy simulation Simulation chạy 10 giây, tương ứng với nhiệt độ Celcius biến đổi từ đến 10° Hình 5.1 Sơ đỏ mơ plióng biên đổi llumiỊ đo nhiệt độ 133 1.31.2 Mơ giải hệ phương trình tuyến tính Hình 5.2 Sơ đồ mơ giải hệ liai phương trình tuyến tính hai ẩn Xét hệ phương trình tuyến tính có hai ẩn: lz ,+ z = l Ị-z , +z2 = l Đê’ mô ta dùng khối: - Hai khối Algebric Constraint thư viện Math đê giải phương trình, - Hai khối Sum thư viện Math để tạo phép tính, - Hai khối Display thư viện Sink để hiển thị giá trị nghiệm, - Khối Constant thư viện Sources đê tạo giá trị l 1.31.3 Mô giải phương trinh bậc cao Xét phương trình: x: + 3x + l = Đẽ mô ta dùng khối: - Khối Algebric Constraint thư viện Math để giải phương trình, - Khối Display thư viện Sink để hiển thị trị số nghiệm, - Khối Constant thư viện Sources để tạo giá trị l , - Khối Sum thư viện Math đế tạo phép cộng, - Khối Math Function thư viện Math để tạo hàm X2, - Khối Gain thư viện Math để tạo hệ số 134 M ath F u n c tio n Hình 5.3 Sơ đổ mơ pliỏng giải phương trình bậc hai 1.31.4 Mơ phóng hệ thống liên tục đơn gián Ta mơ hình hố hộ mỏ tả bời phương trình vi phân x’(t) = -2 x (t) + u(t) với u(t) sóng hình chữ nhật có biên độ l tần số l rad/s Để mô hệ ta dùng khối: - Khối Gain thư viên Math đế tạo hệ số 2, - Khối Sum thư viện Math đế tạo phép tính, - Khối Scope thư viện Sink để xem kết quả, - Khối Signal Generator thư viện Sources đế tạo nguồn, - Khối Integrator thư viện Continuous để tích phân Gain Hình 5.4 Sơ đồ mõ pliỏnẹ hệ rlióhĩ; liên tục I35 file Nếu bỏ qua ‘UNIT=’ unit cần phải tham sơ' Ngược lại, tham số xuất theo thứ tự + unit số nguyên (INTEGER(4)) lớn 0, dùng thiết bị lơgic để liên kết với file ngồi thiết bị + access: cách truy cập vào file, nhận giá trị “APPEND” (ghi tiếp vào cuối file), “DIRECT” (truy cập trực tiếp), “SEQUENTIAL” (truy cập - ngầm định) + action tham số mô tả tác động dự định file, nhận giá trị ‘READ’ (file đọc), ‘WRITE’ (chỉ để ghi vào file), 'READWRITE' (cả đọc từ file ghi vào file) Nếu bỏ qua action, chương trình cố gắng mờ file vói 'READWRITE' Nếu khơng được, trước hết chương trình mở file với 'READ', sau với 'WRITE' Việc bỏ qua action không giống với ACTION = 'READWRITE' Nếu ACTION = 'READWRITE', mà file truy cập đọc ghi việc mở file khơng thành cơng Do việc bỏ qua action mềm dẻo linh động + blanks có dạng kí tự (Character*(*)), dùng để điều khiển cách biểu diẻn kí tự trống (dấu cách) đối vói vào/ra có định dạng, nhận giá trị 'NULL' 'ZERO' Giá trị 'NULL' (ngầm định) để bỏ qua kí tự trống, giá trị ’ZERO' để xử lí kí tự trống (các dấu cách đầu) số + blocksize ngầm định số nguyên ((INTEGER(4)), dùng để biểu diễn kích thưóc vùng đệm (tính byte) + caưiagecontrol có dạng kí tự (Character*(*)), dùng để việc hiểu kí tự ghi file có định dạng nào, carriagecontrol nhận giá trị 'FORTRAN' 'LIST + err nhãn câu lệnh thực chương trình Khi gặp lỗi mờ file chương trình chuyển điều khiển đến câu lệnh có nhãn err Nếu bỏ qua, hiệu ứng lỗi vào/ra xác định iostat + file có dạng kí tự (Character*(*)), dùng để tên file cần mở, có thê dấu cách, tên file hợp lệ, tên thiết bị tên biến xác định file Đối với Windows NT Windows 9x trở lên, tên file cho phép dài kí tự, phẩn mờ rộng dài kí tự Nếu file bị bỏ qua, trình biên dịch tạo file tạp (file nháp) có tên (khơng có phần mờ rộng) file bị xóa gập lệnh đóng file chương trình kết thúc + form xác định kiểu file mờ, nhận giá trị 'FORMATTED' (file có định dạng), 'UNFORMATTED' (file không định dạng), 'BINARY' (file nhị phân) 249 + iofocus tham sô lôgic, dùng đẽ chi việc có đặt cửa sổ (child window) cửa sổ hoạt động hay không Giá trị TRUE, (ngẩm định) tạo lời gọi SETFOCUSQQ trước thực lệnh READ, WRITE, PRINT + iostat tham số kết xuất, ngầm định số nguyên (INTEGER(4)), cho giá trị không xuất lỏi mờ file, giá trị âm gặp lỗi kết thúc bàn ghi, số xác định mã lỏi + pad có dạng kí tự (Character*^*)), dùng đê chì việc có đệm dấu cách vào ghi đọc hay không định dạng bàn ghi có độ dài lớn độ dài liệu, pad nhận giá trị 'YES' (ngầm định) 'NO' Tham số chi tác động đọc liệu + position có dạng kí tự (Character*(*)), vị trí trị file truy cập tuần tự, nhận giá trị ’ASIS’ (ngầm định), 'REWIND', 'APPEND' Nếu position nhận giá trị 'REWIND’, trỏ file định vị đáu file; n íu nhận giá trị 'APPEND', trò file định vị cuối file; nhận giá trị 'ASIS', trỏ file không thay đổi vị trí (tức giữ nguyên vị trí thời file) Vị trí trỏ file file ln ln dầu file + reel ngầm định số nguyên, để chi độ dài tính byte mội bàn ghi file truy cập trực tiếp, độ dài bàn ghi cực đại file Đối với file truy cập trực tiếp tham số địi hỏi phải có + share có dạng kí tự (Character*(*)), quyền truy cập file mờ Các giá trị share có ý ngliĩa sau: share - DENYRW': Cấm đọc/ghi share -D E N Y W R ': Cấm ghi share - DENYRD': Cấm đọc share -DENY NO NE': Cho phép cá đọc ghi (nsầm định) status: Có dạng kí tự (C h aracter^* )), dùns đẽ mõ tả trạng thái cùa file mờ 6.2.2 Lệnh đóng file Cú pháp lệnh đóng file CLOSE có dạng: CLOSE ([UNIT=1 unit [, ERR=err| [, lOSTAT=iostat| Ị STATUS=status|) 250 đó: + UNIT= bị bỏ qua unit phải tham sơ đầu tiên, ngược lại tham số xuất theo thứ tự + unit sô' nguyên thiết bị lôgic liên kết với file mờ Sẽ khống xuất lỗi níu file không mờ + err nhãn câu lệnh thực chương trình chuyến điều khiển tới lỗi xuất đóng file Nếu bỏ qua, hiệu úmg lỗi vào/ra xác định có mặt khơng có mặt tham số iostat + iostat tham số kết xuất, ngẩm định số nguyên (INTEGER*4), nhận giá trị khơng xuất lỗi đóng file, sơ' chi mã lỗi + status tham số vào, biếu thức kí tự (CHARACTERS*)), nhận giá trị “KEEP” “DELETE”, ngầm định “KEEP”, ngoại trừ file nháp Các file mờ khơng có tham số ‘FILE=’ gọi file nháp (“scratch” files) Đối vói nhũng file giá trị ngẩm định status 'DELETE' Nếu đặt status ='KEEP' file nháp gây nên lỗi run-time 6.3 Các lệnh vào/ liệu với file 6.3.1 Lệnh đọc dữliệu từ file (READ) Cú pháp lệnh READ làm việc với file có dạng: READ { { fm t, I nml I I ( [UNIT=] unit [, I [FMT=] fmt I [NML=] nml I ] [, ADVANCE=advance ] [, END=end] [, EOR=eor] [, ERR=err] [, IOSTAT=iostat] [, REC=rec| [, SIZE=size]) I iolist dâu gạch đứng (I) dùng đê phân chia tham sơ thuộc nhóm, c nghĩa chi phép chọn tham số nhóm Ví dụ 1: Nếu chọn ‘[FMT=| fmt’ khơne phép chọn ‘|NML= nml’ Nếu bó qua ‘U N IT =\ unit phái tham số Nếu bó qua 'FMT= ‘N M L=\ fmt nml phái tham số thứ hai Nếu muốn sir dụng fn khơng có ‘FM T =\ phái bị qua ‘U NIT=\ Trons trườns hợp khác tha số xuất theo thứ tự Hoặc fmt nml cán chi hai Sau đày ý nghĩa tham số + unit tên thiết bị lôgic Khi đọc từ file unit biểu thức nguyên Khi đọc từ file unit xâu kí tự, biến kí tự phần tử mảng kí tự, + fmt thị định dạng, nhận trường hợp: 1) Nhãn lệnh FORMAT, 2) Biểu thức kí tự (biến, thủ tục, hằng) xác định định dạng đọc vào, phân định bời dấu nháy đơn ( ') dấu nháy kép ("), 3) Dấu (*) trường hợp định dạng tự do, 4) biến nguyên ASSIGN Không dược dùng fmt NAMELIST Nếu lệnh READ bỏ qua tùy chọn ‘U N IT = \ ‘E N D = \ ‘ERR =’, ‘R E C = \ có fmt iolist câu lệnh đọc từ UNIT (*) bàn phím + nml tên NAMELIST Các tùy chọn iolist fmt phải dược bỏ qua Lệnh đọc NAMELIST thực đối vói file truy cập + advance có dạng kí tự (Character*(*)), dùng để cách đọc vào từ file có định dạng, nhận giá trị 'YES' (ngầm định) 'NO’ Nếu advance = ‘YES’, chương trình đọc theo định dạng fmt h ghi sang ghi khác gán giá trị cho iolist Nếu advance = ‘N O ’, chương trình đọc giá trị theo định dạng dòng gán cho iolist Nếu số giá trị chứa ghi số biến iolist xuất lỗi Yêu cầu tham số định dạng fmt phải khác (*) + end nhãn câu lệnh chương trình chuyển điều khiển đến trỏ file đặt cuối ghi kết thúc file Nếu bỏ qua end, xuất lỗi trỏ file cuối file trình đọc cố gắng đọc tiếp, trừ trường hợp có err iostat + eor nhãn câu lệnh chương trình chuyển diều khiển đến trò file đặt cuối ghi Tham số dùng đưa vào tham số A D V A N CE-N Ơ Nếu bỏ qua eor, hiệu ứng lỗi vào/ra xác định bời iostat + err nhãn cùa câu lệnh chương trình đuợc chuyển đến gặp lồi trình đọc Nếu bị qua err, hiệu ứng lỗi vào/ra xác định bời iostat + iostat tham số kết xuất, ngầm định số nguyên (INTEGER(4)) 252 iostat = khơng có lỗi, iostat = -1 gập kết thúc file (end-of-file), số thị thông báo lỗi + rec tham số vào, ngầm định số nguyên dương (INTEGER(4)) số thứ tự ghi cần đọc file truy cập trực tiếp Sẽ xuất lỗi sử dụng tham số cho file truy cập file Khi sử dụng tham sô' rec cần bỏ qua tham số end nml Con trỏ file định vị đến ghi có số thứ tự rec trước liệu đọc Số thứ tự ghi Ngẩm định rec số thứ tự ghi thời + size ngầm định số nguyên (INTEGER(4)), thực trả số lượng kí tự đọc chuyển cho biến nhận liệu vào Các dấu cách chèn đệm vào khơng tính Nếu sử dụng tham số cẩn phải đặt tùy chọn ADVANCE=NO' + iolist danh sách biến nhận liệu từ file 6.3.2 Lệnh ghi liệu file (WRITE) Cú pháp câu lệnh sau: WRITE ( [UNIT=] unit [, ([ FMT=] fmt I [ NML=] nml I ] [, ADVANCE=advance] [ ERR=err] [, IOSTAT=iostat] [, R EC =rec]) iolist đó: + dấu gạch đứng có ý nghĩa phân cách tham số nhóm mà chúng phép xuất Nếu bỏ qua UNIT= unit phải tham số fmt nml phải tham số thứ hai (FMT= NML= có thê bỏ qua) Ngược lại, tham số có thê xuất theo thứ tự Trong hai tham số fmt nml phép xuất + unit tên thiết bị lôgic Khi ghi file unit biểu thức nguyên gắn với định danh UNIT: 'Khi ghi file unit phải xâu kí tự, biến kí tự, mảng phần tử mảng kí tự, Nếu unit chưa liên kết với file cụ thê lệnh mờ file ẩn (implicit) thực Vi dụ: OPEN (unit, FILE = ' STATUS = 'OLD',& ACCESS = 'SEQUENTIAL', FORM = form) form 'FORMATTED' lệnh đọc/ghi có định dạng 'UNFORMATTED' lệnh đọc/ghi không định dạng 253 + fmt thị định dạng, có thè nhãn càu lệnh FORMAT, biến, hàm kí tự Kiểu định dạng chi cặp dấu nháy dơn (') nháy kép ("), biến nguyên ASSIGN dấu (*) + nml tên NAMELIST Nếu tham số chọn tham số iolist fmt phải bỏ qua File chứa NAMELIST phải File truy cập tuẩn tự + advance có dạng kí tự (Character^*)), cách ghi file tiến (advancing) hay không Nếu advance-Y ES’ (ngầm định) tạo đánh dấu vị trí cuối ghi Nếu advance='NO' ghi phần cùa bàn ghi (tức chưa tạo kết thúc ghi) + err chuyển điểu khiển nhãn cùa câu lệnh thực chương trình đến gập lỗi Nếu bò qua tham số này, hiệu ứng lỗi vào/ra xác định bời tham số iostat + iostat tham số kết xuất, ngầm định số nguyên (INTEGER(4)), khơng có lỏi, số xác định mã lỗi + rec tham số vào, ngầm định số nguyên dương (INTEGER(4)), chì số thứ tự ghi file ghi vào file truy cập trực tiếp Khi sử dụng tham số rec tham số end nml cần phải bỏ qua Con trò file phải định vị ghi rec trước liệu ghi Giá trị ngầm định cùa rec số thứ tự bán ghi thời + iolist danh sách biến ghi, liệt kê cách bời dấu phẩy (,) 6.3.3 V o /ra liệu với NAMELIST Vào / liệu bàng NAMELIST phương pháp hữu hiệu Fortran Bằng cách nhiểu biến nhóm tên danh sách ta có thê dọc ghi giá trị cùa chúng với câu lệnh đơn giản Nhóm namelist tạo bời cảu lệnh NAMELIST có dạng: NAMELIST / namelist / variablelist namelist tên nhóm variablelist danh sárh biến Lệnh NAMELIST đọc vào kiểm duvệt tên nhóm trono file NAMELIST Sau tìm thấy tén nhóm kiểm dut câu lênh gán »iá tri cho biến nhóm Trong file NAMELIST, nhóm bắt đầu bời dấu (&) dấu đôla ($), kết thúc dấu gạch chéo (/), dấu (&), dấu đôla (S) Từ khóa END xuất liền sau dấu kết thúc (&) ($) (khơng có dấu cách) không phép xuất sau dấu gạch chéo (/) 254 6.4 Ví dụ thao tác với file Tạo file có tên file ta xác định, sau đọc nội dung bàn gh file hỏi ta có xóa hay khơng Kết quà trung gian ghi và< file nháp Nội dung file tạo phục hồi lại lừ file nháp CHARACTER(80) Name, FileName, Ans WRITE( *, ’(A)', ADVANCE = 'N O ') "Name of file:" READ*, FileName OPEN( 1, FILE = FileName ) OPEN( 2, STATUS = 'SCRATCH' ) write (1,'(A)') 'TEST1 Only' write (1,'(A)') 'TEST2 Only' write (1,'(A)') 'TEST3 Only’ rewind( 1) 10 = DO WHILE (IO == 0) READ( 1, ’(A)', IOSTAT = IO ) Name print*,Name IF (IO == 0) THEN WRITE(*, (A)',ADVANCE='NO')“Xoa khong (Y/N)?M READ* Ans IF(Ans/=’Y'.AND.Ans/='y') WRITE( 2, * ) Name END IF END DO REWIND( ) CLOSE( 1, STATUS = 'D ELETE') OPEN( 1, FILE = FileName ) 10 = DO WHILE (IO == 0) READ( 2, '(A)', IOSTAT = IO ) Name IF (IO == 0) WRITE( 1, * ) Name END DO CLOSE( 1) CLOSE( 2) END §7 MỘT SỐ VÍ DỤ ỨNG DỤNG CỦA FORTRAN TRONG VẬ T LÍ Fortran phần mền tính số mạnh dược ứng dụng rộng rãi vật lí tính tốn để tính tốn mơ hệ vật lí hệ bán dẫn, hệ điện tử tương quan mạnh, hệ nano, tương tác hạt Điểm mạnh Fortran ngơn ngữ lập trình đơn giản, khả kết nối sờ liệu tốt, tính tốn với tốn phức tạp cần nhiều vịng lặp Trong vật lí đơi người ta dùng kết hợp Fortran dể tính tốn lấy liệu với phần mềm khác (Matlab, Maple, Mathematica ) để vẽ hình, mơ giải tích hóa hàm cần tìm Qua số ví dụ đây, thấy rõ khả ứng dụng Fortran giải tốn vật lí nắm kĩ thuật lập trình tính tốn 7.1 Ví dụ 1: Giải phương trình truyền nhiệt 7.1.1 Bài tốn Xác định nhiệt độ đồng chất có chiều dài L (0 < X < L), hai đầu mút giữ nhiệt độ không Biết lúc ban đẩu, phân bố nhiệt độ có dạng: L 2x < X 2.(1 - x ) — < X < L U(x, 0) = < - 2 7.1.2 Lập trình Phương trình truyền nhiệt tốn viết dạng: Ì - A ^ =0 at x2 Để lập trình giải toán ta giả sử cho L = l (0 < X < l), h = o l k = 0 r = k/h2 = l Số khoảng chia theo X NX = l/o l = 10 (i = 0,1, ,10) Điều kiện biên chọn là: U(0, t) = U (l, t) = hay U0J = Ujtxj = (với m Đ iều kiện ban đầu là: U; = ( 0, , , 0.6 , 0.8 , 1.0, , , , I Khi ta có chương trình tính sau: PROGRAM PT-Truyen-N hiet IMPLICIT NONE INTEGER N, NT REAL, ALLOCATABLE :: A(:), B(:), C(0, G(:), U(:,:), UX(:) 256 INTEGER I, J REAL H, K, R, T, L, X L=l ! Độ dài K = 0.01 ! Bước thời gian H = 0.1 ! Khoảng chia theo X R = K / H ** N = N1NT(L/H) ! Số khoảng chia theo X NT = 100 ! Số bước tích phân ALLOCATE(A(2:N-1), B( 1:N -1), C( 1:N-2), & G(1:N-1), U(0:N,0:NT), UX(1:N-1)) A = -R ! Xác định ba đường chéo A B=2+2*R C = -R DO I = 0, N ! Điều kiện ban đầu X = I*H U(I,0) = * X IF (X > 0.5) U(I,0) = 2*(1-X) END DO U(0,:) = ! Điểu kiện biên U(N,:) = T=0 PRINT "(11F7.4)", (I * H, I = 1,N-1) DO J = 1, NT ! Thời điểm tích phân G = R * (U(0:N-2,0) + U(2:N,0)) + & (2-2*R)*U(l:N-l,0) ! v ế phải G(1) = G(1) + R * U(0,J) G (N -l) = G (N -l) + R * U(N,J) CALL BaDuongCheo( A, B, c , u x , G ) U(1:N-1,J) = UX U(1:N-I,0) = UX END DO DO J= l, NT PRINT " (I IF7.4)", U(1:N,J) ENDDO CONTAINS SUBROUTINE BaDuongCheo ( A, B, c , X, G ) IMPLICIT NONE REAL B(:) ! Đường chéo REAL A(2:) ! Đưịng chéo REAL C(:) ! Đường chéo REAL, INTENT(OUT) :: X(:) ! ẩn REAL G(:) ! V ế phải REAL W( SIZE(B)) ! Mảng làm việc trung gian R EA LT INTEGER I, J, N N = S1ZE(B) W=B DO I = 2, N T = A (I)/W (I-1) W (I)= W (D C (I-1 )* T G(I) = G (I)-G (I-1 )* T END DO X(N) = G (N )/W (N ) DO = , N-l J = N-I X(J) = (G(J) - C(J) * X(J+D) / W(J) END DO END SUBROUTINE BaDuongCheo END 7.2 Ví dụ 7.2.1 Bài toán Giả sử giá trị Ihành phần kinh hướng vĩ hướng cùa tóc độ gió lưu trono file GIOKV.KQl thành hai cột, dịng cùa file ghi sơ' dịng liêu có tron ° file Viết chương trình đọc file GIOKV.KQ1 ghi kết tính tốc độ hướn° gió vào file GIO.KQ2 Ihành cột dạng sau: 258 TT kv VV m /s HUONG XX XXX XXX XXX XXX XX XXX XXX XXX XXX 7.2.2 Lập trình Khi lập chương trình giải nhiệm vụ ta nhận thấy cần tính mơ đui cùa tốc độ gió hướng gió nhiều lần Do nên sử dụng hàm: để tính tốc gió ta dùng loại hàm lệnh, để tính hướng gió ta dùng hàm chương trình REAL GIOK (200), GIOV (200), V, H, TOCDO, HUONG INTEGER I, N %Mơ tả hàm lệnh tính mơ đun tốc độ gió TOCDO (VK, VV) = SQRT (VK*VK+VV*VV) OPEN (1, FILE = GIO.KQ1, STATUS = 'OLD') READ(1,*)N DO I = 1, N READ(1,*) GIOK (I), GIOV (I) END DO CLOSE (1) OPEN (1, FILE = 'GIO.KQ2', STATUS = 'UNKNOWN') WRITE (1 ,4 ) ‘T T \ ‘V K \ ‘V V \ ‘M/S’, ‘HUONG’ F0RMAT(1X, I3.4F7.1) DO I = N V = TOCDO (GIOK (I), GIOV (I)) H = HUONG (GIOV (I), GIOK (I)) WRITE (1, 5) I, GIOK (I), GIOV (I), V, H FORMAT (IX, I3.4F7.1) END DO END % Hàm chương trình FUNCTION HUONG (VV, VK) REAL v v , VK, HG IF (VK EQ 0.0) THEN IF (VV GE 0.0) THEN HG = 90.0 ELSE HG = 270.0 ENDIF ELSE G = ATAN (ABS (VV / VK)) / 3.14159 * 180.0 IF (VK GT 0.0) THEN IF (VV GE 0.0) THEN HG = G ELSE HG = 360.0 - G ENDIF ELSE IF (VV GE 0.0) THEN H G = 180.0-G ELSE H G = 180.0 + G ENDIF ENDIF ENDIF HUONG = HG RETURN END 7.3 Ví du 7.3.1 Bài tốn Giả sử có số liệu quan trắc nhiệt độ nước biển tầng sâu điểm có tọa độ 120° KĐ-20°VB cho bảng Độ sâu Nhiệt độ Độ sâu Nhiệt độ Đô sâu Nhiêt dô Độ sâu Nhiệt độ 260 24,31 70 23,87 200 16,66 500 9,39 24,26 80 23,57 220 15,61 600 8,56 10 24,20 90 23,14 240 14,73 700 8,49 20 24,18 100 22,74 260 13,97 800 7,83 30 24,13 120 21,31 280 13,47 900 7,27 40 24,05 140 20,03 300 12,93 1000 6,71 50 23,98 160 18,49 350 11,40 1200 6.16 60 23,89 180 17,58 400 10,18 1400 5,44 Hãy lập chương trình nhập số liệu nội suy giá trị nhiệt độ c độ sâu nhập từ bàn phím, thơng báo lên hình kết nội suy di dạng sau: DO SAU = M NHIET DO = D O C 7.3.2 Lập trình INTEGER N, I, K REAL HO, TO, H (40), T (40) % In lời nhắc nhập độ sâu cần nội suy nhiệt độ PRINT * , ' NHAP DO SAU XAC DINH NHIET DO' READ *, HO % In lời nhắc nhập 32 cặp giá trị độ sâu nhiệt độ N = 32 K= PRINT *, ‘ NHAP DO SAU VA NHIET DO TANG \ K READ *, H(K), T(K) K = K+1 IF (K GT N) GOTO GOTO % Nội suy giá trị nhiệt độ độ sâu HO I=N- IF (HO GT H(N)) GOTO 1=1 IF (HO GE H (I) AND HO LE H (I+D) GOTO 1 = 1+1 GOTO TO = T(I) + (T(I+1)-T (I))*(H0-H(I)) / (H (I+1)-H(I)) PRINT 3, HO PRINT TO FORMAT( I X ,‘DO SAU = ‘, F , ‘ M ’) FORMAT (IX ,’NHIET DO = END F5.1, ’ DO C ) 2Ễ BÀI TẬP 7.1 Tính tích phân +» - a) 1= J -,sm x—dx - 00x —3x + l b) 1= [e2x sin(x2)dx _3 7.2 Mô dao động tự sợi dây đồng chất hữu hạn có chiều dài L, hai đầu mút gắn chặt Biết lúc ban đẩu sợi dây nằm trùng với Ox (0 < X < L) người ta cung cấp vận tốc ban đầu cho sợi dây ,1 :_ x ( L - x ) uL o = sin~ J ± 7.3 Mô dao động mội lắc đơn có khối lượng m, chiều dài L, đặt trường trọng lực với g gia tốc trọng trường lực cản khổng khí tỉ lệ với vận tốc vật m Coi dây không giãn trình dao động ma sát bỏ qua 262 TÀI LIỆU THAM KHẢO Tơn Tích Ái Phương pháp số NXB Đại học Quốc gia Hà Nội Tạ Vãn Đĩnh Phưcnig pháp tính NXB Giáo dục Dương Thuỷ Vĩ Giáo trình phươiigpháp tính NXB Khoa học Kĩ thuật Vũ Văn Hùng Phương plìáp thống kẽ momen nghiên cứu tinh chất li động vù đàn hồi tinh thể NXB Đại học Sư phạm Phan Văn Tân Giáo trình Ngơn ngữ lập trìnli Fortran 90 NXB Đại Quốc gia Hà Nội Tôn Tích Ái Pliần mềm tốn clio k ĩ sư NXB Đại học Quốc gia Hà Nội Đỗ Đình Thanh - Vũ Văn Hùng Phương pháp tốn lí NXB Giáo dục Vũ Văn Hùng Cơ học lượng tử NXB Đại học Sư phạm Vũ Vãn Hùng Bùi tập học lượiig tử NXB Đại học Sư phạm 10 Nguyễn Hữu Mình - Tạ Duy Lợi Bài tập vật lí lí tluiyết NXB Giáo dục 11 Nguyễn Chính Cương Giáo trình Phương pháp tốn lí NXB Đại Sư phạm 12 Nguyễn Chính Cương - Nguyễn Trọng Dũng Giáo trình tin liọc ứng lì NXB Đại học Sư phạm 13 Nguyễn Phùng Quang Matlab Sinntlìnk dành cho k ĩ sư điêu khiển tự đ NXB Khoa học Kĩ thuật 14 Nguyễn Việt An: x lí ảnh số Lí thuyết thực liùiih với Matlab NXB h Đức 15 Nguyễn Hoàng Hải - Nguyễn Việt Anh Lập trìnli Matlab ứntỊ ilụng ĩ Khoa học Kĩ thuật 16 Trần Thị Thục Linh - Đặng Hoài Bắc Giải tập Aử lí tín hiệu sơ' vị Mu NXB Bưu điện