[Node-RED] Giao tiếp S7-1200 với Node-RED qua MQTT

 

Giao tiếp S7-1200 với Node-RED qua MQTT

MQTT là gì?

MQTT (Message Queuing Telemetry Transport) là giao thức truyền thông điệp (message) theo mô hình publish/subscribe (cung cấp / thuê bao), được sử dụng cho các thiết bị IoT với băng thông thấp, độ tin cậy cao và khả năng được sử dụng trong mạng lưới không ổn định. Nó dựa trên một Broker (tạm dịch là “Máy chủ môi giới”) “nhẹ” (khá ít xử lý) và được thiết kế có tính mở (tức là không đặc trưng cho ứng dụng cụ thể nào), đơn giản và dễ cài đặt.

Tính năng, đặc điểm nổi bật

  • Dạng truyền thông điệp theo mô hình Pub/Sub cung cấp việc truyền tin phân tán một chiều, tách biệt với phần ứng dụng.
  • Việc truyền thông điệp là ngay lập tức, không quan tâm đến nội dung được truyền.
  • Sử dụng TCP/IP là giao thức nền.
  • Tồn tại ba mức độ tin cậy cho việc truyền dữ liệu (QoS: Quality of service)
  • QoS 0: Broker/client sẽ gửi dữ liệu đúng một lần, quá trình gửi được xác nhận bởi chỉ giao thức TCP/IP.
  • QoS 1: Broker/client sẽ gửi dữ liệu với ít nhất một lần xác nhận từ đầu kia, nghĩa là có thể có nhiều hơn 1 lần xác nhận đã nhận được dữ liệu.
  • QoS 2: Broker/client đảm bảo khi gửi dữ liệu thì phía nhận chỉ nhận được đúng một lần, quá trình này phải trải qua 4 bước bắt tay.
  • Phần bao bọc dữ liệu truyền nhỏ và được giảm đến mức tối thiểu để giảm tải cho đường truyền.

Ưu điểm của giao thức MQTT

  • Truyền thông tin hiệu quả hơn.
  • Tăng khả năng mở rộng.
  • Giảm đáng kể tiêu thụ băng thông mạng.
  • Rất phù hợp cho điều khiển và do thám.
  • Tối đa hóa băng thông có sẵn.
  • Chi phí thấp.
  • Rất an toàn, bảo mật.
  • Được sử dụng trong các ngành công nghiệp dầu khí, các công ty lớn như Amazon, Facebook, ….
  • Tiết kiệm thời gian phát triển.
  • Giao thức publish/subscribe thu thập nhiều dữ liệu hơn và tốn ít băng thông hơn so với giao thức cũ.

Ví dụ về MQTT của S7-1200

S7-1200 là một dòng PLC phổ thông khá thông dụng trên thị trường và được dùng khá nhiều trong nhà máy. Với việc được tích hợp sẵn cổng Ethernet thì S7-1200 có thể dễ dàng kết nối Internet và thông qua đó có thể làm việc với MQTT qua thư viện được hỗ trợ. Không chỉ riêng S7-1200 và S7-1500 cũng có thể giao tiếp với MQTT. Từ đó việc thu thập dữ liệu từ xa không còn là rườm rà và khó khăn đối với PLC nữa.

Tài liệu cấu hình

Với S7 1500:

Thông sốData TypeDiễn giải
useQdnBOOLTrue- nếu kết nối qua Domain Name
hwIdentifierHW_ANYHW ID của PROFINET CPU
connectionIDCONN_OUCID của TCP connection
qdnAdressBrokerString [254]URL của MQTT broker, kết thúc bằng ký tự (“.”). ví dụ khi bạn cài broker trên máy tính thì trỏ tới qua dns là ip máy ví dụ: ‘192.168.0.10.’, hoặc dns: ‘broker.emqx.io.’
ipAdressBrokerArray [0..3]of USIntIP address của MQTT broker, ví dụ. 192.168.0.10
ipAdressBroker[0] = 192
ipAdressBroker[1] = 168
ipAdressBroker[2] = 0
ipAdressBroker[3] = 10
localPortUINTLocal port number của CPU PLC
mqttPortUINTRemote port của MQTT broker, ví dụ với dns: ‘broker.emqx.io.’ bạn có thể test ngay kết nối TCp qua port 1883 khi không dùng TLS
activateSecureConnBOOLTrue nếu chọn kết nối với bảo mật TLS
validateSubjectAlternateName
OfServer
BOOLcài true nếu activateSecureConn = true
idTlsServerCertificateUDINTID của chứng chỉ X.509 V3 (thường là chứng chỉ CA)
để xác thực máy chủ TLS. Chỉ dùng khi activateSecureConn = true
idTlsOwnCertificateUDINTID của chứng chỉ X.509 V3 của riêng bạn để xác nhận đối với máy chủ TLS. Chỉ dùng khi activateSecureConn = true

Với S7 1200:

Thông sốData TypeDiễn giải
hwIdentifierHW_ANYHW ID của PROFINET CPU
connectionIDCONN_OUCID của TCP connection
ipAdressBrokerArray [0..3]of USIntIP address của MQTT broker, ví dụ. 192.168.0.10
ipAdressBroker[0] = 192
ipAdressBroker[1] = 168
ipAdressBroker[2] = 0
ipAdressBroker[3] = 10
localPortUINTLocal port number của CPU PLC
mqttPortUINTRemote port của MQTT broker
   
   
activateSecureConnBOOLTrue nếu chọn kết nối với bảo mật TLS
validateSubjectAlternateName
OfServer
BOOLcài true nếu activateSecureConn = true
idTlsServerCertificateUDINTID của chứng chỉ X.509 V3 (thường là chứng chỉ CA)
để xác thực máy chủ TLS. Chỉ dùng khi activateSecureConn = true
idTlsOwnCertificateUDINTID của chứng chỉ X.509 V3 của riêng bạn để xác nhận đối với máy chủ TLS. Chỉ dùng khi activateSecureConn = true

