PLC宽度对比从入门到精通:物理尺寸与脉冲宽度测量实战
2026/9/15 5:29:10 网站建设 项目流程

干过自动化现场的人,基本都遇到过这种需求:一条产线跑着跑着,客户要求把“宽度”也纳入自动检测,或者让你用PLC测一个脉冲信号到底“宽”了多少。“宽度对比(PLC)”这个词,在工程里其实被说得很宽泛,它既可能是产品物理尺寸的宽度测量对比,也可能是脉冲时间宽度的测量与判断。这两类需求我都实际做过,踩过的坑也不少,今天一次性把硬件选型、测量原理、西门子和三菱的实操写法,以及调试时那些教科书上不会写的细节,都摊开讲清楚。

1. 先把“宽度对比”这个词掰开:物理宽度和时间宽度两种场景

1.1 物理宽度检测:产线上最常见的尺寸把关

物理宽度检测,说白了就是让PLC代替卡尺,在线测量产品某个方向的尺寸,再把测到的值和标准值做比较。最常见的是纸箱、板材、型材、管材这类有固定截面的产品,生产线不停机,产品连续通过,靠人工抽检根本做不到全检,漏检一次就可能让一整批不合格品流出去。

这类需求的典型构成是:传感器(激光测距仪、超声波位移传感器、光电对射开关组)+ PLC模拟量输入模块或高速计数器 + 一个比较判断逻辑。传感器把物理距离或遮挡转换成模拟量信号(4-20mA或0-10V),PLC读取后换算成实际宽度值,再和设定的上下限比较,输出“合格/超宽/偏窄”三档结果,超差时联动剔除气缸或者声光报警。

还有一个变种是透光遮挡式,用一排光电开关按固定间距排列,产品通过时遮住几个光点,PLC根据“被遮住的光点数量和间距”推算宽度。这种方案成本低、响应快,但分辨率受光电间距限制,适合精度要求不高的粗检。

1.2 脉冲宽度测量:信号特性的时间维度

另一类“宽度对比”,比的是时间——一个脉冲信号高电平持续了多长时间。这个需求在设备状态监测、执行机构到位检测、通讯波形判断里都很常见。比如电磁阀的动作响应时间、气缸到位信号的持续时间、伺服使能信号的脉冲长度、外部控制器发来的启动脉冲是否合规等。

脉冲宽度测量要解决的核心问题是:高电平从什么时候开始、什么时候结束,中间持续了多少时间。这里涉及的已经不是模拟量转换,而是PLC对时间基准的捕捉能力。用普通扫描周期去读输入点,误差可能达到几十毫秒,根本不能用;必须靠高速计数器、输入中断、或者像S7-1200那样用硬件时基配合计数通道来实现。

1.3 两种场景的底层逻辑差异

物理宽度是“空间宽度”,脉冲宽度是“时间宽度”,两者唯一的共同点是都有一个“测量值”和“标准值”做比较。但处理思路完全不同:

对比项物理宽度检测脉冲宽度测量
信号类型模拟量(电流/电压)或数字量组合数字量方波信号
核心硬件模拟量输入模块 / 开关组高速计数器 / 输入中断
量纲mm、cmms、μs
精度瓶颈传感器线性度、安装角度时基频率、PLC响应速度
主要误差源标定误差、温度漂移扫描周期、中断延迟、抖动

搞明白自己面对的是哪种“宽度”,再动手选型。经常有朋友上来就问“PLC能不能做宽度对比”,我一般先反问:你要比的是产品宽度还是脉冲宽度?这两个东西的玩法和硬件配置完全不一样。

2. 硬件怎么配:传感器、模拟量通道和高速计数器的选择

2.1 物理宽度检测的传感器选型

物理宽度检测,传感器是重中之重。精度要求高、测量范围大的场合,优先选激光位移传感器,模拟量输出,量程、线性度都能做到很好;中等精度场合用超声波位移传感器,成本比激光低不少,但要注意被测物材质和表面状态对超声波反射的影响;如果只是做合格判定,不需要连续数值,那就直接上对射式光电开关阵列。

