Phần này khá dễ hiểu, tuy nhiên nhiều kỹ sư không để ý nên không biết!
Các kỹ sư khi mới làm quen với việc triển khai lập trình cho hệ thống BMS sẽ không hiểu nhiều về giá trị của các đối tượng (object) trong BACnet, cụ thể là các đối tượng có thể ghi giá trị như AO, AV, BO, BV...
Đầu tiên, ta hãy làm quen với thuộc tính (property) Present Value. Đúng với ý nghĩa của nó, thuộc tính Present Value chính là giá trị hiện tại của một đối tượng. Ví dụ: Nhiệt độ phòng đo được là 25 oC thì giá trị thuộc tính Present Value sẽ bằng 25. Nó là giá trị được thể hiện trên giao diện đồ họa BMS, và cũng là giá trị được sử dụng để tính toán và điều khiển ra phần cứng của DDC.
Tuy nhiên, BACnet ngoài thuộc tính Present Value, còn có thêm thuộc tính Priority Array cho các đối tượng có thể ghi giá trị. Priority Array là một mảng 16 giá trị được đánh số thứ tự từ 1-16.
Mảng này hoạt động như sau:
Để xác định giá trị của Present Value, thiết bị sẽ tìm kiếm giá trị trong mảng Priority Array từ 1-16. Nếu phần tử nào có giá trị (# null) thì thiết bị sẽ đẩy giá trị đó ra thuộc tính Present Value.
Ví dụ: Nếu mảng Priority Array có giá trị là (null, null, 1, null...) thì giá trị của Present Value sẽ là 1.
Mục đích của việc tạo ra bảng này, là để cho phép các thiết bị với các mức ưu tiên khác nhau điều khiển tới đối tượng BACnet. Cụ thể:
- Mức ưu tiên 1/2: Dùng cho mục đích an toàn sinh mạng, ví dụ, khi có cháy, hệ thống sẽ ghi giá trị ON ở mức ưu tiên 1 để bật bơm báo cháy. Khi đó, các chương trình tự động sẽ không có quyền điều khiển bơm.
- Mức ưu tiên 5: Điều khiển khẩn cấp thiết bị, ví dụ gạt nút điều khiển cưỡng bức các cổng ra ngay trên thiết bị DDC.
- Mức ưu tiên 8: Điều khiển bởi người vận hành, thông qua giao diện HMI
- Mức ưu tiên 12: Điều khiển tự động bởi chương trình DDC
Tùy vào mức độ linh hoạt, các kỹ sư có thể lập trình để các bộ điều khiển hoạt động đúng với kịch bản nhất có thể.
Khi vận hành, nếu các đối tượng điều khiển bị giữ ở các mức cưỡng bức, người vận hành sẽ phải ra lệnh "Relinquish Default" cho đối tượng đó. Khi đó, các giá trị trong mảng Priority Array sẽ bị xóa và thiết bị điều khiển sẽ chạy theo logic được cài đặt trong chương trình. Nếu tất cả mảng Priority Array đều là #null, thì giá trị Present Value sẽ được lấy từ giá trị Relinquish Default Value, giá trị này sẽ được cài đặt khi lập trình DDC.
Sau khi đọc xong bài này, nếu gặp tình huống thiết bị điều khiển chạy không đúng theo chương trình (ví dụ bơm chạy mãi không dừng), thì hãy bình tĩnh xem giá trị ở bảng Priority Array xem thiết bị có đang bị điều khiển cưỡng bức với mức ưu tiên cao hơn bình thường hay không !!! 💪💪💪
Hi vọng với bài này, các bạn có thể hiểu thêm phần nào về việc điều khiển các đối tượng BACnet và các bạn có thể áp dụng kiến thức này để đa dạng hóa cách lập trình thiết bị của mình!
---------------------------------------------------------
Liên hệ với tác giả:
Nguyễn Tuấn Minh
Điện thoại: 0983504018
Email: minhnt152@gmail.com
Nhóm Easy BMS - Easy Integration
Không có nhận xét nào:
Đăng nhận xét