您现在所在的是:

西门子SIEMENS

回帖:2个,阅读:27 [上一页] [1] [下一页]
57
378817198
文章数:2
年度积分:57
历史总积分:57
注册时间:2026/5/14
发站内信
发表于:2026/5/14 10:34:49
#0楼
附件:
[本地下载]


我是个小白,这是我的作业,当我高液位到了后,电机停止了3S,阀B也关闭3S,下一步正常是电机正转,阀B不会再开了,现在电机一动,阀B又开了,各位大佬帮我看看哪里有问题
附件 434054a9-a48f-4ea6-b5b4-b297d44bd743.jpg



4965
INotKissBoy
文章数:979
年度积分:329
历史总积分:4965
注册时间:2018/9/15
发站内信
发表于:2026/5/14 13:59:21
#1楼
//=====================================================================
//  液体混合搅拌控制程序 - SCL语言
//  工艺要求:根据液位传感器控制阀门、电机搅拌及排液全流程
//=====================================================================

//--------------------------变量定义区--------------------------------
VAR
   // 输入信号
   StartBtn        : BOOL;     // 启动按钮(触摸屏)
   StopBtn         : BOOL;     // 停止按钮(触摸屏)
   L_Low           : BOOL;     // 低液位传感器L(OFF=未动作,ON=动作)
   M_Mid           : BOOL;     // 中液位传感器M
   H_High          : BOOL;     // 高液位传感器H
   FaultM2         : BOOL;     // 变频器故障信号

   // 输出信号
   YV1             : BOOL;     // 阀A(液体A进料)
   YV2             : BOOL;     // 阀B(液体B进料)
   YV3             : BOOL;     // 阀C(排液阀)
   MotorM1_Run     : BOOL;     // 搅拌电机运行指令
   MotorM1_Fwd     : BOOL;     // 电机正转指令
   MotorM1_Rev     : BOOL;     // 电机反转指令
   MotorM2_Run     : BOOL;     // 故障备用电机运行
   MotorFreq       : REAL;     // 电机运行频率

   // 系统状态
   Step            : INT := 0;// 步序号:0=初始,1=注A,2=注B+搅拌1,3=搅拌2,4=搅拌3,5=排液,6=结束
   CycleCnt1       : INT := 0; // 搅拌1阶段循环计数
   CycleCnt2       : INT := 0; // 搅拌2阶段循环计数
   CycleCnt3       : INT := 0; // 搅拌3阶段循环计数
   DrainTimer      : TON;      // 排液倒计时(9s)
   StirTimer       : TON;      // 搅拌阶段计时
   SystemActive    : BOOL := FALSE; // 系统运行标志
END_VAR

//--------------------------步序控制主逻辑----------------------------
// 初始步:系统未运行,所有输出复位
IF Step = 0 THEN
   YV1 := FALSE;
   YV2 := FALSE;
   YV3 := FALSE;
   MotorM1_Run := FALSE;
   MotorM1_Fwd := FALSE;
   MotorM1_Rev := FALSE;
   MotorFreq := 0.0;
   CycleCnt1 := 0;
   CycleCnt2 := 0;
   CycleCnt3 := 0;
   DrainTimer(IN:=FALSE);
   StirTimer(IN:=FALSE);

   // 按下启动按钮进入注A步
   IF StartBtn AND NOT SystemActive THEN
       SystemActive := TRUE;
       Step := 1;
   END_IF;
END_IF;