传感器输出信号的选择也讲究。4-20mA电流环抗干扰能力比0-10V电压信号强,在电柜里有变频器、伺服驱动器这些干扰源时,尽量选电流输出型。模拟量输入模块的通道数量也要提前算好,别忽略备用通道,现场加了传感器却找不到空余通道的情况我遇到过太多次。

2.2 脉冲宽度测量的硬件基础

脉冲宽度测量,核心就是高速计数器。西门子S7-1200自带HSC高速计数通道,三菱FX3U有C235系列的硬件高速计数器,这些通道可以脱离扫描周期独立计数,配合外部时基信号就能精确测量时间宽度。

额外说一个关键点:PLC输入端子的硬件滤波时间。很多PLC输入端默认带RC滤波,时间常数从0.1ms到几毫秒不等,这是为了滤除触点抖动和干扰。但对于脉宽测量,滤波时间过大会把窄脉冲“吃掉”或者让边沿严重延迟,导致测量结果偏大或偏小。S7-1200可以在模块属性里调整输入滤波时间,三菱部分型号需要在特殊数据寄存器或参数里设置。这个细节最容易忽略,也是精度问题的常见根源。

2.3 一个选型要点对照表

场景推荐方案分辨率/精度注意事项
大尺寸(>300mm)高精度宽度检测激光位移传感器+模拟量模块0.01-0.1mm注意安装距离和测量光斑
中尺寸中等精度超声波位移传感器+模拟量模块0.1-1mm被测物表面需能反射声波
粗检/到位检测光电开关阵列+数字量输入取决于间距响应快、成本低
毫秒级脉宽测量输入中断+高速定时器1ms三菱T246/西门子OB40
微秒级脉宽测量高速计数器+外部时基取决于时基频率需要用外部固定频率脉冲做时基

2.4 接线时容易忽略的两个问题

第一个是模拟量信号的屏蔽和接地。宽度检测传感器信号线必须用屏蔽双绞线,屏蔽层单端接地,千万别把屏蔽层在PLC端和传感器端都接地,形成地环路后干扰反而更大。曾经遇到过现场模拟量信号波动±0.5%,排查两天最后发现就是屏蔽层两端接地造成的。

第二个是脉冲信号的电平匹配。如果外部设备输出的是NPN开集电极信号,而PLC高速计数器输入是PNP类型(或者正好相反),脉冲根本数不进去或者计数异常。选型前一定确认传感器和PLC输入极性兼容。至于PLC输出晶体管区分NPN和PNP的问题,在接线前也要一并确认,这直接关系到驱动继电器和中间继电器的方式。

3. 测量原理的取舍:采样、计时与计数的精度上限

3.1 模拟量瞬时值法:逻辑最简单,但动态响应要当心

物理宽度检测的常规思路是:模拟量模块周期性刷新通道值,PLC在OB1里读取当前值,换算成宽度,再做比较。逻辑确实简单,但模拟量输入模块的转换周期通常有几毫秒到几十毫秒,如果产品在生产线上快速移动,传感器扫描到的“宽度”可能已经不是产品真正的宽度,而是某个瞬间的弦长或者位置偏差后的虚假读数。

这种情况下,不能让PLC在OB1里“逮到什么算什么”,而是要用传感器的峰值保持功能,或者PLC里自己做最大值采样——在产品通过期间,连续读取多个采样值,取最大值作为实际宽度,再进行对比判断。这个“取最大值”的逻辑我在后面完整案例里会展开。

3.2 定时器测宽:最朴素,但被扫描周期卡脖子

脉冲宽度测量最直觉的做法是用定时器:输入点变高时启动定时,变低时读取定时器当前值,差值就是脉宽。这个思路本身没错,但普通定时器是跟着扫描周期走的,一个扫描周期可能10ms、20ms,定时器值的刷新也是这个节奏,所以测量精度最高也就是一个扫描周期。如果你的PLC扫描周期是15ms,那脉宽测量结果就有±15ms的误差,对几十毫秒级别的脉冲来说基本没法用。

