Thứ Hai, 19 tháng 4, 2021

Phần mềm BMS (Phần 1) - Kiến trúc phần mềm

Phần mềm BMS là một phần không thể thiếu trong hệ thống BMS, cùng với các bộ điều khiển, các cảm biến và chấp hành. Với mỗi hãng, kiến trúc phần mềm sẽ được xây dựng khác nhau theo tư duy phát triển hệ thống của riêng họ. Tuy nhiên, một phần mềm BMS bao giờ cũng bao gồm các mô đun sau:

1. Các mô đun giao tiếp:

Hệ thống BMS được sinh ra để kết nối hầu hết các hệ thống trong tòa nhà. Mỗi hệ thống có chuẩn giao thức riêng như BACnet, Modbus, OPC... Do vậy, hệ thống BMS phải có khả năng giao tiếp được thông qua tất cả các chuẩn giao thức này và mô đun giao tiếp giúp thực hiện chức năng này. Thông thường các hãng hay gọi các mô đun giao tiếp của các chuẩn là "driver", cũng giống như một máy tính PC thì cần các driver để kết nối các thiết bị ngoại vi như chuột, bàn phím, màn hình, card đồ họa...

2. Mô đun cơ sở dữ liệu:

Hệ thống BMS được cấu hình vô cùng phức tạp, do đó, nó phải có một cơ sở dữ liệu được xây dựng riêng để quản lý cấu hình hệ thống. Tuy nhiên, sẽ rất khó cho các kỹ sư tự động hóa, nếu phải thao tác trực tiếp lên các cơ sở dữ liệu đó (SQL, MySQL...) và cũng sẽ rất dễ gây ra lỗi hệ thống. Do vậy, hệ thống BMS phải cung cấp một phần mềm cấu hình cho hệ thống.

3. Mô đun lưu giữ lịch sử:

Dữ liệu lịch sử thường được lưu trữ phục vụ việc phân tích đánh giá hệ thống. Mô đun này có thể được tích hợp trên cùng một server hoặc có thể tách riêng ra một server phục vụ riêng việc lưu trữ.

4. Mô đun giao diện:

Để vận hành hệ thống BMS, không thể thiếu giao diện vận hành. Các giao diện thường được xây dựng bởi các công cụ tạo đồ họa thiết kế riêng cho phần mềm. Hiện nay, các giao diện thường hỗ trợ HTML5 và JAVA để có thể chạy được trên nhiều nền Web và nhiều hệ điều hành khác nhau.

5. Mô đun run-time:

Mô đun run-time sẽ làm nhiệm vụ liên kết các mô đun lại với nhau bởi mô đun run-time. Mô đun này thường được thiết kế dạng Service của Windows và được khởi động tự động cùng với Windows.

Ngoài các mô đun trên, phần mềm còn có các mô đun khác như báo cáo, tự động, lịch trình... phục vụ cho việc hoạt động của phần mềm.

Thứ Hai, 12 tháng 4, 2021

BMS và chuẩn truyền thông BACnet (Phần 6) - Hoạch định hệ thống như thế nào?

Hãy đọc kỹ bài này, nếu bạn muốn triển khai một hệ thống BMS lớn một cách suôn sẻ nhất!

Khi triển khai cho một dự án BMS, các kỹ sư thường chỉ quan tâm đến việc điều khiển chiller ra sao, điều khiển AHU như thế nào... (thực ra cách điều khiển các đối tượng là một phần vô cùng quan trọng, không thể thiếu 😛) Tuy nhiên, lời khuyên chân thành dành cho các bạn kỹ sư, đó là, hãy hoạch định hệ thống của các bạn một cách rõ ràng, trước khi các bạn tiến hành việc lập trình bất kỳ thiết bị nào. Việc hoạch định này cũng giống như một khu đô thị cần phải có quy hoạch đường phố, tổ chức đánh số nhà cho phù hợp rồi mới tiến đến xây cái nhà đẹp 😀. Ví dụ, thành phố Hà Nội, có rất nhiều ngõ ngách với địa chỉ nhà dùng tới cả chục cái xược /, nó cho thấy sự quy hoạch không được hợp lý, dẫn đến việc quản lý cũng trở nên khó khăn hơn.

