当前位置: 首页 > news >正文

Modbus TCP协议介绍(ModbusTCP)

文章目录

  • 理解Modbus TCP协议(Understanding Modbus TCP Protocol)
    • 简介(Introduction to Modbus TCP)
      • 历史背景(Historical Context)
      • 关键特性(Key Features)
    • Modbus TCP协议结构(Modbus TCP Protocol Structure)
      • 帧格式(Frame Format)
        • MBAP头部
          • **Transaction Identifier (事务标识符)**
          • **Protocol Identifier (协议标识符)**
          • **Length (长度)**
          • **Unit Identifier (单元标识符)**
        • PDU部分
        • 示例
          • 请求帧示例
          • 响应帧示例
      • 数据模型(Data Model)
        • 离散输入
        • 线圈
        • 输入寄存器
        • 保持寄存器
    • 通信过程(Communication Process)
      • 建立连接(Establishing a Connection)(从设备默认监听端口502)
      • 请求与响应(Request and Response)
    • 实际实施(Practical Implementation)
      • 设置Modbus TCP服务器(Setting Up a Modbus TCP Server)
        • 注意:实际使用中,我们通常无需编写 modbus TCP 服务端代码,直接采购的支持 Modbus TCP 协议的设备出厂时就已包含
      • 与Modbus TCP客户端通信(Communicating with a Modbus TCP Client)
    • Modbus TCP的应用(Applications of Modbus TCP)
    • 挑战与解决方案(Challenges and Solutions)
    • 结论(Conclusion)
    • 其他
      • 关于Modbus TCP的“interoperability”(互操作性)
      • 关于 modbus TCP 客户端服务端的模拟通信

理解Modbus TCP协议(Understanding Modbus TCP Protocol)

The Modbus TCP protocol is an essential communication standard that serves as a backbone(支柱;脊梁) for industrial(工业) and automation(自动化) systems worldwide.
Modbus TCP协议是一种至关重要的通信标准,它是全球工业和自动化系统的支柱。

It builds upon the legacy(遗留的;已停产的) Modbus protocol, extending it over TCP/IP networks to enable communication between devices on modern Ethernet networks.
它基于传统的Modbus协议,通过扩展到TCP/IP网络上,使得设备能够在现代以太网网络上进行通信。

This article delves into the technical intricacies, applications, and implementation examples of Modbus TCP, providing a comprehensive guide for engineers, developers, and enthusiasts(爱好者) in the field of industrial automation.
本文深入探讨了Modbus TCP的技术细节、应用和实现示例,为工业自动化领域的工程师、开发人员和爱好者提供了全面的指南。

简介(Introduction to Modbus TCP)

历史背景(Historical Context)

Modbus, originally developed by Modicon in 1979, is a communication protocol designed for industrial devices to communicate over serial lines(串行线路).
Modbus最初由Modicon在1979年开发,是一种为工业设备设计的通过串行线进行通信的通信协议。

With the advent(出现) of Ethernet and TCP/IP, the protocol was extended to operate over these networks as Modbus TCP, making it more relevant(相关的) in the context of modern industrial systems.
随着以太网和TCP/IP的出现,该协议被扩展为在这些网络上作为Modbus TCP运行,使其在现代工业系统的背景下更加相关。

关键特性(Key Features)

  • Simplicity and Openness: Modbus TCP inherits its predecessor’s(前身;前任) simplicity, making it easy to understand, implement, and integrate(整合;集成).
    简单性和开放性:Modbus TCP继承了其前身的简单性,使其易于理解、实现和整合。

  • Scalability: It can be scaled(扩展) from small, single-processor devices to complex networked(联网的) systems.
    可扩展性:它可以从小型的单处理器设备扩展到复杂的网络系统。

  • Interoperability: Being an open standard, it ensures interoperability(互操作性) among devices from different manufacturers(生产商).
    互操作性:作为一个开放标准,它确保了来自不同制造商的设备之间的互操作性。

