atomo2 Posted October 31, 2023 Share Posted October 31, 2023 Добрый день. Подскажите можно ли считать данные с ТРМки без 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() Link to comment
Markus Posted October 31, 2023 Share Posted October 31, 2023 Добрый день! Какое устройство Moxa используется? Что выводится в терминале при запуске скрипта? COM-порт в системе создан? Через какую утилиту? Link to comment
atomo2 Posted October 31, 2023 Author Share Posted October 31, 2023 21 минуту назад, Markus сказал: Добрый день! Какое устройство Moxa используется? Что выводится в терминале при запуске скрипта? COM-порт в системе создан? Через какую утилиту? Использую Moxa 5150. Запускаю скрипт через Python , выводится (COM-порт COM2 успешно открыт для Modbus RTU. Произошло исключение: Slave reported illegal data address) , что говорит о неверном регистре. Да, com port создан и в диспетчере устройств отображается как Nport Com2. Link to comment
atomo2 Posted October 31, 2023 Author Share Posted October 31, 2023 Так переписал код вроде получилось (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() Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now