s7 mqtt conection

3.2- Data type “LMQTT_typeParamData”: định nghĩa giao tiếp với MQTT Broker

ParametersData typeGiải thích
connectFlagLMQTT_typeConnectFlags– cleanSession (bool): true cho phép xóa data phiên trước đó
– will (bool): Active tính năng “Last Will and Testament”, nếu set fale thì các tính năng sau cũng fale: “willQoS_1”, “willQoS_2”, “willRetain”. Tính năng này kích hoạt thì các willtopic phải có để nó gọi ra.
– willQoS1 (bool): true nếu QoS lưu cấp 1
– willQoS2 (bool): true nếu QoS lưu cấp 2
– willRetain (bool): true nếu dữ liệu đã lưu và chưa gửi
– password: true nếu cài MQTT broker yêu cầu password đăng nhập từ PLC
– username: true nếu cài MQTT broker yêu cầu username đăng nhập từ PLC
   
keepAliveUIntKhoảng thời gian của hàm KeepAlive tính theo
giây để duy trì kết nối. Nếu tham số keepAlive=0, các chức năng KeepAlive bị hủy kích hoạt.
clientIdentifierString [23]Tên cho client, tên này được MQTT Broker nhận dạng khi kết nối thiết lập, chỉ cho phép ký tự Hoa, thường và số.
willTopicString [100]Topic for the last, liên quan cờ will ở connectFlag được set true
willMessageString [100]Message for the
last, liên quan cờ will ở connectFlag được set true
userNameString [100]username , liên quan cờ username ở connectFlag được set true
passwordString [200]password , liên quan cờ username ở connectFlag được set true

mqtt parameter

3.3- LMQTT_typePublishData: cấu trúc data gửi tới MQTT Broker

ParametersData typeMeaning
publishMessageBOOLSet True để truyền dữ liệu cho MQTT Broker, nếu truyển thành công thì Out ra báo “done” và tự reset publishMessage
publishTopicWString [250]Tên của Topic, kích thước có thể định nghĩa ở MAX_SENDBUFFER và MAX_PUBLISH_MESSAGE trong FB
publishMessageDataSTEP 7 V15.1
WString [1500]• STEP 7 V16
WString [800]
Nội dung data gửi đi, kích thước có thể định nghĩa ở MAX_SENDBUFFER và MAX_PUBLISH_MESSAGE trong FB
publishQoSIntĐịnh nghĩa các thức truyền QoS
– “0” for QoS level 0
– “1” for QoS level 1
– “2” for QoS level 2
publishRetainFlagBOOLTrue nếu set lưu Dữ liệu trên MQTT Broker

3.4- LMQTT_typeSubscribeData: cấu trúc quản lý nhận data từ MQTT Broker

ParametersData typeGiải thích
subscribeToTopicBoolTrue để cho phép nhận data từ subscriptionTopic MQTT Broker
unsubscribeFromTopicBoolTrue để từ chối nhận data từ subscriptionTopic MQTT Broker
subscriptionTopicWString [250]Tên của Topic từ MQTT Broker
subscriptionQoSIntĐịnh nghĩa cấp độ QoS
– “0” for QoS level 0
– “1” for QoS level 1

3.5- LMQTT_typeSubscriptionData: cấu trúc data nhận được từ MQTT Broker

ParametersData typeDiễn giải
newMessageReceivedBOOLTrue nếu PLC đã nhận được data xong
messageInvalidBOOLLỗi data nhận do: Internal buffer của FB “LMQTT_Client” quá nhỏ, receivingTopic hay receivedMessageData quá nhỏ
receivingTopicWString [400]Tên của subscribed topic nhận được
receivedMessageDataWString [2400]Toàn bộ dữ liệu data nhận được

4. Add thư viện:

s7 mqtt

Lôi thư viện ra và sử dụng:

s7 mqtt 2

 

4. Code chương trình PLC:

S7 MQTT block 2
  • enable (bool): true- connect to MQTT broker, false- disconnect
  • publishData: nếu kết nối thành công thì dữ liệu được publish theo cấu trúc LMQTT_typePublishData
  • subscribeToTopic: nếu kết nối tới MQTT broker tồn tại thì dữ liệu sẻ được nhận vào subscriptionMessage khai báo trong cấu trúc data LMQTT_typeSubscribeData
  • tcpConnParam: cấu hình để thiết lập kết nối thông qua TCP, đóng gói theo cấu trúc data LMQTT_typeTcpConnParamData
  • mqttParam: cầu hình thiết lập kết nối MQTT với MQTT Broker, đóng gói theo cấu trúc LMQTT_typeParamData

s7 mqtt

Host MQTT Broker thì bạn có thể thuê rất nhìu nhà cung cấp dịch vụ trên mạng cung ứng giải pháp này, điển hình là Amazon với AWS IoT support for MQTT.

Các bạn cũng có thể cài đặt và test với MQTT Mosquitto và giám sát qua MQTT Explorer

Các bạn có thể tải thư viện và tài liệu về và làm theo hướng dẫn trong Video bên dưới.



Download Library


Download Document



No comments:

Post a Comment