Tài liệu học ngôn ngữ lập trình SCL trong S7-1200

12/05/2025
24 Phút đọc
1449 Lượt xem

Lập trình SCL trong S7-1200 là một kỹ năng quan trọng trong lĩnh vực tự động hóa công nghiệp giúp tối ưu hóa quy trình sản xuất và cải thiện hiệu quả vận hành. Với khả năng xử lý logic phức tạp, quản lý dữ liệu linh hoạt và cấu trúc chương trình rõ ràng, việc ứng dụng ngôn ngữ lập trình cấu trúc này trên nền tảng PLC Siemens S7-1200 hỗ trợ các kỹ sư và doanh nghiệp giải quyết các yêu cầu về hiệu suất, chi phí và độ tin cậy của hệ thống. Hãy cùng Thanh Thiên Phú tìm hiểu sâu hơn trong nội dung bài viết dưới đây nhé!

1. Giới thiệu ngôn ngữ lập trình SCL

SCL cung cấp một phương pháp tiếp cận mạnh mẽ và linh hoạt hơn so với các ngôn ngữ đồ họa truyền thống như Ladder Logic (LAD) hay Function Block Diagram (FBD), đặc biệt hiệu quả khi giải quyết các bài toán điều khiển phức tạp.

1.1. Ngôn ngữ lập trình SCL là gì?

Ngôn ngữ lập trình SCL (Structured Control Language) hay “ngôn ngữ điều khiển có cấu trúc” là một ngôn ngữ lập trình PLC bậc cao dựa trên nền tảng Pascal và được tiêu chuẩn hóa theo IEC 61131-3.

SCL được phát triển để đơn giản hóa việc xây dựng các thuật toán phức tạp, các tác vụ tính toán chuyên sâu, và quản lý dữ liệu có cấu trúc trong các hệ thống điều khiển tự động. Thay vì sử dụng các biểu tượng đồ họa, SCL cho phép kỹ sư viết mã lệnh dưới dạng văn bản, tương tự như các ngôn ngữ lập trình máy tính phổ biến như C, Pascal hoặc Basic. Do đó, tạo sự thuận lợi cho những người có kinh nghiệm với lập trình truyền thống và mở ra khả năng thực hiện các logic điều khiển tinh vi mà khó có thể biểu diễn một cách rõ ràng bằng LAD hay FBD.

Trong môi trường TIA Portal của Siemens thì SCL là một trong những ngôn ngữ lập trình chính được hỗ trợ cho các dòng PLC SIMATIC S7 gồm S7-1200, S7-1500, S7-300 và S7-400. Ngôn ngữ này có thể được sử dụng để viết toàn bộ chương trình điều khiển hoặc chỉ một phần, thường là các khối chức năng (FC – Function) hoặc khối chức năng có dữ liệu đi kèm (FB – Function Block) thực hiện các nhiệm vụ chuyên biệt.

Ngôn ngữ lập trình SCL trong TIA Portal
Ngôn ngữ lập trình SCL trong TIA Portal

Sự phát triển của SCL gắn liền với nhu cầu ngày càng tăng về các hệ thống tự động hóa có khả năng xử lý lượng lớn dữ liệu và thực thi các thuật toán phức tạp. Ví dụ, trong các ứng dụng điều khiển quá trình, điều khiển chuyển động, xử lý tín hiệu analog, hay giao tiếp với các hệ thống cấp cao hơn như MES (Manufacturing Execution System) hoặc ERP (Enterprise Resource Planning), SCL thể hiện ưu thế nhờ khả năng thao tác dễ dàng với các vòng lặp, cấu trúc điều kiện, mảng dữ liệu, và các kiểu dữ liệu tùy chỉnh. Các tác vụ như tính toán công thức phức tạp với nhiều biến số, xử lý chuỗi dữ liệu từ máy quét mã vạch, hay thực hiện thuật toán sắp xếp, khi thực hiện bằng LAD sẽ cồng kềnh và khó quản lý, trong khi SCL cung cấp cú pháp rõ ràng và trực quan để giải quyết hiệu quả.

1.2. Ưu điểm của SCL khi lập trình cho S7-1200