Modbus TCP协议结构(Modbus TCP Protocol Structure)

帧格式(Frame Format)

A Modbus TCP frame consists of a 7-byte header and a data section. The header includes fields for transaction(事务) identifier(标识符), protocol identifier, length, and unit identifier, facilitating(促进) the management of requests and responses over TCP/IP.
Modbus TCP帧由一个7字节的头部和一个数据部分组成。头部包含事务标识符、协议标识符、长度和单元标识符等字段,便于在TCP/IP上管理请求和响应。

Modbus TCP的请求帧和响应帧在帧格式上是相同的。它们都包括一个MBAP头(Modbus Application Protocol header)和一个PDU(Protocol Data Unit)部分。MBAP头用于TCP/IP通信,而PDU部分与传统的Modbus RTU/ASCII帧的PDU相同。

MBAP头部

MBAP头部由以下几个部分组成:

Transaction Identifier (事务标识符)

2字节,用于协调请求和响应之间的事务处理。客户端发起的每个请求都有一个唯一的事务标识符,服务器的响应会使用相同的标识符。

Protocol Identifier (协议标识符)

2字节,用于识别上层协议。对于Modbus TCP来说,这个值是0。

Length (长度)

2字节,表示接下来的单元标识符、功能码和数据的总字节数。

Unit Identifier (单元标识符)

1字节,通常用于识别远程服务器,特别是在串行线路上通过网关连接到多个Modbus设备时。

PDU部分

PDU部分包括:

  • Function Code (功能码): 1字节,指示请求的操作类型,如读取或写入数据。
  • Data (数据): 随功能码而变,对于请求,它包含了请求的地址和数量等信息;对于响应,它包含了请求的数据或者状态信息。
示例
请求帧示例

假设需要从设备上读取保持寄存器的值,从地址100开始,读取3个寄存器。

  • Transaction Identifier: 0x0001
  • Protocol Identifier: 0x0000
  • Length: 0x0006 (接下来的字节数,包括单元标识符、功能码和数据)
  • Unit Identifier: 0x01
  • Function Code: 0x03 (读取保持寄存器)
  • Data: 开始地址0x0064 (100),数量0x0003 (3)
响应帧示例

对上述请求的响应,假设读取的寄存器值分别为:0x000A0x000B0x000C

  • Transaction Identifier: 0x0001 (与请求相同)
  • Protocol Identifier: 0x0000
  • Length: 0x0009 (接下来的字节数,包括单元标识符、功能码、字节计数和数据)
  • Unit Identifier: 0x01
  • Function Code: 0x03
  • Byte Count: 0x06 (读取的字节数,3个寄存器*2字节/寄存器 = 6字节)
  • Data: 寄存器值0x000A0x000B0x000C

通过这些示例,可以看到Modbus TCP请求和响应帧的结构是相似的,主要区别在于PDU部分的数据内容。

数据模型(Data Model)

Modbus TCP follows a simple data model with four primary tables:
Modbus TCP遵循一个简单的数据模型,包含四个主要表格:

离散输入
  • Discrete Inputs: Read-only boolean values.
    离散输入:只读布尔值。
线圈
  • Coils: Read-write boolean values.
    线圈:可读写布尔值。

在Modbus协议的数据模型中,“线圈”(Coils) 是用来表示可读写的布尔值(0或1)的内存位置。这个术语“线圈”来源于早期的继电器控制系统,在这些系统中,物理的继电器(或线圈)被用来打开或关闭电路,从而控制机械设备的开启和关闭。当继电器的线圈被激活(通电)时,相应的开关就会闭合,反之则断开。

在Modbus协议中,虚拟的“线圈”延续了这一概念,用于代表和控制设备的二进制状态。例如,一个线圈可以用来控制一个电机的启动/停止,或者表示一个传感器的开/关状态。每个线圈的状态都由单个比特表示,可以被设置(1)或重置(0)。

