codesys平台PLC改造案例:
剃齿机【YN4232C】【YP4250】
X:
绿灯 2个
红灯 1个
-------------------------------
急停 红 1个
按钮 绿 2个
按钮 红 1个
2档 6个
3档 3个
X24 B限位 Y17 A移
X26 A限位 Y16 B移
X00 启动 400 X01 急退 401 X02 左右停,右停(面板) 402 X03 自动,手自动 403 X04 A移正剃 404 正剃,正逆剃 X05 2次,循环 405 X06 4次,循环 406 X07 刀正转 407 X10 刀反转 408 X11 顶尖松,面板 411【手动】 X12 刻度盘下正 412 X13 刻度盘上反 413 X14 工作台往返,面板 500【手动】先右 X15 冷却泵开,面板 501 X16 保护,液力 502 X17 保护,过载 503 X20 顶尖紧(工作台) 504【自动】 X21 保护顶尖(工作台) 505 X22 刻度盘起点 506 X23 点行程【上行程开关】 507 X24 B限位【工作台】 510 X25 点光程【上行程开关】 511 X26 A限位【工作台】 512 X27 安全门 513Y:
刻度盘:刀全压0.5s后可动
Y00
Y01
Y02
Y03
Y04 排屑电机 434
Y05 冷却电机 435
Y06 刀正转 436
Y07 刀反转 437Y10 全压启动 530
Y11 刻度盘正转下 531
Y12 刻度盘反转上 532
Y13 刻度盘刹车 533
Y14 阀,顶尖松 534
Y15 阀,光程【慢速】 535
Y16 阀,B移 536 【X24B限位】
Y17 阀,A移537 【X26A限位】
M:
M100 启动
M101 自动A移
M102 自动B移
M103 点行程
M105 刻盘下
M116 A移
M117 B移
T:
T000~T199100ms
T40: 自动运行,坚持2.5s,等待点行程释放
T41: 平台移动0.2s后,刻度盘可以下
T42: 刻度盘刹车1.3s
T43: A移0.3s后,刀正
T44: A移0.3s后,刀反
T45: 刀动,0.8s后,全压
T46: 急退0.6s后,加0.3s
T47: 1s
T50: 急退保持0.6s
T51: 刀动,0.1s后,可AB移
T53: 手动0.5s后
T54: 全压0.5s后,刻度盘可下
T55: 停止1s后,失效光程
声明:
FUNCTION_BLOCK FByn4232c VAR_INPUT x00启动:BOOL; //启动 x01急退:BOOL; //急退 x02停车位置A:BOOL; //右停 x03自动:BOOL; //自动 x04A移正剃:BOOL; //顺逆剃 x05循环2次:BOOL; //循环2次 x06循环4次:BOOL; //循环4次 x07刀正:BOOL; //刀正 x10刀反:BOOL; //刀反 x11顶尖松:BOOL; //顶尖松 x12刻盘下:BOOL; //刻盘下 x13刻盘上:BOOL; //刻盘上 x14AB移:BOOL; //工作台【A移】 x15冷却泵:BOOL; //冷却泵 x16保护液力:BOOL; //保护,液力 x17保护过载:BOOL; //保护,过载 x20顶尖紧:BOOL; //顶尖紧 x21保护顶尖:BOOL; //保护顶尖 x22刻盘起点:BOOL; //刻盘起点 x23点行程:BOOL; //点行程 x24B限位:BOOL; //B限位 x25慢移:BOOL; //点光程 x26A限位:BOOL; //A限位 x27保护门:BOOL; //保护门 END_VAR VAR_OUTPUT y04排屑:BOOL; //排屑 y05冷却:BOOL; //冷却 y06刀正:BOOL; //刀正 y07刀反:BOOL; //刀反 y10全压:BOOL; //全压 y11刻盘下:BOOL; //刻盘下 y12刻盘上:BOOL; //刻盘上 y13刻盘刹车:BOOL; //刻盘刹车 y14顶尖松:BOOL; //顶尖松 y15慢移:BOOL; //慢移 y16B移:BOOL; //B移 y17A移:BOOL; //A移 END_VAR VAR R_TRIGs: ARRAY[0..200] OF R_TRIG; //【手动】上升沿 F_TRIGs: ARRAY[0..200] OF F_TRIG; //【手动】 T40: TON;//自动坚持2.5s T41: TON;//平台移动0.2s后 T42: TP;//刹车1.3s T43: TON;//A移0.3s,刀正 T44: TON;//A移0.3s,刀反 T45: TON;//0.8s,全压 T46: TON;//急退0.6s+0.3s T47: TON;//1s T50: TON;//急退保持0.6s T51: TON;//刀动0.1s后,可AB移 T53: TON;//手动0.5s后 T54: TON;//全压0.5s后,刻度盘可下 T55: TON;//停止1s后,失效光程 M100自动: BOOL;//自动运行 M141换件:BOOL; M260手动安全: BOOL;//手动安全 M420程序记: INT; M401急退: BOOL; M406程序结束: BOOL; // 自动刀正 M110自动刀正: BOOL; // A移 M101A移: BOOL; // 正剃 M214正剃: BOOL; // 自动刀反 M111自动刀反: BOOL; M102B移: BOOL; M215反剃: BOOL; M214正逆剃: BOOL; M210停车位置A: BOOL; M421光程次数: INT; END_VAR手动:
24.7.15
//维修电工:祁成 24.7.15 //【开关沿】 //==========上升沿======================= R_TRIGs[00](CLK:=x00启动 , Q=> ); R_TRIGs[01](CLK:=x01急退 , Q=> ); R_TRIGs[02](CLK:=x02停车位置A , Q=> ); R_TRIGs[03](CLK:=x03自动 , Q=> ); R_TRIGs[04](CLK:=x04A移正剃 , Q=> ); R_TRIGs[05](CLK:=x05循环2次 , Q=> ); R_TRIGs[06](CLK:=x06循环4次 , Q=> ); R_TRIGs[07](CLK:=x07刀正 , Q=> ); R_TRIGs[10](CLK:=x10刀反 , Q=> ); R_TRIGs[11](CLK:=x11顶尖松 , Q=> ); R_TRIGs[12](CLK:=x12刻盘下 , Q=> ); R_TRIGs[13](CLK:=x13刻盘上 , Q=> ); R_TRIGs[14](CLK:=x14AB移 , Q=> ); R_TRIGs[15](CLK:=x15冷却泵 , Q=> ); R_TRIGs[16](CLK:=x16保护液力 , Q=> ); R_TRIGs[17](CLK:=x17保护过载 , Q=> ); R_TRIGs[20](CLK:=x20顶尖紧 , Q=> ); R_TRIGs[21](CLK:=x21保护顶尖 , Q=> ); R_TRIGs[22](CLK:=x22刻盘起点 , Q=> ); R_TRIGs[23](CLK:=x23点行程 , Q=> ); R_TRIGs[24](CLK:=x24B限位 , Q=> ); R_TRIGs[25](CLK:=x25慢移 , Q=> ); R_TRIGs[26](CLK:=x26A限位 , Q=> ); R_TRIGs[27](CLK:=x27保护门 , Q=> ); //==========下降沿======================= F_TRIGs[00](CLK:=x00启动 , Q=> ); F_TRIGs[01](CLK:=x01急退 , Q=> ); F_TRIGs[02](CLK:=x02停车位置A , Q=> ); F_TRIGs[03](CLK:=x03自动 , Q=> ); F_TRIGs[04](CLK:=x04A移正剃 , Q=> ); F_TRIGs[05](CLK:=x05循环2次 , Q=> ); F_TRIGs[06](CLK:=x06循环4次 , Q=> ); F_TRIGs[07](CLK:=x07刀正 , Q=> ); F_TRIGs[10](CLK:=x10刀反 , Q=> ); F_TRIGs[11](CLK:=x11顶尖松 , Q=> ); F_TRIGs[12](CLK:=x12刻盘下 , Q=> ); F_TRIGs[13](CLK:=x13刻盘上 , Q=> ); F_TRIGs[14](CLK:=x14AB移 , Q=> ); F_TRIGs[15](CLK:=x15冷却泵 , Q=> ); F_TRIGs[16](CLK:=x16保护液力 , Q=> ); F_TRIGs[17](CLK:=x17保护过载 , Q=> ); F_TRIGs[20](CLK:=x20顶尖紧 , Q=> ); F_TRIGs[21](CLK:=x21保护顶尖 , Q=> ); F_TRIGs[22](CLK:=x22刻盘起点 , Q=> ); F_TRIGs[23](CLK:=x23点行程 , Q=> ); F_TRIGs[24](CLK:=x24B限位 , Q=> ); F_TRIGs[25](CLK:=x25慢移 , Q=> ); F_TRIGs[26](CLK:=x26A限位 , Q=> ); F_TRIGs[27](CLK:=x27保护门 , Q=> ); //================================== //手动,下降沿 IF F_TRIGs[3].Q //【手动,沿】 x03自动 THEN // y04排屑:=FALSE; y05冷却:=FALSE; y06刀正:=FALSE; y07刀反:=FALSE; y10全压:=FALSE; y11刻盘下:=FALSE; y12刻盘上:=FALSE; y13刻盘刹车:=FALSE; y14顶尖松:=FALSE; y15慢移:=FALSE; y16B移:=FALSE; y17A移:=FALSE; M100自动:=0; M141换件:=0; M420程序记:=0; END_IF //手动 动作↑ T53(IN:=NOT x03自动 , PT:=T#0.5S , Q=> , ET=> ); //冷却泵 IF R_TRIGs[15].Q AND T53.Q THEN y04排屑 :=TRUE; y05冷却 :=TRUE; END_IF IF NOT x15冷却泵 AND NOT x03自动 THEN y04排屑 :=FALSE; y05冷却 :=FALSE; END_IF //刀正 IF R_TRIGs[7].Q AND T53.Q AND NOT y07刀反 AND M260手动安全 THEN y06刀正 :=TRUE; END_IF IF NOT x07刀正 AND NOT x03自动 THEN y06刀正 :=FALSE; END_IF //刀反 IF R_TRIGs[10].Q AND T53.Q AND NOT y06刀正 AND M260手动安全 THEN y07刀反 :=TRUE; END_IF IF NOT x10刀反 AND NOT x03自动 THEN y07刀反 :=FALSE; END_IF //全压,0.8s后 T45(IN:=y06刀正 OR y07刀反 , PT:=T#0.8S , Q=> , ET=> ); IF T45.Q THEN y10全压:=TRUE; ELSE y10全压:=FALSE; END_IF //刻度盘【下】 //刻盘下hou刹车 IF R_TRIGs[12].Q AND NOT x25慢移 AND T53.Q AND NOT x13刻盘上 AND NOT y13刻盘刹车 // AND M260手动安全 THEN y12刻盘上 :=FALSE; y11刻盘下 :=TRUE; END_IF IF NOT x12刻盘下 AND NOT x03自动 THEN y11刻盘下 :=FALSE; END_IF IF x25慢移 THEN y11刻盘下 :=FALSE; END_IF //刻度盘【上】 //刻度盘上hou刹车 IF R_TRIGs[13].Q AND NOT x22刻盘起点 AND T53.Q AND NOT x12刻盘下 AND NOT y13刻盘刹车 // AND M260手动安全 THEN y11刻盘下 :=FALSE; y12刻盘上:=TRUE; END_IF IF R_TRIGs[01].Q AND NOT x22刻盘起点 AND T53.Q //x01急退【刻盘上】 THEN y13刻盘刹车:=FALSE; y11刻盘下:=FALSE; y12刻盘上:=TRUE; END_IF IF NOT x13刻盘上 AND NOT x03自动 THEN y12刻盘上 :=FALSE; END_IF IF x22刻盘起点 THEN y12刻盘上 :=FALSE; END_IF //刻度盘刹车1.3s【脉冲】 T42(IN:= NOT y11刻盘下 AND NOT y12刻盘上 , PT:=T#1.3S , Q=> , ET=> );//TP 脉冲 IF T42.Q THEN y13刻盘刹车:=TRUE; ELSE y13刻盘刹车:=FALSE; END_IF //顶尖松 IF R_TRIGs[11].Q AND NOT y06刀正 AND NOT y07刀反 AND T53.Q //刀动时,顶尖不能松 THEN y14顶尖松 :=TRUE; END_IF IF NOT x11顶尖松 AND NOT x03自动 THEN y14顶尖松 :=FALSE; END_IF //慢移 IF R_TRIGs[25].Q OR x25慢移 THEN y15慢移:=TRUE; END_IF IF x22刻盘起点 THEN y15慢移:=FALSE; END_IF //【AB移】 //A移 IF R_TRIGs[14].Q AND NOT x26A限位 AND T53.Q THEN y16B移 :=FALSE; y17A移 :=TRUE; END_IF IF y16B移 AND x24B限位 AND NOT x26A限位 AND x14AB移 AND T53.Q THEN y16B移 :=FALSE; y17A移 :=TRUE; END_IF //B移 IF R_TRIGs[14].Q AND x26A限位 AND NOT x24B限位 AND T53.Q THEN y17A移 :=FALSE; y16B移 :=TRUE; END_IF IF y17A移 AND x26A限位 AND NOT x24B限位 AND x14AB移 AND T53.Q THEN y17A移 :=FALSE; y16B移 :=TRUE; END_IF //停 IF NOT x14AB移 AND NOT x03自动 THEN y16B移 :=FALSE; y17A移 :=FALSE; END_IF //手动安全M260 IF NOT x03自动 AND NOT x11顶尖松 AND x16保护液力 AND x21保护顶尖 AND x27保护门 AND NOT y14顶尖松 THEN M260手动安全:=TRUE; ELSE M260手动安全:=FALSE; END_IF //【机械保护】 IF x24B限位 THEN y16B移:=FALSE;END_IF IF x26A限位 THEN y17A移:=FALSE;END_IF //============================== // M260手动安全:=TRUE;//仿真调试用自动:
24.7.15 启动行添加无限慢行程次数
//24.7.15 //自动开关量 M100 // 【0】 2 3 5 16 17 20 21 22 26 27 //=================================== //时序图 //【0】【26A限】-----------------重置 //45 //0.3s刀正 //45 6 //0.8s全压 //456 10 //0.5s刻盘下 //456 10 11 //【x23点行,x26A限】-------------位移 //456 10 16 //=================================== //【24B限位】 //45 //0.3s刀正 //45 7 //0.8s全压 //457 10 //0.5s刻盘下 //457 10 11 //【x23点行,x24B限】 //457 10 17 //======= //25慢移 // 15 //==================================== //自动,沿 IF R_TRIGs[03].Q OR F_TRIGs[03].Q //【自动,沿】 THEN // y04排屑:=FALSE; y05冷却:=FALSE; y06刀正:=FALSE; y07刀反:=FALSE; y10全压:=FALSE; y11刻盘下:=FALSE; y12刻盘上:=FALSE; y13刻盘刹车:=FALSE; y14顶尖松:=FALSE; y15慢移:=FALSE; y16B移:=FALSE; y17A移:=FALSE; M100自动:=0; M141换件:=0; M420程序记:=0; END_IF //顶尖 IF x20顶尖紧 AND x03自动 THEN y14顶尖松:=FALSE;//顶尖【紧】 END_IF IF NOT x20顶尖紧 AND NOT y06刀正 AND NOT y07刀反 AND NOT M100自动 AND x03自动 THEN y14顶尖松:=TRUE;//顶尖【松】 END_IF //【换工件】 IF R_TRIGs[20].Q THEN M141换件:=1; END_IF //启动【M100】 IF R_TRIGs[00].Q AND x20顶尖紧 AND x03自动 AND NOT x01急退 AND M141换件 //【新工件】 AND x16保护液力 AND x17保护过载 AND x21保护顶尖 AND x27保护门 AND (x24B限位 OR x26A限位) THEN M100自动:=TRUE; M420程序记:=0; M214正剃:=x04A移正剃;//【正逆剃】 M215反剃:= NOT M214正剃;//【正逆剃】 M210停车位置A:=x02停车位置A; M421光程次数:=0; IF x05循环2次 THEN M421光程次数:=2;END_IF IF x06循环4次 THEN M421光程次数:=4;END_IF END_IF //急退 IF R_TRIGs[01].Q OR M401急退 AND x03自动 THEN y04排屑:=FALSE; y05冷却:=FALSE; y06刀正:=FALSE; y07刀反:=FALSE; y10全压:=FALSE; y11刻盘下:=FALSE; y14顶尖松:=FALSE; y15慢移:=FALSE; y16B移:=FALSE; y17A移:=FALSE; M100自动:=FALSE; M141换件:=0; M420程序记:=0; M406程序结束:=0; //=============== IF NOT x22刻盘起点 AND NOT y13刻盘刹车 THEN y12刻盘上:=TRUE; M401急退:=FALSE; END_IF IF x22刻盘起点 THEN M401急退:=FALSE; END_IF END_IF //【排屑,冷却泵】 IF M100自动 AND x03自动 THEN y04排屑:=TRUE; y05冷却:=TRUE; END_IF //==================================== //【左右限位】00000000000000000000000000000000000 R_TRIGs[124](CLK:= x24B限位 AND M100自动 , Q=> ); R_TRIGs[126](CLK:= x26A限位 AND M100自动 , Q=> ); IF R_TRIGs[124].Q OR R_TRIGs[126].Q THEN y06刀正:=FALSE; y07刀反:=FALSE; y10全压:=FALSE; y11刻盘下:=FALSE; y12刻盘上:=FALSE; y16B移:=FALSE; y17A移:=FALSE; END_IF //【45】0.3s【正逆剃】1111111111111111111111111111 T43(IN:= x26A限位 AND M100自动 , PT:=T#0.3S , Q=> , ET=> ); T44(IN:= x24B限位 AND M100自动 , PT:=T#0.3S , Q=> , ET=> ); //【A移】 刀 【正反】 IF x24B限位 AND M100自动 AND T44.Q THEN IF M214正剃 THEN // A移 正剃 y07刀反:=FALSE; y06刀正:=TRUE; END_IF IF NOT M214正剃 THEN y06刀正:=FALSE; y07刀反:=TRUE; END_IF END_IF //【B移】 刀 【正反】 IF x26A限位 AND M100自动 AND T43.Q THEN IF M214正剃 THEN // B移 反剃 y06刀正:=FALSE; y07刀反:=TRUE; END_IF IF NOT M214正剃 THEN y07刀反:=FALSE; y06刀正:=TRUE; END_IF END_IF //456 10 【11】 //【全压】0.5s【刻盘下】2222222222222222222222222222222 T54(IN:=y10全压 AND M100自动 , PT:= T#0.5S, Q=> , ET=> ); R_TRIGs[110](CLK:= T54.Q , Q=> ); IF R_TRIGs[110].Q AND NOT y15慢移 AND NOT y12刻盘上 AND NOT y13刻盘刹车 THEN y11刻盘下:=TRUE; END_IF //======================= //【程序计】 IF y15慢移 AND R_TRIGs[26].Q THEN M420程序记:=M420程序记+1; END_IF//【计光程—_2~4】 IF y15慢移 AND R_TRIGs[24].Q THEN M420程序记:=M420程序记+1; END_IF//【计光程—_2~4】 //======================= // 刻盘结束 IF R_TRIGs[110].Q AND y15慢移 AND M420程序记=M421光程次数 THEN//【全压】【慢移】【程序计】 y12刻盘上:=TRUE; M406程序结束:=TRUE; END_IF //456 10 16 //【x23点行】>>>>AB移33333333333333333333333333333333333333 R_TRIGs[123](CLK:= x23点行程 AND M100自动 , Q=> );//【x23点行】 IF R_TRIGs[123].Q //x23点行程 THEN y11刻盘下:=FALSE; y12刻盘上:=FALSE; IF x24B限位 AND NOT x26A限位 THEN y17A移:=TRUE;END_IF //【A移】y16B移:=FALSE; IF x26A限位 AND NOT x24B限位 THEN y16B移:=TRUE;END_IF //【B移】y17A移:=FALSE; END_IF //【光程】【全压0.5s后】4444444444444444444444444444444444444 IF y15慢移 AND T54.Q AND NOT M406程序结束 THEN //全压后0.5s后 IF x24B限位 AND NOT x26A限位 THEN y17A移:=TRUE;END_IF // AND T54.Q IF x26A限位 AND NOT x24B限位 THEN y16B移:=TRUE;END_IF // AND T54.Q END_IF //【程序结束】 IF M210停车位置A AND M406程序结束 AND x26A限位 THEN M401急退:=TRUE; END_IF //停车位A IF NOT M210停车位置A AND M406程序结束 AND x24B限位 THEN M401急退:=TRUE; END_IF //停车位B //================ //【bug修复】 IF x24B限位 AND x26A限位 AND M100自动 THEN M401急退:=TRUE; M406程序结束:=TRUE; END_IF //维修电工:祁成 qq750273008 2024-7-15 //===================启动条件:
输入: 035【16】【17】【21】【22】【27】,24或者26程序:448步
//手动 动作↑
T53(IN:=NOT x03自动 , PT:=T#0.5S , Q=> , ET=> );
//冷却泵
R_TRIG_0(CLK:=x15冷却泵 , Q=> );
F_TRIG_0(CLK:=x15冷却泵 , Q=> );IF R_TRIG_0.Q AND T53.Q THEN
y04排屑 S=TRUE;
y05冷却 :=TRUE;//跟置位效果一样的
END_IFIF F_TRIG_0.Q AND T53.Q THEN
y04排屑 :=FALSE;
y05冷却 :=FALSE;
END_IF//=========================
软件:
GX Developer
安装码:
570-986818410 或者998-598638072。
800ms后刀全压,100ms后,工作台才能左右。
物料清单:
施耐德 LC1D32-M7C
LC1D25
继电器 CAD50M7C
4P底座 RXZE1M4C
4P继电器 RXM4AB2BD
辅助触点 LADN40C
LADN02C
PLC:西门子200smart ST60-0AA1
PLC:禾川HCQ0-1100-D
明纬开关电源:NDR-240 DC24v-240w
AC220漏电开关: IC65N 1P C25
三相插座:EA9XN416