《C#上位机开发从门外到门内》2-4:Modbus协议

在这里插入图片描述

文章目录

  • 一、引言
  • 二、Modbus协议概述
    • 2.1 Modbus协议的起源与发展
    • 2.2 Modbus协议的基本特点
    • 2.3 应用领域
  • 三、Modbus通信原理详解
    • 3.1 Modbus RTU原理
      • 3.1.1 数据帧结构
      • 3.1.2 数据传输与时序
      • 3.1.3 错误检测
    • 3.2 Modbus TCP原理
      • 3.2.1 数据封装
      • 3.2.2 通信机制
      • 3.2.3 与RTU模式的区别
  • 四、Modbus数据模型与寄存器、线圈
    • 4.1 线圈(Coils)与离散输入(Discrete Inputs)
    • 4.2 寄存器
    • 4.3 功能码解析
  • 五、读写寄存器/线圈操作解析
    • 5.1 读操作原理
      • 5.1.1 读寄存器
      • 5.1.2 读线圈和离散输入
    • 5.2 写操作原理
      • 5.2.1 写单个线圈/寄存器
      • 5.2.2 写多个线圈/寄存器
    • 5.3 示例:读写操作的数据帧
      • 5.3.1 读取保持寄存器
      • 5.3.2 写单个寄存器
  • 六、实现Modbus主站上位机
    • 6.1 硬件与平台选择
    • 6.2 软件架构设计
    • 6.3 开发语言与工具选择
    • 6.4 驱动与中间件设计
  • 七、调试、测试与优化策略
    • 7.1 数据校验与异常处理
    • 7.2 仿真测试与现场调试
    • 7.3 性能优化
  • 八、典型应用案例与实践
    • 8.1 工业自动化监控系统
    • 8.2 智能楼宇与能源管理
  • 九、未来发展与总结
    • 9.1 Modbus协议的未来趋势
    • 9.2 总结

在这里插入图片描述

一、引言

在工业自动化、过程控制以及分布式监控系统中,数据的实时传输与可靠通信至关重要。作为工业领域中应用最为广泛的通信协议之一,Modbus协议凭借其简单、灵活和高效的特点,被广泛用于PLC、传感器、仪表及各类现场设备之间的数据交互。Modbus协议既有基于串行通信的RTU格式,也有基于以太网的TCP/IP格式,不同的传输方式满足了不同应用场景下的需求。本文将从Modbus协议的基本原理入手,详细解析Modbus RTU与Modbus TCP的数据传输机制、寄存器和线圈读写操作,并重点介绍如何实现Modbus主站上位机,包括硬件选择、驱动设计、软件开发及调试优化策略,旨在帮助读者全面掌握Modbus协议的核心技术及实现方法。


在这里插入图片描述

二、Modbus协议概述

2.1 Modbus协议的起源与发展

Modbus协议最早由Modicon(现施耐德电气旗下品牌)于1979年推出,作为一种简单而高效的主从通信协议,它被广泛应用于PLC之间的控制和数据传输。随着工业自动化和分布式控制系统的发展,Modbus协议不断演进,逐渐从最初的串行通信标准(RTU/ASCII)扩展到基于以太网的Modbus TCP,使得其应用领域从传统的工业现场拓展到了现代智能制造、物联网和远程监控等更广泛的领域。
在这里插入图片描述

2.2 Modbus协议的基本特点

Modbus协议具有以下几个显著特点:

  • 简单易用: 协议本身结构简单、实现成本低,无需复杂的握手过程;
  • 主从架构: 采用单主多从的通信方式,主站负责轮询从站,从站在接收到命令后返回相应数据;
  • 灵活性强: 支持多种数据类型传输,包括线圈、离散输入、保持寄存器和输入寄存器;
  • 高可靠性: 通过CRC校验(RTU格式)或TCP/IP自带的错误检测机制,确保数据传输的正确性;
  • 广泛兼容: 由于其开放性和标准化,众多厂商的设备均支持Modbus协议,便于系统集成和互联互通。

