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

C# Modbus TCP/IP学习记录

Modbus协议中,角色分为主站(Mater)、从站(Slave);数据类型分为线圈(Coil)、离散输入(Input)、保持寄存器(HoldingRegister)、输入寄存器(InputRegister)。

主站作为请求发起方,负责发送命令给一个或多个从站;从站作为请求响应方,负责接收主站命令并执行响应的操作。

线圈为可读写布尔值,离散输入为只读布尔值,保持寄存器为可读写16位比特数值,输入寄存器为只读16为比特数值。

实操步骤:

1.使用Visual Studio创建C# Framework 控制台应用程序,作为TCP Client(客户端)、Modbus Master(主站)。

2.使用Visual Studio安装Nuget包NModbus:

3.下载Modbus Slave应用程序,作为TCP Server(服务端)、Modbus Slave(从站)。

下载地址:Download

4.打开Modbus Slave,单击工具栏“New”,创建四个Slave:

5.创建的Slave默认内容为10行,Slave ID为1,数据类型为保持寄存器,如需修改使用工具栏Slave Defintion。

运用SlaveDefintion把Mbslave1.mbs的Function改为01 Coil Status(0x),为线圈;

把Mbslave2.mbs的Function改为02 Input Status(1x),为离散输入;

把Mbslave3.mbs的Function改为03 Holding Register(4x),为保持寄存器;

把Mbslave3.mbs的Function改为04  Input Register(4x),为输入寄存器。

6.使用工具栏Connection项,单击Connect,弹窗Connection Setup,修改Connection下拉框为Modbus TCP/IP,下列配置按实际需求修改:

7.回到Visual Studio的控制台应用程序,输入以下代码,代码含有4种数据类型的读写(离散输入和输入寄存器为只读,所以只有读)方法,按需修改:

using System;
using System.Diagnostics.SymbolStore;
using System.Net.Sockets;
using NModbus;
using NModbus.Message;class ModbusTcpClient
{private static string ipAddress = "127.0.0.1"; // 替换为实际 IP 地址private static int port = 502; // Modbus TCP 默认端口号private static byte slaveId = 1; // 从设备 IDstatic void Main(string[] args){try{using (TcpClient client = new TcpClient(ipAddress, port)){// 创建 Modbus TCP 主站var factory = new ModbusFactory();IModbusMaster master = factory.CreateMaster(client);HoldingRegisterTest(master);InputRegisterTest(master);ColiTest(master);InputTest(master);}}catch (Exception ex){Console.WriteLine($"发生错误: {ex.Message}");}Console.ReadLine();}private static void HoldingRegisterTest(IModbusMaster master){//保持寄存器是可读写的16位字(16位bits)ReadHoldingRegisters(master, slaveId, 0, 10);//从地址0寄存器起,读10个保持寄存器数值WriteSingleRegister(master, slaveId, 0, 21);//往地址0寄存器写入值21ReadSingleHoldingReister(master, slaveId, 0);//读取地址0寄存器数值WriteHoldingRegister(master, slaveId, 0, new ushort[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });//从地址0寄存器起,按数组顺序写入10个保持寄存器数值ReadHoldingRegisters(master, slaveId, 0, 10);}private static void InputRegisterTest(IModbusMaster master){//输入寄存器是只读的16位字(16位bits)ReadInputRegisters(master, slaveId, 0, 10);ReadSingleInputRegister(master, slaveId, 0);}private static void ColiTest(IModbusMaster master){//线圈是可读写的布尔值ReadCoils(master, slaveId, 0, 10);//从地址0寄存器起,读10个数值线圈WriteSingleCoils(master, slaveId, 0, true);//往地址0寄存器写入值21ReadCoils(master, slaveId, 0);//读取地址0寄存器数值WriteCoils(master, slaveId, 0, new bool[] { true, false, true, false, true, false, true, false, true, false});//从地址0寄存器起,按数组顺序写入10个线圈数值ReadCoils(master, slaveId, 0, 10);}private static void InputTest(IModbusMaster master){//离散输入是只读的布尔值ReadInputs(master, slaveId, 0, 10);ReadSingleInput(master, slaveId, 0);}#region 保持寄存器public static ushort[] ReadHoldingRegisters(IModbusMaster master, byte slaveId, ushort startAddress, ushort numRegisters){ushort[] readValues = master.ReadHoldingRegisters(slaveId, startAddress, numRegisters);Console.WriteLine("读取到的保持寄存器数据:");for (int i = 0; i < readValues.Length; i++){Console.WriteLine($"保持寄存器 {startAddress + i}: {readValues[i]}");}return readValues;}public static ushort ReadSingleHoldingReister(IModbusMaster master, byte slaveId, ushort startAddress){ushort[] readValues = ReadHoldingRegisters(master, slaveId, startAddress, 1);//没有读单一保持寄存器的方法return readValues[0];}public static void WriteHoldingRegister(IModbusMaster master, byte slaveId, ushort startAddress, ushort[] value){master.WriteMultipleRegisters(slaveId, startAddress, value);Console.WriteLine($"写入的保持寄存器数据:");for (int i = 0; i < value.Length; i++){Console.WriteLine($"保持寄存器 {startAddress + i}: {value[i]}");}}public static void WriteSingleRegister(IModbusMaster master, byte slaveId, ushort address, ushort value){master.WriteSingleRegister(slaveId, address, value);Console.WriteLine($"写入的保持寄存器数据:");Console.WriteLine($"保持寄存器 {address + 1}: {value}");}#endregion#region 输入寄存器public static ushort[] ReadInputRegisters(IModbusMaster master ,byte slaveId, ushort startAddress, ushort numRegisters){ushort[] readValues = master.ReadInputRegisters (slaveId, startAddress, numRegisters);Console.WriteLine("读取到的输入寄存器数据:");for (int i = 0; i < readValues.Length; i++){Console.WriteLine($"输入寄存器 {startAddress + i}: {readValues[i]}");}return readValues;}public static ushort ReadSingleInputRegister(IModbusMaster master, byte slaveId, ushort startAddress){ushort[] readValues = ReadInputRegisters(master, slaveId, startAddress, 1);//没有读单一输入寄存器的方法return readValues[0];}#endregion#region 线圈public static bool[] ReadCoils(IModbusMaster master, byte slaveId, ushort startAddress, ushort numRegisters){bool[] readValues = master.ReadCoils(slaveId, startAddress, numRegisters);Console.WriteLine("读取到的线圈数据:");for (int i = 0; i < readValues.Length; i++){Console.WriteLine($"线圈 {startAddress + i}: {readValues[i]}");}return readValues;}public static bool ReadCoils(IModbusMaster master, byte slaveId, ushort startAddress){bool[] readValues = ReadCoils(master, slaveId, startAddress, 1);//没有读单一保持寄存器的方法return readValues[0];}public static void WriteCoils(IModbusMaster master, byte slaveId, ushort startAddress, bool[] value){master.WriteMultipleCoils(slaveId, startAddress, value);Console.WriteLine($"写入的线圈数据:");for (int i = 0; i < value.Length; i++){Console.WriteLine($"线圈 {startAddress + i}: {value[i]}");}}public static void WriteSingleCoils(IModbusMaster master, byte slaveId, ushort address, bool value){master.WriteSingleCoil(slaveId, address, value);Console.WriteLine($"写入的线圈数据:");Console.WriteLine($"线圈{address + 1}: {value}");}#endregion#region 离散输入public static bool[] ReadInputs(IModbusMaster master, byte slaveId, ushort startAddress, ushort numRegisters){bool[] readValues = master.ReadInputs(slaveId, startAddress, numRegisters);Console.WriteLine("读取到的离散输入数据:");for (int i = 0; i < readValues.Length; i++){Console.WriteLine($"离散输入 {startAddress + i}: {readValues[i]}");}return readValues;}public static bool ReadSingleInput(IModbusMaster master, byte slaveId, ushort startAddress){bool[] readValues = ReadInputs(master, slaveId, startAddress, 1);//没有读单一离散输入的方法return readValues[0];}#endregion}

8.执行结果:

相关文章:

C# Modbus TCP/IP学习记录

Modbus协议中&#xff0c;角色分为主站&#xff08;Mater&#xff09;、从站&#xff08;Slave&#xff09;&#xff1b;数据类型分为线圈&#xff08;Coil&#xff09;、离散输入&#xff08;Input&#xff09;、保持寄存器&#xff08;HoldingRegister&#xff09;、输入寄存…...

斜线、短横、空格,三种分隔日期的优雅解析(Python | DeepSeek)

标准日期解析操作&#xff0c;str.replace链式如灵蛇蜿蜒&#xff0c;三元表达式像空灵仙家妙法。 笔记模板由python脚本于2025-03-25 22:32:24创建&#xff0c;本篇笔记适合三元表达式、字符串操作修习的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值&#xff1a;在…...

Skynet 中 snlua 服务启动整体流程分析

前言&#xff1a; 在 Skynet 中&#xff0c;Lua 扮演了极其重要的角色。Skynet 大多数业务逻辑都跑在一个个 Lua 服务里&#xff0c;而能够将 Lua 环境嵌入到 Skynet 框架下&#xff0c;并与 Skynet 消息调度机制完美结合&#xff0c;正是 snlua 服务所承担的核心功能。 本文将…...

RWA代币化崛起中的香港机遇:数字金融新枢纽的破局之道

引言&#xff1a;全球资产代币化浪潮中的香港坐标 在2025年全球金融数字化重构的关键节点&#xff0c;RWA&#xff08;现实世界资产代币化&#xff09;市场以年均740%的增速重塑价值流动规则。香港凭借独特的政策创新、跨境枢纽优势及庞大的资产储备&#xff0c;正从传统金融中…...

Docker Compose介绍

基本概念 Docker-Compose是Docker官方的开源项目&#xff0c;负责实现对docker容器集群的快速编排。 可以这么理解&#xff0c;docker compose是docker提出的一个工具软件&#xff0c;可以管理多个docker容器组成一个应用&#xff0c;只需要编写一个YAML格式的配置文件docker…...

【LeetCode 题解】算法:15.三数之和

一、问题描述 在 LeetCode 上有这样一道经典的算法题&#xff0c;题目要求给定一个整数数组 nums&#xff0c;找出所有不重复的三元组 [nums[i], nums[j], nums[k]]&#xff0c;需要满足以下两个条件&#xff1a; 三个元素的索引互不相同&#xff0c;即 i ! j&#xff0c;i ! …...

springboot使用阿里限流框架-sentinel

当前项目源码 控制台下载 启动bin中的看板服务&#xff1a;账号密码:sentinel/sentinel 官方文档地址 项目引入依赖 <!-- sentinel注解支持 --> <dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-annotation-aspectj<…...

Ubuntu20.04系统安装IsaacSim4.5与IsaacLab环境

Introduction 今天用自己的Ubuntu20.04系统安装最新更新的IsaacSim 4.5 与 最新版的IsaacLab遇到了问题&#xff0c;且这个问题组里师兄之前也遇到了&#xff0c;我的解决方法是从头来过&#xff0c;所及记录一下。 IsaacSim现在支持pip安装&#xff0c;但是Ubuntu20.04的pip…...

【大模型】数字人 EchoMimicV2 的环境配置和使用

一、EchoMimicV2的简单介绍 EchoMimicV2是EchoMimicV1的升级版本&#xff0c;旨在通过音频驱动生成更加自然和流畅的半身人类动画。它能够让用户仅通过简单的音频输入&#xff0c;生成与声音内容相匹配的动画效果&#xff0c;使虚拟人物看起来更加生动。 作者&#xff1a;由蚂蚁…...

导入 Excel 规则批量修改或删除 PDF 文档内容

需要对 PDF 文档内容进行修改的时候&#xff0c;通常我们会需要借助一些专业的工具来帮我们完成。那我们如果需要修改的 PDF 文档较多的时候&#xff0c;有什么方法可以帮我们实现批量操作呢&#xff1f;今天这篇文章就给大家介绍一下当我们需要批量修改多个 PDF 文档的时候&am…...

2.Excel :快速填充和拆分重组

一 案例1&#xff1a;快速填充 电子邮件中包含每个人的人名&#xff0c;现在要提取电子邮件中的姓名到名字列。 方法1&#xff1a;将 Nancy 复制到单元格后&#xff0c;邮件会高亮&#xff0c;然后输入A的时候系统就会知道提取名字了。 补充&#xff1a;如果第三个位置输入错误…...

python tkinter 开发蓍草占卜系统

1. 项目概述 1.1 简介 蓍草占卜是中国传统的占卜方法&#xff0c;用于演算六十四卦。本系统通过现代编程技术&#xff0c;将传统的蓍草占卜方法数字化&#xff0c;提供一个准确、便捷的占卜工具。 蓍草占卜&#xff0c;作为中国古代的一种传统占卜方法&#xff0c;承载着深厚…...

综合小实验之电视机

综合小实验1 一、实验拓扑图 二、实验要求 按照图示配置IP地址&#xff1b;按照图示区域划分配置对应的动态路由协议&#xff1b;在R7上配置dhcp服务器&#xff0c;能够让pc可以获取IP地址&#xff1b;将所有环回⼝宣告进ospf中&#xff0c;将环回⼝7宣告进rip中&#xff0c;…...

全排列|| 分发饼干 摆动序列

1.给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,2] 输出&#xff1a; [[1,1,2], [1,2,1], [2,1,1]] 示例 2&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3…...

