Tìm hiểu ngôn ngữ SCL-S7-300

BÁO CÁO CHUYÊN ĐỀ 2:
Đề tài: Tìm hiểu ngôn ngữ SCL trong S7-300. Ứng dụng viết chương trình điều khiển đèn giao thông. Phần 1: Giới Thiệu: Ngôn ngữ SCL trong STEP7 ứng dụng cho dòng PLC S7-300 của Siemens là một ngôn ngữ lập trình sử dụng câu lệnh để viết. Nó có cấu trúc gần giống với ngôn ngữ dạng STL nhưng được phát triển nhiều hơn, gần giống với các ngôn ngữ bậc cao như Pascal làm cho người lập trình dễ thao tác hơn và thân thiện như ngôn ngữ lập trình có cấu trúc. Ngôn ngữ SCL dựa trên nền của Pascal chính vì vậy cách khai báo hay những câu lệnh gần giống như trong Pascal. Bài báo cáo nhóm em gồm 3 phần. Phần I chúng em xin giới thiệu về phần cứng họ S7-300 và cách cài đặt các thành phần và thông số cho 1 trạm Phần II là phần tìm hiểu về ngôn ngữ SCL. Phần này là phần tìm hiểu các thành phần, cấu trúc chương trình, các câu lệnh … trong ngôn ngữ SCL Phần III chúng em xin trình bày chương trình lập trình ứng dụng đèn giao thông sử dụng ngôn ngữ SCL.

Nhóm I – TĐ04

Trang 1

Tìm hiểu ngôn ngữ SCL-S7-300

I) Giới Thiệu Phần Cứng Họ S7-300
Khác với S7-200 để tạo một chương trình trong STEP 7 thì chúng ta phải cài đặt đầy đủ các thông số phần cứng trong 1 trạm, tạo 1 soure file sau đó mới có thể thao tác lập trình. Phần này chúng em xin giới thiệu các Components trong SIMATIC S7-300 và chức năng của chúng trong trạm sau đó sẽ trình bày quá trình tạo 1 trạm trong STEP7 1) Giới Thiệu Các Thành Phần Trong 1 Trạm ( Components) + Racks: Nơi đặt các modules và kết nối chúng với mỗi thiết bị khác + Power Supply: (PS) Nguồn điện cung cấp cho PLC + CPU : Đơn vị xử lý trung tâm, xử lý và chạy chương trình + Interface modules: (IMs): kết nối từ racks tới 1 cái khác + Signal modules : (SMs) Các modules điều khiển hoặc cập nhật tín hiệu Analog hoặc Digital + Function Modules: (FMs) các modules hàm chức năng xử lý, thi hành các hàm phức tạp hoặc xử lý thời gian tới hạn độc lập của CPU + Communications Processes: (CPs) truyền thông ,kết nối thành 1 mạng nhiều PLC + Subnets : kết nối PLC với 1 PLC hoặc 1 thiết bị khác. 2) Cách Thiết Lập Và Cài Đặt 1 Trạm ( Station) Từ màn hình giao diện khởi động Simatic Manager

Nhóm I – TĐ04

Trang 2

Tìm hiểu ngôn ngữ SCL-S7-300

Màn hình dao diện của SIMATIC Manager.

Tạo 1 Project mới có tên dengiaothong:

Nhóm I – TĐ04

Trang 3

Tìm hiểu ngôn ngữ SCL-S7-300 Trèn 1 trạm S7-300 Chèn Rack và Nguồn là giá để đỡ các môdule trong S7 – 300 chọn nguồn PS-307-5A Nhóm I – TĐ04 Trang 4 .

Tìm hiểu ngôn ngữ SCL-S7-300 Chèn CPU vào trạm: Ta chọn CPU 315 – 2DP Nhóm I – TĐ04 Trang 5 .

Tìm hiểu ngôn ngữ SCL-S7-300 Chèn Các module ngõ vào ra: Tạo 1 source file SCL: Việc tạo 1 file có nhiệm vụ ta sẽ soạn thảo chương trình trên Source này rồi dịch nó Nhóm I – TĐ04 Trang 6 .

Nhóm I – TĐ04 Trang 7 .Tìm hiểu ngôn ngữ SCL-S7-300 Bảng Định Nghĩa Các ngõ Vào – Ra Bảng định nghĩa các biến giúp chúng ta lập trình nhanh hơn và không phải nhớ tên biến ngõ vào ra. ta chỉ cần gán các ngõ vào ra thành tên các biến thực tế.

Nhóm I – TĐ04 Trang 8 .Tìm hiểu ngôn ngữ SCL-S7-300 Tạo một OB Để lập trình: ORGANIZATION_BLOCK (OB) Đó là những thao tác cơ bản nhất để thiết lập các thành phần phần cứng cho 1 trạm S7-300 Ngoài ta khi thực hiện xong bài ta có thể dùng chương trình S7-PLSim để mô phỏng kết quả.

Khi tạo chương trình. OB FC FB DB UDT SFC SFB        Nhóm I – TĐ04 Bạn có thể sử dụng những khối có sẵn như: những hàm hệ thống hoặc những khối hàm hệ thống mà đã được cài đặt trong hệ điều hành của CPU.Tìm hiểu ngôn ngữ SCL-S7-300 Phần 2: Tìm Hiểu Ngôn Ngữ SCL. những khối SCL có thể được gọi trong STL. SCL cũng cho thiết kế một số đặt tính kỹ thuật để cung cấp cho cấu trúc chương trình như:  SCL cung cấp khối khái niệm của STEP 7 và vì thế cho phép lập trình đã chuẩn hóa của những khối với Danh sách lệnh (STL). Thang Logic (LAD). Sự biên dịch lại từ STL sang SCL là không thể. hoặc FBD. Trang 9 . Khi bạn biên dịch chương trình của bạn. LAD. Điều này có nghĩa là một khối được viết trong SCL có thể gọi một khối được viết trong STL. người viết chương trình được cung cấp đầy đủ các hàm để xử lý văn bản gốc. SCL có thể học một cách dễ dàng. 1) Khái Quát Chung: Như ta đã nói ở phần trên. nói cách khác các chương trình bạn có thể chỉnh sửa. các khối được tạo ra và có thể chạy trên tất cả CPUs của S7-300/400 bộ điều khiển chương trình với CPU 314 hoặc cao hơn. Ngôn ngữ lập trình của STEP 7 và SCL (gói để chọn) vì vậy bổ sung lẫn nhau hoàn hảo. và Sơ đồ khối chức năng (FBD). và sơ đồ khối chức năng (FBD). Những đối tượng gốc bạn có thể tạo ra với SCL cho STEP 5 là tương thích tiến với 1 hoặc 2 những ngoại lệ nhỏ. Những mặt thuận lợi khi lập trình với SCL: SCL đưa ra cho bạn tất cả những thuận lợi của ngôn ngữ lập trình cấp cao. Với một vài kinh nghiệm của ngôn ngữ lập trình cấp cao. ngôn ngữ SCL dựa trên nền của ngôn ngữ Pascal. Như vậy có một câu hỏi đặt ra với chúng ta là: Chúng ta thường lập trình dạng LAD. Bạn có thể sử dụng những khối chương trình SCL trong việc kết hợp với những khối chương trình trong danh sách lệnh (STL). STL hay FBD quen thuộc nay chúng ta có nên chuyển qua SCL để viết hay không? Để trả lời câu hỏi trên trước hết chúng ta phải tìm hiểu ngôn ngữ SCL sau đó rút ra những kết luận sau đó mới trả lời câu hỏi trên được. Thang Logic(LAD). LAD. biên dịch và gỡ rối với S7 SCL. hoặc chương trình FDB. Những khối SCL có thể được biên dịch lại ngôn ngữ lập trình vào Danh sách lệnh(STL) của STEP 7. Tương tự.

2. căn số học … thường khá phức tạp trong LAD thì với SCL bạn có thể thực hiện khá đơn giản. SCL có thể liên kết và gọi các hàm các thư viện có sẵn được lập trong STL. bao gồm những khối hàm. Chính vì vậy SCl hỗ trợ việc phân nhỏ chương trình thành các module nhỏ. Hàm là những khối logic mà không có bộ nhớ. Tại chương trình chính chỉ việc tổng hợp lại các module đó như vậy việc lập trình hết sức đơn giản.1 Thiết kế 1 chương trình SCl có cấu trúc. Như vậy nó rất linh hoạt. FDB để viết hoặc ngược lại. có cấu trúc như những ngôn ngữ như Pascal. Nó có thể được truy cập nó là tham số (ví dụ như. COS.Tìm hiểu ngôn ngữ SCL-S7-300 Như vậy: Tóm lại những ai đã có kinh nghiệm trong lập trình cấp cao. Từ đó chúng không có bộ nhớ. thư viện khác nhau. Trang 10 FB FC Nhóm I – TĐ04 . một số định nghĩa và cuối cùng là trình bày một vài ví dụ cụ thể. 2) Thiết Kế 1 Chương Trình SCL Phần này xin giới thiệu các khối. LAD. mỗi module nhỏ phụ trách 1 việc cụ thể. SCL là ngôn ngữ dựa trên nền của PASCAL nên việc viết các hàm tính toán số học phức tạp như Sin. C thì học SCL rất nhanh. Những khối chức năng là những khối logic với dữ liệu tĩnh. những giá trị được tính toán phải được xủ lý ngay lập tức sau đó trước khi hàm được gọi. quá nhiều sự kiện hay trạng thái khác nhau. Những loại khối Một chương trình SCl có cấu trúc nó được thiết kế theo dạng gồm những module khác nhau. Các module này là: OB Sự tổ chức những khối hình thành giao tiếp giữa hệ điều hành S7 CPU và chương trình người dùng. ta chỉ việc thực hiện từng khối nhỏ này. Những tổ chức những khối chỉ rõ chuỗi trong đó những khối của chương trình người dùng được thực hiện. outputs) tại bất kì điểm trên chương trình người dùng. Một chương trình lớn thường làm cho người lập trình cảm thấy phức tạp vì có quá nhiều biến. Từ một FB có một “bộ nhớ”.

Tìm hiểu ngôn ngữ SCL-S7-300 DB Những khối dữ liệu là những vùng dữ liệu trong đó dữ liệu người dùng được lưu. Kiểu dữ liệu người dùng định nghĩa có cấu trúc kiểu dữ liệu bạn có thể tạo ra cho như yêu cầu của chính bạn và sử dụng nhiều lần bạn muốn. Một tập tin nguồn đối với chương trình Một vài tập tin nguồn đối vơi 1 chương trình Tập tin nguồn SCL Khối thư mục ngoại tuyến Nhóm I – TĐ04 Trang 11 . Đó là những khối dữ liệu chia sẽ mà có thể truy cập bằng tất cả các khối logic và đó là những khối dữ liệu mẫu mà được gán cho một sự gọi FB riêng. Một kiểu dữ liệu người dùng định nghĩa là hữu ích để phát sinh một số khối dữ liệu với cùng một cấu trúc. Một tập tin nguồn có thể bao hàm một khối tín hiệu hoặc một chương trình đầy đủ bao gồm những khối khác. UDTs được sử dụng khi nếu chúng là những khối. UDT Đối với những ai làm quen với PASCAL thì các modula này tương tự như các chương trình con. Thủ tục (Proceduce ) hay Hàm (Function) Bố cục của các khối trong tập tin nguồn SCL Một chương trình SCL bao gồm một hoặc nhiều hơn tập tin nguồn SCL.

Bố trí của những khối logic từ trái sang phải đó cũng là một thứ tự trong đó chúng được gọi.1 Định Nghĩa Những Tác Vụ Phụ Những tác vụ phụ Tác vụ phụ được trình bày trong hình dưới. Những vùng hình chữ nhật bóng mờ biểu diễn những khối. Từ những giá trị đo sẽ thu nhận một cách tuần hoàn. Chu trình khối tổ chức Dữ liệu vào Chu trình gọi chương trình Khối chức năng Thu nhận Dữ liệu đo thu được Khối chức năng Đánh giá Phân loại dữ liệu đo Khối Căn bậc hai và Bình phương Dữ liệu ra Truy cập và chọn dữ liệu đầu ra Kết quả tính toán Cân bậc 2.2. một OB đối với một chu trình gọi (OB1) được => yêu cầu. một khói hàm (FB). bộ đệm Nhóm I – TĐ04 Trang 12 .2 Các Định Nghĩa: 2.Tìm hiểu ngôn ngữ SCL-S7-300 2. Phần của chương trình – dữ liệu ngõ vào và dữ liệu ngõ ra – đã được lập trình trong OB. Tác vụ phụ “Giá trị đo thu được” yêu cầu một khối “Thu được” FB với một bộ nhớ. nói cách khác. Bình phương Khối dữ liệu ACQUIRE_DATA Kho dữ liệu Dòng chương trình Dòng dữ liệu Chọn và gán những kiểu khối sẵn có Những khối riêng lẻ được lựa chọn theo các chỉ tiêu sau đây: Chức năng Tên khối Chương trình người sử dụng chỉ có thể bắt đầu ở một “Chu kì” OB OB. từ => khối dữ liệu địa phương nhất định (ví dụ như.

Tiêu chuẩn SCL hàm SQRT có thể sử dụng để tính toán căn bậc hai. Dữ liệu mẫu của nó được giữ trong khối dữ liệu mẫu hướng goi FB. Sau đó chương trình trở lại để gọi khối. Một hàm (FC) có thể bỏ qua kết quả của nó như một giá trị hàm. Những tham số khối có thể được chia ra trong mục trình bày dưới đây: Tham số khối Sự giải thích Sự khai báo Những tham số ngõ vào Những tham số ngõ vào thừa VAR_INPUT nhận những giá trị ngõ vào Nhóm I – TĐ04 Trang 13 . dữ liệu ngõ ra sẵn sàng cho việc xử lý cao hơn.2 Định Nghĩa Giao Tiếp Giữa Những Khối Tổng quan Giao tiếp của một khối được định dạng bởi những tham số mà có thể truy cập bằng một khối khác. Những chỗ thay thế này được biết như định dạng những tham số và những giá trị được gán cho chúng khi khối được gọi sẽ được tham chiếu tới những tham số thực. Như FB cũng có thể điều khiển địa chỉ và lựa chọn tác vụ phụ ngõ ra. Vị trí cất giữ dữ liệu (bộ nhớ) là khối dữ liệu mẫu ACQUIRE_DATA. Từ FB này được gọi bởi một FB khác cao hơn trong sự phân cấp gọi. Những tham số được khai báo trong những khối là những chỗ thay thế chỉ có một giá trị khi khối được sử dụng thực sự (được gọi). nó không yêu cầu DB của nó. Một đặc biệt hàm => BÌNH PHƯƠNG sẽ tạo ra để tính toán bình phương và cũng sẽ kiểm tra rằng giá trị nằm trong vùng giới hạn. Chỉ thích hợp => kiểu khối bởi vậy là một FB.Tìm hiểu ngôn ngữ SCL-S7-300 vòng) phải được giữ từ một chu kì chương trình cho bước tiếp theo. 2. từ dữ liệu được có sẵm. Khi một khối được gọi. Một hàm (FC) là phù hợp nhất cho những tác vụ phụ “SQRT” FC tính toán căn bậc hai và bình phương từ kết quả có thể (căn bậc hai) trở lại như một hàm giá trị.2. nhớ rằng bạn cần một bộ đêm ngõ ra chứa kết quả đã tính toán “căn bậc hai” và “bình phương” cho mỗi giá trị đo được. không dùng “Bình phương” cần dữ liệu trong tính toán để giữ nhiều chu kì => FC chương trình. dữ liệu ngõ vào được bỏ qua để nó như một tham số thực. Khi chọn kiểu của khối cho tác vụ phụ phân loại giá “Đánh giá” FB trị đo và kết quả tính toán. Hơn thế nữa.

Chúng là chỉ đọc. Theo bảng bên dưới là định dạng những tham số: Tên Kiểu dữ liệu Kiểu khai báo Mô tả sortbuffer ARRAY[. Một mảng cấu trúc được tạo ra như một tham số ngõ vào cho việc tính toán kết quả căn bậc hai và bình phương. VAR_INPUT Chuyển đổi để phân loại và đánh giá dữ liệu đo VAR_INPUT Bộ chọn căn bậc hai hay bình phương. Thu nhận FB Tên tham số Measval_in newval resort funct_sel selection newsel result_out measval_out Kiểu dữ liệu Kiểu khai báo VAR_INPUT INT VAR_INPUT BOOL BOOL BOOL WORD BOOL DWORD DWORD Mô tả Giá trị đo Chuyển đổi để vào giá trị trị đo trong bộ đệm vòng. Dữ liệu có thể ghi và đọc. xử ly giá trị. Mảng này được khai báo như một tham số vào/ra. Chu kì OB Chu kì OB không có định dạng tham số cho chính nó. VAR_IN_OUT và ghi kết quả ngược lại biến ban đầu. Nó gọi ACQUIRE FB và bỏ qua giá trị đo và điền khiển dữ liệu cho nó có định dạng tham số.Tìm hiểu ngôn ngữ SCL-S7-300 Những tham số ngõ ra Nhưng tham số vào/ra thực sự khi khối được gọi. tương ứng OF REAL bộ đêm vòng Nhóm I – TĐ04 Trang 14 . VAR_INPUT Mã để chọn giá trị ngõ ra VAR_INPUT Chuyển đổi để đọc trong mã VAR_OUTPUT Ngõ ra của kết quả tính toán VAR_OUTPUT Ngõ ra của gia trị đo được Đánh giá Thu nhận FB gọi đánh giá FB. Chia sẽ dữ liệu của chúng là mảng giá trj đi mà yêu cầu cất giữ..] VAR_IN_OUT Mảng giá trị đo. Những tham số vào/ra chấp nhận giá trị thực của một biến khi khối được gọi. Những tham số ngõ ra chuyển đổi những giá trị ngõ ra hiện VAR_OUTPUT tại để gọi khối.

Tìm hiểu ngôn ngữ SCL-S7-300 calcbuffer ARRAY[. ngược lại là đúng. Bộ điểu khiển chương trình Nhóm I – TĐ04 Trang 15 . mặt khác.]OF VAR_OUTPUT Mảng cho những kết quả: STRUCT Cấu trúc với “Căn bậc hai” và “Bình phương” thành phần của kiểu INT Căn Bậc Hai và Bình phương Những hàm được gọi bởi EVALUATE. Chú ý rằng khi ngõ vào/ngõ ra trong nhiền byte. Tên value SQRT Value Bình phương Kiểu dữ liệu REAL REAL INT INT Kiểu khai báo Mô tả VAR_INPUT Giá trị hàm VAR_INPUT Giá trị hàm Ngõ vào đối với SQRT Căn bậc hai của giá trị ngõ vào Ngõ vào đối với Bình phương Bình phương của giá trị ngõ vào 2.3 Định nghĩa giao tiếp ngõ vào/ngõ ra Hình được trình bay như bên dưới là giao tiếp ngõ vào/ngõ ra. byte bậc thấp hơn thì nằm trên đỉnh và byte cao hơn thì nằm ở cuối. Chúng yêu cầu một giá trị ngõ vào (đối số) và trả về kết quả như một hàm giá trị.. Nếu ngõ vào/ngõ ra trong nhiều word.2.

Điều này nghĩa là những khối phải được bố trí trong tập tin nguồn như trình bày ở dưới: Nhóm I – TĐ04 Trang 16 .2. khác 0 0 đến 7 Byte bậc thấp hơn của ngõ ra word (bit 0 đến 7) giá trị đo hoặc kết quả: SQRT hoặc bình phương 2.Tìm hiểu ngôn ngữ SCL-S7-300 0 Đọc giá trị đo 1 Bắt đầu phân loại và tính toán 2 Chon kết quả: SQRT và Square 3 Chọn ngõ ra: giá tri đo hay kết quả 4 Má hóa bit 0 5 Má hóa bit 1 6 Má hóa bit 2 7 Đọc mã hóa 0 đến 7 byte ngõ vào: giá trị đo 0 đến 7 Byte bậc cao hơn của ngõ ra word (bit 8 đến 15) chỉ yêu cầu cho tính toán của bình phương.4 Định nghĩa bậc của những khối trong tập tin nguồn Khi bố trí bậc của những khối trong tập tin nguồn SCL. trước khi nó được gọi bởi khối khác. nên nhớ rằng một khối phải hiên có trước khi sử dụng nó. nói cách khác.

Tìm hiểu ngôn ngữ SCL-S7-300 2. 2.5 Định nghĩa các kí hiệu Sử dụng những kí hiệu tên cho module địa chỉ và những khối tạo cho chương trình dễ nhìn hơn.2.1 Hàm Bình Phương: Chương trình như sau: FUNCTION BINHPHUONG INT TITLE = ' tao ham binh phuong 1 so nguyen ' NAME : binh phuong AUTHOR : Van Ha Nhóm I – TĐ04 Trang 17 . Ta có thể nhập kí hiệu các ngõ vào. ngõ ra vào 1 bảng.3 Một số Hàm và chương trình mẫu: 2.3.

IN : INT. END_VAR //Upper limit //Input value //Lower limit BEGIN //If IN > MAXI.3. ELSIF IN < MINI THEN Delimiter := MINI. the function value contains the input value. Min FUNCTION Delimiter : INT TITLE = 'Delimiting of an INT value' NAME : LIMIT AUTHOR : Van Ha VAR_INPUT MAXI : INT. the function value is to assume the value MIN. //In all other cases. END_FUNCTION ORGANIZATION_BLOCK Main_program Nhóm I – TĐ04 Trang 18 . // gia tri cua bien maximum = 181 ELSE BINHPHUONG := 32_767 . MINI : INT. END_FUNCTION 2. ELSE Delimiter := IN.Tìm hiểu ngôn ngữ SCL-S7-300 VAR_INPUT a : INT. END_IF. //If IN < MINI.2 Hàm Tính Max . the function value is to assume the value MAX. // Nêu Tràn thì set gia tri la maximum END_IF. END_VAR BEGIN IF a<= 181 THEN BINHPHUONG := a*a. IF IN > MAXI THEN Delimiter := MAXI.

