- 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
- 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 lu 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 nhng lại có khả năng lu 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 lu 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
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: 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
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 để lu 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 :
Nhập dữ liệu. 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:
*Khối OB20 : (time of day interrupt)
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ễ cha 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.
• Khối OB 80 ( CyleTime Fault)
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 cha kết thúc ở lần gọi trớc. Mặc định thời gian gian quét là 150ms nhng 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.
* Khối OB122 ( Synchrono error )
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 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ểuDATE
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