【开源宝藏】用 JavaScript 手写一个丝滑的打字机动画效果

你当前项目实现了一个非常丝滑的 打字机文字效果动画&#xff0c;使用的是自定义的 typical.js 脚本。下面我将给出一份逐步拆解的中文教程&#xff0c;帮你或其他初学者快速上手并自定义这个打字效果。 ✨ 最终效果 打开页面后&#xff0c;中央会逐字显示&#xff1a; Hello…...

推荐1款简洁、小巧的实用收音机软件,支持手机和电脑

聊一聊 没想到现在还有人喜欢听广播。 我一直以为听广播必须要用那种小广播机才可以。 原来手机或电脑上也是可以的。 今天给大家分享一款可以在电脑和手机上听广播的软件。 软件介绍 龙卷风收音机 电台广播收音机分电脑和手机两个版本。 电脑端无需安装&#xff0c;下载…...

64. MfgTool烧写工具详解

一、MfgTool工具简介 1、mfgtool是NXP官方做的向I.MX系列烧写系统的软件&#xff0c;运行在windows下。可以烧写uboot.imx、zImage、dtb&#xff0c;rootfs。通过USB烧写。 Mfgtool里面默认存放了NXP官方开发板的系统文件&#xff0c; 2、基本原理 向开发板烧系统分两部分&am…...