2.3 应用领域

Modbus协议广泛应用于:

  • 工业自动化与控制系统
  • 过程控制与监测系统
  • 能源管理与配电系统
  • 智能建筑与环境监控
  • 数据采集与远程监控系统

三、Modbus通信原理详解

Modbus协议主要分为两种传输方式:Modbus RTUModbus TCP。两者在数据封装、传输媒介以及错误检测机制上存在差异,但都遵循主从通信的基本原理。
在这里插入图片描述

3.1 Modbus RTU原理

3.1.1 数据帧结构

Modbus RTU采用二进制格式进行数据传输,其数据帧通常包含以下几个部分:

  • 地址域(Address): 1个字节,用于标识从站地址(范围1~247);
  • 功能码(Function Code): 1个字节,指示主站请求的操作类型(如读/写寄存器或线圈);
  • 数据域(Data): 可变长度,包含具体操作所需的地址、数据数量、写入数据等信息;
  • CRC校验(CRC Check): 2个字节,采用循环冗余校验算法对数据进行校验,以确保数据传输的完整性。

3.1.2 数据传输与时序

在RTU模式下,数据通过串行总线(RS-232/RS-485)传输。传输过程中,各个字节之间必须保持一定的间隔(通常为3.5个字符时间),以便接收设备能够正确识别数据帧的开始和结束。主站首先发送命令数据帧,从站在收到后解析数据,并根据功能码返回相应的响应数据帧。

3.1.3 错误检测

Modbus RTU的数据帧末尾包含CRC校验码,通过预先设定的算法计算整个数据帧的校验值,接收设备在接收数据后同样进行CRC校验,比对结果一致则认为数据无误,否则丢弃该数据帧并可能触发错误响应。

3.2 Modbus TCP原理

3.2.1 数据封装

与RTU模式不同,Modbus TCP采用以太网作为传输介质,其数据帧封装在TCP/IP数据包中。Modbus TCP数据帧由以下几部分组成:

  • MBAP头(Modbus Application Protocol Header): 固定7字节,包括事务标识符、协议标识符、数据长度以及单元标识符;
  • 功能码与数据域: 与RTU模式类似,包含功能码和相应数据内容,但不再需要CRC校验,因为TCP/IP协议层自带错误检测机制。

3.2.2 通信机制

Modbus TCP基于面向连接的TCP协议进行数据传输,主站与从站之间通过建立TCP连接进行通信。建立连接后,主站发送封装好的Modbus请求,目标从站在收到请求后解封装MBAP头并处理请求,最后返回响应数据。由于以太网通信的高速特性和TCP协议的可靠性保证,Modbus TCP在数据传输速度和稳定性上具有明显优势。

3.2.3 与RTU模式的区别

  • 传输介质: RTU模式基于串行总线,适用于近距离工业现场;而TCP模式利用以太网,支持长距离和远程通信。
  • 数据封装: RTU模式使用二进制帧和CRC校验,而TCP模式则使用MBAP头和TCP/IP自带的校验机制。
  • 网络架构: Modbus TCP支持在局域网甚至互联网内多主机通信,扩展性更强。

四、Modbus数据模型与寄存器、线圈

在这里插入图片描述

Modbus协议的数据模型是其核心,主要包括以下几种数据对象:

4.1 线圈(Coils)与离散输入(Discrete Inputs)

  • 线圈(Coils): 用于表示开关量输出,数据类型为单个位(0或1)。主站可通过功能码对线圈进行读写操作。
  • 离散输入(Discrete Inputs): 表示开关量输入,只能读取,不允许写入,通常用于监测状态。

4.2 寄存器

  • 保持寄存器(Holding Registers): 16位寄存器,用于存储过程数据、设定值等,支持读写操作;
  • 输入寄存器(Input Registers): 同样为16位,只读,用于传感器采集数据等实时信息。

4.3 功能码解析