要突破扫描周期限制,就得靠“中断”和“硬件计数器”。三菱用输入中断+高速定时器,西门子用硬件中断OB40+系统时间戳,这样测量动作由信号边沿直接触发,不依赖OB1的循环扫描,精度才能上去。

3.3 高速计数器法:把计数器当作“时间尺子”

高速计数器的本质是一个不受扫描周期影响的硬件计数器。如果给计数器输入一个已知频率的时基脉冲(比如10kHz方波),再用被测信号作为计数器门控——高电平期间允许计数,低电平期间停止计数——那么计数器累加的数字就是高电平持续期间经过了多少个时基脉冲,用这个数字除以时基频率,就是高电平的持续时间。

这个方案的精度不再取决于扫描周期,而是取决于时基频率。10kHz时基分辨率0.1ms,100kHz时基分辨率0.01ms。我在S7-1200上常用的做法是:用PLC自带的PWM输出口产生一个固定频率的方波,输出之后在外部短接到高速计数器输入,再用被测信号作为HSC的Gate门控信号,这样不依赖外部仪器就能实现微秒级脉宽测量。这个土办法成本为零,在现场测试台上特别好使。

3.4 误差到底从哪来:三点必须同时控制住

一是输入滤波时间。输入端RC滤波会滞后边沿,上升沿被延迟,下降沿也可能被延迟,如果两个边沿延迟不一致,测出来的脉宽就偏差了。所以测脉宽时,输入滤波必须调到最小允许值。

二是传感器或外部设备的响应时间。光电开关、接近开关的响应时间从几微秒到几毫秒都有,响应时间越慢,边沿越“钝”,测量结果越不可靠。选择信号源器件时,响应时间必须小于你允许的误差。

三是时基稳定性。如果时基脉冲来自PLC的PWM输出,PWM的频率是CPU硬件生成的,稳定性通常很好;如果时基来自外部信号发生器,要注意信号发生器自身精度。别到时基本身就是歪的,测量结果再精确也白搭。

4. S7-1200实战:用PWM时基加HSC外部门测脉宽并做对比输出

4.1 组态准备:HSC和PWM怎么配

S7-1200这一套我实测下来最稳定。先做硬件组态:

  1. 在设备组态里选中CPU,进入属性,找到“高速计数器(HSC)”,启用HSC1。
  2. 操作模式选择“计数”,计数输入选择I0.0(不同CPU对应输入点不同)。
  3. 启用Gate功能,选择“外部门控”,Gate输入选择I0.1,高电平有效。
  4. 计数方向设为增计数。
  5. 在数字量输入属性里,把I0.0和I0.1的输入滤波时间调到最小(比如0.1μs,具体看模块支持)。
  6. 启用某个PWM输出通道(比如Q0.0),配置为PWM模式,频率设为10kHz或100kHz,占空比50%。

接着在程序里做两件事:调用CTRL_PWM指令启动PWM输出,让Q0.0持续输出方波;再调用CTRL_HSC指令使能HSC1。外部接线也很简单:Q0.0用一根短导线接到I0.0,被测信号接到I0.1。

4.2 测量的程序逻辑:外部门控加计数值读取

S7-1200的HSC在外部Gate为高时开始对I0.0上的时基脉冲计数,Gate变低后停止计数,计数值保持住,直到下次Gate再次变高才清零重计(这个行为可以在组态里设置)。

所以OB1里只需要做两件事:周期读取HSC1当前值;检测到I0.1下降沿后,把当前计数值锁存到结果变量里。下面是一段SCL示意代码:

