Jump to content
Форум по продукции MOXA

atomo2

Пользователи
  • Posts

    3
  • Joined

  • Last visited

Posts posted by atomo2

  1. Так переписал код вроде получилось (COM-порт COM2 успешно открыт для Modbus RTU.
    Прочитанные данные: [16818])

    import serial
    from pymodbus.client.sync import ModbusSerialClient as ModbusClient
    
    # Настройки COM-порта
    port_name = "COM2"
    baud_rate = 19200
    data_bits = 8
    stop_bits = 1
    parity = 'N'
    
    # Создайте экземпляр Modbus RTU клиента
    client = ModbusClient(method="rtu", port=port_name, stopbits=stop_bits,
                          bytesize=data_bits, parity=parity, baudrate=baud_rate)
    
    # Откройте соединение с устройством
    if client.connect():
        print(f"COM-порт {port_name} успешно открыт для Modbus RTU.")
    
        # Адрес устройства
        device_address = 16  # 0x0010
    
        # Чтение регистров
        read_start_address = 4105  # 0x1009
        read_count = 1  # Количество регистров для чтения
    
        # Прочитайте регистры
        response = client.read_holding_registers(read_start_address, read_count, unit=device_address)
    
        if response.isError():
            print(f"Произошла ошибка при чтении регистра: {response}")
        else:
            print(f"Прочитанные данные: {response.registers}")
    
        # Закройте соединение
        client.close()
    else:
        print(f"Не удалось открыть COM-порт {port_name} для Modbus RTU.")
    
    # Закрытие COM-порта
    client.close()


     

  2. 21 минуту назад, Markus сказал:

    Добрый день!

    Какое устройство Moxa используется? Что выводится в терминале при запуске скрипта? COM-порт в системе создан? Через какую утилиту?

    Использую Moxa 5150. Запускаю скрипт через Python , выводится  (COM-порт COM2 успешно открыт для Modbus RTU. Произошло исключение: Slave reported illegal data address) , что говорит о неверном регистре. Да, com port создан и в диспетчере устройств отображается как Nport Com2.

    1.png

    2.png

    3.png

  3. Добрый день. Подскажите можно ли считать данные с ТРМки без opc-сервера, без всяких scada систем.

    А считать скриптом?  Вот  мой набросок скрипта, который успешно подключается, но ничего не считывает (COM-порт COM2 успешно открыт для Modbus RTU. Произошло исключение: Slave reported illegal data address). При всех этих же настройках в SimpLight данные считываются.

    import minimalmodbus
    import serial
    
    # Настройки COM-порта
    port_name = "COM2"
    baud_rate = 19200
    data_bits = 8
    stop_bits = 1
    parity = serial.PARITY_NONE
    rtscts = True
    xonxoff = False
    
    # Создаем объект для работы с COM-портом
    ser = serial.Serial(
        port=port_name,
        baudrate=baud_rate,
        bytesize=data_bits,
        stopbits=stop_bits,
        parity=parity,
        rtscts=rtscts,
        xonxoff=xonxoff
    )
    
    # Ожидание установки соединения с COM-портом
    while not ser.is_open:
        pass
    
    # Успешное подключение к COM-порту
    print(f"COM-порт {ser.port} успешно открыт для Modbus RTU.")
    
    # Адрес устройства (0x0010)
    device_address = 16
    
    # Создаем объект Modbus с указанными параметрами
    instrument = minimalmodbus.Instrument(ser, device_address)
    
    # Таймаут ожидания (в миллисекундах)
    instrument.serial.timeout = 1  # Устанавливаем таймаут в 1 секунду
    
    # Количество повторов при ошибке
    instrument.serial.retries = 3
    
    # Количество регистров в запросе
    num_registers = 125
    
    try:
        # Чтение данных с устройства
        data = instrument.read_registers(0, num_registers)
    
        # Ваша логика обработки данных
        print(f"Прочитанные данные: {data}")
    
    except Exception as e:
        print(f"Произошло исключение: {e}")
    
    # Закрываем COM-порт
    ser.close()


     

     

×
×
  • Create New...