Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
https://www.youtube.com/@%D0%9F%D0%B...BA%D0%BE%D0%B2
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Признаю, был не прав
А если из OSCATовского кода удалить вход для сброса и удалить начальную инициализацию, то останется всего
Код:FUNCTION_BLOCK ONTIME VAR_INPUT IN : BOOL; END_VAR VAR_IN_OUT SECONDS : UDINT; CYCLES : UDINT; END_VAR VAR tx: DWORD; last : DWORD; edge : BOOL; ms: DWORD; END_VAR tx := TIME_TO_DWORD(TIME()); (* read system time *) IF IN THEN ms := (tx - last) + ms; (* add the current milliseconds *) IF ms >= 1000 THEN seconds := seconds + 1; ms := ms - 1000; END_IF cycles := cycles + BOOL_TO_UINT(NOT edge); END_IF last := tx; edge := in;
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
https://www.youtube.com/@%D0%9F%D0%B...BA%D0%BE%D0%B2
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Что там разворачивать? Ну, плюс одна переменная, да.Так разверните в этом варианте еще код двух используемых ФБ R_TRIGВ OSCAT'овском варианте есть функция сброса и нет ошибки накопления. Теоретически, мой код в худшем случае показывает наработку в 1000 раз больше/меньше действительной — это когда устройство включается/выключается на 501 миллисекунде и выключается/включается на 502-й ежесекундно. То есть им можно пользоваться только если вас устраивает ошибка ±1 с на каждом цикле включения.Код:VAR in, _in, ticktock, _ticktock: BOOL; END_VAR VAR RETAIN uptime, start_count: DWORD; END_VAR ticktock := TIME_TO_DWORD(TIME()) MOD 1000 > 500; uptime := uptime + BOOL_TO_DWORD(in AND ticktock > _ticktock); start_count := start_count + BOOL_TO_DWORD(in > _in); _ticktock := ticktock; _in := in;
Последний раз редактировалось Yegor; 15.03.2015 в 21:55.
Tek_schet (*Сигнал пуска*)
импульсы на вход поступают.
Подаю на Tek_schet (*Сигнал пуска*) "1" и ничего.
после компиляции и запуска эмуляции "старт" нажимаете?
код скиньте, я проверю и исправлю, если ошибка где.
Пример из рабочей программы выдернут.
Много лет работает.