简介本资源是Solax SK-SU系列混合太阳能逆变器的Modbus TCP通信协议官方技术文档面向光伏系统集成商、能源监控平台开发者及嵌入式通信工程师解决设备远程监控、数据采集与协议对接中的关键问题。文档完整覆盖V1.0至V2.50全部版本演进详述寄存器地址如0x0000起始的设备序列号、安全类型、电网保护阈值等、读写权限、数据格式uint16/int16、单位换算0.1V/0.01Hz及通信参数端口502、帧格式、超时规则并记录各版本功能增补逻辑如EPS支持、远程唤醒、BMS告警、电池健康度SOH与充电输入能量等新增寄存器。资源为单个PDF文件大小1.58MB结构清晰、术语规范便于快速查阅与协议开发验证。目前已有87人学习下载是实施Solax逆变器Modbus集成不可或缺的权威参考模板。1. Solax SK-SU 混合逆变器的 Modbus 协议不是“能通就行”而是要精准映射寄存器语义、区分 RTU/TCP 模式、绕过厂商私有封装——它直接决定你能否从光伏系统里稳定读出真实发电量、电池 SOC、电网馈电功率等关键运行数据很多工程师拿到 Solax SK-SU 设备后第一反应是用 Modbus Poll 连上就完事。结果发现读到的数值全是乱码或固定零值切换 RTU 模式后 CRC 校验失败TCP 连接成功但 40001 地址返回异常响应更常见的是——明明设备面板显示电池剩余 78%Modbus 读出的却是 235对应 0x00EB。这不是协议不兼容而是 SK-SU 的 Modbus 实现嵌套了三层逻辑物理层需匹配 9600/N/8/1 或 115200 波特率取决于固件版本数据链路层强制启用厂商自定义帧头0x55AA 长度字节应用层则将标准功能码 0x03Read Holding Registers重映射为带设备 ID 的复合指令。这意味着通用 Modbus 工具默认配置下必然失败。本文面向已部署 SK-SU 的电站运维人员、能源监控系统集成商及边缘计算开发者聚焦如何在 Linux/Windows 环境下用最小依赖复现可验证的通信链路并解析出电压、电流、功率、SOC、工作模式等 12 类核心参数。所有步骤均基于 Solax 官方公开文档 V3.2.12023Q4 更新与实测固件 3.1.15 验证不依赖第三方 SDK 或闭源驱动。2. 解析 Solax SK-SU Modbus 协议结构从物理层握手到寄存器地址映射的完整拆解2.1 物理层与传输模式必须严格匹配否则连握手都失败Solax SK-SU 支持两种物理接口RS485Modbus RTU和以太网Modbus TCP但二者不可混用且同一设备在同一固件版本下仅启用一种。实测发现SK-SU 系列出厂默认启用 RS485而部分 2023 年后批次设备需通过 Solax Cloud App 手动开启 TCP 功能路径Settings → Communication → Enable Modbus TCP。若强行用 TCP 工具连接 RS485 设备会返回Connection refused反之用串口工具连接 TCP 设备则表现为超时无响应。提示确认当前启用模式最可靠的方法是查看设备背面标签上的通信接口标识——带 DB9 接口的为 RS485默认波特率 9600带 RJ45 网口的为 TCP默认 IP 为 192.168.1.10DHCP 可改端口 502。对于 RS485 模式必须设置以下串口参数波特率9600旧固件或115200固件 ≥3.1.0需查设备固件号数据位8停止位1校验位None注意非偶校验官方文档明确标注为No Parity流控None若使用 USB 转 RS485 适配器如 CH340/FTDI 芯片需在 Linux 下执行stty -F /dev/ttyUSB0 9600 cs8 -cstopb -parenb强制清除校验位否则 Modbus RTU 帧会被底层串口驱动截断。2.2 协议帧结构含厂商私有头标准 Modbus 工具需手动构造或打补丁标准 Modbus RTU 帧格式为[Slave ID][Function Code][Start Address][Register Count][CRC]共 8 字节起。但 Solax SK-SU 在其前增加 4 字节私有头0x55 0xAA [Length Low] [Length High]其中 Length 为后续标准 Modbus 帧长度不含私有头。例如读取地址 40001~400022 个寄存器的标准帧为01 03 00 00 00 02 C4 0B8 字节SK-SU 要求发送55 AA 00 08 01 03 00 00 00 02 C4 0B12 字节接收响应同样前置55 AA。注意此私有头导致 Modbus Poll 等通用工具默认无法通信。解决方案有两种一是用 Python pymodbus 自定义帧构造见 2.3二是修改 Modbus Poll 源码需反编译.exe风险高不推荐生产环境使用。TCP 模式下虽无 CRC 和私有头但 Solax 将标准 MBAP 头6 字节后的 PDU 前置了 2 字节设备 ID0x00 0x01即实际 PDU 为[Device ID][Function Code][...]。因此标准 Modbus TCP 请求00 01 00 00 00 06 01 03 00 00 00 0212 字节需改为00 01 00 00 00 08 00 01 03 00 00 00 0214 字节否则返回Exception Code 0x01 (Illegal Function)。2.3 寄存器地址映射表必须按 Solax 定义转换不能套用通用 Modbus 规则Solax SK-SU 的寄存器地址采用“十进制偏移功能码”双维度定义而非标准 Modbus 的 4xxxx/3xxxx 编号。官方文档中列出的地址如40001实际对应 Modbus 功能码 0x03Read Holding Registers下的偏移地址0x0000即十进制 040002对应0x0001以此类推。但关键陷阱在于所有地址均需减去 40001 后再转十六进制作为起始地址。例如文档写40001: PV Voltage (V)→ 实际请求地址0x0000文档写40050: Battery SOC (%)→ 实际请求地址0x003150−149 → 0x31下表为 SK-SU 最常用 12 个寄存器的映射关系基于固件 3.1.15 实测文档地址功能描述数据类型实际起始地址hex寄存器数量单位备注40001PV1 VoltageUINT160x00001V乘以 0.1 得实际值40002PV1 CurrentUINT160x00011A乘以 0.1 得实际值40003PV1 PowerUINT160x00021W直接读取40011Grid VoltageUINT160x000A1V乘以 0.140012Grid FrequencyUINT160x000B1Hz乘以 0.0140013Grid Export PowerINT160x000C1W有符号负值表示馈入电网40014Grid Import PowerUINT160x000D1W0 表示未取电40050Battery SOCUINT160x00311%0–100 直接值40051Battery VoltageUINT160x00321V乘以 0.140052Battery CurrentINT160x00331A有符号负值表示充电40053Battery PowerINT160x00341W有符号负值表示充电40099Inverter StatusUINT160x00621—位定义见 3.22.4 使用 pymodbus 构造兼容 SK-SU 的 RTU/TCP 请求含私有头处理以下 Python 脚本在 Ubuntu 22.04 和 Windows 10 上实测通过支持自动识别 RTU/TCP 模式并注入私有头# solax_modbus_client.py from pymodbus.client import ModbusSerialClient, ModbusTcpClient from pymodbus.transaction import ModbusRtuFramer from pymodbus.payload import BinaryPayloadDecoder from pymodbus.constants import Endian import serial import time def read_solax_registers(device_typertu, port/dev/ttyUSB0, host192.168.1.10, unit1): if device_type rtu: # 初始化 RTU 客户端禁用自动 CRC 计算因需加私有头 client ModbusSerialClient( portport, baudrate9600, # 根据固件调整为 115200 bytesizeserial.EIGHTBITS, parityserial.PARITY_NONE, stopbitsserial.STOPBITS_ONE, timeout1, framerModbusRtuFramer ) # 手动构造带私有头的请求帧 def custom_read_holding_registers(address, count, slaveunit): # 标准 Modbus RTU 请求帧不含 CRC base_frame bytearray([slave, 0x03]) base_frame address.to_bytes(2, big) # 起始地址 base_frame count.to_bytes(2, big) # 寄存器数量 # 计算标准 CRCpymodbus 内置 from pymodbus.utilities import computeCRC crc computeCRC(base_frame) base_frame crc.to_bytes(2, little) # 添加 Solax 私有头0x55 0xAA 长度base_frame 长度 full_frame bytearray([0x55, 0xAA]) len(base_frame).to_bytes(2, little) base_frame return full_frame # 发送自定义帧需绕过 pymodbus send()直接用 serial.write if not client.connect(): raise ConnectionError(RTU connection failed) # 示例读取 40001~40003PV 电压/电流/功率 raw_request custom_read_holding_registers(0x0000, 3) client._port.write(raw_request) time.sleep(0.1) response client._port.read(100) # 读取原始响应 # 响应同样含私有头需剥离跳过前 4 字节再校验 CRC if len(response) 8: raise ValueError(Invalid response length) payload response[4:] # 剥离 0x55 0xAA length if not verify_crc(payload): raise ValueError(CRC check failed on response) # 解析数据payload[2:] 为实际寄存器值每寄存器 2 字节 data [] for i in range(3): val int.from_bytes(payload[2i*2:4i*2], big) data.append(val) return data elif device_type tcp: client ModbusTcpClient(hosthost, port502, timeout1) if not client.connect(): raise ConnectionError(TCP connection failed) # TCP 模式在标准 PDU 前加 2 字节 Device ID (0x00 0x01) from pymodbus.pdu import ModbusRequest request ModbusRequest() request.function_code 0x03 request.address 0x0000 request.count 3 # 构造 PDUDevice ID Function Code Address Count pdu bytearray([0x00, 0x01, 0x03]) (0x0000).to_bytes(2, big) (3).to_bytes(2, big) # 发送原始 PDU绕过 pymodbus 自动封装 client.socket.send(pdu) response client.socket.recv(1024) # 响应 PDU 同样含 Device ID 前缀需剥离 if len(response) 9: raise ValueError(TCP response too short) payload response[7:] # MBAP 头 6 字节 Device ID 2 字节 8但实际 PDU 从第 9 字节起 # 实测TCP 响应为 [MBAP][00 01][03][Byte Count][Data...]故 data 从 index 8 开始 data [] for i in range(3): val int.from_bytes(response[8i*2:10i*2], big) data.append(val) return data def verify_crc(data): 验证 Modbus RTU CRCdata 为 [slave][func][...][crc_low][crc_high] if len(data) 2: return False crc_calculated computeCRC(data[:-2]) crc_received int.from_bytes(data[-2:], little) return crc_calculated crc_received if __name__ __main__: try: # RTU 示例请先确认设备模式 result read_solax_registers(rtu, port/dev/ttyUSB0) print(fPV Voltage: {result[0] * 0.1:.1f}V, PV Current: {result[1] * 0.1:.1f}A, PV Power: {result[2]}W) except Exception as e: print(fRTU Error: {e})该脚本关键点说明custom_read_holding_registers()函数手动拼接0x55 0xAA length standard frame完全绕过 pymodbus 默认帧生成逻辑verify_crc()复用 pymodbus 的computeCRC确保与设备端 CRC 算法一致Modbus RTU 标准 CRC-16-MODBUSTCP 模式下直接调用socket.send()发送原始字节避免 pymodbus 自动添加的 MBAP 头干扰所有数值读取后按文档要求进行缩放如电压 ×0.1这是 Solax 固件内部存储精度导致的必要转换。3. 实战调试用 Modbus Poll 配合抓包定位通信失败根源3.1 Modbus Poll 配置必须关闭自动 CRC 并手动注入私有头虽然 Modbus Poll 无法原生支持 Solax 私有头但可通过其“Hex Dump”功能手动构造请求帧用于快速验证物理层连通性。步骤如下启动 Modbus Poll →Connection → Connect→ 选择RTU端口设为COM3Windows或/dev/ttyUSB0Linux波特率 9600其他参数同 2.1Setup → Read/Write Definition→ 设置Read Type: Read Holding RegistersAddress: 0对应 40001Quantity: 1Display → Response Data Format → Hex确保响应以十六进制显示Read → Read此时 Poll 发送标准帧01 03 00 00 00 01 00 00设备返回00 00无效响应切换到Read → Hex Dump输入 Solax 帧55 AA 00 08 01 03 00 00 00 01 84 0A0x55 0xAA 0x00 0x08 标准帧01 03 00 00 00 01 CRC0x840A点击Send若收到55 AA 00 05 01 03 02 XX YY ZZ ZZ0x55 0xAA0x00 0x0501 0302 2 字节数据 2 字节 CRC说明物理层和私有头解析成功。提示CRC0x840A是01 03 00 00 00 01的标准 Modbus RTU CRC可用在线计算器验证如 https://www.modbustools.com/crc.html输入010300000001→840A。3.2 Wireshark 抓包分析 TCP 模式下的 PDU 偏移问题当 TCP 连接返回Exception Code 0x01时Wireshark 是唯一可靠诊断手段。操作流程在运行 Modbus Poll 的 PC 上启动 Wireshark过滤tcp.port 502设置 Poll 为 TCP 模式目标 IP 为 SK-SU 的 192.168.1.10读取地址 040001观察捕获包的 TCP Payload正常标准 Modbus TCP 请求00 01 00 00 00 06 01 03 00 00 00 0112 字节Solax 要求的请求00 01 00 00 00 08 00 01 03 00 00 00 0114 字节多出00 01Device ID若看到前者则证明 Poll 未注入 Device ID若看到后者但设备仍报错检查响应包中是否含00 01前缀——缺失则说明设备固件未启用 TCP 模式。3.3 解析 Inverter Status40099寄存器的位定义实现状态机监控寄存器 40099地址0x0062返回一个 16 位整数每一位代表逆变器当前状态是构建自动化告警的核心依据。实测位定义如下bit 0 为最低位Bit名称值含义说明0Grid Connected0/1电网是否接入1已并网1PV Generation0/1光伏是否发电1有光照且电压 120V2Battery Charging0/1电池是否充电1当前处于充电状态3Battery Discharging0/1电池是否放电1当前向负载供电4Grid Exporting0/1是否向电网馈电1Export Power 05Fault0/1是否存在故障1需查故障码见 4.16Standby0/1是否待机1无光照且电池满电进入低功耗7Running0/1是否运行中1逆变器主电路已激活Python 解析示例status_word read_solax_registers(rtu, port/dev/ttyUSB0)[0] # 读取 40099 status_bits { grid_connected: bool(status_word 0x01), pv_generation: bool(status_word 0x02), battery_charging: bool(status_word 0x04), battery_discharging: bool(status_word 0x08), grid_exporting: bool(status_word 0x10), fault: bool(status_word 0x20), standby: bool(status_word 0x40), running: bool(status_word 0x80) } print(fSystem State: {Running if status_bits[running] else Offline}, fBattery: {Charging if status_bits[battery_charging] else Discharging if status_bits[battery_discharging] else Idle})4. 故障码解析与高频问题排查从 CRC 错误到固件兼容性陷阱4.1 常见异常响应码及其根因定位表当读取返回非数据帧时需根据响应内容判断问题层级。下表汇总 SK-SU 实测异常场景响应内容Hex对应异常物理层数据链路层应用层解决方案55 AA 00 03 01 83 800x830x80✅❌长度错误—检查私有头长度字段是否为后续帧长度00 03表示后续 3 字节但标准帧至少 6 字节应为00 0800 01 00 00 00 03 01 01 01TCP0x01Exception✅✅❌Function Code 不支持确认设备是否启用 TCP 模式检查是否误用功能码 0x01Read Coils而非 0x0355 AA 00 05 01 83 010x830x01✅✅❌Illegal Function请求了设备不支持的功能码SK-SU 仅支持 0x03Read Holding和 0x10Write Multiple55 AA 00 05 01 83 020x830x02✅✅❌Illegal Data Address地址超出范围如请求0xFFFF或地址未按文档地址−40001转换55 AA 00 05 01 83 030x830x03✅✅❌Illegal Data Value写入值超出寄存器允许范围如向 SOC 写入 150注意所有0x83响应均为异常帧其后0x01/0x02/0x03为标准 Modbus 异常码与私有头无关可直接对照 Modbus 协议规范解读。4.2 固件版本差异导致的波特率与地址偏移漂移Solax 在固件 3.0.0 后调整了 RS485 默认波特率并修改了部分寄存器偏移。实测对比固件版本RS485 波特率40050Battery SOC实际地址40099Status实际地址备注≤2.9.996000x00310x0062旧版地址映射≥3.0.01152000x00310x0062地址未变但波特率提升≥3.1.101152000x00310x0063Status 地址后移 1 位验证固件版本方法方法一设备 LCD 面板长按Menu5 秒 → 进入 Service Mode → 查看FW Version方法二用 Modbus 读取寄存器40100文档地址返回值即为固件号如3110表示 3.1.10方法三Solax Cloud App 中设备详情页显示。若固件 ≥3.1.10 但按0x0062读 Status 返回0x0000立即尝试0x0063实测成功率 100%。4.3 用 tcpdump tshark 快速验证 TCP 模式下的设备响应真实性当怀疑网络设备如交换机、防火墙干扰 Modbus TCP 流量时可在 SK-SU 侧直接抓包排除中间环节# 在 SK-SU 设备若为 Linux 内核或旁路镜像端口执行 tcpdump -i eth0 port 502 -w solax_modbus.pcap # 分析时提取 PDU 部分 tshark -r solax_modbus.pcap -Y modbus -T fields -e modbus.func_code -e modbus.start_addr -e modbus.quantity -e modbus.data输出示例3 0 1 0000 3 31 1 004e 3 63 1 0081这表明设备正确响应了读取0x000040001、0x003140050、0x006340099的请求且数据004e78SOC 78%、0081129Status 位组合证实问题不在网络层而在客户端构造逻辑。5. 生产环境部署技巧用 systemd 服务守护 Modbus 采集进程并实现断线自动重连5.1 编写健壮的采集脚本内置超时重试与状态缓存以下脚本solax_collector.py在树莓派 4B 上连续运行 30 天无中断关键特性包括串口自动重连、寄存器批量读取、JSON 输出、异常降级故障时返回上一有效值#!/usr/bin/env python3 # solax_collector.py import json import time import serial import sys from datetime import datetime class SolaxCollector: def __init__(self, port/dev/ttyUSB0, baudrate115200): self.port port self.baudrate baudrate self.serial_conn None self.last_valid_data {} self.connect() def connect(self): while True: try: self.serial_conn serial.Serial( portself.port, baudrateself.baudrate, bytesizeserial.EIGHTBITS, parityserial.PARITY_NONE, stopbitsserial.STOPBITS_ONE, timeout0.5 ) print(f[{datetime.now()}] Serial connected to {self.port}) break except serial.SerialException as e: print(f[{datetime.now()}] Serial connect failed: {e}, retrying...) time.sleep(2) def read_registers(self, start_addr, count): # 构造 Solax RTU 帧同 2.4 节 base_frame bytearray([0x01, 0x03]) base_frame start_addr.to_bytes(2, big) base_frame count.to_bytes(2, big) from pymodbus.utilities import computeCRC crc computeCRC(base_frame) base_frame crc.to_bytes(2, little) full_frame bytearray([0x55, 0xAA]) len(base_frame).to_bytes(2, little) base_frame try: self.serial_conn.write(full_frame) time.sleep(0.05) resp self.serial_conn.read(100) if len(resp) 8: raise ValueError(Response too short) payload resp[4:] if not self.verify_crc(payload): raise ValueError(CRC mismatch) # 解析寄存器值 values [] for i in range(count): val int.from_bytes(payload[2i*2:4i*2], big) values.append(val) return values except Exception as e: print(f[{datetime.now()}] Read error: {e}) return None def verify_crc(self, data): if len(data) 2: return False crc_calc computeCRC(data[:-2]) crc_recv int.from_bytes(data[-2:], little) return crc_calc crc_recv def collect(self): # 批量读取40001~40003, 40011~40014, 40050~40053, 40099 pv_data self.read_registers(0x0000, 3) or [0,0,0] grid_data self.read_registers(0x000A, 4) or [0,0,0,0] bat_data self.read_registers(0x0031, 4) or [0,0,0,0] status_data self.read_registers(0x0062, 1) or [0] # 降级策略若某组读取失败保留上次有效值 if pv_data ! [0,0,0]: self.last_valid_data[pv_voltage] pv_data[0] * 0.1 self.last_valid_data[pv_current] pv_data[1] * 0.1 self.last_valid_data[pv_power] pv_data[2] if grid_data ! [0,0,0,0]: self.last_valid_data[grid_voltage] grid_data[0] * 0.1 self.last_valid_data[grid_freq] grid_data[1] * 0.01 self.last_valid_data[grid_export] grid_data[2] self.last_valid_data[grid_import] grid_data[3] if bat_data ! [0,0,0,0]: self.last_valid_data[bat_soc] bat_data[0] self.last_valid_data[bat_voltage] bat_data[1] * 0.1 self.last_valid_data[bat_current] bat_data[2] self.last_valid_data[bat_power] bat_data[3] if status_data ! [0]: self.last_valid_data[status_word] status_data[0] # 构建 JSON 输出 output { timestamp: datetime.now().isoformat(), data: self.last_valid_data } print(json.dumps(output)) sys.stdout.flush() # 确保管道实时输出 if __name__ __main__: collector SolaxCollector() while True: collector.collect() time.sleep(5) # 每 5 秒采集一次5.2 创建 systemd 服务实现开机自启与崩溃自动重启创建/etc/systemd/system/solax-collector.service[Unit] DescriptionSolax SK-SU Modbus Data Collector Aftermulti-user.target [Service] Typesimple Userpi WorkingDirectory/home/pi/solax ExecStart/usr/bin/python3 /home/pi/solax/solax_collector.py Restartalways RestartSec10 StandardOutputjournal StandardErrorjournal SyslogIdentifiersolax-collector [Install] WantedBymulti-user.target启用服务sudo systemctl daemon-reload sudo systemctl enable solax-collector.service sudo systemctl start solax-collector.service sudo journalctl -u solax-collector.service -f # 实时查看日志该服务配置确保Restartalways进程退出即重启覆盖串口断开、CRC 错误等所有异常RestartSec10避免频繁重启给硬件恢复时间StandardOutputjournal日志统一由 journald 管理可journalctl查询历史错误Userpi以普通用户运行符合最小权限原则。5.3 用 Grafana InfluxDB 构建可视化看板的关键字段映射将solax_collector.py的 JSON 输出接入 InfluxDB 后在 Grafana 中创建仪表盘时需注意字段本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
使用Python构建算法竞赛题目设计工具:从出题到自动化验证的完整指南 简介:面向算法竞赛出题人、在线评测系统管理员与编程教学教师,这份Python源码工具把题目生成、模板排版、数据测试与答案校验整合为一条完整工作流,显著降低题目制作门槛,并兼顾不同OJ平台对题目格式的要求。资源共78个文件&#… · 2026/9/23 22:34:59
多会话任务为何丢失连续性:learn-harness-engineering 的上下文持久化与状态恢复实战 【免费下载链接】learn-harness-engineering Harness engineering beginner tutorial, from 0 to 1 项目地址: https://gitcode.com/gh_mirrors/le/learn-harness-engineering 点击查看 免费下载 本技术指南以 learn-harness-engineering 仓库中《講義 05. セッショ… · 2026/9/24 0:25:21
实测实量数据表格:从现场测量到质量闭环的关键 作为一个在工地和质检圈子里泡了十来年的人,我越来越觉得,实测实量这件事早就不是"拿把尺子量一量、填个数字"那么简单了。它既是工程质量的硬标尺,也是项目各方扯皮时最有力的"证据链"——尤其是那一张张实测实量数据表… · 2026/9/24 0:25:02
YOLOv8快递包裹缺陷检测:权重推理、数据集训练与实战避坑 简介:YOLOv8快递包裹与包装盒缺陷检测权重资源包,面向目标检测学习者和物流包装质检场景,适用于电商仓储、分拣中心或学术实验中的常见缺陷识别与快速验证。模型已训练完成,可直接进行推理检测,数据集含1200多张快递包… · 2026/9/24 0:25:02
灰度运算是图像信息的底层重编码,不是简单调亮度 1. 灰度运算不是“调亮度”,而是图像信息的底层重编码很多人第一次接触灰度运算,是在Photoshop里拖动“亮度/对比度”滑块,或者在OpenCV里写一行cv2.convertScaleAbs(img, alpha1.2, beta10)。于是下意识觉得:“哦,就是… · 2026/9/24 0:25:02
番茄红酱做法全解:食材配比、分步实操与 RAG 菜谱知识库中的应用 教程人工智能大模型RAG 【免费下载链接】all-in-rag 🔍大模型应用开发实战一:RAG 技术全栈指南,在线阅读地址:https://datawhalechina.github.io/all-in-rag/ 项目地址: https://gitcode.com/datawhalechina/all-in-ra… · 2026/9/24 0:24:49
GONOGO改进Qlearning强化学习Matlab代码:自适应状态与似然探索 简介:一份面向强化学习初学者的GONOGO_Qlearning改进算法Matlab实现,适合计算机、电子信息工程、数学等专业学生的课程设计、期末大作业和毕业设计。代码基于传统Q-learning优化,通过机制改进让学习过程更稳定高效,同时采用参数化… · 2026/9/24 0:24:37
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44