因此,尽管在数字通信和控制系统中我们不再直接操作物理的继电器线圈,这个术语仍然被用来描述可以被单独控制的逻辑单位。这样的命名保留了与早期自动化系统的联系,同时也提供了一个直观的方式来理解这些控制元素的作用。

在Modbus协议的上下文中,线圈的使用不仅限于控制继电器,它们可以用来控制或表示任何二进制输出/输入设备的状态,使得Modbus协议能够灵活地应用于各种工业自动化和控制场景中。

输入寄存器
  • Input Registers: Read-only 16-bit values.
    输入寄存器:只读的16位值。
保持寄存器
  • Holding Registers: Read-write 16-bit values.
    保持寄存器:可读写的16位值。

通信过程(Communication Process)

建立连接(Establishing a Connection)(从设备默认监听端口502)

A Modbus TCP connection is established over TCP/IP using the standard socket connection mechanism. The client (usually a master device) initiates a connection to the server (slave device) on port 502, which is the default port for Modbus TCP communications.
通过使用标准的套接字连接机制在TCP/IP上建立Modbus TCP连接。客户端(通常是主设备)通过502端口(这是Modbus TCP通信的默认端口)发起连接到服务器(从设备)。

请求与响应(Request and Response)

After establishing a connection, the client sends request packets to read or write to the data model. The server processes these requests and responds accordingly(相应地).
建立连接后,客户端发送请求包以读取或写入数据模型。服务器处理这些请求并做出相应的响应。

实际实施(Practical Implementation)

设置Modbus TCP服务器(Setting Up a Modbus TCP Server)

A basic example of setting up a Modbus TCP server using a hypothetical(假设的) library modbus-tcp might look like this:
使用一个假想的库modbus-tcp设置Modbus TCP服务器的基本示例可能如下所示:

from modbus_tcp import ModbusServer# Initialize the server with the IP address and port number
server = ModbusServer(host='192.168.1.100', port=502)# Define handling for read and write requests
def handle_request(request):# Process request and return responsereturn responseserver.on_request(handle_request)# Start the server
server.start()
注意:实际使用中,我们通常无需编写 modbus TCP 服务端代码,直接采购的支持 Modbus TCP 协议的设备出厂时就已包含

在实际应用中,通常我们会采购已经支持Modbus TCP协议的设备,如传感器、PLC(可编程逻辑控制器)、变频器等,这些设备在出厂时已经内置了Modbus TCP服务器的功能。这意味着它们能够监听网络上的请求,并且能够处理来自Modbus TCP客户端(通常是监控系统、SCADA系统或其他控制设备)的命令。

部署这些设备的步骤大致如下:

  1. 物理连接:将Modbus TCP支持的设备连接到网络中,这通常通过以太网线和交换机完成。

  2. 配置IP地址:为每个设备配置一个唯一的IP地址。这可以通过设备的控制面板、专用软件或网络协议如DHCP完成。在很多情况下,为了保证网络通信的可靠性,会给这些设备配置静态IP地址。

  3. 配置Modbus设置:根据需要,可能还需要在设备上配置Modbus相关的设置,如单元标识符(Unit ID)或其他参数。这一步骤依赖于具体设备的配置方法。

  4. 测试通信:配置完成后,使用Modbus客户端软件或设备测试与Modbus TCP服务器(即你的设备)的通信是否正常。这通常涉及读取或写入设备的寄存器来验证配置。

“设置Modbus TCP服务器”的步骤,更多的是在学习、测试或开发自定义解决方案时使用。例如,如果你正在开发一个新的Modbus TCP客户端应用,或者需要在没有实际硬件的情况下测试系统,你可能会使用模拟的Modbus TCP服务器软件来模拟真实设备的行为。

实际上,内置Modbus TCP功能的工业设备设计为即插即用,简化了现场的网络集成和设备配置过程。配置好IP地址并确保网络连接正常后,这些设备就可以作为Modbus TCP服务器,响应网络上Modbus客户端的请求了。