Vậy, việc hoạch định hệ thống nên thực hiện như thế nào?

Trước tiên, cần phải chia hệ thống theo các khối chức năng (ví dụ khu Chiller, khu AHU...) hoặc theo khu vực về mặt địa lý (ví dụ tầng 1, tầng 2...) hoặc theo tủ (ví dụ DDC-F1, DDC-F2...) Việc này thông thường đã được thực hiện rất tốt bởi các đơn vị tư vấn thiết kế, khi triển khai thực tế chỉ cần điều chỉnh chút ít, hoặc thậm chí không cần điều chỉnh 😍. Với việc này, bạn có thể có một quy cách đặt tên thiết bị phù hợp nhất với từng dự án. Ví dụ: 

- Web8000-Chiller : Tên bộ điều khiển Web8000 của Honeywell quản lý hệ thống Chiller

- Web8000-Chiller-PUB-01-01: Tên bộ điều khiển PUB số 01, thuộc kênh MS/TP số 01 của bộ Web8000-Chiller.

Khi đặt tên như vậy, các bạn có thể xác định nhanh chóng vị trí, chức năng, kết nối logic của thiết bị trên hệ thống.

Bước tiếp theo, các bạn nên xây dựng một sơ đồ kết nối chi tiết về truyền thông của tất cả các bộ điều khiển (kể cả các thiết bị 3rd party kết nối vào hệ thống). Và trên đó, có gắn tên các thiết bị (như quy cách đã trình bày ở trên). Sơ đồ này giúp bạn có hình dung cực kỳ chi tiết về mặt hệ thống, hơn hẳn so với sơ đồ nguyên lý hệ thống của TVTK (thường chỉ vẽ đến tủ DDC).

Bước cuối cùng, và cũng là quan trọng nhất, là bước hoạch định địa chỉ cho các thiết bị BACnet có trong sơ đồ mạng này, để các bạn tạo thành sơ đồ kết nối đầy đủ thông tin nhất ✌💗 Và để biết cách định địa chỉ, chúng ta cần hiểu được các loại địa chỉ như sau:

1. Địa chỉ IP / Subnet Mask / Gateway: Địa chỉ này cần phối hợp với nhà thầu hệ thống mạng (trong trường hợp sử dụng hệ thống mạng chung trong gói mạng), trong trường hợp bạn cấp luôn thiết bị mạng, nên tổ chức nhóm IP riêng cho server, máy trạm, các gateway và các bộ điều khiển mạng.

2. Địa chỉ BACnet Instance: Mỗi thiết bị BACnet được phân biệt bởi một địa chỉ BACnet Instance độc nhất. Nếu hai thiết bị trùng địa chỉ này, có thể dẫn đến mất kết nối một trong hai thiết bị (nhẹ) hoặc lỗi toàn hệ thống (nặng). 

3. Địa chỉ BACnet MAC: Địa chỉ BACnet MAC dùng cho các thiết bị BACnet MS/TP. Các thiết bị có địa chỉ MAC từ 0-254, trong đó 0-127 dùng cho các thiết bị Master, 128-254 dùng cho các thiết bị chỉ chạy chế độ Slave. Địa chỉ MAC thường được chọn bởi các switch gạt địa chỉ (Giống như chọn địa chỉ thiết bị Modbus RTU)

4. Địa chỉ Network Number: Mỗi kênh truyền thông BACnet IP, BACnet MS/TP đều có địa chỉ Network Number riêng để phân biệt. Địa chỉ này giúp phân biệt địa chỉ vật lý các thiết bị, vì có thể có nhiều thiết bị có chung địa chỉ BACnet MAC.

