简介面向制造业信息化与数据标准化岗位的物料编码规则参考文档适合生产管理、仓储采购、ERP实施及主数据治理人员查阅使用帮助解决物料标识混乱、分类口径不统一、编码缺乏扩展性等实际问题。全文围绕12位产品物料编码展开逐位拆解产品编号、物料属性码、功能性能类别码、特征区分码与四位序列码的取值逻辑并延伸至文档编码规则以及标准件、外购件、电子元器件、自制件的编码表划分方式。压缩包内为1个docx文件约18KB可直接编辑并套用到企业自有的编码手册与主数据模板中。目前已有2376人学习。读者可据此搭建从编码结构设计到类别码细分的完整框架减少录入错误、加快物料检索并为库存管理、成本核算与质量控制预留可扩展的码位空间。1. 12位码物料编码不是起名字是给主数据表定主键制造业信息化里吵得最久的一个问题是物料编码到底要不要“带含义”。带含义人一眼能看懂但改不动不带含义纯流水号改得动但没人看得懂。12位码给的是一个折中答案——前8位承载分类与特征后4位留纯流水。反直觉的地方在于这套规则能不能撑十年不取决于前8位分得多细而取决于后4位能不能扛住并发分配和号码回收。因为编码一旦被采购单、BOM、库存台账引用它就再也不能改本质上是主数据表的不可变主键语义只是搭便车。搞懂这个前提才能看明白XXX X XX XX XXXX为什么这么切。2. 码位解剖12位里每一位到底在解决什么问题很多人第一次读这类规则文档会觉得“不就是按位数截字符串吗”。真落到系统里就会发现位宽不是随便定的每一位的宽度都对应着一个容量上限而容量上限又对应着企业的业务规模。位宽定窄了两三年就溢出定宽了人工录入和条码打印都难受。这一章把12位拆开算账。2.1 五段位域12位是怎么凑出来的原始文档给了一张容易读错的示意图XXX X XX XX XXXX ↓ ↓ ↓ ↓ ↓ 产品 一级 二级 三级 序列按空格切段长是 3122412和“由12位码构成”对得上。但再看“码位说明”那四条一级编码一位物料属性码、二级二位功能性能类别、三级二位特征、序列四位排列序号——四条加起来只有9位缺的3位正好是产品代号。也就是说文档的图示与码位说明是一致的反倒是有些转述版本里“产品编号1位、一级编码2位”的说法凑不出12位。落地时必须以码位说明为准这一条后面在排查章还会再拎出来讲。位段位宽含义取值空间十进制示例产品代号3产品线/系列000–9991000个102一级编码1物料属性码0–910个5外购件二级编码2功能、性能类别00–99100个01三级编码2特征区分尺寸/材质等00–99100个03序列码4同前缀下的排列序号0000–999910000个0045一位的物料属性码是整套体系里最“贵”的一位因为它只有10个坑却要装下企业所有的物料来源大类。文档里已经占用了4、5、6、7四个标准件、外购件、电子元器件、自制件剩下0、1、2、3、8、9六个是预留。这六个预留位是典型的后悔药——将来如果新增“委外件”“客供件”“包装材料”这类大类直接从预留里取不用动位宽也就不会引起存量编码的迁移。拆码本身是个纯切片操作但切片顺序必须和位宽表严格绑定不能靠人肉substr硬编码# 12位物料编码的位域定义顺序即语义优先级以文档的码位说明为准 SEGMENTS [ (product, 3), # 产品代号区分产品线/系列 (attr, 1), # 一级编码物料属性码 4标准件/5外购件/6电子元器件/7自制件 (category, 2), # 二级编码功能、性能类别 (feature, 2), # 三级编码特征区分尺寸、材质、颜色等 (serial, 4), # 序列码同一前缀下的排列序号 ] def split_code(code: str) - dict: # 长度和字符集先校验避免后面切片切出脏数据 if len(code) ! 12 or not code.isdigit(): raise ValueError(f编码必须是12位纯数字收到: {code!r}) out, pos {}, 0 for name, width in SEGMENTS: # 按位宽顺序推进游标 out[name] code[pos:pos width] pos width return out print(split_code(102501030045)) # {product: 102, attr: 5, category: 01, feature: 03, serial: 0045}把位宽抽成配置表的价值在于将来如果产品线从3位扩到4位只需要改SEGMENTS和总长度校验所有上层调用拆码、拼码、按段聚合报表都不用动。这类“位宽表驱动”的写法是主数据系统里最省事的一种防御性设计。2.2 容量计算每一位到底能装多少十进制位宽的容量很好算但很少有人在定规则的时候真的把账算到“年新增量”这个粒度。以文档的位宽为例单个一级大类下的理论组合数是二级 100 × 三级 100 × 序列 10000 1 亿看起来天文数字但这是“每个二级×三级组合都配满一万个序列号”的理想值。真实业务里某个具体特征组合比如“M6×20 不锈钢螺栓”下可能只用到几十个序列号而另一些组合比如通用辅料可能挤到几千个。所以有效容量不是乘法算出来的而是看最热的那一个组合会不会先撑爆。如果换成字母数字混合的36进制容量会膨胀得很快但制造业里我一般不建议这么干编码字符集1位2位4位纯数字10进制1010010000大写字母数字36进制排除易混字符后约323210241048576十六进制1625665536字母进去之后人工抄写、电话报码、条码扫描环节的错误率会明显上升0/O、1/I、2/Z这三对是血泪经验级的坑。文档选纯数字实际上是在“容量”和“人工可操作”之间选了后者这个取舍在物料编码领域基本是共识。还有一层容量是产品代号那3位给的1000个产品线。如果企业是项目制、每个项目一条产品线三年就能用完。这时候要么扩位要么改成“产品代号项目号”的组合。规则文档里没写产品代号的分配制度这恰恰是实施时最容易失控的地方——谁都可以申请一个新代号三年后回头看一半代号对应的产品线已经停产但编码不能删。2.3 序列码的作用域四位流水号到底在哪个范围内唯一这是整套规则里最容易被忽略、也最容易翻车的一个设计点。文档只说“序列码四位——排列序号码”没说这个“排列”是排在哪个范围里。三种可能的语义后果完全不同全局唯一整个物料表共用0000–9999一万个号用完就没了。中型制造企业的物料条目动辄十几万这种解释直接不成立。大类内唯一每个一级编码4/5/6/7各有一万个号。外购件往往是条目最多的类目很容易先撑爆。前缀内唯一产品代号一级二级三级这8位相同的物料共享一万个序列号。这是唯一算得过来的解释也是我见过的大多数落地实现。用SQL表达就是-- 序列码的作用域是前8位前缀前缀相同才共享四位流水 SELECT prefix, COUNT(*) AS used FROM md_material GROUP BY LEFT(material_code, 8) HAVING used 9000; -- 逼近一万就要预警理解作用域之后序列码的“回收”问题就浮出来了某个物料停用了它的号能不能给别人用答案是不能。因为这个号可能已经被历史采购单、历史BOM版本引用回收等于让两条不同物料共享一个历史主键账就对不上了。序列码本质上是只增不减的四位留够一万是在赌“同一个特征组合下终生不会超过一万个物料”。这个赌注对标准件成立对定制件未必所以规则里最好写清楚溢出后的扩容方案是从预留的一级编码里借一个新段还是把三级特征再细一层。3. 分类表4/5/6/7 这套大类码是怎么长出来的位宽解决“装得下”分类表解决“分得清”。文档给出的分类表只有四行但每一行背后都站着一套管理归属和一套采购流程。分类维度选错了后面所有的统计报表都是歪的。3.1 四个大类码的划分依据类名一级编码管理归属典型获取方式标准件4通用件库通用采购可多供应商比价外购件5采购部按图/按规格外购电子元器件6电子料库代理商/原厂渠道有批次追溯要求自制件7生产/工艺内部加工挂在工艺路线和BOM上这四个类的划分其实混了两种维度。标准件与电子元器件是按“对象性质”分的外购件与自制件是按“获取方式”分的。文档把它们并列成同一层的四个值是因为在实际管理上这四类的库存策略、供应商管理、成本核算方式确实不同标准件按安全库存补货电子元器件按批次追溯外购件按订单采购自制件按工单投产。从“管理动作不同”这个角度切混维度是可以接受的前提是把优先级规则写死。3.2 正交性裂缝“外购的电子元器件”该进5还是进6这是分类体系的第一道裂缝。一颗电阻如果是外购的它符合“外购件5”的定义如果它是电子元器件又符合“电子元器件6”的定义。规则文档没给裁决规则实施时就会分裂设计部门按性质填6采购部门按来源填5同一个物料在两个系统里长出两个编码一物多码就这么来的。常见的裁决思路有三种各有代价性质优先先判断对象本质是不是电子元器件是就进6不管自制外购。好处是电子料的批次追溯、RoHS合规这些属性能统一挂上去坏处是“自制的电子模块”也要塞进6和采购件混在一起。来源优先先判断是买来的还是自己做买来的进5自己做的进7。好处是采购和生产的统计口径清晰坏处是电子元器件的特殊性被打散批次管理得另建一套标识。建独立维度一级编码只管性质来源作为物料的普通属性字段存不进编码。这是最干净的解法但等于改规则存量编码要迁移。我一般会建议在规则文档里补一张“冲突裁决表”把“外购电子元器件”“自制标准件”“外购标准件”这几种交叉情形逐条写死归属并且在编码申请表单里做成联动选择——选了“电子元器件”来源字段就只能选“外购/自制”编码由系统算不让人填。制度上的模糊最后一定会变成数据上的脏。3.3 分类码负责聚合序列码负责唯一这两个职责必须分清否则编码规则会越改越乱。分类码前8位的价值在于它能直接支撑聚合查询不需要 join 任何分类表-- 按一级编码统计各类物料条目数分类码天然就是分组键 SELECT attr_code, COUNT(*) AS cnt FROM md_material WHERE status 1 GROUP BY attr_code; -- 按“二级三级”看某一大类下的特征分布定位编码段是否被滥用 SELECT category_code, feature_code, COUNT(*) AS cnt FROM md_material WHERE attr_code 5 GROUP BY category_code, feature_code ORDER BY cnt DESC LIMIT 20;如果分类信息不放在编码里、而是放在外键关联的分类表里这些查询就要多一层 join而且在跨系统对接比如把物料主数据同步给MES或WMS时对方拿到的只是一串无意义流水号没法自己判断这是个什么东西。这是语义编码最实在的收益编码本身就是一份自带分类信息的自解释数据在系统边界上不需要额外传字典。代价也很明确分类一旦进了编码就再也改不了。一个物料从“外购”转成“自制”编码不能跟着变只能新建一条物料再走变更流程。这个代价是否可接受取决于这类转变在企业里发生的频率。频率低语义编码划算频率高就该考虑把易变维度踢出编码。4. 避坑与排查12位码在落地时最常翻车的五个地方规则文档写得再漂亮落到系统和流程里总会有几个位置对不上。下面这五条是我在不同项目里反复见到的按“现象→原因→解决”记下来实施前对着过一遍能省不少返工。4.1 现象拼出来的编码是11位或13位原因不同章节对位宽的描述不一致。图示是 3122412但转述版本里出现“产品编号1位、一级编码2位”的说法1222411也有把“产品编号”当成独立于12位之外的前缀拼出13位。根因是文档里“产品编号”“产品代号”“一级编码”这三个词指代不清。解决以“码位说明”四条加产品代号为准明确写死 31224。在编码申请表里加一道长度校验长度不等于12直接拒收让错误在录入环节就暴露而不是等到对账时才发现。4.2 现象同一个物料在两个系统里编码不同采购重复下单原因分类归属存在歧义设计端按性质填、采购端按来源填两边各生成一个码。这是3.2节那道裂缝的直接后果。解决建一份“编码申请前置校验表”把交叉情形写死归属申请入口唯一化编码由系统按规则生成禁止人工指定前8位。存量数据做一次“名称规格”模糊比对把疑似一物多码的条目拉出来人工合并。4.3 现象两个新物料拿到同一个序列号主键冲突原因序列号生成用了“先查最大值再1”的写法两个并发请求查到同一个最大值。解决不要在应用层 SELECT MAX要在数据库层做原子递增。用一张前缀计数表靠UPDATE ... SET next_no next_no 1的行锁保证唯一再配合唯一索引兜底-- 前缀计数表每个8位前缀一行靠行锁串行化分配 CREATE TABLE md_code_serial ( prefix CHAR(8) NOT NULL, -- 产品3属性1类别2特征2 next_no INT UNSIGNED NOT NULL DEFAULT 1, -- 下一个可分配的序列号 PRIMARY KEY (prefix) ) ENGINEInnoDB; -- 分配先自增再读回单语句原子完成 UPDATE md_code_serial SET next_no next_no 1 WHERE prefix 10250103; SELECT next_no - 1 FROM md_code_serial WHERE prefix 10250103;唯一索引是最后一道防线即使应用层逻辑有漏洞数据库也不会让重复编码落地。4.4 现象试制件、临时件占用了正式编码段原因试制阶段的物料没有正式图号为了走流程有人直接借用了正式的一级编码和序列段。等项目转量产这些临时编码已经流进了采购单和库存清不掉。解决在预留位里划出一个专用段比如一级编码用9表示“试制/临时”并规定临时编码带有效期到期自动停用转量产时新建正式编码用“替代关系表”把新旧码关联起来历史单据仍然指向老码新单据走新码。4.5 现象编码在Excel里打开后前导零消失导入系统全乱原因12位纯数字编码被Excel当成数值处理0012变成12序列码0045变成45。这是纯数字编码方案绕不开的坑。解决数据库里编码字段一律用VARCHAR(12)或CHAR(12)绝不用整型导出给业务部门时CSV里加制表符前缀或者直接出xlsx并预置文本格式导入模板加数据校验长度不足12位直接报错。顺带一提12位十进制最大约 1e12已经超过 32 位整型的 2.1e9 上限即使用整型也得是 64 位这个细节在选字段类型时别漏掉。5. 生成器与校验把规则写成可执行的代码规则文档最大的价值不是给人看是给系统执行。一份没有配套校验的编码规则落地三个月就会长出各种脏数据。这一章把生成、校验、落库三段写成可以直接改改就用的东西。5.1 编码生成器分段拼装 序列分配生成器的核心不是拼字符串而是“先算前缀、再原子取号、最后拼装”的顺序。前缀算错了序列号分配就白费。from dataclasses import dataclass dataclass class CodeRequest: product: str # 3位产品代号 attr: str # 1位物料属性码 category: str # 2位功能/性能类别 feature: str # 2位特征码 def prefix(self) - str: # 前缀 产品3 属性1 类别2 特征2共8位也是序列号的作用域 p f{self.product}{self.attr}{self.category}{self.feature} if len(p) ! 8 or not p.isdigit(): raise ValueError(f前缀必须是8位数字收到: {p!r}) return p def build_code(req: CodeRequest, serial: int) - str: # 序列号补零到4位超出说明该前缀已经溢出必须走扩容流程 if not 0 serial 9999: raise ValueError(f序列号超出4位容量: {serial}) return f{req.prefix()}{serial:04d} print(build_code(CodeRequest(102, 5, 01, 03), 45)) # 102501030045prefix()单独抽出来的意义在于它同时是序列号分配的作用域键也是分类聚合的查询键。所有上层逻辑都只依赖这一个方法将来位宽调整时改一处即可。5.2 校验器长度、字符集、码表白名单三道关很多系统的校验只做了长度结果102901030045这种一级编码为9预留未启用的码也能进来。校验要分三层格式层、码表层、业务层。import re # 一级编码白名单只放行已启用的物料属性码 ATTR_WHITELIST {4, 5, 6, 7} CODE_PATTERN re.compile(r^\d{12}$) def validate_code(code: str) - list[str]: errors [] if not CODE_PATTERN.match(code): errors.append(格式错误必须是12位纯数字) return errors # 格式都不对后面按位取段没意义直接返回 attr code[3] # 第4位是一级编码 if attr not in ATTR_WHITELIST: errors.append(f一级编码 {attr} 不在启用白名单内预留段未开放) serial int(code[8:]) if serial 0: errors.append(序列码不能为0000保留给系统占位) return errors码表白名单这一层最容易被跳过但它挡住的是最麻烦的一类脏数据预留段被提前占用。等将来真要启用那个段时发现里面已经躺了几百条历史物料迁移成本比当初加一行白名单高两个数量级。5.3 落库整码与分段列的一致性约束主数据表有个永恒的争论12位编码存一个字段还是拆成五段存。我的做法是两者都存但用约束保证一致——整码做业务主键分段列做查询和报表的索引再用 CHECK 约束把“整码必须等于分段拼接”写进数据库。CREATE TABLE md_material ( material_code VARCHAR(12) NOT NULL, -- 必须用字符串防止前导零丢失 product_code CHAR(3) NOT NULL, attr_code CHAR(1) NOT NULL, category_code CHAR(2) NOT NULL, feature_code CHAR(2) NOT NULL, serial_no CHAR(4) NOT NULL, material_name VARCHAR(128) NOT NULL, base_uom VARCHAR(8) NOT NULL DEFAULT PCS, status TINYINT NOT NULL DEFAULT 1, -- 1启用 0停用停用不回收编码 PRIMARY KEY (material_code), KEY idx_class (attr_code, category_code), -- 支撑按大类聚合 CONSTRAINT ck_code_concat CHECK ( material_code CONCAT(product_code, attr_code, category_code, feature_code, serial_no) ) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;CHECK 约束看着多余实际挡的是“有人绕过生成器手工插数据”这类事故。分段列和整码对不上报表按分段列聚合出来的数就和按整码 join 出来的数不一致对账时能查到怀疑人生。停用状态用status标记而不是物理删除同样是为了保住历史单据的外键完整性——编码可以被停用但不能消失。6. 设计取舍语义编码的边界在哪里写到这里可以把12位码真正的取舍摊开了。前8位带含义换来的是自解释和免 join 聚合代价是这8位一旦发出就不能改而物料世界里有些属性是会变的。所以判断一个位段该不该进编码标准只有一条这个属性在物料的生命周期里会不会变。拿文档的四段含义挨个过一遍产品代号物料一出生就定了不会变二级的功能性能类别改型即新物料也算稳定三级特征尺寸、材质、颜色同样改了就换物料可以接受。唯独一级编码那一位最脆弱——“自制”和“外购”之间的切换在制造业太常见了产能不足临时外协、工艺成熟后转自制、供应商停产被迫自研。每一次切换按规则都得新建一条物料编码旧码停用。一个物料换三次来源主数据里就躺四条记录库存和成本报表都要做额外的合并逻辑。这就是语义编码的收益递减曲线前两三层含义的收益很高越往后每多一位含义带来的“属性变更导致编码失效”的隐患就多一分。12位码把分类切到了三级我认为已经到了这条曲线的拐点附近再往四级、五级切收益基本不足以抵消维护成本。如果让我重新设计一套我会把“来源”这个易变维度从一级编码里拿出来做成物料的一个普通属性字段一级编码只保留“对象性质”这一个稳定维度。编码长度可以缩到8位左右代价是人工可读性下降、跨系统传递时对方拿不到完整分类信息收益是属性变更零成本、编码永不失效。这两条路没有绝对优劣取决于企业的物料变更频率——变更少的企业语义编码省下的 join 和沟通成本是实打实的变更频繁的企业编码失效带来的主数据分裂会先把人拖垮。还有一条验证思路实施半年后可以拿来验自己的规则是否健康统计每个一级编码下“停用码占已发码的比例”。这个比值超过两成说明一级编码那一位切错了维度正在被业务反复绕过。这时候改还来得及等比例过半存量数据已经大到不敢动就只能靠替代关系表硬扛了。从那以后我每次看到带含义的编码规则第一件事就是把每个位段挨个问一遍这个属性在物料生命周期里会不会变会变的一律踢出编码放进字段。规则文档里那张分类表看着只有四行但每一行背后都是一个正在发生的管理动作编码只是把它固化了下来。这份制造业物料分类编码规则的资料价值就在它把位宽、分类、序列码这三件事的边界画清楚了剩下的裁决规则和扩容预案得由你自己的业务来填。希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
AI时代创意阶层分化:从执行者到判断者的价值重分配 1. 一个标题引发的思考:创意阶层真的在“坠落”吗“AI and the Fall? Of the Creative Class”这个标题第一次跳进我视野的时候,我正在整理过去一年帮几家内容团队做AI工作流改造的复盘笔记。那个问号特别扎眼——它不是断言,不是控诉&#… · 2026/11/3 20:42:05
C#与Halcon通用视觉框架开发实践 1. 项目背景与核心价值在工业视觉检测领域,Halcon作为老牌机器视觉算法库,其强大的图像处理能力一直备受推崇。而C#凭借出色的Windows平台兼容性和高效的开发效率,成为工业上位机开发的首选语言。但传统开发模式存在两个痛点:一是… · 2026/11/3 20:42:05
AI资讯日报生产指南:模型评测口径、百万Token输出与智能体安全 1. 一份AI资讯日报的骨架是怎么搭出来的做AI资讯日报这件事,我从最早的手写摘抄做到现在的半自动化流水线,前后折腾了两年多。标题这一期《2026年10月5日:某国产推理模型将中美顶尖模型差距缩至3%,某海外旗舰模型百万Token输出&am… · 2026/11/3 20:42:05
Vue el-switch 列表开关全部关闭的排查与规范写法 一个后台管理页的列表,四十多行数据,每行右侧一个 el-switch 控制启用状态。接口返回里 status 明明白白地 1 和 0 混着,但页面上四十几个开关齐刷刷全是灰的,一个都没亮。这种"vue el-switch 列表开关状态显示有误、全部关闭… · 2026/11/3 21:27:39
Model-Optimizer:从量化剪枝到算子融合的模型部署加速实践 0. 写在前面:Model-Optimizer 到底是什么如果你手里正好有一个训练完的深度学习模型,准备部署到线上服务或者边缘设备,那你大概率会遇到这几个问题:模型太大加载慢、推理速度跟不上业务指标、显存或者内存吃紧。这些问题的根源其实… · 2026/11/3 21:27:39
TensorFlow 生产级实践:模型训练、部署与调优全攻略 TensorFlow 这个项目我前后折腾了小半年,从最初跟着教程跑 MNIST 都费劲,到后来能把模型搬到生产环境做推理服务,中间踩过的坑、绕过的弯路,掰着手指头都数不清。趁着最近把项目重构了一遍,正好把这一路的经验做个系统… · 2026/11/3 21:27:39
EMD与PSO优化SVM在大坝变形预测中的应用 1. 大坝变形预测的技术挑战与创新方案在大坝安全监测领域,变形预测一直是个棘手问题。传统方法往往难以应对水压、温度等多因素耦合作用下的非线性变形特征。我在参与三峡大坝安全监测项目时,就曾为预测精度不足的问题头疼不已。直到尝试将EMD࿰… · 2026/11/3 21:27:39
解决OpenClaw国内下载慢的镜像配置指南 1. 为什么OpenClaw在国内下载这么慢?OpenClaw作为一款开源的AI开发工具链,其核心组件和依赖库主要托管在GitHub、Docker Hub等国际平台上。国内开发者在使用openclaw install命令时,经常会遇到以下几种典型情况:安装进度条卡在Dow… · 2026/11/3 21:27:39
MIPI CSI-2摄像头调试:D-PHY带宽、拆包与多摄避坑 简介:MIPI CSI-2 是 MIPI Alliance 制定的摄像头串行接口规范,广泛用于手机、无人机与车载电子设备中摄像头模组与主机处理器之间的高速图像数据传输。这份 PDF 为 2009 年 4 月发布的草案版本 1.01.00 r0.04,面向从事摄像头驱动、图像采集、… · 2026/11/3 21:26:38
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46