PyThon 编程(MQTT )

        MQTT 是一种信息交换系统,由信息交换软件和客户端构成,采用了发布/定阅的通信方法,在物联网和远程遥控遥测中应用广泛。

 本博文介绍如何使用Python 编写MQTT 客户端软件,以及在工业领域的应用。

MQTT Broker

有许多MQTT Broker 的实现。这里采用Eclips mosquitto。它是一个轻量级开源的MQTT Broker。

下载

https://mosquitto.org/download/

这里选择windows

mosquitto-2.0.15-install-windows-x64.exe (64-bit build, Windows Vista and up, built with Visual Studio Community 2019)

下载完成后 运行解压到某一个目录中

运行

在该目录直接 输入 mosquitto 运行

测试

在安装目录中自带两个应用程序

mosquitto_sub

mosquitto_pub

打开一个windows Power Shell,运行mosquitto_sub

输入

PS E:\yao2023\mosquitto> ./mosquitto_sub -t 'test/topic'

打开另一个Windows Power Shell 运行另一个 mosquitto_pub

PS E:\yao2023\mosquitto> ./mosquitto_pub -t 'test/topic'  -m hello

这是在运行mosquitto_sub 的窗口输出一个hello

Python MQTT 客户端

安装paho-mqtt 模块。

pip install paho-mqtt

python 客户端程序

发布

import paho.mqtt.client as mqtt
import time
HOST = "localhost"
PORT = 1883
if __name__ == '__main__':
    client = mqtt.Client()
    client.loop_start()
    client.connect(HOST, PORT, 60)
    while True:
       client.publish("test/topic","hello liefyuan",2) 
       time.sleep(2)

订阅/发布

这是一个echo 程序

import paho.mqtt.client as mqtt
import time
HOST = "localhost"
PORT = 1883
def on_message(client,userdata,msg):
      #print("Message")
      print(msg.topic+" "+msg.payload.decode())
if __name__ == '__main__':
    client = mqtt.Client()   
    client.connect(HOST, PORT, 60)
    client.subscribe("test/topic",0)
    client.on_message=on_message
    client.loop_start()
    while True:
       client.publish("test/topic","hello topic",2) 
       time.sleep(2)

注意:client.loop_start()一定要放置所有设置完成,While True 之前。

MQTT 在基于开放自动化领域的应用

         MQTT 最大的优点是简单。相比工业领域的协议而言,它的缺点是仅仅是一种通信协议,没有语义模型。所有,同样采用MQTT 协议,两个设备并不一定互联互通。因此要进一步对Topic和payload 指定规范。

这里我们以IEC61499 功能块的连接为例,讨论MQTT 协议的应用

Topic 的格式

以路径Path 作为topic,例如:

Device_Name/FB_Name/InputEvents/inputEvent_Name

Device_Name/FB_Name/OutputEvents/OutputEvent_Name

Payload的格式

可以设置为JSON格式,例如

{Method:“Read”,Value=12.5}

订阅方式的使用

功能块的输入事件采取订阅方式

Client.subscribe("inputEvents/#")

所有的OutputEvents采取publish 方式。

上述方式同样适用于单功能块应用。

在OPCUA 应用程序中的应用

        在OPCUA 规范中,提出了pub/sub 的方式。它实现了两个Server 之间通过pub/sub协议实现信息交换。

        2018年初,OPC UA标准的第14部分(又名“发布-订阅”或“PubSub”)发布,有助于鼓励OPC UA与MQTT等通信协议之间的进一步交互。根据OPC基金会的说法,“PubSub通过利用MQTT(消息队列遥测传输)和AMQP(高级消息队列协议)等流行的数据传输,可以直接通过互联网使用OPC UA,同时保留其关键的OPC UA端到端安全性和标准化数据建模优势”。

        但是令人遗憾的是,python-opcua 并不支持sub/pub 机制,open62541 是支持基于MQTT sub/pub 机制的。在具体的应用中,我们也可以自己编写MQTT sub/pub 交换OPCUA 信息模型的数据。 

猜你喜欢

转载自blog.csdn.net/yaojiawan/article/details/131846232