<< 点击显示目录 >> 主页 ACOPOS 6D使用手册 > mapp 6D > 功能块 > McAcp6D > Function blocks > MC_BR_SegGetInfo_Acp6D > 代码案例 |
获得定子温度代码案例
CASE Ctrl.uStep OF
0:
Ctrl.FB_R_TRIG_StartRead.CLK := gSegmentInfo.bStartRead;
Ctrl.FB_R_TRIG_StartRead();
IF Ctrl.bStartRead OR Ctrl.FB_R_TRIG_StartRead.Q THEN
gSegmentInfo.bError := FALSE;
gSegmentInfo.bDone := FALSE;
Ctrl.uStep := 10;
Ctrl.bStartRead := FALSE;
Ctrl.uCurrentSegmentIndex := 0;
Ctrl.sStatus := '0 → 10 Start to Read Temperature';
END_IF;
10: (*----------------------- 获取定子的ID信息 -----------------------*)
Ctrl.FB_AsmGetSegment.Assembly := ADR(gAssembly6D);
Ctrl.FB_AsmGetSegment.Enable := TRUE;
Ctrl.uStep := 11;
Ctrl.sStatus := '10 → 11 WAIT FOR Ctrl.FB_AsmGetSegment.Valid';
11:
IF Ctrl.FB_AsmGetSegment.Valid THEN
Ctrl.uTotalSegmentFeedback := Ctrl.FB_AsmGetSegment.TotalCount;
Ctrl.aSegmentInfo[Ctrl.uCurrentSegmentIndex].Segment6D := Ctrl.FB_AsmGetSegment.Segment;
Ctrl.aSegmentInfo[Ctrl.uCurrentSegmentIndex].uSegmentID := Ctrl.FB_AsmGetSegment.AdditionalInfo.SegmentID;
Ctrl.uCurrentSegmentIndex := Ctrl.uCurrentSegmentIndex + 1;
IF Ctrl.uCurrentSegmentIndex <= Ctrl.FB_AsmGetSegment.TotalCount - 1 THEN
Ctrl.FB_AsmGetSegment.Next := FALSE;
Ctrl.uStep := 12;
ELSE
//Ctrl.FB_AsmGetSegment.Enable := FALSE;
Ctrl.uStep := 20;
Ctrl.sStatus := '11 → 20 Start to Get Segment Info';
Ctrl.uCurrentSegmentIndex := 0;
END_IF;
END_IF;
IF Ctrl.FB_AsmGetSegment.Error THEN
Ctrl.uStep := 255;
Ctrl.sStatus := '11 → 255 FB_AsmGetSegment Error';
END_IF;
12:
Ctrl.FB_AsmGetSegment.Next := TRUE;
Ctrl.uStep := 10;
20: (*----------------------- 获取定子的ID信息 -----------------------*)
IF Ctrl.aSegmentInfo[Ctrl.uCurrentSegmentIndex].Segment6D.controlif <> 0 THEN
Ctrl.FB_SegGetInfo.Segment := ADR(Ctrl.aSegmentInfo[Ctrl.uCurrentSegmentIndex].Segment6D);
Ctrl.FB_SegGetInfo.Execute := TRUE;
Ctrl.uStep := 21;
ELSE
Ctrl.uStep := 255;
Ctrl.sStatus := '20 → 255 ERROR Segment6D.controlif = 0';
END_IF;
21:
IF Ctrl.FB_SegGetInfo.Done THEN
Ctrl.aSegmentInfo[Ctrl.uCurrentSegmentIndex].rAmplifierTemperature := Ctrl.FB_SegGetInfo.SegInfo.AmplifierTemp;
Ctrl.aSegmentInfo[Ctrl.uCurrentSegmentIndex].rCPUTemperature := Ctrl.FB_SegGetInfo.SegInfo.CPUTemp;
Ctrl.aSegmentInfo[Ctrl.uCurrentSegmentIndex].rMotorTemperature := Ctrl.FB_SegGetInfo.SegInfo.MotorTemp;
Ctrl.aSegmentInfo[Ctrl.uCurrentSegmentIndex].rPowerConsumption := Ctrl.FB_SegGetInfo.SegInfo.Power;
Ctrl.uCurrentSegmentIndex := Ctrl.uCurrentSegmentIndex + 1;
IF Ctrl.uCurrentSegmentIndex <= Ctrl.FB_AsmGetSegment.TotalCount - 1 THEN
Ctrl.FB_SegGetInfo.Execute := FALSE;
Ctrl.uStep := 20;
ELSE
//Ctrl.FB_SegGetInfo.Execute := FALSE;
Ctrl.uStep := 100;
Ctrl.sStatus := '20 → 100 DONE FB_SegGetInfo';
Ctrl.uCurrentSegmentIndex := 0;
Ctrl.FB_AsmGetSegment.Enable := FALSE;
Ctrl.FB_SegGetInfo.Execute := FALSE;
END_IF;
END_IF;
IF Ctrl.FB_SegGetInfo.Error THEN
Ctrl.uStep := 255;
Ctrl.sStatus := '20 → 255 FB_SegGetInfo Error';
END_IF;
100:
(*----------------------- mappView界面信息关联-----------------------*)
Segement_INFO.Segement_ID[Ctrl.uCurrentSegmentIndex] := Ctrl.aSegmentInfo[Ctrl.uCurrentSegmentIndex].uSegmentID;
Segement_INFO.CPU_Temp[Ctrl.uCurrentSegmentIndex] := Ctrl.aSegmentInfo[Ctrl.uCurrentSegmentIndex].rCPUTemperature;
Segement_INFO.Motor_Temp[Ctrl.uCurrentSegmentIndex] := Ctrl.aSegmentInfo[Ctrl.uCurrentSegmentIndex].rMotorTemperature;
Segement_INFO.Power[Ctrl.uCurrentSegmentIndex] := Ctrl.aSegmentInfo[Ctrl.uCurrentSegmentIndex].rPowerConsumption;
Segement_INFO.Amplifier_Temp[Ctrl.uCurrentSegmentIndex] := Ctrl.aSegmentInfo[Ctrl.uCurrentSegmentIndex].rAmplifierTemperature;
(*----------------------- 范围超限判断 -----------------------*)
IF Ctrl.aSegmentInfo[Ctrl.uCurrentSegmentIndex].rCPUTemperature > Ctrl.rLimitTemperature
OR Ctrl.aSegmentInfo[Ctrl.uCurrentSegmentIndex].rMotorTemperature > Ctrl.rLimitTemperature
OR Ctrl.aSegmentInfo[Ctrl.uCurrentSegmentIndex].rAmplifierTemperature > Ctrl.rLimitTemperature THEN
Ctrl.bBeyondLimitTemperature := TRUE;
ELSE
Ctrl.bBeyondLimitTemperature := FALSE;
END_IF;
Ctrl.uCurrentSegmentIndex := Ctrl.uCurrentSegmentIndex + 1;
IF Ctrl.uCurrentSegmentIndex >= TOTAL_SEGMENT_NUM THEN
Ctrl.uStep := 0;
gSegmentInfo.bDone := TRUE;
gSegmentInfo.bError := FALSE;
END_IF;
255:
gSegmentInfo.bDone := TRUE;
gSegmentInfo.bError := TRUE;
IF Ctrl.bStartRead THEN
Ctrl.FB_SegGetInfo.Execute := FALSE;
Ctrl.FB_AsmGetSegment.Enable := FALSE;
Ctrl.uStep := 0;
Ctrl.bStartRead := FALSE;
Ctrl.uCurrentSegmentIndex := 0;
END_IF;
END_CASE;
(*-----------------------功能块执行-----------------------*)
Ctrl.FB_AsmGetSegment();
Ctrl.FB_SegGetInfo();