Phần này giải thích hoạt động bên trong của phần mềm plcLib. Sự hiểu biết về những khái niệm này không cần thiết đối với lập trình cơ bản, nhưng có thể hữu ích khi phát triển các ứng dụng nâng cao hơn hoặc để hiểu tại sao mọi thứ không hoạt động tốt như bạn mong đợi.
21.1. Cách phần mềm hoạt động
PLC hoạt động bằng cách đọc lặp lại các đầu vào, thực hiện các phép tính, sau đó gửi kết quả đến các đầu ra. Quá trình này được gọi là chu kỳ quét. Một ứng dụng dựa trên sơ đồ bậc thang điển hình được 'quét' từng bậc một, từ trái sang phải, bắt đầu từ bậc trên cùng và làm việc dần dần xuống dưới. Quá trình này lặp lại liên tục.
Hình 54. Mỗi hàng được quét trong một quá trình lặp lại như một phần của chu kỳ quét.
Mỗi bậc của bậc thang có thể được coi là một quá trình song song, quá trình này nhận được phần riêng của nó về thời gian của bộ xử lý khi chu kỳ quét lặp đi lặp lại. Do đó, các ứng dụng dựa trên PLC thể hiện khả năng xử lý song song đơn giản, nhưng không cần sử dụng đến các kỹ thuật lập trình nâng cao.
Đối với hoạt động cơ bản, phần mềm PLC sử dụng một biến duy nhất được gọi là scanValue để lưu giữ kết quả tính toán đang chạy của nó khi mỗi nhánh được giải quyết. Hãy xem xét đoạn mã sau để xem cách này hoạt động như thế nào đối với các giá trị bit
đơn:
Lệnh đầu vào bit đơn in(X0) đọc chân đầu vào kỹ thuật số X0 và lưu trữ kết quả của nó trong biến scanValue là 1 hoặc 0. Lệnh xuất bit tiếp theo out(Y0) chỉ cần đọc biến
scanValue và gửi giá trị này đến chân đầu ra kỹ thuật số Y0. Quá trình này lặp lại khi mỗi
bậc của sơ đồ bậc thang được tính toán, với scanValue được khởi tạo, cập nhật liên tục và sau đó bị loại bỏ khi chương trình logic bậc thang thực thi.
Quy trình tương tự đối với đầu vào tương tự, được đọc từ bộ chuyển đổi tương tự sang kỹ thuật số dưới dạng giá trị 10 bit trong dải 0-1023 bằng lệnh inAnalog () - như được minh họa bằng đoạn mã sau.
Cùng một biến scanValue được sử dụng để giữ giá trị tương tự này, đây không phải là vấn đề vì biến thực sự là một kiểu biến số nguyên không dấu. Phần mềm plcLib tự động xử lý tỷ lệ của bất kỳ đầu ra 'tương tự' nào, vì vậy lệnh outPWM () được chia phạm vi 0-255 (nhị phân 8 bit), trong khi lệnh outServo () sẽ sử dụng giá trị trong phạm vi 0-179 (đại diện cho góc quay 180 °).
Phần tiếp theo giải thích cách sử dụng biến scanValue đã đề cập ở trên và thảo luận về
các ứng dụng có thể có của biến do người dùng tạo trong bản phác thảo.
21.2 Sử dụng biến trong chương trình
Phần này xem xét một số ứng dụng của các biến trong bản phác thảo của người dùng, bắt đầu bằng biến scanValue, theo dõi kết quả tính toán hiện tại khi chu kỳ quét được thực hiện. Việc tạo các biến do người dùng định nghĩa sau đó sẽ được thảo luận, cuối cùng dẫn đến việc áp dụng các biến do người dùng định nghĩa để giải quyết các mạch logic nhiều nhánh, phức tạp.
21.2.1 Sử dụng biến scanValue
Trước đây, người ta đã thấy rằng scanValue được phần mềm plcLib sử dụng nội bộ khi
chu trình quét PLC được thực thi lặp đi lặp lại. Tuy nhiên, biến này không có sẵn trực tiếp trong các chương trình người dùng, vì nó chỉ được xác định bên trong tệp tiêu đề plcLib (nó được cho là 'nằm ngoài phạm vi' bên trong bản phác thảo của bạn). Bạn có thể tùy chọn cung cấp scanValue bằng cách xác định nó là một biến bên ngoài, như được hiển thị trong ví dụ sau.
122
Listing 41. Làm cho biến scanValue có sẵn cho nhiều thư viện (Source: File > Examples
> plcLib > InputOutput > ServoSingle)
Để thay thế cho cách tiếp cận trên, hướng dẫn plcLib có thể tùy chọn trả lại giá trị
scanValue hiện tại cho một biến người dùng đã xác định trước đó (chỉ chính xác tại điểm
cụ thể đó trong chu kỳ quét). Nội dung của một biến do người dùng xác định cũng có thể được sử dụng làm 'đầu vào' cho lệnh plcLib, thay cho đầu vào hoặc đầu ra trực tiếp từ một chân được đặt tên. Ví dụ sau minh họa một số khả năng.
Listing 42. Trả lại scanValue cho một biến do người dùng xác định (Source: File > Examples > plcLib > Variables > LachCommandVariables)
Những điều cần lưu ý ở trên là việc lưu biến scanValue trong một biến do người dùng xác định (AUX1 = in (X1);), và cả việc sử dụng tên biến thay cho tên pin trong các lệnh plcLib khác.
21.3. Làm việc với các biến tùy chỉnh
Khi đề cập đến các tên như X0, X1, Y0, AUX0, AUX1, trong danh sách trước. bạn có thể tự hỏi làm thế nào phần mềm 'biết' liệu bạn đang đề cập đến tên ghim hay nội dung của một biến do người dùng xác định? Câu trả lời là tất cả các tên pin (X0, X1 và Y0) được xác định bên trong bởi phần mềm plcLib là các biến số nguyên có dấu, trong khi các biến do người dùng xác định trong chương trình trên (AUX0 và AUX1) thuộc loại biến không dấu. Phần mềm plcLib thực sự có ít nhất hai phiên bản của mỗi lệnh và trình biên dịch chọn phiên bản thích hợp dựa trên kiểu biến được cung cấp (đây được gọi là quá tải hàm). Chỉ cần nhớ chỉ định các biến kiểu số nguyên do người dùng xác định là số nguyên không dấu (16-bit) hoặc dài không dấu (32-bit) để tránh nhầm lẫn giữa biến người dùng và tên pin.
Listing 43. Giải quyết logic phức tạp với các biến người dùng (Source: File > Examples > plcLib > Variables > ComplexLogic)
Ví dụ trên trước tiên giải quyết nhánh trên của mạch logic và sau đó lưu trữ (hoặc 'đầu ra') đây là kết quả tạm thời cho một biến do người dùng xác định - out (AUX0) ;. (Dòng này có thể đã được bỏ qua hoàn toàn bằng cách viết lại dòng trước là AUX0 = andNotBit (X1)
;.) Sau đó, nhánh thứ hai được giải quyết và kết quả từ nhánh đầu tiên HOẶC với kết quả tạm thời trước đó - orBit(AUX0) ;.
Một giải pháp thay thế cho cách tiếp cận 'biến người dùng' được thảo luận ở trên là áp dụng các lệnh logic khối, sẽ được thảo luận trong phần tiếp theo.