Khi ứng dụng lập trình SCL trong S7-1200 thì các kỹ sư và doanh nghiệp sẽ nhận được nhiều lợi ích kỹ thuật quan trọng. Trước hết, SCL thúc đẩy một cấu trúc chương trình rõ ràng, dễ đọc và dễ bảo trì. Ngôn ngữ này khuyến khích việc viết mã theo từng khối logic, sử dụng các cấu trúc điều khiển quen thuộc như IF-THEN-ELSE, CASE, FOR, WHILE, làm cho chương trình trở nên dễ hiểu hơn, ngay cả với những người không trực tiếp tham gia viết mã. Điều này đặc biệt hữu ích khi cần sửa lỗi hoặc nâng cấp hệ thống, vì việc tìm kiếm và chỉnh sửa trong mã SCL thường nhanh chóng và ít rủi ro hơn so với việc phân tích qua nhiều network LAD. Một chương trình được cấu trúc tốt bằng SCL có thể được xem như một tài liệu kỹ thuật rõ ràng giúp giảm thiểu thời gian tìm hiểu và tăng tốc độ triển khai.

Ưu điểm của ngôn ngữ SCL trong lập trình PLC S7-1200
Ưu điểm của ngôn ngữ SCL trong lập trình PLC S7-1200

Thêm vào đó, khả năng xử lý thuật toán phức tạp và thực hiện các tính toán mạnh mẽ là một ưu điểm nổi bật của SCL. Các phép toán số học, logic, lượng giác, xử lý chuỗi, thao tác bit, và các thuật toán điều khiển PID nâng cao đều có thể được triển khai một cách tự nhiên và hiệu quả. Đối với S7-1200, SCL giúp khai thác tối đa khả năng xử lý của CPU, cho phép thực hiện các tác vụ mà trước đây thường chỉ thấy trên các dòng PLC cao cấp hơn. Ví dụ, việc viết một khối SCL để tính toán lưu lượng dựa trên tín hiệu analog từ cảm biến, hoặc phân tích dữ liệu nhiệt độ để đưa ra cảnh báo sớm trở nên khả thi và hiệu quả.

Một lợi điểm khác là tối ưu hóa việc sử dụng bộ nhớ và tốc độ thực thi. Mặc dù là ngôn ngữ bậc cao, trình biên dịch SCL trong TIA Portal được tối ưu hóa để tạo ra mã máy hiệu quả. Trong nhiều trường hợp, đặc biệt với các thuật toán phức tạp, mã SCL sau khi biên dịch có thể chiếm ít dung lượng bộ nhớ và thực thi nhanh hơn so với cách triển khai tương đương bằng LAD hoặc FBD. Nó đặc biệt quan trọng với S7-1200, bởi dòng PLC này có tài nguyên phần cứng giới hạn hơn so với S7-1500.

Tính module hóa và tái sử dụng mã nguồn cao cũng là một đặc tính quan trọng của SCL. Ngôn ngữ này rất thích hợp để tạo ra các Function (FC) và Function Block (FB) có tính tổng quát cao. Kỹ sư có thể viết một FB bằng SCL để điều khiển một loại thiết bị cụ thể, sau đó tái sử dụng FB này cho nhiều thiết bị tương tự trong dự án mà không cần viết lại mã. Điều này không chỉ tiết kiệm thời gian phát triển mà còn đảm bảo tính nhất quán và giảm thiểu lỗi. Khả năng tạo ra các thư viện hàm riêng bằng SCL là một lợi thế lớn cho các công ty muốn chuẩn hóa giải pháp tự động hóa của mình.

Cuối cùng, SCL có sự tương đồng với các ngôn ngữ lập trình bậc cao khác. Đối với các kỹ sư đã quen thuộc với Pascal, C/C++, hoặc các ngôn ngữ kịch bản, việc chuyển sang SCL sẽ tương đối dễ dàng do cú pháp và các khái niệm cơ bản như biến, kiểu dữ liệu, hàm, thủ tục, cấu trúc điều khiển có nhiều điểm tương đồng. Điều này giúp rút ngắn thời gian làm quen và cho phép đội ngũ phát triển đa dạng hơn tham gia vào dự án PLC.

1.3. Nhược điểm cần lưu ý của SCL

