1、MQTT简介
MQTT是一种基于发布/订阅模式的“轻量级”通讯协议。它是针对受限的、低带宽的、高延迟的、网络不可靠的环境下的网络通讯设备设计的。
发布是指客户端将消息传递给服务器,订阅是指客户端接收服务器推送的消息。每个消息有一个主题,包含若干个数据。客户端A发布某主题的消息后,客户端B通过订阅该主题的消息,即可获取该主题消息的所有数据。在本应用中,TPC为客户端。
消息中的数据与TPC的设备通道相连,实现服务器与TPC之间的数据交换。数据连接通道后,再经由通道连接到实时数据库中的数据对象(变量),从而被画面和策略所使用。
2、MQTT使用
QTT_STD驱动用于使客户端通过MQTT协议向特定服务器发布或订阅消息。要实现消息的发布和订阅,首先需要用户自行搭建好服务器,再将服务器的信息,输入MQTT_STD驱动属性配置界面。
本样例以MQTT_STD驱动与本地服务器的通讯为例进行介绍。
2.1 、驱动属性配置
随本文档打包的方案包中自带已配置好的本地服务器。服务器IP地址为127.0.0.1,端口号为1883,无用户名、用户密码等。稍后的设置需要使用到服务器IP地址和端口号。
使用McgsPro软件新建工程——设备窗口,添加MQTT_STD驱动,如下图所示。
进入“MQTT客户端属性配置”界面,步骤如下图所示。
在“MQTT客户端属性配置”界面的“一般属性”功能页,输入服务器IP、服务器端口号等信息,以实现客户端和服务器的连接。
本样例设置服务器IP为127.0.0.1,服务端口为1883,其他设置保持默认即可。本地IP和端口为空,则驱动不绑定本地IP地址和端口,否则驱动在连接服务之前会绑定本地IP地址。如果用户需要设置用户名和用户密码,需要勾选界面的“验证”复选框才会出现对应的设置界面。
2.3、消息发布/订阅
配置完客户端属性后,客户端TPC就可以和服务器正常连通了,但若想实现消息的发布和订阅,还需要进一步的配置。
1)配置发布、订阅选项卡
首先在MCGS中找到发布和订阅选项卡。
发布选项卡用于编辑发布消息的消息列表,用户可在此处对发布消息进行添加、编辑、删除、清空等操作。
需要添加发布的消息时,将鼠标置于列表视图上,使用右键打开快捷菜单,点击“添加发布主题”进入“发布消息”配置界面。配置完成后,也可通过右键菜单的“编辑发布主题”或直接双击需要修改的主题名进入主题设置界面。
订阅选项卡用于编辑订阅消息的消息列表,用户可在此处对订阅消息进行添加、编辑、删除、清空等操作。
需要添加订阅的消息时,将鼠标置于列表视图上,使用右键打开快捷菜单,点击“添加订阅主题”进入“订阅消息”配置界面。配置完成后,也可通过右键菜单的“编辑发布主题”或直接双击需要修改的主题名进入主题设置界面。
2)发布/订阅消息属性配置界面
在发布消息属性配置界面可以设置消息的主题名、主题别名、传输质量、消息格式、触发方式以及消息编辑等。
其中,“触发方式”只有发布消息配置界面才有,用于指定消息发布的触发方式,支持变数触发和所有报警触发两种方式。
本例设置主题名为“/test”,主题别名为“sample”,其他设置保持默认不变。
在订阅消息属性配置界面可以设置消息的主题名、主题别名、传输质量、消息格式以及消息编辑等。订阅消息没有触发方式选项。
本例设置主题名为“/test”,主题别名为“sample”,其他设置保持默认不变。
“主题名称说明”中的内容,不是必须出现在主题名称中的,仅需要时才使用。使用方法以“%1”为例,它代表客户端ID。将主题名称设置为“/%1/test”,而前面“mqtt客户端属性配置”页面中的客户端ID为“mqtt_client”,则相当于此时主题名称为“/mqtt_client/test”。
3)消息编辑
点击“消息编辑”按钮进入消息编辑界面。
消息编辑界面主要用于编辑消息的数据结构。消息节点可以为对象、数组或普通数据,普通数据可放置在对象或数组之下,对象或数组可以相互嵌套。此处使用到的数据格式为JSON,JSON简介可参考文档《JSON格式简介》(随本说明文档一起打包提供)。
数据结构的编辑方式为从“数据类型选择器”窗口将对应的数据类型拖拽到“消息定义窗口”的指定节点。
右击可对消息节点进行编辑(消息节点名称、类型等)、删除等操作。完成节点编辑后,“JSON格式浏览”窗口会显示当前结构对应的JSON格式。
同时,也可以单击“启用逆向”,将在外部文本编辑器中编辑好的的JSON格式内容粘贴到JSON格式浏览框中,单击逆向生成即可从JSON格式生成对应的消息结构。注意,生成的结构的节点数据类型可能与用户预期的格式存在差异。这时需要在消息定义窗口右键修改节点的数据类型。
设置订阅消息的方法和设置发布消息的方法相同。
设置完成后,选项卡列表中出现刚才定义的消息。点击保存按钮保存配置并退出配置界面。
由于本例中发布和订阅的主题及消息的设置相同,所以工程在本地模拟运行后,客户端将订阅到本机发布的消息。设置为相同仅为本例演示需求,用户使用时,根据自己的需求设置即可。
3)驱动通道
配置完消息的发布和订阅后,驱动根据客户的配置自动生成三种通道:订阅数据通道、发布数据通道和发布触发通道。
a.订阅数据通道
订阅数据通道的通道名以“subscribe”开头,主要用于客户订阅相关主题消息数据,用户通过关联数据变量接收数据包中的各个数据。
b.发布数据通道
发布数据通道的通道名以“publish”开头,主要用于客户关联要发布的数据变量,与要发布的消息数据相关。
c.发布触发通道
发布触发通道的通道名以“trigger”开头,主要用于客户发布消息使能。如果主题触发方式配置为变数触发,那么一旦触发通道所关联变量的值发生改变即可触发一条数据发布。如果主题触发方式配置为报警触发,那么触发通道所关联变量的值符合报警条件即可发布一条数据。
将通道连接变量以便使用。
4)组态画面
为了直观的观察到客户端发布和订阅的效果,我们组态一个简单的窗口画面来显示数据。
a.首先进入用户窗口。
b.然后组态一个简单的画面用以显示变量的值。
3、 MQTT调试
3.1、 数据的发布和订阅
想要测试工程数据的发布和订阅情况,可以使用随本说明文档一起打包提供的本地服务器进行测试。
1)启动本地服务器:进入随本文档一起打包提供的文件夹“MQTT本地服务器”,双击server.bat启动本地MQTT服务器。
2)启动本地客户端:模拟运行刚才组态好的McgsPro工程。
3)发布数据:在关联变量“p_df”的输入框中输入需要的数值,如66,然后点击按钮触发数据的发布。
4)订阅数据:由于本例中发布和订阅的主题及消息的设置相同,所以会订阅到本机发布的消息。此时,“s_df”输入框显示66,表示订阅成功。
3.2、 数据包查看
想要查看发布出来的消息数据包,可以使用mqtt.fx软件(随本说明文档一起打包提供)。
设置mqtt.fx参数:安装mqtt.fx软件,运行软件后设置服务器的IP地址和端口号等参数。本例仅需设置服务器IP地址为127.0.0.1,服务端口为1883即可。
2)连接服务器。
3)查看客户端发布的消息。订阅对应主题后,使用McgsPro模拟工程发布一条消息,就可以从mqtt.fx查看到客户端发布的消息。
4)使用mqtt.fx也可发布消息,可以将Subscribe收到的消息复制到Publish界面,修改对应数据的值后发布给模拟工程,模拟工程收到消息后也会更新数据显示。
能使用mqtt.fx软件订阅和发布模拟工程对应主题的消息,则表示工程组态正确。
3.3、 远端服务器验证
也可以使用mqtt.fx软件验证远端服务器是否部署正确,只需要将设置界面中的服务器通信参数设置为远端服务器的参数,即可对远端服务器进行发布和订阅测试。
2)开启订阅
3)发布消息
4)查看消息:查看是否订阅到发布的消息,若成功则证明服务器正常,不成功则检查服务器。