S7-1200PLC运动控制程序-结构化编程控制5轴伺服项目每一功能 具有一个项目都有的功能:自动_手动_单步_暂停后原位置继续运行_轴断电保持_报警功能_气缸运行及报警. 2.每个功能块可以无数次重复调用可以建成库用时调出即可 3.伺服不光脉冲控制同时使用了速度模式扭矩模式应用.上位机为威纶通触摸屏.参考本案例熟悉掌握结构化编程技巧,扩展逻辑思维. 商品包括: S7-1200PLC程序 威纶通触摸屏程序 配套软件 台达伺服手册 博图V14SP1以上都可打开刚接手五轴伺服项目的时候看着控制柜里五台伺服的接线头皮发麻。但真正上手写程序才发现结构化编程才是保命神器——尤其是当老板临时加需求说第六台伺服下周到货的时候...一、手动模式里的乾坤手动JOG功能看似简单但要让五个轴互不干扰还得考虑急停连锁。我直接在FB里封装了轴使能、方向信号和限位检测FUNCTION_BLOCK FB_AxisManual VAR_INPUT bEnable : BOOL; // 总使能 iDirection : INT; // 方向指令 END_VAR VAR_OUTPUT wActualPos : WORD; // 当前位置 bLimitSwitch : BOOL; // 限位触发 END_VAR // 核心逻辑区 IF bEnable AND NOT bLimitSwitch THEN CASE iDirection OF 1: Axis.JogForward(); -1: Axis.JogBackward(); END_CASE END_IF;每新增一个轴只需要在OB1里像搭积木一样调用Axis1Manual(bEnable:ManualMode, iDirection:HMI_Direction1);重点是把每个轴的背景数据块分开这样连方向按钮都不用重新映射。二、自动运行里的状态机自动流程最怕卡死我用枚举类型做了个七步状态机TYPE E_AutoState : ( IDLE, PREHEAT, CLAMPING, POSITIONING, PROCESSING, UNCLAMP, ERROR ); END_TYPE配合Step7自带的运动控制指令定位完成后自动跳转下一步。暂停功能其实就是在状态变量前加了个TRIGGER函数恢复时从断点状态继续执行。三、伺服三模式切换黑科技S7-1200PLC运动控制程序-结构化编程控制5轴伺服项目每一功能 具有一个项目都有的功能:自动_手动_单步_暂停后原位置继续运行_轴断电保持_报警功能_气缸运行及报警. 2.每个功能块可以无数次重复调用可以建成库用时调出即可 3.伺服不光脉冲控制同时使用了速度模式扭矩模式应用.上位机为威纶通触摸屏.参考本案例熟悉掌握结构化编程技巧,扩展逻辑思维. 商品包括: S7-1200PLC程序 威纶通触摸屏程序 配套软件 台达伺服手册 博图V14SP1以上都可打开项目要求既要精准定位又要防过载于是搞了个模式切换策略// 定位阶段用脉冲模式 MC_MoveAbsolute(Axis:Axis1, Position:500.0, Velocity:300.0); // 接触工件切扭矩模式 IF Torque 10.0 THEN MC_ChangeControlMode(Axis:Axis1, Mode:TORQUE); END_IF // 空跑时切速度模式 MC_MoveVelocity(Axis:Axis1, Velocity:150.0);秘诀是在扭矩模式里设置软限位防止伺服憋死。台达伺服的参数设置手册被我翻烂了最后发现参数H0D-32才是扭矩补偿的关键。四、断电保持的骚操作突然断电后的位置记忆用S7-1200的保持存储器编码器Z相复位// 在DB中声明保持变量 DATA_BLOCK AxisData { S7_Retain : true } STRUCT LastPosition : REAL; RestoreFlag : BOOL; END_STRUCT; END_DATA_BLOCK // 上电后自动执行 IF NOT RestoreFlag THEN MC_Home(Axis:Axis1, Position:DB.AxisData.LastPosition); RestoreFlag : TRUE; END_IF配合威纶通触摸屏的配方功能连上次加工的工件尺寸都能记住。五、报警处理的一鱼三吃报警处理FB被我设计成三级响应// 一级报警暂停 IF Temperature 80.0 THEN AlarmQueue.Push(Alarm1001); MC_Stop(Axis:Axis1); END_IF // 二级报警急停 IF Current 20.0 THEN AlarmQueue.Push(Alarm2001); EMERGENCY_STOP(); END_IF // 三级报警断电 IF Vibration 5.0 THEN AlarmQueue.Push(Alarm3001); PowerOffDelay(10); END_IF报警信息通过指针数组传给触摸屏还能自动生成故障日志。现在看报警灯闪烁都有种迷之成就感...这个项目让我明白好的结构化程序就像乐高积木——气缸控制块直接复制粘贴到第六轴改个参数就能用。威纶通的离线模拟功能更是救命神器没接PLC就能测界面逻辑。最后交机时设备厂家看到程序结构直接要走了FB模板这大概就是工程师的高光时刻吧