L W6 //đọc nội dung 2 bytes kể từ ựịa chỉ 6 của local block Bên cạnh việc truy nhập theo ựịa chỉ ô nhớ như ựã làm, ta còn có thể sử
2.4.2. Lập trình có cấu trúc
Lập trình có cấu trúc (structure programming) là kỹ thuật cài ựặt thuật toán ựiều khiển bằng cách chia nhỏ các khối chương trình con FC hay FB với mỗi khối thực hiện một nhiệm vụ cụ thể của bài toán ựiều khiển chung và toàn bộ các khối chương trình này ựược quản lý một cách thống nhất bởi OB1. Trong OB1 có các lệnh gọi những khối chương trình con theo thứ tự phù hợp với bài toán ựiều khiển ựặt ra.
Hoàn toàn tương tự, một nhiệm vụ ựiều khiển còn có thể ựược chia nhỏ thành nhiều nhiệm vụ nhỏ cụ thể hơn nữa, do ựó một khối chương trình con cũng có thể ựược gọi từ một khối chương trình con khác.
để ựơn giản trong trình bày, khi một khối chương trình con này gọi một khối chương trình con khác, ta sẽ ký hiệu khối chứa lệnh là khối mẹ và khối ựược gọi là khối con. Hình 2.8 mô tả quy trình thực hiện việc gọi một khối con FC10 từ khối mẹ BO1.
Giữa khối mẹ và khối con có sự liên kết thể hiện qua việc trao ựổi các giá trị. Khi gọi khối con, khối mẹ cần cho những sơ kiện thông qua các tham trị ựầu vào ựể khối con thực hiện nhiệm vụ. Sau khi thực hiện xong nhiệm vụ, khối con phải trả lại cho khối mẹ kết quả bằng những tham trị ựầu ra. Hệ ựiều hành của CPU tổ chức việc truyền tham trị thông qua local block của từng khối con.
Trường đại học Nông Nghiệp Hà Nội Ờ Luận văn thạc sĩ khoa học kỹ thuật ẦẦẦẦẦẦẦẦẦẦ. 25
Hình 2.8:Thực hiện gọi khối FC10
Như vậy thực hiện lệnh gọi một khối con, hệ ựiều hành sẽ:
1) Chuyển khối con ựược gọi từ vùng Local memory vào vùng Work Memory
2) Cấp phát cho khối con một phần bộ nhớ trong Work memory ựể làm local block. Cấu trúc local block ựược quy ựịnh khi soạn thảo các khối.
3) Truyền các tham trị từ khối mẹ cho biến hình thức IN, IN - OUT của local block
4) Sau khi khối con thực hiện xong nhiệm vụ và ghi kết quả dưới dạng tham trị ựầu ra cho biến OUT, IN - OUT của khối local block, hệ ựiều hành sẽ chuyển các tham trị này cho khối mẹ và giải phóng khối con cùng local block ra khỏi vùng Work memory.
2.4.2.1. Khai báo local block cho FC
Local của khối con ựược chia thành hai phần:
- Phần các biến hình thức ựể khối con nhận và truyền tham trị với khối mẹ. Biến hình thức trong local block của khối FC có ba loại như bảng sau:
OB1 . . . Call FC10 . . Chuyển FC10 vào Work memory, cấp phát local block và gán giá trị từ OB1 Trả tham trị về OB1, xoá FC10 và local block trong Work
memory FC10 . . . . . . BE
Trường đại học Nông Nghiệp Hà Nội Ờ Luận văn thạc sĩ khoa học kỹ thuật ẦẦẦẦẦẦẦẦẦẦ. 26
Loại biến
hình thức Ý nghĩa
IN Biến hình thức nhận tham trị từ khối mẹ làm sơ kiện cho chương trình trong khối con
OUT Biến hình thức truyền tham trị từ khối con về khối mẹ IN - OUT Biến hình thức vừa có khả năng nhận vừa có khả năng
truyền tham trị giữa khối con với khối mẹ
- Phần chứa các biến tạm thời ựược ký hiệu là TEMP (viết tắt của Temporary) chứa các giá trị tắnh toán tức thời. Do local block sẽ ựược giải phóng khi kết thúc chương trình, giá trị các biến tạm thời này cũng sẽ bị mất theo ngay sau khi chương trình trong khối con ựược thực hiện xong.
Việc khai báo local block ựồng nghĩa với việc ựặt tên biến, ựịnh nghĩa loại biến (biến hình thức hay biến tạm thời) và kiểu dữ liệu (nguyên, thực, ký tự...) cho từng biến, trong ựó tên biến là những dãy ký tự hoặc số và không thuộc nhóm ký tự khoá (ựã ựược dùng bởi hệ ựiều hành)
Chương trình truy nhập local block thông qua các tên biến dưới dạng toán hạng của lệnh theo cấu trúc:
#<tên biến>
Vắ dụ:
L #receive //đọc nội dung ô nhớ có tên là receive trong local block vào ACCU1 block vào ACCU1
T #transmit //Chuyển ACCU1 tới ô nhớ có tên là transmit trong local block local block
Trường đại học Nông Nghiệp Hà Nội Ờ Luận văn thạc sĩ khoa học kỹ thuật ẦẦẦẦẦẦẦẦẦẦ. 27
2.4.2.2. Gọi khối FC và thủ tục chuyển tham trị
Lệnh gọi một khối con và truyền tham trị cho nó từ khối mẹ có dạng:
Cú pháp CALL FCx
Trong ựó FCx là tên khối con ựược gọi
Ngay khi gặp lệnh gọi một khối con, chương trình soạn thảo Step7 sẽ căn cứ và cấu trúc local block, cụ thể là những biến hình thức của khối con (biến IN, OUT, IN - OUT), mà cho hiện lại những biến này chờ người sử dụng khai báo tham trị ựó giải phóng local block cùng khối FB ra khỏi Word memory.
Kiểu tham trị truyền từ khối mẹ vào khối con thông qua biến hình thức IN hay IN - OUT phụ thuộc vào kiểu ựã gán. Cụ thể là:
- Nếu biến ựược khai báo một trong các kiểu BOOL, CHAR, INT, DINT, TIME, BOOL, DATE, TOD, S5TIME thì tham trị truyền có thể là một giá trị cụ thể hoặc là nội dung của một ô nhớ có kắch thước tương ứng.
- Nếu biến ựược khai báo kiểu BYTE, WORD, DWORD, DINT thì bắt buộc tham trị phải là nội dung của ô nhớ có kắch thước phù hợp.
Riêng ựối với tham trị ựược khối con trả về cho khối mẹ qua biến hình thức OUT hay IN - OUT thì luôn phải là một ô nhớ có cùng kắch thước với biến.
2.4.2.3. Local block của khối FB
Nhược ựiểm của kiểu khối FC là nội dung các biến tạm thời kiểu TEMP không ựược lưu lại cho những vòng quét sau. điều này bắt buộc những khối FC có sử dụng biến kiểu TEMP trong local block phải ựược thực hiện xong một vòng quét và do ựó hạn chế miền sử dụng của chúng.
Khắc phục nhược ựiểm trên, S7-300/400 cung cấp một loại khối có tắnh năng tương tự như khối FC nhưng lại có khả năng lưu giữ lại ựược nội dung các biến tạm thời cho các vòng quét kế tiếp, ựược gọi là khối hàm FB. Loại biến tạm thời có nội dung ựược lưu giữ này có tên là STAT (viết tắt của static)
Trường đại học Nông Nghiệp Hà Nội Ờ Luận văn thạc sĩ khoa học kỹ thuật ẦẦẦẦẦẦẦẦẦẦ. 28 hiện nhờ một khối dữ liệu như sau (hình 2.9)
Khi thực hiện lệnh gọi, hệ ựiều hành chuyển khối FB ựược gọi vào Word memory, cấp phát cho nó trong Word memory một local block như yêu cầu. Ghi các tham trị từ khối mẹ vào các tham trị biến hình thức loại IN, IN- OUT và nội dung các ô nhớ tương ứng trong DB kèm theo vào biến loại STAT trong local block. Khi chương trình trong khối FB kết thúc, hệ ựiều hành chuyển nội dung của biến hình thức loại IN, IN-OUT về cho khối mẹ và ghi lại giá trị của biến thuộc loại STAT trong local block vào khối dữ liệu kèm theo. Sau ựó giải phóng local block cùng khối FB ra khỏi Word memory.
Hình 2.9: Thực hiện gọi khối FB1 cùng với DB2 từ OB1
Về cơ bản, local block của khối FB cũng giống như khối FC, nhưng có thêm biến loại STAT. Các loại biến của khối FB (phụ lục 2.3)
Riêng ựối với biến STAT ta còn sử dụng ựược kiểu dữ liệu ARRAY, STRING OB1 . . Call FB1, DB2 . .
Chuyển FB1 vào Work memory, cấp phát local block và gán giá
trị cho biến hình thức từ OB1 và cho biến
loại STAT từ DB2
Trả tham trị về OB1, ghi lại biến loại STAT vào DB2. xoá FB1 và local block ra khỏi Work memory
FC10 . . . . . . BE DB2 DB2
Trường đại học Nông Nghiệp Hà Nội Ờ Luận văn thạc sĩ khoa học kỹ thuật ẦẦẦẦẦẦẦẦẦẦ. 29 Việc khai báo local block cho FB cũng hoàn toàn tương tự như cho FC gồm: đặt tên biến, xác ựịnh loại biến, (biến hình thức, STAT hay TEMP) và kiểu dữ liệu (nguyên, thực, ký tự...) cho từng biến.
Tên biến phải là những dãy ký tự hoặc số và không thuộc nhóm ký tự khoá (ựã ựược dùng bời hệ ựiều hành).
2.4.2.4. Instance block và thủ tục gọi khối FB
Khác với khối FC khối FB bao giờ cũng làm việc cùng với một khối dữ liệu DB dùng ựể lưu giữ nội dung các biến STAT của local block (hình 2.9). Khối DB này có tên là khối instance. Lý do là khi thực hiện lệnh gọi khối hàm FB, hệ ựiều hành cũng mở luôn khối dữ liệu này bằng lệnh (OPN DI)
Như vậy kèm với lệnh gọi khối FB ta phải chỉ thị luôn cả tên khối dữ liệu DB tương ứng. Lệnh gọi khối hàm FB có cấu trúc như sau:
Cú pháp CALL FBx , DBy
Trong ựó FBx là tên khối hàm ựược gọi và DBy là tên khối dữ liệu kèm theo. Khối dữ liệu DBy phải có cấu trúc phù hợp với local block của khối hàm FB ựược soạn thảo.
Phần mềm Step7 hỗ trợ người soạn thảo việc tạo lập khối dữ liệu DB có cấu trúc phù hợp với local block của khối FB ựược gọi. Ngay sau khi viết lệnh gọi một khối hàm FB và nếu khối DB kèm theo chưa ựược soạn thảo trước, Step7 sẽ tạo lập một khối DB mới có cấu trúc phù hợp với locak block của khối hàm FB ựó. Chẳng hạn nếu trong khối OB1 ta viết lệnh gọi khối hàm FB1 ựã soạn thảo (như mục 2.4.2.3) cùng khối dữ liệu có tên là DB2