发布于 2011-11-08 10:41:32
23楼
五. 项目实施总结和体会
芳砜纶项目工艺主要包括聚合纺丝两大工段,其对变频电机控制要求较高,尤其是纺丝工段, 变频电机连锁风机,抱闸控制信号要求较高, 纺丝拉伸需要进行均匀张力控制,以往纺丝或冶金线材均匀张力控制项目多使用PLC梯形图和语句表进行编程组态,其整个编程组态调试过程比较复杂,而在芳砜纶项目中,我们充分发挥PCS7的CFC和SCL高级语言功能,构造逻辑清晰的控制方案和程序框架,编程组态,调试修改都比较方便.以前公司绝大部分PCS7项目投标不包括MCC驱动,所以MCC驱动的PCS7程序的控制设计都很不完善,现场调试矛盾纠纷,疑难杂症较多.而芳砜纶项目SIAS把PCS7和MCC变频驱动一起拿下,这有利于我们充分发挥PCS7全集成自动化的优势,构造比较全面完善的变频驱动的PCS7控制方案。
附部分源程序:
1. 变频电机速度提升下降异常变速状态获取主程序:FB1608
FUNCTION_BLOCK FB1608
NAME:SPEED_MODE
{S7_TASKLIST:='OB100';
S7_m_c := 'true';
S7_blockview:='big'
}
VAR_INPUT
STOP { S7_m_c := 'true' }:BOOL;
START{ S7_m_c := 'true' }:BOOL;
BAOZHA{ S7_m_c := 'true' }:BOOL;
SPEED_IN{ S7_m_c := 'true' }:REAL;
L{ S7_m_c := 'true' }:BOOL;
M{ S7_m_c := 'true' }:BOOL;
H{ S7_m_c := 'true' }:BOOL;
P1{ S7_m_c := 'true' }:BOOL;
P1_RESET{ S7_m_c := 'true' }:BOOL;
END_VAR
VAR_IN_OUT// Output Parameters
MID_VAR1:REAL;
MID_VAR2=8:REAL;
S1:REAL;
END_VAR
VAR_OUTPUT
P{ S7_m_c := 'true' }:BOOL;
MODE{ S7_m_c := 'true' }:REAL;
SPEED_LAST{ S7_m_c := 'true' }:REAL;
P1_OUT{ S7_m_c := 'true' }:BOOL;
END_VAR
BEGIN //速度变化编码
IF STOP=1 THEN
S1:=8;
END_IF;
IF L=1 THEN
S1:=4;
END_IF;
IF M=1 THEN
S1:=2;
END_IF;
IF H=1 THEN
S1:=1;
END_IF;
IF S1=MID_VAR2 THEN
P:=0;
END_IF;
IF S1<>MID_VAR2 THEN //MID_VAR2在第一循环被赋予S1,
SPEED_LAST:=SPEED_IN;
P:=1;
MID_VAR1:=MID_VAR2;
MID_VAR2:=S1;
IF (MID_VAR1=8 AND MID_VAR2=4) THEN MODE:=1;END_IF;
IF (MID_VAR1=8 AND MID_VAR2=2) THEN MODE:=2;END_IF;
IF (MID_VAR1=8 AND MID_VAR2=1) THEN MODE:=3;END_IF;
IF (MID_VAR1=4 AND MID_VAR2=2) THEN MODE:=4;END_IF;
IF (MID_VAR1=4 AND MID_VAR2=1) THEN MODE:=5;END_IF;
IF (MID_VAR1=2 AND MID_VAR2=1) THEN MODE:=6;END_IF;
IF (MID_VAR1=4 AND MID_VAR2=8) THEN MODE:=7;END_IF;
IF (MID_VAR1=2 AND MID_VAR2=8) THEN MODE:=8;END_IF;
IF (MID_VAR1=1 AND MID_VAR2=8) THEN MODE:=9;END_IF;
IF (MID_VAR1=2 AND MID_VAR2=4) THEN MODE:=10;END_IF;
IF (MID_VAR1=1 AND MID_VAR2=4) THEN MODE:=11;END_IF;
IF (MID_VAR1=1 AND MID_VAR2=2) THEN MODE:=12;END_IF;
END_IF;
IF P=1 AND P1=1 THEN //因为异常变速.
P1_OUT:=1;
END_IF;
IF P1_RESET=1 THEN
P1_OUT:=0;
END_IF;
//WHILE TEMP_OUT<= SP DO
// TEMP_OUT:=TEMP_OUT+PV_IN;
//END_WHILE;
END_FUNCTION_BLOCK
2.变频电机速度提升下降斜坡分段控制主程序:FB1609
FUNCTION_BLOCK FB1609
NAME:SPEED_RAMP
{S7_TASKLIST:='OB100';
S7_m_c := 'true';
S7_blockview:='big'
}
VAR_INPUT
STOP { S7_m_c := 'true' }:BOOL;
START{ S7_m_c := 'true' }:BOOL;
P{ S7_m_c := 'true' }:BOOL;
P1{ S7_m_c := 'true' }:BOOL;
MODE{ S7_m_c := 'true' }:REAL;
SPEED_LAST{ S7_m_c := 'true' }:REAL;
L_SPEED{ S7_m_c := 'true' }:REAL;
M_SPEED{ S7_m_c := 'true' }:REAL;
H_SPEED{ S7_m_c := 'true' }:REAL;
STEP1{ S7_m_c := 'true' }:REAL;
STEP2{ S7_m_c := 'true' }:REAL;
STEP3{ S7_m_c := 'true' }:REAL;
STEP4{ S7_m_c := 'true' }:REAL;
STEP5{ S7_m_c := 'true' }:REAL;
RAMP1{ S7_m_c := 'true' }:REAL;
RAMP2{ S7_m_c := 'true' }:REAL;
RAMP3{ S7_m_c := 'true' }:REAL;
END_VAR
VAR // Output Parameters
SPEED1:REAL;
SPEED2:REAL;
SPEED3:REAL;
SPEED4:REAL;
SPEED5:REAL;
SPEED6:REAL;
SPEED_TEMP:REAL:=0;
END_VAR
VAR_OUTPUT
P_RESET{ S7_m_c := 'true' }:BOOL;
SPEED_OUT{ S7_m_c := 'true' }:REAL;
END_VAR
BEGIN
SPEED1:=L_SPEED;
SPEED2:=M_SPEED;
SPEED3:=H_SPEED;
SPEED4:=M_SPEED-L_SPEED;
SPEED5:=H_SPEED-L_SPEED;
SPEED6:=H_SPEED-M_SPEED;
IF SPEED_OUT<0 THEN
SPEED_OUT:=0;
END_IF;
IF NOT STOP THEN
SPEED_OUT:=0;
END_IF;
IF STOP THEN
IF NOT P THEN
SPEED_TEMP:=0;
P_RESET:=0;
END_IF;
IF (MODE=1 AND P AND START AND P_RESET=0 AND NOT P1) THEN //速度变化模式1.
IF SPEED_TEMP<=(SPEED1*RAMP1) THEN
SPEED_TEMP:=SPEED_TEMP+STEP1;
SPEED_OUT:=SPEED_LAST+SPEED_TEMP;
END_IF;
IF SPEED_TEMP<=(SPEED1*(RAMP1+RAMP2)) AND SPEED_TEMP>=(SPEED1*RAMP1) THEN
SPEED_TEMP:=SPEED_TEMP+STEP2;
SPEED_OUT:=SPEED_LAST+SPEED_TEMP;
END_IF;
IF SPEED_TEMP<=SPEED1 AND SPEED_TEMP>=(SPEED1*(RAMP1+RAMP2)) THEN
SPEED_TEMP:=SPEED_TEMP+STEP3;
SPEED_OUT:=SPEED_LAST+SPEED_TEMP;
END_IF;
IF SPEED_TEMP>=SPEED1 THEN
P_RESET:=1;
SPEED_TEMP:=0;
END_IF;
END_IF;
IF (MODE=1 AND P AND START AND P_RESET=0 AND P1) THEN //速度异常变化模式1.
IF SPEED_OUT SPEED_OUT:=SPEED_OUT+STEP5;
END_IF;
IF SPEED_OUT>SPEED1 THEN
SPEED_OUT:=SPEED_OUT-STEP5;
END_IF;
IF SPEED_OUT<=(SPEED1+STEP5) AND SPEED_OUT>=(SPEED1-STEP5) THEN
P_RESET:=1;
END_IF;
SPEED_TEMP:=0;
END_IF;
IF (MODE=2 AND P AND START AND P_RESET=0 AND NOT P1) THEN //速度变化模式2.
IF SPEED_TEMP<=(SPEED2*RAMP1) THEN
SPEED_TEMP:=SPEED_TEMP+STEP1;
SPEED_OUT:=SPEED_LAST+SPEED_TEMP;
END_IF;
IF SPEED_TEMP<=SPEED2*(RAMP1+RAMP2) AND SPEED_TEMP>=(SPEED2*RAMP1) THEN
SPEED_TEMP:=SPEED_TEMP+STEP2;
SPEED_OUT:=SPEED_LAST+SPEED_TEMP;
END_IF;
IF SPEED_TEMP<=SPEED2 AND SPEED_TEMP>=(SPEED2*(RAMP1+RAMP2)) THEN
SPEED_TEMP:=SPEED_TEMP+STEP3;
SPEED_OUT:=SPEED_LAST+SPEED_TEMP;
END_IF;
IF SPEED_TEMP>=SPEED2 THEN
P_RESET:=1;
SPEED_TEMP:=0;
END_IF;
END_IF;
IF (MODE=2 AND P AND START AND P_RESET=0 AND P1) THEN //速度异常变化模式2
IF SPEED_OUT SPEED_OUT:=SPEED_OUT+STEP5;
END_IF;
IF SPEED_OUT>SPEED2 THEN
SPEED_OUT:=SPEED_OUT-STEP5;
END_IF;
IF SPEED_OUT<=(SPEED2+STEP5) AND SPEED_OUT>=(SPEED2-STEP5) THEN
P_RESET:=1;
END_IF;
SPEED_TEMP:=0;
END_IF;
IF (MODE=3 AND P AND START AND P_RESET=0 AND NOT P1) THEN //速度变化模式3.
........
........
3. 牵升比程序自动计算设计
FUNCTION_BLOCK FB1612
NAME:SPEED_SELECT
{S7_TASKLIST:='OB100';
S7_m_c := 'true';
S7_blockview:='big'
}
VAR_INPUT
SPEED_BASE{ S7_m_c := 'true' }:REAL;
K1{ S7_m_c := 'true' }:REAL;
K2{ S7_m_c := 'true' }:REAL;
K3{ S7_m_c := 'true' }:REAL;
K4{ S7_m_c := 'true' }:REAL;
K5{ S7_m_c := 'true' }:REAL;
K6{ S7_m_c := 'true' }:REAL;
K7{ S7_m_c := 'true' }:REAL;
K8{ S7_m_c := 'true' }:REAL;
K9{ S7_m_c := 'true' }:REAL;
K10{ S7_m_c := 'true' }:REAL;
K11{ S7_m_c := 'true' }:REAL;
.......
.......
James-007