Record PM67 ZPT voltages in UMP logger v3

This commit is contained in:
2026-10-01 16:00:48 +03:00
parent 316dd52f99
commit 1ce42a1877
4 changed files with 77 additions and 24 deletions

View File

@@ -20,12 +20,23 @@ __declspec(dllexport) int run_tests(void)
modbus[127] = 0x80;
modbus[0x50] = 6; modbus[0x51] = 16;
modbus[0x7B] = 1234; modbus[0x1C] = 160;
/* PM67 reception is independent of recording; all three CAN slots work. */
ump_log_can(0x8000U | 305U, 0xFEDCU, 0, 0);
ump_log_can(0x4000U | 7U, 0, 456, 0);
CHECK(ump_pm67_voltage[0] == 0xFEDCU && ump_pm67_voltage[1] == 456);
ump_log_can(305U, 1, 2, 3); /* Masked-out word must not overwrite. */
ump_log_can(0x2000U | 303U, 0, 0, 123);
ump_log_can(0x2000U | 6U, 0, 0, 789);
CHECK(ump_pm67_voltage[0] == 123 && ump_pm67_voltage[1] == 789);
ump_log_can(0x8000U | 306U, 999, 0, 0); /* Not a one-based CAN address. */
CHECK(ump_log_write(UMP_LOG_BASE, 1));
CHECK(ump_word(0, 0, 40) == 123 && ump_word(0, 0, 41) == 789);
CHECK(2UL * UMP_LOG_CAPACITY * UMP_LOG_WORDS <= LOG_PAGE_LEN);
CHECK(!ump_log_write(UMP_LOG_BASE, 1));
CHECK(!ump_log_write(UMP_LOG_BASE+1, 20));
for (i=0; i<900; i++) ump_log_tick();
CHECK(ump_count == UMP_LOG_CAPACITY);
CHECK(ump_word(0, 0, 0) == 101);
CHECK(ump_word(0, 0, 0) == 901-UMP_LOG_CAPACITY);
CHECK(ump_word(0, UMP_LOG_CAPACITY-1, 0) == 900);
CHECK(ump_word(0, 0, 8) == 1234);
CHECK(ump_word(0, 0, 24) == 6);
@@ -43,6 +54,11 @@ __declspec(dllexport) int run_tests(void)
CHECK(ump_word(1, UMP_LOG_CAPACITY/2-1, 2) == 0x102);
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 2) == 0x205);
CHECK(ump_count == 0 && ump_state == 1);
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 40) == 123);
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 41) == 789);
ump_log_can(0x8000U | 305U, 999, 0, 0);
CHECK(ump_word(0, ump_count-1, 40) == 999);
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 40) == 123);
generation = ump_generation;
archived = ump_word(1, UMP_LOG_CAPACITY-1, 0);
sequence = ump_sequence;
@@ -50,8 +66,8 @@ __declspec(dllexport) int run_tests(void)
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 0) == archived);
CHECK(ump_generation == generation);
CHECK(ump_sequence == sequence + 200);
CHECK(ump_log_read(UMP_LOG_LIVE+2) == 3);
CHECK(ump_log_read(UMP_LOG_LIVE+4) == ump_time-2);
CHECK(ump_log_read(UMP_LOG_LIVE+2) == UMP_LOG_LIVE_RECORDS);
CHECK(ump_log_read(UMP_LOG_LIVE+4) == ump_time-(UMP_LOG_LIVE_RECORDS-1));
CHECK(ump_log_write(UMP_LOG_BASE+3, 1));
CHECK(ump_log_write(UMP_LOG_BASE+2, UMP_LOG_CAPACITY-1));
CHECK(ump_log_read(UMP_LOG_DATA) == archived);
@@ -72,9 +88,15 @@ __declspec(dllexport) int run_tests(void)
/* CAN читает те же регистры и формирует цельный снимок из 124 слов.
* Запись по старым технологическим адресам через сервис запрещена. */
length = ump_can_prepare(3, UMP_LOG_BASE, 16, reply, &error);
CHECK(!error && length == 16 && reply[0] == 0x554D && reply[1] == 2);
CHECK(!error && length == 16 && reply[0] == 0x554D && reply[1] == 3);
length = ump_can_prepare(3, UMP_LOG_LIVE, 124, reply, &error);
CHECK(!error && length == 124);
CHECK(reply[2] <= UMP_LOG_LIVE_RECORDS);
for (i=4+reply[2]*UMP_LOG_WORDS; i<124; i++) CHECK(reply[i] == 0);
length = ump_can_prepare(3, UMP_LOG_DATA, 84, reply, &error);
CHECK(!error && length == 84);
length = ump_can_prepare(3, UMP_LOG_DATA, 42, reply, &error);
CHECK(!error && length == 42);
ump_can_prepare(3, UMP_LOG_LIVE, 126, reply, &error);
CHECK(error == 2);
ump_can_prepare(6, 127, 0x80, reply, &error);