分享一个SCL编程案例,这是一个基于西门子S7-1500 PLC的饮料自动化生产系统项目的一小部分,通过SCL语言编程实现了一个自动化生产过程中其中一个罐装部分的控制逻辑。该控制逻辑主要实现罐装控制操作,支持手动和自动切换,设备的启动/停止、罐装时对饮料罐的液位检测、罐装阀门的开度控制、罐装时的流量计量以及设备故障报警等基本功能。
具体SCL程序包括一个DB块和一个FB块,如下所示:
首先创建一个DB块,DB10: "FillingSystem_Data"
{ S7_Optimized_Access := 'TRUE' }
VAR
StartButton : Bool; // 启动信号(I20.0)
StopButton : Bool; // 停止信号(I20.1)
ManualMode : Bool; // 自动/手动模式(I20.2)
TankLevel_High : Bool; // 液位高(I20.3)
TankLevel_Low : Bool; // 液位低(I20.4)
ValveOpen : Bool; // 罐装阀门开关指令(Q10.0)
PumpRun : Bool; // 输送泵运行指令(Q10.1)
Alarm : Bool; // 报警指令输出(Q10.2)
FlowRate : Real; // 罐装流量(PIW252)
TargetVolume : Real := 100.0; // 目标值
CurrentVolume : Real; // 实际值
SystemStatus : Bool; // 系统运行状态
END_VAR
编写一个FB块,FB10 "FillingControl"
{ S7_Optimized_Access := 'TRUE' }
VAR_INPUT
Start : Bool;
Stop : Bool;
ModeManual : Bool;
LevelHigh : Bool;
LevelLow : Bool;
FlowInput : Real;
END_VAR
VAR_OUTPUT
ValveCmd : Bool;
PumpCmd : Bool;
AlarmOut : Bool;
TotalVolume : Real;
END_VAR
VAR
bSystemStatus : Bool;
rVolumeCounter : Real;
END_VAR
BEGIN
// 启动/停止
IF Start AND NOT Stop THEN
bSystemStatus := TRUE;
ELSIF Stop THEN
bSystemStatus := FALSE;
END_IF;
// 自动控制
IF bSystemActive AND NOT ModeManual THEN
// 液位安全检测
IF LevelLow THEN
PumpCmd := TRUE;
ValveCmd := TRUE;
rVolumeCounter := rVolumeCounter + (FlowInput * 0.1);
ELSE
PumpCmd := FALSE;
ValveCmd := FALSE;
END_IF;
// 罐装完成判断
IF rVolumeCounter >= TargetVolume THEN
ValveCmd := FALSE;
AlarmOut := TRUE; // 触发完成报警
END_IF;
// 高液位紧急停止
IF LevelHigh THEN
PumpCmd := FALSE;
ValveCmd := FALSE;
AlarmOut := TRUE;
END_IF;
END_IF;
// 手动控制
IF ModeManual THEN
PumpCmd := Start;
ValveCmd := Start;
END_IF;
TotalVolume := rVolumeCounter;
END_FUNCTION_BLOCK
在主程序(OB1)内调用FB10
"FillingSystem" : "FillingControl";
"FillingSystem"(
Start := "DB10".StartButton,
Stop := "DB10".StopButton,
ModeManual := "DB10".ManualMode,
LevelHigh := "DB10".TankLevel_High,
LevelLow := "DB10".TankLevel_Low,
FlowInput := "DB10".FlowRate,
ValveCmd => "DB10".ValveOpen,
PumpCmd => "DB10".PumpRun,
AlarmOut => "DB10".Alarm,
TotalVolume => "DB10".CurrentVolume
);
以上是用SCL语言编写的程序部分,请大家参考。。