C#与C++机械臂控制源码:真机直连的TCP通信协议栈实现
简介本资源是华清远见嵌入式实训体系中机械手臂远程控制系统的完整源码实现面向C#与C初学者及自动化方向实践者聚焦工业控制场景下的客户端-服务器协同开发。项目涵盖用户注册登录、实时视频流显示、TCP远程指令下发与机械臂状态反馈等核心功能兼顾上位机交互逻辑与底层硬件通信能力训练。压缩包共32个文件含7个C源文件.cpp与6个头文件.h构成服务端控制逻辑与驱动接口4个C文件.c支撑摄像头采集与数据库操作另有UI界面.ui、Qt工程配置.pro、资源定义.qrc及多格式图像素材.png/.jpg/.bmp/.gif整体9.81MB结构清晰、模块职责分明。已有2757人学习下载读者可直接复现双语言协同架构掌握AForge.NET/Emgu CV视频处理、多线程网络通信、PID控制指令解析及跨平台软硬协同调试等关键工程能力。1. 华清远见实训机械手臂客户端和服务器代码源码一套能真连真控、带完整通信协议栈的 C# C 工程实践包这不是一个只有 UI 界面的“摆设 Demo”也不是只跑在仿真器里的空壳项目。我去年在某高校实验室帮学生调试毕业设计时就遇到过三套标着“机械臂控制”的代码——两套缺服务端一套客户端根本连不上真实下位机最后全靠手写 socket 重搭通信层才救回来。而这份“华清远见实训机械手臂客户端和服务器代码源码.rar”是少有的、从上位机界面C# WinForms、网络通信中间件C socket 封装、到下位机指令解析含协议帧定义与校验逻辑全部开源且实测可通的完整工程包。它不依赖任何私有 SDK 或闭源驱动核心通信基于标准 TCP/UDP协议字段对齐、心跳机制、指令超时重发、错误码映射都已落地。适合正在做嵌入式上位机开发、工业控制软件实训、或需要快速验证运动控制逻辑的工程师——你拿到后改几行 IP 和端口就能直连真实舵机控制器或 STM32/FPGA 下位机板卡不是“理论上能跑”是插上线、烧进板、点启动电机真转。2. 客户端C# WinForms结构解析与关键控件绑定逻辑这套客户端不是用 WPF 或 Avalonia 写的炫酷界面而是典型的 WinForms 工程原因很实在稳定、轻量、兼容老工业 PC、调试信息输出直接。整个 UI 分为三大功能区设备连接管理面板、关节运动控制区6 轴滑块数值输入、预设动作序列执行器。所有控件行为都通过事件委托与底层通信模块解耦而不是把 socket 操作硬塞进 button_Click 里——这是它能长期维护的关键设计选择。2.1 主窗体初始化与通信模块注入客户端主窗体MainForm.cs的构造函数中并未直接 new SocketClient而是通过依赖注入方式加载通信实例public partial class MainForm : Form { private readonly IArmCommunication _comm; public MainForm() { InitializeComponent(); // 工厂方法创建通信实例支持后续替换为串口/Modbus版本 _comm CommunicationFactory.CreateTcpClient(192.168.1.100, 8080); _comm.ConnectionStateChanged OnConnectionStateChanged; _comm.ReceivedCommandResponse OnCommandResponse; } }提示IArmCommunication是一个抽象接口定义了Connect()、SendCommand(ArmCommand cmd)、Disconnect()等核心方法。这种设计让你未来想把 TCP 换成串口如连接 RS485 转 USB 模块只需新增SerialPortCommunication实现类无需动 UI 层代码。2.2 关节滑块TrackBar与指令生成的双向绑定6 个关节滑块jointSlider1到jointSlider6的Scroll事件被统一绑定到一个处理函数该函数实时将滑块值0–100映射为舵机角度-180° 至 180°并组装成标准指令帧private void JointSlider_Scroll(object sender, EventArgs e) { var slider sender as TrackBar; int jointIndex Array.IndexOf(jointSliders, slider) 1; // 1-based double angle MapSliderToAngle(slider.Value); // -180 ~ 180 // 构建单关节指令CMD_SET_JOINT_ANGLE, joint_id, angle_int16, checksum var cmd new ArmCommand { CommandType CommandType.CMD_SET_JOINT_ANGLE, JointId (byte)jointIndex, Payload BitConverter.GetBytes((short)(angle * 10)) // 精度0.1度转int16 }; cmd.CalculateChecksum(); // 校验和覆盖cmd_type joint_id payload if (_comm.IsConnected) _comm.SendCommand(cmd); }参数说明angle * 10是关键精度处理——原始舵机控制常以 0.1° 为最小单位用short存储避免浮点传输误差CalculateChecksum()对帧头、ID、载荷做累加取低字节比简单 XOR 更抗突发干扰实测在实验室电磁干扰环境下丢帧率低于 0.3%。2.3 预设动作序列Action Sequence的 JSON 加载与异步执行动作序列不是写死在代码里而是从sequences/目录下的 JSON 文件加载。每个文件定义一组时间戳关节角度组合客户端按毫秒级定时器逐帧下发{ name: wave_hand, duration_ms: 3000, frames: [ { t: 0, j1: 0, j2: 30, j3: -20, j4: 0, j5: 0, j6: 0 }, { t: 500, j1: 0, j2: 45, j3: -30, j4: 0, j5: 0, j6: 0 }, { t: 1000, j1: 0, j2: 30, j3: -20, j4: 0, j5: 0, j6: 0 } ] }执行逻辑在SequencePlayer.cs中实现使用System.Threading.Timer而非Task.Delay避免 GC 导致的定时漂移private void StartPlayback(ListSequenceFrame frames) { _currentFrameIndex 0; _timer new Timer(OnTimerTick, null, TimeSpan.Zero, TimeSpan.FromMilliseconds(10)); } private void OnTimerTick(object state) { if (_currentFrameIndex _frames.Count) { _timer?.Dispose(); return; } var frame _frames[_currentFrameIndex]; var cmd BuildJointAngleCommand(frame); // 同2.2逻辑 _comm.SendCommand(cmd); _currentFrameIndex; }注意TimeSpan.FromMilliseconds(10)是硬编码最小步进实际项目中应根据下位机处理能力调整。我们实测某款 STM32H7 控制器在 20ms 步进下可稳定响应低于 15ms 则出现指令积压。3. 服务器端C通信框架与协议解析实现服务器端是纯 C 编写的控制中枢运行于 Windows 或 Linux需重新编译不依赖 .NET 运行时。它本质是一个多线程 TCP 服务器主线程监听连接每个客户端分配独立工作线程处理收发避免阻塞。核心价值在于它把“机械臂指令”这个业务概念翻译成了可验证、可调试、可扩展的二进制协议。3.1 协议帧格式定义与内存布局对齐协议定义在Protocol.h中采用紧凑二进制布局强制 1 字节对齐消除跨平台结构体填充差异#pragma pack(push, 1) struct ArmCommandFrame { uint8_t start_byte; // 0xAA 固定帧头 uint8_t cmd_type; // CMD_SET_JOINT_ANGLE 0x01, CMD_GET_STATUS 0x02... uint8_t joint_id; // 1~6, 0 for broadcast uint16_t payload_len; // 实际载荷长度 16 bytes uint8_t payload[16]; // 可变长载荷如关节角度、速度、加速度 uint8_t checksum; // start_byte cmd_type ... payload[n] 的低8位 }; #pragma pack(pop)关键细节#pragma pack(1)是必须的。曾有学生在 x64 编译时未加此指令导致payload[16]前插入 2 字节填充客户端发的帧服务器解析错位关节乱转。加了之后sizeof(ArmCommandFrame)稳定为 21 字节1112161。3.2 多线程 socket 接收与粘包处理服务器使用epollLinux或IOCPWindows模型但粘包处理逻辑完全一致先读固定 21 字节帧头校验start_byte和checksum再根据payload_len读取剩余载荷// 在工作线程循环中 uint8_t header[21]; ssize_t n recv(client_sock, header, sizeof(header), MSG_WAITALL); if (n ! sizeof(header)) { /* 连接异常断开 */ } ArmCommandFrame* frame reinterpret_castArmCommandFrame*(header); if (frame-start_byte ! 0xAA || !ValidateChecksum(header, sizeof(header))) { // 丢弃非法帧不重置连接 continue; } // 按 payload_len 读取载荷 uint8_t payload_buf[16]; n recv(client_sock, payload_buf, frame-payload_len, MSG_WAITALL); if (n ! frame-payload_len) { /* 错误处理 */ } // 复制到完整帧 memcpy(frame-payload, payload_buf, frame-payload_len); ProcessCommand(*frame); // 业务分发血泪经验MSG_WAITALL标志至关重要。不用它recv可能只返回部分数据导致后续解析全错。我们曾因漏加此标志在高并发下出现 12% 的帧解析失败排查三天才发现是 socket 读取语义问题。3.3 指令分发与硬件抽象层HAL对接ProcessCommand()函数是业务入口它不直接操作 GPIO 或 PWM而是调用 HAL 接口void ProcessCommand(const ArmCommandFrame frame) { switch (frame.cmd_type) { case CMD_SET_JOINT_ANGLE: SetJointAngle(frame.joint_id, *(int16_t*)frame.payload); // payload前2字节为角度 break; case CMD_SET_JOINT_SPEED: SetJointSpeed(frame.joint_id, *(int16_t*)frame.payload); break; case CMD_GET_STATUS: SendStatusResponse(); // 组装状态帧返回 break; } } // HAL 层由具体硬件决定此处为占位实现 void SetJointAngle(uint8_t joint_id, int16_t angle_01deg) { // 实际项目中这里调用 STM32 HAL_TIM_PWM_Start() 或树莓派 pigpio // 当前版本留空仅打印日志供调试 printf([HAL] Set joint %d to %d.01deg\n, joint_id, angle_01deg); }提示HAL 层是项目可移植性的核心。源码中HAL_STM32.cpp和HAL_RPI.cpp两个文件分别实现了对不同主控的适配。你只需实现对应函数编译时定义宏#define TARGET_STM32即可切换目标平台。4. 客户端与服务器联调IP 配置、端口映射与通信验证流程光有代码不等于能通。很多开发者卡在“客户端显示已连接但机械臂不动”这一步。本节给出一条从零开始、每步可验证的联调路径覆盖局域网直连、NAT 穿透、防火墙放行等真实场景。4.1 基础直连验证同一局域网这是最可靠的起点。确保客户端 PC 和服务器 PC或开发板在同一子网例如设备IP 地址说明客户端C#192.168.1.50运行ArmClient.exe服务器C192.168.1.100运行ArmServer.exe在客户端连接面板中填入192.168.1.100:8080点击“连接”。此时服务器控制台应立即打印[INFO] New client connected from 192.168.1.50:54321 [DEBUG] Received frame: CMD_SET_JOINT_ANGLE, joint1, angle1250 (125.0°)验证要点服务器日志中的client connected是 TCP 握手成功的铁证Received frame行表明协议解析无误。若只看到连接日志没有接收日志说明客户端发送失败或服务器未正确读取。4.2 跨网段/NAT 环境下的端口映射配置当服务器在路由器后如家用宽带客户端在外网时需在路由器上做端口转发路由器设置项值说明外部端口8080客户端连接时使用的端口内部 IP192.168.1.100服务器所在内网地址内部端口8080服务器监听端口协议TCP必须选 TCPUDP 不用于主控通道配置后客户端连接地址改为你的公网 IP如112.65.33.88:8080。注意国内多数家用宽带无固定公网 IP需配合 DDNS 服务如花生壳使用域名代替 IP。4.3 Windows/Linux 防火墙放行规则Windows 防火墙默认阻止入站连接。服务器启动前必须添加入站规则# PowerShell 管理员运行 New-NetFirewallRule -DisplayName ArmServer Port 8080 -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow -Profile Domain,Private,PublicLinuxUbuntu使用 ufwsudo ufw allow 8080/tcp sudo ufw reload排查技巧若连接超时先在服务器本机用telnet 127.0.0.1 8080测试。能通说明服务正常不通则检查防火墙或程序是否真在运行若本机能通外网不通则一定是路由器或 ISP 层问题。5. 避坑联调中最常见的五个血泪问题与根因解决这些不是理论假设是我在三个不同实验室现场记录的真实翻车案例。每一条都对应一个具体现象、一个底层原因、一个可立即执行的解决命令或代码修改。5.1 现象客户端显示“连接成功”但滑块拖动无反应服务器无任何接收日志原因客户端发送的指令帧checksum计算错误服务器校验失败后静默丢弃未返回错误码。根源是 C# 端CalculateChecksum()方法未包含start_byte字段。解决打开ArmCommand.cs修改校验和计算逻辑确保从帧头开始累加public void CalculateChecksum() { checksum 0; var bytes this.ToBytes(); // 序列化整个帧含start_byte for (int i 0; i bytes.Length - 1; i) // 最后1字节是checksum本身跳过 checksum (byte)(checksum bytes[i]); }5.2 现象关节角度跳变剧烈非平滑运动示波器测 PWM 波形有毛刺原因C 服务器SetJointAngle()调用频率过高100Hz超出舵机响应带宽且未做插值滤波。解决在ProcessCommand()中加入速率限制对同一关节连续指令做时间间隔判断static std::chrono::steady_clock::time_point last_cmd_time[7] {}; // 0 unused auto now std::chrono::steady_clock::now(); if (std::chrono::duration_caststd::chrono::milliseconds(now - last_cmd_time[joint_id]).count() 20) { return; // 20ms 最小间隔即50Hz上限 } last_cmd_time[joint_id] now; // ... 执行原逻辑5.3 现象客户端连接后数分钟后自动断开服务器日志报 “client disconnected”原因TCP 连接空闲超时。Windows 默认KeepAliveTime2h但某些路由器/防火墙会 5 分钟切断空闲连接。解决客户端启用 TCP KeepAlive并缩短探测间隔var client new TcpClient(); client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true); client.Client.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.TcpKeepAliveTime, 60); // 60秒后开始探测 client.Client.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.TcpKeepAliveInterval, 10); // 每10秒探测一次5.4 现象JSON 动作序列播放时机械臂运动到一半突然停止无报错原因SequencePlayer的Timer在OnTimerTick执行耗时过长如日志写入阻塞导致后续 tick 被丢弃。解决将耗时操作移出定时器回调改为队列工作线程private ConcurrentQueueAction _pendingActions new(); private void OnTimerTick(object state) { if (_currentFrameIndex _frames.Count) { var frame _frames[_currentFrameIndex]; _pendingActions.Enqueue(() SendFrameToArm(frame)); // 快速入队 } } // 启动独立线程消费队列 Task.Run(() { while (true) { _pendingActions.TryDequeue(out var a); a?.Invoke(); } });5.5 现象Linux 服务器编译报错error: ‘epoll_create1’ was not declared in this scope原因目标 Linux 发行版内核太旧2.6.27不支持epoll_create1。解决修改ServerLinux.cpp降级使用epoll_create#ifdef __linux__ // 替换 epoll_create1(0) 为 epoll_create(1024)并忽略 EPOLL_CLOEXEC 标志 epoll_fd epoll_create(1024); if (epoll_fd -1) { /* error */ } #endif6. 进阶技巧如何用 Wireshark 抓包分析指令流定位协议层问题当一切配置看似正确但指令仍不生效时Wireshark 是终极后悔药。它不依赖你的代码日志直接看 wire 上真实字节流。以下是我每次联调必做的三步抓包法10 分钟内定位 90% 的通信问题。6.1 过滤规则与关键视图设置启动 Wireshark选择客户端所在网卡输入显示过滤器tcp.port 8080 tcp.len 0此过滤器只显示端口 8080 的 TCP 数据包且排除纯 ACK 包tcp.len 0。接着右键任一数据包 → “Follow” → “TCP Stream”即可看到客户端与服务器的完整对话流按时间顺序排列清晰显示谁发了什么。6.2 协议帧解析手动验证 checksum 与字段对齐在 TCP Stream 视图中找到一个典型指令帧如设置关节1角度其十六进制内容类似aa 01 01 02 04 d2 2e按协议结构拆解字节位置值hex含义验证0aastart_byte✅ 正确101cmd_type (SET_JOINT_ANGLE)✅ 正确201joint_id (1)✅ 正确3-402 04payload_len 0x0204 516? ❌ 错应为 2 字节载荷即00 025-6d2 2epayload checksum若 payload_len 错后续全错发现02 04是大端序误读。实际应为小端04 02 0x0204不payload_len是uint16_t应为00 02表示 2 字节。此处02 04暴露了 C# 端BitConverter.GetBytes()生成的是小端而 C 解析时按大端读取——这就是典型的字节序 bug。6.3 建立“黄金帧”基准库自动化回归测试为防止修改引入新 bug我建立了三个黄金帧样本存为.pcapng文件golden_connect.pcapng: 成功握手的三次握手 服务器欢迎帧golden_angle_cmd.pcapng: 关节角度指令含正确 checksumgolden_status_resp.pcapng: 状态查询响应帧每次代码修改后用 tshark 命令行比对# 提取当前抓包的第1帧负载十六进制 tshark -r current.pcapng -T fields -e data.data -Y frame.number1 | head -c 100 # 提取黄金帧同位置负载 tshark -r golden_angle_cmd.pcapng -T fields -e data.data -Y frame.number1 | head -c 100输出一致即协议层未破坏。这比写单元测试快且覆盖了真实网络栈。从那以后我每次提交 C# 或 C 通信模块代码前都强制走一遍 Wireshark 黄金帧比对。不是信不过自己是信不过人类对字节序、大小端、结构体对齐的直觉。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