与Modbus TCP客户端通信(Communicating with a Modbus TCP Client)

Similarly, setting up a client to communicate with a Modbus TCP server can be demonstrated as follows:
同样,设置客户端与Modbus TCP服务器通信的示例可以如下所示:

from modbus_tcp import ModbusClient# Initialize the client with the server's IP address and port
client = ModbusClient(host='192.168.1.100', port=502)# Connect to the server
client.connect()# Read from holding registers starting at address 0, quantity of 10(读取十个保存寄存器)
registers = client.read_holding_registers(address=0, quantity=10)# Print the values
print(registers)# Close the connection
client.disconnect()

Modbus TCP的应用(Applications of Modbus TCP)

Modbus TCP is widely used in various industrial sectors(领域), including manufacturing, energy, building automation(建筑自动化), and more. Its applications range from monitoring and controlling devices, like sensors and actuators(执行器), to more complex scenarios like integrating with SCADA (Supervisory(监督的) Control and Data Acquisition) systems for comprehensive facility management.
Modbus TCP在各种工业领域广泛使用,包括制造业、能源、建筑自动化等。其应用范围从监控和控制设备(如传感器和执行器)到更复杂的场景,如与SCADA(监控控制和数据采集)系统集成,进行综合设施管理。

挑战与解决方案(Challenges and Solutions)

While Modbus TCP offers many benefits, it also faces challenges like security vulnerabilities(脆弱性) inherent(固有的、内在的) in its simplicity. Modern implementations often incorporate security measures such as VPNs, encryption, and secure authentication(认证) methods to mitigate(减轻) these risks.
虽然Modbus TCP提供了许多好处,但它也面临着由于其简单性而固有的安全漏洞等挑战。现代实施通常包括采取VPN、加密和安全认证方法等安全措施来减轻这些风险。

结论(Conclusion)

Modbus TCP continues to be a vital(至关重要的) protocol in the realm of industrial automation, offering a blend(和谐结合;融合) of simplicity, efficiency, and interoperability. Its widespread adoption(采用) and the community’s ongoing(持续的) efforts to address(设法解决) its limitations ensure its relevance(相关性) in the evolving(不断发展的) landscape(领域) of industrial communication technologies.
Modbus TCP继续在工业自动化领域内是一个至关重要的协议,它提供了简单性、效率和互操作性的完美结合。它的广泛采用以及社区持续努力解决其局限性,确保了它在不断发展的工业通信技术领域中的相关性。

其他

关于Modbus TCP的“interoperability”(互操作性)

Modbus TCP的 “interoperability”(互操作性) 指的是不同制造商生产的设备能够通过Modbus TCP协议无缝通信和协同工作的能力。互操作性是信息技术和工业自动化领域的一个关键概念,它确保了不同设备之间可以交换信息和使用对方的服务,即使这些设备来自不同的厂家、运行不同的软件或使用不同的硬件平台。

对于Modbus TCP而言,互操作性的实现基于几个关键因素:

  1. 开放标准:Modbus TCP是一个公开的协议标准,任何组织或个人都可以访问这些标准的细节,并在自己的设备或软件中实现这些标准。这种开放性促进了广泛的采用和支持,从而增强了不同设备间的互操作能力。

  2. 统一的通信协议:Modbus TCP定义了一组统一的通信规则,包括数据格式、功能码和错误检测机制等。这确保了所有遵循Modbus TCP标准的设备都能以相同的方式交换数据,无论制造商或设备类型。

  3. 简单性和灵活性:Modbus TCP的简单性和灵活性也有助于互操作性。它支持多种数据类型和操作,能够满足不同应用的需求,同时保持足够的简单性,以便于不同厂家的设备实现和理解。

  4. 广泛的支持:由于Modbus TCP的广泛应用,许多工具和库已经支持这个协议,提供了现成的解决方案来简化设备间的通信。这进一步降低了实现互操作性的障碍。

