tham trị giữ khối con và khối mẹ
- Phần chứa các biến tạm thời ký hiệu là TEMP (temporary)chứa các gía trị tính toán tức thời. Các giá trị này sẽ mất ngay 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 lại biến và kiểu dữ liệu 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)
2. Gọi khối FC và thủ tục truyền tham trị. - Lệnh gọi không điều kiện:
Cú pháp: CALL FCx
Trong đó FCx là tên khối con được gọi - Lệnh gọi có điều kiện:
Cú pháp CC FCx
Ngoài ra còn có lệnh UC Cú pháp UC FCx
3. Khai báo Local block của FB
- Nhược điểm của khối FC là nội dung của biến tạm thời kiểu TEMP không được lưu giữ lại cho những vòng quét sau. Để khắc phục nhược điểm này, S7 - 300/400 cung cấp một loại khối FB 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.
Loại biến này có tên là STAT (static). Phương thức lưu giữ lại nội dung các biến loại STAT được hệ điều hành thực hiện nhờ một khối dữ liệu như sau:
- Khi thực hiện lệnh gọi hệ điều hành chuyển khối FB được gọi vào Work memory, cấp phát cho nó trong work memory một local block như yêu cầu.
- Ghi các tham trị từ khối mẹ vào các tham 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 OUT, IN - OUT về cho khối mẹ và ghi lại các giá trị của biến thụô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 Work memory.
Thực hiện gọi khối DB1 kèm cùng với DB2 từ OB1 OB1
Call FC10, DB2
Chuyển FB1 vào Work memory, cấp phát locall block và gán tham 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 STAT vào DB2 xoá FB1 và local Block của nó
khỏi Work FB1 : : : : BE DB2 DB2
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 và kiểu dữ liệu cho từng biến.
Tên biến phải là những dãy ký tự hoặc số, không thuộc nhóm ký tự khoá.Kiểu dữ liệu hợp lệ cho tất cả biến. Riêng đối với STAT ta còn sử dụng được kiểu dữ liệu ARRAY, STRING.
- Toán hạng của những lệnh truy nhập ô nhớ của local block có cấu trúc: L#< địa chỉ >
4. Instance block và thủ tục gọi khối FB
Khác với khối FC, khối FB bao giờ làm việc cùng với khối dữ liệu DB dùng để lưu nội dung các biến kiểu STAT của local block .
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à khối hàm được gọi, DBy là tên khối của 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 FBx đã được soạn thảo.
Phần mềm Step 7 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 hàm FB đuọc gọi. Ngay sau khi viết lệnh gọi khối hàm FB và nếu khoi DB kèm theo cha được soạn thảo trước Step 7 sẽ tạo lập một DB mới có cấu trúc phù hợp với local block của khối hàm FB đó.
5 .Các khối OB đặc biệt và hàm FSC trong quản lý đồng hồ hệ thống. 5.1. Các khối OB đặc biệt:
Định nghĩa khối OB:
OB là từ viết tắt của Organization Block tức là khối tổ chức. Mỗi khối có một chức năng riêng. Chúng được gọi khi xảy ra ngắt, có lỗi, hay ta có thể tích cực chúng bằng cách gọi trực tiếp hàm hệ thống (SFC). Nếu nhiều khối được gọi thì sẽ phụ thuộc vào mức ưu tiên của mỗi khối, khối nào có mức ưu tiên cao hơn thì sẽđược gọi trước. Tuỳ thuộc vào mỗi loại CPU mà nó có thể hỗ trợ một số hay tất cả các khối tổ chức(OB). Tuy nhiên một số loại OB chỉ hoạt động được khi CPU đó có gắn modul mà có thể tạo ra ngắt để tích cực nó.
*Khối OB1
OB1 là khối tổ chức được hệ điều hành gọi theo chu kỳ. Cứ mỗi lần hệ điều hành gọi OB1 thì nó được xử lý theo vòng quét với quy trình nhất định :
Xử lý dữ liệu. Xuất dữ liệu. Truyền thông.
Khi chuyển từ chế độ STOP sang RUN thì hệ điều hành gọi OB1 sau khi thực hiện chế độ khởi động (OB100). OB1 có mức ưu tiên thấp nhất nên mọi OB khác có thể ngất OB1 ngoại thừ OB90. Vòng quét OB1 bị giới hạn bởi thời gian lớn nhất và thời gian nhỏ nhất. Nếu thời gian vòng quét lớn hơn thời gian lớn nhất cho phép là 150ms thì hệ điều hành gọi OB80 để sử lý lỗi. Nếu không có OB80 trong chương trình thì CPU chuyển về STOP. Nếu thời gian vòng quét nhỏ hơn thời gian nhỏ nhất là 10ms thì hệ điều hành sẽ gọi OB90 để xử lý lỗi. Nếu không có OB90 trong chương trình thì CPU không chuyển về STOP mà chờ đến hết thời gian nhỏ nhất đề thực hiện vòng quét tiếp theo. Ta có thể dùng hàm hệ thống SFC43 ‘‘RE_TRIGR’’ để đặt lại thời gian quan sát hay khởi động lại thời gian quan sát. SFC43 không có bất kì tham số nào ta chỉ cần khai báo là chương trình sẽ tự động gọi. OB1 có một bảng các biến cục bộ để quản lý chương trình trong khi hoạt động.
*OB 10( time of day interrupt)
Ngắt theo thời gian đó là sau một khoảng thời gian xác định do người sử dụng đạt thì sẽ có một ngắt gọi khối. Có thể thực hiện một lần hay theo chu kỳ.
Thời gian có thể đặt: Một lần. Mỗi phút. Mỗi giờ. Mỗi ngày. Mỗi tháng. Kết thúc mỗi tháng. Mỗi năm.
Để sử dụng ngắt theo thời gian thì ta phải xác định thời gian ngắt và tích cực ngắt. Mỗi loại CPU có thể hỗ trợ một hay nhiều loại thời gian, như vậy trước khi sử dụng ngắt theo thời gian thì ta phải xác định loại CPU sử dụng và nó hỗ trợ ngắt theo thời gian nào (ví dụ: CPU 314 hỗ trợ ngắt thời gian là OB10). Ta có thể làm như sau:
Step 7 hỗ trợ 4 ngắt theo thời gian trễ nhất định. Để gọi ngắt thời gian trễ ta sử dụng hàm chức năng của hệ thống là SFC32. Ngắt thời gian trễ được tích cực khi đủ điều kiện:
*SFC32 được gọi.
*Khối quản lý ngắt thời gian trễđược tải xuống chương trình. *Không huỷ bỏ ngắt hàm SFC33.
Hệ thống báo lỗi khi gọi ngắt mà không có khối quản lý ngắt, khi đó hệ điều hành sẽ gọi OB85 để xử lý lỗi. Mỗi loại CPU hỗ trợ một hay nhiều ngắt thơi gian trễ tương ứng. Nếu xảy ra lỗi về thời gian: như khi khối xử lý thời gian trễ chưa xử lý xong thì có một ngắt khác có cùng mức ưu tiên cũng tích cực cùng gọi khối tổ chức này. Hệ điều hành hỗ trợ 3 hàm hệ thống để quản lý ngắt thời gian trễ:
* SFC32 ‘‘SRT_DINT’’ để tích cực ngắt. * SFC33 ‘‘CAN_DINT’’ để hủy bỏ ngắt.
* SFC34 ‘‘QRY_DINT’’ để đọc trạng thái ngắt
• Khối OB35 (Cyclic Interrupt) :
Chương trình trong khối OB35 sẽ được thực hiện cách đều nhau một khoảng thời gian cố định. Mặc định khoảng thời gian này sẽ là 100ms, song ta có thể thay đổi nó trong bảng tham số của modul CPU nhờ phần mềm Step 7. Thay đổi thời gian chu kì ngắt ta cũng có thể thay đổi được trong khoảng 1ms đến 60000ms. Ta thay đổi thời gian chu kỳ bằng phần mềm Step 7 như sau:
Nháy đúp chuột trái vào Hardware trong một trạm S7-300 sau đó ta nháy đúp chuột trái vào CPU X (X là tên CPU ví dụ: CPU 314) ta có một cửa sổ Properties của CPU, cuối cùng ta vào thớt tên là Cyclic Interrupt rồi thay đổi chu kỳ quét trong mỗi khối OB mà CPU đó hỗ trợ. Đây là loại ngắt thời gian dễ khai báo và sử dụng nhất. Ta chỉ cần viết chương trình vào khối OB ngắt thời gian trễ mà CPU hỗ trợ rồi tải xuống chương trình thì lập tức khối sẽđược gọi theo thời gian mặc định nếu ta không muốn thay đổi thời gian ngắt của nó.
• Khối OB40 ( hardware Interrupt)
Chương trình trong OB40 sẽđươc thực hiện một tín hiệu báo ngắt từ ngoại vi đưa vào modul CPU thông ra các cổng vào ra onboard đặc biệt, hoặc thông qua các modul CP, SM , FM.
Chương trình trong khối OB 80 sẽ được thực hiện khi thời gian vòng quét vượt quá khoảng thời gian cực đại đã quy định hoặc khi có một tín hiệu ngắt gọi một khối OB nào đó mà khối OB này chưa kết thúc ở lần gọi trước. Mặc định thời gian gian quét là 150ms nhưng có thể thay đổi nó thông qua cổng modul nhờ phần mềm Step 7.
• Khối OB 81 (Power supply Fault)
Modul CPU sẽ gọi chương trình trong khối OB 81 khi phát hiện thấy có lỗi về nguồn nuôi.
• Khối OB 82 (Diagnostic Interrupt)
Chương trình trong OB82 được gọi khi CPU phát hiện thấy các sự cố từ các modul vào/ ra mở rộng. Các modul mở rộng này phải có khả năng tự kiểm tra mình.
• Khối OB 85 (Not Load Fault)
Hệđiều hành gọi OB85 khi xảy ra một trong 3 lỗi sau:
*Khi có tín hiệu ngắt mà không có OB tương ứng xử lý ngắt (trừ OB81). *Lỗi khi hệđiều hành truy cập modul.
*Lỗi truy cập vào ra hệ thống khi dang truy cập ảnh của quá trình.
Những lỗi trên đều xảy ra với nguyên nhân: một mức ưu tiên cao hơn được cho phép, nếu không được xử lý hay bị ngắt xử lý thì sẽ tạo ra lỗi gọi ngắt mức ưu tiên (OB85). Nếu có tín hiệu gọi ngắt mức ưu tiên trong chương trình mà không có OB85 thi CPU sẽ chuyển về STOP. Tương tự các khối tổ chức trong OB85 cũng có thể được che ngắt hay bỏ ngắt bằng hàm hệ thống SFC39-SFC42.
• Khối OB87( Communication Fault):
Hệ điều hành gọi OB87 khi xuất hiện báo lỗi có liên quan đến truyền thông. Khi xảy ra lỗi cho dù OB87 không được lập trình thì CPU cũng không chuyển về chế độ STOP. Tương tự các khối OB khác ta cũng có thể che hay bỏ che ngắt gọi OB87 nhờ sử dụng hàm hệ thống SFC39 đến SFC42.
• Khối OB100 ( Start Up Information )
Khối OB100 sẽđược thực hiện 1 lần khi CPU chuyển trạng thái STOP sang RUN.
• Khối OB121 ( Synchronous error )
Khối OB121 sẽ được thực hiện khi CPU phát hiện thấy lỗi logic trong chương trình như đổi sai kiểu dữ liệu hoặc lỗi truy nhập khối DB, khối FC, khối FB không có trong bộ nhớ của CPU.
Hệ điều hành gọi OB121 khi xảy ra lỗi đồng bộ có liên quan đến việc xử lý chương trình. Ví dụ: lỗi chuyển đổi sai khiểu dữ liệu, lỗi truy nhập khối dữ liệu DB hay gọi một khối FC không có trong bộ nhớ...
OB121 có cùng mức ưu tiên giống như mức ưu tiên của OB bị ngắt. Điều này giúp cho khối OB121 có thể sủ dụng nội dung cũ có trong các thanh ghi trước khi xuất hiện tín hiệu báo lỗi. Tương tự khi thực hiện xong chương trình OB121 và trở về OB bị ngắt, chương trình trong khối OB nay có thể sử dụng đọc nội dung các thanh ghi được sửa bởi OB121. Khi có lỗi lập trình mà OB121 không có trong chương trình thì CPU chuyển sang chếđộ STOP.
Không giống như các OB xử lý lỗi ở trên, OB121 không bị che hay bỏ che ngắt bởi các hàm hệ thống SFC39- SFC42 mà bị che hay bỏ che ngắt bởi SFC36- SFC38. 5.2.Hàm quản lý đồng hồ hệ thống
SFC ( System Function ) là những khối chức năng được lập trình sẵn và dùng với những nhiệm vụ xác định. Có 88 hàm SFC trong thư viện của phần mềm STEP 7 được sử dụng cho các loại S7-300 ta chỉ nghiên cứu 2 hàm sau.
*Hàm SFC 0 ‘‘SET_CLK’’
SFC 0 có nhiệm vụ đặt thời gian cho CPU tại biến PDT. Đồng hồ hệ thống CPU sẽ bắt đàu chạy từ thời điểm đó. Việc đặt thời gian ngoài của SFC0 ta còn có thể tiến hành bằng phần mềm Step 7 ( ta vào PLC trên thanh công cụ, chọn mục Set time of Day... rồi đặt thơi gian theo ý muốn sau khi ta apply thì thời gian được tải xuống CPU ). Biến vào ra của SFC 0 chỉ gồm 2 thông số là thời gian đặt và mã lỗi
Tên biến Loại Kiểu Y nghĩa
PDT IN DATE_AND_TIME Đặt biến kiểu DT mà ta muốn CPU làm việc từđó
RET_VAL OUT INT
Mã lỗi trả về trong quá trình hoạt động của SFC: W#16#0000:Không có lỗi W#16#8080:Lỗi ngày W#16#8081:Lỗi giờ Kiểu DATE_AND_TIME (DT) được kết hợp bởi kiểu DATE và kiểu
TIME_OF_DAY (TOD) tức là:
Kiểu DATE có định dạng: ‘‘nam_thang_ngay’’
Kiểu TIME_OF_DAY có định dạng: “giờ:phút:giây:milli giây và thứ”. Kiều DT được định dạng trong 8 BYTE cụ thể sau:
BYTE 1: năm. BYTE 2: tháng. BYTE 3: ngày. BYTE 4: giờ. BYTE 5: phút. BYTE 6: giây.
BYTE 7,8: milli giây và thứ.
Kiểu DATE_AND_TIME không được trực tiếp nhập vào mà thông qua hàm chức năng kết hợp kiều DATE và kiểu TIME_OF_DAY bằng hàm FC3 ‘‘D_TOD_DT’’
Hàm chức năng FC3 chỉ có 3 tham số như sau:
Tên Loại Kiểu í nghĩa
IN1 INT DATE Nhập vào định dạng kiểu DATE
IN2 INT DATE_OF_DAY Nhập vào định dạng kiểu TOD
RET_VAR OUT DATE_OF_TIME Giá trị trả về là kiểu DT
Những hàm chức năng có liên quan đến kiểu DT và có thểđược sử dụng chung với SFC 0 (ví dụ: FC 1, FC 3, FC 6, FC 7, FC 8, FC 33, FC 34, FC35, FC 40).
*SFC1 “READ_CLK”
Có chức năng đọc đồng hồ hệ thống và trả về giá trị kiểu DT. Hàm hệ thống SFC 1 cho ta biết chính xác CPU hiện đang chạy ở thời điểm nào có phải đúng với đồng hồ thời gian thực hay không. Có thể xem đồng hồ hệ thống như cách đặt lại nó đã nói ở hàm SFC 0. Lúc đó ta có thể so sánh được xem đồng hồ hệ thống và thời gian thực xem có trùng nhau không.
Hàm có 2 tham sốđều là biến ra (OUT)
Tên Loại Kiểu í nghĩa
RET_VAR OUT INT
Giá trị lỗi trả về trong quá trình hoạt động của hàm
CDT OUT CDT
Giá trị tră về thời gian của hệ thống