Chi tiết cách hoạch định hệ thống sẽ được mô tả rõ hơn ở bài tiếp theo.

Thứ Bảy, 3 tháng 4, 2021

BMS và chuẩn truyền thông Modbus (Phần 1) - Sự đơn giản nhưng hiệu quả của một chuẩn truyền thông

 


Modbus là giao thức truyền thông được phát triển bởi Modicon (hiện nay là Schneider Electric) vào năm 1979, đầu tiên sử dụng cho các PLC của SE nhưng hiện nay Modbus đã trở thành một chuẩn mở và được sử dụng vô cùng rộng rãi trong các thiết bị điện công nghiệp.

Trong chuỗi bài về BACnet, mình có so sánh sức mạnh của BACnet và Modbus, đề cao sự phù hợp và khả năng của BACnet trong hệ thống BMS. Tuy nhiên, Modbus vẫn tồn tại song hành cùng với BACnet trong các hệ thống BMS và vẫn vô cùng phổ biến trong các hệ thống công nghiệp. Vậy, đâu là điểm mạnh và đâu là điểm yếu của chuẩn Modbus?

Điểm yếu đầu tiên của Modbus, đó là Modbus không hỗ trợ nhiều loại dữ liệu, chỉ bao gồm 4 loại là Coil, Discrete Input, Holding Register và Input Register. Và từ lúc ra đời đến nay, Modbus vẫn duy trì 4 loại dữ liệu này.