Modbus协议规定了多种功能码,每种功能码对应一种具体操作。例如:

  • 功能码01(读线圈状态): 用于读取从站输出状态;
  • 功能码02(读离散输入): 用于读取输入状态;
  • 功能码03(读保持寄存器): 用于读取保持寄存器数据;
  • 功能码04(读输入寄存器): 用于读取输入寄存器数据;
  • 功能码05(写单个线圈): 用于写入单个线圈状态;
  • 功能码06(写单个寄存器): 用于写入单个保持寄存器;
  • 功能码15(写多个线圈): 用于同时写入多个线圈状态;
  • 功能码16(写多个寄存器): 用于同时写入多个保持寄存器数据。

每个功能码都有相应的数据格式要求和错误响应机制。当主站请求的操作发生错误时,从站会返回异常响应(如功能码加上偏移值0x80),并在数据域中返回错误码,提示出错原因。


五、读写寄存器/线圈操作解析

在这里插入图片描述

5.1 读操作原理

5.1.1 读寄存器

在Modbus中,读取寄存器通常采用功能码03(读保持寄存器)和04(读输入寄存器)。主站发送请求时需要指定:

  • 起始寄存器地址:标识从哪一地址开始读取;
  • 寄存器数量:说明需要读取的数据个数。

从站在收到请求后,依次将所需寄存器的数据打包返回。返回的数据中,每个寄存器占用2个字节,数据排列顺序按照大端或小端格式由双方约定。

5.1.2 读线圈和离散输入

类似地,功能码01和02用于读取线圈和离散输入的状态。主站同样需要指定起始地址和读取数量,从站将多个二进制位打包成字节返回,通常最高位或最低位依照协议规定代表第一个线圈或离散输入。

5.2 写操作原理

5.2.1 写单个线圈/寄存器

  • 写单个线圈(功能码05): 主站发送写入请求时,指定线圈地址及要写入的状态(0或1),从站在执行完毕后返回回显数据;
  • 写单个寄存器(功能码06): 主站指定寄存器地址和写入的16位数据,从站执行后返回写入的数据确认。

5.2.2 写多个线圈/寄存器

  • 写多个线圈(功能码15): 主站请求中需明确写入起始地址、写入数量及后续的数据字节(每个线圈用1位表示,多余部分填充),从站返回写入起始地址和数量确认;
  • 写多个寄存器(功能码16): 请求中包含起始地址、寄存器数量和后续每个寄存器的2字节数据,从站返回写入的起始地址和数量。

在写操作中,从站在收到请求后,会先验证请求参数(如地址范围、数据长度是否合理),若检测到异常则返回异常响应,异常码根据错误原因不同而各异。

5.3 示例:读写操作的数据帧

以Modbus RTU模式为例,下面展示两个常见操作的数据帧示例:

5.3.1 读取保持寄存器

假设主站需要读取从站地址为05,从地址0x0010开始的3个保持寄存器,数据帧示例如下:

  • 地址域:0x05
  • 功能码:0x03
  • 数据域:起始地址0x00 0x10,数量0x00 0x03
  • CRC校验:由发送端根据前面数据计算出2字节CRC

从站返回的数据帧格式:

  • 地址域:0x05
  • 功能码:0x03
  • 字节计数:0x06(3个寄存器,每个2字节)
  • 数据:寄存器内容共6字节
  • CRC校验

5.3.2 写单个寄存器

假设主站需要写入从站地址为03,写入保持寄存器地址0x0020,数据0x1234,则数据帧为:

  • 地址域:0x03
  • 功能码:0x06
  • 数据域:寄存器地址0x00 0x20,写入数据0x12 0x34
  • CRC校验:2字节CRC

从站返回的回显数据与请求完全一致,表示操作成功。


六、实现Modbus主站上位机

在这里插入图片描述

作为Modbus系统中的“控制中心”,Modbus主站上位机负责发起数据请求、解析从站返回的数据,并将采集到的数据进行集中处理、显示和存储。下面介绍实现Modbus主站上位机的关键步骤和技术要点。

6.1 硬件与平台选择

