Tích hợp dữ liệu vào Thingsboard từ các hệ thống SCADA thông qua giao thức OPC-UA
Giới thiệu
Tài liệu này sẽ hướng dẫn các bạn:
- Kết nối với local KEPServerEX chạy trên window.
- Truyền tải dữ liệu OPC-UA đến Thingsboard
- Hiển thị dữ liệu OPC-UA lên Thingsboard
Giả sử như bạn đã cài đặt KEPServerEX trên window
SCADA là gì?
SCADA (Supervisory Control And Data Acquisition) hiểu theo nghĩa truyền thống là một hệ thống điều khiển giám sát và thu thập dữ liệu. Nhằm hỗ trợ con người trong quá trình giám sát và điều khiển từ xa.
Hệ thống SCADA đóng vai trò quan trọng với công nghiệp. SCADA đảm bảo sự hiệu quả cho dây chuyền sản xuất, xử lí dữ liệu để đưa ra những quyết định (decision), và kịp thời quản lí các vấn đề phát sinh trong hệ thống công nghiệp.
Một hệ thống SCADA bao gồm:
- Các cảm biến (sensors) được kết nối với các PLC
- Các PLC
- Các HMI (Human-Machine Interface) panel và HMI Computer
Hệ thống SCADA hiện đại – OPC
Hệ thống SCADA hiện đại được kết nối thông qua OPC.
OPC (Open Platform Communications) là các chuẩn đặc trưng trong viễn thông công nghiệp, nguồn gốc từ chuẩn giao tiếp OLE for Process Control (Object Linking and Embeded for Process Control) được phát triển năm 1996.
OPC-DA
OPC-DA (OPC Data Access) là chuẩn giao tiếp đặc trưng để truyền tải dữ liệu thực (real-time data) giữa nguồn dữ liệu (data source) và nơi chứa dữ liệu (data sink) mà không cần thông qua các giao tiếp vốn có của chúng.
Năm 1994, đặc tả OPC đầu tiên là OPC Data Access hay là OPC truy cập dữ liệu thời gian thực quy định cách thức truy cập SCADA (Client) đến PLC thông qua phần mềm (Server) chạy trên máy tính hệ điều hành Windows. Hiện nay các phần mềm SCADA kết nối với các PLC thông qua 3 cách phổ biến:
- Thông qua driver trực tiếp. SCADA sử dụng các hàm đọc/ghi/cấu hình ở trong file driver (DLL) để truy cập đến PLC;
- Thông qua DDE Server, SCADA đóng vai trò là DDE Client;
- Thông qua OPC Server, SCADA đóng vai trò là OPC Client (OPC ở đây là OPC DA). Thực tế người dùng (kỹ sư lập trình SCADA) hay dùng driver trực tiếp để kết nối với PLC. Khi không có driver trực tiếp, người dùng mới sử dụng OPC DA bởi một số điểm hạn chế của OPC DA;
OPC-UA
OPC-UA (OPC Unified Architecture) được hiểu là một chuẩn truyền thông bậc cao độc lập, được phát triển bởi hiệp hội OPC Foundation, nhưng OPC-UA hoàn toàn khác trước so với đặc tả đàn anh của mình OPC DA. Chính vì vậy OPC UA được hiểu bằng cụm từ Open Platform Communication (OPC) Unified Architecture (UA) nhằm tránh đi cụm từ đã không hợp thời OLE for Process Control của OPC DA và những đặc tả khác.
OPC DA hoàn toàn là hệ điều hành phụ thuộc trong khi OPC-UA độc lập với hệ điều hành. Một số ứng dụng OPC UA SDK có thể được tạo trên một nền tảng mà hệ điều hành không có mặt.
Cách giao tiếp của OPC-DA là COM /DCOM còn OPC-UA là TCP/IP hoặc HTTPS.
Máy chủ OPC UA có thể là hệ điều hành độc lập (hoàn toàn phụ thuộc vào loại SDK). Trong tương lai nếu muốn di chuyển sang bất kỳ hệ điều hành nào thì nó sẽ không bị ảnh hưởng trước.
Tích hợp OPC-UA với Thingsboard
Bước1: Cài đặt và khởi động Thingsboard Gateway:
Cũng như Thingsboard, Thingsboard Gateway yêu cầu Java 8. Download phiên bản mới nhất của Thingsboard Gateway tại:
https://github.com/thingsboard/thingsboard-gateway/releases
Sau khi đã tải tb-gateway về, thực thi câu lệnh:
rpm -Uvh tb-gateway-your_version.rpm
Thay you_version bằng version bạn đã tải về
Sau đó khởi động Thingsboard Gateway dưới dạng service của CentOS
sudo service tb-gateway start
Sau đó, vào đăng nhập vào Thingsboard Web UI > Vào mục Devices tạo thiết bị và tick vào ô Is Gateway
Sau khi đã tạo Devices là gateway, ta vào lấy ACCESS_TOKEN
Sau khi lấy ACCESS_TOKEN ta vào chỉnh sửa file config của Gateway:
sudo vi /etc/tb-gateway/conf/tb-gateway.yml
Ở phần
connection: host: "${GATEWAY_HOST:YOUR_HOST}" port: 1883 retryInterval: 3000 maxInFlight: 1000 security: accessToken: "${GATEWAY_ACCESS_TOKEN:YOUR_TOKEN}"
thay YOUR_HOST và YOUR_TOKEN bằng host của Thingsboard (nếu bạn cài đặt Thingsboard và Thingsboard Gateway ở chung một server thì sẽ là localhost) và ACCESS_TOKEN lấy từ phần ở trên.
Cấu hình cho KEPServerEX
Bước 2.1: Cung cấp xác thực của gateway cho KEPServerEX
Mở cửa sổ OPC UA Configuration Manager > Hướng đến tab Trusted Clients
Import file example.der từ folder configuration của gateway được lưu tại:
Linux: /etc/tb-gateway/conf
Lưu ý: nếu như certificate hết hạn, bạn có thể generate sử dụng lệnh:
keytool -genkeypair -v -alias gateway -dname "CN=Thingsboard Gateway, OU=TB, O=ThingsBoard, L=San Francisco, ST=CA, C=US" -keystore example.jks -keypass secret -storepass secret -keyalg RSA -keysize 2048 -validity 9999 keytool -importkeystore -srckeystore example.jks -destkeystore example.pfx -srcstoretype JKS -deststoretype PKCS12 -srcstorepass secret -deststorepass secret -srcalias gateway -destalias gateway -srckeypass secret -destkeypass secret -noprompt keytool -exportcert -alias gateway -keypass secret -keystore example.pfx -storepass secret -file example.der
Bước 2.2: Thêm server endpoint cho KEPServerEX
Nếu như bạn cài đặt KEPServerEX với Thingsboard Gateway ở hai server khác nhau thì KEPServerEX cần được tùy chỉnh để remote connection.
Mở OPC UA Configuration Manager > Hướng đến tab Server Endpoints và cấu hình
Kích hoạt OPC-UA extension.
Mở file
sudo vi /etc/tb-gateway/conf/tb-gateway.yml
Tìm dòng
extensions: - id: "http" type: "HTTP" extensionConfiguration: http-config.json
Thêm vào:
id: "opc" type: "OPC UA" extensionConfiguration: opc-config.json
Mở file
sudo vi /etc/tb-gateway/conf/opc-config.json
Chỉnh sửa như code
"servers": [{ "applicationName": "Thingsboard OPC-UA client", "applicationUri": "", "host": "YOUR_KEPSERVEREX_HOST", "port": YOUR_PORT, "scanPeriodInSeconds": 10, "timeoutInMillis": 5000, "security": "Basic128Rsa15", "identity": { "type": "anonymous" }, "keystore": { "type": "PKCS12", "location": "example.pfx", "password": "secret", "alias": "gateway", "keyPassword": "secret" }, "mapping": [{ "deviceNodePattern": "Channel1.Device1", "deviceNamePattern": "Device ${_System._DeviceId}", "attributes": [{ "key": "Tag1", "type": "string", "value": "${Tag1}" }], "timeseries": [{ "key": "Tag2", "type": "long", "value": "${Tag2}"}] }]}]
Lưu ý: Những giá trị YOUR_HOST, YOUR_PORT là tùy chỉnh theo từng máy
Truyền dữ liệu
Tạo file opc-ua-extension.json với nội dung:
[{ "id": "opc", "type": "OPC UA", "configuration": { "servers": [{ "applicationName": "Thingsboard OPC-UA client", "applicationUri": "", "host": "YOUR_KEPSERVEREX_HOST", "port": YOUR_PORT, "scanPeriodInSeconds": 10, "timeoutInMillis": 5000, "security": "Basic128Rsa15", "identity": { "type": "anonymous" }, "keystore": { "type": "PKCS12", "location": "example.pfx", "password": "secret", "alias": "gateway", "keyPassword": "secret"]}, "mapping": [{ "deviceNodePattern": "Channel1.Device1", "deviceNamePattern": "Device ${_System._DeviceId}", "attributes":{ "key": "Tag1", "type": "string", "value": "${Tag1}" }], "timeseries": [{ "key": "Tag2", "type": "long", "value": "${Tag2}"}] }]}]}}]
Sau đó import vào phần Extension của Device Gateway vừa tạo ở trên
Lưu ý:
Ở phần
"deviceNodePattern": "Channel1.Device1",
Cần chỉnh sửa sao cho phù hợp với tên node trên KEPServerEX.