在工业自动化领域,收放卷设备是薄膜、金属带材、纸张等连续材料加工中的关键设备。这类设备的核心控制难点在于实时准确地计算卷材直径——这个看似简单的参数直接影响着张力控制精度。我经历过无数次因为卷径计算偏差导致的产线事故:从薄膜起皱、印刷套色不准到直接断带停机,每次损失都是以万元计。
传统卷径计算方法主要依赖脉冲计数或直接测量,但在高速、变张力工况下表现不佳。V/N积分法(线速度与转速比值积分法)通过数学建模和实时积分运算,能有效克服机械测量误差和信号波动问题。西门子S7-1200 PLC凭借其强大的SCL语言处理能力,成为实现这一算法的理想平台。
卷径计算本质上是个几何问题。当材料以恒定线速度V(m/min)运行时,卷轴转速N(rpm)与当前卷径D(mm)存在确定关系:
code复制D = (V × 1000) / (π × N)
这个公式的推导过程值得深入理解:
关键细节:这里的1000和π都是单位换算系数,实际编程时建议定义为常量,方便后续维护。
直接使用瞬时速度计算直径存在两个致命缺陷:
积分法通过定时采样并累加(V/N)比值,本质上实现了低通滤波功能。其数学本质是计算一段时间内的平均值:
code复制∫(V/N)dt ≈ Σ(Vi/Ni) × Δt
在PLC中实现时,我们使用1秒定时器(T#1S)作为积分周期Δt。这个时间常数的选择很有讲究:
pascal复制FUNCTION_BLOCK FB_VN_DiameterCalc
VAR_INPUT
Enable: BOOL; // 使能信号(上升沿初始化)
LineSpeed_REAL: REAL; // 线速度(m/min)
MotorRpm_REAL: REAL; // 电机转速(rpm)
MaterialThickness: REAL := 0.1; // 材料厚度(mm)
InitialDiameter: REAL := 200.0; // 初始卷径(mm)
END_VAR
VAR_OUTPUT
Diameter_REAL: REAL; // 实时卷径(mm)
Alarm: WORD; // 报警代码
END_VAR
接口设计时的几个工程考量:
pascal复制VAR
tTimer: TON; // 积分周期定时器
fIntegralValue: REAL := 0.0; // 积分累加值
iSampleCount: INT := 0; // 采样计数器
fLastDiameter: REAL := 0.0; // 上一周期直径
END_VAR
// 积分运算主体
tTimer(IN:=Enable);
IF tTimer.Q THEN
// 有效速度范围判断(转速>10rpm)
IF MotorRpm_REAL > 10.0 THEN
fIntegralValue := fIntegralValue +
(LineSpeed_REAL * 1000.0) / (MotorRpm_REAL * 3.1415926);
iSampleCount := iSampleCount + 1;
END_IF;
tTimer(IN:=FALSE); // 复位定时器
END_IF;
// 直径计算(带材料厚度补偿)
IF iSampleCount >= 5 THEN // 至少5个采样点才输出
Diameter_REAL := SQRT(
(SQR(MaterialThickness * 2) * fIntegralValue) /
(MaterialThickness * 0.001)
);
// 突变检测(变化率>20%触发报警)
IF ABS(Diameter_REAL - fLastDiameter)/fLastDiameter > 0.2 THEN
Alarm := 16#0001; // 直径突变报警
END_IF;
fLastDiameter := Diameter_REAL;
END_IF;
代码中的关键改进点:
信号预处理
参数整定步骤
code复制1. 空卷运行时手动输入实际直径
2. 运行至中卷时暂停,测量实际直径并微调厚度参数
3. 全速运行观察直径曲线,调整积分周期(0.8-1.2S)
异常处理策略
| 故障现象 | 可能原因 | 排查方法 |
|---|---|---|
| 直径跳变 | 编码器信号丢失 | 检查屏蔽线接地 |
| 直径持续偏大 | 材料厚度设置过小 | 千分尺实测3点取平均 |
| 曲线呈阶梯状 | 机械传动打滑 | 检查气胀轴气压 |
浮点运算加速
S7-1200的浮点运算性能有限,可以:
HMI监控配置
pascal复制// 在OB1中调用
"HMI".Diameter_Trend := LREAL_TO_REAL(Diameter_REAL);
"HMI".Integral_Trend := fIntegralValue * MaterialThickness;
监控曲线解读:
安全保护机制
pascal复制// 在功能块内增加
IF Diameter_REAL > 1500.0 THEN // 超过最大卷径
Alarm := 16#0002;
Diameter_REAL := 1500.0;
ELSIF Diameter_REAL < 100.0 THEN // 小于最小卷径
Alarm := 16#0004;
Diameter_REAL := 100.0;
END_IF;
对于多层复合材料的收卷,需要改进算法:
pascal复制// 在VAR区增加
fEffectiveThickness: REAL; // 等效厚度
// 计算逻辑修改
fEffectiveThickness := MaterialThickness * (1 + 0.05 * LayerCount);
Diameter_REAL := SQRT(
(SQR(fEffectiveThickness * 2) * fIntegralValue) /
(fEffectiveThickness * 0.001)
);
这种处理方式考虑了材料层间间隙(假设每层增加5%厚度)
优秀卷径算法需要与张力控制配合:
pascal复制// 张力设定值计算
Tension_Set := Tension_Base * Diameter_REAL / InitialDiameter;
// 锥度控制示例
IF Diameter_REAL > 800.0 THEN
Tension_Set := Tension_Set * (1 - 0.001*(Diameter_REAL-800));
END_IF;
突然断电时的数据保护方案:
pascal复制// 在初始化时读取保持寄存器
IF FirstScan THEN
fIntegralValue := "Retain".IntegralValue;
END_IF;
// 定期保存数据(每分钟)
IF tSaveTimer(IN:=TRUE, PT:=T#1M).Q THEN
"Retain".IntegralValue := fIntegralValue;
tSaveTimer(IN:=FALSE);
END_IF;
在某PET薄膜分切机上的对比数据:
| 指标 | 传统脉冲法 | V/N积分法 | 提升幅度 |
|---|---|---|---|
| 稳态误差 | ±3.2mm | ±0.8mm | 75% |
| 加速段波动 | 12mm | 5mm | 58% |
| 断带次数/月 | 3.5次 | 0.8次 | 77% |
| 厚度均匀性 | ±5% | ±2.8% | 44% |
特别在弹性材料(如锂电隔膜)应用中,积分法能有效吸收材料弹性变形带来的速度波动,这是传统方法无法实现的。