END_ORGANIZATION_BLOCK 3) CÁC KIỂU DỮ LIỆU TRONG SCL: Loại dữ liệu quyết định     Thể loại và giả thiết phần dữ liệu. real. integer. Ký hiệu của hằng số của loại dữ liệu. MINI := Minimum). Loại dữ liệu kế tiếp được gắn liền trong SCL. giá trị thời gian thực. 3. và kiểu ký tự.1 Loại Dữ Liệu Cơ Bản Một loại dữ liệu cơ bản miêu tả một vùng nhớ với độ dài cân đối và đại diện cho kiểu bit. 8 bit. Dãy cho phép của phần dữ liệu.Tìm hiểu ngôn ngữ SCL-S7-300 TITLE = ' chuong trinh chinh xu ly ' VAR_TEMP SINFO : ARRAY [1. Result := Delimiter( MAXI := Maximum. Nhóm Kiểu bit dữ liệu Kiểu Dữ Liệu BOOL BYTE WORD DWORD Kiểu ký tự Nhóm I – TĐ04 Giải thích (Explanation) Phần dữ liệu của loại này chiếm 1 bit. chu kỳ thời gian.20] OF BYTE. IN := Input_value.. 16 bit hoặc 32 bit CHAR Phần dữ liệu của loại này chiếm chính xác 1 ký tự Trang 19 . END_VAR BEGIN //Calling the "Delimiter" function. Hoạt dộng cho phép có thể thực hiện cho một địa chỉ của loại dữ liệu. //The function value of the "Delimiter" block is //assigned the variable "Result".

Bắt đầu từ một biên của WORD. Loại bit hỗn hợp có thể được dùng để đề ra các biểu thức Bool. 8 bit 16 bit. word. double word. Bit Bắt đầu từ bit thấp nhất trong 0. 32 bit. 1 or FALSE byte. Bắt đầu từ biên của WORD. Bắt đầu từ byte thấp nhất trong word. Phần dữ liệu của loại này luôn sẵn có cho xử lý con số. Byte BYTE 8 bits Word WORD 16 bits 32 bits Double DWORD word Nhóm I – TĐ04 Trang 20 .1.Tìm hiểu ngôn ngữ SCL-S7-300 trong mã ASCII. Kiểu số INT DINT REAL Kiểu thời gian TIME DATE TIME_OF_DAY S5TIME 3.1 Loại Dữ Liệu Bit Dữ liệu của loại này là các bit gồm: 1 bit (kiểu đại số BOOL). Type Keyword Bit Width BOOL 1 bit Alignment (cân chỉnh) Value Range Phần dữ liệu của loại này biễu diễn các thời khác nhau và giá trị ngày trong STEP 7. Một dãy số của giá trị có thể thiết lập cho loại dữ liệu byte.

Bắt đầu từ một biên của WORD. Type Keyword Bit Width 8 Value Range (dãy giá trị) Được mở rộng mã ASCII.1.175495E-38 to 3.REAL point number 3. Loại Dữ Liệu Số: Loại này có giá trị cho xử lý giá trị bằng số (ví dụ tính toán các biểu thức số học).4 Loại Thời Gian 32 -3. Single CHAR character 3. Bắt đầu từ một biên của WORD.3.175495E-38+/0 1. Loại Ký Tự Phần dữ liệu của loại này giữ chính xác một ký tự của mã ASCII.2.1.Tìm hiểu ngôn ngữ SCL-S7-300 3.1. Nhóm I – TĐ04 Trang 21 . Type Integer Keyword Bit Width Alignment INT 16 Bắt đầu từ một biên của WORD.402822E+38 Dữ liệu của loại dữ liệu này biễu diễn thời gian khác nhau và giá trịnh ngày tháng bên trong STEP 7 (ví dụ cho việc đặt ngày hoặc đi vào giá trị thời gian). Value Range -32_768 to 32_767 Double integer DINT 32 -2_147_483_648 to 2_147_483_647 Floating.402822E+38to -1.

Trình biên dịch làm tròn giá trị chính xác. chỉ có thời gian cơ bản 0. 1s. 0. Với biến của loại dữ liệu S5TIME.Tìm hiểu ngôn ngữ SCL-S7-300 Nếu giá trị cài cao hơn giới hạn trên của dãy. STRING Xác định một vùng cho xâu ký tự có thể dài đến 254 ký tự (kiểu CHAR) Xác định một mảng nhất quán của một loại dữ liệu (đơn giản hoặc phức tạp) Xác định một nhóm của loại dữ liệu trong bất kỳ cự 1i phối hợp của dữ liệu. 10s là có sẵn. ARRAY STRUCT Nhóm I – TĐ04 Trang 22 . ở word nào đó. 3. giá trị giới hạn trên được sử dụng. Loại dữ liệu này lưu trữ ngày tháng và là loại dữ liệu được định nghĩa trước DT trong SCL. Nó có thể là cấu trúc một mảng hoặc một cấu trúc nhất quán và mảng. kết quả được giới hạn.1s.2 Loại Dữ Liệu Phức Tạp SCL cung cấp loại dữ liệu phức tạp Data Type Explanation DATE_AND_TIME Xác định một vùng 64 bit (8 byte).01s.

Dùng để phát một vùng nhớ như tham số. seconds. Dùng để khai báo bộ đếm như tham số. Loại tham số Loại tham số là loại dữ liệu đặc biệt của bộ đếm. một loại dữ liệu dữ liệu người sử dụng xác định có thể dùng để đưa số khối dữ liệu với cùng cấu trúc. day. Data Type TIMER COUNTER Explanation Dùng để khai báo timer như tham số. bạn có thể dùng biến của loại dữ liệu ANY như tham số hình thức của khối. timer và khối có thể được sử dụng như tham số hình thức. Dùng để khai báo FCs.Tìm hiểu ngôn ngữ SCL-S7-300 Loại dữ liệu người sử dụng xác định: Bạn có thể tạo loại dữ liệu này của riêng bạn trong phần khai báo dữ liệu. month.2. 3.1 Loại Dữ Liệu DATE_AND_TIME Định nghĩa Lọa dữ liệu này xác định một vùng với 64 bit (8 byte) cho định rõ ngày tháng và thời gian. Nó được định nghĩa một lần. DBs và SDBs như tham số. Vùng dữ liệu lưu trữ thông tin theo nó (trong mã nhị phân mã hóa định dạng thập phân): year. Loại dữ liệu ANY Trong SCL. ANY POINTER Dùng để phát một địa chỉ của bất kỳ loại dữ liệu nào như tham số. Cú pháp Nhóm I – TĐ04 Trang 23 . milliseconds. FBs. Ban cũng có thể tạo biến tạm và dùng nó trong giá trị gán. hours. Mỗi loại được gán một tên duy nhất và có thể được dùng bất kỳ tần số nào (number of time). minutes. BLOCK_xx.

một từ không có dữ liệu.10 DT#1995-10-20-12:20:30.2 Lọai Dữ Liệu STRING Định nghĩa Loại String xác định một chuỗi ký tự dài nhất là 254 ký tự.2.10 3. Cú pháp Nhóm I – TĐ04 Trang 24 . Vùng tiêu chuẩn gồm 256 byte. là giá trị nhỏ nhất có thể. Vùng nhớ này đòi hỏi chứa 254 ký tự và phần đầu 2 byte. Chuỗi Null. Bạn có thể thu hẹp bộ nhớ bằng một chuỗi ký tự.Tìm hiểu ngôn ngữ SCL-S7-300 Tầm giá trị Loại dữ liệu Date_and_time được lưu trong định dạng BCD: Ví dụ Một định nghĩa hợp lệ cho ngày tháng như 20/Oct./1995 12:20:30 và 10 ms là: DATE_AND_TIME#1995-10-20-12:20:30.

Nó không có khả năng khởi tạo cho biến của hàm (FCs). bạn có thể xác định chuỗi số lớn nhất mà có thể chứa trong chuỗi. Khởi trị cho Chuỗi ký tự Biến String. Ví dụ VAR Text1 : String [123]. Chú Ý: Ở ngõ ra và tham số vào ra và gái trị phản hồi của hàm. END_VAR Hằng số “123” trong phần khai báo “Text1” là số ký tự lớn nhất của chuỗi. Một chuỗi có thể gồm các ký tự đặc biệt. như là các biến khác. ký tự diều khiển và ký tự không được in. ví dụ. Ví dụ x : STRING[7]:=’Address’ Nhóm I – TĐ04 Trang 25 . bạn có thể thu hẹp dộ dài mặc định (254 ký tự) để sử dụng tốt hơn trong nguồn chứa của CPU. phần ký tự còn lại không được khởi tạo. có thể khởi trị trong khai báo biến của khối hàm (FBs). ta vào Options > Customize và xác định. Tất cả ký tự trong mã ASCII được phép sử dụng trong chuỗi ký tự.Tìm hiểu ngôn ngữ SCL-S7-300 Một biểu thức đơn giản địa diện cho ký tự số lơn nhất trong String. Còn “Text2” thì chứa 254 ký tự. Text2 : String. nó sẽ mặc định với dộ dài lớn nhất 254 ký tự. chỉ có vùng ký tự chiếm giữ được đưa vào tính toán. Nếu chuỗi khởi tạo ngắn hơn chuỗi khai báo lớn nhất. nơi mà hh đại diện cho giá trị của ký tự ASCII biểu diễn cho hệ Hexa (ví dụ: ‘$0D$0Atext’) Khi bạn khai báo khoảng không gian bộ nhớ cho chuỗi ký tự. nếu không xác định được chiều dài lớn nhất. Để thu hẹp. Bạn có thể đi vào sử dụng cú pháp $hh. Khi biến được xử lý trong tiến trình.

nó phải luôn được khởi tạo với một chưỡi hằng số trong khai báo hoặc gán giá trị trước khi nó được sử dụng lần đầu tiên. 3. Đây là một bảng dữ liệu gồm hàng và cột.”. ví dụ. Ví dụ FUNCTION Test : STRING[45] VAR_TEMP x : STRING[45].thì hàm không phản hồi một cách chính xác. Loại ARRAY nhiều chiều. Test := x. Định tuyến Biến của loại STRING bắt đầu và kết thúc tại biên WORD.2. END_VAR x := ’a’. Số chiều lớn nhất là 6. in2 := x). Loại này gồm kích thước hai chiều và thêm vào chiều khác.Tìm hiểu ngôn ngữ SCL-S7-300 Nếu biến tạm của chuỗi được yêu cầu. kết quả nhồi. Loại ARRAY hai chiều. END_FUNCTION Nếu không có khởi tạo “x:=a. x := concat (in1 := x. Đây là một dãy dữ liệu được sắp xếp. Liệt kê bảng kỹ thuật Nhóm I – TĐ04 Trang 26 . trong SCL:    Cú pháp Loại ARRAY một chiều.3 Loại ARRAY Định nghĩa ARRAY có một số xác định của thành phần loại dữ liệu.

60. phần dữ liệu được xác định tức thời theo từ khóa STRUCT trong phần khai báo. tất cả còn lại ở biên WORD. 385. Giới hạn phải được tách bởi hai chu trình.. Loại STRUCT Định nghĩa Loại STRUCT mô tả một vùng bao gồm các số thành phần có thể khác loại dữ liệu. Mỗi chiều của biến loại BOOL. 2. -1289. BYTE. 103 . CHAR kết thúc ở biên BYTE. có thể đan xen các kiểu dữ liệu STRUCT cho phép. Các hệ số đặ trong ngoặc đơn. 736.10362. Định tuyến Biến ARRAY được tạo tứng hàng. Đặc điểm chính của loại STRUCT là phần dữ liệu có thể được liên hợp. -83.. -7.3.1. -37.. 3.Tìm hiểu ngôn ngữ SCL-S7-300 Miêu tả chiều của ARRAY:    Ví dụ VAR CONTROLLER1 : ARRAY[1.10] OF REAL . 77.4] OF INT:= -54.2. Dãy liệt kê riêng lẽ phải tách bởi dấu phẩy. Cú pháp Khai báo Nhóm I – TĐ04 Trang 27 . CONTROLLER2 : ARRAY[1. END_VAR Gồm tầm giá trị nhỏ nhất và lớn nhất kiểu integer (-32768 đến 32767).4.

Một bảng liệt kê ngẫu nhiên của biến khởi trị. END_VAR Định tuyến Biến của STRUCT bắt đầu và kết thúc tại biên WORD. Bạn có thể sử dụng nó với từ nhận dạng UDT. Tất cả các loại dữ liệu với tham số ngoại lệ được phép cho các bảng kỹ thuật loại dữ liệu. Một lần được xác định.3. UDTx (x là con Nhóm I – TĐ04 Trang 28 .3.1.Tìm hiểu ngôn ngữ SCL-S7-300 Khai báo phần này là một danh sách các biến của STRUCT. nó sẽ được dùng suốt trong chương trình. Bạn có lựa chọn giá trị khởi tạo cho các phần cấu trúc sau khi bảng kỹ thuật dùng để gán giá trị. Bao gồm:   1 đến n từ nhận dạng với các loại biến gán. END_STRUCT . END_STRUCT . Loại Dữ Liệu Người Sử Dụng Xác Định 3. Từ nhận dạng là tên của cấu trúc được ứng dụng sẵn. 3. Ví dụ VAR MOTOR : STRUCT DATA : STRUCT LOADCURR : REAL . Loại dữ liệu người sử dụng xác định (User-Defined Data Types – UDTs) Định nghĩa Bạn xác định UDTs như một khối. VOLTAGE : INT := 5 .

tên tiêu chuẩn trong dạng UDTx (x là con số). Ví dụ: TYPE UDT10 TYPE MEASVALUES Bảng đặc điểm kỹ thuật Từ nhận dạng UDT theo bởi bảng đặc điểm. UDTs có thể dùng khai báo các biến. BIPOL_3 : BYTE := B#16#F1 . MEASURE : STRUCT BIPOLAR_10V : REAL . END_TYPE //Use of the UDT in an FB Nhóm I – TĐ04 Trang 29 . BIPOL_2 : WORD := W#16#FFAA . một dạng khác. khối dữ liệu. Phần mảng hoặc cấu trúc cũng có thể khai báo với UDTs. UNIPOLAR_4_20MA : REAL . Tên của UDT cũng có thể được xác định dạng tuyệt đối. END_STRUCT. BIPOL_4 : WORD := W#16#1919 . tham số. hoặc với một từ khai báo được định nghĩa trong phần khai báo của khối logic hay khối dữ liệ. Hàm STRUCT STRUCT : END_STRUCT Ví dụ // UDT definition with a symbolic name TYPE MEASVALUES: STRUCT BIPOL_1 : INT := 5. END_STRUCT.Tìm hiểu ngôn ngữ SCL-S7-300 số). hoặc loại dữ liệu khác. Cú pháp Từ nhận dạng UDT Khai báo UDT bắt đầu với từ khóa TYPE theo tên của từ nhận dạng UDT.

. END_FUNCTION_BLOCK 3.UNIPOLAR_4_20MA := 2. . . bạn xác định từ nhận dạng Nhóm I – TĐ04 Trang 30 .3.. MEAS_RANGE. Loại này cho phép biến vào. Cung ứng tham số. Loại TIMER và COUNTER Bạn xác định từng loại timer và counter để sử dụng khi một khối hoạt động.2.4. Loại BLOCK Bạn xác định một khối d9uo5c dùng như tham số ngõ vào.Tìm hiểu ngôn ngữ SCL-S7-300 FUNCTION_BLOCK FB10 VAR MEAS_RANGE : MEASVALUES.7 . // . 3. Khai báo của ngõ vào xác định loại khối (FB.4. . DB).BIPOL_1 := -4 . FC. 3.4. Loại tham số Để xác định loại tham số khối của FBs và FCs. MEAS_RANGE. END_VAR BEGIN // .1. Loại Tham Số 3.4. bạn có thể sử dụng loại tham số trong trường hợp loại này đuuợc giới thiệu.MEASURE.

Trong SCL. out : POINTER. 3. tham số ngõ vào không thể chuyển qua. Bạn có thể truy xuất loại BLOCK_DB là địa chỉ tuyệt đối (myDB. bạn không thể chuyển qua tham số này trong một khối xa hơn. ban có thể gán địa chỉ theo loại dữ liệu như tham số thực sự:    Khối hàm không có tham số hình thức Hàm không có tham số ình thức hoặc giá trị phản hồi (hàm VOID). Nếu bạn gọi một hàm. Nếu bạn cung cấp tham số hình thức của loại POINTER với biến tạm khi FB và FC được gọi. END_VAR BEGIN Nhóm I – TĐ04 Trang 31 Địa chỉ tuyệt đối. Bạn có thể gán theo các địa chỉ:     Hạn Chế Loại POINTER cho phép tham số hình thức ngõ vào.4.dw10) SCL không cung cấp bất cứ hoạt động nào cho khối khác. SCL cũng chỉ cung cấp một lệnh của xử lý dữ liệu POINTER. tham số vào ra của FB và FC tham số ngõ ra của FC. Biến tạm là mất tính hợp lệ khi nó chuyển qua. Tham số của loại này có thể cung cấp các giá trị khi khối được gọi. Tên ký tự Địa chỉ loại POINTER.Tìm hiểu ngôn ngữ SCL-S7-300 khối. Khi sử dụng hàm.4. Hằng số NIL . nhiều tham số có thể cung cấp với địa chỉ của bất kỳ loại dữ liệu nào (ngoại trừ ANY). Khối dữ liệu và khối dữ liệu hệ thống. Nó chỉ có thể dùng khi là tham số hình thức với loại tham số phù hợp. Tuy nhiên. Ví Dụ FUNCTION FC100 : VOIDVAR_IN_OUTN_out : INT. Loại POINTER (con trỏ) Bạn có thể gán giá trị đến loại POINTER mà bạn khai áo như tham số hình thức. Hằng số không được phép như tham số hình thức. END_VAR VAR_TEMP ret : INT.

DWORD Trong SCL. END_VAR BEGIN // . SA := out). // . Hạn chế  Loại POINTER cho phép tham số hình thức ngõ vào.. // . DINT và REAL ANY_BIT bao gồm các kiểu dữ liệu : BOOL.. END_FUNCTION FUNCTION_BLOCK FB100 VAR ii : INT. aa : ARRAY[1. Hằng số không được phép như tham số hình thức. bạn có thể gán giá trị bất kỳ loại dữ liệu nào làm biến.1000] OF REAL. Loại ANY ANY_INT bao gồm các kiểu dữ liệu : INT và DINT ANY_NUM bao gồm các kiểu dữ liệu : INT ... tham số này có thể cung cấp sau đó một tham số thực sự của bất cứ loại dữ liệu nào khi nó được gọi. BYTE.... tham số vào ra của FB và FC tham số ngõ ra của FC.. Trang 32 Nhóm I – TĐ04 . Bạn có thể dùng theo dữ liệu như tham số thực sự hoặc giá trị gán     Biến chia sẽ và cục bộ Biến trong DB (địa chỉ tuyệt đối hoặc ký tự) Biến trong đối tượng cục bộ (địa chỉ tuyệt đối hoặc ký tự) Hằng số NIL Bạn có thể xác định một con trỏ rỗng   Loại ANY Timer. ret := SFC79(N := N_out. out := aa)..Tìm hiểu ngôn ngữ SCL-S7-300 // . WORD. END_FUNCTION_BLOCK 3.5. countert và khối. bạn có thể khai báo biến của ANY như sau:   Tham số hình thức khối. Như biến tạm. FC100( N_out := ii.

END_VAR CASE ii OF 1: pANY := MW4.5. chúng không thay đổi khi chương trình đang chạy Nhóm hằng số bên dưới có thể được sử dụng trong chương trình SCL Hằng số dạng bit Hằng dạng số Hằng số dạng số nguyên ( integer) Hằng số dạng số thực (real) Hằng số dạng ký tự Hằng số dạng chuỗi ký tự Hằng số dạng thời gian Hằng số dạng data Hằng số dạng một chu kỳ thời gian Hằng số dạng thời điểm của ngày Hằng số dạng ngày tháng Nhóm I – TĐ04 Trang 33 . //pANY contains the value of the iANY input variable ELSE pANY := NIL. SFCxxx(IN := pANY). bạn không thể chuyển qua tham số này trong một khối xa hơn.Tìm hiểu ngôn ngữ SCL-S7-300  Nếu bạn cung cấp tham số hình thức của loại POINTER với biến tạm khi FB và FC được gọi. 100: pANY:= iANY. // pANY contains the address of MW4 3..5: pANY:= aINT[ii].1 Khai Báo Hằng Số trong SCL : Hằng số là một dự liệu có giá trị không đổi. END_VAR VAR_TEMP pANY : ANY. // pANY contains the value of the NIL pointer END_CASE. Biến tạm là mất tính hợp lệ khi nó chuyển qua. 3. 4) Khai Báo Hằng Và Biến Trong SCL: 4. //pANY contains the address of the ii th // element of the aINT field.1 Ví Dụ Về Loại ANY VAR_INPUT iANY : ANY.

Trong khối simple expressions.2 Hằng Số Dạng Dữ Liệu (data) Ví dụ: Int1:=Int2 + 12345 //"12345" được cho dưới dạng data kiểu INT Real1:=Real2 + 12345 //"12345" được cho dưới dạng data kiểu REAL Hằng số được gán kiểu dữ liệu với thang giá trị nhỏ nhất. NUMBER2 := 2 * 5 + 10 * 4 . Ví dụ:hằng số “12345” thì không được xác định theo dạng INT như trong STL mà phải là kiểu lớp dữ liệu.1 Thiết Lập Tên Cho Hằng Số Bạn có thể thiết lập tên cho hằng số để sử dụng lệnh CONT trong phần thiết lập trong chương trình của bạn. bạn có thể chỉ ra được một data trong những data dạng số bên dưới. **. nó sẽ phù hợp với hằng số mà không có bất cứ sự suy giảm về giá trị. -.1.1. NUMBER3 := 3 + NUMBER2 . NAME := ’SIEMENS’ . END_CONST 4. TIMEOFDAY1 := TIME#1D_1H_10M_22S_2MS . chỉ có 7 công thức toán học được chấp nhận (*. Ví dụ: CONST Number := 10 .DINT huặc REAL Kiểu định nghĩa hằng số (Type-Defined Constants) Trong việc sử dụng ký hiệu để dịnh nghĩa hằng số. phụ thuộc vào biệc sử dụng INT. Làm cách này thì trong mỗi đoạn sẽ dễ dàng hơn cho việc đọc và thay đổi giá trị hằng số. Điều này nên làm cho tất cả các hằng số trong mỗi phần lập trình. Ví dụ: Nhóm I – TĐ04 Trang 34 . +. MOD ). /. DIV.Tìm hiểu ngôn ngữ SCL-S7-300 4.

Tìm hiểu ngôn ngữ SCL-S7-300 4.1. Ví dụ: 15 VALUE 15 hằng số kiểu số nguyên định dạng là dạng thập phân 2#1111 VALUE 15 hằng số kiểu số nguyên dịnh dạng là dạng nhị phân 16#F VALUE 15 hằng số dạng só nguyên dịnh dạng kiểu số HEX Các ký hiệu có thể sử dụng ở bảng dưới Nhóm I – TĐ04 Trang 35 . kiểu và giá trị của hằng số được quyết định trực tiếp bởi ký hiệu của chúng. điều này phụ thuộc vào vào dạng dữ liệu hay định dạng dữ liệu. mà không cần phải thiết lập cho nó.3 Ký Hiệu Hằng Số: Có một dạng ký hiệu đặc biệt huặc định dạng cho cho giá trị của hằng số.

16 bit. chúng có thể được gán với các biến trong chương trình SCL với các dữ liệu kiểu BOOL. BYTE. WORD huặc DWORD.Tìm hiểu ngôn ngữ SCL-S7-300 Hằng số dạng bit Hằng số kiểu bit chứa đựng gía trị với độ dài 1 bit. Điều này phụ thuộc vào chiều dài của chúng. 8 bit. huặc 32 bit. Cú pháp: Nhóm I – TĐ04 Trang 36 .

chúng được sử dụng bởi tiếp đầu ngữ 2#. dấu ghạch dưới để cho dễ đọc trong trường hợp số đó dài. điều này được định chỉ rõ ở hình bên dưới. Ví dụ của một chuỗi số bát phân: Ví dụ: Dưới đây là ví dụ để giải thích về ký hiệu của hằng số dạng bit: Bool#false 8#177777 DW#16#0000_0000 4. Trong việc đáp ứng độ dài của chúng. chúng có thể được tách ra bởi các dấu gạch dưới).Tìm hiểu ngôn ngữ SCL-S7-300 Chuỗi ký tự thập phân (Decimal Digit String) Hằng số thập phân có thể là một dãy số (nếu cần.// binary DW#2#1111_0000_1111_0000 dword#32768 Nhị phân. có thể chúng được gán để biến đổi với dạng dữ liệu INT huặc DINT trong chương trình SCL.16# theo sau đó là các số trong ký hiệu tuỳ vào sự lựa chọn của hệ thống. 8# . thập lục phân ( Binary. Octal and Hexadecimal Values) Bạn có thể thấy rõ một hằng số nguyên trong một hệ thống chúng có ký hiệu khác so với dạng thập phân. //hexadecimal W3: WORD : = W#8#1234 .1. Cú pháp: Nhóm I – TĐ04 Trang 37 . bát phân. //octal W4: WORD := W#2#0000_0001_1010_1110 .3. Ví dụ: những hằng số gồm chuỗi ký tự như bên dưới: W1: WORD : = W#1234 . //decimal W2: WORD : = W#16#1234 .2 Hằng Số Nguyên: Hằng số dạng số nguyên chứa đựng tất cả các giá trị số với dộ dài 16 bit huặc 32 bit.

Tìm hiểu ngôn ngữ SCL-S7-300

Chuỗi ký tự thập phận (Decimal Digit String)
Hằng số thập phân có thể là một dãy số (nếu cần, chúng có thể được tách ra bởi các dấu gạch dưới). Dấu ghạch dưới để cho dễ đọc trong trường hợp số đó dài. Ví dụ: Những hằng số gồm chuỗi ký tự như bên dưới: 1000 1_120_200 666_999_400_311

Với giá trị nhị phân, bát phân, thập lục phân ( Binary, Octal and Hexadecimal Values)
Bạn có thể thấy rõ một hằng số nguyên trong một hệ thống chúng có ký hiệu khác so với dạng thập phân, chúng được sử dụng bởi tiếp đầu ngữ 2#, 8# ,16# theo sau đó là các số trong ký hiệu tuỳ vào sự lựa chọn của hệ thống. Ví dụ: Dưới đây là ví dụ để giải thích về ký hiệu của hằng số dạng nguyên: Value_2:=2#0101; // Binary number, decimal value 5 Value_3:=8#17; // Octal number, decimal value 14 Value_4:=16#F; // Hexadecimal number, decimal value 15 Value_5:=INT#16#3f_ff // Hexadecimal number, type-defined Notation

4.1.3.3 Hằng Số Dạng Số Thực.
Hằng số dạng số thực có giá trị với vùng thập phân. Chúng có thể được gán để biến đổi với dữ liệu dạng số thực REAL. Cú pháp

Nhóm I – TĐ04

Trang 38

Tìm hiểu ngôn ngữ SCL-S7-300

Việc sử dụng dấu cộng huặc dấu trừ có thể tuỳ chọn. nếu không ghi dấu phân biệt thì giá trị đó được giả định là dấu dương Hằng số thập phân có thể là một dãy số (nếu cần, chúng có thể được tách ra bởi các dấu gạch dưới). dấu ghạch dưới để cho dễ đọc trong trường hợp số đó dài. Ví dụ: những hằng số gồm chuỗi ký tự như bên dưới: 1000 1_120_200 666_999_400_311

Số mũ (exponent )
Khi chúng ta sử dụng số có dấu chấm động. Chúng ta có thể dùng dạng hàm mũ được chỉ rõ bởi chữ “E” Huặc chữ “e” và theo theo đó là giá trị dạng integer. Giá trị này có thể được được biểu diễn trong chương trình SCL bởi số thực. 3.0E+10 3.0E10 3e+10 3E10 0.3E+11 0.3e11 30.0E+9 30e9 Ví dụ NUM4:= -3.4 ; NUM5:= 4e2 ; NUM6:= real#1.5;

4.1.3.4 Hằng Số Dạng Ký Tự (Dạng Ký Tự Đơn Giản)
Hằng số dạng ký tự chỉ chứa một ký tự. Ký tự được đóng ngoặc bởi dấu phẩy đơn (‘). Hằng số kiểu ký tự không được sử dụng trong biểu thức. Cú pháp:

Ví dụ: Charac_1 := ’B’; Charac_2 := char#43; Charac_3 := char#’B’; Cú pháp của dạng ký tự: Bất cứ dạng ký tự nào mở rộng sang mã ký tự ASCII đều có thể được sử dụng. đặc biệt là mhững ký tự định dạng như dấu (‘) huặc $ có thể được đưa vào sử dụng trong việc thoát khỏi ký hiệu $. Bạn cũng có thể sử dụng ký tự trắng, mở rộng mã ASCII. để làm được điều này , bạn cần phải biết rõ ký tự của mã ASCII thay thế bằng số HEX như thế nào.

Nhóm I – TĐ04

Trang 39

Tìm hiểu ngôn ngữ SCL-S7-300

*P = Form feed L = Line feed ( tiếp dòng) R = Carriage return ( ký tự xuống dòng) T = Tabulator ( bộ lập bảng) N = New line ( dòng mới) Ví dụ dạng ký tự biểu diễn trong dạng mã HEX. CHARACTER := ’$41’ ; //tương ứng với ký tự “A” Blank :=’$20’; //tương ứng với ký tự |_|

Khai báo kiểu String: String1 = ‘vanha$&123’;

4.1.3.5 Hằng Số Dạng Chuỗi:
Một hằng số dạng chuỗi là một chuỗi ký tự với giá trị lớn nhất là 254 ký tự. Những ký tự này được bao bởi dấu nguặc đơn (‘). Những hằng số dạng chuỗi không được sử dụng trong biểu thức. Cú pháp:

Cú pháp của dạng ký tự: Bất cứ dạng ký tự nào mở rộng thành mã ký tự ASCII đều có thể được sử dụng. đặc biệt là những ký tự định dạng như dấu (‘) huặc $ có thể được đưa vào sử dụng trong việc thoát khỏi ký hiệu $. Bạn cũng có thể sử dụng ký tự trắng, mở rộng mã ASCII. để làm được điều này , bạn phải biết rõ ký tự của mã ASCII thay thế bằng số HEX như thế nào. *P = Form feed ( tiếp trang) L = Line feed ( tiếp dòng) R = Carriage return ( ký tự xuống dòng) T = Tabulator ( bộ lập bảng) N = New line ( dòng mới)

Nhóm I – TĐ04

Trang 40

Tìm hiểu ngôn ngữ SCL-S7-300 Ngắt một chuỗi (Interrupting a String) Bạn có thể ngắt ra và kết hợp lại một chuỗi nhiều lấn Một chuỗi được đặt vào vị trí trong một dòng của một đoạn chương trình SCL huặc được kéo dài nhiều dòng.3. TIMEVARIABLE2:= D#1995-05-05 . Dạng ngày tháng được định rõ bởi dạng integer cho năm 94 số). 4.$> $< Controller’.6 Hằng Số Dạng Ngày Tháng Một ngày được đưa ra bởi tiếp đầu ngữ DATA# huặc D#. Cú pháp: Ví dụ: TIMEVARIABLE1:= DATE#1995-11-11 . sử dụng kiểu nhận dạng đặc biệt. ví dụ: // hằng số chuỗi: NAME:= ’SIEMENS’. bạn sử dụng ký tự nhận dạng $<. Nhóm I – TĐ04 Trang 41 . // chỗi trong hexadecimal: MESSAGE1:= ’$41$4E’ (*character string AN*). để ngắt một chuỗi. Cách nhận biết khoảng trắng giữa chương trình ngắt và kết hợp có thể kéo dài qua nhiều dòng và có thể chứa trong phần chú giải hay khoảng trống. bạn sử dụng ký tự nhận dạng “$>” và để tiếp tục cho nó ở trong một dòng dài hơn. //ngắt một hằng số chuỗi MESSAGE1:= ’MOTOR.1. còn tháng và ngày tách biệt bởi dấu gạch.

Chúng được định rõ một cách riêng lẻ bởi đường gạch dưới các ký tự.. khoảng thời gian có thể được biểu diễn bằng 2 cách.7 Hằng Số Khoảng Thời Gian. giây. bạn phải định rõ ít nhất là một đơn vị thời gian.3. Đơn vị thời gian ms được tách riêng bởi một dấu chấm (.3s .). giờ. ms phải được gán. Cú pháp: Thời gian của một ngày được chỉ rõ bởi các thông số giờ. Ví dụ: // định dạng thập phân Interval1:= TIME#10.. phút. // định dạng hỗn hợp Interval2:= T#3D_2S_3MS . Tuy nhiên ít nhất bạn phải để 1 đơn vị thời gian một cách rõ ràng. // cả hỗn hợp và thập phân Interval3 := T#2D_2. giây và tách biệt nhau bởi dấu (:) có thể tuỳ chọn để định rõ thêm về ms. phút . Bạn có thể bỏ đi những thành phần thời gian. Nhóm I – TĐ04 Trang 42 .8 Hằng Số Dạng Thời Gian Trong Ngày (Time-of-Day Constants) Một thời gian trong ngày được định dạng với tiếp đầu ngữ là TIME_OF_DAY# huặc TOD#.) có thể chỉ được định rõ một lần..3.1.1. 4. Thứ tự ngày. Sự thay đổi từ định dạng đa hợp sang định dạng kiểu thập phân chỉ được phép khi đơn vị thời gian không được định nghĩa rõ dàng. Khoảng thời gian được đưa ra với tiếp đầu ngữ là TIME# huặc T#. Theo sau tiếp đầu ngữ T# huặc time#.5S . Dạng thập phân Định dạng kiểu đa hợp Mỗi một đơn vị thời gian (giờ. Sử dụng định dạng thời gian đơn giản thì có thể không phải xác định đơn vị thời gian. Định Dạng Kiểu Thập Phân khi bạn sử dụng dịng dạng thập phân thì bạn định rõ dạng thời gian như giờ huặc phút theo dạng thập phân.. phút. Định dạng kiểu đa hợp là một dãy thành phần thời gian riêng biệt. Đầu tiên là ngày sau đó là giờ.Tìm hiểu ngôn ngữ SCL-S7-300 4.

9 Ngày Tháng Và Thời Gian (Date and Time Constants) Ngày và thời gian có cấu trúc với tiếp đầu ngữ là DATE_AND_TIME# huặc DT#. 4. TIMEOFDAY2:= TOD#11:11:11 .1. Đây là hằng số chỉ rõ thời điểm của một ngày tháng. Cú pháp: Nhóm I – TĐ04 Trang 43 .Tìm hiểu ngôn ngữ SCL-S7-300 Ví dụ: TIMEOFDAY1:= TIME_OF_DAY#12:12:12.2 .3.

LAB3. END_LABEL Cách khai báo 1 số kiểu dữ liệu: Khai báo Hằng : Int1 : = int2+1234 .4 Khai Báo Nhãn (Declaring Labels) Nhãn được sử dụng để nhận dạng cái địch mà lệnh GOTO sẽ nhẩy đến.Tìm hiểu ngôn ngữ SCL-S7-300 Ví dụ: TIMEOFDAY1:= DATE_AND_TIME#1995-01-01-12:12:12.1. TIMEOFDAY2:= DT#1995-02-02-11:11:11. LAB2. 4. real1 := real2 + DWORD_TO_REAL( MD10). Cú pháp: Ví dụ: LABEL LAB1. Real1: = real2+ 1234 . Nhóm I – TĐ04 Trang 44 .N:=2) . Cách định nghĩa các hằng Sử Dụng địa chỉ tương đối: MW14 := SHL(IN := MW12 .2 . Chúng được khai báo trong phần chương trình khai báo với một khối logic có tên của chúng.

Tham số hình thức được biểu diễn như biến cục bộ. Biến tạm Các loại của tham số khối Tham số khối là phần giữ chỗ được gán một giá trị xác định khi khối được gọi. Chỉ có chức năng đọc Đã chuyể đổi giá trị khi hàm được gọi. chúng nhận giá trị và phản hồi về hàm gọi. Phần giữ chỗ trong khối được biết như tham số hình thức và giá trị gán tới chúng khi khối được gọi là tham chiếu như tham số thực sự. Giá trị này còn giữ khi còn liên hệ và không bị truy xuất bởi các khối ngoài. Bảng minh họa: Tham số khối Tham số ngõ vào Giải thích Chấp nhận giá trị ngõ vào khi được gọi. Tham số ngõ ra Tham số vào ra Cờ nhớ (OK Flag) Trong biên SCL. Biến cục bộ và tham số khối Các loại của biến Biến Biến cố định Giải thích Giữ giá trị qua nhiều chu kỳ. Nó là biến cục bộ của loại BOOL và được định nghĩa trước tên “OK” Nhóm I – TĐ04 Trang 45 .2 Khai Báo Biến: 4.2. lưu giá trị của một hàm hoặc khối hàm Phụ thuộc vào khối logic ở các cấp độ mà không chiếm giữ vùng nhớ cố định. Chấp nhận giá trị ngõ vào khi khối được gọi.1.Tìm hiểu ngôn ngữ SCL-S7-300 4. cờ nhớ dùng kiểm tra lỗi khi chương trình chạy trong CPU. Có thể đọc và ghi. Sau khi xử lý giá trị. nó lưu trong ngăn xếp CPU.

ARR : ARRAY[1. Nhiều loại tham số thì khai báo: VALUE2. Cú pháp Ví dụ VALUE1 : REAL. SET : STRUCT MEASARR:ARRAY[1. Cú pháp Nhóm I – TĐ04 Trang 46 . nếu chúng là một phần dữ liệu cơ bản.VALUE4..10] OF REAL. Khai bóa một biến hoặc tham số bao gồm một từ nhận dạng và loại dữ liệu. SWITCH:BOOL.20] OF REAL.Tìm hiểu ngôn ngữ SCL-S7-300 4. ngõ ra của một FB có thể gán giá trị ban đầu khi khai báo... Cú Pháp Chung Biến và tham số khối phải khai báo riêng trước khi được dùng trong khối logic và khối dữ liệu.100... 1.2. END_STRUCT 4. giá trị ban dầu được gán bằng (:=) hằng số.. Với biến đơn giản. tuy nhiên.2.: INT. Khởi Tạo Biến cố định như tham số ngõ vào. khai báo xác định một từ nhận dạng được dùng tham số khối hoặc biến và được gán nó một loại dữ liệu.3. Tham số vào ra có thể cũng gán giá trị ban đầu.2. VALUE3..

.10] OF REAL := 10(2. CONTROLLER2 : ARRAY[1.2] OF INT := -54.. 736. A3 : ARRAY[1. //Array initialization: CONTROLLER1 : ARRAY [1. A1 : INT := 10 .5.Tìm hiểu ngôn ngữ SCL-S7-300 Ví dụ VALUE :REAL := 20. Khởi tạo mảng Bạn phải xác định giá trị từng thành phần bở dấu chấm.2.5). Cú pháp Ví dụ VAR // Initialization of static variables: INDEX1 : INT := 3 . 1. 77. A2 : STRING[6] := ’FACTOR’.25. END_VAR Nhóm I – TĐ04 Trang 47 .12] OF REAL := 0...0). 1. END_STRUCT . //Structure initialization: GENERATOR: STRUCT DAT1 : REAL := 100. 10(100. -83.0.0.

2. Biến xác định kích cỡ vùng nhớ. Frame1 AT Buffer : UDT100 . END_VAR Quy luật   Khai báo của các dạng xa hơn của biến phải được tạo theo khai báo của biến để mà nó trỏ đến các khai báo cùng loại Loại dữ liệu của dạng phải so sánh với loại dữ liệu của biến. Ví dụ VAR_INPUT Buffer : ARRAY[0.Tìm hiểu ngôn ngữ SCL-S7-300 4. bạn có thể xác địh dạng của biến hoặc của dãy trong biến sử dụng từ khóa ‘AT’.. Nó thừa hưởng các đặc tính của biến mẫu. Frame2 AT Buffer : UDT200 . Đòi hỏi bộ nhớ của dạng phải nhỏ hơn hoặc bằng. Một dạng có thể nhìn thấy được chỉ cục bộ trong khối.4. Nhóm I – TĐ04 Trang 48 .255] OF BYTE. Dạng Khai Báo Của Dãy Biến Có thể truy xuất một khai báo biến với loại dữ liệu khác nhau.

DWORD. 4.Tìm hiểu ngôn ngữ SCL-S7-300 (1) ANY pointer not permitted in VAR_OUT. CHAR Complex = ARRAY. bạn có thể sử dụng nhiều số thứ tự hàm hơn. S5TIME. DATE. DINT. INT. Trong khối hàm. gọi hàm khác mà không có đối tượng riêng của khối dữ liệu. WORD. STRUCT.6. Khối được gọi như một đối tượng phại không có độ dài 0. Không thể một khởi tạo đối tượng cục bộ xác định. TIME. bạn có thể khai báo biến của loại FB hoặc SFB trong khai báo vùng cho biến cố định (VAR.Supply3.Supply4 : FB100.2. STRING 4.2. Nhóm I – TĐ04 Trang 49 . Motor1 : Motor . Cú pháp Ví dụ Supply1 : FB10. Khai Báo Hướng Đối Tượng Đối với khối hàm.5. Nếu một khối hàm hiện hành được gọi trong FB trong chương trình của bạn. Ít nhất một biến cố định hoặc tham số phải khai báo. Sử Dụng Nhiều Đối Tượng Có thể bạn muốn hoăc phải dùng hạn chế số thứ tự khối cho dữ liệu riêng của đối tượng. Tích lũy nhiều dữ liệu đối tượng trong một hàm. DATE_AND_TIME. Dữ liệu đối tượng cục bộ được chứa trong khối dự liệu đối tượng của khối hàm gọi.    Bao gồm khối hàm bạn muốn gọi như biến cố định. Nhiều biến được gọi các đối tượng cục bộ của FB hoặc SFB. END_VAR). Supply2. BYTE. Elementary = BOOL.

2.2. 4.1. // : // : ELSE // Division was not correct. Tuy nhiên bạn phải chọn bảng lựa chọn biên dịch “set OK flag” trước khi biên dịch. không cần thiết khai báo. Tiểu Vùng Khai Báo 4.2. Nó là một biến cục bộ của loại BOOL với định nghĩa trước là “OK”. cờ nhớ set về FASLE. Nó có thể được hỏi ở bất kỳ con trỏ nào trong khối hoặc có thể được set lên TRUE/FASLE sử dụng lệnh SCL. Nhóm I – TĐ04 Trang 50 . IF OK THEN // Division was correct. Division:= 1 / IN. // : END_IF.8. Nếu có lỗi trong khi vận hành.. OK:= TRUE. Mỗi vùng chứa đựng các khai báo được phép cho các thành phần tiểu vùng khai báo.Tìm hiểu ngôn ngữ SCL-S7-300 4. giá trị cờ nhớ được lưu trong tham số ngõ ra ENO và có thể được đánh giá bởi khối gọi. Ví dụ // Set OK flag to TRUE // to check whether the // action executes correctly. Tổng Quan Về Tiểu Vùng Khai Báo Chỉ có loại biến cục bộ hoặc tham số có từ nhận dạng tiểu vùng khai báo riêng bởi các từ khóa riêng.8. Khi khối được thoát.7 Cờ Nhớ (OK Flag) Cờ nhớ dùng để chỉ dẫn thực thi một khối chính xác hoặc không chính xác. Bảng minh họa các biến hoặc tham số mà bạn khai báo trong các khối logic khác nhau. Khai báo Cờ nhớ là biến hệ thống. cờ nhớ có giá trị TRUE. Bắt đầu chương trình.

Sau khi biên dịch. vùng này và vùng của tham số khối quyết định cấu trúc khối dữ liệu đối tượng gán. Vùng khai báo này là phần của khai báo FB. Khai báo hàm gọi như một biến cố định nếu bạn muốn gọi nó trong khối hàm hiện hành.Tìm hiểu ngôn ngữ SCL-S7-300 *)Mặc dù khai báo của biến nằm giữa từ khóa VAR và END_VAR. Cú pháp Nó được khai báo trong phần khai báo VAR / END_VAR.8. gán giá trị cho biến và khởi tạo biến.2. Nhóm I – TĐ04 Trang 51 . nhưng khai báo vẫn được tạo trong vùng tạm khi biên dịch tập tin nguồn. Trong vùng này. Nó dùng lưu giá trị của khối hàm và chứa khối dữ liệu tương ứng. bạn có thể:   Tạo biến.2 Biến Cố Định Biến cố định là các biến cục bộ được giữ lại khi khối vận hành. 4.

biến khai báo trong vùng khai báo. Giá trị nó chỉ giữ lấy khi khối liên hệ vận hành. //Instance declaration END_VAR Truy xuất Biến được truy xuất như sau:  Truy xuất trong khối: trong mã vùng của khối hàm. giá trị của dữ liệu tạm không được xác định.Tìm hiểu ngôn ngữ SCL-S7-300 Ví dụ VAR RUN :INT. SWITCH :BOOL. nó được đặt trong ngăn xếp CPU. Khi một OB.8.10] OF REAL. FC. Không thể khởi tạo nó. Biến tạm kho6ngt thể truy xuất ra bên ngoài khối chúng được khai báo. Biến Tạm Biến tạm phụ thuộc vào khối logic và không giữ vùng nhớ cố định.2. FC thực thi lần đầu. FB.variable  4.MOTOR_2 :FB100. ví dụ DBx. bạn có thể truy xuất biến. Điều này được giải thích chi tiet1 hơn trong phần “giá trị gán” Truy xuất ngoài sử dụng đối tượng DB: Bạn có thể truy xua56t1bie61n từ khối khác bằng cách sử dụng bảng truy xuất. Cú pháp Nhóm I – TĐ04 Trang 52 .FB đang thực thi.3. Bạn nên khai báo dữ liệu như dữ liệu tạm nếu bạn yêu cầu nó để ghi kết quả chuyển tiếp khi OB. MOTOR_1. MEASARR :ARRAY [1..

AUX2 : REAL . Vì vậy tham số cung cấp một phần dẫn cho chuyển đổi thông tin các khối. Tham số hình thức ngõ ra được gán gái trị thực sự ngõ ra. 4. Phần chiếm giữ trong khối được biết như tham số hình thức. Tham số hình thức vào ra được gán gái trị thực sự vào ra. FC.Tìm hiểu ngôn ngữ SCL-S7-300 Nó được khai báo trong phần khai báo VAR_TEMP / END_VAR. Ví dụ VAR_TEMP BUFFER 1 : ARRAY [1. OB.8..2. END_VAR Truy xuất Biến này luôn được truy xuất từ phần của khối mà biến được khai báo.4.10] OF INT . Loại của tham số khối    Cú pháp Khai báo của tham số hình thức được tạo trong phần khai báo của hàm hoặc nhóm theo tham số trong ba vùng khai báo. Nó dùng để khai báo tên biến và loại dữ liệu trong khai báo biến. Khi Nhóm I – TĐ04 Trang 53 Tham số hình thức ngõ vào được gán gái trị thực sự ngõ vào. bạn xác định tên tham số và loại dữ liệu. . Tham Số Khối Tham số là phần giữ chỗ mà được gán giá trị khi khối đươc gọi. AUX1. Vùng khai báo này là phần của khai báo FB. Trong khai báo biến. Có thể khởi tạo cho tham số ngõ vào và ngõ ra cho hàm FB.

TIMEOFDAY : TIME_OF_DAY . END_VAR VAR_OUTPUT // Output parameters SETPOINTS: ARRAY [1. phức tạp và loại dữ liệu người sử dụng xác định. Ví dụ VAR_INPUT // Input parameters MY_DB : BLOCK_DB . END_VAR Truy xuất Tham số khố truy xuất từ phần mã của khối logic:   Truy xuất trong: truy xuất trong các phần của khối mà nó được khai báo. Truy xuất ngoài dùng khối dữ liệu đối tượng: ban có thể truy xuất khối hàm sử dụng hàm gán đối tượng DB. CONTROLLER : DWORD . 5) Các Câu Lệnh Điều Khiển: IF : Nhánh chương trình phụ thuộc bởi 1 giá trị Boolean CASE : Nhánh chương trình phụ thuộc bởi 1 giá trị INT FOR : Vòng chương trình lặp xác định WHILE : Vòng lặp không xác định REPEAT : Vòng lặp không xác định CONTINUE : Kết thúc thực thi lặp lại hiện tại của câu lệnh vòng lặp EXIT : Thoát vòng lặp GOTO : Nhảy tới 1 nhãn chương trình Nhóm I – TĐ04 Trang 54 . END_VAR VAR_IN_OUT // In_out parameters SETTING : INT . bạn có thể sử dụng phần cơ bản.10] of INT ..Tìm hiểu ngôn ngữ SCL-S7-300 khai báo tham số hình thức.

0 = 1 hoặc Q4.0 = 1 và I0. // nếu I0. Vì thế nên thời gian của chương trình được giảm xuống.Tìm hiểu ngôn ngữ SCL-S7-300 RETURN 5.  Nếu không có diễn giải Boolean nào = TRUE thì hệ quả của câu lệnh ELSE được thực thi (hay không có hệ quả nào nếu nhánh ELSE không tồn tại).1 Câu : Thoát khỏi 1 Block chương trình lệnh IF: Cấu trúc : IF ( điều kiện) THEN Công việc 1.1 = 0) THEN Q4. Các Qui Tắc Câu Lệnh IF Được Thực Thi Hệ quả đầu tiên của câu lệnh có diễn giải logic = TRUE được thực thi.1 = 0 thì Q4. Một số ví dụ thực tế: ORGANIZATION_BLOCK OB1 VAR_TEMP Ha : ARRAY[0.0 = 1)) AND( I0. END_ORGANIZATION_BLOCK Dòng lệnh tương đương trong LAD Nhóm I – TĐ04 Trang 55 .19] OF BYTE.. // Statement Section_ELSIF …………………………………………… ELSE Công việc n. END_VAR IF ((I0. Các hệ quả còn lại không được thực thi.  Bất kỳ lệnh ELSIF nào cũng có thể có mặt.0 = 1) OR (Q4.0 := 1 . Chú ý Dùng 1 hay nhiều nhánh ELSIF có ưu điểm là diễn giải logic sau diễn giải đó không còn được tính đến trong hệ quả của lệnh IF.0 := 1 END_IF. // kết thúc lệnh. // Statement Section_IF ELSIF ( điều kiện 2) THEN Công việc 2 . // Statement Section_ELSE END_IF.

END_CASE.2 . ELSE: // câng việc còn lại _ELSE . Count := "Count". 5. Tim := "Monitor"). Ready_rem := "FeedData". IF NOT Select_FC & NOT Select_FB & Select_L THEN "Feed". Readyload := "FeedData".Câu Lệnh Case Câu lệnh CASE dùng để chọn 1 trong 1 vài phần khác của chương trình. Sự lựa chọn phụ thuộc vào giá trị hiện tại của diễn giải lựa chọn. Reset := Basic_st.Tìm hiểu ngôn ngữ SCL-S7-300 Ví dụ 2: Đoạn chương trình trong chương trình điều khiển băng tải. END_IF. Cú pháp: CASE value OF 0..Remove. Removed := "Continue". Man_start := Man_on. 8: // công việc _8 . Stop := "/Stop"..3 . Nhóm I – TĐ04 Trang 56 ."FeedData"( Start := Start.Load.3 : // công việc _0.

//CASE with value areas CASE Expression2 OF 1. 3 : Q4. phần chương trình ELSE phía sau sẽ được thực thi hay không câu lệnh nào được thực thi nếu nhánh ELSE không tồn tại.2 := TRUE. M_3. Expression3 : INT. Day_of_the_week: STRING[12]. ID : INT.4 := TRUE.1 := TRUE. M_2.  Mỗi giá trị chỉ xuất hiện 1 lần. 2.Tìm hiểu ngôn ngữ SCL-S7-300 Câu lệnh CASE được thực thi theo các qui tắc sau: Diễn giải lựa chọn phải trả lại giá trị kiểu INTEGER. Expression2 : INT. END_VAR LABEL Subroutine. End. Error_number : INT.  Những giá trị trong bảng giá trị phải là kiểu INTEGER.   Nhóm I – TĐ04 Trang 57 .  Nếu không tìm thấy được. ELSE : QB4 := 0. câu lệnh thành phần trong danh sách được thực thi.5 := TRUE.2 : Q4. Khi câu lệnh CASE được xử lý. Các qui tắc sau được áp dụng khi liệt kê giá trị:  Mỗi giá trị được liệt kê bắt đầu là 1 hằng số. Nếu 1 giá trị được tìm thấy. END_CASE. 1 chuỗi hằng số hay 1 dãy hằng số.3 := TRUE. Một số ví dụ: FUNCTION_BLOCK "CASE" TITLE = ' sử dụng câu lệnh CASE ' VAR Expression1 : INT. END_LABEL BEGIN //CASE with simple waiting list CASE Expression1 OF 1 : Q4. Dat : DATE. Chương trình kiểm tra xem giá trị của diễn giải chọn lựa bao hàm trong bảng giá trị xác định trước hay không. M_1.3 : Q4. END_VAR VAR_TEMP Return_jump : INT. 2 : Q4.

//Determining the day of the week from the DATE format CASE DINT_TO_INT(DATE_TO_DINT(Dat) MOD 7)+1 OF 1 : Day_of_the_week := 'Monday'. M_1: (*Return jump from subroutine*). M_2: (*Return jump from subroutine*). 6. END_CASE.. 2 : GOTO M_2. 3 : Day_of_the_week := 'Wednesday'. GOTO End. //"Subroutines" IF I1.3 := TRUE. 4 : Day_of_the_week := 'Thursday'. END_CASE. 7 : Day_of_the_week := 'Sunday'. 7.2 := TRUE. IF I1. //********************************************************* End: . IF I1. //Jump over subroutine //********************************************************* CASE return_jump OF 1 : GOTO M_1. END_IF. GOTO subroutine.3. GOTO subroutine. ELSE : Error_number := 16#7F.1 THEN Return_jump := 2.Tìm hiểu ngôn ngữ SCL-S7-300 END_CASE. END_IF. GOTO subroutine. END_IF. 6 : Day_of_the_week := 'Saturday'..0 THEN Return_jump := 1. 2 : Day_of_the_week := 'Tuesday'. END_CASE.. M_3: (*Return jump from subroutine*).4 : Q5. END_CASE.10 : Error_number := ID. //CASE with gaps in the value areas CASE Expression3 OF 1. ELSE : QB5 := 0. 5 : Day_of_the_week := 'Friday'. 3 : GOTO M_3. 12. //Assigning an error number CASE ID OF 0 : Error_number := 0. 1..9 : Q5. END_FUNCTION_BLOCK Nhóm I – TĐ04 Trang 58 .5 : Error_number := ID + 128.16 : Q5.1 := TRUE.2 THEN Return_jump := 3.

điều kiện được kiểm tra (đến giá trị cuối cùng) để biết được có thỏa mãn hay không. Định nghĩa về vòng lặp FOR bao gồm sự xác định 1 giá trị đầu và 1 giá trị cuối. hệ quả của câu lệnh được thực thi. index3 : INT := 8.Runtime_variable] := TRUE. biến điều khiển được đặt 1 giá trị đầu (khai báo ban đầu) và mỗi lần vòng lặp lặp lại. index2 : INT := 6. Bạn có thể bỏ qua câu lệnh BY. i. Mỗi khi chạy vòng lặp. Nếu không có giá trị tăng nào được xác định thì nó tự động cộng thêm 1. Ví Dụ Minh Họa: FUNCTION_BLOCK "FOR" TITLE = 'FOR Statement' VAR index1 : INT := 4. END_VAR VAR_TEMP Runtime_variable : INT. Cú Pháp: FOR Control Variable:= Start TO End BY Increment DO // Statement Section . ngược lại thì hệ quả không được thực thi. Biến điều khiển phải là 1 biến đặt hay là biến cục bộ loại INT hay DINT. k : INT. Nếu điều kiện thỏa mãn.3 Câu Lệnh For 1 câu lệnh FOR được dùng để lặp lại 1 hệ quả miễn là biến điều khiển trong tầm giá trị xác định trước.  Qui tắc Các qui tắc để thiết lập câu lệnh FOR   Biến điều khiển là dữ liệu kiểu INT hay DINT.Tìm hiểu ngôn ngữ SCL-S7-300 5. END_FOR. Câu lệnh FOR được thực thi như sau:  Tại đầu vòng lặp. Nhóm I – TĐ04 Trang 59 . Cả 2 giá trị phải cùng loại với biến điều khiển. END_VAR BEGIN FOR Runtime_variable := 0 TO 7 DO M[index1. nó gia tăng sự tăng giá trị xác định trước (tăng tích cực) hay giảm đi (tăng tiêu cực) cho đến khi đến giá trị cuối cùng. END_FOR.

END_FOR. (* Set memory bits *) FOR i := 2 TO 23 DO M[i DIV 8. END_FOR. IF (i = 2 AND k > 5) THEN EXIT. END_FOR.Runtime_variable] := TRUE. IF Runtime_variable = 7 THEN CONTINUE. M[index2 + 1. END_FOR. END_IF. M[i. END_FOR. END_IF.K] := FALSE. MD[index2] := 0. MD[index2] := 0. END_FUNCTION_BLOCK Nhóm I – TĐ04 Trang 60 .i MOD 8] := TRUE. END_IF. MW[index3] := INT_TO_WORD(i). ELSIF Runtime_variable = 8 THEN CONTINUE. MD[index2] := MD[index1].Runtime_variable] := TRUE. //Nested FOR loops (* Reset memory bits *) FOR i := 0 TO 2 DO FOR k := 0 TO 7 DO IF (k < 2 AND i = 0) THEN CONTINUE. IF Runtime_variable = 10 THEN EXIT. MD[index1] := 0. END_IF. END_FOR. //Abort FOR loops FOR Runtime_variable := 0 TO 15 DO M[index2.Tìm hiểu ngôn ngữ SCL-S7-300 FOR Runtime_variable := 0 TO 15 BY 2 DO M[index2 + Runtime_variable MOD 8. //FOR loop with step width <> 1 FOR i:=128 TO 142 BY 2 DO MW[i] := PIW[i]. MW[index3 + 2] := INT_TO_WORD(k). Runtime_variable] := TRUE.