Mặc dù SCL mang lại nhiều lợi ích, việc xem xét các hạn chế hoặc điểm cần lưu ý của nó cũng quan trọng để đưa ra quyết định sử dụng phù hợp. Một điểm cần cân nhắc là đường cong học tập ban đầu có thể cao hơn đối với người chỉ quen LAD/FBD. Đối với những kỹ sư đã làm việc chủ yếu với các ngôn ngữ đồ họa, việc chuyển sang một ngôn ngữ dựa trên văn bản như SCL có thể đòi hỏi một khoảng thời gian thích ứng với cú pháp, cách khai báo biến, và tư duy cấu trúc chương trình theo kiểu tuần tự và khối lệnh.

Về mặt gỡ lỗi trực quan (Online Debugging) cho các logic đơn giản, SCL có thể không trực quan bằng LAD/FBD trong một số trường hợp. Việc giám sát trạng thái logic trực tuyến của mã LAD thường hiển thị rõ ràng các tiếp điểm và dòng năng lượng. Với SCL, gỡ lỗi thường dựa vào việc theo dõi giá trị biến hoặc sử dụng điểm dừng, điều này có thể ít trực quan hơn cho các logic tuần tự đơn giản.

Ngoài ra, SCL ít phù hợp cho các tác vụ điều khiển logic tuần tự rất đơn giản. Nếu một tác vụ chỉ là bật một đầu ra khi một vài đầu vào được kích hoạt, việc viết bằng LAD có thể nhanh hơn và dễ hình dung hơn. Sử dụng SCL cho những trường hợp quá đơn giản đôi khi có thể làm tăng sự phức tạp không cần thiết.

Cuối cùng, để khai thác hiệu quả SCL, người dùng cần có kiến thức nền tảng về lập trình cấu trúc. Hiểu biết cơ bản về biến, kiểu dữ liệu, toán tử, cấu trúc điều khiển, hàm và thủ tục là cần thiết. Thiếu kiến thức này có thể dẫn đến việc viết mã kém hiệu quả hoặc dễ phát sinh lỗi. Tuy nhiên, những điểm này không làm giảm giá trị của SCL mà giúp người dùng sử dụng nó một cách hiệu quả.

1.4. Khi nào nên lựa chọn SCL cho dự án S7-1200 của bạn?

Quyết định sử dụng SCL trong một dự án S7-1200 phụ thuộc vào các yếu tố như độ phức tạp của bài toán, yêu cầu về hiệu suất, khả năng bảo trì và kỹ năng của đội ngũ phát triển. SCL thường là lựa chọn tối ưu trong các tình huống như các bài toán yêu cầu tính toán phức tạp, bao gồm công thức toán học, thuật toán điều khiển PID tùy chỉnh, xử lý tín hiệu analog, tính toán thống kê và thuật toán tối ưu hóa. SCL cung cấp cú pháp trực quan để thực hiện các tác vụ này hiệu quả hơn LAD hay FBD.

Khi nào nên chọn SCL để lập trình PLC S7-1200?
Khi nào nên chọn SCL để lập trình PLC S7-1200?

Một trường hợp khác là khi cần xử lý chuỗi ký tự (String Manipulation) và quản lý dữ liệu có cấu trúc. Các tác vụ như đọc và phân tích dữ liệu từ máy quét mã vạch, tạo và gửi chuỗi lệnh điều khiển, xử lý file văn bản, hoặc làm việc với cấu trúc dữ liệu phức tạp (STRUCT, ARRAY) được SCL hỗ trợ tốt thông qua các hàm và toán tử mạnh mẽ.

Khi dự án cần quản lý chương trình lớn, có cấu trúc rõ ràng, dễ bảo trì và mở rộng, SCL tỏ ra ưu thế. Khả năng chia chương trình thành các khối hàm (FC) và khối chức năng (FB) mạch lạc giúp cải thiện tính cấu trúc so với chương trình LAD dài.

Nếu mong muốn tính di động và tái sử dụng mã nguồn cao, SCL là lựa chọn thích hợp. Các FC, FB viết bằng SCL có thể dễ dàng được chuyển đổi và sử dụng trên các dòng PLC khác của Siemens. Việc tạo thư viện chuẩn bằng SCL giúp tăng tốc độ phát triển dự án mới.

Trong các dự án làm việc nhóm và yêu cầu tính module hóa cao, SCL cho phép phân chia công việc rõ ràng. Mỗi kỹ sư có thể phát triển các khối SCL chuyên biệt, và việc tích hợp sau đó cũng dễ dàng hơn.