// OB1中循环执行 #PWM_Enable := TRUE; // 确保PWM时基输出已启动 #HSC_Enable := TRUE; // 确保HSC1已使能 // 读取HSC1当前计数值 "CTRL_HSC_DB".CV := 0; "CTRL_HSC_DB".HSC := 1; "CTRL_HSC_DB".EN := TRUE; "CTRL_HSC_DB"(); // 调用CTRL_HSC,CV输出当前值 #ActualCount := "CTRL_HSC_DB".CV; // 检测被测信号I0.1下降沿 #R_TRIG_Signal(CLK := "Input_Signal", Q => #FallingEdge); IF #FallingEdge THEN #MeasuredCount := #ActualCount; // 锁存Gate关闭时的计数值 // 换算脉宽:计数值 * 时基周期 // 时基频率10kHz,周期0.0001s,计数值100就代表10ms #MeasuredWidth := INT_TO_REAL(#MeasuredCount) * 0.0001; END_IF;

这段代码里,我用一个上升沿检测器R_TRIG来识别“被测信号从高变低”的瞬间。实际上如果HSC的Gate正好用I0.1,Gate低电平后计数值已经冻结,所以下降沿时读取的计数值就是完整高电平期间的时基脉冲数。换算公式:

脉宽(秒) = 计数值 ÷ 时基频率(Hz)

10kHz时基下,计数值500就代表50ms脉宽;100kHz时基下,计数值5000代表50ms脉宽,分辨率提高10倍。

4.3 宽度对比和结果输出

有了脉宽数值,剩下的就是对比判断。假设工艺要求高电平持续时间为20ms到80ms之间算合格,代码逻辑非常直接:

#Width_Min := 0.020; // 最小脉宽20ms #Width_Max := 0.080; // 最大脉宽80ms IF (#MeasuredWidth >= #Width_Min) AND (#MeasuredWidth <= #Width_Max) THEN #Width_OK := TRUE; "Q_WidthOK" := TRUE; // 输出合格信号 "Q_WidthNG" := FALSE; ELSE #Width_OK := FALSE; "Q_WidthOK" := FALSE; "Q_WidthNG" := TRUE; // 输出不合格信号 END_IF;

这个“合格区间”的上下限,推荐用HMI或触摸屏上的变量来设置,不要写死在程序里。现场工艺经常调整,比如供货商换了一批电磁阀,动作时间从50ms变成了30ms,如果上下限写死,改一次程序就得停机下载一次,非常耽误事。把上下限做成HMI变量后,工艺人员现场就能调。

4.4 实测中遇到的几个坑

第一个坑是时基信号串扰。Q0.0输出的PWM方波如果和被测信号线在同一个线槽里并行走,方波边沿可能通过分布电容耦合到被测信号上,导致HSC多计数几个脉冲。解决办法是时基信号线用屏蔽线,且远离被测信号线。

第二个坑是Gate电平的毛刺。如果被测信号本身有抖动,Gate会在高和低之间快速切换,计数器会累加出一些子虚乌有的宽度的脉冲。解决办法是给被测信号源加上拉电阻或RC滤波(但是注意RC会影响边沿,要权衡),或者从源头上解决触点抖动问题。

第三个坑是CTRL_HSC使能顺序。必须先使能HSC,再让Gate输入生效。如果使能前Gate已经是高电平,HSC可能不按预期启动计数,要复位一次或者调整组态里的初始化行为。我习惯在程序启动的第一个扫描周期就把HSC使能,然后等100ms再打开PWM输出,让所有硬件状态稳定下来。

5. 三菱FX系列实战:输入中断加高速定时器实现脉宽对比

5.1 三菱的硬件机制:中断指针和高速定时器

三菱FX3U系列做脉宽测量,没有S7-1200那么方便的“外部Gate”功能,但可以用输入中断加高速定时器组合实现,优点是接线少,不需要外部时基源,缺点是精度受限于定时器时基(通常是1ms)。

FX3U的X0到X5支持输入中断,在GX Works2里配置中断指针时,可以分别选择某个输入点的上升沿中断和下降沿中断。此外,FX3U有T246到T249这几个高速累计定时器,时基为1ms,累计值可以在中断里读取和复位。这两个功能组合起来,正好构成一个脉宽测量链:上升沿启动计时,下降沿停止并读取。

5.2 中断程序实现:上升沿启动、下降沿读取

