新手西门子PLC编程技巧,就是简单快速好用
本文通过例程的方式总结一些常用的西门子PLC编程技巧,从简单到复杂,从梯形图到SCL,希望对大家有所帮助。
(一)PLC系统常闭点
(二)PLC系统常开点
PLC程序的绝对常开点,可以作为逻辑支路接通、调试或检修的接通开关,尽量使用比较独立的存储位。
(三)PLC系统上电脉冲
PLC程序的系统上电脉冲,可以作为系统初始化脉冲来复位、清零和设置系统重要参数,尽量使用比较独立的存储位。
(四)一键触发启停功能
用一个按钮实现启动和停止功能,可以作为操作按钮不够时的一个补救措施。
(五)模拟量输入标定功能
将整数的模拟量标定为实数的工程量,相当于博途中自带的SCALE_X ,但该子程序结合高低量程限制后,标定和调试都更加方便。
(1)子程序调用
(2)子程序变量声明
(3)SCL代码
IF (#Emin < #Emax) AND (#Dmin < #Dmax) THEN
IF #Raw < #Dmin THEN
#RawTemp := #Dmin;
END_IF;
IF #Raw > #Dmax THEN
#RawTemp := #Dmax;
END_IF;
IF (#Raw >= #Dmin) AND (#Raw <= #Dmax) THEN
#RawTemp := #Raw;
END_IF;
#OutReal := (INT_TO_REAL(#RawTemp - #Dmin) / INT_TO_REAL(#Dmax - #Dmin)) * (#Emax - #Emin) + #Emin;
#OutPercentage := (#OutReal / (#Emax - #Emin)) * 100.0;
ELSE
#OutReal := 0.0;
#OutPercentage := 0.0;
END_IF;
(六)模拟量输出标定功能
将实数的工程量标定为整数的数字量,相当于博途中自带的NORM_X ,但该子程序结合高低量程限制后,标定和调试都更加方便。
(1)子程序调用
(2)子程序变量声明
(3)SCL代码
IF (#Dmin < #Dmax) AND (#Emin < #Emax) THEN
IF #Raw < #Emin THEN
#RawTemp := #Emin;
END_IF;
IF #Raw > #Emax THEN
#RawTemp := #Emax;
END_IF;
IF (#Raw >= #Emin) AND (#Raw <= #Emax) THEN
#RawTemp := #Raw;
END_IF;
#OutInteger := REAL_TO_INT(((#RawTemp - #Emin) / (#Emax - #Emin)) * INT_TO_REAL(#Dmax - #Dmin) + INT_TO_REAL(#Dmin));
#OutPercentage := ((((#RawTemp - #Emin) / (#Emax - #Emin)) * INT_TO_REAL(#Dmax - #Dmin) + INT_TO_REAL(#Dmin)) / INT_TO_REAL((#Dmax - #Dmin))) * 100.0;
ELSE
#OutInteger := 0;
#OutPercentage := 0.0;
END_IF;
RETURN;
(七)冒泡法排序功能
通过冒泡法升序或降序模式排序数组。
(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
#temp1 := #Array[#j];
#Array[#j] := #Array[#j + 1];
#Array[#j + 1] := #temp1;
END_IF;
END_IF;
END_FOR;
END_FOR;
END_IF;
(八)斜坡函数功能
输出值按照指定斜率(单位/秒)跟随设定值,可以用来防止数值突变,这个功能可以在博途中添加扩展库函数(LGF)后直接调用Ramp函数。
(1)子程序调用
(2)子程序变量声明
(3)SCL代码
#rv1:= RD_SYS_T(#ActualTime);
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;
例程说明
以上例程均在博途V15.1环境下测试通过,大家有什么好的编程技巧,欢迎留言!
自动化工程师!常用指令是PLC编程程序架构,这样学更快入门
每个梯形图指令都会触发一个特定操作。将这些指令组合到一个程序中时,便可完成多种自动化任务。这些基本指令有很多都是常用到编程控制,使其程序变得更加顺畅及灵活,此次主要也是为了让大伙进一步了解程序的框架,每个实例都是比较直观易懂的。
本次提供梯形图指令实际应用的以下实例:
控制传送带 - 使用位逻辑指令
检测传送带的移动方向 - 使用位逻辑指令
生成时钟脉冲 - 使用定时器指令
跟踪存储空间 - 使用计数器和比较指令
使用整数 数学运算指令解决问题
设置加热烘炉的时间长度
使用的指令
实例:整型数学运算指令
解决数学问题
实例程序显示了如何使用三个整数数学运算指令来产生与下列方程式相同的结果:MW4 = ((IW0 + DBW3) x 15) / MW0
梯形图程序:程序段 1:打开数据块 DB1 。
程序段 2:输入字 IW0 加到共享数据字 DBW3( 必须定义和打开数据块 ),总和被载入存储器字 MW100 。
然后, MW100 乘以 15,结果存储到存储器字 MW102 中。 MW102 除以 MW0 ,结果存储到 MW4 中。
实例实例::计数器和比较指令
带计数器和比较器的存储区域
下图显示了具有两个传送带且在传送带之间有临时存储区域的系统。传送带 1将包裹传送到存储区域。
存储区域附近的传送带 1末端的光电屏障确定向存储区域传送的包裹数量。传送带 2会将包裹从临时存储区域传输到装载码头,而卡车在此将包裹发送给客户。存储区域附近的传送带 2末端的光电屏障确定离开存储区域而转向装载码头的包裹数量。带五个指示灯的显示面板将指示临时存储区域的填充量。
激活显示面板上的指示灯的梯形图程序
程序段 1:计数器 C1对输入 CU 处每次从 "0" 到"1"的信号改变都进行正计数,而对输入 CD 处每次从 "0"到 "1"的信号改变都进行倒计数。对于输入 S处从 "0" 到"1"的信号改变,计数器值被设置为值 PV 。输入 R处从 "0"到"1"的信号改变将计数器值复位为 "0"。MW200 包含 C1的当前计数器值。 Q12.1 指示 "存储区域非空 "。
实例实例:定时器指令
时钟脉冲 时钟脉冲发生器
当需要生成定期重复的信号时,可使用时钟脉冲发生器或闪烁继电器。时钟脉冲发生器在控制指示灯闪烁的信号系统中很常见。
当使用 S7-300 时,您可用特殊组织块中的时间处理功能来执行时钟脉冲发生器功能。但下列梯形图程序中显示的实例说明的是使用定时器功能产生时钟脉冲。实例程序显示如何通过使用定时器实现任意的时钟脉冲发生器。
产生时钟脉冲 (脉冲占空比 1:1) 的梯形图程序
程序段 1:如果定时器 T1的信号状态为 0,将时间值 250 毫秒载入 T1,并将 T1 作为扩展脉冲定时器启动
实现特定频率通过存储器字节 MB101 和MB100 的单个位,可以实现下列频率:
实例实例:位逻辑指令
实例 1:控制传送带
下图显示可用电动方式激活的传送带。在传送带的开始位置有两个按钮开关:用于启动的 S1和用于停止的 S2。在传送带末端也有两个按钮开关:用于启动的 S3和用于停止的 S4。可从任何一端启动或停止传送带。此外,当传送带上的部件到达终点时,传感器 S5 将停止传送带。
绝对地址和符号编程
您可编写程序使用绝对地址,绝对地址或代表传送带系统各种组件的符号 符号符号来控制传送带。需要制定一个符号表,以建立所选择的符号与绝对地址的联系 (参见 STEP 7 在线帮助 ) 。
控制传送带的梯形图程序
程序段 1:按下任一启动开关打开电机。
实例实例:字逻辑指令
加热烘炉:烘炉操作员通过按启动按钮来启动烘炉加热。操作员可用图中所示的码盘开关来设置加热的时间。操作员设置的值以二进制编码的十进制 (BCD) 格式显示,单位为秒。
梯形图程序
程序段 1:如果定时器正在运行,则打开加热器。
这些实例你会了几个呢,又有哪一些不懂的,可一起相互讨论。
以上,欢迎动动手分享及收藏!
相关问答
用pLC编程,我想按钮START只按一下就能触发程序一直循环运行。怎么写?
START输入使一个中间继电器置位,再在此中间继电器后串上你的程序。。。。START输入使一个中间继电器置位,再在此中间继电器后串上你的程序。。。。
怎样编写plc上升沿触发功能?
在PLC编程中,可以使用以下几种方式来编写上升沿触发功能:1.使用辅助继电器(AUX):创建一个辅助继电器,并将其置于一个XIO(非接点)位指令之前。然后,在需...在...
西门子plc如何与丹佛斯做通讯报警?
西门子PLC和丹佛斯之间通讯和报警可以通过以下步骤实现:1.创建连接:在西门子PLC中,使用相应的通讯模块(如CP340)与丹佛斯设备建立通讯连接。连接可以通过...
PLC怎么实现闪烁1秒周期求解?
用定时器设定1秒,触发输出,再用输出点取反控制开启定时器即可。这个方法只亮一个扫描周期,不知你的意思是亮多长时间,如果亮1秒,灭1秒,需要2个定时器,都设...
求西门子200PLC脉冲输入输出程序实例?
控制脉冲紧急停止或者正常停止的程序脉冲输出的是Q0.0SM0.1触发脉冲使用包络0控制脉冲紧急停止或者正常停止的程序脉冲输出的是Q0.0SM0.1触发脉冲使用...
plc灯闪烁05秒怎么设置?
要设置PLC灯闪烁05秒,首先需要确定PLC的型号和接线情况。然后,在PLC编程软件中打开对应的程序,在程序中添加一个定时器,设置定时器的时间为05秒,将定时器的...
plc程序怎样才会触发死循环?
PLC程序触发死循环的原因有以下几点:1.在程序中没有设置合适的条件判断语句,在某个条件得不到满足的情况下,便会导致程序进入无限循环状态,即死循环。2.程序...
plc怎么实现自动循环?
用按钮触发后,用延时器控制自动无限循环运动,配合计数器可实现有限循环。例:用两个按钮一开(X0)一闭(X1)控制一个线圈Y0并自锁Y0的电路谁都会做吧。先...用...
PLC使用ST语言编程如何实现上升沿和下降沿触发?
具体实现方法要取决于所用的PLC系统与软件,虽然IEC标准规定了ST语言的标准,但各家PLC具体操作上是不同的。有些PLC内置了上升沿下降沿检测的模块,直接调用类似...
plc怎么实现优先级?
PLC可以通过设置不同的触发条件和时间延迟来实现优先级控制。例如,可以将紧急停机按钮设置为最高优先级触发条件,确保在任何情况下都能立即停机。同时,设定一...