Cuối cùng, khi đội ngũ phát triển có nền tảng về lập trình bậc cao như Pascal hoặc C, việc tận dụng kỹ năng của họ với SCL sẽ giúp rút ngắn thời gian làm quen và tăng năng suất. Ví dụ, việc phát triển hệ thống giám sát và điều khiển nhiệt độ cho nhiều lò nung, với yêu cầu thuật toán PID, ghi lịch sử và cảnh báo, sẽ hiệu quả hơn khi tạo một Function Block (FB) bằng SCL để đóng gói logic, sau đó tạo các instance cho mỗi lò.

2. Hướng dẫn viết SCL trong phần mềm lập trình S7-1200

2.1. Chuẩn bị môi trường và công cụ cần thiết

Trước khi bắt đầu, việc chuẩn bị đầy đủ công cụ và kiến thức nền tảng là cần thiết. Các yếu tố chính gồm phần mềm TIA Portal phù hợp với firmware của PLC S7-1200 đang sử dụng và có giấy phép hợp lệ.

Cài đặt phần mềm TIA Portal để lập trình PLC S7-1200
Cài đặt phần mềm TIA Portal để lập trình PLC S7-1200

Tiếp theo là PLC SIMATIC S7-1200 thực tế để thực hành và kiểm thử chương trình. Các CPU phổ biến như CPU 1211C, 1212C, 1214C, 1215C, 1217C có thông số kỹ thuật khác nhau, được tóm tắt trong bảng dưới đây.

Một số CPU đáng để bạn tham khảo và sử dụng trong các dự án lập trình PLC S7-1200 với ngôn ngữ SCL:

CPU Bộ nhớ làm việc DI/DO tích hợp AI/AQ tích hợp Cổng Profinet
CPU 1211C DC/DC/DC 50 KB 6 DI / 4 DQ 2 AI 1
CPU 1212C AC/DC/RLY 75 KB 8 DI / 6 DQ (Relay) 2 AI 1
CPU 1214C DC/DC/DC 100 KB 14 DI / 10 DQ 2 AI 1
CPU 1215C DC/DC/RLY 125 KB 14 DI / 10 DQ (Relay) 2 AI / 2 AQ 2

(*) Lưu ý: Thông số có thể thay đổi tùy theo mã đặt hàng cụ thể và phiên bản firmware.

Ngoài ra, cần có cáp lập trình (thường là cáp Ethernet), nguồn cấp cho PLC (thường là 24VDC), và kiến thức cơ bản về PLC S7-1200 và TIA Portal. Việc làm quen với khái niệm PLC, cách TIA Portal hoạt động, tạo dự án, cấu hình phần cứng, và các ngôn ngữ lập trình khác sẽ hữu ích.

Cuối cùng, tài liệu kỹ thuật PLC S7-1200 từ Siemens như S7-1200 System Manual và SCL Programming Guideline là nguồn thông tin quan trọng. Nếu không có PLC thật, tính năng mô phỏng S7-PLCSIM trong TIA Portal là một công cụ hữu ích.

2.2. Tạo một dự án mới và cấu hình phần cứng S7-1200 trong TIA Portal

Quy trình tạo dự án và cấu hình phần cứng trong TIA Portal là bước khởi đầu. Đầu tiên, khởi động TIA Portal và chọn Create new project. Đặt tên dự án, chọn đường dẫn lưu trữ, và nhấn Create. Tiếp theo, chọn Configure a device, sau đó Add new device. Trong danh sách Controllers, tìm đến dòng SIMATIC S7-1200, chọn đúng mã CPU S7-1200 và phiên bản firmware tương thích, rồi nhấn Add.

Cấu hình CPU S7-1200 trong TIA Portal
Cấu hình CPU S7-1200 trong TIA Portal

Sau khi thêm thiết bị, TIA Portal thường chuyển sang Device View. Có thể chuyển sang Project View để có cái nhìn tổng quan. Trong cây dự án, double-click vào Device configuration dưới tên PLC để cấu hình chi tiết. Tại đây, có thể cấu hình các thông số cho CPU như địa chỉ IP (ví dụ: 192.168.0.1, Subnet mask: 255.255.255.0) và các module mở rộng nếu có. Cuối cùng, lưu và biên dịch cấu hình phần cứng bằng cách nhấn nút Save project, sau đó chọn CPU, click chuột phải và chọn Compile > Hardware (rebuild all) để kiểm tra lỗi.