在实现Modbus主站时,常见的平台包括:

  • 工业PC或嵌入式Linux系统: 适用于需要连接多种设备并运行复杂上层应用的场合;
  • Windows系统: 借助Modbus库及驱动,也可以实现工业监控软件;
  • 单片机或嵌入式系统: 在简单的控制系统中也可充当Modbus主站,但通常需要额外的通信接口扩展(如RS-485转USB模块)。

硬件平台应具备稳定的串口或以太网接口,并考虑系统抗干扰能力、实时性及扩展性。

6.2 软件架构设计

实现Modbus主站上位机通常包括以下几个层次:

  • 通信底层: 负责串口或以太网接口的初始化、数据发送与接收。对于Modbus RTU,通常采用串口驱动和RS-485收发器;对于Modbus TCP,则利用Socket编程建立TCP连接。
  • 协议解析层: 根据Modbus协议格式,对接收到的数据进行帧拆解、CRC校验及数据提取,同时将上层请求封装成对应的数据帧发送出去。
  • 应用层: 实现具体的数据处理逻辑,如周期性轮询、报警处理、数据记录及用户界面交互。上位机常通过图形化界面实时显示设备状态,并支持数据日志和远程控制功能。

6.3 开发语言与工具选择

常用的开发语言包括C/C++、C#、Java以及Python。以Python为例,可以利用pymodbus库快速搭建Modbus主站;而在C/C++环境下,通常需要使用串口/Socket API配合现成的Modbus库(如libmodbus)来完成开发。下面给出一个简单的Python示例代码,展示如何通过Modbus TCP与从站通信:

from pymodbus.client.sync import ModbusTcpClient# 建立Modbus TCP连接
client = ModbusTcpClient('192.168.1.100', port=502)
client.connect()# 读取保持寄存器,从地址0x0010开始读取3个寄存器
response = client.read_holding_registers(16, 3, unit=1)
if not response.isError():print("Holding Registers:", response.registers)
else:print("Error reading registers")# 写单个寄存器,写入地址0x0020,数值0x1234
write_response = client.write_register(32, 0x1234, unit=1)
if not write_response.isError():print("Write successful")
else:print("Write error")client.close()

该示例展示了如何建立Modbus TCP连接、读取和写入寄存器。实际开发中,还需增加异常处理、超时控制及日志记录等机制。

6.4 驱动与中间件设计

对于基于RTU的Modbus主站,软件需直接操作串口,通常包括以下步骤:

  • 串口初始化: 设置波特率、校验位、停止位及数据位;
  • 数据发送与接收: 利用中断或轮询方式接收串口数据,并将接收到的数据按照Modbus帧格式进行解析;
  • CRC校验: 每次数据发送前计算CRC,接收时校验CRC以确保数据完整性;
  • 状态管理: 设计状态机来处理不同通信状态,如等待、超时、异常重传等。

基于TCP的Modbus主站则需借助Socket编程,建立可靠的TCP连接后进行数据传输,通常利用线程或异步IO技术实现高效数据处理。


七、调试、测试与优化策略

在这里插入图片描述

在开发Modbus主站上位机的过程中,调试与测试至关重要。以下是几条常见的调试与优化策略:

7.1 数据校验与异常处理

  • CRC校验: 在RTU模式下,务必验证每个数据帧的CRC值,确保传输过程中无误;
  • 超时机制: 设置合理的超时阈值,防止因通信故障导致系统卡死;
  • 异常响应处理: 针对从站返回的异常响应码,设计详细的错误日志记录,并适当进行重传处理。

7.2 仿真测试与现场调试

  • 仿真工具: 利用Modbus仿真软件模拟从站响应,提前验证主站通信逻辑;
  • 现场调试: 利用逻辑分析仪、示波器等硬件工具捕捉实际通信波形,检查信号质量和时序问题;
  • 参数调整: 根据现场噪声、通信距离等因素,适当调整波特率、串口配置及超时设置。

