From 6cbce6c36081c80a4c572177d79506b106bf617d Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 2 Oct 2026 16:41:26 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BE=D0=B3=D0=BB=D0=B0=D1=81=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D1=82=D1=8C=20=D0=B4=D0=B5=D0=BC=D0=BE=20=D0=BB?= =?UTF-8?q?=D0=BE=D0=B3=D0=B3=D0=B5=D1=80=D0=B0=20=D0=A3=D0=9C=D0=9F=20?= =?UTF-8?q?=D1=81=20=D0=BF=D0=BE=D1=81=D1=82=D0=B8=D0=BD=D1=82=D0=B5=D1=80?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=D0=BE=D0=BC=20=D0=B2=20=D0=B4=D0=B5=D1=81?= =?UTF-8?q?=D1=8F=D1=82=D1=8C=20=D0=BF=D1=80=D0=BE=D1=86=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=B1=D0=B0=D0=BD=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- python/set_devices/ump_logger_demo.py | 28 +++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/python/set_devices/ump_logger_demo.py b/python/set_devices/ump_logger_demo.py index 2006312..b31d0e8 100644 --- a/python/set_devices/ump_logger_demo.py +++ b/python/set_devices/ump_logger_demo.py @@ -4,9 +4,9 @@ import math from set_devices import ump_logger as codec -def sample(time_ms, period_ms=20): +def sample(time_ms, period_ms=20, *, repeat=True): """Повторяемый цикл: пуск, разгон 6–16 мА, отключение и спад тока.""" - phase = time_ms % 6000 + phase = time_ms % 6000 if repeat else time_ms started = 1000 <= phase < 5000 reset = 5000 <= phase < 5300 # Как в прошивке: фронт команды включает выход на 1000 мс. @@ -42,16 +42,16 @@ def sample(time_ms, period_ms=20): def capture(period_ms): - """Пример архива: до 399 точек предыстории, отключение и 1 с после него.""" - before = list(range(5000, -1, -period_ms))[1:400][::-1] - after = list(range(5000 + period_ms, 6000, period_ms)) + [6000] - available = codec.CAPACITY - len(before) - 1 - truncated = len(after) > available - if truncated: - after = after[:available - 1] + after[-1:] - records = [sample(t, period_ms) for t in before + [5000] + after] - # Последний снимок относится к концу постинтервала, а не новому циклу. - records[-1]['event'] = 5 | (0x200 if truncated else 0) - records[-1]['post_truncated'] = int(truncated) - records[-1]['off_trigger'] = 0 + """Пример архива: 10% ёмкости банка записывается после отключения.""" + post_points = codec.CAPACITY // 10 + before = list(range(5000, -1, -period_ms))[1:codec.CAPACITY - post_points][::-1] + after = [5000 + i * period_ms for i in range(1, post_points + 1)] + records = [sample(t, period_ms) for t in before + [5000]] + for t in after: + # Continue the stopped state instead of starting another demo cycle. + record = sample(t, period_ms, repeat=False) + record['event'] = 1 + record['off_trigger'] = 0 + records.append(record) + records[-1]['event'] = 5 return records