END_WHILE. END_WHILE. END_VAR BEGIN //Simple WHILE statement i := 0.DW[i] = 16#FFFF DO i := i + 1.4 Câu Lệnh While: Câu lệnh WHILE cho phép sự thực thi lặp lại của 1 hệ quả của các câu lệnh được điều khiển bởi 1 điều kiện thực thi.Tìm hiểu ngôn ngữ SCL-S7-300 5. END_VAR VAR_TEMP t_Date : DINT. Sau vòng lặp DO lặp lại miễn là điều kiện thực thi có giá trị TRUE. Cấu Trúc: WHILE ( điều kiện) DO // Statement Section . byteindex : INT. i. điều kiện thực thi được tính toán. //Finding the next date that falls at the beginning of the week Nhóm I – TĐ04 Trang 61 .. Ví dụ minh họa: FUNCTION_BLOCK "WHILE" TITLE = 'WHILE Statement' VAR_INPUT Data : BLOCK_DB. Mỗi khi giá trị FALSE xuất hiện. k : INT. Dat : DATE. NextWeek : ARRAY[1. bitindex : INT.7] OF DATE. vòng lặp bỏ qua câu lệnh và vòng lặp tiếp theo được thực thi. Điều kiện thực thi được tạo thành theo các qui tắc cho diễn giải logic. Câu lệnh WHILE được thực thi theo các qui tắc sau:    Trước khi có sự lặp lại của vòng lặp FOR. END_VAR VAR Runtime_variable : INT. WHILE Data.

