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和错误信息。由复位按钮复位错误。
有不对之处,欢迎斧正