资讯详情

西门子PLC生产测速产量统计程序:从原理到工程实现

📅 2026/10/19 6:32:17 | 华诺云谱 👁 阅读
西门子PLC生产测速产量统计程序:从原理到工程实现
很多车间里对“当班产量”的抱怨我听得太多了交接班时统计口径不一致设备停了产量还在跳夜班数据第二天对不上。这事的根源往往不是传感器不准而是PLC程序里的统计逻辑不够扎实。这篇文章就围绕“西门子生产测速产量统计程序”这个项目把从测速原理、信号处理、PLC程序架构到班次切换、故障排查的完整思路拆开讲一遍。| 项目标题 | 西门子生产测速产量统计程序 | | 项目目标 | 记录当班生产量、累计生产总量、生产运行时间等关键参数 | | 适用平台 | 西门子S7-200 SMART / S7-1200 / S7-300/1500 | | 核心思路 | 测速传感器PLC高速通道定时采样积分/累计数据保持与班次切换 |这篇内容适合三类人看一是正在做设备改造的电气工程师二是想自己写产量程序的调试人员三是被车间产量数据折磨的设备主管。我会把原理、公式、程序片段、坑点放在一起说尽量让你看完能直接动手改自己的程序。1. 整体设计思路与方案选型1.1 为什么不是“计数”而是“测速”很多人一听到产量统计第一反应是用接近开关计数每过一个工件传感器给一个脉冲PLC里计数器加一。这个思路在工件体积大、节拍慢、间距稳定的场合确实简单有效。但在连续生产线上比如线缆挤出、钢材轧制、纺织卷绕、包装膜生产这类场景工件是连续运动的根本没有“一个一个”的边界这时候只能用测速法。测速法的核心思想是统计“长度”或“时间”再用长度或时间换算产量。比如一根线缆每米重量固定知道这一班生产了多少米就知道产量。而要知道长度就得知道线速度要知道线速度就得测传动辊的转速或线体运动速度。这就回到了标题里说的“生产测速”。再换一个场景冲压机、注塑机这种单件离散生产的设备测速又是什么意思这时候测的是设备运行节拍比如每分钟冲压次数或每分钟注塑模数。通过高速计数器统计曲轴角度或滑块位置的脉冲再除以固定的时间窗口得到“每分钟多少次”然后乘上有效运行时间就是当班产量。所以不管连续还是离散本质上都需要“测速时间积分”。1.2 方案对比直接计数法与测速积分法的取舍我整理了一个简单的对比表你可以根据现场工况直接选。项目直接计数法测速积分法适用工况离散单件、节拍慢、间距大连续线体、高速运动、长短不一传感器类型漫反射/对射光电、接近开关旋转编码器、接近开关测轮速PLC硬件要求只需普通数字量输入需要高速计数通道或中断处理产量计算方式脉冲次数直接等于件数定时采样速度积分得到长度或节拍数常见误差来源抖动、双脉冲、漏检采样周期波动、打滑、滤波参数不匹配抗干扰能力一般相对更高如果现场本来就要测线速度那测速法就是顺水推舟。如果只是给一个小冲床加个计数器那就没必要复杂化直接计数反而更稳定。这里我要加一句很多设备年轻的时候计数好用用个三五年之后机械磨损、工件抖动变大同一个工件会触发好几次传感器这时候计数法就开始不稳定了反而是测速法——因为你测的是整体速度把所有抖动脉冲当成速度的一部分再通过滤波和算法处理数据反而更平滑。1.3 平台选型西门子系列PLC的各自侧重点标题里写的是“西门子”但西门子PLC型号跨度很大我实际用过S7-200 SMART、S7-1200、S7-300/1500三种平台做这类程序各自特点差别明显S7-200 SMART性价比高小型设备很常用。它自带高速计数器HSC最高计数频率可以到200kHz足够应对常规编码器。但它的定时中断精度一般需要自己用定时器或者中断做采样节拍。如果只做简单的测速和班产量累加这是最省成本的选择。S7-1200支持循环中断OB30默认100ms也有高速计数器HSC配置比200 SMART灵活很多。而且它支持SCL写测速积分和产量累计的逻辑比梯形图轻松很多人机界面还能直接用博途的WinCC组态。S7-300/1500大型线体和多工位设备常用优势在于CPU性能强、支持多个OB、变量管理规范。如果有多台设备需要做集中产量监控或者还要把产量数据送到MES系统选1500比较合适。选平台之前先想清楚设备是不是联网要不要做MES上报现场有没有WinCC如果没有特殊要求用普通触摸屏加S7-1200就已经很顺手了。很多文章倾向于把方案写得很高级但实际车间里稳定好维护比功能花哨重要得多。2. 核心细节解析与实操要点2.1 传感器的选型与安装决定程序的上限程序写得再好传感器信号不靠谱全白搭。测速传感器我首推旋转编码器尤其推荐增量型编码器比如每转600脉冲或1000脉冲。安装位置最好直接连在主动辊轴端不要经过减速机或皮带传动因为打滑会直接造成速度数据偏小产量累计也跟着偏小。现场如果装不了编码器可以用接近开关测一个带齿的测速轮。这种方案要注意齿形和间隙齿太密接近开关响应频率跟不上齿太疏单位时间脉冲少速度分辨率就低。举个例子一根测速轮周长200mm上面做20个齿那么每个齿对应10mm。接近开关响应频率如果是1kHz最高能测的转速对应的脉冲频率就不能超过1kHz否则会丢脉冲。按每转20脉冲算最高转速就是3000r/min这对多数产线都够用了但如果设备转速更高就要换编码器。再提醒一个细节编码器的工作电压。常见的有5V差分、10-30V推挽、24V推挽。西门子PLC的高速计数器输入一般是24V所以优先选24V推挽输出或者互补输出。如果是5V差分信号就要加转换模块否则烧端口就是分分钟的事。2.2 测速计算的数学模型与关键公式不管是什么品牌的PLC测速归根到底是一个公式v (N / P) × C / T其中N一个采样周期内的高速计数器脉冲增量P编码器每转脉冲数C测速轮或辊筒的周长T采样周期举个例子编码器每转600脉冲测速轮周长500mm采样周期1秒采样期内读到的脉冲增量是1200。那么速度就是v (1200 / 600) × 0.5 / 1 1 m/s如果要累计产量长度就把每个采样周期的速度乘以采样周期再累加总长度 v × T1秒钟累加一次总长度就是所有速度的积分。这个思路有点像汽车里程表速度乘以时间就是距离累计下来就是总里程。如果是单件产线公式思想也类似。假设编码器装在曲轴上每转4个脉冲对应一个冲压周期采样周期内脉冲增量除以每周期脉冲数就得到这个采样窗口内的冲压次数再累加就是产量。这里要注意周期可能不是整数比如曲轴转动90度对应一次冲压编码器每转600脉冲那一次冲压就是150个脉冲。用脉冲计数直接除以150余数怎么办我的办法是余数保留到下一个窗口避免反复四舍五入导致的累计误差。2.3 采样周期和滤波参数怎么定采样周期是测速程序最关键的参数。采样周期太短比如1-5ms脉冲增量少速度数据跳得厉害波动大。采样周期太长比如5-10秒响应太慢设备升速降速的时候产量统计滞后而且启停瞬间很容易丢数据。我自己的习惯是PLC类型推荐采样周期说明S7-200 SMART100ms~500ms用定时中断或定时器触发S7-1200100ms用循环中断OB30S7-300/1500100ms~1s用OB35循环中断100ms是一个比较均衡的值高速运动时脉冲增量足够低速时也不会太稀疏。如果设备速度本身很低比如每分钟只能走几米那采样周期可以放宽到1s否则一个窗口里可能只有几个脉冲速度值会一跳一跳。采样得到的是瞬时速度看起来会有波动必须在程序中做滤波。最简单的是一阶低通滤波显示速度 显示速度 (瞬时速度 - 显示速度) × 滤波系数滤波系数取0.1~0.3之间。系数越大跟随越快但越容易波动系数越小曲线越平滑但响应越慢。我一般先取0.2然后根据现场触摸屏上速度显示的实际波动情况调整。但这个滤波系数只用于“显示速度”产量累计一定要用原始瞬时速度不能用滤波后的速度。原因很简单滤波本质上是把数值拉平会让加减速过程中的累计长度偏差。车间里常见的“速度看着很稳但实际产量偏少”就是这类原因造成的。注意产量累计要用未经过滤的原始速度值滤波只放到人机界面显示上。3. 实操过程与核心环节实现3.1 PLC程序整体架构规划拿到一个测速产量统计需求先别急着写指令把架构想清楚。我这边的习惯是把程序分成四块信号采集与速度计算处理高速计数器、采样周期、瞬时速度和滤波速度。产量累计与运行统计累加当班产量、总产量、运行时间、停机时间。班次管理与数据保存交接班切换、数据保持、断电保持、历史记录。人机界面交互显示参数设置、复位操作、密码保护、状态指示。这里面最容易忽略的是“运行时间”。但车间主管往往特别在意运行时间它直接关系到设备利用率。运行时间的统计逻辑很简单当瞬时速度大于某个阈值比如最大速度的5%时认为设备在运行否则认为停机。这个阈值要在触摸屏里做成可调参数因为不同产品的零速状态不一样有些设备低速走料也算正常运行。我见过一个典型错误用“电机接触器反馈”来判断设备是否运行。问题在于设备可能已经开机但工艺没走料或者变频器在运行但机械卡住了这种判断方式会虚报运行时间。用速度阈值判断就准确很多。3.2 高速计数器的配置与初始化以S7-1200为例在博途里组态高速计数器时有几个参数必须注意计数模式选“计数”不是“频率测量”。虽然S7-1200支持频率测量模式但我想在程序里自己掌控采样逻辑所以只用硬件计数频率计算放程序里做。初始计数方向选“加计数”。除非现场工艺要求正反转都算产量否则不启用“方向控制”。参考值/比较值如果要做定长切断可能需要设置比较值触发中断。但单纯统计产量时不需要。输入滤波博途里可以调整数字量输入滤波时间一般是0.1ms~20ms可选。编码器频率高的时候选小的干扰大的场合选大一些。我一般从0.1ms开始试如果计数有明显的异常跳变再逐步加大到0.2ms、0.5ms。初始化时还需要在程序里写一段“启用高速计数器”的逻辑。以S7-1200为例一般用CTRL_HSC_EXT指令或直接调用系统块。核心步骤就是先给高速计数器ID分配好地址然后在启动组织块OB100中调用初始化指令使能硬件计数。S7-200 SMART的初始化略有不同需要往特定的特殊寄存器SMB里写控制字节再执行HSC指令。很多新手在这卡住常见的症状是高速计数器不计数或者一直显示0。记住一个关键点先写控制字节再执行HSC指令顺序反了就启动不了。3.3 测速、产量累计与班次切换的代码逻辑下面给一段S7-1200的SCL风格示例展示核心逻辑。我用SCL而不是梯形图是因为这种带算法和数据处理的逻辑用SCL写起来更清晰而且便于维护。// 定时中断中执行采样周期100ms // HSC1当前值读入 ActPulse : RD_DBL(100); // 读当前计数值这里为伪代码示意 DeltaPulse : ActPulse - LastPulse; LastPulse : ActPulse; IF DeltaPulse 0 THEN // 处理溢出回绕按最大范围修正 DeltaPulse : DeltaPulse 2147483647; END_IF; // 速度计算单位m/s IF EncPulsePerRev 0 THEN InstSpeed : (DeltaPulse / EncPulsePerRev) * WheelCircum / 0.1; END_IF; // 产量累计按长度计单位m IF InstSpeed 0.0 THEN TotalLengthThisShift : TotalLengthThisShift InstSpeed * 0.1; TotalLengthAll : TotalLengthAll InstSpeed * 0.1; END_IF; // 运行时间统计 IF InstSpeed SpeedZeroThreshold THEN RunTimeThisShift : RunTimeThisShift 0.1; ELSE StopTimeThisShift : StopTimeThisShift 0.1; END_IF;这段逻辑里最需要理解的是溢出处理。PLC里的双整数是有范围的计数器从最大值跳回0的时候如果不做修正DeltaPulse会变成一个很大的负数速度会出现一个向下的尖峰产量可能瞬间多算一大截。所以一定要在差值计算后判断是否为负如果为负就加上双整数的最大值。这在循环采样里是标准处理手法但很多教程不会提。再来说班次切换。常见的方案有两种方案一固定时间切换。比如白班是8:00-20:00夜班是20:00-8:00。程序在定时中断里判断当前时间是否到达切换点到达时把“当班产量存入历史记录当班产量归零”。这个逻辑简单但有个问题如果设备在切换时间前停机下一班刚开始时数据是零主管会问“是不是上半夜没干活”。方案二首次启动切换。设备在停机状态下跨过切换时间等下次启动时速度从零变正才执行班次切换。这样只要设备没运行当班数据就一直保留启动后自然开启新一班更符合车间习惯。我的做法是把两种结合到达切换点时先存记录但不立即清零等“当班瞬时速度首次超过阈值”时再清零。这样做不会丢数据也不怕半夜设备没开机导致切换混乱。3.4 断电保持与数据管理产量数据最怕断电丢失。设备断电一天当班产量全没了这是绝对不能接受的。西门子PLC有不同的保持机制数据S7-200 SMARTS7-1200S7-300/1500当班产量变量存储区V区设置保持范围DB块属性勾选“保持”DB块可设置保持累计总产量同上同上同上运行时间同上同上同上传感器参数普通变量普通变量普通变量S7-1200里DB块创建时勾选“掉电保持”这个操作要在组态里做不是写代码能实现的。S7-200 SMART需要在系统块里设置保持范围默认只有V区一部分是断电保存的你需要根据程序使用的区段手动扩大保持范围这个坑我踩过好几次。另外累计总产量这种只增不减的数据我建议写成双整数型或实数型。如果做设备维修保养需要清零总产量千万别在触摸屏上直接做个不带密码的按钮。我见过的做法是累计总产量清零设置成三级权限操作员没有班组长也没有只有设备工程师和管理员有。当班产量清零则放给操作员权限但清零时要做一次确认弹窗同时自动记录清零时刻的累计值到历史表里防止“产量不见了”扯皮。4. 常见问题与排查技巧实录4.1 产量数据异常场景速查表下面这张表是这几年在多个现场遇到的问题整理出来的。每个问题都对应一个明确的排查思路。故障现象可能原因排查顺序与解决动作测速数值剧烈跳动采样周期太短、滤波系数太小、编码器接线受干扰先看高速计数器的当前值是否跳再看接线是否双绞屏蔽最后调采样周期产量偏大传感器抖动产生多余脉冲溢出未做修正检查机械振动对编码器的影响检查差值是否为负的容错逻辑产量偏小编码器打滑、采样周期内丢脉冲、阈值判断过高检查联轴器或测速轮压紧程度降低零速阈值断电后数据清零保持区配置不对检查PLC保持范围是否覆盖产量变量S7-1200检查DB块保持属性班次切换后数据丢失切换时间点判断错误或切换后清零太早检查实时时钟是否准确改用“启动时切换”逻辑高速计数器不计数初始化顺序错误、输入点地址不对、滤波时间太长重新核对初始化指令顺序和硬件地址缩短输入滤波时间4.2 现场排查的一个完整实例某条包装线的触摸屏显示当班产量比实际多出约3%每个班多两百多件主管很恼火。我过去之后没有先动程序而是先看高速计数器的原始计数。把采样周期从100ms改成10ms连续观察了2分钟发现计数脉冲在机器运转时经常出现“双脉冲”一个干净的脉冲后面总是跟着一个幅度小、间隔短的小脉冲。因为采样周期100ms太粗看不出来改短之后马上暴露了。这个现象通常是编码器安装松动或者联轴器间隙造成的机械上紧固、重新对中之后双脉冲就消失了产量偏大的问题也随之解决。这个案例说明一个道理产量统计不准很多时候不是PLC程序问题而是机械和传感器问题。先看原始信号再调程序顺序反了会把问题搞得更复杂。4.3 独家避坑技巧产量程序的几个隐藏细节第一不要用浮点数做长时间累计的总产量。浮点数到了很大的数量级之后加上一个很小的数会“加不进去”因为浮点数的精度有限。比如100万米长度累计每次加0.05米很可能加了等于白加。解决方案是产量累计用双整数存“累计脉冲数”只在显示的时候除以每转脉冲数和周长换算成产量数值。这样既不会丢失脉冲也不会有浮点精度问题。第二采样周期和数量积分的同步。如果你在循环中断里做积分但主循环里读中断中算好的累计值要确保读操作不会撕裂数据。S7-1200里双整数读取是原子的但如果你用了64位数据或者浮点数累计跨中断的时候可能读到“写到一半”的值。稳妥做法是在中断结束时用一个标志位置位主循环读到标志后先取数再清标志。第三触摸屏上的当班清零要用“置位式按钮确认”不要用“切换式按钮”。我见过操作工想清零产量结果按了一下把模式切到了“维修模式”整个画面锁掉最后只能断电重启。细节做得不好现场操作工就会骂。第四速度显示要有迟滞。设定零速阈值后如果直接在程序里用Speed Threshold判断运行/停止当速度正好在阈值附近时运行状态会反复跳变运行时间也会异常累计。解决方法是达到阈值后启动延时5秒才算运行低于阈值后延时10秒才算停止。这样就把临界抖动过滤掉了。4.4 程序交付时该给现场留什么程序写完之后不要只留给现场一个源程序就完事。一个成熟的测速产量统计程序至少要在触摸屏上留出以下几个可调参数编码器每转脉冲数换编码器或换减速比时用测速轮周长或辊径零速判定阈值滤波系数班次切换时间或切换模式当班产量清零按钮带确认和权限累计总产量清零按钮仅管理员可见这些参数单独放到一个“参数设置”页面配上修改密码能省掉你一大半的售后时间。如果程序里把这些参数写死一旦机械结构改动就得重新下载程序既麻烦又容易被现场抱怨。这个教训来自自己早年的项目当时为了省事把每转脉冲数写死成600结果设备换了一个800脉冲的编码器产量数据整整偏了一个月才被查出来。5. 更进一步结合人机界面与数据追溯5.1 触摸屏上的数据呈现逻辑产量统计程序最终要跟人机界面配合。一个好的画面要同时满足“操作工想看什么”和“主管想看什么”。操作工最关心的是当前速度、当班产量、班次剩余时间。这三个数字要放在主画面最显眼的位置字体要大颜色要容易辨认。如果当前速度为零且设备处于自动状态最好能弹出一个“设备停机中”的提示提醒操作工及时处理。主管更关心的是最近几个班的产量对比、累计总产量、运行时间、设备利用率。这些数据可以放在一个“生产报表”页面用表格或者简单柱状图显示。如果触摸屏本身不支持复杂报表可以再配一个上位机或者直接把数据传到数据库中。我的经验是把“当前班次产量”与“前几个班次产量”做对比展示会比单纯显示产量数字更让主管满意。因为这个页面直接回答了他每天最想知道的“这个班跟上个班比到底是快了还是慢了”。5.2 历史数据存储与MES对接思路数据量不大的时候触摸屏内部可以存最近几十个班次的数据。但如果要追溯更长时间或者要满足工厂管理系统对设备数据的要求就需要把PLC里的产量数据定时往外送。对于S7-1200/1500最常见的做法是启用Web服务器功能PLC直接把变量给Web页面或通过Fetch/Write传给上位机。或者用Modbus TCP把产量数据映射到保持寄存器让第三方系统来读。S7-200 SMART也支持Modbus TCP但连接数有限最多只能8个规划通信连接时要留出余量。特别提醒如果你要把产量数据往MES送一定要在PLC里设置一个“数据心跳”和“数据序号”。意思是每传输一条数据带上一个递增的序号上位机可以根据序号判断数据有没有丢失比如中间断了几个序号就知道那几秒的数据要补采。否则通讯一断中控室那块的产量曲线就直接断层看起来就像设备停机。这个细节很多MES厂家会忽略最后反而认为是PLC程序的问题。5.3 一个可选的进阶扩展产量预测与换型管理同一条生产线如果经常做不同规格的产品产量统计要跟着产品改。典型做法是在触摸屏上做一个“产品选择”页面每个产品对应一组参数编码器每转脉冲数如果使用不同测速轮测速轮周长或辊径单件标准长度如果按米数统计产量标准速度范围当操作工选好产品后PLC自动切换参数组并把“换型时间”也记录下来。这样主管可以分出“换型时间”“运行时间”“停机时间”对产线效率的分析就非常清晰。这个扩展并不复杂本质就是多建几个DB块或者数组但功能上会让整个程序深化一个层次很多工厂愿意为这种功能增加项目预算。6. 写在最后的几点个人体会做测速产量统计程序真正的难度往往不在PLC指令本身上。指令就那几条公式也就那一个。难的是把传感器装好、把参数调稳、把边界情况想全让现场三个班倒的操作工也挑不出毛病。我个人这些年踩过几次坑之后总结的体会是凡是产量数据对不上的问题首先怀疑机械和传感器其次怀疑采样逻辑最后才怀疑CPU和通信。先拉出高速计数器的原始值看它是不是干净这是最快的定位手段。还有程序里一定要留足调试参数别把参数写到代码深处否则每次改参数都要重新下载程序你会在车间里被折腾到怀疑人生。这个测速产量统计程序后续还可以继续扩展比如接入远程监控、做设备OEE计算、生成每班的SPC质量分析图。但无论加多少新功能前面这些基础逻辑——测速、积分、班次切换、断电保持——才是整个统计体系的地基。地基打得稳后面扩展才不慌。希望这篇内容能帮你少走几趟弯路。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