VoltAgent开源项目实战:从硬件选型到部署的电压监控智能代理

news2026/4/27 9:16:52
1. 项目概述一个面向电压监测的智能代理最近在折腾一些嵌入式设备和老旧服务器的电源监控发现市面上的通用监控方案要么太重要么太贵要么就是数据不够直观。直到我遇到了一个叫VoltAgent的开源项目它的核心仓库是VoltAgent/voltagent。这玩意儿本质上是一个轻量级的、专门为电压Voltage监控而设计的智能代理Agent。它不像那些大而全的监控系统上来就给你塞几百个指标和复杂的告警规则VoltAgent 的思路很清晰专注、精准、低开销专门解决电压这一特定物理量的采集、上报、预警问题。想象一下你有一台重要的网络设备放在机房角落或者一个DIY的树莓派集群在跑关键服务你总担心市电不稳或者电源老化导致电压异常进而引发设备重启甚至硬件损坏。传统的做法可能是接个万用表定期去看或者上一套完整的机房动环监控前者太麻烦后者成本太高。VoltAgent 就是为了填补这个空白而生的。它通常部署在被监控的设备上通过ADC模数转换器模块读取电压传感器的模拟信号将其转换为数字值然后通过一个轻量级的代理程序将数据推送到你指定的监控后端比如 Prometheus、InfluxDB或者直接通过 HTTP API 上报并可以配置灵活的阈值告警。这个项目特别适合那些对电源质量敏感的场景比如实验室精密仪器、家庭服务器、边缘计算节点、物联网网关甚至是给电动车充电桩做个简易的电压监控。它的价值在于把专业的电压监控能力以一种极简、可编程的方式带给了开发者和运维人员。接下来我就结合自己的实际部署经验把这个项目的里里外外、从设计思路到避坑指南给大家拆解清楚。2. 核心架构与设计哲学解析2.1 为什么是“代理”模式首先得理解 VoltAgent 为什么采用“代理”Agent模式而不是一个简单的采集脚本。这背后有几个关键的考量资源占用与独立性一个完整的监控采集任务不仅仅是读一下传感器数据那么简单。它需要处理采样频率、数据滤波比如去除瞬时毛刺、单位换算、数据缓存网络中断时、以及与上游服务的通信包括重试机制、协议封装。如果这些逻辑都散落在你的主应用代码里会使得主应用逻辑变得臃肿且一旦采集逻辑出问题可能影响主业务。Agent 模式将这些职责封装在一个独立的进程中与主业务隔离通过进程间通信如本地 Socket、文件或 HTTP提供数据实现了关注点分离。可移植性与部署便利性Agent 通常被打包成一个独立的二进制文件或容器镜像包含了运行时所需的所有依赖。这意味着你可以把它轻松地部署到任何支持其运行环境的设备上无论是 x86 的服务器还是 ARM 的嵌入式板卡无需在目标设备上配置复杂的 Python 环境或编译一堆库。VoltAgent/voltagent项目通常就会提供针对不同平台的预编译版本。统一的管理接口一个好的 Agent 会提供统一的管理接口例如通过 HTTP 端点提供健康检查、动态配置热加载、实时指标查询等。这为集中化的监控平台管理成千上万的 Agent 提供了便利。你可以通过一个统一的入口检查所有监控点的 Agent 状态甚至远程调整某个节点的采样频率。注意在选择 Agent 时一定要评估其资源消耗。对于内存和 CPU 极其受限的嵌入式环境比如只有 32MB RAM 的单片机一个用 Go 或 Rust 编写的、静态编译的轻量级 Agent远比一个基于 Python 解释器的 Agent 更有优势。VoltAgent 的实现语言选择是其设计哲学的重要体现。2.2 数据流与核心组件拆解VoltAgent 的数据流通常遵循一个清晰的管道Pipeline模式理解这个管道对于故障排查和自定义扩展至关重要。一个典型的数据流如下传感层物理电压信号通过分压电路等调理电路接入 ADC 芯片如 ADS1115或微控制器如 ESP32、STM32的内置 ADC 引脚。采集驱动VoltAgent 需要调用对应硬件平台的驱动库来读取 ADC 的原始值。这部分可能是用 C 语言写的底层库然后通过 FFI外部函数接口被 Agent 调用也可能是直接操作sysfs下的文件对于某些 Linux 系统的 ADC。数据预处理读取到的原始值通常是一个 0-4095 的整数对应 12 位 ADC需要经过一系列转换标定转换通过一个线性公式V_actual (raw_value * reference_voltage) / (2^n_bits - 1) offset计算出实际电压值。这里的reference_voltage参考电压和offset偏移量是关键参数需要通过万用表实际测量来校准。滤波处理为了消除噪声通常会进行软件滤波。常见的有移动平均滤波、中值滤波或一阶低通滤波。VoltAgent 可能会内置或允许配置简单的滤波算法。Agent 核心处理后的电压值被送入 Agent 核心逻辑。阈值检查核心逻辑将当前值与用户配置的告警阈值如低压警告 210V高压危险 235V进行比较。状态判断根据阈值比较结果产生对应的状态正常、警告、危险和事件。数据封装将电压值、时间戳、设备标识符、状态等信息封装成内部数据结构。输出与上报封装好的数据被分发给一个或多个输出插件Output Plugin。本地输出写入本地文件、或通过 Unix Socket 提供给其他本地进程。远程上报通过 HTTP POST 将 JSON 数据发送到自定义接口或格式化为 Prometheus 的exposition format供 Prometheus 服务器抓取或写入 InfluxDB 等时序数据库。告警触发当状态变化时如从正常进入警告告警模块会被触发通过配置的告警渠道如电子邮件、钉钉、企业微信、Slack Webhook发送通知。这个架构的优势在于插件化。采集驱动、输出模块、告警渠道都可以设计成插件使得 VoltAgent 能够灵活适配不同的硬件和后台系统。3. 硬件选型与连接实操要点VoltAgent 的软件再强大也需要正确的硬件支撑。这部分是项目落地的第一步也是最容易踩坑的地方。3.1 ADC 模块的选择与比较电压是模拟信号计算机处理的是数字信号因此 ADC 模块是必不可少的桥梁。市面上常见的用于此类项目的有以下几种模块型号分辨率接口优点缺点适用场景PCF85918位I2C便宜4通道带1路DAC分辨率低约19.5mV/步进精度一般对精度要求不高的定性监测如“有电/无电”ADS111516位I2C高精度4通道可编程增益放大器(PGA)价格稍高采样速率相对较低绝大多数电压监控项目的首选精度足以分辨毫伏级变化MCP300810位SPI8通道价格适中SPI速度较快分辨率中等需占用更多GPIO需要较多通道且对速度有要求的场景ESP32 内置ADC12位直连GPIO无需外接模块成本最低线性度差噪声大需软件校准快速原型验证或对绝对精度要求极低的场景Arduino 内置ADC (ATmega328P)10位直连GPIO同ESP32集成度高分辨率低参考电压易受供电影响简单的 Arduino 项目我的选择与理由对于严肃的电压监控我强烈推荐ADS1115。它的16位分辨率意味着在 ±6.144V 量程下最小能分辨6.144V / 32767 ≈ 0.1875mV的变化这比市电220V波动1V约0.45%要精细得多。其内置的PGA可以让你测量小信号如电池电压时获得更高精度。I2C接口也只需要两根数据线布线简单。3.2 安全第一电压采样电路设计直接测量市电是极其危险且绝对禁止的必须使用隔离和分压方案。方案一使用现成的交流电压传感器模块推荐给新手例如 ZMPT101B 或 SCT-013后者是电流互感器需配合负载电阻测电压。这类模块已经内置了电压互感器、分压电阻和信号调理电路输出一个安全的、与输入电压成比例的小交流电压信号通常是0-1V或0-5V AC。你只需要将这个输出信号接入 ADS1115 的一个通道即可。这是最安全、最便捷的方式。方案二自制分压与隔离电路适用于有电子基础的开发者如果测量直流电压如设备内部12V、5V电源轨可以采用电阻分压。原理很简单V_out V_in * (R2 / (R1 R2))。选择 R1 和 R2 时要确保分压后的V_out在 ADC 的量程范围内如 ADS1115 的 ±6.144V。流过电阻的电流不能太大以免电阻发热或功耗过高。通常选择百kΩ级别的电阻使电流在毫安级。考虑电阻的精度至少1%和温度系数这对测量精度有影响。对于交流市电必须使用电压互感器如 220V to 9V进行电气隔离然后在次级侧再用电阻分压到 ADC 可接受的范围。同时为了测量交流电压的有效值RMSADC 需要以远高于市电频率50Hz的速度进行采样建议至少1kHz然后在软件中计算一个周期内的均方根值。VoltAgent 可能需要集成或调用这样的计算库。实操心得无论用哪种方案校准是必须的。准备一个可信的万用表作为基准。在设备上电、运行 VoltAgent 后同时用万用表测量实际电压并与 Agent 上报的数值对比。计算出一个校准系数可能是乘法和加法的组合并将其配置到 VoltAgent 的配置文件中。没有校准的电压监控其绝对值读数是没有意义的只能看相对波动。3.3 与主控设备的连接以最常用的树莓派Raspberry Pi连接 ADS1115 为例物理连接ADS1115 的 VDD 接树莓派的 3.3V注意ADS1115 兼容 3.3V 和 5V 逻辑但为了与树莓派 GPIO 安全对接建议用 3.3V。GND 接 GND。SCL 接树莓派 GPIO3 (BCM 2)。SDA 接树莓派 GPIO2 (BCM 3)。将电压传感器模块的输出线连接到 ADS1115 的 A0, A1 等通道。启用 I2C在树莓派上执行sudo raspi-config进入Interface Options-I2C选择启用。重启或使用sudo i2cdetect -y 1命令检查是否能检测到 ADS1115 的地址默认是 0x48。安装系统依赖通常需要安装i2c-tools和python3-smbus(如果 Agent 用 Python 写) 或对应的库。4. VoltAgent 的部署与配置详解假设我们从VoltAgent/voltagent仓库获取了软件。通常项目会提供几种部署方式。4.1 从源码编译与安装如果项目是用 Go 写的编译安装非常方便能获得最佳性能和控制权。# 1. 克隆仓库 git clone https://github.com/VoltAgent/voltagent.git cd voltagent # 2. 编译 (假设是Go项目) go mod download go build -o voltagent cmd/voltagent/main.go # 3. 将二进制文件复制到系统路径 sudo cp voltagent /usr/local/bin/ # 4. 创建配置文件目录和数据目录 sudo mkdir -p /etc/voltagent /var/lib/voltagent编译安装的优势是可以针对你的硬件平台如 ARMv7做优化并且确保你运行的是最新代码。4.2 使用容器化部署如果项目提供了 Docker 镜像这对于部署和升级来说是最优雅的方式尤其适合在已经容器化的环境中。# 拉取镜像 docker pull voltagent/voltagent:latest # 运行容器需要将主机设备如I2C总线映射进容器 docker run -d \ --name voltagent \ --restart unless-stopped \ --device /dev/i2c-1:/dev/i2c-1 \ # 映射I2C设备 -v /path/to/your/config.yaml:/etc/voltagent/config.yaml:ro \ -v /var/lib/voltagent:/var/lib/voltagent \ -p 8080:8080 \ # 如果Agent提供Web管理界面 voltagent/voltagent容器化部署隔离性好依赖干净但需要处理硬件设备的映射权限问题。4.3 核心配置文件解析VoltAgent 的核心能力通过配置文件来定义。一个典型的config.yaml可能长这样# voltagent/config.yaml 示例 agent: id: rack-01-pdu-a # 唯一标识符用于在监控端区分设备 interval: 5s # 采样间隔 log_level: info sensors: - name: main_voltage type: ads1115 # 传感器驱动类型 params: i2c_bus: 1 i2c_addr: 0x48 channel: 0 # 使用ADS1115的A0通道 gain: 1 # PGA增益对应±4.096V量程 calibration: # 校准参数必须根据实际测量设置 multiplier: 0.125 # 计算出的系数 (实际电压V) (原始读数) * multiplier offset offset: 0.0 filters: - type: moving_average window_size: 10 # 10次采样移动平均 outputs: - type: prometheus params: listen_addr: :9101 # 暴露给Prometheus抓取的端口 path: /metrics - type: http params: url: http://your-monitor-server.com/api/voltage interval: 30s # 每30秒上报一次 timeout: 5s alerts: rules: - name: voltage_low condition: value 210 for: 1m # 持续1分钟低于210V才触发 severity: warning annotations: summary: 市电电压过低 description: 设备 {{ .agent.id }} 电压持续低于210V当前值: {{ .value }}V - name: voltage_high condition: value 235 for: 30s severity: critical notifiers: - type: webhook params: url: https://your-chat-hook.com # 如钉钉、企业微信机器人这个配置文件定义了从数据采集到告警的完整流水线。你需要重点关注sensors.calibration: 这是精度灵魂所在必须通过实际测量校准。agent.interval: 采样间隔太短会增加负载太长会错过瞬时波动。对于50Hz市电若要捕捉波形间隔需小于10ms若只关心有效值1-5秒足矣。alerts.rules.for: 这是一个重要的防抖动设置。电压偶尔的瞬时跌落如空调启动是正常的设置一个持续时间条件如“持续1分钟”可以避免误告警。5. 数据可视化与告警集成实战数据采集上来后如何让它产生价值关键在于可视化和告警。5.1 与 Prometheus Grafana 集成这是云原生时代监控的黄金组合。Prometheus 抓取如上例配置VoltAgent 在:9101/metrics端点暴露 Prometheus 格式的数据。在 Prometheus 的scrape_configs中添加一个 job- job_name: voltagent static_configs: - targets: [voltagent-host-ip:9101] labels: region: lab device_type: pduGrafana 绘图添加 Prometheus 为数据源。新建一个 Dashboard添加一个Graph或Time series面板。在查询框中输入 PromQL例如voltage_value{sensormain_voltage}。Prometheus 会自动将 VoltAgent 中sensor.name作为sensor标签。你可以绘制电压随时间变化的曲线并添加阈值线如210V和235V一目了然。更高级的用法使用avg_over_time()计算每分钟平均电压或用delta()观察短时间内的电压变化率。5.2 自定义告警渠道配置除了在 VoltAgent 内部配置简单的阈值告警更常见的做法是将电压数据接入更强大的告警平台如 Prometheus Alertmanager实现多渠道、分级别、静默期的复杂告警管理。在 Prometheus 中定义告警规则(alert.rules.yml)groups: - name: voltage.rules rules: - alert: MainVoltageLow expr: avg_over_time(voltage_value{sensormain_voltage}[5m]) 210 for: 2m labels: severity: warning annotations: summary: {{ $labels.agent_id }} 主电压持续偏低 description: 过去5分钟平均电压为 {{ $value }}V低于210V阈值。这里使用了avg_over_time来平滑数据for用于持续时长判断比 VoltAgent 内置的告警条件更强大。配置 Alertmanager将告警路由到邮件、钉钉、企业微信、短信等。可以设置不同严重级别warning, critical触发不同的通知组并配置静默、抑制规则。VoltAgent 直接调用 Webhook对于简单的场景如上文配置VoltAgent 可以直接向一个 Webhook URL 发送 JSON 格式的告警消息。你可以在服务器上搭建一个轻量的服务来接收并处理这些消息或者直接使用群聊机器人的 Webhook 地址。5.3 历史数据存储与趋势分析对于长期趋势分析如观察电压随季节、昼夜的变化需要将数据存入时序数据库。InfluxDB在 VoltAgent 配置中增加一个influxdb输出插件。InfluxDB 的写入性能很高适合高频数据。结合 Grafana可以轻松查询“过去一年每周一的平均电压”。TimescaleDB基于 PostgreSQL 的时序数据库如果你熟悉 SQL这是一个很好的选择可以利用丰富的 PostgreSQL 生态。长期存储策略原始数据可以保留较长时间如90天然后通过降采样downsampling策略将更早的数据聚合为每小时或每天的平均值、最大值、最小值再长期保存如数年以节省存储空间。6. 性能调优与稳定性保障当监控点数量增多或者采样频率很高时就需要考虑 Agent 的性能和稳定性。6.1 资源占用监控与优化CPU使用top或htop命令查看 VoltAgent 进程的 CPU 占用率。对于简单的电压采样秒级间隔CPU 占用应低于 1%。如果过高检查是否开启了不必要的调试日志或输出插件如 HTTP 上报因网络超时而陷入重试循环。内存观察 VoltAgent 的常驻内存集RSS。一个设计良好的 Go 语言 Agent内存占用应在 10MB 到 50MB 之间。如果内存持续增长可能存在内存泄漏需要检查代码或上报 Issue。I/O如果数据写入本地文件或数据库注意磁盘 I/O。对于高频写入建议使用 SSD或配置合理的缓冲区大小和刷盘间隔。优化建议适当调整interval在满足监控需求的前提下尽量延长采样间隔。如果使用 HTTP 输出合理设置timeout和重试次数避免因网络暂时不通导致 Agent 线程阻塞。对于嵌入式设备考虑使用musl编译静态链接的二进制文件以减小体积和内存占用。6.2 高可用与故障自愈设计单个 Agent 是单点故障。对于关键位置的电压监控需要考虑高可用。双 Agent 热备在两台不同的设备上部署 VoltAgent同时监控同一路电压需要两套独立的传感器和 ADC。在监控后端如 Prometheus通过标签区分并在告警规则中设置逻辑例如“只有两个 Agent 同时报低压才触发告警”以避免单点误报。看门狗机制确保 VoltAgent 进程本身是健康的。可以使用系统级的看门狗如systemd的Restarton-failure或者在 Agent 内部实现一个“心跳线程”定期向一个文件写入时间戳由外部监控脚本检查这个时间戳是否陈旧。配置管理当有成千上万个 Agent 时手动修改配置文件是不现实的。需要将配置中心化例如使用 Consul Consul-Template或者 etcd 配合配置管理工具如 Ansible。让 Agent 能够动态拉取或接收配置更新。6.3 安全加固措施监控代理可能成为安全突破口必须加以防护。网络隔离尽量让 VoltAgent 运行在独立的监控网络或 VLAN 中不要将其管理端口如 Prometheus 暴露端口直接暴露在公网。最小权限原则运行 VoltAgent 的系统用户应仅拥有必要的权限如读取/dev/i2c-1设备文件。避免使用 root 用户运行。传输加密如果 HTTP 输出涉及敏感信息虽然电压数据通常不敏感或者管理 API 暴露在不可信网络应启用 TLS/HTTPS。输入验证如果 VoltAgent 提供了动态配置更新的 API 端点必须对输入进行严格的验证和鉴权防止配置被恶意篡改。7. 进阶应用场景与扩展思路基础的电压监控稳定后可以基于此平台拓展更多有价值的应用。7.1 电能质量分析电压监控的进阶是电能质量分析。除了电压有效值你还可以计算电压波动与闪变通过高速采样如每秒数千次分析电压短时间内的变化幅度和频率。谐波分析使用 FFT快速傅里叶变换算法分析电压波形中除50Hz基波外各次谐波100Hz, 150Hz...的含量。高次谐波过多会影响设备寿命。电压暂降/暂升事件捕捉记录电压突然大幅下降或上升的瞬时事件这些事件是导致设备异常重启的主要原因。实现这些需要 VoltAgent 支持更高的采样率并在内部或后端集成信号处理算法。你可以考虑将原始波形数据经过适当降采样也上报到后端由更强大的服务器进行分析。7.2 与智能控制联动监控的终极目的是控制。当检测到异常电压时除了告警还可以自动触发保护动作。联动智能插座当电压持续过低时通过 HTTP 调用智能插座如支持 Home Assistant 或 Tasmota 的插座的 API自动切断非关键设备的电源待电压恢复正常后再自动开启。启动备用电源在 UPS 管理系统中集成电压监控作为触发条件之一。当市电电压异常时自动触发更平滑的切换到电池供电流程。负载调度在微电网或分布式能源场景中根据实时电压水平动态调整负载的投入或切除以维持电网稳定。这需要 VoltAgent 具备“动作执行”的能力或者将告警事件发布到一个消息队列如 MQTT由专门的控制程序订阅并执行相应动作。7.3 构建分布式电压监测网络对于大型园区、工厂或多楼层机房你需要部署多个 VoltAgent 实例形成一个监测网络。统一配置与管理使用如 Ansible、SaltStack 或 Kubernetes对于容器化部署来批量部署、升级和配置所有 Agent。拓扑与依赖关系在监控后台定义各个监测点之间的物理和逻辑关系。例如楼层配电箱的电压异常应该关联到其下属的所有机柜PDU的告警。这有助于快速定位根本原因。全局视图与对比分析在 Grafana 中创建一个总览大屏同时展示所有关键节点的电压曲线。通过对比不同节点的数据可以发现诸如“同一相电上的所有设备电压同时降低”这类全局性问题。部署这样一个网络前期规划很重要。需要为每个监测点设计唯一的agent.id命名规则如site-building-floor-room-pdu.phase并提前规划好网络连通性和防火墙策略。8. 故障排查与日常维护指南即使设计得再完善在实际运行中也会遇到各种问题。这里记录一些常见问题的排查思路。8.1 数据类问题问题现象可能原因排查步骤读数恒为0或接近01. 传感器或ADC供电不正常。2. ADC I2C地址错误或总线通信失败。3. 配置文件中通道号错误。4. 分压电阻开路或短路。1. 用万用表测量传感器和ADC模块的供电电压。2. 使用i2cdetect -y 1命令确认ADC设备地址是否可见。3. 检查配置文件中的i2c_addr和channel。4. 断电后检查电路连接。读数跳动剧烈噪声大1. 电源噪声。2. 信号线过长或未使用屏蔽线。3. 软件滤波未启用或参数不当。4. ADC参考电压不稳。1. 为模拟电路部分增加稳压和滤波电容。2. 缩短信号线或使用双绞屏蔽线。3. 启用并调整移动平均滤波的window_size。4. 检查ADC的VREF引脚电压是否稳定。读数有固定偏差校准参数multiplier和offset设置错误。使用校准后的万用表同时测量实际电压和Agent读数重新计算校准系数。公式multiplier (V_meter2 - V_meter1) / (Reading2 - Reading1);offset V_meter1 - Reading1 * multiplier。读数随时间缓慢漂移1. 电阻或传感器温漂。2. ADC参考电压随温度变化。1. 选用低温漂系数的精密电阻。2. 考虑在软件中引入温度补偿或使用带内部基准的ADC芯片。8.2 通信与上报问题Prometheus 抓取失败首先在 VoltAgent 主机上使用curl localhost:9101/metrics看是否能正常输出指标。如果不能检查 VoltAgent 进程是否运行、配置文件中的listen_addr是否正确。如果能则在 Prometheus 服务器上使用telnet voltagent-host-ip 9101检查网络连通性和防火墙规则。HTTP 上报超时检查目标 URL 是否可达网络延迟是否过高。适当增加配置中的timeout值。如果网络不稳定考虑在 Agent 端增加一个内存或磁盘队列缓存未能成功发送的数据待网络恢复后重发。数据上报延迟检查 Agent 所在主机的系统负载。如果 CPU 或 I/O 繁忙可能导致采集和上报线程被阻塞。使用vmstat 1或iostat 1查看系统资源状况。8.3 日常维护清单为了保障监控系统的长期稳定运行建议建立定期维护机制每周快速浏览一遍所有监测点的电压历史曲线查看是否有异常趋势或毛刺。每月使用校准过的便携式万用表随机抽检几个监测点的读数准确性验证校准系数是否依然有效。每季度检查 VoltAgent 的日志文件如有查看是否有持续的警告或错误信息。检查系统资源使用情况。备份一次关键的配置文件。每年对传感器和 ADC 模块进行物理检查查看连接端子是否有氧化、松动。考虑对使用超过一年的精密电阻进行复检。电压监控看似是一个简单的“读数值”任务但要想做得可靠、精准、有价值背后涉及硬件选型、电路安全、软件架构、系统集成、数据分析等一系列知识。VoltAgent/voltagent这样的项目提供了一个优秀的起点它将复杂的底层细节封装起来让我们可以更专注于解决业务层面的监控需求。希望这篇从实战角度出发的深度解析能帮助你更好地理解、部署和扩展你自己的电压监控系统。记住安全是底线校准是灵魂稳定是目标。在实际操作中多动手、多测量、多思考你一定能搭建出一套值得信赖的电力守护系统。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…