因此,Modbus TCP的互操作性意味着不同来源的设备和系统可以更容易地集成在一起,为用户提供更大的灵活性和选择性,同时降低了系统整合的复杂性和成本。这对于构建和维护大型、复杂的自动化系统尤其重要,因为它允许系统设计者从多个供应商中选择合适的设备,而不用担心兼容性问题。

关于 modbus TCP 客户端服务端的模拟通信

参考文章:Python Docker实现Modbus TCP协议客户端与服务端模拟通信

相关文章:

Modbus TCP协议介绍(ModbusTCP)

文章目录 理解Modbus TCP协议(Understanding Modbus TCP Protocol)简介(Introduction to Modbus TCP)历史背景(Historical Context)关键特性(Key Features) Modbus TCP协议结构&…...

【Java核心能力】一篇文章了解 ZooKeeper 底层运行原理

欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送! 在我后台回复 「资料」 可领取编程高频电子书! 在我后台回复「面试」可领取硬核面试笔记! 文章导读地址…...

P2123皇后游戏

P2123皇后游戏 参考题解 #include <iostream> #include <algorithm> using namespace std;int T; int n; long long res;struct Person {int a,b,d; }p[20005];bool person_cmp(const Person& x,const Person& y) {if(x.d y.d){if(x.d < 0)return x.a …...

git之目前的主流版本

官方文档 简介 我们都知道&#xff0c;在开发过程中&#xff0c;版本控制是至关重要的。Git作为目前最为流行的版本控制系统&#xff0c;已经成为了开发者们的标配。出于好奇&#xff0c;本人对git目前主流几大版本&#xff08;GitLab、GitHub、Gitee 和 GitCode&#xff09;…...

PyQT5学习--新建窗体模板

目录 1 Dialog 2 Main Window 3 Widget Dialog 模板&#xff0c;基于 QDialog 类的窗体&#xff0c;具有一般对话框的特性&#xff0c;如可以模态显示、具有返回值等。 Main Window 模板&#xff0c;基于 QMainWindow 类的窗体&#xff0c;具有主窗口的特性&#xff0c;窗口…...

企业产品网络安全建设日志0328

文章目录 Actuator再次暴露域名上线基线检查初见效果WAF更新遇波折301跳转推进中 Actuator再次暴露 为了验证挖f的拦截效果&#xff0c;自己随手拼了个Actuator&#xff0c;结果可以访问到公司的actuator。。 据称是某网关更换新组件后未做防御&#xff0c;已要求全部做防御&a…...

QT(C++)-error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”

1、项目场景&#xff1a; 在VS中采用QT&#xff08;C&#xff09;调试时&#xff0c;出现error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”错误 2、解决方案&#xff1a; 在“解决方案资源管理器”中选中出现此类BUG的项目&#xff0c;右键-…...

【 MyBatis 】| 关于多表联查返回 List 集合只查到一条的 BUG

目录 一. &#x1f981; 写在前面二. &#x1f981; 探索过程2.1 开端 —— 开始写 bug2.2 发展 —— bug 完成2.3 高潮 —— bug探究2.4 结局 —— 效果展示 三. &#x1f981; 写在最后 一. &#x1f981; 写在前面 今天又是 BUG 气满满的一天&#xff0c;一个 xxxMapper.xm…...

PL/SQL的词法单元

目录 字符集 标识符 分隔符 注释 oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 PL/SQL块中的每一条语句都必须以分号结束。 一个SQL语句可以跨多行&#xff0c;但分号表示该语句的结束:一行中也可以有多条 SQL语句&…...

第三十二天-PythonWeb主流框架-Django框架

目录 1.介绍 发展历史 介绍 2.使用 1.安装 2.创建项目 3.项目结构 4.启动 3.开发流程 1.设置ip可访问 2.创建模块 3.第一个页面 4.视图 5.include()参数 6.url与视图的关系 7.响应内容 4.视图处理业务逻辑 1.响应html 2.获取url参数 3.从文件响应html内容 …...