7.3 性能优化

  • 异步与多线程: 在数据量大、响应时间要求高的应用中,采用异步IO或多线程设计,提高通信效率;
  • 缓存与队列机制: 合理设置数据缓存和队列,防止数据丢失或处理延迟;
  • 日志记录与监控: 实时记录通信日志,建立监控机制,便于后期优化和故障排查。

八、典型应用案例与实践

在这里插入图片描述

为了更好地理解Modbus主站上位机的实现,下面介绍两个典型的应用案例:

8.1 工业自动化监控系统

在一套大型自动化生产线中,多个PLC和传感器通过Modbus RTU方式接入中央上位机。上位机通过串口和RS-485总线轮询各个从站设备,实时获取生产数据、设备状态和报警信息。系统软件中:

  • 数据解析模块 根据功能码和数据帧格式提取温度、压力、转速等关键数据;
  • 界面显示模块 采用图形化界面展示实时数据,并支持历史数据查询和趋势分析;
  • 报警处理模块 根据异常数据触发报警,及时通知维护人员采取措施。

8.2 智能楼宇与能源管理

在智能楼宇系统中,电能计量仪表、空调控制器等设备通常支持Modbus TCP协议,上位机通过以太网连接多个设备,集中监控各区域能耗数据。系统特点包括:

  • 网络通信: 利用TCP/IP协议实现跨楼宇、跨区域的数据采集;
  • 数据集中处理: 通过数据库存储和实时分析,对能耗数据进行统计和优化控制;
  • 远程管理: 管理人员可以通过远程上位机实时监控设备状态、调整控制参数,实现节能降耗。

在这些实际案例中,Modbus协议凭借其开放性、互操作性和稳定性,为各类自动化系统提供了高效的数据传输解决方案。


九、未来发展与总结

在这里插入图片描述

9.1 Modbus协议的未来趋势

随着工业物联网(IIoT)和智能制造的不断发展,Modbus协议虽然历史悠久,但依然焕发出新的生命力。未来的发展趋势主要体现在:

  • 混合通信模式: 结合RTU和TCP的优势,实现串行和以太网的无缝互联;
  • 安全性提升: 随着网络攻击风险的增加,未来Modbus TCP可能引入加密、认证机制,提升系统安全性;
  • 标准化与互联互通: 随着工业标准的统一,Modbus协议将进一步与其他工业通信标准(如PROFINET、EtherCAT等)互联互通,实现数据共享和综合管理;
  • 嵌入式与云平台: 越来越多的上位机系统将嵌入于云平台,实现远程监控、大数据分析和智能决策。

9.2 总结

本文详细介绍了Modbus协议的基本原理及应用实现方法,主要内容包括:

  • Modbus协议概述: 回顾了Modbus协议的发展历史、基本特点和广泛应用的领域;
  • RTU与TCP原理解析: 分析了Modbus RTU的帧结构、时序要求、CRC校验,以及Modbus TCP在MBAP头封装、TCP/IP传输机制等方面的特点;
  • 寄存器与线圈读写: 详细说明了Modbus数据模型中线圈、离散输入、保持寄存器和输入寄存器的定义,重点解析了常见的读写操作和功能码;
  • 实现Modbus主站上位机: 从硬件平台选择、通信接口配置、驱动程序设计到上层应用开发,提供了完整的实现方案和示例代码;
  • 调试与优化策略: 介绍了数据校验、超时机制、仿真测试以及现场调试等关键技术,帮助开发人员确保系统的高效、稳定运行;
  • 典型案例分析: 通过工业自动化监控系统和智能楼宇能源管理系统的应用实例,展示了Modbus协议在实际项目中的广泛应用和技术优势。

通过对Modbus协议全方位的讲解,读者可以深入理解Modbus RTU和Modbus TCP的核心原理,掌握寄存器和线圈的读写操作细节,并获得实现Modbus主站上位机的完整技术路线和开发经验。无论是在初步了解Modbus协议的理论基础,还是在具体项目中实现数据采集与设备控制,本文均提供了详细的技术参考和实践指导。