5 Câu Lệnh Repeat: Câu lệnh REPEAT sẽ làm cho thực thi lặp lại hệ quả của câu lệnh giữa REPEAT và UNTIL cho đến khi điều kiện kết thúc xuất hiện.1).Tìm hiểu ngôn ngữ SCL-S7-300 t_Date := DATE_TO_DINT(Dat).k] = TRUE DO k := k + 1. IF i > i + 4 THEN EXIT. //Finding the first input bit containing "1" i := 0. Nghĩa là vòng lặp được thực thi ít nhất 1 lần cho ngay cả khi điều kiện kết thúc thỏa mãn khi vòng lặp bắt đầu. END_VAR Nhóm I – TĐ04 Trang 62 . k := 0.END_FUNCTION_BLOCK 5.. bitindex := k. END_IF. END_FOR. Điều kiện được tính sau khi vòng lặp được thực thi. busy.32] OF INT. i := i + 1. Điều kiện kết thúc được tạo thành dựa vào các qui tắc cho diễn giải logic. Cấu trúc: REPEAT // Statement Section . //Saving the date information for the next week FOR i := 1 TO 7 DO NextWeek[i] := DINT_TO_DATE(t_Date + i . WHILE (t_Date MOD 7)+1 <> 1 DO t_Date := t_Date + 1. done : BOOL. byteindex := i. IF k = 8 THEN k := 0. Ví dụ minh họa: FUNCTION_BLOCK "REPEAT" TITLE = 'REPEAT Statement' VAR Runtime_variable : INT := 0. Meas_values : ARRAY [1. END_WHILE. END_WHILE. END_IF. END_VAR VAR_TEMP SFC_ERROR : INT. WHILE I[i. UNTIL a = b // điều kiện dừng END_REPEAT.

GOTO End. WHILE hay REPEAT).4 THEN MB4 := 0. END_IF. //Call at restart REPEAT SFC_ERROR := COMPRESS( BUSY := busy. Tùy thuộc vào điều kiện lặp lại vòng lặp có thỏa mãn hay không vòng lặp được thực thi lần nữa hay sự lặp lại câu lệnh được kich hoạt và câu lệnh sau đó được thực thi. Trong câu lệnh FOR.6: Lệnh Continue 1 câu lệnh CONTINUE được sử dụng để kết thúc thực thi lặp lại hiện tại của câu lệnh vòng lặp (FOR. DONE := done). IF I1. Câu lệnh CONTINUE được thực thi theo các qui tắc sau:    Ví Dụ: FOR i = 0 TO 2 DO FOR k := 0 TO 7 DO IF( k<2& I =0) THEN CONTINUE .2 THEN CONTINUE. IF I1.3 := TRUE. END_FUNCTION_BLOCK 5. . UNTIL done END_REPEAT. biến điều khiển được tăng lên bằng cách xác định sự gia tăng sau câu lệnh CONTINUE. END_IF. REPEAT M4. Nhóm I – TĐ04 Trang 63 Câu lệnh ngay lập tức kết thúc sự thực thi của vòng lặp. END_IF. UNTIL Meas_values[Runtime_variable] = -1 END_REPEAT. Runtime_variable := Runtime_variable + 1. IF I1.1 := TRUE. REPEAT Meas_values[Runtime_variable] := 0. UNTIL NOT I1.1 END_REPEAT.2 := TRUE. M4. End: . END_LABEL BEGIN Meas_values [32] := -1. M4.3 THEN EXIT.Tìm hiểu ngôn ngữ SCL-S7-300 LABEL End.

