news 2026/9/5 23:24:47

欧姆龙NJ501无协议串口通信接收完整教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
欧姆龙NJ501无协议串口通信接收完整教程

在做欧姆龙 NJ501 项目时,很多朋友会遇到一个“看起来不难,实际一调试就卡住”的需求:让 PLC 通过串口接收扫码枪、仪表、传感器或者第三方控制器主动发来的数据。网上关于欧姆龙串口通信的例子,大部分集中在 CP1H、CP1L 这类小型机,而 NJ501 配合 Sysmac Studio 的实现思路,资料相对零散。这篇教程就把“欧姆龙NJ501实现无协议串口通信接收”的完整流程整理成图文版,和视频讲解互补,方便你边看边操作。

文章会覆盖硬件接线、Sysmac Studio 串口参数配置、无协议通信指令触发方式、接收后的数据解析思路、联机调试方法和常见坑点排查。如果你以前用过 CX-Programmer 操作 CJ/CP 系列,再看 NJ501 会觉得很多地方不太一样,比如不再直接操作 CIO 区和 DM 区地址,而是通过变量编程。这一点会贯穿全文重点讲解。

1. 无协议串口通信到底是什么

1.1 无协议通信的概念

“无协议”并不等于“没有协议”,而是指 PLC 的串口不启用欧姆龙专用的 HostLink、Modbus-RTU 等现成协议,把串口当作一个透明的收发通道,由用户程序自己组织要发送的数据,也由用户程序自己解析接收到的字节流。

比如扫码枪通过 RS232 发来一段 ASCII 字符:

1234567890\r\n

PLC 收到这串字节后,并不关心它的业务含义,只负责把字节按顺序放进接收缓冲区。至于哪些字节是条码内容、哪些字节是结束符、需不需要做校验,全部由你在程序里处理。

这类通信非常适合以下几种设备:

  • RS232/RS485 接口的扫码枪或读码器
  • 电子秤、地磅仪表
  • 温湿度传感器、压力变送器
  • 激光测距传感器
  • 第三方单片机控制板
  • 老式打印机、标签机

HostLink 优势在于稳定性高、有现成指令,但它是欧姆龙私有协议,第三方设备未必支持。Modbus-RTU 适合标准工业仪表,不过很多简单串口设备只支持自定义文本帧。所以无协议模式成为串口接入中最灵活的手段。

1.2 NJ501 与 CJ/CP 系列的编程差异

用 NJ501 做串口通信,和老一代 PLC 的差异不仅仅是软件从 CX-One 换成了 Sysmac Studio,更核心的是编程习惯从“软元件地址”变成了“变量”。

在 CP1H 上,我们经常会写类似下面的程序:

MOV #1234 D100

但在 NJ/NX 系列上,Sysmac Studio 默认推荐用全局变量、数组、结构体,程序里不再直接频繁操作绝对地址。例如你要保存接收的 100 个字节,最好在全局变量表中定义:

gbRecvBuffer : ARRAY[0..99] OF BYTE; gbRecvLen : WORD; gbRecvDone : BOOL;

这样做的好处是可读性强、程序移植方便,坏处是很多习惯了地址式编程的工程师刚上手时会觉得“找不到数据放在哪里”。理解这一点,对后面的串口接收调试非常重要。

另一个容易踩坑的地方是:NJ501 CPU 本体的通信接口一般以 EtherNet/IP 为主,RS232/RS485 串口通常需要加装串行通信单元或选择带串口的扩展配置。因此配置无协议通信时,首先要确认 CPU 机架上是否有可用的串口单元。

1.3 为什么接收比发送更容易出问题

串口发送是主动行为:程序只要按顺序把数据写到发送缓冲区,设置好触发信号,设备就能收到。接收则完全不同,PLC 不知道设备什么时候会发数据、一次发多长、是不是发到一半就停顿,甚至不知道发过来的数据是不是完整的一帧。

如果接收缓冲区设置太小,会发生数据截断;如果结束码设置不对,会把两帧数据当成一帧处理;如果触发指令的方式不对,又可能出现重复接收。所以做接收功能时,重点要思考三个问题:

  1. 什么时候开始接收?
  2. 什么时候认为一帧数据接收完成?
  3. 接收完成后,怎么把数据安全地交给业务逻辑?

后面的章节会围绕这三个问题展开。

2. 硬件准备与连接方式

2.1 硬件环境清单

按照常见工程配置,你需要准备以下内容:

硬件/软件说明
欧姆龙 NJ501 CPU例如 NJ501-□□00,不同尾缀影响运动轴数量和内存,通信设置思路一致
串行通信单元例如 CJ1W-SCU41-V1 等 CJ 系列串行通信单元,挂在 CPU 机架上
Sysmac Studio欧姆龙 NJ/NX 系列编程软件,版本以实际安装为准
电脑与 PLC 连接线一般通过 CPU 内置 EtherNet/IP 口或 USB 口下载程序
串口调试工具USB 转 RS232 线、串口助手或扫码枪实际设备

需要说明的是,不同 NJ501 机型和不同串行通信单元的配置界面可能有细微差别,但“把某个串口设置为无协议模式、然后通过通信指令收发”的思路是一致的。如果你的机器已经自带串口,可以直接跳过加装单元部分。

Sysmac Studio 不要从不明来源随意下载安装包,最好通过欧姆龙官网、授权代理或经销商获取。安装过程中还需要处理许可激活,盗版或绿色版软件很容易在后续在线通信、固件升级时出现莫名其妙的错误。

2.2 通信单元与端口规划

如果你使用的 CPU 机架原本没有串口,常用的做法是选择 CJ 系列串行通信单元。它有单串口和多串口型号,例如带两个串口的单元可以分别接扫码枪和触摸屏,或者一个口接 RS232 设备、另一个口接 RS485 总线设备。

在 Sysmac Studio 中,每个串行通信单元都有单元号,每个串口有端口号。程序里执行通信指令时,需要同时指定“访问哪个单元”和“访问哪个端口”。如果现场有多台串口设备,建议先做一张端口分配表:

设备单元号端口号通信接口用途
扫码枪01RS232读取条码
电子秤02RS422/485读取重量
上位机11RS232调试监视

这样做的好处是,写程序的时候不会把设备的“物理接线”和“逻辑编号”搞混。特别是在设备维护阶段,换一个人接手项目时,只要看到表格就能快速定位问题。

2.3 RS232 接线注意事项

RS232 属于最常用的串口形式,接线上最容易犯的错误是交叉关系搞反。标准的 DB9 公头/母头中,2 脚是 RXD,3 脚是 TXD,5 脚是 GND。

PLC 串口和设备串口连接时,通常是“你发我收”的交叉接法,也就是 PLC 的 TXD 接设备的 RXD,PLC 的 RXD 接设备的 TXD,GND 互连。别把两根发送线直接接在一起,否则无论如何都收不到数据。

接线之前,先看设备说明书上的引脚定义,不能只依赖“默认 DB9 定义”。有些设备厂商把引脚重新定义了,或者使用了 RJ45 形式的串口接口。错误接线最容易导致的故障现象是:程序配置看起来都对,但就是收不到任何数据。

如果使用的是 RS422/RS485,还需要注意 A/B 或 +/− 极性,不能接反。通信距离较长时,屏蔽层要单端接地,避免形成地环路。

3. Sysmac Studio 中配置无协议串口通信

3.1 新建工程并识别硬件

打开 Sysmac Studio,点击新建工程,选择对应的 NJ501 CPU 型号。如果电脑已经和 PLC 用网线连好,可以在线的状态下选择“从设备读取”,让软件自动识别当前的硬件配置;如果暂时没有连接,也可以手动添加 CPU 和串行通信单元。

手动添加时要注意单元安装的槽位。CJ 系列通信单元在 CPU 机架上会占用槽位,槽位号必须和实际一致,否则程序下载后通信单元可能无法访问。正确做法是先在软件里组态完成后,再对照实物检查一遍单元号设定。

在 Sysmac Studio 左侧的“配置和设置”中,双击“I/O 配置”,找到串行通信单元,打开它的“单元设置”画面。这里通常可以设置:

  • 串口 1 和串口 2 的工作模式
  • 波特率、数据位、停止位、校验位
  • 发送/接收缓冲区大小
  • 接收完成判定条件

3.2 串口模式与通信参数

串口模式的选择是整个配置的核心。在单元的串口设置中,会有类似下面的选项:

HostLink Modbus-RTU Slave Modbus-RTU Master 无协议(No-protocol)

要实现“欧姆龙NJ501无协议串口通信接收”,就要把对应端口设置为“无协议模式”。

接着设置通信参数,常见格式如下:

参数示例值说明
波特率9600 或 115200必须和设备端一致
数据位8一般 ASCII 数据都是 8 位
停止位1常见设置
校验位None / Even / Odd第三方设备可能要求偶校验
流控None / RTS/CTS大多数设备用 None

这里容易犯的错误是只修改了 PLC 端的波特率,没有检查设备端的实际参数。很多扫码枪出厂默认是 9600,而仪表可能是 19200,参数不一致时最常见的现象就是收到乱码或者完全没反应。

建议在写程序之前,先用电脑的串口助手连接设备,把设备主动上报的数据帧格式抓下来。这样能确认波特率、帧头帧尾、结束符,后面写解析程序时才有依据。

3.3 接收完成条件的理解

无协议通信接收最关键的设置是“什么时候认为一帧结束了”。不同通信单元或固件版本的设置项不同,但思想基本有两种:

第一种是固定长度接收。设备每帧数据长度固定,例如每次发 20 个字节,PLC 收到 20 个字节后就认为本帧接收完成。这种方式简单,但设备如果发送中途断线,PLC 会一直等待,直到超时。

第二种是结束码接收。给串口设置一个结束字节,比如常见的回车0x0D、换行0x0A、或者自定义帧尾0x03,PLC 收到这个字节后立即判断一帧接收完成。这种方式更适合变长数据帧。

第三种是超时接收。设置一个空闲时间,串口收到数据后,如果超过一定时间没有后续字节,就认为本帧结束。超时接收适合设备发送间隔不规则的应用。

实战中,扫码枪最常见的格式是以回车或回车换行结尾,所以可以把接收条件设置为“检测到结束码 0D 0A 则认为接收完成”。如果结束码只设置一个 0D,要注意设备是不是发了 0D 0A 两个字节,设置不当会把换行符留到下一帧开头。

4. 无协议通信接收的软件设计思路

4.1 定义接收变量与缓冲区

在 NJ 的变量化编程中,串口接收的数据建议用数组变量存放。全局变量表里可以建立类似下面的定义:

// 全局变量建议定义 gbReaderPort : WORD := 1; // 串口端口号,根据实际单元调整 gbRecvBuffer : ARRAY[0..255] OF BYTE; // 接收缓冲区,256字节 gbRecvCount : WORD; // 本次接收到的字节数 gbRecvDone : BOOL; // 接收完成标志 gbRecvEnable : BOOL; // 接收使能 gbFrameStart : WORD; // 解析用的帧起始位置 gbFrameLen : WORD; // 解析出的有效数据长度

为什么要设置gbRecvEnable?因为无协议接收如果一直处于允许状态,缓冲区里的数据可能在业务逻辑还没处理时就被下一帧覆盖。通常做法是:

  1. 设备上电或系统初始化时打开接收使能。
  2. 接收完成标志置位后,先关闭接收使能。
  3. 业务逻辑拷贝走缓冲区数据。
  4. 处理完成后重新打开接收使能。

这样可以最大程度避免数据被覆盖。

4.2 指令触发方式与执行逻辑

Sysmac Studio 中,无协议串口通信会使用专门的通信指令。指令的准确名称和参数取决于你使用的串行通信单元型号。编写程序前,先按键盘上的“帮助”,在指令帮助中搜索“串行通信”或“RXDU”,查看当前软件版本下的指令原型。

指令在程序中通常不会每周期无条件执行,而是用“接收请求”或“扫描周期启动”去触发。可以参考下面的伪代码逻辑:

// 伪代码:示意接收使能与指令触发思路 // 具体指令名称以Sysmac Studio指令帮助为准 IF bPowerOn THEN bRecvEnable := TRUE; END_IF; IF bRecvEnable THEN // 调用无协议接收指令,将数据接收到 gbRecvBuffer // 当接收完成标志置位后,将 bRecvDone 置位 END_IF; IF bRecvDone THEN bRecvEnable := FALSE; // 进入数据处理段:解析条码、更新画面、触发下一步动作 END_IF;

这里特别强调“触发方式要使用边沿或完成标志”。如果接收使能信号一直为 TRUE,某些指令在每次扫描周期都会重新发起接收请求,导致缓冲区不断被刷新。最典型的现象是:明明数据已经进来了,但你的解析程序总是拿到一半的数据。

当遇到这种情况,不要急着改解析程序,先在在线监视中观察接收缓冲区变量,看看数据是什么时候写入的、写入了多少字节,往往能很快定位。

4.3 接收数据的基本解析思路