总之,Modbus协议以其开放、标准和高可靠性的优势,成为工业通信领域中不可或缺的一部分。随着技术的发展和应用场景的不断拓展,Modbus协议将继续演化和完善,为工业自动化、智能制造和物联网应用提供更强大的数据通信支持与互联互通能力。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/72227.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

观成科技:​加密C2框架Platypus流量分析

一、工具介绍 Platypus 是一款支持多会话的交互式反向 Shell 管理器。在实际的渗透测试中,为了解决 Netcat/Socat 等工具在文件传输、多会话管理方面的不足,该工具在多会话管理的基础上增加了在渗透测试中能更好发挥作用的功能(如:交互式 Sh…

OpenBMC:BmcWeb 处理http请求

OpenBMC:BmcWeb 读取http请求头-CSDN博客 介绍了,在读取完http头后,将调用Connection::handle处理http请求 1.Connection::handle void handle() {...req = std::make_shared<crow::Request>(parser->release(), reqEc);...req->session = userSession;accept …

MySQL事务深度解析:ACID特性、隔离级别与MVCC机制

引言 在数据库系统中&#xff0c;​事务是保障数据一致性与完整性的核心机制。MySQL通过ACID特性、多级隔离策略和MVCC&#xff08;多版本并发控制&#xff09;实现了高性能与高可靠性的平衡。本文将从底层原理出发&#xff0c;系统解析事务的四大特性、隔离级别的实现逻辑&am…

WireShark自动抓包

背景 异常流量检测是当前保护网络空间安全的重要检测方法。 对流量的研究&#xff0c;首先需要在系统中进行抓包&#xff0c;并对包进行分析。 这里对WireShark自动抓包进行简要介绍。 操作步骤 1、选择“捕获”>“选项”。 2、在Input下&#xff0c;选择要抓包的网络接…

Android 自定义View之底部导航栏

文章目录 Android 自定义View之底部导航栏概述代码定义TabIndex定义Tab定义TabView定义NavigationBarFragmentSwitchHelper管理类使用 源码下载 Android 自定义View之底部导航栏 概述 封装一个通用的底部导航栏控件。 代码 定义TabIndex Retention(AnnotationRetention.SOU…

西门子S7-1200 PLC远程调试技术方案(巨控GRM532模块)

三步快速实现远程调试 硬件部署 准备西门子S7-1200 PLC、巨控GRM552YW-C模块及编程电脑。GRM552YW-C通过网口与PLC连接&#xff0c;支持4G/5G/Wi-Fi/有线网络接入&#xff0c;无需复杂布线。 软件配置 安装GVCOM3配置软件&#xff0c;注册模块&#xff08;输入唯一序列号与密…

上下文学习思维链COTPrompt工程

一、上下文学习 上下文学习强调在学习过程中考虑问题所处的上下文环境。 1.1 上下文学习的分类 零样本&#xff08;Zero-Shot&#xff09;上下文学习单样本&#xff08;One-Shot&#xff09;上下文学习少样本&#xff08;Few-Shot&#xff09;上下文学习 1.2 示例选择方法 …

node.js-WebScoket心跳机制(服务器定时发送数据,检测连接状态,重连)

1.WebScoket心跳机制是&#xff1f; 基于上一篇文章&#xff0c;WebScoket在浏览器和服务器间完成一次握手&#xff0c;两者间创建持久性连接&#xff0c;并进行双向数据连接。node.js-node.js作为服务器&#xff0c;前端使用WebSocket&#xff08;单个TCP连接上进行全双工通讯…

若依RuoYi-Cloud-Plus微服务版(完整版)前后端部署

一.目标 在浏览器上成功登录进入 二.源码下载 后端源码&#xff1a;前往Gitee下载页面(https://gitee.com/dromara/RuoYi-Cloud-Plus)下载解压到工作目录。 前端源码&#xff1a; 前往Gitee下载页面(https://gitee.com/JavaLionLi/plus-ui)下载解压到工作目录。 文档地址&a…

Nginx 多协议代理功能(Nginx Multi Protocol Proxy Function)

前言 Nginx 作为高性能的反向代理和负载均衡工具&#xff0c;广泛应用于 HTTP 和 HTTPS 协议的代理。但你知道吗&#xff1f;Nginx 还可以代理其他协议&#xff0c;比如 TCP 和 UDP&#xff01;这些功能让它在多协议支持方面表现出色&#xff0c;可以用于数据库代理、流媒体服…

MistralAI挑战DeepSeek:开源模型能否颠覆行业巨头

在2025年&#xff0c;世界移动通信大会的展台上&#xff0c;MistralAI的创始人ArthurMensch对着镜头&#xff0c;露出了温和的笑容。不过他随后讲出的话&#xff0c;就仿佛一颗重磅炸弹&#xff0c;在AI领域引发了巨大的动荡——他们即将推出的开源模型&#xff0c;据传能够超越…

代码随想录第五十二天| 101.孤岛的总面积 102.沉没孤岛 103.水流问题 104.建造最大岛屿

孤岛的总面积 题目描述 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域&#xff0c;且完全被水域单元格包围。孤岛是那些位于矩阵内部、所有单元格都不接触边缘的岛…

八叉树地图的原理与实现

八叉树与体素图 八叉树地图 八叉树地图是可变分辨率的三维栅格地图&#xff0c;可以自由调整分辨率&#xff0c;如下所示&#xff1a; 根据点云的数量或密度决定每个叶子方块是否被占据 体素图 体素就是固定分辨率的三维栅格地图&#xff0c;如下所示&#xff1a; 根据点云…

最节省服务器,手搓电子证书查询系统

用户预算150元&#xff0c;想要一个最简单证书查询系统。前台能查询证书、后台管理员能登录能修改密码&#xff0c;证书能够手动输入修改删除、批量导入导出删除数据、查询搜索。能够兼容苹果、安卓、PC三端浏览器&#xff0c;最后帮忙部署到云服务器上。 用户预算不多&#xf…

什么是全栈?

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点下班 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 &#x1f4c3;文章前言 &#x1f537;文章均为学习工…

作物移栽机器人的结构设计的介绍

作物移栽机器人的结构设计是一个复杂的机械与电子结合的系统工程&#xff0c;单纯用代码来实现整个结构设计是不现实的&#xff0c;因为结构设计更多涉及到机械结构、硬件选型等物理层面的内容。不过&#xff0c;我们可以通过代码来模拟作物移栽机器人的部分功能&#xff0c;例…

【文献阅读】SPRec:用自我博弈打破大语言模型推荐的“同质化”困境

&#x1f4dc;研究背景 在如今的信息洪流中&#xff0c;推荐系统已经成为了我们生活中的“贴心小助手”&#xff0c;无论是看电影、听音乐还是购物&#xff0c;推荐系统都在努力为我们提供个性化的内容。但这些看似贴心的推荐背后&#xff0c;其实隐藏着一个严重的问题——同质…

使用1Panel一键搭建WordPress网站的详细教程(全)

嘿&#xff0c;各位想搭建自己网站的朋友们&#xff01;今天我要跟大家分享我用1Panel搭建WordPress网站的全过程。说实话&#xff0c;我之前对服务器运维一窍不通&#xff0c;但通过这次尝试&#xff0c;我发现原来建站可以这么简单&#xff01;下面是我的亲身经历和一些小技巧…

本地fake server,

C# 制作的系统级tcp 重定向&#xff0c;整个系统只要有访问指定url&#xff0c;返回自定义内容到访问端。不局限在浏览器单一方面。 再者请理解这个图的含金量&#xff0c;服务器down机都可以模拟。 用途那就太多了&#xff0c;当然很多用途都不正当。嘿嘿 如果你很想要源代…

设计模式之美

UML建模 统一建模语言&#xff08;UML&#xff09;是用来设计软件的可视化建模语言。它的语言特点是简单 统一 图形化 能表达软件设计中的动态与静态信息。 UML的分类 动态结构图&#xff1a; 类图 对象图 组件图 部署图 动态行为图&#xff1a; 状态图 活动图 时序图 协作…