8 Câu Lệnh GOTO Bạn có thể bổ sung 1 chương trình nhảy dùng câu lệnh GOTO.7 Câu Lệnh EXIT 1 câu lệnh EXIT được dùng để thoát vòng lặp (FOR. câu lệnh GOTO không nên sử dụng. M_1: (*Return jump from subroutine*). Ở đây nhãn là 1 nhãn trong vùng diễn giải END/END_LABEL. END_FOR. IF I1. GOTO subroutine. Câu lệnh EXIT thực thi phải tuân theo các qui tắc sau:  Câu lệnh này tạo ra sự lặp lại câu lệnh ngay lập tức xung quanh câu lệnh thoát để được thực thi ngay. END_IF. Câu lệnh GOTO chỉ nên dùng cho tình huống đặc biệt. END_FOR. GOTO subroutine. Nhãn này đứng trước câu lệnh sẽ được thực thi sau câu lệnh GOTO. END_FOR. 5.  Chương trình tiếp tục được thực thi ngay sau cuối vòng lặp (ví dụ sau END_FOR). END_IF. VÍ DỤ: IF I1.WHILE hay REPEAT) tại bất kỳ thời điểm nào mà không cần quan tâm đến điều kiện kết thúc có được thỏa mãn. Nhóm I – TĐ04 Trang 64 .1 THEN Return_jump := 2. ví dụ trong xử lý lỗi. VÍ DỤ: FOR i = 0 TO 2 DO FOR k := 0 TO 7 DO IF( k<2& I =0) THEN EXIT . END_FOR.0 THEN Return_jump := 1. END_IF.k) = TRUE. Điều này tạo nên 1 bước nhảy tức thời đến 1 nhãn xác định và vì vậy đến 1 câu lệnh khác trong cùng 1 khối. Chỉ có thể nhảy ra ngoài vòng lặp. Theo qui tắc của chương trình cấu trúc.  Không thể nhảy vào trong 1 vòng lặp.Tìm hiểu ngôn ngữ SCL-S7-300 END_IF. 5. M(I.  Nơi đến của phép nhảy phải là duy nhất. M(I.k) = TRUE. Nếu bạn sử dụng lệnh GOTO phải nhớ các qui tắc sau:  Nơi đến của phép nhảy phải trong cùng 1 khối.

END_IF. Nhóm I – TĐ04 Trang 65 . 3 : GOTO M_3. Nó chạy và quan sát và quan sát thời gian điều khiển các hàm. GOTO subroutine.1 Các Hàm Thời Gian ( Timer Functions) Timers là một phần tử hàm trong chương trình của bạn. 2 : GOTO M_2. END_CASE. FC) và quay trở về khối đang gọi hay quay về hệ thống hoạt động khi 1 OB được thoát.2 THEN Return_jump := 3. //Jump over subroutine //********************************************************* CASE return_jump OF 1 : GOTO M_1. Giá trị có thể dài không dài hơn giá trị thời gian chạy. GOTO End. bạn có thể đưa vào một giá trị tuyệt đối ( ví dụ: T_NO:=T10) của dữ liệu thời gian như một thông số của hàm định thời.1 Các Cách Gọi Hàm Thời Gian Có 2 cách gọi hàm thời gian là dạng tĩnh và dạng động. IF I1.1. Ở dạng tĩnh ta gán tiimer là cố định Ở dạng động ta gán số hiệu timer là một Biến số Trong việc gọi hàm. M_3: (*Return jump from subroutine*). STEP 7 cung cấp một chuỗi các chuẩn hàm thời gian bạn có thể sử dụng chúng trong chương trình SCL SCL trang bị 5 hàm Timer: S_PULSE S_PEXT S_ODT S_ODTS S_OFFDT Hàm xung Hàm xung mở rộng Hàm thời gian trễ On Hàm thời gian trễ On mở rộng Hàm thời gian trễ OFF 6.Tìm hiểu ngôn ngữ SCL-S7-300 M_2: (*Return jump from subroutine*). FB. 5. Chú ý 1 câu lệnh RETURN đặt tại dòng lệnh cuối của 1 khối logic hay 1 diễn giải của khối dữ liệu thì dư thừa vì nó được tự động thực thi. 6) Các Hàm Cách Khai Báo Và Gọi Hàm Trong SCL 6.9 Câu Lệnh RETURN 1 câu lệnh RETURN thoát khỏi khối đang hoạt động (OB.

:= Start_input. := Timer_status. Nhóm I – TĐ04 Trang 66 . Q:=actFlag). TV:= MY_TIMER[I]. S:=TRUE. . S:=true.Tìm hiểu ngôn ngữ SCL-S7-300 Thay vì thông số cố định bạn có thể chỉ rõ một biến hoặc hằng số của giá trị INT. FOR I:= 1 TO 4 DO S_ODT(T_NO:=MY_TIMER[I]. END_STRUCT. TV:=T#1s.TV). Cách gọi động ( số hiệu Timer là một biến là các phần tử trong mảng) FUNCTION_BLOCK TIME VAR_INPUT MY_TIMER: ARRAY [1. END_FOR. 6.1. Sự tiện ích của cách này là việc gọi hàm có thể động bởi việc gán một biến hoặc một hằng vời một số khác nhau trong mỗi lần gọi. BI:=biVal. := Timer_duration.2 Các Tham Số Timer: Cấu trúc khai báo chung: Time_BCD:= S_xxxxx ( T_NO S TV R Q BI := Timer_address. END_VAR .4] of STRUCT T_NO: INT. := Binary_time). TV : WORD. . Ví dụ cách gọi tĩnh và cách gọi động: Cách gọi Tĩnh ( cố định) S_ODT (T_NO:=T10. .T_NO. R:=FALSE.. := Reset.

Tìm hiểu ngôn ngữ SCL-S7-300 Bảng tổng hợp: Tham số T_NO S TV R Giá trị hàm Q BI Khai báo INPUT INPUT INPUT INPUT OUTPUT OUTPUT OUTPUT Kiểu Dữ Liệu TIMER BOOL S5TIME BOOL S5TIME BOOL WORD Giải thích Địa chỉ timer Khởi động timer Giá trị timer Reset timer Nguồn thời gian dạng mã BCD Trạng thái ngõ ra Nguồn thời gian dạng mã nhị phân  Khi các giá trị thông số được chứa chung. Bảng dưới cho thấy sự hoạt động của hàm thời gian.trạng thái tín hiệu 1 tại ngõ vào R không có tác động nếu timer không chạy trạng thái tín Chỉ cần thời gian đang chạy.3.1. nếu timer bị huỷ bỏ thì sự yêu cầu trạng thái thín hiệu tín hiệu ngõ ra là 0 Đọc trạng Đọc thời gian hiện thời của timer có thể được yêu cầu tại ngõ ra BI và sử dụng thái hiện gài trị hàm S_PULSE thời ngõ ra của timer Nhóm I – TĐ04 Trang 67 .   cả hai Thông số PV ( initialization value ) và s (set) có thể được bỏ qua Giá trị cuối cùng trong định dạng S5TIME luôn luôn là giá trị hàm. Khi trạng thái của tín hiệu ngõ vào (S) thay timer đổi từ 0 lên 1. Hoạt động Giải thích Khởi động Xung kích hoạt khởi động thời gian. Nó có nghĩa là một kết thúc sớm của thời gian chạy. bạn có thể xác định biến INT huặc thông số gõ vào của của dữ liệu thời gian trong chương trình gọi. Khi timer đang chạy với sự thay đổi này. tín hiệu thay đổi luôn luôn được yêu cầu Định thời Thời gian chạy được dùng từ ngõ vào TV cho đến khi thời gian của chương gian chạy trình kết thúc và ngõ vào S=1 Huỷ bỏ thời Nếu ngõ vào S thay đổi từ 1 đến 0 trước khi timer kết thúc. timer sẽ bị dừng gian chạy Reset Thời gian được reset khi ngõ vào reset thay đổi từ 0 lên 1. thì timer sẽ được đặt về 0. T10). Thay cho thời gian cố định (ví dụ. Thông số xác định thời gian T_NO phải được cung cấp khi hàm được gọi. S_PULSE Thời gian lớn nhất cho ngõ vào còn lại set lên 1 giống như giá trị thời gian chương trình.3 Cách Dùng Hàm Timer: 6.1. Nếu trong quá trình chạy tín hiệu ở trạng thái 0 tại ngõ vào. để timer hoạt động. thì không cần phải xác định những giá trị đó trong một tình huống nhất định. Các quy tắc sau nên được chú ý khi gán một thông số. thì một trạng thái tín hiệu 1 tại ngõ ra Q tạo ra kết hiệu ngõ ra quả là 1.1. cả việc đọc thời gian và thời gian đặt đều bị reset về 0. 6.

3.Tìm hiểu ngôn ngữ SCL-S7-300 6. Khởi động lại thời Nếu trạng thái tín hiệu tại ngõ vào S gian đếm Khởi tạo thời gian Bộ timer chạy với giá trị tại ngõ vao TV cho đến khi chương trình time kết chạy thúc Reset Thời gian được được reset khi ngõ vào reset thay đởi giá trị từ 0 đến 1 Trong khi timer dang chạy. điều này có nghĩa là ngõ ra được kích hoạt trong một thời gian trễ. thời gian này ngắn hơn thời gian chương lập trình khi chưa xuất hiện tại ngõ ra.tín hiệu ngõ vào vẫn còn hoạt động trong một khoảng thời gian.1. Để kích cho phép timer chạy. Phương thức hoạt động: bảng sau mô tả cách là việc của “ on delay timer Nhóm I – TĐ04 Trang 68 . Cách dùng hàm timer Bảng mô tả cách làm việc của thời gian xung kéo dài Hoạt động Giải thích Khởi động thời Sự hoạt động thời gian xung kéo dài (S_PEXT) bắt đầu thời gian khi mà gian trạng thái tín hiệu tại ngõ vào khởi động (S) tahy đổi từ 0 đến 1.2. Timer On_Delay Timer (S_ODT) Tín hiệu ngõ ra chỉ thay đổi từ 0 đến 1 khi mà thời gian dã lặp trình kết thúc và ngõ vào vẫn là 1. Với sự thay đổi này. S_PEXT Tín hiệu ngõ ra vẫn còn lại trạng thái 1 cho chương trình timer (t) bất chấp ngõ vào còn giá trị 1 bao lâu.3.1. sự khởi động xung chạy reset thời gian để mà xung ngõ ra được kéo dài đến. Trạng thái tín hiệu “1” tại cổng R sẽ không có ảnh hưởng gì khi timer không hoạt động Trạng thái truy Chỉ cần timer đang chạy mà trạng thái yêu cầu của tín hiệu là 1 tại ngõ ra Q vấn tạo ra kết quả 1 bât chất tín hiệu của ngõ vào Đọc thời gian truy Giá trị thời gian có thể được yêu cầu tại ngõ ra BI và dùng chức năng vấn S_PEXT 6.3. cả thời gian dọc và thời gian khởi tạo ban đầu được reset về 0. thì tín hiệu thay đổi luôn phải được yêu cầu.

Tìm hiểu ngôn ngữ SCL-S7-300 Sự hoạt động Khởi động timer Dừng timer Xác định thời gian chạy Reset Giải thích Bộ timer trễ thời on khởi động mọtt khoản thời gian đặc biệt khi mà trạng thái tín hiệu ở ngõ vào khởi động (s) thay đổi từ 0 sang 1. thay đổi 1 tín hiệu luôn pahỉ được yêu cầu Nếu mà trạng thái của ngõ vào S thay đổi từ 1 sang 0 khi mà timer đang chạy. Retentive On-Delay Timer (S_ODTS) Tín hiệu ra chỉ thay đổi từ 0 sang 1 khi thời gian lập trình đã kết thúc bất chấp độ dài ngõ vào vẫn còn ở trạng thái 1 Cách hoạt động Bảng sau cho thấy sự hoạt động của hàm “ retentive on delay timer” Hoạt động Nhóm I – TĐ04 giải thích Trang 69 .thì trạng thái yêu cầu có là 1 thì cũng luong luôn sinh ra 0 Truy vấn trạng tín hiệu sau khi “1” ở ngõ vào cũng cho kết quả là 0 khi timer không chạy và trạng thái tín hiệu tại ngõ vào s vẫn là 1 Giá trị thời gian có thể được yêu cầu tại ngõ ra BI và dùng chức năng S_ODT.1. Nếu mà timer đã dừng lại.4.3. Thời gian cũng bị reset khi r=1 được thiết lập cho dù timer không chạy Truy vấn trạng thái tín hiệu tiếp theo là 1 tại ngõ ra q sẽ sinh ra 1 khi mà thời gian kết thúc mà không có lỗi xẩy ra và ngã vào s vẫn được thiết lập “1”. Thì nó sẽ bị stop Bộ timer tiếp tục để chạy với giá trị tại ngõ ra TV miễn là trạng thái tín hiệu tại ngõ vào S=1 được đặt Thời gian được được reset khi ngõ vào reset r thay đổi giá trị từ 0 đến 1 Trong khi timer đang chạy. Để cho phép timer chạy. cả thời gian dọc và thời gian khởi tạo ban đầu được reset về 0. Trạng thái tín hiệu truy vấn Đọc thời gian yêu cầu 6. Với sự thay đổi này.

Tìm hiểu ngôn ngữ SCL-S7-300

Khởi động timer Khởi động lại timer Xác định thời gian chạy Reset Trạng thái tín hiệu truy vấn Đọc thời gian yêu cầu

Bộ timer trễ thời ON có nhớ khởi động một khoảng thời gian xác định khi mà trạng thái tín hiệu ở ngõ vào khởi động (S) thay đổi từ 0 sang 1. để cho phép timer chạy, thay đổi 1 tín hiệu luôn phải được yêu cầu Nếu mà trạng thái của ngõ vào S thay đổi từ 0 sang 1 khi mà timer đang chạy. Thì nó sẽ bị khởi động lại Bộ timer tiếp tục để chạy với giá trị tại ngõ vào TV ngay cả nếu tín hiệu ngõ vào S thay đổi đến 0 trước khi time kết thúc Nếu ngõ vào reset R thay đổi giá trị từ 0 đến, thì timer sẽ được reset bất chấp tín hiệu ngõ vào là gì Truy vấn trạng thái tín hiệu theo sau 1 tại ngõ ra Q sẽ tạo ra kết quả là 1 sau khi thời gian đã kết thúc bất chấp tín hiệu của ngõ vào là gì. Giá trị thời gian có thể được yêu cầu tại ngõ ra BI và dùng chức năng S_ODTS.

6.1.3.5. Off-Delay Timer (S_OFFDT)
Tín hiệu ngõ ra chỉ thay đổi từ 0 đến 1 tại ngõ vào khởi động S, thì 1 sẽ là trạng thái của ngõ ra Q. Nếu ngõ vào đó thay đổi từ 1 về 0, timer sẽ được kích hoạt.ngõ ra chỉ trả lại giá trị 0 sau khi thời gian kết thúc. ngõ ra sẽ được ngưng hoạt động như bên dưới.

Hoạt động của hàm: Bảng dưới đây giải thích cho việc hoạt động của hàm off delay timer Hoạt động Giải thích Khởi động timer Bộ timer trễ thời OFF khởi động một khoản thời gian xác định khi mà trạng thái tín hiệu ở ngõ vào khởi động (S) thay đổi từ 1 sang 0. Để cho phép timer chạy, thay đổi 1 tín hiệu luôn pahỉ được yêu cầu Khởi động lại Timer này đựo khởi động lại khi mà ngõ vào S thay đổi từ 1 sang 0 timer Xác định thời Thời gian chạy được nhập vào từ ngõ vào TV gian chạy
Nhóm I – TĐ04 Trang 70

Tìm hiểu ngôn ngữ SCL-S7-300

Nếu ngõ vào R thay đổi từ 0 sang 1 khi mà timer đang chạy thì thời gian sẽ được reset Trạng thái ngõ Truy vấn trạng thái ngõ vào theo sau là 1 tại ngõ ra sẽ sinh ra là 1 nếu trạn vào truy vấn thái tín hiệu tại ngõ vào S là 1 được thiết lập huặc timer đang chạy Đọc thời gian Giá trị thời gian có thể bị yêu cầu tại ngõ ra BI và được sử dụng chức năng truy vấn S_OFFDT Reset

6.1.4. Ví Dụ Về Các Hàm Của Timer FUNCTION_BLOCK STD_TIMER VAR BCD : ARRAY [1..5] OF S5TIME := 5(T#0s); //BCD_value Bin : ARRAY [1..5] OF WORD := 5(16#0000); //Binary_value TV : ARRAY [1..5] OF S5TIME := T#1s, T#2s, T#3s, T#4s, T#5s; //Timer value Start : ARRAY [1..5] OF BOOL := 5(FALSE); //Start timer Reset : ARRAY [1..5] OF BOOL := 5(FALSE); //Reset timer Status : ARRAY [1..5] OF BOOL := 5(FALSE); //Timer status Pulse : TP; //SFB 3 IEC pulse Start1 : BOOL := FALSE; Status1 : BOOL := FALSE; Duration1 : TIME := T#1s; Tvalue1 : TIME := T#0s;

On : TON; //SFB 4 IEC on delay Start2 : BOOL := FALSE; Status2 : BOOL := FALSE; Duration2 : TIME := T#1s; Tvalue2 : TIME := T#0s; Off : TOF; //SFB 5 IEC off delay Start3 : BOOL := FALSE; Status3 : BOOL := FALSE; Duration3 : TIME := T#1s; Tvalue3 : TIME := T#0s; END_VAR BEGIN //************************************************************************

Nhóm I – TĐ04

Trang 71

Tìm hiểu ngôn ngữ SCL-S7-300

BCD[1] := S_PULSE( T_NO := "Timer1", S := Start[1], TV := TV[1], R := Reset[1], BI := Bin[1], Q := Status[1]); //Starting a timer function as an extended pulse BCD[2] := S_PEXT( T_NO := "Timer2", S := Start[2], TV := TV[2], R := Reset[2], BI := Bin[2], Q := Status[2]); //Starting a timer function as an on delay BCD[3] := S_ODT( T_NO := "Timer3", S := Start[3], TV := TV[3], R := Reset[3], BI := Bin[3], Q := Status[3]); //Starting a timer function as a latching on delay BCD[4] := S_ODTS( T_NO := "Timer4", S := Start[4], TV := TV[4], R := Reset[4], BI := Bin[4], Q := Status[4]); //Starting a timer function as an on delay BCD[5] := S_OFFDT( T_NO := "Timer5", S := Start[5], TV := TV[5], R := Reset[5], BI := Bin[5], Q := Status[5]); //************************************************************************
Nhóm I – TĐ04 Trang 72

Status2 := On. Gọi giá trị tuyệt đối hay dạng động Trong việc gọi hàm. Tvalue3 := Off.Q. Đơn giản bạn chỉ cần cung cấp cho chúng các thông số yêu cầu.Q. các số khác nhau trong mỗi lần gọi. Cái ưu điểm của cách này là khi gọi hàm có thể linh động bởi việc gán biến số huặc hằng số. bạn cũng có thể chỉ rõ một biến hay một hằng số dạng số nguyên. bạn có thể định rõ một biến của một bộ đếm . Như những giá trị có thể. PT := Duration2). Giá trị của hàm trả về khi gọi khối là một giá trị đếm (BCD) hoặc trong kiểu WORD.Q. tuy nhiên không được dài hơn giá trị thực. Tvalue1 := Pulse. Status3 := Off. Tvalue2 := On. Hàm này có thể được dùng ở trong một địa chỉ được biểu diễn hay một dạng hàm giá trị thích hợp với một địa chỉ khác. STEP 7 cung cấp 3 hàm đếm như sau: S_CU S_CD S_CUD Đếm lên Đếm xuống Đếm lên xuống 6. //************************************************************************E ND_FUNCTION_BLOCK 6. Off ( //Start off delay IN := Start3.1 Gọi Hàm Đếm Hàm đếm được gọi giống như các hàm khác. PT := Duration3).Tìm hiểu ngôn ngữ SCL-S7-300 Pulse ( //Start pulse timer IN := Start1.ET.2. bạn có thể đưa vào một giá trị tuyệt đối như một số đếm ( ví dụ C_NO:=C10 ).ET. Để làm được việc gọ một hàm động. Status1 := Pulse. PT := Duration1). On ( //Start on delay IN := Start2. Để thay thế cho số đếm dạngủtị tuyệ đối. Nhóm I – TĐ04 Trang 73 . Bạn có thể sử dụng các bộ đếm trong chương trình SLC mà không cần khai báo chúng trước.2 Bộ đếm ( Counter) STEP 7 cung cấp một chuỗi chuẩn các hàm có chức năng đếm.ET.

2 Thông Số Của Bộ Đếm. END_VAR ..0. CU:=I0. Ví dụ gọi hàm đếm động FUNCTION_BLOCK COUNT VAR_INPUT Count: ARRAY [1. //Example of a dynamic call using a variable of the //COUNTER data type: FUNCTION_BLOCK COUNTER VAR_INPUT MYCounter:COUNTER. CurrVal:=S_CD (C_NO:=MyCounter. PV : WORD. Bảng bên dưới cung cấp cho bạn cái nhìn tổng quan về các thông số của chức năng đếm. END_STRUCT. PV:= Count[I]..)..Tìm hiểu ngôn ngữ SCL-S7-300 Ví dụ: // Gọi Hàm đếm cố định: S_CUD (C_NO:=C12. END_VAR . Tên ngõ Khai báo dạng data Mô tả C_NO INPUT COUNTER Số bộ đếm.2.. FOR I:= 1 TO 4 DO S_CD(C_NO:=Count[I]. END_FOR.3. S:=I0.4] of STRUCT C_NO: INT. . S:=true. .2 & I0. khu vực này phụ thuộc vào CPU CD INPUT BOOL Ngõ vào đếm xuống CD INPUT BOOL Ngõ vào đếm lên S INPUT BOOL Ngõ vào thiết lập trước cảu bộ đếm PV INPUT WORD Giá trị được cải đặt 0 đến 999 để đếm Nhóm I – TĐ04 Trang 74 . . R:=FALSE. 6..C_NO. PV:=120.1. Q:=actFlag). ..PV). CV:=binVal. CD:=I0.

gới hạn từ 12 đến 15 thi không được sử dụng.Q:=actFlag).1. PV:=100. Giá trị đếm là dữ liệu dạng Word chúng giới hạn từ 0 đến 11 thi chắc bao hàm cả giá trị đếm ở dạng BCD. S:=M0. S:=I0. CV:=binVal.0. bạn cũng có thể định rõ một giá trị huặc một hằng số với định dạng INT huặc thông số ngõ vào của bộ đếm trong khi gọi nó.3. CV:=binVal.    Ví dụ: FUNCTION_BLOCK FB1 VAR CurrVal. CD:=TRUE. Giá trị kết quả trong định dạng BCD luôn luôn là một giá trị hàm. CV:=binVal. Nhóm I – TĐ04 Trang 75 .Tìm hiểu ngôn ngữ SCL-S7-300 R Giá trị hàm Q CV INPUT OUTPUT OUTPUT OUTPUT BOOL WORD BOOL WORD Reset Mã BCD Ngõ ra trạng thái của bộ đếm Ngõ ra đếm nhị phân Quy luật: Khi giá trị các thông số ( ví dụ: CD:=I0. CU:=M0. CU:=I0.2 &I0.Q:=actFlag). Khi bạn đặt giá trị đếm. Thang giá trị là từ 0 đến 999. CurrVal :=S_CD (C_NO: C10. END_VAR BEGIN CurrVal :=S_CD (C_NO: C10.Q:=actFlag). PV:=120. Định dạng: hình bên dưới mô tả cấu trúc của giá trị bộ đếm. PV:=100. R:=FALSE. CD:=I0.0. actFlag: bool.0 ) được chứa chung. R:=TRUE. S:=FALSE.2. CurrVal :=S_CU (C_NO: C11.Q:=actFlag). 6. R:=M0. Giá trị PV (initialization value) và S (set) có thể được bỏ qua.2. thì không cần thiết phải định rõ chúng trong một vị trí cố định.3 Ngõ Vào Và Đánh Giá Giá Trị Bộ Đếm Để đưa vào một giá trị khởi tạo huặc để đánh giá kết quả của hàm bạn yêu cầu mô tả bên trong của giá trị đếm. Thay vì các số có giá trị tuyệt đối. giá trị mà bạn đã định dạng phải được viết cho bộ đếm. PV:=16#110. S:=TRUE. count up (S_CU) và count down (S_CD). binVal: word. END_FUNCTION_BLOCK Huặc giá trị đếm lên CU (count up) huặc giá trị đếm xuống CD (count down) phải được cung cấp. Các quy tắc chung nên được xem xét kỹ khi mà cung cấp giá trị là nhưng thông số:  Thông số định dạng cho bộ đếm C_NO phải được cung cấp khi mà hàm đó được gọi. CV:=binVal. bạn có thể thay đổi giá trị đếm bên trong thang giá trị này phù hợp với sự hoạt động của bộ đếm (S_CUD). CD:=FALSE.1. CurrVal :=S_CUD(C_NO: C12. R:=FALSE.

4. giả định giá trị này tương ứng định dạng BCD hợp lệ Định dạng BCD (ngõ vào như một hằng số dạng hex) :ví dụ 16#127 Khi kết qủa một hàm (dạng Word): địng dạng BCD. Khi thông số ngõ ra CV (type Word): trong mã binary 6. Hoạt động Đếm xuống Đặt bộ đếm giải thích Giá trị đếm được giảm xuống 1 nếu tín hiệu thay đổi của ngõ vào từ 0 lên 1 và giá trị đếm lớn hơn 0 Khi trạng thái của tín hiệu tại ngõ vào S thay đổi từ 0 sang 1.2.1 Đếm Lên Count Up (S_CU) Với hàm đếm lên (S_CU) bạn chỉ có thể đếm tăng. một tín hiệu được thay đổi luôn luôn được yêu cầu đặt bộ đếm Reset Bộ đếm được reset khi ngõ vào R=1 được set.2.Tìm hiểu ngôn ngữ SCL-S7-300 Ngõ vào:   Sự đánh giá:   Dạng thập phân như một số interger: ví dụ 295. ) bạn chỉ có thể đếm xuống. bộ đếm được đặt với giá trị của ngõ vào PV.4 Mô tả các dạng bộ đếm 6.4. bảng sau mô tả cách thực hiện của bộ đếm. một tín hiệu được thay đổi luôn luôn được yêu cầu đặt bộ Trang 76 Nhóm I – TĐ04 .2 Đếm Xuống Count Down (S_CD) Với bộ đếm xuống (S_CD). bộ đếm được đặt với giá trị của ngõ vào PV. Hoạt động Giải thích đếm lên Giá trị đếm được tăng lên 1 nếu tín hiệu thay đổi câur ngõ vào từ 0 lên 1 và giá trị đếm nhỏ hơn 999 đặt bộ đếm Khi trạng thái của tín hiệu tại ngõ vào S thay đổi từ 0 sang 1.2. Và ngõ ra trả về 0 nếu giá trị bằng 0 6. Khi reset thì giá trị của bộ đếm được đặt về 0 Yêu cầu bộ mộtt trạng thái tín hiệu được yêu cầu tại ngõ ra Q được trả về 1 nếu giá trị đếm lơn đếm hơn 0. bảng sau mô tả cách thực hiện của bộ đếm.

//SFB 0 IEC up counter Up4 : BOOL := FALSE.2. Set2. nếu xung đếm lên và xuống đều được kích hoạt đồng thời thì. BCD2. Reset4 : BOOL := FALSE.4. Zvalue4 : INT := 0. //BCD_value Bin1.5 Ví Dụ Về Hàm Bộ Đếm FUNCTION_BLOCK STD_COUNTER TITLE = 'Call examples for counter functions' VAR BCD1. Bin3 : WORD. Bin2. Status2. Và ngõ ra trả về 0 nếu giá trị bằng 0 6. Nhóm I – TĐ04 Trang 77 . bảng sau mô tả hoạt động của bộ đếm: Hoạt Giải thích động Đếm lên Giá trị đếm được tăng lên 1 nếu tín hiệu thay đổi câur ngõ vào từ 0 lên 1 và giá trị đếm nhỏ hơn 999 Đếm Giá trị đếm được giảm xuống 1 nếu tín hiệu thay đổi của ngõ vào từ 0 lên 1 và giá xuống trị đếm lớn hơn 0 Đặt bộ Khi trạng thái của tín hiệu tại ngõ vào S thay đổi từ 0 sang 1. //Binary_value PV1. Status3 : BOOL. //Counter status Up : CTU. cả hai đều được hoạt động. Khi reset thì giá trị của bộ đếm được đặt về 0 Trạng Một trạng thái tín hiệu được yêu cầu tại ngõ ra Q được trả về 1 nếu giá trị đếm lơn thái ngõ hơn 0. PV2. Down2. Reset3 : BOOL. Svalue4 : INT := 0. Reset2. Set3 : BOOL. //Counter value Set1. Down3 : BOOL.2. Và ngõ ra trả về 0 nếu giá trị bằng 0 ra 6. //Reset counter Status1. Giá trị đếm ghi lại và và không thay đổi. //Count up Down1. Status4 : BOOL := FALSE.3 Bộ Đếm Lên Xuống Count Up/Down (S_CUD) Với bộ đếm lên xuống (S_CUD) bạn có thể hoạt động cả hai trường hợp đó là đếm lên và xuống. Up3 : BOOL. bộ đếm được đặt với đếm giá trị của ngõ vào PV. BCD3 : WORD. Khi reset thì giá trị của bộ đếm được đặt về 0 Yêu cầu bộ Một trạng thái tín hiệu được yêu cầu tại ngõ ra Q được trả về 1 nếu giá trị đếm lớn đếm hơn 0. PV3 : WORD. một tín hiệu được thay đổi luôn luôn được yêu cầu đặt bộ đếm Reset Bộ đếm được reset khi ngõ vào R=1 được set. //Count down Reset1. //Set counter Up1.Tìm hiểu ngôn ngữ SCL-S7-300 đếm Reset Bộ đếm được reset khi ngõ vào R=1 được set. Up2.

Q := Status2). //SFB 2 IEC up-down counter Up6 : BOOL := FALSE. Status5 : BOOL := FALSE. S := Set2. CD := Up2. CV := bin2. ZStatus6 : BOOL := FALSE. //Down counter BCD2 := S_CD( C_NO := "Counter2". VStatus6 : BOOL := FALSE. //SFB 1 IEC down counter Down5 : BOOL := FALSE. Zvalue6 : INT := 0. PV := PV1. END_VAR BEGIN //***************************************************************************** //Up counter BCD1 := S_CU( C_NO := "Counter1". Set6 : BOOL := FALSE. Svalue6 : INT := 0. PV := PV2. Set5 : BOOL := FALSE. Svalue5 : INT := 0.Tìm hiểu ngôn ngữ SCL-S7-300 Down : CTD. Reset6 : BOOL := FALSE. R := Reset1. Zvalue5 : INT := 0. CD := Down3. Q := Status1). Down6 : BOOL := FALSE. S := Set1. R := Reset2. CU := Up1. Nhóm I – TĐ04 Trang 78 . CU := Up3. UpDown : CTUD. //Up-down counter BCD3 := S_CUD( C_NO := "Counter3". CV := bin1.

