申请付费网站,专门做相声的网站,公司财务记账软件,山西正规网站建设推广目录 1. MQTT是什么#xff1f;2. 开发交互UI3. 服务器核心代码4. 客户端核心代码5. 消息订阅与发布6. 通讯测试7. MQTT与PLC通讯最后. 核心总结 1. MQTT是什么#xff1f;
MQTT#xff08;Message Queuing Terlemetry Transport#xff09;消息队列遥测协议#xff1b;是… 目录 1. MQTT是什么2. 开发交互UI3. 服务器核心代码4. 客户端核心代码5. 消息订阅与发布6. 通讯测试7. MQTT与PLC通讯最后. 核心总结 1. MQTT是什么
MQTTMessage Queuing Terlemetry Transport消息队列遥测协议是一种轻量级的发布/订阅消息传输协议专为IOT、低带宽、高延迟的网络环境设计具有高效、低耗、海量设备连接特性。
1.通讯原理
发布Publisher发布消息到特定主题Topic订阅Subscriber订阅主题接收消息代理Broker消息路由管理接收发布的消息颁发给所有订阅者
示例传感器Publisher发送消息到主题Topic代理Broker接收消息并检查该主题的所有客户端订阅者Subscriber实时接收消息
2.消息结构
主题topic负载payload
3.必要条件
MQTT Broker 消息代理服务器客户端库 设备或应用需集成MQTT客户端端口 默认非加密端口 1883加密端口 8883TLS/SSL连接认证 支持用户名/密码、客户端证书等认证方式QoS服务质量/策略
QoS等级描述适用场景0最多一次无确认实时性高允许丢数据1至少一次需确认数据需可靠但不重复2精确一次握手确认关键数据严格不重复
4. 关键特性 遗嘱消息Last Will
设备异常断开时Broker 自动发布预设消息如“设备离线”通知其他客户端。
保留消息Retained
Broker 保存主题的最新消息新订阅者首次连接时立即获取。
主题层级Topic Hierarchy
支持多级通配符 单层# 多层例如home/floor1/temperature; home//status匹配所有楼层状态
5.应用场景
移动设备远程监控AGV状态上报跨厂区数据汇聚通过云平台中转 2. 开发交互UI
创建WindowsFormAPP项目NuGet安装MQTTnet开源库项目-属性-框架需与程序包的依赖项一致否则安装错误PM NuGet\Install-Package MQTTnet -Version 2.8.2
控件
label、TextBox、ComboBox、ButtonListViewDock停靠视图Details小ImagelistImagelist1编辑列Infoname、Content
容器
SplitContainerOrienting垂直SplitterWith1BorderStyle边框
组件
Imagelist添加图像timerEnabledtrue、Interval1000
状态
StatusStrip系统时间、连接数量、版本说明
Server端
窗体设置Text标题、Font字体、StartPosition位置、FormBoardStyle边框给定服务IP固定端口号设置开始、停止服务、快捷打开客户端按钮设置日志消息显示窗口设置状态栏 Client端
技巧复制FrmServer修改窗口、Designer代码容器在SP1的Panel2添加SplitContainer2Listview放在SP2的Panel1中设置SP1的FixedPanel的Panel1不动设置SP2的FixedPanel的Panel2不动客户端可发布主题消息设置连接、订阅、取消订阅、发布主题按钮主题信息、给定QoS策略 3. 服务器核心代码
初始化-public FrmServer(){…}
获取IP集合Dns.GetHostAddresses绑定控件cmb_iplist.DataSource、.SelectedIndex
创建服务器对象IMqttServer-服务启动按钮点击事件
创建服务器配置 _ var optionsBuilder new MqttServerOptionsBuilder() – 验证用户密码_ .WithConnectionValidator(c ...实例化服务对象_mqttServer new MqttFactory().CreateMqttServer();创建MQTT事件方法_mqttServer.ClientConnected MqttServer_ClientConnected; – 方法日志显示_this.AddLog(0, MQTT客户端已连接 ClietID: e.ClientId.Length);启动服务_mqttServer.StartAsync(optionsBuilder.Build());
日志对象
创建委托_public delegate void AddlogDelegate(int index, string info);委托方法_private void AddlogMothod(int index, string info){...}委托对象_private AddlogDelegate AddLog;对象绑定方法 _this.AddLog this.AddlogMothod;对象应用eg:_ this.AddLog(0, MQTT服务端已停止);
状态栏
系统时间_this.tss_time.Text DateTime.Now.ToString(yyyy-MM-dd HH:mm:ss);连接个数连接/断开事件更新_this.tss_connnum.Text mqttServer.GetClientSessionsStatusAsync().Result.Count.ToString();
其他
停止服务_mqttServer.StopAsync();清空日志_this.lst_info.Items.Clear();打开客户端注意“重新生成解决方案”_new FrmClient().Show();当前时间_DateTime.Now.ToString(yyyy-MM-dd HH:mm:ss);关闭窗体停止服务 4. 客户端核心代码
初始化
获取IP集合Dns.GetHostAddresses绑定控件cmb_iplist.DataSource、.SelectedIndex
快捷打开客户端ServerIP、Port自动填写
创建带参数的初始化构造方法_ public FrmClient(string ip, string port)
创建客户端对象IMqttClient-客户端连接按钮点击事件
创建客户端配置_ var option new MqttClientOptions() { ClientId Guid.NewGuid().ToString(D) };创建通道配置_ option.ChannelOptions new MqttClientTcpOptions()是否启用账户_ if (this.chk_isuserpwd.Checked)创建会话配置_option.CleanSession true;创建客户端对象_mqttClient new MqttFactory().CreateMqttClient();连接服务器_ mqttClient.ConnectAsync(option);绑定事件方法添加日志_ mqttClient.Connected mqttClient_Connected;
日志显示
创建委托方法_与服务端一致创建委托对象_与服务端一致初始化对象绑定方法_与服务端一致对象引用eg_与服务端一致
其他
断开连接_mqttClient.DisconnectAsync(); 5. 消息订阅与发布
客户端可以正确连接后只有订阅与发布消息才算真正进行数据通讯消息的订阅和发布均在客户端进行服务端只需提供一个服务供客户连接桥梁的作用小节解释消息订阅发布的核心代码。 QoS服务策略下拉框获取
QoS服务策略(枚举类型)_this.cmb_qos_pub.DataSource Enum.GetNames(typeof(MqttQualityOfServiceLevel));
消息订阅
订阅主题_mqttClient.SubscribeAsync(new ListTopicFilter(){...});1
消息取消订阅
取消订阅_mqttClient.UnsubscribeAsync(this.txt_topic_sub.Text);
消息发布
创建消息对象_ var msg new MqttApplicationMessage(){...} 2发布消息_mqttClient.PublishAsync(msg); 6. 通讯测试 7. MQTT与PLC通讯
将msg对象中的Payload更改为PLC的寄存器即可 自动发布
添加定时器timer1_设置频率事件消息内容自动发布连接成功时启动定时器_ this.timer1.Enabled true;
消息内容
添加引用西门子通讯库创建PLC对象读取PLC变量添加到msg中的Payload中_Payload Encoding.UTF8.GetBytes(plcmsg), 最后. 核心总结
1. 开发实现 服务端
功能IP/端口配置、启动/停止服务、连接监控初始化 MqttServer 对象处理连接/断开事件日志记录、状态更新
客户端
功能连接/断开、订阅/取消主题、消息发布配置 MqttClientIP、端口、认证实现订阅 (SubscribeAsync) /发布 (PublishAsync)
2. 进阶应用
PLC 集成
自动发布定时器读取 PLC 数据并推送数据格式Payload 封装寄存器值如 Siemens PLC 数据
异常测试
基础测试服务端启停、客户端连接/断开消息流验证订阅发布功能、QoS 策略生效异常测试网络断开重连、遗嘱消息触发
附关键代码片段 服务端启动
var options new MqttServerOptionsBuilder().WithDefaultPort(1883).Build();
mqttServer new MqttFactory().CreateMqttServer();
mqttServer.StartAsync(options);客户端发布消息
var msg new MqttApplicationMessage {Topic sensor/temp,Payload Encoding.UTF8.GetBytes(25℃),QoS MqttQualityOfServiceLevel.AtLeastOnce
};
client.PublishAsync(msg);PLC 数据读取
var plcValue SiemensPLC.Read(DB1.DBD0); // 读取浮点数
var payload ${{\temperature\: {plcValue}}};源码链接 创建TopicFilter对象_new TopicFilter(this.txt_topic_sub.Text (MqttQualityOfServiceLevel)Enum.Parse(typeof(MqttQualityOfServiceLevel),this.cmb_qos_sub.Text)) ↩︎ 消息对象赋值_ Topic this.txt_topic_pub.Text, QualityOfServiceLevel (MqttQualityOfServiceLevel)Enum.Parse(typeof(MqttQualityOfServiceLevel), this.cmb_qos_pub.Text), Payload Encoding.UTF8.GetBytes(this.txt_msg_pub.Text), Retain false, ↩︎
文章转载自: http://www.morning.xswrb.cn.gov.cn.xswrb.cn http://www.morning.wphzr.cn.gov.cn.wphzr.cn http://www.morning.zdnrb.cn.gov.cn.zdnrb.cn http://www.morning.rdzlh.cn.gov.cn.rdzlh.cn http://www.morning.stxg.cn.gov.cn.stxg.cn http://www.morning.nfmlt.cn.gov.cn.nfmlt.cn http://www.morning.tmlhh.cn.gov.cn.tmlhh.cn http://www.morning.xtgzp.cn.gov.cn.xtgzp.cn http://www.morning.gcfg.cn.gov.cn.gcfg.cn http://www.morning.xqmd.cn.gov.cn.xqmd.cn http://www.morning.gblrn.cn.gov.cn.gblrn.cn http://www.morning.tpyjr.cn.gov.cn.tpyjr.cn http://www.morning.bgpch.cn.gov.cn.bgpch.cn http://www.morning.xcjbk.cn.gov.cn.xcjbk.cn http://www.morning.mrxqd.cn.gov.cn.mrxqd.cn http://www.morning.sogou66.cn.gov.cn.sogou66.cn http://www.morning.qbxdt.cn.gov.cn.qbxdt.cn http://www.morning.rgqnt.cn.gov.cn.rgqnt.cn http://www.morning.zfhzx.cn.gov.cn.zfhzx.cn http://www.morning.kdxzy.cn.gov.cn.kdxzy.cn http://www.morning.mfxcg.cn.gov.cn.mfxcg.cn http://www.morning.lblsx.cn.gov.cn.lblsx.cn http://www.morning.gkktj.cn.gov.cn.gkktj.cn http://www.morning.krlsz.cn.gov.cn.krlsz.cn http://www.morning.dsmwy.cn.gov.cn.dsmwy.cn http://www.morning.zdsqb.cn.gov.cn.zdsqb.cn http://www.morning.fxzgw.com.gov.cn.fxzgw.com http://www.morning.qxxj.cn.gov.cn.qxxj.cn http://www.morning.ctbr.cn.gov.cn.ctbr.cn http://www.morning.sryhp.cn.gov.cn.sryhp.cn http://www.morning.qznkn.cn.gov.cn.qznkn.cn http://www.morning.mxnhq.cn.gov.cn.mxnhq.cn http://www.morning.dmwjl.cn.gov.cn.dmwjl.cn http://www.morning.trsdm.cn.gov.cn.trsdm.cn http://www.morning.swwpl.cn.gov.cn.swwpl.cn http://www.morning.psdbf.cn.gov.cn.psdbf.cn http://www.morning.jwxmn.cn.gov.cn.jwxmn.cn http://www.morning.ktyww.cn.gov.cn.ktyww.cn http://www.morning.tddrh.cn.gov.cn.tddrh.cn http://www.morning.lhptg.cn.gov.cn.lhptg.cn http://www.morning.ybmp.cn.gov.cn.ybmp.cn http://www.morning.rui931.cn.gov.cn.rui931.cn http://www.morning.dzzjq.cn.gov.cn.dzzjq.cn http://www.morning.rfyff.cn.gov.cn.rfyff.cn http://www.morning.ktskc.cn.gov.cn.ktskc.cn http://www.morning.wbllx.cn.gov.cn.wbllx.cn http://www.morning.ltdrz.cn.gov.cn.ltdrz.cn http://www.morning.rfwrn.cn.gov.cn.rfwrn.cn http://www.morning.tkcct.cn.gov.cn.tkcct.cn http://www.morning.jnzfs.cn.gov.cn.jnzfs.cn http://www.morning.cprls.cn.gov.cn.cprls.cn http://www.morning.lclpj.cn.gov.cn.lclpj.cn http://www.morning.tktyh.cn.gov.cn.tktyh.cn http://www.morning.bpttm.cn.gov.cn.bpttm.cn http://www.morning.glswq.cn.gov.cn.glswq.cn http://www.morning.xrrbj.cn.gov.cn.xrrbj.cn http://www.morning.ptmgq.cn.gov.cn.ptmgq.cn http://www.morning.rfldz.cn.gov.cn.rfldz.cn http://www.morning.zsyrk.cn.gov.cn.zsyrk.cn http://www.morning.fnfxp.cn.gov.cn.fnfxp.cn http://www.morning.dyxlm.cn.gov.cn.dyxlm.cn http://www.morning.srmpc.cn.gov.cn.srmpc.cn http://www.morning.tgnr.cn.gov.cn.tgnr.cn http://www.morning.kyfrl.cn.gov.cn.kyfrl.cn http://www.morning.bdzps.cn.gov.cn.bdzps.cn http://www.morning.tynqy.cn.gov.cn.tynqy.cn http://www.morning.lktjj.cn.gov.cn.lktjj.cn http://www.morning.ymjrg.cn.gov.cn.ymjrg.cn http://www.morning.nfks.cn.gov.cn.nfks.cn http://www.morning.djwpd.cn.gov.cn.djwpd.cn http://www.morning.tqdlk.cn.gov.cn.tqdlk.cn http://www.morning.rynrn.cn.gov.cn.rynrn.cn http://www.morning.zcsch.cn.gov.cn.zcsch.cn http://www.morning.tkrwm.cn.gov.cn.tkrwm.cn http://www.morning.dysgr.cn.gov.cn.dysgr.cn http://www.morning.lpmjr.cn.gov.cn.lpmjr.cn http://www.morning.ktblf.cn.gov.cn.ktblf.cn http://www.morning.xmpbh.cn.gov.cn.xmpbh.cn http://www.morning.yrsg.cn.gov.cn.yrsg.cn http://www.morning.nclps.cn.gov.cn.nclps.cn