2.3. Cách tạo một khối chương trình SCL (OB, FB, FC)

Chương trình PLC trong TIA Portal được tổ chức thành các khối. Ba loại khối chính thường dùng với SCL là Organization Blocks (OBs), Functions (FCs), và Function Blocks (FBs). OBs là giao diện giữa hệ điều hành PLC và chương trình người dùng (ví dụ OB1 là khối chính). FCs là khối chương trình không có bộ nhớ riêng, thực hiện tác vụ cụ thể và kết quả phụ thuộc vào đầu vào tại thời điểm gọi. FBs có bộ nhớ riêng (Instance Data Block – iDB), cho phép lưu trạng thái giữa các lần gọi, thích hợp cho các đối tượng điều khiển phức tạp.

Để tạo khối chương trình SCL, trong Project tree, dưới mục Program blocks, chọn Add new block. Một cửa sổ sẽ hiện ra, cho phép chọn loại khối (OB, FB, FC), đặt tên cho khối (ví dụ MySCL_Function), và quan trọng nhất là chọn SCL trong phần Language. Nhấn OK. Khối SCL vừa tạo sẽ xuất hiện và có thể mở bằng cách double-click. Giao diện soạn thảo SCL bao gồm phần khai báo (Block interface) cho các biến Input, Output, InOut, Static (chỉ trong FB), Temp, Constant, và phần thân chương trình (Code section) giữa BEGIN và END_….

Ví dụ, để tạo một FC tính tổng hai số nguyên (FC_SumIntegers), sau khi tạo FC với ngôn ngữ SCL, trong phần khai báo, khai báo hai biến Input Operand1 và Operand2 kiểu Int, và một biến Output Result kiểu Int. Trong thân chương trình, viết lệnh “Result” := “Operand1” + “Operand2”;. Sau đó lưu và biên dịch khối.

2.4. Cú pháp cơ bản trong SCL

Nắm vững cú pháp cơ bản của SCL là cần thiết. Biến được khai báo trong phần giao diện khối với cú pháp Ten_Bien : Kieu_Du_Lieu := Gia_Tri_Khoi_Tao; // Chu_Thich. Các kiểu dữ liệu phổ biến bao gồm BOOL, BYTE, WORD, DWORD, SINT, INT, DINT, các kiểu số nguyên không dấu (USINT, UINT, UDINT), REAL (số thực), TIME, DATE, STRING, CHAR, ARRAY (mảng), và STRUCT (cấu trúc).

Cú pháp lập trình SCL cơ bản với S7-1200
Cú pháp lập trình SCL cơ bản với S7-1200

Các toán tử trong SCL bao gồm toán tử số học (+, -, *, /, MOD), so sánh (=, <>, <, >, <=, >=), logic (AND, OR, XOR, NOT), và gán giá trị (:=).

Cấu trúc điều khiển chính là IF…THEN…ELSIF…ELSE…END_IF; và CASE…OF…ELSE…END_CASE;.

Ví dụ:

IF “Temperature” > 100.0 THEN

“Alarm_HighTemp” := TRUE;

ELSE

“Alarm_HighTemp” := FALSE;

END_IF;

Cấu trúc vòng lặp bao gồm FOR…TO…DO…END_FOR; (ví dụ: FOR “i” := 0 TO 4 DO … END_FOR;), WHILE…DO…END_WHILE;, và REPEAT…UNTIL…END_REPEAT;. Lệnh EXIT; dùng để thoát vòng lặp.

Lời gọi hàm (FC) có dạng Ten_FC(Parameter1 := Value1); hoặc Bien_Nhan_Ket_Qua := Ten_FC(Params);. Gọi khối chức năng (FB) yêu cầu khai báo một instance Data Block (iDB), ví dụ MyMotor_DB : “Name_Of_Motor_FB”;, sau đó gọi MyMotor_DB(Input_Start := “StartButton”, Output_Running => “MotorIsRunning_Status”);. Chú thích trong SCL dùng // cho một dòng hoặc (* … *) cho nhiều dòng.

2.5. Gỡ lỗi và kiểm tra chương trình SCL trên S7-1200

Gỡ lỗi chương trình SCL trong TIA Portal là một quy trình quan trọng. Đầu tiên là biên dịch chương trình (Compile) để phát hiện lỗi cú pháp. Cửa sổ “Info > Compile” sẽ hiển thị lỗi (errors) cần sửa và cảnh báo (warnings) cần xem xét.