Điểm yếu thứ hai của Modbus, đó là Modbus không hỗ trợ các bản tin Unsolicited (các bạn xem bài https://easybms.blogspot.com/2021/03/bms-va-chuan-truyen-thong-bacnet-phan-3.html để hiểu về thuật ngữ này), khiến các các thiết bị tích hợp theo chuẩn Modbus thường không đạt tốc độ truyền thông mong muốn.

Điểm yếu thứ ba của Modbus, đó là Modbus không hỗ trợ tính năng tìm kiếm thiết bị cũng như mô tả các thanh ghi của thiết bị. Việc cấu hình các thiết bị Modbus với các kỹ sư mới vào nghề là vô cùng random 😂 Kể các với các kỹ sư đã tiếp xúc nhiều với Modbus, trong nhiều trường hợp vẫn gặp rất nhiều vất vả với chuẩn truyền thông này.

Vậy, tại sao Modbus vẫn được sử dụng vô cùng rộng rãi ở các thiết bị đo, tự động? Chúng ta vẫn gặp các bộ IO mô đun sử dụng Modbus, các bộ thermostat sử dụng Modbus, kể cả các cảm biến môi trường cũng rất hay hỗ trợ chuẩn này cùng với chuẩn HART?

Lý do phù hợp nhất theo mình, chính là sự "đơn giản" của Modbus!!! Nghĩa là chính các điểm yếu cũng là điểm mạnh của Modbus. Đứng trên vai trò của một nhà sản xuất, việc sử dụng chuẩn Modbus cho các thiết bị có thể được thực hiện vô cùng đơn giản. Chỉ cần khoảng vài trăm dòng lệnh MCU là bạn đã có thể mang chuẩn Modbus lên thiết bị của mình (Với BACnet thì là khoảng vài chục nghìn dòng lệnh!!!). Và như vậy, MCU cũng không cần quá mạnh, quá nhiều bộ nhớ, giảm được chi phí sản xuất vô cùng nhiều. Do đó, với các thiết bị nhỏ, theo các nhà sản xuất, sử dụng Modbus là đủ 😅 Và họ mặc cho các kỹ sư phải đánh vật với thiết bị của mình trong lần đầu tiên sử dụng.

Hi vọng với bài mở đầu này, các bạn kỹ sư sẽ giảm bớt sự ức chế của mình với chuẩn Modbus, hãy sống chung với nó vì nó còn lâu mới biến mất khỏi hệ thống BMS 😂

------------------------------------------------------------

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


BMS và chuẩn truyền thông BACnet (Phần 5) - Data Sharing

Data Sharing

Data Sharing là một trong những tính năng quan trọng nhất của các chuẩn truyền thông trong một hệ thống BMS, vậy, tại sao nó lại cần thiết đến vậy? 😮😮😮
Hãy thử tưởng tượng, với hệ thống cung cấp nước sinh hoạt cho một tòa văn phòng cao 30 tầng, hệ thống bể nước mái ở độ cao 100m, hệ thống bể ngầm và bơm nước sinh hoạt đặt ở tầng hầm. Để điều khiển hệ thống bơm, ta cần phối hợp giữa tín hiệu báo mức ở bể ngầm, ở bể mái và tín hiệu điều khiển và giám sát bơm. Với hệ thống bình thường, ta dây tín hiệu dài cả trăm mét từ tầng mái về tầng hầm, gây sự lãng phí về dây và nhân công.
Điều khiển bơm nước lên bể mái sử dụng phao
BACnet có thể giải quyết việc này rất đơn giản, chỉ bằng cách chia sẻ dữ liệu giữa bộ điều khiển đặt ở tầng hầm và tầng mái. Bộ điều khiển đặt ở tầng mái sẽ giám sát mức nước bể mái, và truyền dữ liệu về mức nước đến bộ điều khiển đặt ở tầng hầm chỉ thông qua một đường kết nối truyền thông duy nhất. Dựa vào thông tin này, bộ điều khiển ở tầng hầm sẽ điều khiển bật và tắt bơm nước. 👏👏👏
Với truyền thông IP, các bộ điều khiển BACnet thậm chí chia sẻ dữ liệu gần như tức thì 😍 với số lượng lớn thiết bị (không chỉ là 1-1). Với hệ thống lớn, việc này có thể giúp các kỹ sư thực hiện các thuật toán điều khiển một cách linh hoạt hơn, với nhiều thông tin hơn từ hệ thống.
Demo chia sẻ dữ liệu giữa nhiều thiết bị DDC
Các bộ điều khiển hỗ trợ chuẩn Modbus cũng có thể thực hiện việc chia sẻ dữ liệu, nhưng phải thực hiện thông qua một thiết bị trung gian, có thể là bộ điều khiển cấp trường, hoặc server hệ thống BMS. Còn với các bộ điều khiển BACnet, việc này được thực hiện trực tiếp giữa các bộ điều khiển với nhau. Do vậy, kể cả khi server bị mất kết nối, việc liên động vẫn có thể xảy ra.

Cơ chế trao đổi dữ liệu
Về bản chất, việc trao đổi dữ liệu đơn thuần là cập nhật giá trị Present Value của đối tượng nguồn (Thiết bị B) vào giá trị Present Value (thực tế là Priority Array) của đối tượng đích (Thiết bị A). Việc trao đổi dữ liệu này thực hiện theo 3 cách sau:
Cách 1: Thiết bị A đọc dữ giá trị Present Value của đối tượng nguồn thuộc thiết bị B theo chu kỳ thời gian. Ví dụ, 5s một lần, A gửi lệnh ReadProperty để đọc trạng thái mức nước ở B.
Cách 2: Thiết bị A thiết lập chế độ COV đối với đối tượng nguồn thuộc thiết bị B, khi đó, nếu giá trị nguồn có sự thay đổi, B sẽ cập nhật thông tin cho A. Ví dụ, khi mức nước đầy, B sẽ thông báo cho A (COVNotification) về mức nước một cách tự động.
Cách 3: Thiết bị B ghi giá trị Present Value của đối tượng nguồn (WriteProperty) vào giá trị Present Value của đối tượng đích.
Thông thường, để giảm tải cho đường truyền, các thiết bị thường sử dụng cách 2 (dùng nhiều nhất) và cách 3. Cách 1 ít được dùng, trừ khi thiết bị nguồn không hỗ trợ cách 2 và 3.
--------------------------------------------------------
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

Thứ Tư, 31 tháng 3, 2021

BMS và chuẩn truyền thông BACnet (Phần 4) - Present Value, Priority Array và Relinquish Default Value

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

Chủ Nhật, 28 tháng 3, 2021

BMS và chuẩn truyền thông BACnet (Phần 3) - Change Of Value

Trong hệ thống SCADA công nghiệp, các máy chủ SCADA khi thu thập dữ liệu sẽ thực hiện theo 2 cách:

- Theo yêu cầu (Solicited) : Các thiết bị chỉ trả lời thông tin dữ liệu khi được hỏi

- Không theo yêu cầu (Unsolicited) : Các thiết bị tự cập nhật dữ liệu mà không cần máy chủ hỏi đến

Một số chuẩn truyền thông công nghiệp chỉ hỗ trợ dạng Solicited như Modbus (lại là chuẩn Modbus 😝), một số chuẩn hỗ trợ cả hai dạng như DNP3.

Trong hệ thống BMS, chuẩn BACnet được thiết kế để có thể chạy theo cả hai cách trên 👏👏👏, cụ thể:

- Theo yêu cầu: Các thiết bị BACnet sẽ sử dụng dịch vụ ReadProperty / ReadPropertyMultiple, để hỏi theo chu kỳ thời gian.

- Không theo yêu cầu: Các thiết bị BACnet sẽ sử dụng dịch vụ UnconfirmedCOV / ConfirmedCOV, gọi chung là COV (viết tắt của Change Of Value)

Vậy COV chạy như thế nào?

Bước 1: BACnet Client (ví dụ máy chủ BMS) sẽ gửi lệnh Subscribe COV đến cho các BACnet Server (ví dụ DDC), bước này để thông báo cho thiết bị rằng cần giám sát dạng COV các đối tượng nào.

Bước 2: Khi có sự thay đổi (theo cấu hình đã đặt sẵn) của đối tượng, thiết bị BACnet Server sẽ gửi thông báo COVNotification về cho BACnet Client, thông báo sẽ bao gồm giá trị của đối tượng. Ví dụ: Khi trạng thái bơm thay đổi (Bật -> Tắt / Tắt -> Bật), hoặc khi nhiệt độ ống gió thay đổi 0.5oC.

Bước 3: Tùy thuộc vào loại thông báo (Confirmed/Unconfirmed), BACnet Server sẽ gửi xác nhận đã nhận được thông báo về cho BACnet Client.

COV lợi hại như thế nào?

Các bạn thử hình dung, nếu không có dịch vụ COV, máy chủ BMS sẽ phải hỏi dữ liệu của DDC theo chu kỳ thời gian. Khi đó, với các hệ thống lớn, ta không thể thiết lập chu kỳ quá nhanh (1s) vì như vậy máy chủ BMS cũng sẽ không xử lý kịp, cũng không thể thiết lập chu kỳ quá chậm (5s) sẽ làm giảm chất lượng hệ thống! 😭 Và chuẩn BACnet có thể sẽ không thể phát triển như đến bây giờ, vì trong trường hợp này, Modbus TCP sẽ được ưu tiên hơn bởi cấu trúc bức điện đơn giản hơn rất nhiều.

Nếu áp dụng COV, với tín hiệu số (BI/BO/BV) sẽ thay đổi rất ít lần trong một ngày (ví dụ, bơm chỉ bật tắt vài lần trong ngày), lượng dữ liệu truyền tải gần như giảm xuống ~ 0%. Với các tín hiệu tương tự (AI/AO/AV) thay đổi nhiều hơn, gần như liên tục, ta phải thiết lập được thông số COV Increment phù hợp để giảm số lượng bản tin cập nhật 💪 Ví dụ với nhiệt độ, ta thiết lập COV Increment = 0.5 oC, khi đó, chỉ lúc nào nhiệt độ thay đổi quá 0.5 oC so với giá trị trước đó, DDC mới cập nhật dữ liệu lên, và theo kinh nghiệm, tần suất gửi dữ liệu chỉ rơi vào khoảng 1 phút - 2 phút.

Xét tổng thể, khi sử dụng COV, ta có thể đáp ứng được tốc độ cập nhật dữ liệu ~ 1s mà giảm được lượng dữ liệu truyền nhận tới hơn 60 lần 👏👏👏. Do vậy, hãy sử dụng COV cho bất kỳ thiết bị nào trong hệ thống BMS nếu bạn có thể. Tất nhiên, việc này chỉ áp dụng được với các DDC có hỗ trợ COV 😂

Tham khảo tài liệu

Solicited vs. Unsolicited Data Acquisition: Which Camp are You?

BACNET - WHAT IS THE BACNET CHANGE OF VALUE (COV)

------------------------------------------------------------

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

Thứ Năm, 25 tháng 3, 2021

Làm quen với lập trình Block trong BMS (Phần 2)

Ở phần trước, chúng ta đã biết đến các cách lập trình PLC/DDC khác nhau. Bài này sẽ giới thiệu rõ hơn về lập trình Function Block (FB) hay gọi tắt là lập trình Block.

Đúng như cách gọi của nó, lập trình Block được thực hiện bằng cách ghép các khối Block lại với nhau. Mỗi khối có một chức năng riêng biệt và khi được liên kết với nhau, chúng tạo thành một chương trình hoàn thiện, đơn giản có mà phức tạp cũng có. 😄😎

Với các kỹ sư điều khiển tự động hay tự động hóa, để lập trình các bộ điều khiển PID sử dụng C/C++ là một công việc khá vất vả, các bạn phải hiểu rất rõ về PID và khả năng lập trình rất tốt để có thể chuyển hóa kiến thức của mình vào trong bộ điều khiển. Nhưng với lập trình Block, việc này thực hiện vô cùng dễ dàng. Bạn chỉ cần kéo khối PID vào chương trình và... xong! Điều bạn quan tâm bây giờ chỉ là chỉnh định thông số như thế nào cho phù hợp. Điều đó có thể thực hiện được, bởi các kỹ sư phần cứng của các hãng đã giúp bạn thực hiện ngầm các lệnh PID ở trong firmware của thiết bị. 💓

1. Các thông tin của 1 block

Một block thường được hiển thị bằng một hình chữ nhật, có tên, số thứ tự, các terminal đầu vào và ra. Ngoài ra, một số thiết kế block phức tạp hơn sẽ có thêm việc gán các thông số ngay trên block.

Mỗi block sẽ có một chức năng riêng, ví dụ các hàm logic như AND/OR/XOR/NOT, các hàm toán học như ADD/SUB/MUL/DIV... hoặc các hàm điều khiển như HYS/PID... Mỗi một bộ điều khiển của các hãng sẽ hỗ trợ các tập lệnh cơ bản khác nhau và các kỹ sư phải lập trình dựa trên tập lệnh đó.

2. Phương pháp lập trình

Lập trình Block thực sự giúp cho kỹ sư tiếp cận được với hệ thống BMS một cách nhanh chóng mà không cần phải nhớ quá nhiều các câu lệnh. Và việc thực hiện lập trình khối lệnh cũng cực đơn giản với khả năng kéo thả "drag & drop". 

Hướng dẫn lập trình DDC: https://www.youtube.com/watch?v=TunO1kiIVeY


Phần mềm BMS (Phần 1) - Kiến trúc phần mềm

Phần mềm BMS là một phần không thể thiếu trong hệ thống BMS, cùng với các bộ điều khiển, các cảm biến và chấp hành. Với mỗi hãng, kiến trúc ...