假设被测信号接到X0,我们要测的是X0高电平持续的时间,结果存放在D0(毫秒),不合格信号输出到Y0。梯形图示意如下:

// 上升沿中断子程序(在GX Works2中选择X0的上升沿中断指针,例如I001) RST T246 // 复位高速定时器 OUT T246 K1000 // 启动1ms累计定时器,预置1000ms(防溢出) // 注意:K1000只是上限,如果脉宽超过1000ms会停止累加,需按场景调整 // 下降沿中断子程序(选择X0的下降沿中断指针,例如I101) MOV T246 D0 // 把定时器当前值移动到D0,单位ms RST T246 // 复位定时器

这个方案里,定时器从X0上升沿开始累加,每隔1ms加1,到X0下降沿时停止并读值。D0里的值就是高电平的毫秒数。逻辑非常干净,不受扫描周期影响,因为定时器的启动和停止都由硬件中断完成。

然后是宽度对比判断,在主程序OB1里就比较D0和上下限值,输出合格信号。这部分和上一节的对比逻辑一样,只是比较的数从“计数值”换成了“毫秒值”。

5.3 当心T246的溢出和启动扫描周期

T246是累计型定时器,预置值决定它能累加到的上限。如果预置K1000,最多计1000ms,脉宽超过1秒时,定时器会停在1000不再增加,这时D0读到的就是“满量程”,要区分是真实的1000ms脉宽还是超过了量程。建议把预置值设得比实际可能的最大脉宽大20%以上,并在程序里对满量程值做特殊处理,比如判为“超宽不合格”。

另外,T246的读取要放在下降沿中断里,不要放在主程序里。因为主程序扫描有周期,如果下降沿发生在两次扫描之间,主程序读到定时器值的时间点大概率已经晚了几个毫秒,精度就没了。数据在中断里第一时间锁存,主程序只负责比较,这是三菱脉宽测量程序的标准做法。

5.4 和西门子方案的精度差异怎么选

项目三菱FX3U中断+定时器S7-1200 PWM+HSC
精度1ms0.01-0.1ms
接线复杂度简单(无需外部时基)需要PWM输出短接到HSC输入
适用场景毫秒级脉宽、气缸到位检测微秒级脉宽、精确时间测量
程序复杂度

实际项目中,如果只是判断一个电磁阀得电时间有没有超过100ms,三菱方案绰绰有余;如果要做编码器信号或通讯波形的细微分析,那就必须上S7-1200的HSC方案。选型不是越贵越好,而是匹配需求精度。

6. 模拟量方案完整案例:产品宽度在线检测与剔除逻辑

6.1 案例需求设定

先设定一个具体场景:一条纸箱生产线,产品宽度标准值150mm,允许偏差±2mm,产线速度每分钟120个,要求在线全检,超差产品自动剔除,触摸屏上实时显示测量值和统计数量。

我用的方案是激光位移传感器(量程0-300mm,输出4-20mA)接到S7-1200的模拟量输入模块,产品通过传感器正下方时,PLC连续采样多个值,取最大值作为本次产品的实际宽度,再做偏差判断,不合格时触发剔除气缸。

为什么取最大值而不是平均值?因为纸箱在流水线上运行时,传感器扫描位置可能不是纸箱正中,边缘进入测量区域和离开测量区域时,测到的宽度会偏小。只有传感器正好对准纸箱最宽处时,读数才是真实的宽度。连续采样取最大值,相当于让PLC自动“找到”最宽的那个瞬间,这是市面上大多数宽度检测仪的通用做法。

6.2 模拟量标定:INT到REAL的转换与分段偏移量

模拟量模块读进来的原始值是一个整数,西门子一般是0到27648对应4-20mA。这个值必须先转成REAL,再做归一化和缩放,才能得到毫米值。典型代码:

// 读取原始值(整数) #RawValue := "AI_Width"; // 模拟量通道地址,例如IW64,INT类型 // INT转REAL #RawReal := INT_TO_REAL(#RawValue); // 归一化:4-20mA对应0.0到1.0 // 零点对应5530(4mA),满量程对应27648(20mA) #NormValue := (#RawReal - 5530.0) / (27648.0 - 5530.0); #NormValue := MAX(MIN(#NormValue, 1.0), 0.0); // 限幅 // 缩放为实际宽度:0-300mm #Width_Value := #NormValue * 300.0;

这里有个很多新手会踩的坑:直接用整数做缩放运算,结果丢了小数不说,还容易溢出。必须先把INT转成REAL再做运算。

再说分段偏移量。如果传感器的线性度不够好,或者安装位置有偏差,整个量程只有一个缩放系数,误差很可能超差。我常用的办法是分段标定:把量程分成几段,每段用独立的斜率和偏移量。

// 分段标定示例:0-100mm用K1/B1,100-300mm用K2/B2 IF #Width_Value <= 100.0 THEN #Width_Calibrated := #Width_Value * 1.0 + 0.5; // 第一段系数和偏移 ELSE #Width_Calibrated := #Width_Value * 1.02 - 1.5; // 第二段系数和偏移 END_IF;

“分段偏移量”不是天生的,而是标定时根据实际误差推出的修正量。具体做法:拿几个已知宽度的标准件,分别测一遍,算出每一点的偏差,然后根据偏差趋势决定分几段、每段的系数和偏移。这个工作不能省,标定精度直接决定检测精度。

6.3 连续采样取最大值和剔除逻辑

产品通过期间怎么判断“产品在传感器下方”?一般用对射光电开关,产品挡住光电时,启动采样;光电恢复,停止采样。所以整体逻辑是:

// 当产品到位信号(例如I0.2)为真时,连续读取模拟量并取最大值 IF "Product_Present" THEN #CurrentWidth := #Width_Calibrated; IF #CurrentWidth > #MaxWidth THEN #MaxWidth := #CurrentWidth; END_IF; ELSE // 产品离开,本次测量结束,做判断 #FinalWidth := #MaxWidth; IF (#FinalWidth >= #StdWidth - #Tolerance) AND (#FinalWidth <= #StdWidth + #Tolerance) THEN #Result_OK := TRUE; ELSE #Result_OK := FALSE; END_IF; // 剔除气缸延时动作:这里加一个根据输送速度计算的延时 #Reject_Timer(IN := NOT #Result_OK, PT := #RejectDelay); "Q_Reject" := #Reject_Timer.Q; // 复位最大值,准备下一个产品 #MaxWidth := 0.0; END_IF;

剔除气缸的延时很有讲究。产品从传感器到剔除位的距离是固定的,输送带速度也是基本恒定的,所以剔除信号要在不合格产品刚好到达剔除位时触发。实际操作中要现场测量这个延时,用秒表测一下产品从传感器到剔除位的时间,然后输入到HMI变量里,别在程序里写死。

6.4 触摸屏上显示什么才最实用

触摸屏别只显示“合格/不合格”,操作工真正需要的是:当前测量值、最近100个数据的分布趋势、合格率、剔除计数。尤其那个趋势图,能直观反映产线状态——宽度缓慢漂移往往说明上游设备出了问题,趁早发现能避免大量废品。

我在这个案例里用了“历史数据表”功能,把每次测量的宽度值和时间写入数据块,触摸屏用趋势图控件读取,效果比单纯数字好得多。这个功能不需要额外硬件,就是PLC数据块加触摸屏趋势控件,成本为零。

7. 调试现场最常踩的坑:抖动、干扰、标定与迟滞

7.1 光电信号抖动导致的宽度误判

有一次在现场调试时,产品宽度检测偶尔会把一个合格品判成不合格,而且没有规律。排查了很久,最后用示波器看光电开关的信号,发现产品边缘经过时,光电信号不是干净的跳变,而是有几个毫秒的抖动。这个抖动正好让“产品到位”信号在短时间内反复通断,PLC的采样窗口被切断,最大值采样只采到一半就结束了,算出来的宽度自然偏小。