接收缓冲区拿到的是字节数组,但实际项目里我们更关心业务数据。假设扫码枪发送的帧格式是:

STX + 条码内容 + ETX 对应的十六进制是:02 + ASCII码 + 03

那么程序要做的事情就是:在接收缓冲区中找到 0x02 作为帧头,再找到 0x03 作为帧尾,把中间的内容拷贝出来。

下面用 ST 语言写一个简单的帧提取思路,方便理解:

// 功能:从接收缓冲区中提取 STX(02) 到 ETX(03) 之间的内容 // 注意:这是一个算法示例,变量类型和边界需要按实际工程调整 bFindStart := FALSE; bFindEnd := FALSE; nStart := 0; nEnd := 0; FOR i := 0 TO (gbRecvCount - 1) BY 1 DO // 找帧头 0x02 IF (NOT bFindStart) AND (gbRecvBuffer[i] = 16#02) THEN nStart := i; bFindStart := TRUE; END_IF; // 找到帧头后再找帧尾 0x03 IF bFindStart AND (NOT bFindEnd) AND (gbRecvBuffer[i] = 16#03) THEN nEnd := i; bFindEnd := TRUE; END_IF; END_FOR; // 如果帧头帧尾都找到,且中间有内容,则拷贝有效数据 IF bFindStart AND bFindEnd AND (nEnd > nStart + 1) THEN nDataLen := nEnd - nStart - 1; FOR j := 0 TO (nDataLen - 1) BY 1 DO gbFrameData[j] := gbRecvBuffer[nStart + 1 + j]; END_FOR; bFrameValid := TRUE; END_IF;

这段代码的价值在于把“接收”和“解析”分开了。接收只是把原始字节搬进缓冲区,解析只负责按协议取出有效内容。如果以后设备协议变了,只需要修改解析段的帧头帧尾判断,而不用动通信设置。

5. 校验算法与数据安全处理

5.1 为什么需要校验

很多自制的第三方设备或老式仪表,串口通信时数据可能受到干扰,偶尔会出现丢字节、错字节的情况。如果协议里没有校验,PLC 可能把错误数据当成真实数据,轻则显示错误,重则触发错误动作。

常见校验方式有:

  • 累加和校验
  • 异或校验
  • CRC16 校验
  • LRC 校验

如果设备的通信协议本身包含校验位,PLC 接收完成后必须校验;如果协议没有校验,建议在 PLC 端至少增加超时判断,避免用到不完整数据。

5.2 异或校验代码示例

很多扫码枪或传感器会采用一字节异或校验。下面是一段 ST 计算异或校验值的参考实现:

// 功能:计算一帧数据的异或校验值 // 输入:DataArray 数据数组,DataLen 参与校验的长度 // 输出:XorValue 校验值 XorValue := 0; FOR i := 0 TO (DataLen - 1) BY 1 DO XorValue := XorValue XOR DataArray[i]; END_FOR;

把参与校验的字节全部异或后,与设备发过来的校验字节比较,如果相同则数据有效,否则丢弃本帧数据。这种方式非常适合高速、短帧的串口场景。

实现校验时要注意参与校验的范围。有的设备从帧头开始算,有的从帧头后一个字节开始算,有的只算数据区。范围搞错的话,即使算法一样也永远校验不过。

5.3 将接收到的原始帧用于调试

在项目调试阶段,强烈建议把“接收到的原始帧”实时监控下来。可以把接收缓冲区变量加入 Sysmac Studio 的数据跟踪,或通过触摸屏/上位机显示原始十六进制数据。

这样做的目的很直接:如果解析结果不对,先看原始报文对不对。原始报文正确而解析出错,问题在 PLC 程序;原始报文本身就乱,问题大概率在通信参数或线缆。

曾经遇到过一个案例,程序解析总是不稳定,最后用串口抓包发现,设备每帧之间收到一个额外的 0x00 字节。原因是设备串口初始化时发送缓冲区没有清空,多了一个空字节。这种问题不看原始报文很难定位。

6. 联机调试与结果验证

6.1 用 Python 模拟串口设备发送数据

在没有实物扫码枪的情况下,可以用电脑的串口助手或 Python 脚本模拟设备,主动向 PLC 发送数据。这样做的好处是可以在受控环境下测试接收逻辑。

安装 pyserial 后,用一段简单脚本发送测试帧:

import serial import time ser = serial.Serial( port='COM5', # 根据实际串口号修改 baudrate=9600, # 必须和PLC端一致 bytesize=8, parity='N', # N: None, E: Even, O: Odd stopbits=1, timeout=1 ) frame = b'\x02ABC123456\x03' # STX + 内容 + ETX ser.write(frame) print("send:", frame) time.sleep(0.1) ser.close()

运行前要确认电脑的 USB 转 RS232 线已经正确连接 PLC 的串口,且串口号没有占冲突。然后回到 Sysmac Studio 在线监视,观察gbRecvBuffergbRecvCount变量是否变化。如果两者都有值,说明无协议通信接收已经打通。

6.2 在 Sysmac Studio 中在线监视变量

把工程下载到 PLC 后,点击“在线”按钮,然后打开全局变量表,右键选择“监视”。Sysmac Studio 可以实时看到变量的当前值。

监视接收缓冲区数组时,可以把显示格式切换为十六进制。这样做方便直接对照设备发来的原始报文。

一个重要的点是:修改全局变量或程序后,Sysmac Studio 有时会提示“需要传输到控制器”。如果没有把最新工程下载到 PLC,程序运行的可能还是旧版本,容易造成“我明明改了程序,为什么没生效”的错觉。

建议每次修改程序后都执行一次“传输到控制器”,下载完成后检查一下 PLC 是否进入运行状态。若 PLC 处于编程模式,串口通信程序不会执行。

6.3 实际设备联调时的检查顺序

接到真实设备后,调试顺序建议是:

  1. 确认设备能独立工作,例如扫码枪在串口助手下能正常输出数据。
  2. 检查 PLC 与设备的通信参数完全一致。
  3. 用 Sysmac Studio 监视接收缓冲区,确认 PLC 能收到原始数据。
  4. 再观察接收完成标志是否正常置位。
  5. 最后启用自己的解析程序。

如果第二步通过网络搜索或咨询设备厂商后仍不确定,就先用串口助手抓包记录。先确认设备确实在发数据,再怀疑 PLC 配置;不要一开始就反复修改 PLC 参数。很多时候问题根源并不在 PLC,而在设备端根本没有发送数据。比如某些扫码枪需要外部触发信号才会开始扫码,未接触发线时它始终处于休眠状态,自然收不到任何数据。

7. 常见问题与排查思路

下面这张表汇总了欧姆龙NJ501无协议串口通信接收中最高频的问题。

问题现象常见原因解决思路
串口设置下载后不生效通信单元没有重新上电对 PLC 或通信单元执行断电重启
完全收不到数据串口模式没有改成“无协议”检查单元设置并重新下载程序
完全收不到数据TX/RX 线接反、GND 未接用串口助手验证设备发送端,检查接线
完全收不到数据程序和设备不是同一个串口核对单元号、端口号,确认实际接线位置
接收乱码波特率、数据位、停止位、校验不一致用抓包数据确认设备真实参数
一帧被拆成多次接收结束码设置错误或设备发送间隔太长确认设备帧尾,必要时改“超时接收”
两帧数据合在一起接收完成条件太长,设备连续发数据把结束码设置为帧尾字节,或减小固定长度
接收缓冲区始终被覆盖数据拷贝不及时,业务逻辑处理慢接收完成后先暂停接收,处理完再使能
指令重复触发使用电平时序而不是边沿触发用上升沿或接收完成标志控制
在线修改程序后通信异常下载过程导致单元重新初始化尽量在停机状态下载,并观察单元状态灯

单独说一下“重启”这个动作。修改串行通信单元的无协议模式、结束码、缓冲区大小等参数后,有些型号必须断电重新上电才能生效。很多工程师只下载程序不复位,结果在线监视怎么调都不对。

另外,如果现场同时接了两台串口设备,要特别小心单元号和端口号是否配置错了。程序里写的端口 1 可能实际接的是端口 2 的设备,这种错误从程序层面完全看不出来,只能回到图纸和接线表去核对。

8. 工程最佳实践与建议

8.1 先定协议再做程序

无论设备是扫码枪还是仪表,都要先确认通信协议。建议维护一份简单的串口协议文档,至少包含:

  • 波特率、数据位、停止位、校验方式
  • 数据帧长度还是结束码
  • 帧头、帧尾、长度字段
  • 数据字段含义
  • 校验方式
  • 设备主动上报还是 PLC 轮询

没有这份文档,今天调通了,过两个月再维护时又会一头雾水。写进项目交接文档比只写在程序注释里靠谱得多。

8.2 使用边沿触发和完成标志控制流程

NJ 的通信指令即使不带强制边沿参数,也应该在程序逻辑上用边沿或完成标志控制,避免每个扫描周期重复发起通信请求。典型的错误写法是把“接收使能”直接接到常开触点,指令每个周期都执行,结果后续数据处理永远跟不上。

更稳妥的做法是建立一个“接收状态机”:

空闲 -> 等待接收 -> 接收完成 -> 数据处理 -> 空闲

这样程序结构清晰,也能避免缓冲区覆盖。

8.3 接收缓冲区要足够大

很多工程师习惯把缓冲区设置得刚好等于一帧长度,但实际使用中如果设备发送了异常帧,缓冲区可能溢出。建议缓冲区至少留出 1.5 到 2 倍的空间,并充分考虑最坏情况。

另外要注意,设备发来的可能是 ASCII 字符,也可能是十六进制字节。同一个字符“A”,在串口助手上显示为 A,在 PLC 接收缓冲区里可能是 0x41。如果你按 ASCII 直接比较,会出现数据对不上的问题。建议在程序里统一使用字节或十六进制进行判定。

8.4 通信参数的修改要提前评估影响

修改串口通信参数时应评估是否会对整个系统造成影响。例如 PLC 正在执行运动控制,如果你此时下载程序导致通信单元重置,运动轴可能会报错或暂停。安全做法是在设备停机、伺服未使能的状态下进行参数修改和下载。

如果无法停机,至少要提前备份原工程,并确保能快速回滚配置。工程文件建议用项目名称加日期命名,例如:

NJ501_Reader_20250325_v1.0.smc2

这样即使配置改乱,也能快速恢复到上一个可用版本。

8.5 多设备接入时尽量采用总线方式

如果现场串口设备很多,多个独立串口单元会占用大量机架空间和成本。这种情况下可以评估 RS485 总线方式,让多台设备挂在同一条 RS485 总线上,PLC 通过站号区分设备。不过这种方式会增加协议复杂度,适用于设备本身支持总线通信的场景。

对于简单的单台扫码枪或仪表,直接用 RS232 无协议通信接收是成本最低、最容易维护的方案。

9. 总结:理顺 NJ501 串口接收的完整链路

欧姆龙NJ501无协议串口通信接收,本质上是一条由硬件连接、通信参数、接收指令、数据解析组成的链路。任何一个环节不对,最终都会表现为“收不到数据”或“数据不对”。

建议你先从最小验证开始:用串口助手手动发送一帧固定数据,让 PLC 接收并在线监视缓冲区。这一步打通后,再接入真实设备,逐步完善数据解析和业务逻辑。不要一开始就写很复杂的完整程序,否则问题会被淹没在一堆业务代码里。

下一步可以继续学习 Sysmac Studio 中的数据跟踪功能、欧姆龙 NJ/NX 的 EtherNet/IP 通信,以及如何把串口接收到的数据通过 OPC UA 或套接字发送给上位机。掌握 NJ501 的串口接收后,你会发现其他品牌 PLC 的无协议通信也大多是类似思路,区别只在指令名和配置界面不同。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/5 23:20:40

基于协同过滤的Python音乐推荐系统实现与工程落地

很多做 Python 毕业设计的同学,看到“推荐系统”四个字,第一反应是先去找算法公式,第二反应是担心“数学不好能不能做”。实际上,毕设里的推荐系统并没有那么神秘。它最核心的协同过滤思想,翻译成大白话就是一句话&…

作者头像 李华
网站建设 2026/9/5 23:16:09

基于Jetson Nano与STM32的AI视觉机械臂:从YOLOv8部署到串口控制实战

简介:本资源是一套面向嵌入式AI开发者的端侧智能控制完整实践方案,聚焦Jetson Nano与STM32协同实现垃圾分类模型部署及舵机闭环控制,适用于具备C语言基础与嵌入式开发经验的进阶学习者。资源共110个文件,涵盖38个C源码&#xff08…

作者头像 李华
网站建设 2026/9/5 23:16:06

洗烘一体机真的省水省电?从冷水洗原理到实测方法全解析

把洗衣从“下班后的持久战”里解放出来,是这两年很多家庭换家电时最真实的需求:要洗得干净、不伤衣服,最好不用长时间晾晒;偶尔碰上连阴雨,又希望烘干能真正救急。看到“小天鹅 TD12VE10PRO 洗烘一体机”这类产品被放到…

作者头像 李华