Tiếp theo, có thể sử dụng mô phỏng với S7-PLCSIM (nếu có license) để kiểm thử chương trình mà không cần PLC thật. Chọn CPU và nhấn “Start simulation”, TIA Portal sẽ tải chương trình xuống PLC ảo.

Khi chương trình chạy trên PLC (thật hoặc ảo), có thể sử dụng giám sát trực tuyến (Online Monitoring). Mở khối SCL và nhấn nút “Monitoring on/off” để xem giá trị hiện tại của các biến và luồng thực thi.

Bảng theo dõi biến (Watch Tables) cho phép tạo danh sách các biến cụ thể để theo dõi và thay đổi giá trị của chúng trong thời gian thực. Trong Project tree, chọn “Add new watch table”, nhập địa chỉ biến, kết nối online và nhấn “Monitor all”.

Các công cụ gỡ lỗi nâng cao bao gồm điểm dừng (Breakpoints) và chạy từng bước (Step-by-step execution). Breakpoints cho phép dừng chương trình tại một dòng lệnh cụ thể để kiểm tra biến. Chạy từng bước cho phép thực thi từng dòng lệnh sau khi dừng tại breakpoint. Cần lưu ý rằng sử dụng breakpoints trên hệ thống đang vận hành có thể gây gián đoạn.

Ngoài ra, có thể sử dụng các lệnh ghi thông tin (Trace/Log) tạm thời vào mã SCL để ghi giá trị biến hoặc thông báo trạng thái vào một vùng nhớ để theo dõi. Cuối cùng, việc kiểm tra Logic và Quy trình thông qua các kịch bản kiểm thử (test cases) là cần thiết để đảm bảo chương trình hoạt động đúng trong mọi tình huống.

3. Một số chương trình S7-1200 được viết bằng ngôn ngữ SCL

Phần này trình bày một số ví dụ chương trình SCL trên S7-1200 để minh họa ứng dụng.

3.1. Điều khiển đèn giao thông đơn giản bằng SCL

Bài toán này minh họa việc quản lý trạng thái và thời gian. Giả sử một cụm đèn (Xanh Q0.0, Vàng Q0.1, Đỏ Q0.2) cho một chiều đường. Chu kỳ: Xanh 10 giây, Vàng 3 giây, Đỏ 12 giây. Sử dụng một FB tên là FB_TrafficLight. Trong phần khai báo Static của FB, khai báo biến State : Int := 1; và các instance cho timer như TON_Green_Instance : TON; TON_Yellow_Instance : TON; TON_Red_Instance : TON;. Mã SCL trong thân FB FB_TrafficLight sẽ sử dụng cấu trúc CASE #State OF để điều khiển các đèn và timer.

Lập trình điều khiển đèn giao thông
Lập trình điều khiển đèn giao thông

Ví dụ cho trạng thái Đèn Xanh (State 1):

// Trong CASE #State OF 1:

#Green_Light_Out := TRUE;

#Yellow_Light_Out := FALSE;

#Red_Light_Out := FALSE;

#TON_Green_Instance(IN:=TRUE, PT:=T#10s);

IF #TON_Green_Instance.Q THEN

#State := 2; // Chuyển sang trạng thái Vàng

#TON_Green_Instance(IN:=FALSE); // Reset timer

END_IF;

Các trạng thái Vàng (State 2) và Đỏ (State 3) được xử lý tương tự với thời gian tương ứng. Trong OB1, tạo một instance DB cho FB_TrafficLight (ví dụ TrafficLight_Instance_DB) và gọi nó. Sau đó gán các output của FB ra các output vật lý của PLC.

3.2. Tạo Function Block (FB) tính trung bình cộng nhiều giá trị đầu vào bằng SCL

FB này nhận một mảng giá trị REAL và tính trung bình. Tên FB là FB_AverageCalculator. Khai báo giao diện FB: Input Input_Values : ARRAY[0..9] OF REAL; và Enable_Calculation : Bool;. Output Average_Value : REAL;, Calculation_Done : Bool;, Error : Bool;. Trong thân FB, nếu Enable_Calculation là TRUE và số phần tử hợp lệ lớn hơn 0, một vòng lặp FOR được sử dụng để tính tổng các phần tử trong Input_Values. Sau đó, Average_Value được tính bằng tổng chia cho số phần tử. Cờ Calculation_Done và Error được cập nhật tương ứng.

Ví dụ đoạn tính toán:

// Trong FB_AverageCalculator

VAR_TEMP

Sum_Temp : REAL := 0.0;

i : INT;

END_VAR

#NumberOfElements := 10; // Giả định dùng 10 phần tử

IF #Enable_Calculation THEN

IF #NumberOfElements > 0 THEN

FOR #i := 0 TO #NumberOfElements – 1 DO

Sum_Temp := Sum_Temp + #Input_Values[#i];

END_FOR;

#Average_Value := Sum_Temp / DINT_TO_REAL(#NumberOfElements);

#Calculation_Done := TRUE; #Error := FALSE;

ELSE

#Error := TRUE; #Average_Value := 0.0; #Calculation_Done := FALSE;

END_IF;

ELSE

#Calculation_Done := FALSE;

END_IF;

Để sử dụng FB này, khai báo một instance DB trong OB1, chuẩn bị một mảng dữ liệu đầu vào, và gọi FB, gán các tham số Input và nhận các tham số Output.

3.3. Xử lý chuỗi ký tự trong SCL như đọc mã vạch, hiển thị thông báo

SCL hỗ trợ xử lý chuỗi mạnh mẽ. TIA Portal cung cấp các hàm như LEN, CONCAT (hoặc toán tử +), LEFT, RIGHT, MID, DELETE, INSERT, FIND, REPLACE, và các hàm chuyển đổi STRING_TO_…, …_TO_STRING. Giả sử cần phân tích chuỗi từ máy quét mã vạch: PRODUCT_CODE:XYZ123;QUANTITY:005; để lấy mã sản phẩm và số lượng. Tạo FC FC_ParseBarcodeData với Input Raw_Barcode_String : String[100]; và Output Product_Code : String[50];, Quantity : DINT;, Parse_Success : Bool;. Trong FC, sử dụng hàm FIND để xác định vị trí các từ khóa “PRODUCT_CODE:” và “QUANTITY:”, cũng như dấu ‘;’. Sau đó dùng hàm MID để trích xuất chuỗi con chứa mã sản phẩm và số lượng. Cuối cùng, dùng hàm chuyển đổi (ví dụ STRING_TO_DINT) để chuyển chuỗi số lượng thành kiểu DINT. Cần thực hiện kiểm tra lỗi cẩn thận trong quá trình phân tích chuỗi.

Xử lý chuỗi ký tự trong SCL
Xử lý chuỗi ký tự trong SCL

Ví dụ trích xuất mã sản phẩm:

// Trong FC_ParseBarcodeData

#Pos_Code_Start := FIND(IN1 := #Raw_Barcode_String, IN2 := ‘PRODUCT_CODE:’);

IF #Pos_Code_Start > 0 THEN

#Pos_Code_Start := #Pos_Code_Start + LEN(‘PRODUCT_CODE:’);

#Pos_Code_End := FIND(IN1:=#Raw_Barcode_String, IN2:=’;’); // Cần logic tìm ‘;’ chính xác hơn

IF #Pos_Code_End > #Pos_Code_Start THEN

#Product_Code := MID(IN := #Raw_Barcode_String, L := #Pos_Code_End – #Pos_Code_Start, P := #Pos_Code_Start);

// Tiếp tục xử lý Quantity…

#Parse_Success := TRUE; // Nếu tất cả thành công

END_IF;

END_IF;

// Nếu không tìm thấy hoặc lỗi, Parse_Success sẽ là FALSE (giá trị khởi tạo)

3.4. Phân tích và tối ưu hóa mã SCL cho hiệu suất

Tối ưu hóa mã SCL là quan trọng để giảm thời gian chu kỳ quét và tiết kiệm bộ nhớ trên S7-1200. Một số kỹ thuật bao gồm tránh vòng lặp vô tận hoặc quá dài bằng cách đảm bảo điều kiện thoát và cân nhắc chia nhỏ tác vụ. Sử dụng kiểu dữ liệu phù hợp là một yếu tố khác. Chọn kiểu dữ liệu nhỏ nhất có thể chứa dải giá trị của biến. Bảng dưới đây cung cấp gợi ý:

Bảng ví dụ chọn kiểu dữ liệu SCL:

Dải giá trị cần lưu trữ Kiểu dữ liệu SCL gợi ý Kích thước (byte)
TRUE / FALSE BOOL 0.125 (1 bit)
0 đến 200 USINT / BYTE 1
-100 đến 100 SINT 1
0 đến 50000 UINT / WORD 2
-30000 đến 30000 INT 2
Giá trị thập phân REAL 4
Số nguyên lớn DINT / UDINT 4

Việc tối ưu hóa các phép tính và biểu thức logic cũng cần thiết. Tránh tính toán phức tạp không cần thiết trong vòng lặp, và sắp xếp điều kiện trong IF để tăng hiệu quả. Sử dụng Function (FC) và Function Block (FB) hiệu quả cũng quan trọng. FC phù hợp cho tác vụ không cần lưu trạng thái, trong khi FB dùng khi cần lưu trạng thái. Truyền tham số lớn vào FC bằng InOut để tránh sao chép dữ liệu. Cân nhắc sử dụng multi-instance FB. Về quản lý bộ nhớ Data Block (DB), nên ưu tiên sử dụng “Optimized block access”. Tránh tạo quá nhiều DB nhỏ lẻ. Sử dụng các lệnh điều kiện để bỏ qua các đoạn mã không cần thiết trong mỗi chu kỳ quét. Cuối cùng, sử dụng các công cụ phân tích của TIA Portal như Cycle Time Monitoring và Cross-references để xác định các điểm cần tối ưu.

4. Cùng Thanh Thiên Phú triển khai các giải pháp S7-1200 sử dụng SCL hiệu quả

Sau khi tìm hiểu các khía cạnh kỹ thuật của lập trình SCL trong S7-1200, việc ứng dụng những kiến thức này vào các giải pháp tự động hóa thực tế là bước tiếp theo. Thanh Thiên Phú cung cấp sự hỗ trợ cần thiết trong quá trình này, với năng lực đã được khẳng định thông qua kinh nghiệm và chuyên môn (E-E-A-T) của đội ngũ kỹ sư am hiểu sâu về PLC Siemens và ngôn ngữ SCL.

Thanh Thiên Phú là Đại lý Siemens tại Việt Nam, chúng tôi cam kết cung cấp 100% sản phẩm PLC S7-1200 chính hãng Siemens và tư vấn giải pháp tối ưu, phù hợp với yêu cầu kỹ thuật và ngân sách của từng dự án. Dịch vụ hỗ trợ kỹ thuật và tư vấn chuyên sâu của Thanh Thiên Phú bao gồm từ khâu tư vấn ban đầu, lựa chọn thiết bị, hỗ trợ kỹ thuật trong quá trình lắp đặt và lập trình SCL, đến dịch vụ hậu mãi. Chúng tôi tập trung vào việc cung cấp giải pháp S7-1200 và SCL để giải quyết các vấn đề về hiệu suất thiết bị, chi phí vận hành, an toàn và cập nhật công nghệ cho khách hàng.

Để triển khai các dự án tự động hóa sử dụng lập trình SCL trong S7-1200 và nhận được sự hỗ trợ chuyên nghiệp, quý vị có thể liên hệ với Thanh Thiên Phú qua các kênh sau:

  • Hotline: 08.12.77.88.99
  • Website: thanhthienphu.vn
  • Địa chỉ văn phòng: 20 đường 29, Khu phố 2, Phường Cát Lái, Thành phố Thủ Đức, Thành phố Hồ Chí Minh
CEO Dương Minh Kiệt

Dương Minh Kiệt

Người sáng lập Thanh Thiên Phú

Với 6 năm kinh nghiệm chuyên sâu về kỹ thuật tự động hóa, tôi đã giải quyết nhiều bài toán điều khiển và giám sát trong môi trường công nghiệp. Trọng tâm công việc của tôi là áp dụng kiến thức về lập trình PLC, cấu hình hệ thống SCADA, và lựa chọn thiết bị phần cứng (cảm biến, biến tần, PLC, HMI) để xây dựng các giải pháp tự động hóa đáp ứng yêu cầu vận hành cụ thể. Tôi có kinh nghiệm thực tế trong việc hiệu chỉnh hệ thống, gỡ lỗi logic điều khiển và đảm bảo các giao thức truyền thông công nghiệp (như Modbus, Profinet, Ethernet/IP) hoạt động thông suốt.