Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Зачем Вам HardellaIDE?
Используйте библиотеки Timer и SysLibPorts
только прерывания будут не не по фронту сигнала а от 20мкс таймера.
Внутри POU обработки прерывания от таймера можно напрямую анализировать состояние быстрых дискретных входов
Пример работы с быстрыми входами есть на диске
Захват-1.png
Некоторые контроллеры ОВЕН ПЛК имеют встроенный таймер, по прерыванию которого может быть
вызван отдельная программа (POU), не связанная с выполнением основной программы ПЛК. Минимальный
период вызовов прерываний таймера составляет 20мкс и может быть увеличен при вызове функции
инициализации. Период должен быть кратен 20мкс. В POU, вызываемому по этому прерыванию, могут
обрабатываться состояния "быстрых" входов и выходов ПЛК. Такой режим обработки может потребоваться
для задач, время обработки которых должно быть существенно меньше времени цикла ПЛК или для
автоматизации объектов, критичных ко времени реакции на определенные события.
К "быстрым" входам и выходам относятся несколько первых входов и выходов на ПЛК110. Подробно о
количестве "быстрых" входов и выходов смотри руководство по эксплуатации на контроллер.
Последний раз редактировалось petera; 06.11.2018 в 13:44.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
При всем уважении, тут мы трепемся, а программируем в другом месте.
Пока одни костыли...
Сможете добиться стабильности и повторяемости результатов на разных экземплярах ПЛК без подстройки программы?
А на разных сериях ПЛК?
Этим и отличается "колхоз" от "промышленных решений" - повторяемостью результатов и ремонтопригодностью.
Накидал алгоритм, если честно мне не нравится,думаю можно сделать красивее, но работает точно.
Вся обработка идет в прерываниях системного таймера каждые 60 мкс. Осциллограф подтвердил что все точно обрабатывается.
2018-11-13_09-20-43.png
Тут полная схема
2018-11-13_09-46-43.png
Мой вариант
Захват-1.png
Прерывания таймера - 40мкс.
В обработчике прерываний подсчитывается длительность входных импульса - dT в единицах прерывания для каждого входаКод:PROGRAM PWM_meter VAR count: DWORD; (*счетчик прерываний таймера*) in: BYTE; start1: DWORD; State1: INT; start2: DWORD; State2: INT; start3: DWORD; State3: INT; start4: DWORD; State4: INT; END_VAR
Полученные значения передаются в PLC_PRG через глобальные переменныеКод:count:= count + 1; in:= SysPortIn(0); (*--- Первый вход ПЛК ---*) CASE State1 OF 0: IF in.0 THEN start1:= count; State1:= 1; END_IF 1: IF NOT in.0 THEN dT1_cycle:= count - start1; State1:= 0; END_IF END_CASE (*--- Второй вход ПЛК ---*) CASE State2 OF 0: IF in.1 THEN start2:= count; State2:= 1; END_IF 1: IF NOT in.0 THEN dT2_cycle:= count - start2; State2:= 0; END_IF END_CASE
Коэффициенты заполнения рассчитываются в PLC_PRGКод:VAR_GLOBAL dT1_cycle: DWORD; dT2_cycle: DWORD; dT3_cycle: DWORD; dT4_cycle: DWORD; END_VAR
Код:PROGRAM PLC_PRG VAR init:BOOL:=TRUE; (* Переменная для инициализации прерывания таймера при запуске основной программы *) F: REAL := 75.0; (*Частота ШИМ в Гц*) D1: REAL; (* коэфф. заполнения 1 в %*) D2: REAL; (* коэфф. заполнения 2 в %*) D3: REAL; (* коэфф. заполнения 3 в %*) D4: REAL; (* коэфф. заполнения 4 в %*) END_VAR (*Инициализируем обработчик прерывания таймера и настраиваем период срабатывания таймерного прерывания*) IF (init=TRUE) THEN SetIRQ(40); (*Период задается в мкс, должен быть кратен 20*) (*ВНИМАНИЕ! Включенный обработчик прерывания работает даже после останове программы, если необходимо его отключать и повторно включать, то делайте это в обработчике событий "Stop" и "Start"*) init:=FALSE; (*Обнуление переменной инициализации, чтобы она не происходила на втором и последующих циклах ПЛК*) END_IF (*коэффициент заполнения D= dT/T= dT * F *) D1:= DWORD_TO_REAL(dT1_cycle) * 40 * F / 10000; (* коэфф. заполнения в %*) D2:= DWORD_TO_REAL(dT2_cycle) * 40 * F / 10000; D3:= DWORD_TO_REAL(dT3_cycle) * 40 * F / 10000; D4:= DWORD_TO_REAL(dT4_cycle) * 40 * F / 10000;
Последний раз редактировалось petera; 13.11.2018 в 14:25.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Я понял. С точки зрения ресурсов ПЛК это тяжело ему? В основной программе будет обмен с модулями,облако и панель оператора.
Ну и в догонку какой колхоз пришлось на подопытным сделать что бы отладить прогу
IMG_20181112_195537.jpg
Генератора сигнала нету,пришлось на быстые выхода вместо реле прикрутить оптопару TLP620,все работает фронты четкие.
Petera еще раз спасибо большое, проверил все работает. Направление понял, код поправлю( не учитывается 0 и 100%).