codesys平台PLC改造案例:
剃齿机【YN4232C】【YP4250】
X:
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 安全门 513
Y:
刻度盘:刀全压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~T199 100ms
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 //【手动,沿】
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;
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 97
LC1D25 74
继电器 CAD50M7C 44
4P底座 RXZE1M4C 7.5
4P继电器 RXM4AB2BD 24
辅助触点 LADN40C 18
LADN02C 9
PLC:西门子200smart ST60-0AA1 650
PLC:禾川 HCQ0-1100-D 625
明纬开关电源:NDR-240 DC24v-240w 187.88
AC220漏电开关: IC65N 1P C25 17.7
三相插座:EA9XN416 21.64