/
DimerTrue
/
ecg_gui
Обзор
Документация
Войти
/
DimerTrue
/
ecg_gui
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
tests/modbus_tests/test_write_device_simulator.py
80 строк
3 KB
dimer
fix ui bugs; feat: add unit tests modbus
27 июл 2026, 18:01
27 июл 2026, 18:01
b5f0b34
Код
Авторство
О чём код?
import sys import os import time import random # Добавляем корень проекта в путь project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")) sys.path.insert(0, project_root) from modbus_device.device.manager import DeviceModbusRTU from modbus_device.protocol import ProtocolField def test_simulator_write_logic(): print("=" * 60) print("ТЕСТ СИМУЛЯТОРА: Запись и проверка значений") print("=" * 60) # Создаем устройство в режиме симулятора (порт не нужен) device = DeviceModbusRTU(ser=None, slave_id=1, use_simulator=True) if not device.connect(): print("❌ Ошибка запуска симулятора") return try: # 1. Тест обычной записи (например, минимальное напряжение) print("\n--- Тест 1: Запись обычного регистра ---") test_val = random.randint(5000, 10000) print(f"Отправляем значение: {test_val} в регистр VOLTAGE_OUTPUT_MIN_W") success = device.write(ProtocolField.VOLTAGE_OUTPUT_MIN_W.value, test_val) if success: # Даем симулятору время обновить внутренний поток (если нужно) time.sleep(0.2) # Читаем обратно из регистра READ (куда симулятор должен был сохранить значение) frame = device.read() read_reg = frame.get(ProtocolField.VOLTAGE_OUTPUT_MIN_R) if read_reg and read_reg.raw_value == test_val: print( f"✅ Успех! Прочитано из VOLTAGE_OUTPUT_MIN_R: {read_reg.raw_value}" ) else: print( f"❌ Ошибка! Ожидалось {test_val}, прочитано: {read_reg.raw_value if read_reg else 'None'}" ) else: print("❌ Ошибка записи") # 2. Тест записи статуса (битовая маска) # Не используется, поскольку данное значение специфическое # 3. Тест смены ID и Baudrate (симуляция) print("\n--- Тест 3: Смена ID и Baudrate ---") new_id = 5 new_baud_num = 3 # 38400 # В симуляторе это просто меняет внутренние переменные res = device.write_baudrate(new_baud_num, new_id) print(f"Результат записи настроек: {res}") frame = device.read() id_reg = frame.get(ProtocolField.SLAVE_ID) baud_reg = frame.get(ProtocolField.BAUDRATE) print(f"Текущий ID в симуляторе: {id_reg.raw_value if id_reg else 'N/A'}") print( f"Текущий Baudcode в симуляторе: {baud_reg.raw_value if baud_reg else 'N/A'}" ) finally: device.disconnect() print("\n✓ Тест симулятора завершен") if __name__ == "__main__": test_simulator_write_logic()