用模拟量模块控制一个电磁比例阀,0-5V控制,需要在设定的时间内线性的从零到最高值,但是这个时间是个变量值,可以随时调整。
注意一定是线性递增的控制方式,在设定时间内线性递增。试编写控制程序。
PLC类型任意选择,回答的最好最完全的,原创最多,阐述最详细,程序越准确者获一等奖!
工控PLC擂台每周一期,本期待87期结束一周后结贴。奖项设置:一等奖1名:30~50MP,二等奖3名:10MP,三等奖10名:100积分。
MP介绍:gongkongMP即工控币,是中国工控网的用户积分与回馈系统的一个网络虚拟计价单位,类似于大家熟悉的QB,1个MP=1元人民币。
MP有什么用?兑换服务:以1个MP=1元来置换中国工控网的相关服务。 兑换现金:非积分获得的MP可兑换等值现金(满100MP后、用户可通过用户管理后台申请兑换)。
楼主最近还看过
这个题目实际严格用PLC来做,只能实现一个台阶输出。
1:就看如何看待这个线性变化的精度。
2:爬升的时间不能太快。
本题中,必须对输出做数字化处理,即将输出分为N次输出,每次输出的变化数一样。假设爬升时间为T,T变量放在寄存器40100中。分为N份输出,N变量放在寄存器40101中。PLC输出0-5V对应的数值为0~32767的变化范围,对应模拟量DA输出寄存器为40001。本例程设定加速时间为30S,分1000次递增输出。
用毫秒定时器来触发,改变40001的数值。毫秒定时器的长度为 40200 =(T*1000)/N = ((40100)*1000)/40101 = 30*1000/1000=30毫秒,这个时间就不考虑余数的问题了。
每次DA输出寄存器增加值为(40202) = 32767/N=32767/1000=32,余数为767。(40203)为整除之后的余数
有了这些铺垫,下面就是程序,以及仿真运行的结果,输出40001寄存器=32767丝毫不差,本程序需注意的关键是余数的处理。不然会加不到最大值。
本程序先设定爬升时间为30S,分1000次直线输出(可任意修改)。每次定时器到的时候,先加上递增的幅度,如果余数计数器没有到,则再加上一个1。1000次到后,则不做加法了。
另外,题外可以用硬件的方式来实现,用一个电阻和大的电容,这样,直接输出一个最大的5V,然后由电阻和电容的数值,实现一个输出指数的爬升,估计比PLC实现的波形不会差,不过爬升时间越大,这个电容就要求越大,就越不现实了。
再贴张大一点图。
需要原程序的可联系liujl@plcstar.com
一、硬件的组成及设置:
1、选用S7-200PLC 模块为EM235 模拟量输出设定为0~20ma,输出口对模拟地并接250Ω标准电阻,变0~20ma 电流输出为0~5V电压输出。
2、PLC的输入I0.0为启动电磁阀开门命令信号,EM235的AQW0输出点为控制电磁阀的输出0~20ma,流经250Ω标准电阻,输出给电磁阀为0~5V的电压信号。
3、设VW0为设定电磁阀动作时间的置数区,此值是由由上位机或触摸屏中设定,再传递给PLC。
3、编程处理:按下启动按钮,使M0.0=1,将T0值送入VW10,启动振荡器,此时振荡周期=2T0。用T96=1的前沿,将
三、编程:
·从原理上讲,比例阀的响应频率不过25HZ,即在设计时需要根据比例阀的响应速度设置控制周期,在程序上为最小时基。但往往控制周期还跟很多因素有关,本程序将时基设置为可设,但如果把时基设置小于扫描周期,是没有意义的。
·采用西门子PLC,加12位精度模拟量模块,0-10v输出对应0-27648,输出地址PQW256;
·I0.0控制启停;
程序结构:
DB1:
+0.0 Int OutPV
+2.0 DI PulseBase
+6.0 real SetTimeBase
+10.0 real SetRampingTime
程序:
OB1------------------------------------nw1---------------------------------- L LD 6
ITD
DTR
L 1.000000e+003
/R
T MD 100 //周期扫描时间s转换成ms
L MD 200
L MD 100
+R
T MD 200
L DB1.DBD 6
>R
JCN init //生成设定时间基数循环标志位;
S M 10.0 //计时到,置位M10.0,计数清零;
L 0.000000e+000
T MD 200
nw2--------------------------------------------------------------------------
init: L DB1.DBD 10
L DB1.DBD 6
<R //若设定爬坡时间输入小于时基,将时基赋予爬坡时间;
JCN _001
L DB1.DBD6
T DB1.DBD10
_001: L DB1.DBD 10
L DB1.DBD 6
/R
T #TimesOfRamping //求出需要循环累加的次数;
L 13824
T #OutLimit
L #OutLimit
ITD
DTR
L #TimesOfRamping
/R
T #ValueReal
TRUNC
T DB1.DBD 2 //计算每次循环需要累加控制量;
nw3--------------------------------------------------------------------------
A I 0.0
JC Run
L 0 //未启动,输出赋0,程序返回;
T DB1.DBW 0
BEC
Run: A M 10.0 //周期未到,返回;
JC Caut
BEC
Caut: L DB1.DBW 0 //循环累加并输出
L DB1.DBW 4
+I
T DB1.DBW 0
L #OutLimit
>I
JCN OutP
L #OutLimit
T DB1.DBW 0
OutP: L DB1.DBW 0
T PQW 256
R M 10.0 //每个控制周期输出一次,完成后复位循环标志位,等待下一次触发;
·