
简介《广数980TD系列信号采集信号线定义》面向数控车床初学者、在线操机员与维修人员聚焦广数980TD系统在机床信号采集与输出接线中的识读与排故需求帮助读者在设备调试、日常维护和故障定位时快速对照信号定义。包内共1个docx文档压缩包约814KB内容集中、便于检索核对主要围绕980TDi与980TDc两种机型的62A输出接插件展开。文档具体列明Y2.5运行信号对应34号、Y2.6计数信号对应35号、Y2.7报警信号对应36号并说明IO采集盒COM端接24V电源接口可作为接线核对与异常排查的参考。已有3166人学习适合需要建立信号采集基础、提升操作与维修效率的技术人员收藏备用。1. 三个端子的错觉为什么照着图纸接线仍然采不到信号很多人第一次给数控车床接状态采集都是照着图纸把 34、35、36 三根线拧到端子上通电然后发现运行信号一直是高电平、计数信号一个数都不涨。图纸没问题问题出在把“端子号”当成了“信号”本身。980TD 系列的这份信号线定义里真正决定成败的东西藏在两个不起眼的位置一是 Y2.5 这个软元件地址它要经软元件地址、模块点号、物理脚位三层映射才能落到 62A 接插件的 34 脚二是定义末尾那句“IO 采集盒 COM 端接 24V 电源接口”背后的电流回路方向。前者决定你读的是不是那个点后者决定你读到的电平是不是反的。搞懂这两件事三根线才从“能接上”变成“能读对”。2. 地址的三层映射Y2.5 是怎么走到 62A 的 34 号脚的2.1 软元件地址不是端子号它是字节加位Y2.5 这个写法里Y 表示 PLC 的输出线圈区2 是字节地址5 是位号。一个字节装 8 个点所以 Y2 这一个字节里排着 Y2.0 到 Y2.7 共 8 个输出点运行、计数、报警正好占了最高的三位。常见实现是系统每个扫描周期把输出映像寄存器整字节刷到 IO 模块模块再把每位的通断推到对应端子。于是“我要读运行”在软件侧的操作本质是读某个字节的第 5 位。这里有个容易被忽略的设计动机为什么偏偏挑 Y2.5、Y2.6、Y2.7 三个连着的位而不是散落在 Y0、Y5、Y9因为连着排在一个字节里采集端可以一次读字节拿到三个状态省掉三次寻址也方便在梯形图里用一条字节比较指令做“组合状态判断”。这是典型的“把面向外部的信号集中成一段”的做法。前面那些字节通常分给了刀架转位、冷却、主轴、卡盘这类强电负载它们变化频繁、对时序敏感不适合跟状态指示混在一起。真正需要留心的点在于Y 地址是软的端子的编号是硬的。这中间的映射关系不写在电气原理图上也不会由地址本身推出来而是由机床厂的接口定义固定下来。同样一个 Y2.5不同批次的机床完全可能落到 62A 的不同脚上。所以理解这段定义正确的姿势不是背“34 是运行”而是建立“软元件地址 → 模块点号 → 接插件脚位”这条链并且每换一台机床都重新核一遍这条链。2.2 模块点号是中间那层62A 是最后那层完整的三层是这样的第一层 Y2.5 是编程地址第二层是 IO 模块上的物理点序号比如“本模块第 14 点”第三层是 62A 输出接插件的第 34 号脚。中间这层最容易被跳过但它恰恰是排错时最有用的锚点因为模块面板上通常有点位指示灯你可以一边看灯一边对地址不需要碰万用表。980TDi 和 980TDc 在这个位置上的定义是一致的都是 62A 输出接插件Y2.5 对 34 号脚走运行Y2.6 对 35 号脚走计数Y2.7 对 36 号脚走报警。两个型号保持这一段兼容对做采集的人是很实际的便利同一套线束、同一张映射表能覆盖两种机床。但不要把这种一致性外推型号不同意味着系统版本、PLC 程序结构、甚至整个 IO 分区的起始地址都可能不同只有这三个点是被特意对齐过的。血泪经验是只验证了这三个点就以为整张表通用接别的信号时全错位。软元件地址语义62A 脚位信号类型典型持续Y2.5运行34电平整个循环Y2.6计数35脉冲几十毫秒Y2.7报警36电平可能锁存直到复位这张表就是采集程序的骨架。把它写成代码里的常量比写在注释里靠谱得多因为后面做取反、做去抖、做通道命名检查时都要用它# 三层映射固化成一个字典plc_addr 是给人看的terminal 是给接线工看的 # active_level0 表示低电平有效理由在第 3 章展开 IO_MAP { Y2.5: {point: 14, terminal: 34, name: RUN, active_level: 0, kind: level}, Y2.6: {point: 15, terminal: 35, name: COUNT, active_level: 0, kind: pulse}, Y2.7: {point: 16, terminal: 36, name: ALARM, active_level: 0, kind: level}, } def addr_to_channel(plc_addr: str) - int: 把 PLC 软元件地址翻成采集盒通道号通道号 模块点号 - 1 item IO_MAP[plc_addr] return item[point] - 1point用 1 起算、通道号用 0 起算这种差一在接线和查寄存器时是经典翻车点。kind字段看着多余实际决定后面用哪条处理路径电平信号直接读脉冲信号必须挂边沿检测。active_level不写死成常量而是放进表里是为了照顾不同机床厂的接法差异改一个数字比改十处判断安全。2.3 建完表怎么验顺序比方法更重要验证映射对不对方法很朴素让机床进一个已知动作比如空跑一个循环万用表直流电压档黑表笔固定夹在机床的 0V 上红表笔点 34 号脚看电压是否随动作翻转。然后再点 35、36看是不是分别对应循环计数和报警。但顺序上有个讲究——先验极性再验点位。原因很简单如果极性判断错了你会看到 34 号脚“一直有电压”第一反应是“点位接错了”或者“地址不对”于是开始动线、改地址越改越乱。正确的做法是先确认“这个脚在动作时电压确实是变化的”锁定变化再去确认“变化的是不是我要的那一路”。把两件事混在一起查会让你同时怀疑接线、映射、极性三个变量这是现场最容易失控的局面。断电状态也值得单独确认一次。系统上电初始化的瞬间输出映像寄存器会先整体清零再按程序装载某些输出点在毫秒级里会出现一次短暂的通断。如果你的采集端在开机后立刻采信很容易收到一条假的“运行中”或者一次假的计数。这不是映射问题但会被误判成映射问题所以验证时把“上电头几秒”单独看一遍能省掉后面很多冤枉路。3. COM 接 24V一条回路决定了你的电平是反的3.1 电流从哪来、往哪走采集盒的每个输入通道内部基本都是一颗光耦COM 端是这些光耦的公共端。定义里明确写“COM 端接 24V 电源接口”意思就是所有光耦的阳极被统一拴在 24V 上。光耦要发光阴极那一侧——也就是接到 34 号脚的那根线——必须被拉到接近 0V电流才有通路。完整回路是24V 电源 → 采集盒 COM → 光耦发光二极管 → 通道输入端子 → 62A 的 34 号脚 → 机床内部的输出三极管 → 机床侧 0V。这条回路一旦画出来结论就固定了机床那一路输出必须是“导通时把端子拉到 0V”的类型也就是常说的漏型输出。因为只有它导通时把 34 号脚接到 0V采集盒的光耦才会亮。反过来如果机床是导通时输出 24V 的源型那么端子对 COM 同电位光耦两端没有压差无论机床怎么动作采集端读到的永远是“断开”。这不是灵敏度问题是物理上就没有电流。所以那句“COM 接 24V”不是一句接线备注它是整个采集链的电平契约。它决定了你在软件里看到的 1 到底代表机床在运行还是没运行也决定了取反逻辑写在哪一层。3.2 三步判断极性别靠猜现场判断极性我一般走三步每一步都有明确的观测对象不靠经验拍脑袋。第一步断电测阻值特征。万用表电阻档一支表笔固定在 0V另一支点 34 号脚如果读到一个明显的二极管压降特征几百欧到几千欧且换表笔后读数差异大说明这条路上有半导体结基本可以确认是输出三极管而不是机械触点。第二步上电但机床空闲测对 0V 的电压。读数接近 24V说明空闲状态端子被上拉到高导通时大概率拉低读数接近 0V说明空闲是低导通时才给高。这一步就把极性定了大半。第三步让机床真正跑起来再测一次同一个脚。看电压是否翻转、翻转方向是否和第二步的推断一致。三步走完极性就没有悬念了不需要去猜梯形图怎么写的。代码侧的对应处理是这样def normalize(raw_bits: int, mask: int, active_level: int) - bool: raw_bits: 采集盒读回的原始字节 mask: 取位掩码例如 Y2.5 对应 1 5 active_level: 0 表示低电平有效共阳接法 漏型输出 返回: True 表示该信号当前“有效” raw 1 if (raw_bits mask) else 0 return raw ! active_level if active_level in (0, 1) else bool(raw)mask用移位而不是写死的十进制数是为了让“第几位”这件事在代码里可见。active_level用一个常量而不是在每个判断里写not好处是换机床只改一处。这段逻辑看着简单但把它放在统一的入口函数里比散落在十几个地方各写一遍if not x要安全得多——踩过的坑是某处漏了一个取反结果报警和运行的含义整体对调排查了半天才发现是两行代码的差异。3.3 共阳接法绕不开的那个“共地”这里有个必须提前想清楚的问题共阳接法意味着信号电流要回到 24V 电源的负极也就是 0V。采集盒的 0V 和机床输出侧的 0V 必须是同一路否则回路不闭合光耦照样不亮。很多采集盒标称“光耦隔离”容易让人误以为两侧电源可以完全独立但那是针对差分输入或者双端输入的结构定义里这种 COM 接 24V 的单端共阳接法物理上就要求共 0V。共 0V 带来的副作用是干扰路径也连通了。机床侧接触器吸合、主轴启停、变频器工作都会在 0V 线上叠加尖峰。这些尖峰进了采集盒表现就是报警通道偶尔闪一下、计数值莫名多一个。所以共地这件事的正确做法不是“不共”而是“共得干净”24V 与动力线分开走槽、信号线用屏蔽双绞并且只在采集盒一侧接地、感性负载线圈两端加续流二极管。这些不是可选项是让那三根线长期稳定的前提。如果极性确实对不上比如机床是源型输出那解决办法是把 COM 从 24V 改接到 0V同时确认采集盒支持这种接法。改之前务必断电核对因为把 24V 和 0V 直接短在一起轻则烧采集盒保险重则连机床侧的输出三极管一起带走。4. 三个信号的时序语义运行、计数、报警根本不是一类东西4.1 运行是电平量怕的是毛刺不是速度运行信号在整个加工循环里保持有效你用几秒一次的频率去读都不会漏。它的风险不在采样率而在于你对“有效”的语义假设。同一个 980TD 系列不同机床厂写梯形图的方式可能不同有的在循环启动后就置位暂停、单段、换刀过程中一直保持有的只在切削进给时有效快速定位时就撤销。这两种做法都能叫“运行”但采到的数据含义完全不同。所以拿到一台新机床建议先做一次语义标定手动走一段慢速进给、再走一段快速定位、再按暂停把运行信号的变化点和实际动作一一对上记下它在哪些阶段是有效的。这个动作花十分钟能避免后面几个月的数据被错误解读。另一个必须处理的是上电毛刺。系统初始化时输出映像寄存器会整体刷新某些中间继电器也会抖动34 号脚可能在几十毫秒内出现一次假的有效电平。采集端如果直接采信就会凭空多出一条“运行记录”。常见的实现思路是加一个启动屏蔽窗口比如上电后前 3 秒不产生任何状态事件或者要求运行信号连续保持 500ms 以上才确认为真。4.2 计数是脉冲量这是一场采样周期和脉宽的赛跑计数信号和运行信号完全不是一类。它是在每个工件完成、或者每个循环结束时发一个脉冲宽度可能只有一个 PLC 扫描周期几毫秒到几十毫秒。如果你的采集端是每秒轮询一次寄存器那么丢失计数就是必然事件不是偶发故障。最让人抓狂的地方在于它的表现是“有时候准有时候不准”。因为脉冲什么时候来、你的轮询什么时候到两者的相位关系是随机的。跑一百个工件可能丢三个也可能一个不丢看起来像玄学本质是采样定理在起作用采样周期必须小于脉冲宽度否则必然漏掉。工程上有两条路。一是把采样周期压到脉宽的十分之一以下比如 100ms 甚至 50ms 轮询代价是通讯负载上升。二是用采集盒的硬件计数或者输入捕获功能让硬件自己数边沿软件只负责定期读计数值这也是我更推荐的做法因为它把“不漏”这件事从软件时序问题变成了硬件保证。即便采样够快边沿检测也不能省。只比较“当前电平”和“上一次电平”从低到高算一次才能保证一个脉冲只计一次class EdgeCounter: def __init__(self, active_level0, min_pulse_ms20, poll_ms50): self.active_level active_level self.min_pulse_ms min_pulse_ms # 短于这个宽度的抖动直接丢弃 self.poll_ms poll_ms self.prev False self.count 0 self.last_edge_ts 0 def feed(self, raw_bit: int, ts_ms: int): cur (raw_bit ! self.active_level) # 归一化成“有效True” if cur and not self.prev: # 上升沿 if ts_ms - self.last_edge_ts self.min_pulse_ms: self.count 1 self.last_edge_ts ts_ms self.prev curmin_pulse_ms是去抖窗口比它窄的“边沿”一律当噪声。poll_ms必须明显小于最小脉宽否则再好的去抖也救不回丢掉的脉冲。last_edge_ts除了去抖还顺手记录了时间戳后面算节拍、算设备利用率都要用它。这三个参数不是拍出来的是拿示波器或者高速采样实测出脉宽之后再定的。4.3 报警可能是锁存的别只看实时电平报警信号看着最像运行信号其实差别很大。运行是“过程状态”报警是“事件状态”。问题在于 36 号脚输出的到底是不是锁存后的报警有的机床厂让它在报警存续期间保持有效报警复位后自动撤销有的做成一旦触发就保持直到人工按复位。前者你实时读电平就够了后者如果你只在报警消失后才去读就会完全错过这次故障。稳妥的做法是在采集侧自己加一层锁存记录报警首次触发的时间戳、持续时间、以及在这段时间里运行信号和计数值的状态形成一个最小的事件快照。这样即便机床侧不锁存你这边也有后悔药。表结构不用复杂一张事件表加一张当前状态表就够字段含义取值示例alarm_start_ts报警首次有效的时间毫秒时间戳alarm_end_ts报警撤销时间未撤销为空毫秒时间戳run_state_at_start报警发生时是否在运行0 / 1count_at_start报警发生时的累计计数整数source_channel来源通道36 号脚16run_state_at_start和count_at_start这两个字段看着是冗余实际是排障时最有用的信息报警发生时到底在不在加工、已经做了多少个工件这两条一摆出来很多“偶发报警”立刻能定位到具体工序。4.4 把三路合成一个状态机三路信号最终要合成一个说得清的状态。我习惯用三个状态加一个独立累加器空闲、运行、报警计数独立走。状态优先级是报警高于运行高于空闲因为报警期间即使运行信号还有效对外也应该报故障。这个状态机不需要写得很重十几行就够关键是每次状态迁移都要带时间戳并且落盘。采集这类信号最怕的不是采不到是采到了但说不清“什么时候变成这样的”。带时间戳的状态迁移序列比任何实时曲线都好用。5. 常见问题排查五条现场踩坑记录5.1 线接好了通道指示灯就是不亮现象34 号脚接到采集盒通道上机床运行采集盒对应的指示灯不亮软件里读到的也一直是无效。原因最常见的是 COM 端没接 24V或者接成了 0V。定义里那句备注是整条回路的起点漏掉它后面所有的接线都是空接。第二常见的是采集盒电源没上或者保险断了指示灯不亮但接线看起来完全正确。解决先测 COM 端对 0V 是否有 24V没有就先解决供电再量通道端子对 0V 的电压机床运行时应该接近 0V。两步都正常但灯不亮才去怀疑通道本身坏了或者映射表错了。5.2 信号一直有效从来不翻转现象无论机床在不在加工采集端显示运行信号恒为有效计数也一直不变。原因极性和机床输出类型不匹配。采集盒共阳接法要求机床是漏型输出如果机床是源型端子对 COM 同电位光耦常亮或常灭读出来就是一个不动的值。另一种可能是端子接错了一位34 接到了 33 或者 35读到的其实是另一路信号。解决断电改接前先用万用表按第 3 章的三步走一遍确认端子电压是否随动作翻转。如果电压确实翻转而软件不翻转问题在采集盒侧如果电压根本不翻转问题在极性或点位。5.3 计数值偶尔多一个或少一个现象跑一百个工件采集端统计出来 98 或 101差值不固定。原因少计数通常是采样周期大于脉冲宽度。多计数通常是触点抖动或者干扰把一个脉冲读成了多个。这两种现象方向相反但都表现为“计数不准”容易混在一起查。解决先用高速采样或示波器实测脉宽再定采样周期和去抖窗口。采样周期要明显小于脉宽去抖窗口要小于脉宽但要大于抖动时间。这两个参数的取值区间其实很窄必须实测靠拍出来的值迟早出事。5.4 一开机就显示“运行中”现象机床刚上电还没按启动采集端已经记了一条运行记录。原因上电瞬间输出映像寄存器刷新、中间继电器吸合抖动34 号脚上出现了毫秒级的假有效电平。采集端如果上电就开始采信第一个事件一定是假的。解决加启动屏蔽窗口上电后前几秒不产生状态事件同时要求运行信号连续保持一定时间才确认。这两条一起上比只做其中一条稳。5.5 主轴启停时报警信号闪一下现象机床正常加工每次主轴启动或者接触器动作报警通道偶尔出现一次短暂有效但机床上并没有报警显示。原因干扰。信号线和动力线同槽走线感性负载断电时的反电动势耦合到 24V 回路里采集盒看到的是一个窄脉冲。共 0V 的接法让这条耦合路径更通畅。解决信号线与动力线分开走线屏蔽层单端接地接触器线圈两端加续流二极管采集侧再加一道软件去抖。电气侧治本软件侧兜底两边都做才稳。6. 设计取舍这套定义够用但你必须知道它哪里不够这套三线定义最值得琢磨的地方是它选择用三个独立的物理点表达三个正交语义而不是用一根线传一串编码。代价是占用三个输出点和一个接插件脚位收益是每一路都独立、可单独验证、互不影响而且采集端不需要任何解析逻辑——读位就是读状态。对于一台数控车床对外暴露的状态需求来说这个取舍是划算的运行、计数、报警恰好构成一个最小的可观测集合再多就是浪费再少就说不清设备在干什么。第二个取舍在电平上。COM 统一接 24V把采集盒做成共阳输入迫使机床侧输出走漏型好处是公共端只有一根线、接线简单、抗干扰时正电源作为参考电位更稳坏处是它绑死了机床的输出类型遇到源型机床必须改接。这是典型的“用兼容性换简洁性”也是为什么定义里要专门写一句备注——那句话是在提醒你这套接法的前提条件在哪。这套定义真正缺的东西也很清楚没有握手、没有断线检测、没有时间同步。采集端无法区分“信号有效”和“线断了被上拉成有效”只能靠“某个信号长时间不变化”来间接怀疑。所以如果要在这套基础上做上位系统有三件事必须自己补上给每一路加变化检测和心跳超过阈值不变就报可疑给每条事件打本地时间戳并且定期和上位机对时把原始电平和归一化后的语义分开存方便回头核对是不是取反错了。我最早做这块的时候觉得三个端子接上就完事了结果在一台机床前耗了整整一个下午最后发现是 COM 接错到了 0V。从那以后我每次动手接线之前都强制走一遍“先看 COM 对 0V 的电压、再看端子随动作是否翻转、最后才看软件读到的值”这个顺序再急也不跳步。顺序对了问题基本都出在第一层顺序乱了三层会一起骗你。希望帮到你。本文还有配套的精品资源点击获取