Status5 := Down.CV. LOAD := Set5. CV := bin3.QD. PV := Svalue5). PV := PV3.QU. 6. ZStatus6 := UpDown. PV := Svalue6). CD := Down6. R := Reset4. Down ( //Down counter CD := Down5. Zvalue6 := UpDown. VStatus6 := UpDown. //***************************************************************************** END_FUNCTION_BLOCK 6. R := Reset6.Q.CV. //***************************************************************************** Up ( //Up counter CU := Up4. R := Reset3. Zvalue4 := Up.3 Các Hàm Toán Học. Status4 := Up.3. LOAD := Set6.Tìm hiểu ngôn ngữ SCL-S7-300 S := Set3. Zvalue5 := Down. Q := Status3). UpDown ( //Up-down counter CU := Up6.1 Các hàm lượng giác: SIN COS TAN : Hàm Sin : Hàm cos : Hàm Tag Các Hàm ACR ASIN : Hàm sin ngược ACOS : Hàm Cos Ngược ATAN : Hàm tan ngược Nhóm I – TĐ04 Trang 79 .CV.Q. PV := Svalue4).

real12 : REAL := 0. Current : REAL := 1.3. real11 : REAL := 0. EXP EXPD LN LOG : Hàm mũ hằng số : Hàm e mũ thập phân : Loga Ln : Logarit Kiểu dữ liệu để tính toán là INT. 6. Chú ý rằng các thông số ngõ vào của các phép tính được chuyển đổi bên trong các biến thực. real7 : REAL := 0. PHI : REAL := 0.5. real14 : REAL := 0.3 Một số hàm khác: ABS : Trị tuyệt đối SQR : Bình Phương SQRP : căn bậc hai Đây là những hàm cho việc tính toán các giá trị tuyệt đối. real3 : REAL := 0. real4 : REAL := 0. Volume : REAL := 0. real5 : REAL := 0. DINT or REAL.2.3. real9 : REAL := 0. real2 : REAL := 0. DINT huặc REAL. bình phương huặc căn bậc hai cảu một giá trị.35. Kiểu dữ liệu ANY_NUM đại diện cho INT.Tìm hiểu ngôn ngữ SCL-S7-300 Dữ liệu để phù hợp cho việc tính toán là INT. Voltage : REAL := 230. Chú ý rằng thông số ngõ vào INT huặc DINT được chuyển đổi bên trong sang giá trị kiểu số thực nếu giá trị của hàm là số thực. real6 : REAL := 0. 6. FUNCTION_BLOCK STD_MATH VAR real1 : REAL := 0. real10 : REAL := 0. Các hàm Logarit Kiểu dữ liệu để tính toán là INT. DINT or REAL. real8 : REAL := 0. Nhóm I – TĐ04 Trang 80 . real13 : REAL := 0. DINT or REAL. Reactive_power: REAL := 0.

141593. //Exponentiation to base e real12 := EXPD(real1). sự chuyển đổi kiểu dữ liệu có thể thực hiện được trong chương trình SCL như bên dưới đây: Chuyển đổi dữ liệu kiểu ẩn ngầm Các kiểu dữ liệu được tập hợp lại thành nhiều loại. Level : REAL := 120. c : REAL := 0. //Generate square real4 := SQRT(real1). //Exponentiation to base 10 real13 := LN(real1). Volume := SQR(Radius) * Level * PI. //Tangent real8 := ASIN(real1). //Cosine real7 := TAN(real1). //Arc tangent real11 := EXP(real1). thì bạn phải chắc chắn hai kiểu dữ liệu đó tương thích với nhau.Tìm hiểu ngôn ngữ SCL-S7-300 Radius : REAL := 47. PI : REAL := 3.4 Các Hàm Chuyển Đổi: Nếu bạn sử dụng 2 địa chỉ trong một phép toán logic. //Arc cosine real10 := ATAN(real1). c := SQRT(SQR(a) + SQR(b)). //Sine real6 := COS(real1). nếu nhũng địa chỉ dó có kiểu dữ liệu khác nhau thì một cái cần phải thay đổi. END_VAR BEGIN //*************************************************************************** real2 := ABS(real1). chức năng này được sử dụng khi trình dịch gom lại trong Nhóm I – TĐ04 Trang 81  . //Generate square root real5 := SIN(real1). //Absolute value real3 := SQR(real1). //Arc sine real9 := ACOS(real1). //******************************************************************** END_FUNCTION_BLOCK 6. nếu những địa chỉ đó dơi vào trong lớp giống nhau. SCL tạo ra một sự chuyển đội kiểu dữ liệu ẩn. //Decimal logarithm //******************************************************************** Reactive_power:= Voltage * Current * sin(PHI). a : REAL := 5. //Natural logarithm real14 := LOG(real1). b : REAL := 12.

CHAR_TO_STRING Y chuyển đổi một chuỗi rồi ghi vào một ký tự giống 6.2 hàm chuẩn chuyển đổi kiểu dữ liệu hiện Bạn sẽ tìm được các mô tả chung của cảu việc gọi hàm trong “ calling funtions”.4.1. Nhóm I – TĐ04 Trang 82 . ví dụ INTEGER. Nhớ rằng một sự chuyển đổi kiểu dữ liệu trong lớp ANY_BIT tạo ra những bít lớn là bằng 0 Hàm chuyển đổi lớp A Bảng dưới đây biểu diễn các chức năng chuyển đổi dữ liệu của nhóm A. trình dịch tạo ra một sự chuyển đổi dữ liệu ẩn thứ tự như bản bên dưới. để được phép chuyển đổi dữ liệu kiểu hiện SCL cung cấp nhiều nhóm hàm chuẩn trong các lớp bên dưới . Giá trị được giũ như cũ. Giá trị có thể thay đổi ( liên quan đến độ chính xác cảu số thực INT_TO_DINT N Các ký tự trọng số cao của giá trị hàm được chèn vào bằng giá trị 16#FFFF cho một thông số ngõ vào â. Nhớ rằng các điểm bên dưới khi gọi hàm chuyển đổi:  Thông số ngõ vào: Mỗi hàm trong khi chuyển đổi chỉ có chính xác một thông số ngõ vào với tên là IN. Chuyển đổi dạng ẩn Trong lớp dữ liệu đã định nghĩa ở trong bảng .Tìm hiểu ngôn ngữ SCL-S7-300  chuyển đổi dữ liệu kiểu hiện Nếu các địa chỉ không thuộc một lớp giống nhau thì bạn phải khởi động chức năng chuyển đổi.Hàm chuyển đổi dạng lớp B Hàm làm tròn và cắt bớt 6.4. Tên hàm OK Quy tắc chuyển đổi BOOL_TO_BYTE N Filled with leading zeros BOOL_TO_DWORD N Filled with leading zeros BOOL_TO_WORD N Filled with leading zeros BYTE_TO_DWORD N Filled with leading zeros BYTE_TO_WORD N Filled with leading zeros WORD_TO_DWORD N Filled with leading zeros DINT_TO_REAL N chuyển sang số thực tuân theo tiêu chuẩn IEEE. Khi nó có một hàm chỉ có một thông số. huặc nó được đưa vào các số 0. điều này không cần thiết lập. định dạng chung của 2 địa chỉ luôn luôn là một kiểu dữ liệu nhỏ nhất với một giới hạn nó phù hợp với định dạng của cả hai địa chỉ của BYTE và INTEGER. Giá trị vẫn như cũ INT_TO_REAL N chuyến đổi số thực theo tiêu chuẩn IEEE.

Tên của hàm Các kiểu dữ liệu của thông số ngõ vào và gía trị hàm có thể được nhận dạng rõ dàng trong tên hàm trong lớp A và B. hàm BOOL_TO_BYTE. Trong những tình huóng này nơi mà kết quả được định nghĩa. Giá trị cảu thông số ngõ vào được biên YY dịch thành dạng dữ liệu dạng INT. NN Nhóm I – TĐ04 Trang 83 . Các hàm này phải được xác định rõ dàng. Bảng chuyển đổi lớp B ( part 1) Tên hàm Quy tắc chuyển đổi OOK BYTE_TO_BOOL Copy bít bên phía phải nhất NN BYTE_TO_CHAR Copy chuỗi bit NN CHAR_TO_BYTE Copy chuỗi bit NN CHAR_TO_INT chuỗi bit trong thông số ngõ vào được đưa vào trong byte trong NN số thấpcủa giá trị hàm. Các byte trọng số cao được gán bằng các số 0 DATE_TO_DINT Copy chuỗi bit YY DINT_TO_DATE Coppy chuỗi bit N DINT_TO_DWORD Coppy chuỗi bit YY DINT_TO_INT Coppy bit để đánh dấu. biến OK sẽ bị set về FALSE REAL_TO_DWORD Coppy chuỗi bit YY REAL_TO_INT Làm tròn theo chuẩn IEEE REAL sang INT.ví dụ. kiểu dữ liệu của thông số ngõ vào là BOOL và kiểu dữ liệu của giá trị hàm BYTE. DINT_TO_TIME Coppy chuỗi bit YN DINT_TO_TOD Coppy chuỗi bit YY DWORD_TO_BOOL Coppy bit trọng số thấp nhất YY DWORD_TO_BYTE Coppy 8 bít trọng số thấp nhất YY DWORD_TO_DINT Coppy chuỗi bit NN DWORD_TO_REAL Coppy chuỗi bit NN DWORD_TO_WORD Coppy 16 bit trong số thấp YY INT_TO_CHAR Coppy chuỗi bit YY INT_TO_WORD Coppy chuỗi bit NN REAL_TO_DINT Làm tròn theo chuẩn IEEE REAL sang DINT. hàm chuyển đổi lớp B Bảng dưới cho thấy hàm chuyển đổi dữ liệu cảu lớp B.Tìm hiểu ngôn ngữ SCL-S7-300   Giá trị hàm Kết quả luôn là giá trị hàm. nếu giá trị thấp hơn -32768 huặc lớn hơn 32767. Bạn có thể kiểm tra cho vị trí này bởi việc liên quan với một sự kiểm tra giới hạn huặc bạn thể có một hệ thống tạo ra sự kiểm tra bởi sự lựa chọn “ OK flag” cờ ưu tiên trong đến trinh dịch. biến OK được set FALSE. NN nếu giá trị nhỏ hơn -2147483648 huặc lớn hơn 2147483647. hệ thống set cờ OK để FALSE. kết quả này cũng có thể không được định nghĩa nếu kiểu đích đến không đủ rộng.

nếu STRING không có một độ dài của 1.Tìm hiểu ngôn ngữ SCL-S7-300 nếu giá trị nhỏ hơn -32768huặc lớn hơn 32767. biến OK sẽ bị set về FALSE STRING_TO_CHAR Coppy thông số đầu của chuổi. thì biến OK được set FALSE TIME_TO_DINT Coppy chuỗi bit TOD_TO_DINT Coppy chuỗi bit WORD_TO_BOOL Coppy bit trọng số thấp nhất WORD_TO_BYTE Coppy 8 bít trọng số thấp nhất WORD_TO_INT Coppy chuỗi bit WORD_TO_BLOCK_DB dạng bit của WORD được biên dịch như số của khối dữ liệu BLOCK_DB_TO_WORD Thông số của khối dữ liệu được biên dịch như dạng bít của WORD Bảng chuyển đổi lớp B ( part 2) Hàm BOOL_TO_INT BOOL_TO_DINT BYTE_TO_INT BYTE_TO_DINT WORD_TO_DINT DWORD_TO_INT INT_TO_BOOL INT_TO_BYTE INT_TO_DWORD DINT_TO_BOOL DINT_TO_BYTE DINT_TO_WORD INT_TO_STRING DINT_TO_STRING REAL_TO_STRING STRING_TO_INT STRING_TO_DINT STRING_TO_REAL BCD_TO_INT(x) WORD_BCD_TO_INT(x) BCD_TO_INT(x) DWORD_BCD_TO_INT(x) INT_TO_BCD(x) INT_TO_BCD_WORD(x) DINT_TO_BCD(x) DINT_TO_BCD_DWORD(x) YY YY YY NN NN YY YY NN Ok N N N N N Y Y Y N Y Y Y N N N N N N N N N N Y Y Y Y Quy tắc chuyển đổi WORD_TO_INT(BOOL_TO_WORD) DWORD_TO_DINT(BOOL_TO_DWORD) WORD_TO_INT (BYTE_TO_WORD) DWORD_TO_INT (BYTE_TO_DWORD) INT_TO_DINT(WORD_TO_INT) DINT_TO_INT(DWORD_TO_DINT) WORD_TO_BOOL(INT_TO_WORD) WORD_TO_BYTE(INT_TO_WORD) WORD_TO_DWORD(INT_TO_WORD) DWORD_TO_BOOL(DINT_TO_DWORD) DWORD_TO_BYTE(DINT_TO_DWORD) DWORD_TO_WORD(DINT_TO_DWORD) Like loadable IEC function FC 16 I_STRING Like loadable IEC function FC 5 DI_STRING Like loadable IEC function FC 30 R_STRING Like loadable IEC function FC 38 I_STRING Like loadable IEC function FC 37 STRING_DI Like loadable IEC function FC 39 STRING_R Giá trị trong tầm 999-9 999 999 kiểu WORD hoặc DWORD Giá trị trong tầm 999-9 999 999 kiểu INTD hoặc DINT Nhóm I – TĐ04 Trang 84 .

1.5 cũng trả về 2 sự cắt cắt bớt (hình thành số DINT) TRUNC REAL DINT 6. Tên hàm ROUND Kiểu thông số đầu vào REAL Kiểu giá trị hàm DINT Nhiệm vụ Làm tròn (hình thành một số DINT) việc tuân thủ DIN EN 61131-3.5 trả về 2và 2.kiểu đữ liệu ( cho các thông số ngõ vào và giá trị hàm) và nhiệm vụ cảu các hàm này.Tìm hiểu ngôn ngữ SCL-S7-300 6. bảng này biểu diễn những tên.6 Các Hàm số học: SEL : Hàm chọn lựa nhị phân MUX : Hàm chọn lựa bội số MAX : Hàm chọn lựa gia trị lớn nhất MIN : Hàm chọn lựa giá trị nhỏ nhất LIMIT : Bộ hạn chế Bảng mô tả: Hàm SEL Thông số G IN0 IN1 Giá trị hàm K IN0 IN1 INn INELSE Giá trị hàm IN1 IN2 INn Giá trị hàm IN1 IN2 Khai báo INPUT INPUT INPUT RETURN INPUT INPUT INPUT INPUT INPUT RETURN INPUT INPUT INPUT RETURN INPUT INPUT Dạng dữ liệu BOOL ANY ANY ANY INT ANY ANY ANY ANY ANY ANY_NUM ANY_NUM ANY_NUM ANY_NUM ANY_NUM ANY_NUM Mô tả MUX MAX MIN Nhóm I – TĐ04 Trang 85 . trong các WORD khác. hàm này luôn làm tròn giá trj INT kế.5 Hàm Làm Tròn Và Cắt Bớt Chúc năng làm tròn và cắt bớt các số cũng thuộc về chức năng chuyển đổi dữ liệu.

bảng dưới liệt kê các hàm và kiểu dữ liệu của các thông số ngõ vào và gái trị hàm.7 Hàm xử lý chuỗi bit: SHL SHR ROL ROR : Hàm dịch trái : Hàm dịch phải : Hàm xoay Trái : Hàm xoay phải Mọi hàm chuẩn về chuỗi bít đều có 2 định dạng thông số ngõ vào là IN và N. giải thích các thông số ngõ vào:  Thông số ngõ vào IN: bộ đệm bên trong sự hoạt động của chuỗi sẽ được hoạt động.  Thông số Ngõ vào N: số chu kỳ của đệm xoay vòng ROL và ROR huặc số lần vị trí đuợc dịch trong trường hợp của SHL và SHR Bảng sau thể hiện khả năng các hàm sử lý chuỗi Tên hàm ROL Ngõ vào IN Ngõ N BOOL INT BYTE INT WORD INT DWORD INT BOOL BYTE WORD DWORD BOOL BYTE WORD DWORD INT INT INT INT INT INT INT INT vào kiểu Giá trị hàm BOOL BYTE WORD DWORD BOOL BYTE WORD DWORD BOOL BYTE WORD DWORD nhiệm vụ Giá trị ở ngõ IN được được xoay trái bởi số lấn xác định chứa trong N ROR Giá trị ở ngõ IN được được xoay phải bởi số lấn xác định chứa trong N SHL Giá trị ở ngõ IN được được dịch trái với số lần bằng số ở ngõ và N khi dịch thì số 0 chèn vào chỗ bị dịch Nhóm I – TĐ04 Trang 86 . kiểu dữ liệu của thông số ngõ vào quyết định kiểu dữ liệu của giá trị hàm.Tìm hiểu ngôn ngữ SCL-S7-300 LIMIT Inn Giá trị hàm MN IN MX Giá trị hàm INPUT RETURN INPUT INPUT INPUT RETURN ANY_NUM ANY_NUM ANY_NUM ANY_NUM ANY_NUM ANY_NUM 6. kết quả luôn luôn là giá trị của hàm.

chuỗi này sẽ được đọc ra ngoài. nếu P có độ dài lớn hơn chuỗi đầu tiên thì chuỗi thứ 2 Nhóm I – TĐ04 Trang 87 .8. Trong tất cả các tình huống khác ( P nằm ngoài độ dài. nỗi có thể được đưa ra tại cờ OK. Ví dụ : LEN ( S:= ‘XYZ’) CONCAT Hàm CONCAT liên kết 2 biến STRING vào một STRING. một tại ngõ ra sẽ là chỗi rỗng và cờ OK sẽ được set về 0 Ví dụ LEFT ( IN:= ‘ valve’ . thì chuỗi hoàn thiện sẽ được trả lại. Các Hàm Xử Lý Chuỗi Kí Tự: LEN Hàm LEN trả lại độ dài hiện hành của chuỗi.N:=2). IN2:= ’ open’) LEFT huặc RIGHT Hàm LEFT và RIGHT (FC20 và FC32) trả lại ký tự đầu huặc cuối của cảu một chuỗi. thì chuỗi tứ 2 được chèn vào trước chuỗi 1. P và/ huặc L là một gái trị 0 hoặc nhỏ hơn 0). nếu kết qủa STRING dài hơn giá trị tại ngõ ra. kết quả chuỗi đó được giới hạn với một độ dài lớn nhất. P:= 3) INSERT Hàm INSERT (FC17) chèn chuỗi ký tự tại tại IN2 vào trong chuỗi tại IN1 sau đó nhận dạng thông số bởi B. nếu P =0. L:= 2. một chuỗi rỗng có độ dài là 0. nếu L là âm.Tìm hiểu ngôn ngữ SCL-S7-300 SHR BOOL BYTE WORD DWORD INT INT INT INT BOOL BYTE WORD DWORD Giá trị ở ngõ IN được được dịch phải với số lần bằng số ở ngõ và N khi dịch thì số 0 chèn vào chỗ bị dịch Ví dụ : MW14:= SHL(IN:=MW12. nếu L cao hơn độ dài của chuỗi. Ví dụ: CONCAT (IN1:= ’Valve’. Nếu tổng của L và (P-1) dài hơn độ dài hiện có cảu chuỗi thì một chuỗi sẽ được trả về để khởi động thông số chi dẫn bởi P và kéo dài đến cuối của giá trị ngõ vào. L là độ dài cảu chuỗi. nếu L=0. 6. P là vị trí của ký tự đầu được đọc ra ngoài. một chuỗi rỗng làm cho ngõ ra và cờ OK đều bị set về 0 ví dụ: MID (IN:= ’Temperature’. N:= shift_int). Hàm không xuất lỗi. L:=4) MID hàm MID (FC26) trả lại một phần của chuỗi. res_dword:= ROR( IN:= in_dword. một chuỗi rỗng được trả về.

một ngõ vào và cờ OK sẽ là 0. Ví dụ: DELETE (IN:= ’Temperature ok’. chuỗi thứ hai được đựoc nối thêm với chuỗi đầu. nếu L và P là âm. trong trường hợp này. Thì hàm không xuất hiện lỗi. nếu chuỗi thứ 2 không xuất hiện trong chuỗi đầu tiên. Ví dụ: REPLACE ((IN1:= ’Temperature’. chuỗi tính toán được giới hạn với cấu hình độ dài lớn nhất. Ví dụ: INSERT (IN1:= ’Participant arrived’. nếu mà L và/huặc P bằng 0 huặc nếu mà P lớn hơn độ dài của chuỗi ngõ vào. L:= 6. Và trả lại giá trị cho kết quả so sánh của chương trình so sánh.Tìm hiểu ngôn ngữ SCL-S7-300 được lối thêm với chuỗi thứ nhất.P:= 5) FIND Hàm FIND (FC11) trả lại vị trí của chuỗi thứ 2 (IN2) giữa chuỗi đầu(IN1). ngõ ra sẽ rỗng vào cờ OK được set về 0. P:= 11) DELETE Hàm DELETE (FC4) soá L ký tự tại một chuỗi bắt đầu xác định tị ký tự xác định P. chuỗi kết quả được giới hạn bởi cấu hình lớn nhất. IN2:=’Miller’:= 2. <>. Giá trị trả về có một trạng thái tín hiệu “1”nếu chuỗi cảu thông số S1 bằng huặc không bằng thông số của S2. nếu P =0 huặc 1. cờ OK=0 khi mà kết quả của chuỗi dài hơn giá trị xác định tại ngõ ra. cái sẩy ra đầu tiên của chuỗi là báo cáo lại.9 Hàm So Sánh Chuỗi: Bạn có thể so sánh chuỗi bằng các hàm so sánh trong trong SCL ==.<= và >=. nếu P < 0 thì có một chuỗi rrõng ở ngõ ra và cờ OK =0. số 0 được trả về. thông số được thế chỗ bắt đầu từ giá trị thông số ban đầu. trong trường hợp này. IN2:= ’ high’ L:= 6. nếu L và/ hoặc P nhỏ hơn 0. Nhóm I – TĐ04 Trang 88 . Ví dụ FIND (IN1:= ’Processingstation’. việc tìm bắt đầu từ phai trái . IN2:=’station’) 6. nếu P nằm bên ngoài của chuỗi đầu. nếu L =0. thì chuỗi ngõ vào được trả lại. P:= 5) REPLACE Hàm REPLACE (FC31) thay thế L ký tự của chuỗi đầu (IN1) bắt đầu tại ký tự xác định tại P với chuỗi thứ 2 (IN2). EQ_STRNG và NE_STRNG Hàm EQ_STRNG và NE_STNG so sánh nội dung cảu 2 biến trong trong định dạng chuỗi cho các đẳng thức huặc bất đăng thức. Hàm này không xuất hiện nỗi. thì chuỗi đàu tiên sẽ được trả về. nếu tổng của L và P lớn hơn độ dài giá trị ngõ vào. chuỗi này được xoá đến kết thúc.>. <. cờ OK cũng bằng 0 khi mà chuỗi kết quả dài hơn thông số của ngõ ra.

quyết định kết của chương trinh so sánh. Hàm này không xuất hiện lỗi. ‘a’ lớn hơn ‘A’).Tìm hiểu ngôn ngữ SCL-S7-300 GE_STRNG and LE_STRNG Hàm GE_STRNG và LE_STNG so sánh nội dung của 2 biến trong trong định dạng chuỗi để so sánh lớn hơn nhỏ hơn huặc bằng và vả lại kết quả của phép so sánh. Thông số đàu tiên để khác với. Thông số đàu tiên để khác với. Hàm này không xuất hiện lỗi. thông số được so sánh bắt đàu từ phía trái sử dụng mã ASCII ví dụ.nếu phần bên trái của chuỗi dài hơn được đồn nhấtvới chuỗi ngắn hơn thì chuỗi dài hơn coi như là lớn hơn. ‘a’ lớn hơn ‘A’). GT_STRNG and LT_STRNG Hàm GT_STRNG và LT_STNG so sánh giá trị của 2 biến trong trong định dạng chuỗi để so sánh lớn hơn nhỏ hơn huặc bằng và trả lại kết quả của phép so sánh. I_STRNG và STRNG_I Nhóm I – TĐ04 Trang 89 .nếu phần bên trái của chuỗi dài hơn được đồn nhất với chuỗi ngắn hơn thì chuỗi dài hơn coi như là lớn hơn. Giá trị trả về có một trạng thái tín hiệu “1”nếu chuỗi của thông số S1 lớn hơn ( nhỏ hơn) huặc bằng thông số của S2.thông số được so sánh bắt đàu từ phía trái sử dụng mã ASCII ví dụ. Giá trị trả về có một trạng thái tín hiệu “1”nếu chuỗi của thông số S1 lớn hơn ( nhỏ hơn) huặc bằng thông số của S2. quyết định kết của chương trinh so sánh.

thì không có sự chuyển đổi và cờ OK =0 DI_STRNG và STRNG_DI Hàm DI_STRNG (FC5) and STRNG_DI (FC37) chuyển đổi một biến trong định dạng DINT vào trong chuỗi ký tự huặc một chuỗi vào trong trong biến DINT. thì không được chuyển đổi và cờ OK =0. chuỗi này được đưa ra với 14 vị trí.nnnnnnnE±xx nếu biến đã được xác định tại giá trị trả về là qua ngắn huặc nếu không có số dấu chấm động hợp lý tại ngõ vào IN.Tìm hiểu ngôn ngữ SCL-S7-300 Hàm I_STRING(FC16) và STRNG_I (FC38) chuyển đổi một biến trong định dạng INT vào trong chuỗi ký tự huặc một chuỗi vào trong trong biến INT. thì không có sự chuyển đổi và cờ OK = 0 R_STRNG and STRNG_R Hàm R_STRNG (FC5) and STRNG_R (FC37) chuyển đổi một biến trong định dạng REAL vào trong chuỗi ký tự huặc một chuỗi vào trong trong biến REAL. ±v. chuỗi này được trình ra với ký hiệu đầu. chuỗi này được trình ra với ký hiệu đầu. Nếu sự xác lập biến này tại thông số trả về quá ngắn. Nếu sự xác lập biến này tại thông số trả về quá ngắn. Nhóm I – TĐ04 Trang 90 .

Statuses[5] := ’ maintained’. HW[4] := ’Weldingstation ’. HW[3] := ’Press ’. Statuses[4] := ’ repaired’. HW[5] := ’Burner ’.5] of string[12]. // 5 different statuses END_STRUCT BEGIN Index :=0. HW : array [1...5] of string[16]..10 ví dụ về sử lý chuỗi Đưa cùng lúc những dòng tin nhắn texts //Put message texts together controlled by the process and store //them //////////////////////////////////////////////////////////////// //The block contains the necessary message texts and the last 20 //messages generated //////////////////////////////////////////////////////////////// DATA_BLOCK Messagetexts STRUCT Index : int. textbuffer : array [0. HW[2] := ’Valve ’.Tìm hiểu ngôn ngữ SCL-S7-300 6. Statuses[3] := ’ temperature’. //5 different devices statuses : array [1. Statuses[1] := ’ problem’.19] of string[34]. END_DATA_BLOCK //////////////////////////////////////////////////////////////// Nhóm I – TĐ04 Trang 91 . Statuses[2] := ’ started’. HW[1] := ’Motor ’.