// 步1:注液体A,直到中液位
IF Step = 1 THEN
   YV1 := TRUE;
   IF M_Mid THEN // 到达中液位
       YV1 := FALSE;
       Step := 2;
       StirTimer(IN:=TRUE, PT:=T#3S); // 搅拌前停3秒
   END_IF;
END_IF;

// 步2:注液体B + 搅拌阶段1(10Hz,5s正转/反转+3s停)
IF Step = 2 THEN
   YV2 := TRUE;
   // 搅拌前等待3秒
   IF StirTimer.Q THEN
       StirTimer(IN:=FALSE);
       // 搅拌阶段1循环控制
       IF CycleCnt1 < 3 THEN
           // 正转10Hz运行5s
           IF NOT MotorM1_Run THEN
               MotorM1_Run := TRUE;
               MotorM1_Fwd := TRUE;
               MotorFreq := 10.0;
               StirTimer(IN:=TRUE, PT:=T#5S);
           ELSIF StirTimer.Q AND MotorM1_Fwd THEN
               MotorM1_Fwd := FALSE;
               StirTimer(IN:=TRUE, PT:=T#3S); // 停3秒
           ELSIF StirTimer.Q AND NOT MotorM1_Fwd AND NOT MotorM1_Rev THEN
               MotorM1_Rev := TRUE;
               StirTimer(IN:=TRUE, PT:=T#5S);
           ELSIF StirTimer.Q AND MotorM1_Rev THEN
               MotorM1_Rev := FALSE;
               CycleCnt1 := CycleCnt1 + 1;
               StirTimer(IN:=TRUE, PT:=T#3S); // 停3秒
           END_IF;
       ELSE
           // 搅拌阶段1完成,等待高液位信号
           IF H_High THEN
               YV2 := FALSE;
               Step := 3;
               MotorM1_Run := FALSE;
               StirTimer(IN:=TRUE, PT:=T#3S); // 停3秒
           END_IF;
       END_IF;
   END_IF;
END_IF;

// 步3:搅拌阶段2(20Hz,5s正转/反转+3s停,3个周期)
IF Step = 3 THEN
   IF StirTimer.Q THEN
       StirTimer(IN:=FALSE);
       IF CycleCnt2 < 3 THEN
           IF NOT MotorM1_Run THEN
               MotorM1_Run := TRUE;
               MotorM1_Fwd := TRUE;
               MotorFreq := 20.0;
               StirTimer(IN:=TRUE, PT:=T#5S);
           ELSIF StirTimer.Q AND MotorM1_Fwd THEN
               MotorM1_Fwd := FALSE;
               StirTimer(IN:=TRUE, PT:=T#3S);
           ELSIF StirTimer.Q AND NOT MotorM1_Fwd AND NOT MotorM1_Rev THEN
               MotorM1_Rev := TRUE;
               StirTimer(IN:=TRUE, PT:=T#5S);
           ELSIF StirTimer.Q AND MotorM1_Rev THEN
               MotorM1_Rev := FALSE;
               CycleCnt2 := CycleCnt2 + 1;
               StirTimer(IN:=TRUE, PT:=T#3S);
           END_IF;
       ELSE
           Step := 4;
           MotorM1_Run := FALSE;
           StirTimer(IN:=TRUE, PT:=T#3S); // 停3秒
       END_IF;
   END_IF;
END_IF;

// 步4:搅拌阶段3(50Hz,3s正转/反转+2s停,3个周期)
IF Step = 4 THEN
   IF StirTimer.Q THEN
       StirTimer(IN:=FALSE);
       IF CycleCnt3 < 3 THEN
           IF NOT MotorM1_Run THEN
               MotorM1_Run := TRUE;
               MotorM1_Fwd := TRUE;
               MotorFreq := 50.0;
               StirTimer(IN:=TRUE, PT:=T#3S);
           ELSIF StirTimer.Q AND MotorM1_Fwd THEN
               MotorM1_Fwd := FALSE;
               StirTimer(IN:=TRUE, PT:=T#2S);
           ELSIF StirTimer.Q AND NOT MotorM1_Fwd AND NOT MotorM1_Rev THEN
               MotorM1_Rev := TRUE;
               StirTimer(IN:=TRUE, PT:=T#3S);
           ELSIF StirTimer.Q AND MotorM1_Rev THEN
               MotorM1_Rev := FALSE;
               CycleCnt3 := CycleCnt3 + 1;
               StirTimer(IN:=TRUE, PT:=T#2S);
           END_IF;
       ELSE
           Step := 5;
           MotorM1_Run := FALSE;
           StirTimer(IN:=TRUE, PT:=T#3S); // 停3秒
       END_IF;
   END_IF;
END_IF;

// 步5:排液阶段(阀C打开+10Hz正转搅拌)
IF Step = 5 THEN
   IF StirTimer.Q THEN
       StirTimer(IN:=FALSE);
       YV3 := TRUE;
       MotorM1_Run := TRUE;
       MotorM1_Fwd := TRUE;
       MotorFreq := 10.0;

       // 低液位触发后启动9s倒计时
       IF NOT L_Low THEN
           DrainTimer(IN:=TRUE, PT:=T#9S);
       END_IF;

       // 倒计时结束完成周期
       IF DrainTimer.Q THEN
           YV3 := FALSE;
           MotorM1_Run := FALSE;
           MotorM1_Fwd := FALSE;
           Step := 6;
       END_IF;
   END_IF;
END_IF;

// 步6:周期结束,复位到初始状态
IF Step = 6 THEN
   SystemActive := FALSE;
   Step := 0;
END_IF;

// 故障处理:变频器故障时备用电机M2运行
IF FaultM2 THEN
   MotorM2_Run := TRUE;
ELSE
   MotorM2_Run := FALSE;
END_IF;

// 紧急停止处理(任意步序均可复位)
IF StopBtn THEN
   Step := 0;
END_IF;       去感谢豆包吧
“你之所以还在喜欢女人,是因为还没有遇到一个让你心动的男人,而我,就是辣个男人。”
                                                                                                           — — — —  鲁 迅
57
378817198
文章数:2
年度积分:57
历史总积分:57
注册时间:2026/5/14
发站内信
发表于:2026/5/14 14:51:18
#2楼
回复 #1楼 INotKissBoy
豆包的试过了,不行啊

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2026 Gkong.com, All Rights Reserved

62.4004