PLC, HMI, SCADA, INVERTERS, TUTORIALS, INDUSTRIAL AUTOMATION

00:00
SIEMENS STEP7 SCL Функция запуска приводов вручную SIMOREG DC MASTER 6RA24 6RA70 Simovert

 

// Функция запуска двигателей с приводами вручную.
// Функция реализует:
//  - включение конкретного двигателя вперёд;
//  - включение конкретного двигателя назад;
//  - остановку конкретного двигателя.

FUNCTION ManualRunDrives2W : VOID
TITLE ='Функция запуска двигателей с приводами вручную.';
CONST
   DRIVESNUM    := 18;           // Общее количество приводов. 
END_CONST

VAR_INPUT
   Jointly       : ARRAY [1..19] OF BOOL;    // Массив, определяющий совместную или раздельную работу приводов.
   Run           : ARRAY [1..18] OF BOOL;    // Массив с флагами запущенного состояния приводов.
      
   LWMDriveNum      : INT;       // Номер привода НЧМ      - 6RA24.
   CalenderDriveNum : INT;       // Номер привода каландра - 6RA24.
   CWM_90DriveNum   : INT;       // Номер привода МЧХ-90   - 6RA24.
   HWMDriveNum      : INT;       // Номер привода ВЧМ      - 6RA70.  
   DrivesAmount     : INT;       // Количество приводов. 
   ManualMode       : BOOL;      // Ручной режим работы линии.
   LineTaskSpeed    : INT;       // Заданная скорость линии. 
   StopLine         : BOOL;      // Остановить линию.
   DisableDrives    : BOOL;      // Отключить приводы.   
        
   CoilTranspIndex   : INT;      // Индекс транспортёра закатки.
   LineMaxSpeed      : INT;      // Максимальная скорость линии.
   
//-> Управление транспортёрами вручную - включение вперёд:    
   RunLWMLoader          : BOOL; // Запустить питатель НЧМ.
   RunHWMLoader          : BOOL; // Запустить питатель ВЧМ. 
   RunShrinkRoller       : BOOL; // Запустить усадочный рольганг.
   RunCheckRoller        : BOOL; // Запустить рольганг контроля.
   RunCalender           : BOOL; // Запустить каландр.
   RunMarkingTransp      : BOOL; // Запустить маркировочный транспортёр.    
   RunGlueTransp         : BOOL; // Запустить транспортёр сушки клея.
   RunCooling1Transp     : BOOL; // Запустить транспортёр охлаждения №1.
   RunCooling2Transp     : BOOL; // Запустить транспортёр охлаждения №2.
   RunCooling3transp     : BOOL; // Запустить транспортёр охлаждения №3.
   RunLongitudelCut      : BOOL; // Запустить транспортёр продольного реза.
   RunCutTransp          : BOOL; // Запустить транспортёр отрезания заготовок.
   RunCoilTransp         : BOOL; // Запустить транспортёр намотки на катушки.
   RunLWM                : BOOL; // Запустить НЧМ.
   RunHWM                : BOOL; // Запустить ВЧМ.
   RunReceivingTransp    : BOOL; // Запустить приёмный транспортёр.
   RunCWM_90             : BOOL; // Запустить МЧХ-90.
   RunCalenderLoader     : BOOL; // Запустить питатель каландра.
   
//-> Управление транспортёрами вручную - остановка.   
   StopLWMLoader       : BOOL;   // Остановить питатель НЧМ.
   StopHWMLoader       : BOOL;   // Остановить питатель ВЧМ. 
   StopShrinkRoller    : BOOL;   // Остановить усадочный рольганг.
   StopCheckRoller     : BOOL;   // Остановить рольганг контроля.
   StopCalender        : BOOL;   // Остановить каландр.
   StopMarkingTransp   : BOOL;   // Остановить маркировочный транспортёр.    
   StopGlueTransp      : BOOL;   // Остановить транспортёр сушки клея.
   StopCooling1Transp  : BOOL;   // Остановить транспортёр охлаждения №1.
   StopCooling2Transp  : BOOL;   // Остановить транспортёр охлаждения №2.
   StopCooling3transp  : BOOL;   // Остановить транспортёр охлаждения №3.
   StopLongitudelCut   : BOOL;   // Остановить транспортёр продольного реза.
   StopCutTransp       : BOOL;   // Остановить транспортёр отрезания заготовок.
   StopCoilTransp      : BOOL;   // Остановить транспортёр намотки на катушки.
   StopLWM             : BOOL;   // Остановить НЧМ.
   StopHWM             : BOOL;   // Остановить ВЧМ.
   StopReceivingTransp : BOOL;   // Остановить приёмный транспортёр.
   StopCWM_90          : BOOL;   // Остановить МЧХ-90.
   StopCalenderLoader  : BOOL;   // Остановить питатель каландра.

//-> Управление транспортёрами вручную - разрешение работы:    
   AllowRunLWMLoader       : BOOL; // Разрешить запуск питателя НЧМ.
   AllowRunHWMLoader       : BOOL; // Разрешить запуск питателя ВЧМ. 
   AllowRunShrinkRoller    : BOOL; // Разрешить запуск усадочного рольганга.
   AllowRunCheckRoller     : BOOL; // Разрешить запуск рольганга контроля.
   AllowRunCalender        : BOOL; // Разрешить запуск каландра.
   AllowRunMarkingTransp   : BOOL; // Разрешить запуск маркировочного транспортёра.    
   AllowRunGlueTransp      : BOOL; // Разрешить запуск транспортёра сушки клея.
   AllowRunCooling1Transp  : BOOL; // Разрешить запуск транспортёра охлаждения №1.
   AllowRunCooling2Transp  : BOOL; // Разрешить запуск транспортёра охлаждения №2.
   AllowRunCooling3transp  : BOOL; // Разрешить запуск транспортёра охлаждения №3.
   AllowRunLongitudelCut   : BOOL; // Разрешить запуск транспортёра продольного реза.
   AllowRunCutTransp       : BOOL; // Разрешить запуск транспортёра отрезания заготовок.
   AllowRunCoilTransp      : BOOL; // Разрешить запуск транспортёра намотки на катушки.
   AllowRunLWM             : BOOL; // Разрешить запуск НЧМ.
   AllowRunHWM             : BOOL; // Разрешить запуск ВЧМ.
   AllowRunReceivingTransp : BOOL; // Разрешить запуск приёмного транспортёра.
   AllowRunCWM_90          : BOOL; // Разрешить запуск МЧХ-90.
   AllowRunCalenderLoader  : BOOL; // Разрешить запуск питателя каландра.
   
//-> Управление транспортёрами вручную - включение назад приводов постоянного тока:       
   RunBackLWM            : BOOL;   // Запустить назад НЧМ.
   RunBackHWM            : BOOL;   // Запустить назад ВЧМ.
   RunBackCWM_90         : BOOL;   // Запустить назад МЧХ-90.
   RunBackCalender       : BOOL;   // Запустить каландр назад. 
END_VAR

VAR_OUTPUT
   OutLoopData   : ARRAY [1..DRIVESNUM] OF LOOPPARAMS;  // Массив скоростей и параметров петель.
   OutDriveTask  : ARRAY [1..DRIVESNUM] OF W2DRIVETASK; // Массив заданий для приводов.
   Start_Inclined_Transp     : BOOL ;                   // Включить наклонный и весовой транспортеры (171,A4.7,OUT2)
   Start_Sampling_RollTable  : BOOL ;                   // Включить рольганг отбора заготовок (174,A4.7,OUT5)
END_VAR  

VAR_IN_OUT
   Memory  : LINESTATE;                                 // Буфер для хранения состояния приводов.
   
//   ManualAggrFactor : ARRAY[1..18] OF REAL;             // Массив с коэффициентами скоростей агрегатов для ручного режима работы. 
END_VAR          

VAR_TEMP
   RunAggrCmd       : ARRAY [1..DRIVESNUM] OF BOOL;     // Массив команд на ручное включение приводов.
   StopAggrCmd      : ARRAY [1..DRIVESNUM] OF BOOL;     // Массив команд на ручной останов приводов.  
   AllowRunAggrCmd  : ARRAY [1..DRIVESNUM] OF BOOL;     // Массив разрешений на ручное включение приводов. 
   RunBackAggrCmd   : ARRAY [1..DRIVESNUM] OF BOOL;     // Маcсив команд на реверсивное включение приводов.    
   LineSpeed        : INT;                              // Текущее значение скорости линии.    
   DriveCounter     : INT;                              // Счётчик приводов.
   DrivesOffCounter : INT;                              // Счётчик отключенных приводов.  
   SeparateWorkSign : BOOL;                             // Признак хотя бы одного привода, работающего раздельно от линии.
END_VAR

BEGIN
//-------------------------------------------------------------------------------


//-> Остановка всех приводов:
IF StopLine      = TRUE OR
   DisableDrives = TRUE
  THEN
  DriveCounter := 0;
  WHILE DriveCounter < DrivesAmount 
    DO
    DriveCounter := DriveCounter + 1; 
    OutDriveTask[DriveCounter].NetworkControl := TRUE;  // Выбрать управление по сети.   
    OutDriveTask[DriveCounter].RUN   := FALSE;          // Остановить привод.   
    Memory.WorkingAggr[DriveCounter] := FALSE;          // Сбросить флаги включенных вперёд приводов.
    Memory.RunBackAggr[DriveCounter] := FALSE;          // Сбросить флаги включенных назад приводов.
    Memory.ManualStarted             := FALSE;          // Сбросить флаг выполнения ручного режима.
  END_WHILE;          
END_IF; 
//-------------------------------------------------------------------------------
//--> Определение наличия раздельно работающих приводов:
  SeparateWorkSign := FALSE;
  DriveCounter := 0;  
  WHILE DriveCounter < DrivesAmount 
    DO
    DriveCounter := DriveCounter + 1;
    IF Jointly[DriveCounter] = FALSE
      THEN
      SeparateWorkSign := TRUE;  
    END_IF;    
  END_WHILE;  
//--<
//-------------------------------------------------------------------------------    
           
//-> Инициализация массива включений приводов вручную:            
    RunAggrCmd[1]  := RunLWMLoader;
    RunAggrCmd[2]  := RunHWMLoader; 
    RunAggrCmd[3]  := RunShrinkRoller;
    RunAggrCmd[4]  := RunCheckRoller;
    RunAggrCmd[5]  := RunCalender;
    RunAggrCmd[6]  := RunMarkingTransp;    
    RunAggrCmd[7]  := RunGlueTransp;
    RunAggrCmd[8]  := RunCooling1Transp;
    RunAggrCmd[9]  := RunCooling2Transp;
    RunAggrCmd[10] := RunCooling3transp;
    RunAggrCmd[11] := RunLongitudelCut;
    RunAggrCmd[12] := RunCutTransp;
    RunAggrCmd[13] := RunCoilTransp;
    RunAggrCmd[14] := RunLWM;
    RunAggrCmd[15] := RunHWM;
    RunAggrCmd[16] := RunReceivingTransp;
    RunAggrCmd[17] := RunCWM_90;
    RunAggrCmd[18] := RunCalenderLoader;
    
//-> Инициализация массива отключений приводов вручную:    
    StopAggrCmd[1]  := StopLWMLoader;
    StopAggrCmd[2]  := StopHWMLoader; 
    StopAggrCmd[3]  := StopShrinkRoller;
    StopAggrCmd[4]  := StopCheckRoller;
    StopAggrCmd[5]  := StopCalender;
    StopAggrCmd[6]  := StopMarkingTransp;    
    StopAggrCmd[7]  := StopGlueTransp;
    StopAggrCmd[8]  := StopCooling1Transp;
    StopAggrCmd[9]  := StopCooling2Transp;
    StopAggrCmd[10] := StopCooling3transp;
    StopAggrCmd[11] := StopLongitudelCut;
    StopAggrCmd[12] := StopCutTransp;
    StopAggrCmd[13] := StopCoilTransp;
    StopAggrCmd[14] := StopLWM;
    StopAggrCmd[15] := StopHWM;
    StopAggrCmd[16] := StopReceivingTransp;
    StopAggrCmd[17] := StopCWM_90;
    StopAggrCmd[18] := StopCalenderLoader;

//-> Инициализация массива разрешений на работу приводов:    
    AllowRunAggrCmd[1]  := AllowRunLWMLoader;
    AllowRunAggrCmd[2]  := AllowRunHWMLoader; 
    AllowRunAggrCmd[3]  := AllowRunShrinkRoller;
    AllowRunAggrCmd[4]  := AllowRunCheckRoller;
    AllowRunAggrCmd[5]  := AllowRunCalender;
    AllowRunAggrCmd[6]  := AllowRunMarkingTransp;    
    AllowRunAggrCmd[7]  := AllowRunGlueTransp;
    AllowRunAggrCmd[8]  := AllowRunCooling1Transp;
    AllowRunAggrCmd[9]  := AllowRunCooling2Transp;
    AllowRunAggrCmd[10] := AllowRunCooling3transp;
    AllowRunAggrCmd[11] := AllowRunLongitudelCut;
    AllowRunAggrCmd[12] := AllowRunCutTransp;
    AllowRunAggrCmd[13] := AllowRunCoilTransp;
    AllowRunAggrCmd[14] := AllowRunLWM;
    AllowRunAggrCmd[15] := AllowRunHWM;
    AllowRunAggrCmd[16] := AllowRunReceivingTransp;
    AllowRunAggrCmd[17] := AllowRunCWM_90;
    AllowRunAggrCmd[18] := AllowRunCalenderLoader;
    
//-> Инициализация массива реверсивных включений:
    RunBackAggrCmd[1]  := FALSE;
    RunBackAggrCmd[2]  := FALSE;
    RunBackAggrCmd[3]  := FALSE;
    RunBackAggrCmd[4]  := FALSE;
    RunBackAggrCmd[5]  := RunBackCalender;
    RunBackAggrCmd[6]  := FALSE;
    RunBackAggrCmd[7]  := FALSE;
    RunBackAggrCmd[8]  := FALSE;
    RunBackAggrCmd[9]  := FALSE;
    RunBackAggrCmd[10] := FALSE;
    RunBackAggrCmd[11] := FALSE;
    RunBackAggrCmd[12] := FALSE;
    RunBackAggrCmd[14] := FALSE;    
    RunBackAggrCmd[14] := RunBackLWM;
    RunBackAggrCmd[15] := RunBackHWM;
    RunBackAggrCmd[16] := FALSE;
    RunBackAggrCmd[17] := RunBackCWM_90;
    RunBackAggrCmd[18] := FALSE;
//-------------------------------------------------------------------------------
//##> Управление приводами в ручном режиме:    
//-> Подготовка приводов к работе: 
//  IF ManualMode       = TRUE //AND
     //SeparateWorkSign = FALSE
//    THEN
IF ManualMode       = TRUE //OR
   //SeparateWorkSign = TRUE
  THEN 
 
//--> Приведение приводов в готовность к работе:        
    DriveCounter := 0;
    WHILE DriveCounter < DrivesAmount 
      DO   
      DriveCounter := DriveCounter + 1;
//    IF DriveCounter <> 5  // 5 - индекс каландра. 
//     THEN         
      OutDriveTask[DriveCounter].NetworkControl := TRUE;  // Выбрать управление по сети.
      OutDriveTask[DriveCounter].NoCoastStop    := TRUE;  // Нет торможения выбегом.
      OutDriveTask[DriveCounter].NoQuickStop    := TRUE;  // Нет быстрого торможения.     
      OutDriveTask[DriveCounter].Enable         := TRUE;  // Включить привод.
//    END_IF;
   
//-> Обнуление коэффициентов скорости только для НЧМ:
      IF StopAggrCmd[DriveCounter] = TRUE
         THEN
         IF DriveCounter = LWMDriveNum 
            THEN   
            Memory.AggrTaskFactor[DriveCounter] := 0.0;
         END_IF;
      END_IF;   
    END_WHILE;   
 
//==> Запоминание состояния ВКЛ-ОТКЛ:    
    DriveCounter := 0;
    WHILE DriveCounter < DrivesAmount 
      DO
      DriveCounter := DriveCounter + 1;  
//-> Остановка выбранного двигателя:      
      IF AllowRunAggrCmd[DriveCounter] = FALSE OR
         StopAggrCmd[DriveCounter]     = TRUE
        THEN
        Memory.WorkingAggr[DriveCounter] := FALSE; 
        Memory.RunBackAggr[DriveCounter] := FALSE;        
      ELSE
//-> Включение выбранного двигателя вперёд:        
        IF AllowRunAggrCmd[DriveCounter] = TRUE AND
           RunAggrCmd[DriveCounter]      = TRUE
          THEN
          Memory.WorkingAggr[DriveCounter] := TRUE;
          Memory.RunBackAggr[DriveCounter] := FALSE;                         
        END_IF;
//-> Включение выбранного двигателя назад:
        IF AllowRunAggrCmd[DriveCounter]  = TRUE AND
           RunBackAggrCmd[DriveCounter]   = TRUE
          THEN
          Memory.WorkingAggr[DriveCounter] := FALSE;
          Memory.RunBackAggr[DriveCounter] := TRUE;
        END_IF;     
      END_IF;
//==<    
      IF Memory.WorkingAggr[DriveCounter] = TRUE OR
         Memory.RunBackAggr[DriveCounter] = TRUE 
        THEN
//-> Выставить флаг выполнения ручного режима:        
        Memory.ManualStarted := TRUE;    
//-> Запустить привод:  
        IF Memory.RunBackAggr[DriveCounter] = TRUE
          THEN
            LineSpeed := - LineTaskSpeed;            
        ELSE
            LineSpeed := LineTaskSpeed;
        END_IF;
//--> Задание общих для всех типов приводов параметров:            
        OutLoopData[DriveCounter].V :=  REAL_TO_INT(Memory.SpeedFactor[DriveCounter] * INT_TO_REAL(LineSpeed)); 
//-> Задание скорости для транспортёра закатки:
        IF DriveCounter = CoilTranspIndex
           THEN
           OutLoopData[DriveCounter].V := LineMaxSpeed;
        END_IF;       
        OutDriveTask[DriveCounter].NetworkControl  := TRUE;     // Выбрать управление по сети.
        
//--> Задание параметров только для частотных преобразователей:
        IF DriveCounter <> LWMDriveNum      AND // 6RA24.
           DriveCounter <> CalenderDriveNum AND // 6RA24.
           DriveCounter <> CWM_90DriveNum   AND // 6RA24.
           DriveCounter <> HWMDriveNum          // 6RA70.
           THEN
            OutDriveTask[DriveCounter].ClockWise      := TRUE;  // Вращение поля по часовой стрелке.
            OutDriveTask[DriveCounter].CountelockWise := FALSE; // Вращение поля против часовой стрелки.
            OutDriveTask[DriveCounter].NoCoastStop    := TRUE;  // Нет торможения выбегом.
            OutDriveTask[DriveCounter].NoQuickStop    := TRUE;  // Нет быстрого торможения.     
            OutDriveTask[DriveCounter].RUN            := TRUE;  // Запустить привод.
            OutDriveTask[DriveCounter].Enable         := TRUE;  // Включить привод.
            OutDriveTask[DriveCounter].FaultsReset    := TRUE;  // Сбросить текущие неисправности ЧП.
        END_IF;    
//--> Задание параметров только для приводов постоянного тока 6RA24:            
        IF DriveCounter = LWMDriveNum      OR   // 6RA24.
           DriveCounter = CalenderDriveNum OR   // 6RA24.
           DriveCounter = CWM_90DriveNum        // 6RA24.
           THEN
            OutDriveTask[DriveCounter].Inching1       := FALSE; // Активировать толчковый режим на частоте 1.    
            OutDriveTask[DriveCounter].Inching2       := FALSE; // Активировать толчковый режим на частоте 2.    
            OutDriveTask[DriveCounter].NetworkControl := TRUE;  // Выбрать управление по сети.    
            OutDriveTask[DriveCounter].ClockWise      := FALSE; // Вращение поля по часовой стрелке.    
            OutDriveTask[DriveCounter].CountelockWise := FALSE; // Вращение поля против часовой стрелки.    
            OutDriveTask[DriveCounter].RaiseMOP       := FALSE; // Увеличить значение MOP.    
            OutDriveTask[DriveCounter].LowerMOP       := FALSE; // Уменьшить значение MOP.    
            OutDriveTask[DriveCounter].NoExternalFlt1 := TRUE;  // Снять сигнал о внешней неисправности.    
            OutDriveTask[DriveCounter].Run            := TRUE;  // Запустить частотный преобразователь.    
            OutDriveTask[DriveCounter].NoCoastStop    := TRUE;  // Нет торможения выбегом.     
            OutDriveTask[DriveCounter].NoQuickStop    := TRUE;  // Нет быстрого торможения.     
            OutDriveTask[DriveCounter].Enable         := TRUE;  // Включить привод.    
            OutDriveTask[DriveCounter].RFGEnable      := TRUE;  // Включить задатчик интенсивности.    
            OutDriveTask[DriveCounter].RFGStart       := TRUE;  // Запустить задатчик интенсивности.    
            OutDriveTask[DriveCounter].RFGSetpointOn  := TRUE;  // Задействовать вход предустановки генератора пилообразной функции.    
            OutDriveTask[DriveCounter].FaultsReset    := TRUE;  // Сбросить текущие неисправности ЧП.            
        END_IF;
//--> Задание параметров только для приводов постоянного тока 6RA70:
        IF DriveCounter = HWMDriveNum           // 6RA70.
            THEN
            OutDriveTask[DriveCounter].Inching1       := FALSE; // Активировать толчковый режим на частоте 1.    
            OutDriveTask[DriveCounter].Inching2       := FALSE; // Активировать толчковый режим на частоте 2.    
            OutDriveTask[DriveCounter].NetworkControl := TRUE;  // Выбрать управление по сети.    
            OutDriveTask[DriveCounter].ClockWise      := TRUE;  // Вращение поля по часовой стрелке.    
            OutDriveTask[DriveCounter].CountelockWise := TRUE;  // Вращение поля против часовой стрелки.    
            OutDriveTask[DriveCounter].RaiseMOP       := FALSE; // Увеличить значение MOP.    
            OutDriveTask[DriveCounter].LowerMOP       := FALSE; // Уменьшить значение MOP.    
            OutDriveTask[DriveCounter].NoExternalFlt1 := TRUE;  // Снять сигнал о внешней неисправности.    
            OutDriveTask[DriveCounter].Run            := TRUE;  // Запустить частотный преобразователь.    
            OutDriveTask[DriveCounter].NoCoastStop    := TRUE;  // Нет торможения выбегом.     
            OutDriveTask[DriveCounter].NoQuickStop    := TRUE;  // Нет быстрого торможения.     
            OutDriveTask[DriveCounter].Enable         := TRUE;  // Включить привод.    
            OutDriveTask[DriveCounter].RFGEnable      := TRUE;  // Включить генератор пилообразной функции.    
            OutDriveTask[DriveCounter].RFGStart       := TRUE;  // Запустить генератор пилообразной функции.    
            OutDriveTask[DriveCounter].RFGSetpointOn  := TRUE;  // Задействовать вход предустановки генератора пилообразной функции.    
            OutDriveTask[DriveCounter].FaultsReset    := TRUE;  // Сбросить текущие неисправности ЧП.        
        END_IF;  
      ELSE
//-> Остановить привод:
        OutDriveTask[DriveCounter].RUN := FALSE;             // Остановить привод.
//------------------------------------------------------------------------------------------------------------        
//-> Сброс индивидуальных коээфициентов приводов по индивидуальным стопам:
    //    IF StopAggrCmd[DriveCounter] = TRUE
    //      THEN
    //      Memory.AggrTaskFactor[DriveCounter] := 0.0;
    //    END_IF;
//------------------------------------------------------------------------------------------------------------                        
      END_IF; 
    END_WHILE;
    
//-> Проверка на выключение всех приводов:     
    DrivesOffCounter := 0;
    DriveCounter     := 0;
    WHILE DriveCounter < DrivesAmount 
      DO
      DriveCounter := DriveCounter + 1; 
      IF Memory.WorkingAggr[DriveCounter] = FALSE AND
         Memory.RunBackAggr[DriveCounter] = FALSE 
         THEN 
         DrivesOffCounter := DrivesOffCounter + 1;
      END_IF;   
    END_WHILE;
    IF DrivesOffCounter = DrivesAmount
      THEN
//-> Сбросить флаг выполнения ручного режима:
      Memory.ManualStarted := FALSE;        
    END_IF;
END_IF;   
//##< Завершение выполнения ручного режима.
//--> Управление приводами в раздельном от линии режиме работы:
  IF ManualMode       = FALSE AND
     SeparateWorkSign = TRUE
    THEN
//--> Приведение приводов в готовность к работе:         
    DriveCounter := 0;
    WHILE DriveCounter < DrivesAmount 
      DO          
      DriveCounter := DriveCounter + 1;
      IF  Jointly[DriveCounter] = FALSE
        THEN        
        OutDriveTask[DriveCounter].NetworkControl := TRUE;  // Выбрать управление по сети.
        OutDriveTask[DriveCounter].NoCoastStop    := TRUE;  // Нет торможения выбегом.
        OutDriveTask[DriveCounter].NoQuickStop    := TRUE;  // Нет быстрого торможения.     
        OutDriveTask[DriveCounter].Enable         := TRUE;  // Включить привод.
      END_IF;  
    END_WHILE;   
 
//==> Запоминание состояния ВКЛ-ОТКЛ:    
    DriveCounter := 0;
    WHILE DriveCounter < DrivesAmount 
      DO
      DriveCounter := DriveCounter + 1;
      IF Jointly[DriveCounter] = FALSE
        THEN  
//-> Остановка выбранного двигателя:      
        IF AllowRunAggrCmd[DriveCounter] = FALSE OR
           StopAggrCmd[DriveCounter]     = TRUE
          THEN
          Memory.WorkingAggr[DriveCounter] := FALSE; 
          Memory.RunBackAggr[DriveCounter] := FALSE;        
        ELSE
//-> Включение выбранного двигателя вперёд:        
          IF AllowRunAggrCmd[DriveCounter] = TRUE AND
             RunAggrCmd[DriveCounter]      = TRUE
            THEN
            Memory.WorkingAggr[DriveCounter] := TRUE;
            Memory.RunBackAggr[DriveCounter] := FALSE;                         
          END_IF;
//-> Включение выбранного двигателя назад:
          IF AllowRunAggrCmd[DriveCounter]  = TRUE AND
             RunBackAggrCmd[DriveCounter]   = TRUE
            THEN
            Memory.WorkingAggr[DriveCounter] := FALSE;
            Memory.RunBackAggr[DriveCounter] := TRUE;
          END_IF;     
        END_IF;
//==<    
        IF Memory.WorkingAggr[DriveCounter] = TRUE OR
           Memory.RunBackAggr[DriveCounter] = TRUE 
          THEN
               
          OutDriveTask[DriveCounter].NetworkControl  := TRUE;  // Выбрать управление по сети.

//--> Задание параметров только для частотных преобразователей:          
          IF DriveCounter <> LWMDriveNum      AND // 6RA24.
             DriveCounter <> CalenderDriveNum AND // 6RA24.
             DriveCounter <> CWM_90DriveNum   AND // 6RA24.
             DriveCounter <> HWMDriveNum          // 6RA70.
            THEN          
            OutDriveTask[DriveCounter].ClockWise      := TRUE;  // Вращение поля по часовой стрелке.
            OutDriveTask[DriveCounter].CountelockWise := FALSE; // Вращение поля против часовой стрелки.
            OutDriveTask[DriveCounter].NoCoastStop    := TRUE;  // Нет торможения выбегом.
            OutDriveTask[DriveCounter].NoQuickStop    := TRUE;  // Нет быстрого торможения.     
            OutDriveTask[DriveCounter].RUN            := TRUE;  // Запустить привод.
            OutDriveTask[DriveCounter].Enable         := TRUE;  // Включить привод.
            OutDriveTask[DriveCounter].FaultsReset    := TRUE;  // Сбросить текущие неисправности ЧП.
          END_IF;
//--> Задание параметров только для приводов постоянного тока 6RA24:            
          IF DriveCounter = LWMDriveNum      OR   // 6RA24.
             DriveCounter = CalenderDriveNum OR   // 6RA24.
             DriveCounter = CWM_90DriveNum        // 6RA24.
            THEN
            OutDriveTask[DriveCounter].Inching1       := FALSE; // Активировать толчковый режим на частоте 1.    
            OutDriveTask[DriveCounter].Inching2       := FALSE; // Активировать толчковый режим на частоте 2.    
            OutDriveTask[DriveCounter].NetworkControl := TRUE;  // Выбрать управление по сети.    
            OutDriveTask[DriveCounter].ClockWise      := FALSE; // Вращение поля по часовой стрелке.    
            OutDriveTask[DriveCounter].CountelockWise := FALSE; // Вращение поля против часовой стрелки.    
            OutDriveTask[DriveCounter].RaiseMOP       := FALSE; // Увеличить значение MOP.    
            OutDriveTask[DriveCounter].LowerMOP       := FALSE; // Уменьшить значение MOP.    
            OutDriveTask[DriveCounter].NoExternalFlt1 := FALSE; // Снять сигнал о внешней неисправности.    
            OutDriveTask[DriveCounter].Run            := TRUE;  // Запустить частотный преобразователь.    
            OutDriveTask[DriveCounter].NoCoastStop    := TRUE;  // Нет торможения выбегом.     
            OutDriveTask[DriveCounter].NoQuickStop    := TRUE;  // Нет быстрого торможения.     
            OutDriveTask[DriveCounter].Enable         := TRUE;  // Включить привод.    
            OutDriveTask[DriveCounter].RFGEnable      := TRUE;  // Включить генератор пилообразной функции.    
            OutDriveTask[DriveCounter].RFGStart       := TRUE;  // Запустить генератор пилообразной функции.    
            OutDriveTask[DriveCounter].RFGSetpointOn  := TRUE;  // Задействовать вход предустановки генератора пилообразной функции.    
            OutDriveTask[DriveCounter].FaultsReset    := TRUE;  // Сбросить текущие неисправности ЧП.            
          END_IF;
//--> Задание параметров только для приводов постоянного тока 6RA70:
          IF DriveCounter = HWMDriveNum           // 6RA70.
            THEN
            OutDriveTask[DriveCounter].Inching1       := FALSE; // Активировать толчковый режим на частоте 1.    
            OutDriveTask[DriveCounter].Inching2       := FALSE; // Активировать толчковый режим на частоте 2.    
            OutDriveTask[DriveCounter].NetworkControl := TRUE;  // Выбрать управление по сети.    
            OutDriveTask[DriveCounter].ClockWise      := TRUE;  // Вращение поля по часовой стрелке.    
            OutDriveTask[DriveCounter].CountelockWise := TRUE;  // Вращение поля против часовой стрелки.    
            OutDriveTask[DriveCounter].RaiseMOP       := FALSE; // Увеличить значение MOP.    
            OutDriveTask[DriveCounter].LowerMOP       := FALSE; // Уменьшить значение MOP.    
            OutDriveTask[DriveCounter].NoExternalFlt1 := FALSE; // Снять сигнал о внешней неисправности.    
            OutDriveTask[DriveCounter].Run            := TRUE;  // Запустить частотный преобразователь.    
            OutDriveTask[DriveCounter].NoCoastStop    := TRUE;  // Нет торможения выбегом.     
            OutDriveTask[DriveCounter].NoQuickStop    := TRUE;  // Нет быстрого торможения.     
            OutDriveTask[DriveCounter].Enable         := TRUE;  // Включить привод.    
            OutDriveTask[DriveCounter].RFGEnable      := TRUE;  // Включить генератор пилообразной функции.    
            OutDriveTask[DriveCounter].RFGStart       := TRUE;  // Запустить генератор пилообразной функции.    
            OutDriveTask[DriveCounter].RFGSetpointOn  := TRUE;  // Задействовать вход предустановки генератора пилообразной функции.    
            OutDriveTask[DriveCounter].FaultsReset    := TRUE;  // Сбросить текущие неисправности ЧП.        
          END_IF;        
        
        ELSE
//-> Остановить привод:
          OutDriveTask[DriveCounter].RUN := FALSE;           // Остановить привод.
//------------------------------------------------------------------------------------------------------------        
//-> Сброс индивидуальных коээфициентов приводов по индивидуальным стопам:
        IF StopAggrCmd[DriveCounter] = TRUE AND
           DriveCounter <> CalenderDriveNum
          THEN
          Memory.AggrTaskFactor[DriveCounter] := 0.0;
        END_IF;
//------------------------------------------------------------------------------------------------------------                  
        END_IF;
      END_IF;     
    END_WHILE;
    
  END_IF;
             
//END_IF;
END_FUNCTION

Скачать/Download - 000000d8.SCL

Категория: SIEMENS | Просмотров: 24 | Добавил: gt7600 | Теги: siemens, SCL | Рейтинг: 0.0/0
Всего комментариев: 0
avatar