利用python搭建临时文件传输服务

场景 如果想从一台服务器上传输文件又多种方法&#xff0c;其中常见的是利用scp进行传输&#xff0c;但是需要知道服务器的账号密码才能进行传输&#xff0c;但有时候我们并不知道账号密码&#xff0c;这个时候我们就可以通过python -m SimpleHTTPServer 命令进行传输文件 启…...

详解 WebWorker 的概念、使用场景、示例

前言 提到 WebWorker,可能有些小伙伴比较陌生,不知道是做什么的,甚至不知道使用场景,今天这篇文章就带大家一起简单了解一下什么是 webworker! 概念 WebWorker 实际上是运行在浏览器后台的一个单独的线程,因此可以执行一些耗时的操作而不会阻塞主线程。WebWorker 通过…...

IOS面试题编程机制 6-10

6. 如何理解MVVM设计模式?MVVM即 Model-View-ViewModel 1.View主要用于界面呈现,与用户输入设备进行交互 2.ViewModel是MVVM架构中最重要的部分,ViewModel中包含属性,方法,事件,属性验证等逻辑,负责View与Model之间的通讯 3.Model就是我们常说的数据模型,用于数据的构造…...

seleniumui自动化实例-邮箱登录

1.登录163邮箱源码&#xff1a; from selenium import webdriver driver webdriver.Firefox() driver.get("http://www.163.com") driver.find_element_by_id("id").clear() driver.find_element_by_id("id").send_keys("用户名")…...

力扣练习 3.27

121. 买卖股票的最佳时机 贪婪思想&#xff1a;力争在最低成本买入&#xff0c;最高利润卖出。 [7,1,5,3,6,4] 可以先假设在第一天买入和卖出&#xff0c;这时最低成本是7&#xff0c;最大利润是7-70 然后假设在第二天买入和卖出&#xff0c;成本就是1&#xff0c;利润也是0 第…...

C 指向指针的指针

指向指针的指针是一种多级间接寻址的形式&#xff0c;或者说是一个指针链。通常&#xff0c;一个指针包含一个变量的地址。当我们定义一个指向指针的指针时&#xff0c;第一个指针包含了第二个指针的地址&#xff0c;第二个指针指向包含实际值的位置。 一个指向指针的指针变量…...

通俗易懂:新生代、老年代和永久代/元空间的具体含义是什么?

在Java虚拟机&#xff08;JVM&#xff09;的内存管理中&#xff0c;堆内存通常被划分为几个不同的区域&#xff0c;以便更有效地管理和回收内存。以下是新生代&#xff08;Young Generation&#xff09;、老年代&#xff08;Old Generation&#xff09;和永久代/元空间&#xf…...

Centos7.9备份mysql数据库

1. 备份 备份shell脚本 [rootiZoqvrzbtnzd6kZ local]# vi mysql_backup.sh #!/bin/bash #设置MySQL登录信息 MYSQL_USER"root" MYSQL_PASSWORD"**********" MYSQL_DATABASE"ubox" BACKUP_DIR"/usr/local/mysql_backup" MONTH"…...

Automatic Prompt Engineering

让大模型自己生成prompt&#xff0c;生成提示&#xff08;prompt&#xff09;存在两种不同的操作方式。第一种方式是在文本空间中进行&#xff0c;这种提示以离散的文本形式存在。第二种方式是将提示抽象成一个向量&#xff0c;在特征空间中进行操作&#xff0c;这种提示是抽象…...

Spring高级面试题-2024

Spring 框架中都用到了哪些设计模式&#xff1f; 1. 简单工厂&#xff1a; ○ BeanFactory&#xff1a;Spring的BeanFactory充当工厂&#xff0c;负责根据配置信息创建Bean实例。它是一种工厂模式的应用&#xff0c;根据指定的类名或ID创建Bean对象。2. 工厂方法&#xff…...

用BSP优化3D渲染

