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