Disclaimer:
- bài viết dành cho các bạn đã từng học và làm PLC 1 thời gian
- bài viết dự trên PLC của Rockwell, tuy nhiên phương pháp này áp dụng được cho các dòng PLC khác có hỗ trợ user-defined instruction
- bài viết dành cho các bạn đã từng học và làm PLC 1 thời gian
- bài viết dự trên PLC của Rockwell, tuy nhiên phương pháp này áp dụng được cho các dòng PLC khác có hỗ trợ user-defined instruction
Bài học đầu tiên khi xử lý tín hiệu analog
Tín hiệu analog trong PLC được define từ hoặc 4-20mA, hoặc cổ hơn là 0-20mA, hoặc 0-10V, hoặc 0-5V.
Trong trường, các thầy cô sẽ thường dạy như sau:
Trong 1 dự án có hệ thống quy trình, sử dụng 1 instrument đo nhiệt độ Tag là T1101, thì mình sẽ tạo các tag:
- T1101_Input (DINT), map với giá trị của IO
- T1101_Value (REAL), là giá trị sau khi quy đổi
- T1101_InputRawMin (DINT): giá trị PLC trả về ở giá trị tối thiểu của channel (ví dụ 0 = 0mA)
- T1101_InputRawMax (DINT): giá trị PLC trả về ở giá trị tối đa của channel (ví dụ 30840 = 20mA)
- T1101_EUMin (REAL): giá trị đo tối thiểu instrument T1101 sẽ trả về (ví dụ 0mA = 0 độ C)
- T1101_EUMax (REAL): giá trị đo tối thiểu instrument T1101 sẽ trả về (ví dụ 20mA = 100 độ C)
Để xác định InputRawMin, InputRawMax thì bạn nên có 1 bộ signal calibrator để phát dòng 0,4,20mA chuẩn (hoặc 0-5V / 0-10V chuẩn). Để xác định EUMin và EUMax thì cần kiểm tra cấu hình của instrument, cũng như thực hiện calibration trên thiết bị này.
Phép toán ở đây sẽ là
Value = [(EUMax-EUMin) / (InputRawMax-InputRawMin)] X (Input-InputRawMin) + EUMin
Trong trường, các thầy cô sẽ thường dạy như sau:
Trong 1 dự án có hệ thống quy trình, sử dụng 1 instrument đo nhiệt độ Tag là T1101, thì mình sẽ tạo các tag:
- T1101_Input (DINT), map với giá trị của IO
- T1101_Value (REAL), là giá trị sau khi quy đổi
- T1101_InputRawMin (DINT): giá trị PLC trả về ở giá trị tối thiểu của channel (ví dụ 0 = 0mA)
- T1101_InputRawMax (DINT): giá trị PLC trả về ở giá trị tối đa của channel (ví dụ 30840 = 20mA)
- T1101_EUMin (REAL): giá trị đo tối thiểu instrument T1101 sẽ trả về (ví dụ 0mA = 0 độ C)
- T1101_EUMax (REAL): giá trị đo tối thiểu instrument T1101 sẽ trả về (ví dụ 20mA = 100 độ C)
Để xác định InputRawMin, InputRawMax thì bạn nên có 1 bộ signal calibrator để phát dòng 0,4,20mA chuẩn (hoặc 0-5V / 0-10V chuẩn). Để xác định EUMin và EUMax thì cần kiểm tra cấu hình của instrument, cũng như thực hiện calibration trên thiết bị này.
Phép toán ở đây sẽ là
Value = [(EUMax-EUMin) / (InputRawMax-InputRawMin)] X (Input-InputRawMin) + EUMin
Đây là cách cơ bản nhất mà tất cả mọi người được học trong các trương để xử lý tín hiệu analog, và cách này không có gì sai với hệ thống đơn giản chỉ có 1-2 analog input.
Trong quá trình học trong trường, các thầy cô sẽ có thể yêu cầu tạo thêm bit để giả lập tín hiệu Input và giá trị đầu ra để test với các chương trình khác. Việc này rất quan trọng cho việc kiểm tra chương trình trước khi chạy thực tế commissioning sau này.
Mình tạo thêm các tag
T1101_SimulateInputEnable (BOOL): bật tắt chế độ giả lập cho input
T1101_SimulateInput (DINT): giá trị giả lập cho input
T1101_SimulateValueEnable (BOOL): bật tắt chế độ giả lập cho giá trị cuối
T1101_SimulateValue (REAL): giá trị giả lập cho giá trị Value
Đoạn chương trình sau đó sẽ được viết như dưới. Khi cần giả lập giá trị thì bật các bit enable lên ,
Trong quá trình học trong trường, các thầy cô sẽ có thể yêu cầu tạo thêm bit để giả lập tín hiệu Input và giá trị đầu ra để test với các chương trình khác. Việc này rất quan trọng cho việc kiểm tra chương trình trước khi chạy thực tế commissioning sau này.
Mình tạo thêm các tag
T1101_SimulateInputEnable (BOOL): bật tắt chế độ giả lập cho input
T1101_SimulateInput (DINT): giá trị giả lập cho input
T1101_SimulateValueEnable (BOOL): bật tắt chế độ giả lập cho giá trị cuối
T1101_SimulateValue (REAL): giá trị giả lập cho giá trị Value
Đoạn chương trình sau đó sẽ được viết như dưới. Khi cần giả lập giá trị thì bật các bit enable lên ,
Trong thực tế, các hệ thống đo lường sẽ được thiết lập cùng các alarm để đảm bảo rằng giá trị đo được không bao giờ vượt quá ngưỡng quá thấp hoặc quá cao, gây nguy hiểm.
Thực tế sẽ gồm 4 mốc giá trị
High (H) - cảnh báo mức cao
High High (HH) - báo động rất cao, dùng cho tắt thiết bị bắt buộc (forced shutdown)
Low (L) - cảnh báo mức thấp
LowLow (LL ) - cảnh báo mức rất thấp - dùng cho tắt thiết bị bắt buộc (forced shutdown)
Mình sẽ tạo thêm 3 tag cho mỗi mức, tổng cộng 12 tag
AlarmEnable (BOOL): dùng để bật nếu có sử dụng alarm
AlarmValue (DINT hoặc REAL): dùng để set mức độ alarm
Alarm (BOOL): khi alarm xảy ra thì bit này sẽ chuyển sang 1.
Mình sẽ làm các hàm so sánh để chạy alarm cho các mức
Thực tế sẽ gồm 4 mốc giá trị
High (H) - cảnh báo mức cao
High High (HH) - báo động rất cao, dùng cho tắt thiết bị bắt buộc (forced shutdown)
Low (L) - cảnh báo mức thấp
LowLow (LL ) - cảnh báo mức rất thấp - dùng cho tắt thiết bị bắt buộc (forced shutdown)
Mình sẽ tạo thêm 3 tag cho mỗi mức, tổng cộng 12 tag
AlarmEnable (BOOL): dùng để bật nếu có sử dụng alarm
AlarmValue (DINT hoặc REAL): dùng để set mức độ alarm
Alarm (BOOL): khi alarm xảy ra thì bit này sẽ chuyển sang 1.
Mình sẽ làm các hàm so sánh để chạy alarm cho các mức
Với các bước như mình hướng dẫn, việc xử lý 1 tín hiệu analog sang giá trị thực tế, giả lập giá trị và tạo alarm đã được hoàn tất.
Tổng cộng là 8 dòng lệch cho 1 tín hiệu Analog.
Khi xử lý 1 dự án nhỏ 1-2 tín hiệu analog, việc viết cho từng thiết bị sẽ đơn giản, và khi xử lý trên HMI, việc xử lý từng giá trị cũng có thể được làm khá nhanh, nhất là khi bạn chưa có nhiều kinh nghiệm làm các graphic phức tạp trên HMI
Tuy nhiên, phương pháp này sẽ gặp vấn đề khi bạn có rất nhiều analog input trong dự án. Trong những dự án của mình từng làm, ít nhất có 30-40 giá trị analog trong 1 hệ process nhỏ, đến hàng trăm trong 1 hệ process lớn, hoặc hàng ngàn trong hệ thống nhà máy công nghiệp nặng. Khi xử lý như trên, tạo 8 dòng, 22 tag mỗi input với các tính năng cơ bản trong PLC, chưa kể trên màn hình là 1 cực hình.
Tổng cộng là 8 dòng lệch cho 1 tín hiệu Analog.
Khi xử lý 1 dự án nhỏ 1-2 tín hiệu analog, việc viết cho từng thiết bị sẽ đơn giản, và khi xử lý trên HMI, việc xử lý từng giá trị cũng có thể được làm khá nhanh, nhất là khi bạn chưa có nhiều kinh nghiệm làm các graphic phức tạp trên HMI
Tuy nhiên, phương pháp này sẽ gặp vấn đề khi bạn có rất nhiều analog input trong dự án. Trong những dự án của mình từng làm, ít nhất có 30-40 giá trị analog trong 1 hệ process nhỏ, đến hàng trăm trong 1 hệ process lớn, hoặc hàng ngàn trong hệ thống nhà máy công nghiệp nặng. Khi xử lý như trên, tạo 8 dòng, 22 tag mỗi input với các tính năng cơ bản trong PLC, chưa kể trên màn hình là 1 cực hình.
Tạo add-on instruction (hoặc user-defined instruction)
Đối với 1 số SI /OEM lớn hoặc 1 số tập đoàn quốc tế (ví dụ như Nestle mình từng làm) sử dụng 1 hệ thống function và tag lặp đi lặp lại đối với từng cụm thiết bị cố định. Đối với Rockwell và Studio5000, cái này gọi là add-on instruction. Mình sẽ tạo 1 add-on instruction cho Việc xử lý analog input, tên là Analog_Input với các parameter và logic tương tự như vừa nãy mình làm cho từng dòng lệnh
Sau khi tạo xong, mỗi khi bạn tạo thêm 1 tín hiệu analog mới, bạn chỉ cần tạo 1 tag với data type là Analog_Input và sử dụng block Analog_input dưới dạng ladder hoặc FB. mình tạo 3 tag T1102, T1103, T1104 như mẫu bên dưới.
Với việc sử dụng AOI, việc lập trình và xử lý các tín hiệu analog sẽ nhanh chóng hơn gấp nhiều lần so với lập trình từng dòng nếu bạn phải lập trình với nhiều tín hiệu analog.
Việc tạo AOI cũng có thể được dùng chung với việc tạo thêm Global Object trên FactoryTalkView ME / SE hoặc customized / scripted object trên các platform khác. Khi đó, bạn có thể map được 1 object với màn hình chỉ với 1 lần map tag duy nhất (thay vì nhiều lần như viết từng dòng / tag từng dòng). Bạn có thể tưởng tượng lượng thời gian có thể tiết kiệm được với phương pháp này.
Tuy nhiên, phương pháp này không phải không có điểm yếu:
- Bạn phải tự set up 1 bộ thư viện riêng (ngoài analog còn có digital, motor đủ các loại, van các loại) và việc này không hề dễ dàng đối với 1 công ty chưa có nhiều kinh nghiệm
- Việc setup 1 bộ thư viện cho 1 tập đoàn lớn sẽ khiến các SI chưa từng / ít làm với tập đoàn đó bối rối khi triển khai dự án
- AOI được tự viết, vì thế documentation cho nó sẽ không đầy đủ và khi chuyển giao giữa các thế hệ, việc maintain hệ thống sẽ không dễ dàng
- Việc configuration của AOI cần phải hiểu AOI và ý nghĩa các parameter. Hiện tại AOI analog của mình chỉ có 20 parameter đã thấy rất rối, thực tế các bộ AOI lớn có thể có hàng trăm parameter và việc hiểu cách dùng nó không hề đơn giản.
- AOI có thể tự viết và tự sửa sẽ không phù hợp với các ngành có tính an toàn cao và đặc thù cần được validation từng dòng lệnh, ví dụ dầu khí , hoá chất và dược. Sự không đảm bảo của validation sẽ khiến việc sử dụng AOI trong các dự án lớn cần được chủ đầu tư validate và sẽ tốn nhiều công sức.
Việc tạo AOI cũng có thể được dùng chung với việc tạo thêm Global Object trên FactoryTalkView ME / SE hoặc customized / scripted object trên các platform khác. Khi đó, bạn có thể map được 1 object với màn hình chỉ với 1 lần map tag duy nhất (thay vì nhiều lần như viết từng dòng / tag từng dòng). Bạn có thể tưởng tượng lượng thời gian có thể tiết kiệm được với phương pháp này.
Tuy nhiên, phương pháp này không phải không có điểm yếu:
- Bạn phải tự set up 1 bộ thư viện riêng (ngoài analog còn có digital, motor đủ các loại, van các loại) và việc này không hề dễ dàng đối với 1 công ty chưa có nhiều kinh nghiệm
- Việc setup 1 bộ thư viện cho 1 tập đoàn lớn sẽ khiến các SI chưa từng / ít làm với tập đoàn đó bối rối khi triển khai dự án
- AOI được tự viết, vì thế documentation cho nó sẽ không đầy đủ và khi chuyển giao giữa các thế hệ, việc maintain hệ thống sẽ không dễ dàng
- Việc configuration của AOI cần phải hiểu AOI và ý nghĩa các parameter. Hiện tại AOI analog của mình chỉ có 20 parameter đã thấy rất rối, thực tế các bộ AOI lớn có thể có hàng trăm parameter và việc hiểu cách dùng nó không hề đơn giản.
- AOI có thể tự viết và tự sửa sẽ không phù hợp với các ngành có tính an toàn cao và đặc thù cần được validation từng dòng lệnh, ví dụ dầu khí , hoá chất và dược. Sự không đảm bảo của validation sẽ khiến việc sử dụng AOI trong các dự án lớn cần được chủ đầu tư validate và sẽ tốn nhiều công sức.
DCS configuration bằng PlantPAx - P controller
Hiện tại Rockwell Automation có 1 bộ thư viện là PlantPAx 5.0 được tích hợp trực tiếp trong firmware của controller để sử dụng với các hệ thống Process. Trong bài này , mình sẽ chỉ lấy tín hiệu Analog để xử lý.
Hệ thống thư viện này được viết sẵn trong các Process control của Rockwell với firmware 33 trở lên. Ví dụ 1756-L81EP hoặc 5069-L320ERP là 2 controller process nhỏ nhất cho dòng controllogix và compactlogix.
Hệ thống thư viện này được viết sẵn trong các Process control của Rockwell với firmware 33 trở lên. Ví dụ 1756-L81EP hoặc 5069-L320ERP là 2 controller process nhỏ nhất cho dòng controllogix và compactlogix.
Sau khi xác định controller đúng là dòng Process controller, thư viện PlantPAx 5.0 sẽ được load và sẵn sàng cho việc sử dụng.
Đối với các dự án lớn, bạn có thể sử dụng System Estimator / Integrated Architecture Builder để xác lập và config các IO qua bảng I/O map, không cần phải làm thủ công trong Studio 5000. Tuy nhiên, mình sẽ hướng dẫn cách làm thủ công vì nó quen thuộc hơn.
Tương tự như vừa nãy làm với AOI, mình tạo ví dụ tag T1105 với Data type là P_ANALOG_INPUT (data type này có sẵn).
Sau đó, mình tạo 1 function block với PAI, kéo tín hiệu analog input từ IO channel vào là xong.
Đối với các dự án lớn, bạn có thể sử dụng System Estimator / Integrated Architecture Builder để xác lập và config các IO qua bảng I/O map, không cần phải làm thủ công trong Studio 5000. Tuy nhiên, mình sẽ hướng dẫn cách làm thủ công vì nó quen thuộc hơn.
Tương tự như vừa nãy làm với AOI, mình tạo ví dụ tag T1105 với Data type là P_ANALOG_INPUT (data type này có sẵn).
Sau đó, mình tạo 1 function block với PAI, kéo tín hiệu analog input từ IO channel vào là xong.
Việc config các parameter và các tính năng cao cấp (nhiều cái mình ko dùng tới) cũng được làm thành 1 giao hiện hoàn chỉnh và dễ nhìn hơn so với 1 bảng parameter mà không ai hiểu cái gì nghĩa là gì
Các giao diện của PlantPAx cho phần SCADA (FactoryTalkView Site Edition) cũng đã được làm sẵn trên cho các object tương tự như với AOI, mọi người chỉ cần lôi ra, map tag 1 lần là có thể sử dụng. Trên FactoryTalkView SE, các object được thiết kế sẵn theo tiêu chuẩn ISA dành cho high-performance graphic interface, nhìn phát biết ngay item nào đang alarm.
Ưu thế của sử dụng thư viện PlantPAx so với AOI:
- không cần phải thiết kế lại mà mọi thứ đã có sẵn, chỉ việc dùng
- validatation và documentation có sẵn và do Rockwell lo, nên dùng được cho ngành dược / dầu khí / hoá chất
- việc configuration trực quan hơn, dễ theo dõi hơn cho engineer, không. phải ngồi tìm hiẻu về từng customized AOI nữa
- việc phân chia khối Alarm theo khu vực, phân quyền người dùng với xử lý alarm cũng sẽ dễ tích hơp hơn rất nhiều so với AOI tự viết
- tích hợp sâu hơn cho các phần mềm điều khiển lớp trên / analytics sau này.
Ưu thế của sử dụng thư viện PlantPAx so với AOI:
- không cần phải thiết kế lại mà mọi thứ đã có sẵn, chỉ việc dùng
- validatation và documentation có sẵn và do Rockwell lo, nên dùng được cho ngành dược / dầu khí / hoá chất
- việc configuration trực quan hơn, dễ theo dõi hơn cho engineer, không. phải ngồi tìm hiẻu về từng customized AOI nữa
- việc phân chia khối Alarm theo khu vực, phân quyền người dùng với xử lý alarm cũng sẽ dễ tích hơp hơn rất nhiều so với AOI tự viết
- tích hợp sâu hơn cho các phần mềm điều khiển lớp trên / analytics sau này.