扩展知识面 可使你的PLC编程更加灵活、准确、精炼
(PLC编程的体会之一)
对于一个PLC的编程者,不仅要熟练的掌握PLC的各个指令的内涵与用法,还用多掌握点其他学科的知识,如数学、电学等。掌握的知识越多,会使你解决问题的思路越宽,这对PLC的编程是大有益处的。下面列举的几例,都是借助与其它学科知识,使编写的程序准确、简练与完善。
例一、有人求助:怎么通过西门子200PLC中的计数器奇数执行一个动作,偶数执行一个动作。那位大哥知道 ,谢谢赐教
这个问题看似简单,有人就用整数加1的指令(INCB MB1)编写一段程序,其个位值M1.0 =0为偶数,执行一个动作,个位值M1.0=1为奇数,执行另一个动作。见下图:
这样编程对吗?答案是错误的,为什么?原因就是他不考虑或了解奇数与偶数的定义:1、3、5、7、9……为奇数,2、4、6、8……为偶数,而0既不是奇数也不是偶数。故当MB1=0时,程序应不执行任意动作。而上面的程序由于只判断M0.0=0或1一个条件,故当MB1=0时,其M1.0=0而错误的错误的执行Q0.1=1的输出动作。故此编程是错误的,正确的编程如下图:
改后的程序增加一个判断条件,即在原程序判断M1.0=0或=1的状态的语句中串接一个MB1不等于0的比较指令。即:MB1≠0时,如M1.0=1,MB1一定是奇数,故执行一种动作(Q0.0=1),如M1.0=0,MB1一定是奇数,故执行另一种动作(Q0.1=1)。如MB1=0,即MB1既不是奇数,也不是偶数,故不执行任一种动作(Q0.0=0、Q0.1=0),可见多了解点数学知识,可使你的编程准确、巧妙。
例二、求助:暂停怎么实现呢.正转暂停,反转暂停,怎么实现?
这是个电路问题,在电机正反转控制电路里,停车按钮与暂停按钮的作用是不一样的,停车开关可以停止电机转动,但要再启动电机运行时,需再次按正传启动或按反转启动按钮才可运转,而再次启动电机的运转方向不一定为停车前的运转方向,它取决与按下的按钮是正向启动按钮或反向启动按钮。而暂停按钮(选为自锁式)按下时,电机可立即停转,当抬起暂停按钮时,电机立即按暂停前的转动方向启动运转。这对实际操作时,临时出现意外事情,可按下暂停按钮停车,处理完后再抬起暂停按钮,电机会按暂停前的旋转方向继续运行,确保操作无误。
本着这一原则,编出二个小程序,供大家参考:
第一个程序如下:
上图是控制电机正传、反转、暂停的梯形图,图中Q1.0为电机正传输出,Q1.1为电机反转输出,I0.0为正传启动按钮,I0.1为停止按钮,I0.2 为反传启动按钮,I 0.4为自锁式按钮作暂停开关。当电机运行时(正转或反转),只要按下暂停按钮(I0.4=1),电机将停止转动,抬起此按钮,电机将继续按原方向运转。
该程序的另一特点就是一旦按下暂停按钮,不仅电机停转。电路也处于封锁状态,如此时按正转、反转及停车按钮都不起作用,即不会改变暂停前的电路状态,故可确保暂停复位后,电机仍可确保暂停前的转动方向运转。
第二个程序:
三、怎样写高数计数器测电动机转数的程序
对于这个问题,就涉及到何为电机的转速。转速的定义是:每一秒内电机旋转的圈数,
故须有一个测速装置,安装在电机旋转主轴上,使电机每转一圈,该装置能产生一个脉冲输出给PLC高速计数器计数口。对PLC编程要保证以下二点:
1、要求高速计数器设置为连续计数方式,且计数溢出时产生中断将计数器自动清0,再从0计数。
再选用PLC内的秒脉冲的前沿(或后沿)进行读取高速计数器的计数值,即每隔1秒读取一次计数值送入存储器1里,再进行如下处理:用当次的计数值减去前一次的计数值(存储器2),其差值即为电机的转速,将其送入存储器3以供显示等用。随后将存储器1值送入存储器2。当下一秒到来时再重复上述动作。
2、高速计数器的计数容量为双字,对其设置为:连续计数方式,且计满自动从0计数。这样连续计数总会出现计数值计满的时候,当计满数后,计数值将从0计数,使本次计数值小于前1秒的未计满的计数值,造成减数运算出现负值。对此可通过比较指令进行判断,如差值小于0,此值舍掉(因为计数器每计满数后只能出现一次减数运算为负),这样处理可确保长时间连续进行测速采集。请见以下梯形图:
一、主程序:
中断程序:
例三、请教高手,谁能给个用西门子plc编写的星三角降压启动的梯形图,谢谢!
这是电机启动低压电气控制的问题,熟悉电路控制的人都知道,大功率电机的一般均不直接启动,而是采用轻载下降压启动,以缓冲过大的起动电流对电网的冲击。角接的大功率电机启动时先为星接启动。会大大降低电机由静止到运转时的起动电流,电机运转后,再改为角接,电机电流就不会产生很大的突变。用PLC编程,也必须遵守这一启动原则,即先星接启动,运转一段时间,改为角接运行,请见下面梯形图:
该编程就是模仿硬件的星角启动过程编写出的梯形图,对搞过低压电气控制的人是不难理解的。
例四、我现在有个压力传感器,压力传感器在不受任何外力的情况下,输出时12mA,对应的扭力是0 (牛)N/m,(对应的PLC程序中的数据是K2400)。 压力传感器的承受压力的范围是 -500(牛)N/m 到 +500(牛)N/m 。 压力传感器输出是 4~20mA, 4mA 对应 -500(牛)N/m(对应的PLC程序中的数据时K800) 。 20mA对应的是 +500(牛)N/m (对应的PLC程序中的数据是K4000)。 算不出他们的比例关系。。因为我要这比例关系才能在程序中读取正确的数值。
开始我是这样算的,后来发现不对,,我迷茫了。求各位大哥帮忙解决下。。。
y=kx+b
-500=800k+b
500=4000k+b
在PLC编程中常遇到模拟量的编程,通常模拟量输入模块可以将外输入的模拟量信号转换为数字量,但数字量必须通过转换公式的运算才能变为需要的被测量(如温度、压力……)。以本题为例:压力传感器的承受压力的范围是 -500(牛)N/m 到 +500(牛)N/m 。 压力传感器输出是 4~20mA, 4mA 对应 -500(牛)N/m(对应的PLC程序中的数据时K800) 。而20mA对应的是 +500(牛)N/m (对应的PLC程序中的数据是K4000)。
根据以上所叙,利用数学知识,可画出如下对应曲线图,其蓝色线为传感器所受压力与输出电流的关系曲线,而绿色线为PLC转换的数字量与传感器输出电流的关系曲线。
由该曲线图可列二个关系式:
1、 对于数字量与电流的关系式为: Kx=200× I .....(1)
如:I=4 则:Kx=800;I=12 则:Kx=2400
2、 对于压力与数字量的关系式为: F=-750+62.5 × I .....(2)
如:如:I=4 则:F=-750+62.5×4=-500 I=12 则:F=-750+62.5×12=0 I=20 则:F=750+62.5×20=+500
实际编程时,需将模块转换的数字量,通过将数字量转换为对应压力的转换公式运算,才能求出对应的压力值。这转换公式的推导需编程者完成,所以必须掌握一定的数学知识能行。下面将讲讲转换公式的推导及PLC编程。有二种推导方法:
1、 将(1)式代入(2)是,再整理可得:
F=-750+62.5×(Kx /200)=-750+0.3125×Kx ...... (3)
其式(3)即为转换公式,PLC可按此公式编程,求出压力值。
2、还可以这样推导出另一种形式的转换公式:根据“4mA 对应 -500(牛)N/m(对应的PLC程序中的数据时K800)。20mA对应的是 +500(牛)N/m (对应的PLC程序中的数据是K4000)”可设立F—Kx坐标,在坐标系上建立二个坐标点:其M点坐标为(-500,800),A点坐标为(+500,4000),再连接这二点构成一条直线,就是数字量与压力值的关系曲线,见下图:
1、用(4)式编写求压力值的子程序的梯形图:
按(3)编写的程序是用实数运算,按(4)编写的程序可使用整数运算,也可用实数运算)。具体选用哪个公式可由根据编程要求而定。
通过上述4个例子的分析,可以看出,扩大知识面,就是扩大编程的视野,使你可从多个方面去思考问题,从中选取最佳方案,会使你的程序更加准确、简练、完美。谢谢!