3、孪生网络/连体网络(Siamese Network)

目的: 用Siamese Network (孪生网络) 解决Few-shot learning (小样本学习)。 Siamese Network并不是Meta Learning最好的方法, 但是通过学习Siamese Network,非常有助于理解其他Meta Learning算法。 这里介绍了两种方法:Siamese Network (孪生网络)、Trplet Loss Siam…...

前端学习笔记--CSS

HTMLCSSJavaScript 》 结构 表现 交互 如何学习 1.CSS是什么 2.CSS怎么用&#xff1f; 3.CSS选择器&#xff08;重点&#xff0c;难点&#xff09; 4.美化网页&#xff08;文字&#xff0c;阴影&#xff0c;超链接&#xff0c;列表&#xff0c;渐变。。。&#xff09; 5…...

开个坑记录一下树莓派4B部署yolo的一些问题

问题一&#xff1a;操作系统与内核信息 这个问题困扰了我一天半&#xff0c;下载的时候显示的信息是aar64的系统&#xff0c;但是这并无意味着一个问题&#xff0c;那就是你的操作系统是64位的。需要采用如下的指令查看&#xff1a; getconf LONG_BIT 我在树莓派得出来的操作…...

1.1 结构体与类对象在List中使用区别

一、问题的起源如下的代码是错误的&#xff0c;无法编译通过 struct Point {public int X;public int Y; }List<Point> points new List<Point> { new Point { X 1, Y 2 } }; points[0].X 10; // 编译错误&#xff01;无法修改副本的字段 二、原因分析 在C#中&…...

