回复:主题:一个PLC/PCS7高级工程师近二十年来的所做的SIEMENS-PLC/PCS7项目清单.

James-007

  • 帖子

    219
  • 精华

    0
  • 被关注

    13

论坛等级:游侠

注册时间:2004-01-07

普通 普通 如何晋级?

发布于 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
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54699条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。