/
George_Smith
/
RuSTy
Обзор
Документация
Войти
/
George_Smith
/
RuSTy
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
Peter
OIPSection.ResourceProject.st
103 строки
8 KB
Peter Korobeynikov
RuSTy v2.05 (Peter) - Добавлен вывод определения STRING[80] по умолчанию в types.json
05 фев 2026, 16:47
05 фев 2026, 16:47
02d36e2
Код
Авторство
О чём код?
PROGRAM OIPSection VAR OipElectricFB: OipElectric; OIPChannel: ARRAY[1..40] OF REAL; OIPTimersPL: ARRAY[1..40] OF Timer; OIPTimersOE: ARRAY[1..40] OF Timer; OIPStorage: ARRAY[1..40] OF OIPStor; OIPInit: ARRAY[1..40] OF BOOL; OIPMessPL: Messenger; OIPMessOE: Messenger; OIPRealSignal: ARRAY[1..40] OF AnalogSignal; OIPImitInput: ARRAY[1..40] OF REAL; OIPImitSignal: ARRAY[1..40] OF AnalogSignal; TempCmd: OipCmds; OIPCmd: WORD; ProcLevelsFB: ProcLevels; END_VAR FOR I := 1 TO 22 DO (* Обработка таймеров *) TimerProcess(Instance := OIPTimersOE[I],ms := CycleTime); TimerProcess(Instance := OIPTimersPL[I],ms := CycleTime); (* Обработка команды с ВУ *) TempCmd := 0; (* Обнуляем код команды *) IF OIPCmd > 0 THEN (* Если есть команда оператора *) IF (OIPCmd AND 255) = I THEN (* Если команда по данной системе *) TempCmd := SHR(OIPCmd,8); (* Выделяем код команды *) END_IF; END_IF; OipElectricFB( Cmd:= TempCmd, (* Команда включения режима имитации. *) ElInput:= OIPChannel[I], (* Значение сигнала *) ExtNdv:= OIPState[I].17, (* Флаг внешней недостоверности. Формируется внешними (по отношению к OipElectric) программными компонентами, включает в себя неисправность канала измерения) *) ElAllowedRange:= OIPUst[I].ElAllowedRange, (* Диапазон достоверности *) ElRange:= OIPUst[I].ElRange, (* Диапазон сигнала *) ValRange:= OIPUst[I].ValRange, (* Диапазон измерения *) EnableFiltering:= OIPUst[I].EnableFiltering, (* Флаг необходимости применения фильтрации *) ScanTime:=TIME_TO_LREAL(CycleTime), (* Время исполнения предыдущего цикла программы *) T:= OIPUst[I].T, (* Постоянная времени фильтра *) OutSignal => OIPStorage[I].OutSignal, (* Данные об измеряемом параметре *) ElectricSignal:= OIPStorage[I].ElectricSignal, (* Данные о сигнале *) PrevSignal:= OIPStorage[I].PrevSignal, (* Данные об измеряемом параметре на предыдущем цикле программы *) ustTimerPrev:= OIPStorage[I].ustTimerPrev, (* Значение таймера (выдержки времени на снятие недостоверности) на предыдущем цикле программы *) elAllowedRangePrev:=OIPStorage[I].elAllowedRangePrev, (* Значения пределов диапазона достоверности на предыдущем цикле программы *) elRangePrev:= OIPStorage[I].elRangePrev, (* Значения пределов диапазона сигнала на предыдущем цикле программы *) valRangePrev:= OIPStorage[I].valRangePrev, (* Значения пределов диапазона измерения на предыдущем цикле программы *) TPrev:= OIPStorage[I].TPrev, (* Значение постоянной времени фильтра на предыдущем цикле программы *) isInited:= OIPStorage[I].isInitedOE, (* Флаг завершения инициализации блока *) enableFilteringPrev:=OIPStorage[I].enableFilteringPrev, (* Значение флага необходимости применения фильтрации на предыдущем цикле программы *) Messenger:= OIPMessOE, (* Генератор оперативных сообщений сообщений блока *) RealSignal:= OIPRealSignal[I], (* Данные об измеряемом параметре без учёта режима имитации *) ImitSignal:= OIPImitSignal[I], (* Данные об измеряемом параметре с учётом режима имитации *) Timer:= OIPTimersOE[I], (* Таймер выдержки времени на снятие недостоверности *) ImitInput:= OIPImitInput[I], (* Значение для имитации *) Imit:= OIPStorage[I].Imit); (* Флаг включения режима имитации *) ProcLevelsFB( Signal:= OIPStorage[I].OutSignal, (* Значение параметра, сформированное функциональным блоком OipElectric *) MinCfgs:= OIPUst[I].MinCfgs, (* Массив структур Level, соответствующий минимальным уровням *) MaxCfgs:= OIPUst[I].MaxCfgs, (* Массив структур Level, соответствующий максимальным уровням *) Hyst:= OIPUst[I].Hyst, (* Значение гистерезиса *) ustTimerPrev:= OIPStorage[I].ustTimerPrev2,(* Уставка времени переходного процесса на предыдущем цикле выполнения программы *) maxStates:= OIPStorage[I].maxStates, (* Массив максимальных уровней *) minStates:= OIPStorage[I].minStates, (* Массив минимальных уровней *) minCfgsPrev:= OIPStorage[I].minCfgsPrev, (* Массив уставок, соответствующих минимальным уровням на предыдущем цикле выполнения программы *) maxCfgsPrev:= OIPStorage[I].maxCfgsPrev, (* Массив уставок, соответствующих максимальным уровням на предыдущем цикле выполнения программы *) isInited:= OIPStorage[I].isInitedPL, (* Флаг инициализации блока *) HystPrev:= OIPStorage[I].HystPrev, (* Значение гистерезиса на предыдущем цикле выполнения программы *) Messenger:= OIPMessPL, (* Генератор сообщений блока *) Timer:= OIPTimersPL[I], (* Время переходного процесса *) Zone:= OIPStorage[I].Zone); (* Номер зоны *) (* Состояние аналогового сигнала *) OIPState[I].0 := ProcLevelsFB.Mins[0]; (* Сработка уставок МИН *) OIPState[I].1 := ProcLevelsFB.Mins[1]; OIPState[I].2 := ProcLevelsFB.Mins[2]; OIPState[I].3 := ProcLevelsFB.Mins[3]; OIPState[I].4 := ProcLevelsFB.Mins[4]; OIPState[I].5 := ProcLevelsFB.Mins[5]; OIPState[I].6 := OipElectricFB.OutSignal.LTMin; (* НПД *) OIPState[I].7 := ProcLevelsFB.Norm; (* Норма *) OIPState[I].8 := ProcLevelsFB.Maxs[0]; (* Сработка уставок МАКС *) OIPState[I].9 := ProcLevelsFB.Maxs[1]; OIPState[I].10 := ProcLevelsFB.Maxs[2]; OIPState[I].11 := ProcLevelsFB.Maxs[3]; OIPState[I].12 := ProcLevelsFB.Maxs[4]; OIPState[I].13 := ProcLevelsFB.Maxs[5]; OIPState[I].14 := OipElectricFB.OutSignal.MTMax; (* ВПД *) OIPState[I].15 := OipElectricFB.OutSignal.Ndv; (* Недостоверность *) OIPState[I].16 := OIPStorage[I].Imit; (* Флаг имитации *) (* OIPState[I].17 := ; Аппаратная недостоверность, выставляется в других секциях *) (* Флаг предупредительного состояния аналогового сигнала *) OIPState[I].30 := (OIPState[I] AND 16#0303)>0; (* Флаг аварийного состояния аналогового сигнала *) OIPState[I].31 := (OIPState[I] AND 16#1C1C)>0; END_FOR OIPCmd := 0; END_PROGRAM