详细说明windows系统函数::SetUnhandledExceptionFilter(ExceptionFilter)

::SetUnhandledExceptionFilter(ExceptionFilter); 是 Windows 编程中用于设置顶层未处理异常过滤器的关键 API 调用。它属于 Windows 结构化异常处理&#xff08;SEH, Structured Exception Handling&#xff09;机制的一部分&#xff0c;主要用于捕获那些未被程序内部处理的异…...

力扣刷题39. 组合总和

39. 组合总和 - 力扣&#xff08;LeetCode&#xff09; 需要定义一个index变量用来记录访问数组的下标&#xff0c;每次递归进行传参&#xff0c;在搜索过程中&#xff0c;因为为了避免重复数据&#xff0c;而且允许一个元素的重复出现&#xff0c;传入index时传入当前遍历的i…...

正弦函数的连续傅里叶变换正弦序列的DTFT

正弦序列 时域 x [ n ] sin ⁡ ( ω 0 n ) x[n] \sin(\omega_0 n) x[n]sin(ω0​n)频域 X ( e j ω ) j π 2 [ δ ( ω − ω 0 ) − δ ( ω ω 0 ) ] X({\rm e}^{{\rm j}\omega}) \frac{{\rm j}\pi}{2} \left[ \delta(\omega - \omega_0) - \delta(\omega \omega_0…...

winstart.wsf 病毒清理大作战

0x00 背景 发现感染了winstart.wsf 病毒如何清理。 0x01 现象 遍历Users下每个目录以及C:\和C:\Windows\Temp 2个目录写入病毒文件。 C:\Users\Administrator\AppData\Local\Temp\winstart.wsf C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Program…...

leetcode 20.有效括号

20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; class Solution:def isValid(self, s: str) -> bool:stack []for i in s :if i in ((,{,[ ):stack.append(i)elif i in () ):# 这种情况是 栈弹出元素为空时候 &#xff0c;右半部分的括号多出来一些 比如&#x…...

Leetcode刷题笔记1 图论part07

卡码网 53 寻宝 prim算法 prim算法核心就是三步&#xff0c;称为prim三部曲&#xff1a; 第一步&#xff0c;选距离生成树最近节点第二步&#xff0c;最近节点加入生成树第三步&#xff0c;更新非生成树节点到生成树的距离&#xff08;即更新minDist数组&#xff09; def p…...

unittest自动化测试实战

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 为什么要学习unittest 按照测试阶段来划分&#xff0c;可以将测试分为单元测试、集成测试、系统测试和验收测试。单元测试是指对软件中的最小可测试单元在与程…...

flask,示例及解释

1&#xff09; from flask import Flask, render_templateapp Flask(__name__)app.route(/) def index():return render_template(m1index.html)app.route(/get_type) def get_type():return ["语文", "数学"]if __name__ __main__:app.run(host0.0.0.0…...

电机倍频曲线的一些奇异特性-原因分析及应用

这里对感应电机倍频曲线的特征进行了说明&#xff0c;然后将其特性用于电机转差率和工况的测量。先给出可以直接利用的结论&#xff1a; 电机的工况和转差率谱线会体现为5x,7x谱线调制在基频附近。两条调制过携带s信息的谱线距离基频谱线的距离。 与真实转速相对同步转速的频差…...

基于Ebay拍卖网站成交价格的影响因素分析

摘要:近些年来网上拍卖的不断地发展&#xff0c;网上购物慢慢变成了大家普遍接受的购物方式。因此关于网上拍卖的研究日益成为很多人研究的重点。 影响拍卖网站价格的因素很多&#xff0c;但很少有人分得清楚哪些因素才是比较重要的因素&#xff0c;因此对价格因素分析&#x…...

详解图卷积网络

文章目录 GCN/RGCN图卷积网络概述--运作原理**1. GCN&#xff08;Graph Convolutional Network&#xff0c;图卷积网络&#xff09;****1.1 核心思想****1.2 公式****1.3 特点****1.4 总结** **2. RGCN&#xff08;Relational Graph Convolutional Network&#xff0c;关系型图…...

Java 8-17核心特性全景解析之Java9、10

Java 9 核心特性解析 Java 9在2017年9月发布&#xff0c;带来了模块系统等重大变革&#xff0c;是Java平台现代化的重要一步。 模块系统 (Project Jigsaw) 特性概述 模块系统是Java 9最重要的特性&#xff0c;旨在解决Java平台和应用程序的可伸缩性问题&#xff0c;提供更好…...

mysql的学习

关系性数据库需要遵循ACID规则 原子性&#xff1a; 事务是最小的执行单位&#xff0c;不允许分割。事务的原子性确保动作要么全部完成&#xff0c;要么完全不起作用&#xff1b; 一致性&#xff1a; 执行事务前后&#xff0c;数据保持一致&#xff0c;例如转账业务中&#xff…...

leecode 560题

一、题目解析 题目如下->: 这道题的问题是&#xff0c;找到目标值为k的所有连续子串个数&#xff0c;因此最简单最容易想到的就是枚举 两个指针枚举起来确实可以解决&#xff0c;但是时间复杂度极大&#xff0c;达到了O(n^2)的级别 因此这不是我们想要的 二、解题思路 2.1 …...

借壹起航东风,中国工厂出海开启新征程

在经济全球化不断深入的当下&#xff0c;中国工厂正以积极的姿态投身海外市场&#xff0c;渴望在全球商业版图中占据一席之地&#xff0c;绽放独特的光彩。然而&#xff0c;出海之路充满了挑战与艰辛&#xff0c;品牌塑造困难重重、询盘量不稳定、营销成本居高不下等问题&#…...

Joomla教程—查看网站的前台页面与菜单管理(栏目管理)

原文&#xff1a;Joomla 查看网站的前台页面_w3cschool 在本节中&#xff0c;我们将简单介绍一下JOOMLA的前台界面。通过本节的介绍&#xff0c;希望你能对JOOMLA的界面组成有一个大致的了解。 你可以直接在浏览器中输入http://localhost/zmax/ 就会出现我们网站的首页了。也…...

HCIA-WLAN实验

1、划分VLAN&#xff0c;配置IP地址 2、配置AC作为AP的DHCP服务器自动为AP分配IP地址 dhcp enable interface Vlanif100 dhcp select interface 3、建立CAPWAP隧道 capwap source interface vlanif100 4、配置WLAN业务配置&#xff0c;下发至AP ①配置&#xff1a;wlan …...

DNA-PAINT

参考: 【科研教程】NUPACK网页版使用教程 https://www.bilibili.com/video/BV1G94y1W7mN/NUPACK新版网页版教程-模拟部分 https://zhuanlan.zhihu.com/p/678730568NUPACK 4.0 User Guide https://docs.nupack.org/NUPACK网页版使用指南 https://zhuanlan.zhihu.com/p/55024017…...

VS2022的第一个Qt程序——实战《加载并显示图像》

目录 一、UI设计 S1&#xff1a;双击Form Files下.ui文件&#xff0c;进入ui设计界面Qt Designer S2&#xff1a;然后拖动一个Push Button和Label控件到界面 S3&#xff1a;点击信号与槽&#xff0c;然后点击PushButton往外拉一下 S4&#xff1a;松开鼠标进入配置连接界面…...

从概率到梯度:理解分类问题中交叉熵的优越性

分类问题一般使用交叉熵&#xff08;Cross-Entropy&#xff09;而不是平方损失&#xff08;Square Loss&#xff09;函数1. **概率解释**2. **梯度性质**3. **对错误的惩罚**4. **计算复杂度**5. **总结** 分类问题一般使用交叉熵&#xff08;Cross-Entropy&#xff09;而不是平…...

如何选择?Postman vs JMeter 对比介绍

Postman 和 JMeter 作为两款主流测试工具&#xff0c;各有特色。本文将从多个维度详细对比这两款工具最新特性和应用场景。 工具基本介绍 对比项 Postman JMeter 类型 API 开发和测试工具 性能测试工具 开源情况 闭源&#xff0c;提供免费版 开源&#xff08;Apache L…...

P1182 数列分段 Section II

P1182 数列分段 Section II - 洛谷 题目描述 对于给定的一个长度为 N 的正整数数列 A1​∼AN​&#xff0c;现要将其分成 M&#xff08;M≤N&#xff09;段&#xff0c;并要求每段连续&#xff0c;且每段和的最大值最小。 关于最大值最小&#xff1a; 例如一数列 4 2 4 5 1…...

Thales靶场

信息收集 将靶机改为net模式&#xff0c;开启kali进行扫描&#xff0c;得到靶机ip 对靶机的端口&#xff0c;目录进行扫描&#xff0c;8080端口是 apache tomcat代理 进入8080端口&#xff0c;点击app出现登录窗口&#xff0c;弱口令没试出来&#xff0c;可以爆破登录窗口 查…...

系统思考—看见未来

感谢上海财经大学终身教育学院的持续邀请&#xff01;每个月&#xff0c;都会带着不同的思维火花&#xff0c;走进财大与学员们一起探索系统思考的奥秘。 这次为宜宾市的干部们带来了一场深刻的学习体验。通过系统思考&#xff0c;帮助大家从整体视角去发现问题、分析问题、解…...

第30周Java分布式入门 ThreadLocal

ThreadLocal 课程笔记 一、章节结构概述 本章主要学习重要的工具类 ThreadLocal。章节分为六大模块&#xff1a; ThreadLocal 的两大使用场景ThreadLocal 所带来的好处ThreadLocal 的主要方法及使用顺序ThreadLocal 原理源码分析使用 ThreadLocal 的注意点和使用规范 从下一…...

Windows 10 LTSC 2019 中文版下载及安装教程(附安装包)

&#xff08;cn_windows_10_enterprise_ltsc_2019_x64_dvd_9c09ff24&#xff09;涵盖常见疑问和注意事项&#xff1a; cn_windows_10_enterprise_ltsc_2019_x64_dvd_9c09ff24 下载链接&#xff1a;https://pan.quark.cn/s/c2c8f3cd18f1 1. 镜像文件来源与合法性 官方渠道&…...

死亡并不是走出生命 而是走出时间

目录 第一章 倒春寒 第二章 悖论与共生 第三章 坍缩与永恒 第四章 在时差里相爱 终章 你从未离开 第一章 倒春寒 2022年春天的扬州东关街&#xff0c;青衣在文昌阁古槐下调试着「时间胶囊」算法。这个能将人类记忆转化为数据流的程序&#xff0c;是他用三年时间对抗渐冻…...

Langchain中的表格解析:RAG 和表格的爱恨情仇

实现 RAG(Retrieval-Augmented Generation)是一个挑战,尤其是在有效解析和理解非结构化文档中的表格时。这在处理扫描文档或图像格式的文档时尤为困难。这些挑战至少包括以下三个方面: 1.表格的“叛逆期”:不准确的解析可能会破坏表格结构: 表格在文档里就像个叛逆的青少…...

STM32F103_LL库+寄存器学习笔记02 - 开启SysTick(滴答定时器)中断

导言 《STM32F103_LL库寄存器学习笔记01 - 梳理CubeMX生成的LL库最小的裸机系统框架》上一章节对CubeMX生成的最小系统框架进行梳理&#xff0c;在此工程的基础上&#xff0c;梳理SysTick&#xff08;滴答定时器&#xff09;中断是怎样开启的&#xff1f;为什么SysTick中断会自…...