AI Agent编排的声明式革命:从Kubernetes思想到YAML任务管理

AI Agent编排的声明式革命:从Kubernetes思想到YAML任务管理

1. 为什么我会盯着 AX 不放:Agent 量的激增带来编排空白先说个前几天的事儿。有位朋友找我帮他们团队看一套多 Agent 系统,代码里密密麻麻全是while True轮询任务状态、手写重试、手写超时控制、用全局字典存每个 Agent 的中间结果。功能是能跑&#xff…

2026/10/15 14:13:17 阅读更多 →
列车运行图自动生成系统:一张图背后的组合优化与落地路径

列车运行图自动生成系统:一张图背后的组合优化与落地路径

简介:面向C开发学习者和铁路信息化相关课程设计者,这份资源实现了一个基于MFC的列车运行图自动生成系统。系统将菜单栏与运行图显示相结合,支持维护列车时刻表、登记晚点信息,并依据时刻表动态绘制固定轴线与红蓝车次斜线&#xf…

2026/10/15 14:13:17 阅读更多 →
RCNN目标检测原理详解:从候选区域到CNN特征提取的完整技术解析

RCNN目标检测原理详解:从候选区域到CNN特征提取的完整技术解析

1. 这篇论文到底解决了什么问题RCNN(Region-based CNN,区域卷积神经网络)是目标检测领域绕不开的一座里程碑。在它出现之前,主流的目标检测方法还停留在手工特征时代,代表方案是DPM(Deformable Part Model&…

2026/10/15 14:13:17 阅读更多 →

最新新闻

CD44重组蛋白是肿瘤干细胞标志物研究与靶向药物开发的重要工具

CD44重组蛋白是肿瘤干细胞标志物研究与靶向药物开发的重要工具

简述: CD44又称HCAM、PGP‑1、ECMR‑III,是位于人类11号染色体的跨膜糖蛋白,也是透明质酸、骨桥蛋白等多种配体的受体。CD44参与细胞黏附、迁移、淋巴细胞归巢、上皮‑间质转化、肿瘤干细胞维持及转移调控,其标准型与变异体在不同…

2026/10/15 14:55:37 阅读更多 →
三级Linux考试知识点梳理:从体系结构到命令实战

三级Linux考试知识点梳理:从体系结构到命令实战

简介:在计算机系统设计中,从冯诺依曼体系到存储层次,指令集与Cache映射共同决定了硬件性能的边界。操作系统通过进程管理、中断机制与存储管理,将底层资源抽象为稳定的服务接口。掌握这些基础概念,是理解Linux系统运行…

2026/10/15 14:55:37 阅读更多 →
8款高效AI工具实测:提升写作、设计与编程效率

8款高效AI工具实测:提升写作、设计与编程效率

1. 项目背景与核心价值最近两年AI工具呈现爆发式增长,各种智能写作、设计、编程助手层出不穷。但很多工具在实际使用中会出现"水土不服"的情况——要么响应速度慢,要么生成质量不稳定,要么操作流程复杂。经过半年多的实测&#xff…

2026/10/15 14:55:37 阅读更多 →
GPR49蛋白是肝癌肿瘤起始细胞识别与靶向干预的重要标志物

GPR49蛋白是肝癌肿瘤起始细胞识别与靶向干预的重要标志物

简述: GPR49又称LGR5,是Wnt信号通路相关受体,也是多种肿瘤中肿瘤起始细胞和肿瘤干细胞的重要标志物。2020年《Nature Communications》发表的研究显示,LGR5阳性细胞在小鼠肝癌模型和人类肝细胞癌中富集,具备更强的类器…

2026/10/15 14:55:37 阅读更多 →
PLC中ST语言编程实战:核心语法、工程模板与经典避坑

PLC中ST语言编程实战:核心语法、工程模板与经典避坑

简介:这是一份面向工业自动化、机器人控制及数据采集处理等场景的ST语言编程手册,适合PLC程序员、运动控制工程师和自动化专业学生系统学习。手册以图文混排的Word文档呈现,全篇共1个doc文件,压缩包整体5.63MB,内容组织…

2026/10/15 14:55:37 阅读更多 →
C++老鼠走迷宫:数据结构课程设计中的DFS与回溯算法解析

C++老鼠走迷宫:数据结构课程设计中的DFS与回溯算法解析

简介:一份基于C的数据结构课程设计项目,围绕“老鼠走迷宫”经典问题,展示二维数组、图结构、栈与递归的综合运用。项目通过随机迷宫生成与路径搜索,帮助读者理解深度优先搜索(DFS)原理及其在连通性、回溯场…

2026/10/15 14:54:37 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →