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

20:34
SIEMENS STEP7 SCL Пуск линии в автоматическом режиме Протекторный агрегат Дуплекс

 

// Функция работы линии в автоматическом режиме.
//    Данная функция активирует функцию синхронизации скоростей транспортёров
// по размерам петель и вместе они обеспечивают работу линии с компенсацией
// усадки протекторной ленты.
//    Обеспечивается пуск линии:
//      - в автоматическом режиме;
//      - в режиме заправки;
//      - в режиме "Конец протектора".
//    Обеспечивается реакция на требование понижения скорости линии от 
// функции синхронизации скоростей транспортёров.
// Скорость приводов с датчиками петель определяется:
//  - питателя НЧМ - скоростью НЧМ;
//  - питателя ВЧМ - скоростью ВЧМ;
//  - всех остальных приводов - скоростью приёмного транспортёра.

FUNCTION RunAutoMode2W : VOID
TITLE = 'Функция работы линии в автоматическом режиме.';
CONST
    SENSAMOUNT := 13;               // Количество опрашиваемых датчиков.
    DRIVESNUM  := 18;               // Общее количество приводов.          
END_CONST

VAR_INPUT
    Jointly           : ARRAY [1..19] OF BOOL;           // Массив, определяющий совместную или раздельную работу приводов. 
    DrivesAmount      : INT;                             // Количество приводов.  
    LoopAmount        : INT;                             // Количество датчиков петель.
    UseAllLoops       : BOOL;                            // Использовать все датчики петель, независимо от реально имеющихся.  
    LoopPresence      : ARRAY [1..SENSAMOUNT] OF BOOL;   // Массив наличия петель. 
    LineTaskSpeed     : INT;                             // Заданная скорость линии.
         
    MaxSpeedFactor    : REAL;       // Коэффициент максимальной возможной скорости каждого привода, работающего с датчиком петли.
    MinSpeedFactor    : REAL;       // Коэффициент максимальной возможной скорости каждого привода, работающего с датчиком петли.
    LWM_HWMSpeedFactor : REAL;      // КОэффициент зависимости скорости ВЧМ от НЧМ.

    FillingMode       : BOOL;       // Заправка.
    AutoMode          : BOOL;       // Автоматический режим работы линии.
    ProtectorEndMode  : BOOL;       // Режим линии "Конец протектора".    
  
    StartLine         : BOOL;       // Запустить линию.
    StopLine          : BOOL;       // Остановить линию.
    DisableDrives     : BOOL;       // Отключить приводы.
    AllowToRun        : BOOL;       // Разрешение работы в автоматическом режиме.    
    IgnoreAllows      : BOOL;       // Игнорировать отсутствие разрешения на работу. 
    
    LWMDriveNum       : INT;        // Номер привода НЧМ      - 6RA24.
    RecTranspNum      : INT;        // Номер привода приёмного транспортёра.
    CalenderDriveNum  : INT;        // Номер привода каландра - 6RA24.
    CalenderLoaderNum : INT;        // Номер привода питателя каландра - 6RA24.
    CWM_90DriveNum    : INT;        // Номер привода МЧХ-90   - 6RA24.
    HWMDriveNum       : INT;        // Номер привода ВЧМ      - 6RA70.
    CoilTranspNum     : INT;        // Номер привода транспотёра закатки. (13) 
    DriveMaxSpeed     : INT;        // Максимальная скорость привода.
    CutTranspNum      : INT;        // Номер привода транспортера ножа.
     
    InMemory          : LINESTATE;  // Буфер для хранения промежуточных результатов.
    
    //RunLWM            : BOOL;      // Запустить НЧМ.
    //RunHWM            : BOOL;      // Запустить ВЧМ.
    //StopLWM           : BOOL;      // Остановить НЧМ.
    //StopHWM           : BOOL;      // Остановить ВЧМ.
    
    //Run      : ARRAY[1..18] OF  BOOL;   // Массив с флагами запущенного состояния приводов. 
END_VAR

VAR_OUTPUT
    OutLoopData      : ARRAY [1..DRIVESNUM] OF LOOPPARAMS;      // Массив скоростей и параметров петель.
    OutDriveTask     : ARRAY [1..DRIVESNUM] OF W2DRIVETASK;     // Массив заданий для приводов.

    StartSynchronization : BOOL;                                // Флаг запуска синхронизации скоростей транспортёров линии. 
    OutMemory            : LINESTATE;   // Буфер для хранения промежуточных результатов.
    StartInclinedTransp     : BOOL ;    // Включить наклонный и весовой транспортеры (171,A4.7,OUT2)
    StartSamplingRollTable  : BOOL ;    // Включить рольганг отбора заготовок (174,A4.7,OUT5)
    Start_Curling_Transp    : BOOL ;    // Вкл. вентилятор сдува воды с протектора и транспортер закаток (170,A4.7,OUT1)    

    LineSpeedOUT : INT;
    
   // LWMRunned : BOOL;      // НЧМ запущена.
  //  HWMRunned : BOOL;      // ВЧМ запущена.
   
END_VAR        

LABEL
    STOPDRIVES;
END_LABEL    

VAR_TEMP
    LineSpeed     : INT;         // Текущее значение скорости линии.
    LWMSpeed      : INT;         // Скорость НЧМ. 
    HWMSpeed      : INT;         // Скорость ВЧМ.
    RecTransSpeed : INT;         // Скорость приёмного транспортёра.
    CWM_90Speed   : INT;         // Скорость МЧХ-90.
    
    ChangeFactor  : REAL;        // Текущее значение коэффициента изменения скорости линии.  
    DriveCounter  : INT;         // Счётчик приводов.
    
END_VAR
//=============================================
BEGIN
(*
IF (RunLWM  = TRUE  OR
    Run[LWMDriveNum] = TRUE) AND
    StopLWM = FALSE 
   THEN
   LWMRunned := TRUE;
ELSE
   LWMRunned := FALSE; 
END_IF;

//--------------------------------------------
IF (RunHWM  = TRUE  OR
    Run[HWMDriveNum] = TRUE) AND
    StopHWM = FALSE 
   THEN
   HWMRunned := TRUE;
ELSE
   HWMRunned := FALSE; 
END_IF;
*)
//-> Остановка линии:
IF StopLine      = TRUE OR
   DisableDrives = TRUE
  THEN 
  OutMemory.AutoStarted         := FALSE;
  OutMemory.FillingStarted      := FALSE;
  OutMemory.EndProtectorStarted := FALSE;
  OutMemory.FirstStart          := FALSE;
  StartSynchronization          := FALSE;
  GOTO STOPDRIVES;
END_IF;

IF StartLine = TRUE
  THEN
//-> Сброс флага работы линии в автоматическом режиме:
    IF AutoMode = FALSE
        THEN
        OutMemory.AutoStarted := FALSE;    
    END_IF;        
//-> Сброс флага работы линии в режиме заправки:
    IF FillingMode = FALSE
        THEN
        OutMemory.FillingStarted := FALSE;    
    END_IF;    
//-> Сброс флага работы линии в режиме окончания протектора:
    IF ProtectorEndMode = FALSE
        THEN
        OutMemory.EndProtectorStarted := FALSE;    
    END_IF;    
END_IF;
//=1=> 
IF AutoMode    = TRUE OR        // Выбран автоматический режим.
   FillingMode = TRUE OR        // Выбран режим заправки протектора.
   ProtectorEndMode = TRUE      // Выбран режим схода протектора.
   THEN 
//=2=> 
   IF AllowToRun   = TRUE  OR               // Разрешение автоматического режима работы.
      IgnoreAllows = TRUE                   // Разрешение работать без вышеупомянутых разрешений.
      THEN
//-> Установка флага пуска линии в автоматическом режиме:    
      IF StartLine = TRUE  AND     
         AutoMode  = TRUE
         THEN 
         OutMemory.AutoStarted         := TRUE;     // 1 - Линия запущена в автоматическом режиме.
         OutMemory.FillingStarted      := FALSE;
         OutMemory.EndProtectorStarted := FALSE;
      END_IF;
//-> Установка флага пуска линии в режиме заправки:
      IF StartLine   = TRUE  AND     
         FillingMode = TRUE
         THEN 
         OutMemory.AutoStarted         := FALSE;
         OutMemory.FillingStarted      := TRUE;     // 2 - Линия запущена в  режиме заправки.
         OutMemory.EndProtectorStarted := FALSE;        
      END_IF;
//-> Установка флага пуска линии в режиме окончания протектора:
      IF StartLine        = TRUE  AND     
         ProtectorEndMode = TRUE
         THEN
         OutMemory.AutoStarted         := FALSE;
         OutMemory.FillingStarted      := FALSE;    
         OutMemory.EndProtectorStarted := TRUE;     // 3 - Линия запущена в режиме окончания протектора.        
      END_IF;

//=3=> Пуск линии:
      IF InMemory.AutoStarted         = TRUE OR
         InMemory.FillingStarted      = TRUE OR
         InMemory.EndProtectorStarted = TRUE  
         THEN
         StartInclinedTransp     := TRUE;     // Включить наклонный и весовой транспортеры.
         StartSamplingRollTable  := TRUE;     // Включить рольганг отбора заготовок.
         Start_Curling_Transp    := TRUE;     // Вкл. вентилятор сдува воды с протектора и транспортер закаток.
         
//-> Задание текущей скорости линии в зависимости от корректировки и выбранного режима:        
//         IF InMemory.FillingStarted = TRUE
//            THEN
//            LineSpeed := REAL_TO_INT(INT_TO_REAL(LineSpeed) * Kfilling);     
//         END_IF;  
        
//-> Однократный сброс неисправностей по команде "Пуск линии":    
         IF InMemory.FirstStart = FALSE                          // Проверка, что это 1-й пуск.
            THEN
            DriveCounter := 0; 
            WHILE DriveCounter < DrivesAmount 
              DO
              DriveCounter := DriveCounter + 1; 
              OutDriveTask[DriveCounter].NetworkControl := TRUE; // Выбрать управление по сети. 
              OutDriveTask[DriveCounter].FaultsReset    := TRUE; // Сбросить текущие неисправности ЧП.  
            END_WHILE;
            OutMemory.FirstStart := TRUE;                        // Запоминание, что 1-й пуск был.
         END_IF; 
//-------------------------------------------------------------------------------------------------------------
//      НЧМ - мастер.
// В совместном режиме скорость линии определяется скоростью НЧМ, в раздельном - скорость линии от НЧМ не зависит.
// Скорость приёмного транспортёра определяет скорость хвоста транспортёров.
// Работа с машинами и в раздельном и в совместном режимах происходит в автоматическом режиме.
    
//=> Задание скоростей приводам без датчиков петель:
         DriveCounter := LoopAmount;      
         WHILE DriveCounter < DrivesAmount 
           DO    
           DriveCounter := DriveCounter + 1;
           
//-> Задание скорости для НЧМ в совместном и раздельном режимах работы с линией:           
           IF DriveCounter = LWMDriveNum
              THEN
              LWMSpeed := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(LineTaskSpeed));  
              OutLoopData[DriveCounter].Vtask := LWMSpeed;
              OutLoopData[DriveCounter].V     := LWMSpeed; 
//-> Задание скорости линии в зависимости от режима работы:              
              IF Jointly[LWMDriveNum] = TRUE
                 THEN
                 LineSpeed := LWMSpeed;
                 LineSpeedOUT := LineSpeed;
              ELSE
                 LineSpeed := REAL_TO_INT(INT_TO_REAL(LineTaskSpeed) * InMemory.SpeedFactor[RecTranspNum]); // ???
                 LineSpeedOUT := LineSpeed;
              END_IF;                                                           
           END_IF;
           
//-> Задание скорости для ВЧМ: 
           IF DriveCounter = HWMDriveNum
              THEN
              IF Jointly[HWMDriveNum] = TRUE
                 THEN
                 HWMSpeed := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(LWMSpeed));  
              ELSE
                 HWMSpeed := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(LineTaskSpeed));
              END_IF;
              OutLoopData[DriveCounter].Vtask := HWMSpeed;
              OutLoopData[DriveCounter].V     := HWMSpeed;    
           END_IF; 
           
//-> Задание скорости для приёмного транспортёра:          
           IF DriveCounter = RecTranspNum
              THEN
              IF Jointly[LWMDriveNum] = TRUE
                 THEN              
              RecTransSpeed := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(LineSpeed)*2.0);  
              OutLoopData[DriveCounter].Vtask := RecTransSpeed;
              OutLoopData[DriveCounter].V     := RecTransSpeed;           
            ELSE
              RecTransSpeed := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(LineSpeed));  
              OutLoopData[DriveCounter].Vtask := RecTransSpeed;
              OutLoopData[DriveCounter].V     := RecTransSpeed;
              END_IF;
           END_IF;     

//-> Задание скорости для МЧХ-90:          
           IF DriveCounter = CWM_90DriveNum
              THEN
              IF Jointly[CWM_90DriveNum] = TRUE
                 THEN   
                 CWM_90Speed := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(LineSpeed));
              ELSE
                 CWM_90Speed := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(LineTaskSpeed));  
              END_IF;    
              OutLoopData[DriveCounter].Vtask := CWM_90Speed;
              OutLoopData[DriveCounter].V     := CWM_90Speed; 
           END_IF; 
           
//-> Задание скорости питателю каландра:           
           IF DriveCounter = CalenderLoaderNum
              THEN
              OutLoopData[DriveCounter].Vtask := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(ABS(CWM_90Speed)));
              OutLoopData[DriveCounter].V     := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(ABS(CWM_90Speed)));
           END_IF;             
         END_WHILE; 
//-------------------------------------------------------------------------------------------------------------      
//=> Задание скоростей приводам с датчиками петель:        
//-> Задание скорости питателю НЧМ:
         DriveCounter := 1;
         IF Jointly[DriveCounter] = TRUE
            THEN  
            IF LoopPresence[DriveCounter] = TRUE OR
               UseAllLoops                = TRUE
               THEN
               OutLoopData[DriveCounter].Vtask := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(ABS(LWMSpeed))); 
               OutLoopData[DriveCounter].Vmax  := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(ABS(LWMSpeed)) * MaxSpeedFactor);
               OutLoopData[DriveCounter].Vmin  := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(ABS(LWMSpeed)) * MinSpeedFactor); 
            ELSE
               OutLoopData[DriveCounter].Vtask := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(ABS(LWMSpeed)));
               OutLoopData[DriveCounter].V     := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(ABS(LWMSpeed)));                      
            END_IF;
         ELSE
            OutLoopData[DriveCounter].Vtask := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(LineSpeed));
            OutLoopData[DriveCounter].V     := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(LineSpeed));
         END_IF;
  
//-> Задание скорости питателю ВЧМ:      
         DriveCounter := 2;
         IF Jointly[DriveCounter] = TRUE
            THEN  
            IF LoopPresence[DriveCounter] = TRUE OR
               UseAllLoops                = TRUE
               THEN
               OutLoopData[DriveCounter].Vtask := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(ABS(HWMSpeed))); 
               OutLoopData[DriveCounter].Vmax  := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(ABS(HWMSpeed)) * MaxSpeedFactor);
               OutLoopData[DriveCounter].Vmin  := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(ABS(HWMSpeed)) * MinSpeedFactor);
            ELSE
               OutLoopData[DriveCounter].Vtask := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(ABS(HWMSpeed)));
               OutLoopData[DriveCounter].V     := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(ABS(HWMSpeed)));
            END_IF;
         ELSE
            OutLoopData[DriveCounter].Vtask := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(LineSpeed));
            OutLoopData[DriveCounter].V     := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(LineSpeed));               
         END_IF;
     
//-> Задание скорости остальным транспортёрам:
         WHILE DriveCounter < LoopAmount  
           DO
           DriveCounter := DriveCounter + 1;
           IF Jointly[DriveCounter] = TRUE AND
              DriveCounter <> CoilTranspNum
              THEN   
              IF LoopPresence[DriveCounter] = TRUE OR
                 UseAllLoops                = TRUE
                 THEN  
                 OutLoopData[DriveCounter].Vtask := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(RecTransSpeed)); 
                 OutLoopData[DriveCounter].Vmax  := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(RecTransSpeed) * MaxSpeedFactor); 
                 OutLoopData[DriveCounter].Vmin  := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(RecTransSpeed) * MinSpeedFactor);
              ELSE
                 OutLoopData[DriveCounter].Vtask := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(LineSpeed));
                 OutLoopData[DriveCounter].V     := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(LineSpeed));  
              END_IF;    
           END_IF; 
           IF DriveCounter = CoilTranspNum
              THEN
              OutLoopData[DriveCounter].Vtask := DriveMaxSpeed;      // Транспортёр закатки всегда работает на скорости 50 Гц.
              OutLoopData[DriveCounter].V     := DriveMaxSpeed;      //
           END_IF;
//--------------------------------------------------------------------------------
//-> Задание большего диапазона регулировки скорости для транспортера узла реза:           
           IF DriveCounter = CutTranspNum
              THEN
                 OutLoopData[DriveCounter].Vtask := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(RecTransSpeed)); 
                 OutLoopData[DriveCounter].Vmax  := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(RecTransSpeed) * 1.9); 
                 OutLoopData[DriveCounter].Vmin  := REAL_TO_INT(InMemory.SpeedFactor[DriveCounter] * INT_TO_REAL(RecTransSpeed) * 0.1);
           END_IF;          
         END_WHILE;
//
//-------------------------------------------------------------------------------------------------------------  
//-> Установка флагов управления приводами:      
         DriveCounter := 0; 
         WHILE DriveCounter < DrivesAmount 
           DO
           DriveCounter := DriveCounter + 1; 
           IF Jointly[DriveCounter] = TRUE  
             THEN
//--> Задание общих для всех типов приводов параметров:              
             OutMemory.WorkingAggr[DriveCounter]        := TRUE;  // Индикация направления движения механизма.    
             OutDriveTask[DriveCounter].NetworkControl  := TRUE;  // Выбрать управление по сети.
//--> Задание параметров только для частотных преобразователей:
             IF DriveCounter <> LWMDriveNum      AND // 6RA24.
                DriveCounter <> CalenderDriveNum AND // 6RA24.
                DriveCounter <> CWM_90DriveNum   AND // 6RA24.
                DriveCounter <> HWMDriveNum          // 6RA70.
                THEN
                  IF DriveCounter <> CalenderLoaderNum
                    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;  
             END_IF; 
//-> Управление питателем каландра:
             IF OutDriveTask[CWM_90DriveNum].RUN = TRUE
                THEN                      
                OutDriveTask[CalenderLoaderNum].ClockWise       := TRUE;  // Вращение поля по часовой стрелке.
                OutDriveTask[CalenderLoaderNum].CountelockWise  := FALSE; // Вращение поля против часовой стрелки.
                OutDriveTask[CalenderLoaderNum].NoCoastStop     := TRUE;  // Нет торможения выбегом.
                OutDriveTask[CalenderLoaderNum].NoQuickStop     := TRUE;  // Нет быстрого торможения.
                OutDriveTask[CalenderLoaderNum].RUN             := TRUE;  // Запустить привод.
                OutDriveTask[CalenderLoaderNum].Enable          := TRUE;  // Включить привод.
                OutDriveTask[CalenderLoaderNum].FaultsReset     := TRUE;  // Сбросить текущие неисправности ЧП.
              ELSE
                OutDriveTask[CalenderLoaderNum].ClockWise       := TRUE;  // Вращение поля по часовой стрелке.
                OutDriveTask[CalenderLoaderNum].CountelockWise  := FALSE; // Вращение поля против часовой стрелки.
                OutDriveTask[CalenderLoaderNum].NoCoastStop     := TRUE;  // Нет торможения выбегом.
                OutDriveTask[CalenderLoaderNum].NoQuickStop     := TRUE;  // Нет быстрого торможения.
                OutDriveTask[CalenderLoaderNum].RUN             := FALSE; // Запустить привод.
                OutDriveTask[CalenderLoaderNum].Enable          := TRUE;  // Включить привод.
                OutDriveTask[CalenderLoaderNum].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;                
            
           END_IF;
         END_WHILE;
         StartSynchronization   := TRUE;
//-> Скорость линии определяется скоростью приёмного транспортёра - это заданная скорость движения всех транспортёров за ним:    
         OutMemory.CurrentSpeed := OutLoopData[RecTranspNum].Vtask;
      ELSE
         StartSynchronization   := FALSE;
         OutMemory.CurrentSpeed := 0;  
      END_IF;
//=3=<       
   ELSE
      GOTO STOPDRIVES;  
   END_IF;
//=2=<
END_IF;
//=1=<  
RETURN;

//-> Остановка приводов:
STOPDRIVES:
  StartInclinedTransp     := FALSE; // Выключить наклонный и весовой транспортеры.
  StartSamplingRollTable  := FALSE; // Выключить рольганг отбора заготовок.
  Start_Curling_Transp    := FALSE; // Выключить вентилятор сдува воды с протектора и транспортер закаток.  
  DriveCounter := 0; 
  WHILE DriveCounter < DrivesAmount 
    DO
    DriveCounter := DriveCounter + 1; 
    IF DriveCounter <> LWMDriveNum AND
       DriveCounter <> HWMDriveNum
    THEN
    OutMemory.WorkingAggr[DriveCounter]       := FALSE; // Сброс флагов работающих приводов.
    OutDriveTask[DriveCounter].NetworkControl := TRUE;  // Выбрать управление по сети.
    OutDriveTask[DriveCounter].RUN            := FALSE; // Остановить привод.
    OutDriveTask[DriveCounter].FaultsReset    := TRUE;  // Сбросить текущие неисправности ЧП.
    END_IF;
  END_WHILE;
END_FUNCTION

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

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