解决办法分两步。第一步是在传感器端处理:光电开关的灵敏度调低一点,让信号更干净。第二步是在PLC端加滤波:到位信号延时接通、延时断开,也就是软件消抖。延时时间一般5到20ms,既能滤掉抖动,又不会明显影响测量节奏。

7.2 PLC里常用的几种滤波消抖方法

根据场景不同,我常用的消抖方法有四种:

  • 延时确认法:输入信号变化后,必须保持新状态超过设定时间才认为变化有效,适合机械触点和光电信号。
  • 连续采样平均法:模拟量连续读N次,去掉最大最小后取平均,适合模拟量小幅波动。
  • 软件中值滤波:连续读奇数个值,取中间值,适合偶发尖峰干扰。
  • 重复判定法:连续N次扫描都读到相同状态才更新输出,本质是N次确认。

这几种方法我都用过,实际项目里延时确认法最常用,因为简单直观、参数好调。复杂一点的场合,比如变频器干扰严重的现场,就得中值滤波或平均滤波配合延时确认一起用。

7.3 一次历时两天的干扰排查过程

说一个印象很深的案例。一套宽度检测系统,模拟量信号在产线启动后出现周期性波动,幅度大约相当于±1mm,时好时坏。第一天我先怀疑传感器,换了新的,没用;第二天排查接线,重新走屏蔽线、改接地,还是有一点点波动。最后实在没办法,拿手持示波器卡在模拟量模块端子上,发现波动频率和变频器载波频率对上了,确定是变频器干扰。

解决方式不是把干扰彻底消灭,而是降低干扰对测量结果的影响:一是模拟量模块的积分时间调大一点(积分时间越长,对高频干扰抑制越强,但响应变慢);二是程序里对模拟量做了“连续采样取平均”,用5个采样值的平均值做判断;三是把传感器信号线和变频器输出线彻底分开走,拉开距离。三管齐下,波动从±1mm降到了±0.1mm以内。

这个案例的教训是:干扰排查要按“传感器-接线-模块-程序”逐级排除,不要一上来就怀疑程序,也不要在没有数据的情况下瞎猜。记录每次现象、每次改动和时间点,排查效率会高很多。

7.4 迟滞区间:给对比逻辑加一道安全垫

宽度对比判断最容易出现的问题,是测量值在上限附近晃动时,结果一会儿合格一会儿不合格,导致剔除气缸频繁动作,气路损耗大、气缸寿命短。

解决办法不是加大允许公差,而是引入迟滞比较。比如合格上限是152mm,不合格触发值为152mm,但从不合格恢复到合格需要降到151.5mm以下。这样测量值在151.8到152.2之间晃动时,不会频繁跳变,系统稳定得多。

代码实现也简单:

// 迟滞比较:进入不合格状态用高阈值,恢复正常用低阈值 IF #Result_OK THEN // 当前状态是合格,允许偏差窗口正常 IF (#FinalWidth > #Limit_High) OR (#FinalWidth < #Limit_Low) THEN #Result_OK := FALSE; END_IF; ELSE // 当前状态是不合格,需要回到“恢复阈值”内才转回合格 IF (#FinalWidth <= #Recover_High) AND (#FinalWidth >= #Recover_Low) THEN #Result_OK := TRUE; END_IF; END_IF;

迟滞量一般取允许公差的10%到20%。别设太大,太大了会把真正合格的产品卡在恢复区外面,反而误判。

宽度对比这个功能,说到底就是一个“测准”加“比准”的过程。物理宽度检测的难点在标定和动态采样,脉冲宽度测量的难点在时基和中断响应,而两类场景共同的难点都是现场的干扰和抖动。把这些基础打牢,无论面对西门子、三菱还是其他品牌PLC,思路都是相通的。

再分享一个最后的小技巧:无论做哪种宽度对比,都建议把测量原始值、处理后的数值、上下限设定值、测量时间戳一起记录到数据块里。调试时翻历史数据,比现场拿万用表量半天高效得多。数据本身就是最可靠的排查工具。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询