6ES7222-1HF22-0XA8现货西门子代理
6ES7222-1HF22-0XA8现货西门子代理
6ES7222-1HF22-0XA8现货西门子代理
西门子PLC编程技巧,就是好用!
【导读】本文通过例程的方式总结一些常用的西门子PLC编程技巧,从简单到复杂,从梯形图到SCL,希望对大家有所帮助。
(一)PLC系统常闭点PLC程序的常闭点,可以作为逻辑支路断开、调试或检修的屏蔽开关,尽量使用比较独立的存储位。PLC程序的常开点,可以作为逻辑支路接通、调试或检修的接通开关,尽量使用比较独立的存储位。
(三)PLC系统上电脉冲PLC程序的系统上电脉冲,可以作为系统初始化脉冲来复位、清零和设置系统重要参数,尽量使用比较独立的存储位。
(四)一键触发启停功能用一个按钮实现启动和停止功能,可以作为操作按钮不够时的一个补救措施。
(五)模拟量输入标定功能将整数的模拟量标定为实数的工程量,相当于博途中自带的SCALE_X ,但该子程序结合高低量程限制后,标定和调试都更加方便。
(1)子程序调用
(2)子程序变量声明
将实数的工程量标定为整数的数字量,相当于博途中自带的NORM_X ,但该子程序结合高低量程限制后,标定和调试都更加方便。
(1)子程序调用
(2)子程序变量声明
通过冒泡法升序或降序模式排序数组。
(1)子程序调用
(2)子程序变量声明
(3)模式为1(升序)的运行结果如下图所示:
(4)模式为0(降序)的运行结果如下图所示:
(5)SCL代码
IF #Enable THEN
//获取数组上限
#L := LOWER_BOUND(ARR := #Array, DIM := 1);
//获取数组下限
#H := UPPER_BOUND(ARR := #Array, DIM := 1);
//冒泡法排序
FOR #i := #L TO #H-1 DO
FOR #j := #L TO #H-1-#i DO
IF #Mode THEN
//升序
IF #Array[#j] > #Array[#j + 1] THEN
#temp1 := #Array[#j];
#Array[#j] := #Array[#j + 1];
#Array[#j + 1] := #temp1;
END_IF;
ELSE
//降序
IF #Array[#j] < #Array[#j + 1] THEN
END_IF;
END_FOR;
END_FOR;
END_IF;
(八)斜坡函数功能输出值按照指定斜率(单位/秒)跟随设定值,可以用来防止数值突变,这个功能可以在博途中添加扩展库函数(LGF)后直接调用Ramp函数。
(1)子程序调用
(2)子程序变量声明
IF #InitFB = true THEN #LastTime := #ActualTime; #AuxOut := #SetPoint; #Out := #AuxOut;END_IF;
#DeltaTime_T:= T_DIFF(IN1:=#ActualTime, IN2:=#LastTime);#DeltaTime_DI:= TIME_TO_DINT(#DeltaTime_T);#DeltaTime:= DINT_TO_REAL(#DeltaTime_DI);#DeltaTime := #DeltaTime / 1000.0;#LastTime := #ActualTime;
IF #SetPoint < #AuxOut THEN #Out := #AuxOut; #auxR := #AuxOut - (#Rate * #DeltaTime); #Out := #AuxOut; #AuxOut := MAX(IN1 := #auxR, IN2 := #SetPoint); #Out := #AuxOut; RETURN;ELSE IF #SetPoint > #AuxOut THEN #Out := #AuxOut; #auxR := (#Rate * #DeltaTime) + #AuxOut; #Out := #AuxOut; #AuxOut := MIN(IN1 := #auxR, IN2 := #SetPoint); #Out := #AuxOut; END_IF;END_IF;RETURN;