作者 | 主题 |
---|---|
荧惑mars 侠士 经验值:1413 发帖数:157 精华帖:6 |
楼主 2023-06-28 20:31:02
主题:工艺轴Wincc画面模板+博图工艺轴FB wincc版本:v7.5 sp2 up11 tia版本:v18 net版本:v18 step7版本:v5.5 sp4(安装这个有助于wincc和新版本固件PLC通信) 结构变量+变量前缀,之前都是做画面模板弹窗,这个直接就在主画面显示了…… 博图软件这边工艺轴编程如下: 程序内容如下: REGION 使能 #MC_Power(Axis := #Axis, Enable := #Enable, StartMode := 1, StopMode := 0, Status => #Enabled, Error => #ErrorArray[0], ErrorID => #ErrorIDArray[0], ErrorInfo => #ErrorInfoArray[0]); END_REGION REGION 复位 #MC_Reset(Axis := #Axis, Execute := #Reset, Restart := #Restart, Error => #ErrorArray[1], ErrorID => #ErrorIDArray[1], ErrorInfo => #ErrorInfoArray[1]); END_REGION REGION 回零 #MC_Home(Axis := #Axis, Execute := #Home, Position := 0.0, Mode := 0, Error => #ErrorArray[2], ErrorID => #ErrorIDArray[2], ErrorInfo => #ErrorInfoArray[2]); IF #MC_Home.Done AND NOT #Homed_P THEN #Homed := TRUE; #Homed_Temp := TRUE; ELSIF (#Home AND NOT #Home_P) OR NOT #Enable THEN #Homed := FALSE; #Homed_Temp := FALSE; END_IF; #Homed_P := #MC_Home.Done; #Home_P := #Home; END_REGION REGION 暂停 #MC_Halt(Axis := #SpeedAxis, Execute := #Pause, Error => #ErrorArray[3], ErrorID => #ErrorIDArray[3], ErrorInfo => #ErrorInfoArray[3]); END_REGION REGION 绝对定位 IF #Homed_Temp THEN #MC_MoveAbsolute(Axis := #PositioningAxis, Execute := #MoveAbsolute, Position := #Position, Velocity := #Velocity_Move, Direction := 3, Error => #ErrorArray[4], ErrorID => #ErrorIDArray[4], ErrorInfo => #ErrorInfoArray[4]); END_IF; END_REGION REGION 相对定位 #MC_MoveRelative(Axis := #PositioningAxis, Execute := #MoveRelative, Distance := #Position, Velocity := #Velocity_Move, Error => #ErrorArray[5], ErrorID => #ErrorIDArray[5], ErrorInfo => #ErrorInfoArray[5]); END_REGION REGION 定位完成 IF (#MC_MoveAbsolute.Done OR #MC_MoveRelative.Done) AND NOT #PositionOK_P THEN #PositionOK := TRUE; ELSIF #MoveAbsolute OR #MoveRelative OR NOT #Enable THEN #PositionOK := FALSE; END_IF; #PositionOK_P := #MC_MoveAbsolute.Done OR #MC_MoveRelative.Done; END_REGION REGION 连续运动 #MC_MoveVelocity(Axis := #SpeedAxis, Execute := #MoveVelocity, Velocity := #Velocity_Continuous, Direction := 0, Error => #ErrorArray[6], ErrorID => #ErrorIDArray[6], ErrorInfo => #ErrorInfoArray[6]); END_REGION REGION 点动 #MC_MoveJog(Axis := #SpeedAxis, JogForward := #JogForward, JogBackward := #JogBackward, Velocity := #Velocity_Jog, Error => #ErrorArray[7], ErrorID => #ErrorIDArray[7], ErrorInfo => #ErrorInfoArray[7]); END_REGION REGION 更改加减速参数 #MC_ChangeDynamic(Axis := #SpeedAxis, Execute := #ChangeDynamic, ChangeRampUp := TRUE, RampUpTime := #RampUpTime, ChangeRampDown := TRUE, RampDownTime := #RampDownTime, ChangeEmergency := TRUE, EmergencyRampTime := #EmergencyRampTime, ChangeJerkTime := TRUE, JerkTime := #JerkTime, Error => #ErrorArray[8], ErrorID => #ErrorIDArray[8], ErrorInfo => #ErrorInfoArray[8]); END_REGION REGION 更改最大速度和启动速度 IF NOT #MC_Power.Status THEN #MC_WriteParam(Execute := #WriteParam, Parameter := #PositioningAxis.DynamicLimits.MaxVelocity, Value := #MaxVelocity, Error => #ErrorArray[9], ErrorID => #ErrorIDArray[9], ErrorInfo => #ErrorInfoArray[9]); #MC_WriteParam(Execute := #WriteParam, Parameter := #PositioningAxis.DynamicLimits.MinVelocity, Value := #MinVelocity, Error => #ErrorArray[10], ErrorID => #ErrorIDArray[10], ErrorInfo => #ErrorInfoArray[10]); END_IF; END_REGION REGION 当前状态 #ActualPosition := #PositioningAxis.ActualPosition; #ActualVelocity := #PositioningAxis.ActualVelocity; END_REGION REGION 标记错误位置 IF NOT #ErrorTemp AND NOT #Reset THEN FOR #i := 0 TO 10 DO IF #ErrorArray[#i] THEN #ErrorTag := INT_TO_WORD(#i); #ErrorID := #ErrorIDArray[#i]; #ErrorInfo := #ErrorInfoArray[#i]; #Error := TRUE; #ErrorTemp := TRUE; EXIT; END_IF; END_FOR; ELSIF #Reset THEN #ErrorTag := 16#0000; #ErrorID := 16#0000; #ErrorInfo := 16#0000; #Error := FALSE; #ErrorTemp := FALSE; END_IF; END_REGION 总体思路:利用指令→工艺→Motion_Control 错误标识:for循环,按从小到大优先级,记录错误标签,赋值相应标签的错误ID和错误信息。由复位按钮复位错误。 有不对之处,欢迎斧正
活到老,学到老。
|