END_VAR VAR_TEMP text : string[34]. //////////////////////////////////////////////////////////////// FUNCTION Textgenerator : bool VAR_INPUT unit : int. else Textgenerator := false.0 and a message is entered once if a parameter //changes. i : int. if value <> 0 then text := concat( in1 := text. The message texts are stored in a //circulating buffer. end_case. Case unit of 1. //Index of the device text no : int. Textgenerator := true.HW[unit]. end_case. in2 := Messagetexts. //////////////////////////////////////////////////////////////// Nhóm I – TĐ04 Trang 92 ..Tìm hiểu ngôn ngữ SCL-S7-300 //The function puts message texts together and enters them in //the DB message texts. The next free index of the text buffer is //also in the DB message texts and is updated by the function. END_FUNCTION //////////////////////////////////////////////////////////////// //The function is called in the cyclic program at an edge change //in %M10.. Messagetexts.index := (i+1) mod 20. value : int. else Textgenerator := false. END_VAR //initialization of the temporary variables text := ’’. in2 := I_STRNG(value)). end_if. // ID no.statuses[status]). text := concat( in1 := text.index. i := Messagetexts. in2 := right(l:=2.in:=I_STRNG(no))).5 : text := concat( in1 := Messagetexts. Messagetexts. of the device status : int.5 : case status of 1.textbuffer[i] := text.