3D渲染引擎设计者面临的最大问题之一是可见性计算&#xff1a;只必须绘制可见的墙壁和物体&#xff0c;并且必须以正确的顺序绘制它们&#xff08;应该在远处的墙壁前面绘制近墙&#xff09; 。 更重要的是&#xff0c;对于游戏等应用程序来说&#xff0c;开发能够快速渲染场景…...

Composer常见错误解决

Composer 是 PHP 社区广泛使用的一个依赖管理工具&#xff0c;它帮助开发者定义、管理和安装项目所需的库。在使用 Composer 的过程中&#xff0c;可能会遇到各种错误和问题。以下是一些常见的 Composer 错误及其解决方法&#xff1a; 1. 内存限制错误 错误信息&#xff1a;P…...

amazon中sns的使用

使用网页配置订阅 创建主题>使用标准>自定义名称>其他默认 点击创建即可 创建订阅 订阅策略配置&#xff08;不配置&#xff0c;会推送给多个人&#xff0c;除非你每个都创建主题&#xff09; 注意&#xff1a; 可以你可以随便写&#xff0c;后面的值只能是对象&am…...

web前端面试题----->VUE

Vue的数据双向绑定是通过Vue的响应式系统实现的。具体原理&#xff1a; 1. Vue会在初始化时对数据对象进行遍历&#xff0c;使用Object.defineProperty方法将每个属性转化为getter、setter。这样在访问或修改数据时&#xff0c;Vue能够监听到数据的变化。 2. 当数据发生变化时…...

计算机领域热门技术词汇

文章目录 计算机领域热门技术词汇1、机器学习 machine learning2、神经网络 neural network3、深度学习 deep learning4、自然语言处理 natural language processing5、计算机视觉 computer vision6、大数据 big data7、数据挖掘 data mining&#xff08;DM&#xff09;8、云计…...

jsp指令和动作

1.page指令&#xff1a;描述页面信息 pageENcoding:软件编码 contentType&#xff1a;浏览器编码 2.include指令&#xff1a;将多个网页合成一个网页&#xff0c;静态包含网页 问题&#xff1a;1.在网页源代码中&#xff0c;会形成错误的多遍代码&#xff0c;将主页面代码和…...

手撕算法-最小覆盖子串

描述 分析 滑动窗口。 参考力扣官方的题解思路 本问题要求我们返回字符串 s 中包含字符串 t 的全部字符的最小窗口。我们称包含 t 的全部字母的窗口为「可行」窗口。 我们可以用滑动窗口的思想解决这个问题。在滑动窗口类型的问题中都会有两个指针&#xff0c;一个用于「延伸…...

TrOCR—基于Transformer的OCR入门

导 读 本文主要介绍TrOCR&#xff1a;基于Transformer的OCR入门。 背景介绍 多年来&#xff0c;光学字符识别 (OCR) 出现了多项创新。它对零售、医疗保健、银行和许多其他行业的影响是巨大的。尽管有着悠久的历史和多种最先进的模型&#xff0c;研究人员仍在不断创新。与深…...

WIN使用LPD协议来共享打印机含统信UOS

打开“控制面板”&#xff0c;“程序和功能”&#xff0c;“启动或关闭Windows功能”&#xff0c;下拉找到“打印和文件服务”&#xff0c;勾选“LPD打印服务”和“LPR端口监视器”。确定之后重启电脑&#xff0c;共享主机和其它需要添加共享打印机的都开启功能和重启。 一、启…...

huawei 华为 交换机 配置 LACP 模式的链路聚合示例 (交换机之间直连)

组网需求 如 图 3-22 所示&#xff0c; SwitchA 和 SwitchB 通过以太链路分别都连接 VLAN10 和 VLAN20 的网络&#xff0c;且SwitchA 和 SwitchB 之间有较大的数据流量。用户希望 SwitchA 和 SwitchB 之间能够提供较大的链路带宽来使相同VLAN 间互相通信。在两台 Switch 设备上…...