代码案例

<< 点击显示目录 >>

主页  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();