with %MW0 supplying a 1. Nhóm I – TĐ04 Trang 93 . error: BOOL.1:=M10.1 then error := Textgenerator (unit := word_to_int(%MW0). //////////////////////////////////////////////////////////////// //The following call enters the message "Motor 12 started" in //text buffer of DB message texts.0. STL). %IW2 //the 12 and %MW2 a 2.  Hàm hệ thống (SFCs) và khối hàm hệ thống (SFBs) có thể dùng trong hoạt động hệ thống của CPU. Tham số đi cùng với dấu ngoặc đơn. Bạn có thể gọi theo các cách sau:  Khối hàm và hàm được tạo trong SCL. end_if. Bạn có thể gọi FCs và FBs trong khối SCL. Cú pháp của chuyển đổi tham số Tham số được chuyển đổi phải được xác định trước trong việc gọi trong bảng tham số. end_organization_block 7) Cách gọi hàm và các khối hàm: 7. no := word_to_int(%IW2).Tìm hiểu ngôn ngữ SCL-S7-300 Organization_block Cycle Var_temp Opsy_ifx : array [0. value := 0). FBD. Nhiều tham số được tách riêng bằng dấu phẩy. Chúng đơn thuần là nơi cất giữ để chuyển đến khối khi được gọi. Tham số được đĩnh nghĩa trong giao tiếp của khối được gọi với khối làm việc.0 <> %M10. %M10.1 Gọi và chuyển đổi tham số Gọi FCs và FBs Để dễ dàng đọc và cập nhật chương trình sử dụng. status := word_to_int(%MW2). hàm của chương trình được chia thành nhiều khối nhỏ và được biểu diễn trong khối hàm (FBs) và hàm (FCs)..  Khối hàm và hàm được tạo trong các ngôn ngữ STEP 7 (LAD. End_var.20] of byte. *) //////////////////////////////////////////////////////////////// if %M10. Phương pháp cơ bản của chuyển đổi tham số Khi hàm và khối hàm được gọi. Tham số được chuyển đến khối được gọi là tham số thực. dữ liệu được trao đổi giữa việc gọi và khối được gọi.

7. Ở đây dữ liệu không được lưu trong DB đặc biệt mà trong khối dữ liệu tức thời khi gọi FB. Tham số được xác định trong việc gán giá trị.Tìm hiểu ngôn ngữ SCL-S7-300 Trong ví dụ của gọi hàm dưới đây. Cú pháp Phép gọi như 1 chia sẻ tức thời Nhóm I – TĐ04 Trang 94 . bạn có thể sử dụng cùng lúc khối dữ liệu chia sẻ và vùng nhớ cục bộ của khối dữ liệu đang hoạt động. 1 tham số vào/ra và 1 tham số ra được xác định. 1 tham số đầu vào. Gọi 1 FB như 1 vùng cục bộ khác với gọi như 1 vùng nhớ chia sẻ trong việc dữ liệu sẽ được chứa ở đâu. Việc gán giá trị bổ nhiệm 1 giá trị (tham số thực) đến tham số đã được định nghĩa trong phần diễn giải của khối được gọi (tham số chính).2 Gọi khối hàm Khi bạn gọi 1 khối hàm.

Khối dữ liệu tức thời (DB).2. Tham số ngõ ra không cần phải xác định khi FB được gọi. Bạn phải khai báo tên tượng trưng trong khối khai báo của khối gọi hàm. Cú pháp của 1 phép gán giá trị cho định nghĩa tham số FB Nhóm I – TĐ04 Trang 95 . Tham số cung cấp (tham số FB). 7. 1 phép gọi hàm cho chia sẻ tức thời có thể là độc lập hay tượng trưng.Tìm hiểu ngôn ngữ SCL-S7-300 Phép gọi được tạo nên bởi 1 lệnh gọi bằng cách sau:    Tên của khối hàm hay khối hàn hệ thống (FB hay SFB). 1 phép gọi cục bộ tức thời luôn là tượng trưng.1 Cung Cấp Tham Số FB Khi gọi 1 khối hàm (như là chia sẻ hay cục bộ) bạn phải cung cấp các tham số sau:  Tham số ngõ vào.  Tham số vào/ra. Phép gọi như 1 chia sẻ cục bộ Phép gọi được tạo nên bởi 1 lệnh gọi bằng cách sau:   Tên của khối cục bộ. Tham số cung cấp (tham số FB).

Nếu không có tham số thực nào được xác định thì giá trị của phép gọi cuối được giữ lại.     Gán Ngõ Vào (FB) Phép gán ngõ vào bổ nhiệm tham số thực cho tham số hình thức. bạn phải định nghĩa truy nhập trong 1 FB. IO_Par:=LENGTH). Phép gán cho tham số thực ngõ vào là tùy chọn. 7. Từ đó nó có thể được truy nhập bởi tất cả FBs.Tìm hiểu ngôn ngữ SCL-S7-300 Cú pháp của định nghĩa tham số FB là như nhau khi gọi hàm chia sẽ hay cục bộ tức thời. Chuyển đổi và xác định giá trị của tham số vào/ra sẽ được cập nhật. Các phép gán phải được tách riêng bằng dấu phẩy.DB7 (I_Par:=3.  Ghi nhớ các số liệu đặc biệt cho tham số của bất kỳ loại dữ liệu và loại dữ liệu con trỏ. Tham số ngõ ra có thể được đọc bằng việc gọi khối từ khối dữ liệu chia sẽ tức thời hay chia sẽ cục bộ. Các tham số thực có thể có được cho bên dưới: Nhóm I – TĐ04 Trang 96 .2. FB không thể thay đổi tham số thực. tham số vào/ra của 1 loại dự liệu đơn giản là 1 ngoại lệ trong qui tắc này. Giá trị tham số ngõ ra được chứa trong dữ liệu tức thời. Kết quả sau khi thực thi khối Sau khi thực thi khối:    Ví dụ 1 phép gọi và 1 phép gán cho 1 tham số vào và vào/ra biểu diễn như sau: FB31.2 Phép Tham số thực được chuyển đổi thì không thay đổi. Phép gán ngõ ra là không thể trong việc gọi FB. Để đọc 1 tham số ngõ ra. Các qui tắc sau được áp dụng khi cung cấp tham số: Phép gán có thể là bất kỳ lệnh nào. Loại dữ liệu của tham số thực và hình thức phải phù hợp.

tham số thực là tùy chọn. Giá trị ban đầu bị ghi đè.3 Phép Gán Vào/Ra (FB) Phép gán vào/ra được dùng để gán giá trị tham số thực đến tham số hình thức vào/ra. Giá trị mới của tham số lấy kết quả từ việc xử lý FB được ghi trở lại tham số thực. không có cập nhật giá trị cho tham số thực nếu tham số hình thức không được cung cấp giá trị khi khối được gọi. Khi nó được xử lý lần tiếp theo. Khi gán giá trị cho tham số thực như 1 tham số vào/ra có thể thay đổi khi FB đang được thực thi. nó phải là 1 biến.2. Nhóm I – TĐ04 Trang 97 .Tìm hiểu ngôn ngữ SCL-S7-300 Cú pháp 7. Nếu tham số vào/ra khai báo trong FB được gọi. Trong tham số thực của loại dữ liệu đơn giản. chúng phải được cung cấp giá trị khi khối được gọi lần đầu tiên. FB được gọi có thể thay đổi tham số vào/ra.

5 Ví Dụ Về Phép Gọi Như 1 Chia Sẻ Tức Thời 1 ví dụ về 1 khối hàm với vòng lặp FOR có thể thấy trong ví dụ dưới.2. tham số ngõ ra có thể được đọc từ khối chia sẻ tức thời hay khối chia sẻ cục bộ dùng phép gán giá trị. Khối hàm Phép gọi Để gọi FB. 7.4 Đọc Giá Trị Ngõ Ra (Phép Gọi FB) Sau khi khối được gọi được thực thi. Các ví dụ này cho thấy ký hiệu TEST được khai báo trong bảng ký hiệu FB17. Nó chỉ ra rằng VARIABLE1 được khai báo trong khối đang gọi như 1 biến REAL. bạn có thể chọn 1 trong các cách sau. Khối sau không thể dùng tham số thực gán cho tham số vào/ra của loại dữ liệu phức tạp:  Tham số vào/ra FB  Tham số FC 7.CONTROL.2.Tìm hiểu ngôn ngữ SCL-S7-300 Cú pháp Chú ý   Qui tắc đặc biệt áp dụng để cung cấp giá trị cho loại dữ liệu ANY và POINTER. Ví dụ RESULT:= DB10. Nhóm I – TĐ04 Trang 98 .

2.Tìm hiểu ngôn ngữ SCL-S7-300 Kết quả Sau khi khối được thực thi.6 Ví Dụ Về Phép Gọi Như 1 Cục Bộ Tức Thời 1 khối hàm với 1 vòng lặp FOR đơn giản có thể được lập trình như trong ví dụ phép gọi như 1 cục bộ tức thời cho thấy ký hiệu TEST được khai báo trong bảng ký hiệu FB17. Đọc 1 giá trị ngõ ra Hai ví dụ dưới cho thấy có 2 cách để đọc giá trị ngõ ra CONTROL 7. giá trị được tính toán cho tham số vào/ra IQ1 thì nằm trong VARIABLE1. Phép gọi Đọc 1 giá trị Tham số ngõ ta CONTROL có thể được đọc như sau: ngõ ra Nhóm I – TĐ04 Trang 99 . cho thấy VARIABLE1 được khai báo trong khối đang gọi như 1 biến REAL. FB này có thể được gọi như bên dưới.

Tìm hiểu ngôn ngữ SCL-S7-300 7. Giá Trị Trả Về (FC) 7. Vì thế. Hàm tính toán giá trị trả về có cùng tên hàm và trả về khi khối đang được gọi. nếu hàm được lập trình không cung cấp giá trị trả về hay câu lệnh trả về không được thực thi. điều đó có thể dẫn đến việc thực thi chương trình sai:   Có thể xuất hiện 1 hàm được lập trình trong SCL khi giá trị trả lại được cung cấp nhưng trả về câu lệnh không được thực thi.1 Trái ngược với khối hàm. Cú pháp Chú ý Nếu 1 hàm được gọi trong SCL và giá trị trả lại của nó không được cung cấp. hàm có được đánh dấu địa chỉ (ngoại trừ: hàm loại VOID). Có thể xuất hiện 1 hàm được lập trình trong STL/LAD/FBD. kết quả của hàm trả lại giá trị hay trả lại tham số ra và tham số vào/ra (tham số thực). Vì lý do đó.3 Gọi Hàm Bạn gọi 1 hàm bằng cách xác định tên hàm (FC. hàm DISTANCE được gọi và kết quả được gán cho biến LENGTH: Nhóm I – TĐ04 Trang 100 . Ví dụ trong phép gán giá trị sau. giá trị thay thế hàm gọi.3. Bạn có thể xác định tên hàm có trả lại giá trị bằng cách độc lập hay tượng trưng: Sau khi gọi hàm. SFC) và danh sách tham số. hàm cung cấp 1 kết quả được biết như là kết quả trả về.

Chú ý  Nếu hàm trả về giá trị ANY. Nếu có nhiều hơn 1 tham số ANY. số học hay so sánh hay  Như 1 tham số cho phép gọi hàm hay khối hàm tiếp theo. bạn phải cung cấp thêm tham số thực của lớp cùng loại (ví dụ INT.  Trong diễn giải logic. hàm không cần vùng nhớ để lưu trữ giá trị của tham số. Y1:= 2) . khi bạn gọi hàm.Tìm hiểu ngôn ngữ SCL-S7-300 LENGTH := DISTANCE (X1:= -3.3. Vì lý do đó.2 Tham số FC Trái với khối hàm. Ví dụ 1 phép gọi với 1 phép gán cho 1 tham số ngõ vào. Giá trị trả về có thể được sử dụng trong phần tiếp theo của FC hay FB:  Trong phép gán giá trị.3 Phép Gán Ngõ Vào (FC) Trang 101 Nhóm I – TĐ04 . Cú pháp Qui tắc Qui tắc khi  Phép gán có thể là bất kỳ lệnh nào  Loại dữ liệu của tham số hình thức và thực phải phù hợp. vào/ra và ngõ ra hình thức đuợc định nghĩa trong vùng khai báo của hàm phải được gán cho tham số thực. ít nhất 1 tham số ngõ vào hay vào/ra phải là loại ANY.3. Dữ liệu cục bộ chỉ lưu tạm thời khi hàm hoạt động. Kết quả trả về tự động sẽ thuộc loại dữ liệu lớn nhất trong lớp đó. tất cả tham số ngõ vào. DINT và REAL). Độ dài lớn nhất của loại dữ liệu STRING là 254 ký tự trở xuống. ngõ ra và vào/ra có thể xuất hiện như ví dụ sau: cung cấp tham số 7.  7.

tham số ngõ vào hình thức của FC được gọi là gán giá trị (tham số thực). 7. 1 phép gán vào/ra được dùng để khai báo 1 giá trị thực cho tham số vào/ra.4 Phép Gán Ngõ Ra Và Vào/Ra (FC) Trong phép gán ngõ ra. Nhóm I – TĐ04 Trang 102 .Tìm hiểu ngôn ngữ SCL-S7-300 Dùng phép gán ngõ vào. Ghi nhớ các số liệu đặc biệt của loại dữ liệu ANY và POINTER. Các tham số thực sau có thể được gán trong phép gán ngõ vào: Cú pháp Chú ý Với tham số ngõ vào hình thức của loại dữ liệu phức tạp. phép gán này là không tùy chọn với 1 phép gọi FC. bạn phải xác định biến của khối đang gọi trong giá trị ngõ ra được tính từ việc thực thi hàm được ghi vào.3. tham số vào/ra FB và tham số FC không cho phép là tham số thực. FC có thể hoạt động với tham số thực này nhưng không thay đổi chúng. Ngược lại trong phép gọi FB.

5 Ví Dụ Về Phép Gọi Hàm Hàm được gọi 1 hàm DISTANCE tính toán khoảng cách giữa 2 điểm (X1. Độ dài lớn nhất của loại dữ liệu STRING là 254 ký tự trở xuống. Tham số vào/ra FB của loại dữ liệu phức tạp.Tìm hiểu ngôn ngữ SCL-S7-300 Tham số thực trong phép gán ngõ vào và vào/ra phải là biến khi FC ghi giá trị vào tham số.Y2) trong cùng 1 mặt phẳng dùng hệ thống Đềcác của toạ độ có thể dùng cách sau. Nghĩa là chỉ có các biến mở rộng được gán trong phép gán ngõ ra và vào/ra. Nhóm I – TĐ04 Trang 103 . Ghi nhớ các số liệu đặc biệt của loại dữ liệu ANY và POINTER.3. Vì vậy tham số ngõ vào không thể được gán trong phép gán vào/ra (giá trị không được ghi). 7.Y1) và (X2. Cú pháp Chú ý Các tham số thực không được đi cùng với tham số ngõ ra và vào/ra hình thức:      Tham số ngõ vào FC/FB. Tham số vào/ra FC và tham số ngõ ra của loại dữ liệu phức tạp.

Khi EN là tham số ngõ vào. Nếu EN là TRUE thì khối được thực thi. Nhóm I – TĐ04 Trang 104 . bạn không thể thay thế EN trong khối.4. Ngược lại thì không được thực thi. Tuy nhiên nhớ rằng nó không cần khai báo trong vùng khai báo của khối hay hàm.4 Tham Số Xác Định Hoàn Toàn 7. EN thuộc loại dữ liệu kiểu BOOL và được chứa trong vùng nhớ khối dữ liệu tạm thời.1 Tham số ngõ vào EN Mọi khối hàm và mọi hàm đều có tham số xác định hoàn toàn EN. Cung cấp giá trị cho tham số EN là tùy chọn.Tìm hiểu ngôn ngữ SCL-S7-300 Gọi khối Ví dụ sau cho nhiều lựa chọn hơn cho nhiều cách sử dụng giá trị hàm: 7.

Ngay sau khi khối được gọi.4. Nhóm I – TĐ04 Trang 105 . giá trị hiện thời của cờ OK thì được điền vào trong ENO.Tìm hiểu ngôn ngữ SCL-S7-300 Chú ý Giá trị trả về của hàm thỉ không được xác định nếu nó không được gọi (EN: FALSE). Ví dụ 7. Khi khối được thực thi.2 Tham Số Ngõ Ra ENO Mọi khối hàm và mọi hàm đều có tham số xác định hoàn toàn ENO. ENO thuộc loại dữ liệu kiểu BOOL và được chứa trong vùng nhớ khối dữ liệu tạm thời. bạn có thể kiểm tra giá trị của ENO để xem các hoạt động trong khối chạy đúng hay có lỗi xảy ra không.

Tìm hiểu ngôn ngữ SCL-S7-300 Phần III: Chương trình Đèn Giao thông sử dụng ngôn ngữ SCL Mô tả: Vàng B Đèn giao thông có 2 chế độ hoạt động là Auto và Manual Trong chế độ bằng tay người vận hành cho các đèn Đỏ và Xanh 2 bên sáng tùy ý. Trong chế độ Auto thì thời gian sáng các đèn như sau: Nhóm I – TĐ04 Trang 106 Xanh B Đỏ B .

Giản đồ thời gian: Xanh A 16s Vàng A 4s Đỏ A Xanh B Vàng B 20s Đỏ B Giản Đồ Thời Gian Chương trình điều khiển: Mô tả chương trình: Bàn điều khiển gồm có 4 nút và 4 đèn báo trạng thái: Ban đầu vào chương trình có 2 nút chọn chức năng là Auto hoặc Manual. Nếu chọn chế độ nào thì đèn tương ứng của chế độ đó sáng. Nếu nhấn stop thì hệ thống sẽ dừng lại trong bất kì thời điểm nào.Tìm hiểu ngôn ngữ SCL-S7-300 Xanh: 16 giây Vàng : 4 giây Đỏ 20 giây. Sau khi chọn chế độ xong ta nhấn nút xác nhận Start thì hệ thống bắt đầu hoạt động. Nhóm I – TĐ04 Trang 107 .

END_VAR BEGIN : BOOL. // ngo ra END_FUNCTION_BLOCK Nhóm I – TĐ04 Trang 108 . // start timer TV := initialvalue . END_VAR VAR bcdvalue : S5TIME . Chương trình điều khiển viết bằng ngôn ngữ SCL như sau: FUNCTION_BLOCK FB1 VAR_INPUT mytime : TIMER . // hien thi thoi gian ma nhi phan Q := M0. initialvalue: S5TIME .Tìm hiểu ngôn ngữ SCL-S7-300 Trong chế độ tự động: Đèn Xanh sáng 16 giây Đèn Vàng sáng 4 giây Đèn đỏ sáng 20 giây Trong chế độ tay: Xanh A Và Đỏ B hoặc Xanh B hoặc Đỏ A có thời gian sáng do người điều chỉnh. // so hieu timer S := set . set END_VAR VAR_OUTPUT result : BOOL . // dat thoi gian la 4 giay bcdvalue := S_ODT ( T_NO := mytime . // Gia tri thoi gian delay = 4s R := false . // ngo reset ta bo qua BI := binvalue . // khai bao time 1 la 16 s // gan bien ten timer // bien khoi dong timer // chuong trinh chinh initialvalue:= T#4S . binvalue : WORD .1) .

binvalue : WORD . set END_VAR VAR_OUTPUT result : BOOL .Tìm hiểu ngôn ngữ SCL-S7-300 //-----------------------------------------FUNCTION_BLOCK FB2 VAR_INPUT mytime : TIMER .2) . // gan bien ten timer // bien khoi dong timer // Khai bao timer 2 la 4 s Nhóm I – TĐ04 Trang 109 . initialvalue: S5TIME . bcdvalue := S_ODT ( T_NO := mytime . // gan bien ten timer // Khai bao timer 3 la 16 s // dat thoi gian la 4 giay : BOOL. END_VAR BEGIN // chuong trinh chinh initialvalue:= T#4S . // hien thi thoi gian ma nhi phan Q := M0. END_VAR VAR bcdvalue : S5TIME . // ngo reset ta bo qua BI := binvalue . // ngo ra END_FUNCTION_BLOCK //-----------------------------------------FUNCTION_BLOCK FB3 VAR_INPUT mytime : TIMER . // so hieu timer S := set . // start timer TV := initialvalue . // Gia tri thoi gian delay = 4s R := false .

// ngo reset ta bo qua BI := binvalue . // bien khoi dong timer VAR_OUTPUT result : BOOL . // ngo ra END_FUNCTION_BLOCK //-----------------------------------------FUNCTION_BLOCK FB4 VAR_INPUT mytime : TIMER . initialvalue: S5TIME . END_VAR VAR bcdvalue : S5TIME . END_VAR BEGIN // chuong trinh chinh initialvalue:= T#4S . // so hieu timer S := set . bcdvalue := S_ODT ( T_NO := mytime .Tìm hiểu ngôn ngữ SCL-S7-300 set END_VAR : BOOL. // gan bien ten timer // bien khoi dong timer // Khai bao timer 2 la 4 s // dat thoi gian la 4 giay Nhóm I – TĐ04 Trang 110 . // hien thi thoi gian ma nhi phan Q := M0. : BOOL. binvalue : WORD . // Gia tri thoi gian delay = 4s R := false . // start timer TV := initialvalue .3) . set END_VAR VAR_OUTPUT result : BOOL .

binvalue : WORD .4 // Quy Uoc: Ðen Stop = q4. // start timer TV := initialvalue . // Gia tri thoi gian delay = 4s R := false .6) AND (NOT i0.4 // Quy Uoc: Vàng 2 = q5.5 BEGIN //--------.Doan chuong trinh chon che do Auto/ Manual -------IF (( i0.5 // Quy Uoc: Ðo 2 = q5. // ngo ra END_FUNCTION_BLOCK //========================================= ORGANIZATION_BLOCK OB1 // Quy Uoc: Xanh 1 = q5.2 // Quy Uoc: Ðo 1 = q5. bcdvalue := S_ODT ( T_NO := mytime .3 // Quy Uoc: Xanh 2 = q5.7 OR q0.7:=1.1))=1 THEN q0.7) AND (NOT i0. // hien thi thoi gian ma nhi phan Q := M0.1 // Quy Uoc: Vàng 1 = q5. ELSE Nhóm I – TĐ04 Trang 111 // dat thoi gian la 4 giay // chuong trinh chinh . initialvalue: S5TIME .6 // Quy Uoc: Ðen Start = q4.4) . // so hieu timer S := set .7 // Quy Uoc: Ðen Auto = q4.6 // Quy Uoc: Ðen manual = q4. END_VAR BEGIN // chuong trinh chinh initialvalue:= T#4S .Tìm hiểu ngôn ngữ SCL-S7-300 END_VAR VAR bcdvalue : S5TIME . // ngo reset ta bo qua BI := binvalue .

4 ) AND q4.4:=0.6 OR q4. END_IF. q4. q4.7:=1. ELSE m4. q4.6 OR q0.0:=0.1))=1 THEN m4.2 OR m5.3:=1. m5. IF (( i0. IF (( i0. q4. ELSE m4.4:=1. END_IF. Nhóm I – TĐ04 Trang 112 .7:=0.6:=1.6) AND (NOT i0.1))=1 THEN m4. END_IF.3 ) AND m4. //-------------------------IF (( i0. ELSE q0.7) AND (NOT i0.6:=1. m5. ELSE m5.0 OR m5.7 OR q4.Tìm hiểu ngôn ngữ SCL-S7-300 q0.0:=1.4:=1. m5.4) AND q4.1))=1 THEN q0.1:=0.5 OR m5.7 AND ( NOT i0.4:=0.1))=1 THEN m5.7 AND (NOT i0.2:=1. END_IF.0 OR m4.1 ) AND m4.6 AND (NOT i0. //----------------------------------------IF ((i0.4 OR m5. END_IF.0 OR m4.Ðoan chuong trinh chay che do manual ------IF ((i0.7 AND ( NOT i0.1:=1.1))=1 THEN m5.6:=0.6:=0.7:=0. //------.

SET:=0).chay che do auto --------------//-----------------------------------T1 chay IF (m4.Tìm hiểu ngôn ngữ SCL-S7-300 ELSE m5. // ------.6 AND m0.DB2(MYTIME:=T2. END_IF. //-----------------------------------T2 chay IF (m4.DB3(MYTIME:=T3.6 AND m0.4))=1 THEN FB1.SET:=1). //-----------------------------------T3 chay IF (m4. ELSE FB4.SET:=0).DB4(MYTIME:=T4.DB2(MYTIME:=T2.1:=0.SET:=1).SET:=0).SET:=1). ELSE FB2. //---------------------------------------------Nhóm I – TĐ04 Trang 113 .1)) OR m5.DB1(MYTIME:=T1. ELSE FB3. END_IF.6 AND (NOT m0.0 ) =1 THEN q5.1)=1 THEN FB2. END_IF. ELSE q5. //-----------------------------------T4 chay IF (m4.SET:=1).2)=1 THEN FB3. m5.1:=1.SET:=0).6 AND (NOT m0.DB3(MYTIME:=T3.3:=0.3)=1 THEN FB4. END_IF. END_IF. //----------------------------------IF ((m4. ELSE FB1. END_IF.6 AND m0.DB4(MYTIME:=T4.DB1(MYTIME:=T1.2:=0.

// den stop q5.4))=1 THEN q5.6 AND m0. END_ORGANIZATION_BLOCK Quá trình biên dịch chương trình: Nhóm I – TĐ04 Trang 114 .0).Tìm hiểu ngôn ngữ SCL-S7-300 IF ( m4. //--------------------------------------------IF ((m4.5). END_IF.2:= 1.3)) OR m5.5:=1.2 AND m0. // den do A q5.1 OR q4. END_IF. ELSE q5. // den do B .6:= ( q5.4:=0.5:=0.1 AND m0. IF (m4. END_IF.1 AND m0.6 AND m0.5:= (i0.2 AND (NOT m0.6 AND m0.4 OR q5.1 OR q5.2)) = 1 THEN q5.4:=1.3:= ( q5. q4.2). // ELSE q5.2 ) =1 THEN q5.2:=0.3 AND (NOT m0. ELSE q5.5) AND (NOT i0.1 AND (NOT m0.

Tìm hiểu ngôn ngữ SCL-S7-300 Sau đây là chương trình dạng LAD tương ứng: Đoạn chương trình chọn chế độ hoạt động Nhóm I – TĐ04 Trang 115 .

Tìm hiểu ngôn ngữ SCL-S7-300 Đoạn chương trình chạy chế độ Manual: Chương trình chính: Nhóm I – TĐ04 Trang 116 .

Tìm hiểu ngôn ngữ SCL-S7-300 Nhóm I – TĐ04 Trang 117 .

Tìm hiểu ngôn ngữ SCL-S7-300 Bảng mã hóa : Nhóm I – TĐ04 Trang 118 .

Nhóm I – TĐ04 Trang 119 .Tìm hiểu ngôn ngữ SCL-S7-300 Dùng chương trình PLCSim để mô phỏng.

Sign up to vote on this title
UsefulNot useful