1 / 1 / 0
Регистрация: 30.01.2015
Сообщений: 32
|
|||||||||||
1 | |||||||||||
Опрос нескольких датчиков по ModBus RTU из программы на Python (PyModbus)08.09.2023, 14:50. Показов 899. Ответов 27
Метки нет Все метки)
(
Опрашиваю датчики температуры и влажности через USB-RS485 конвертер. Если датчик один, всё прекрасно работает без sleep-ов. Но если надо два датчика опрашивать, без sleep-ов возникает ошибка:
Код
[SENS_0] 41.8%; 26.4°C [SENS_1] 41.8%; 26.3°C Traceback (most recent call last): File "/home/zenbooster/work/sht20/./sens.py", line 23, in <module> sens.read() File "/home/zenbooster/work/sht20/dev.py", line 19, in read self.t = res.registers[0] / 10 AttributeError: 'ModbusIOException' object has no attribute 'registers' dev.py:
0
|
|
08.09.2023, 14:50 | |
Ответы с готовыми решениями:
27
Последовательный опрос устройств по Modbus RTU Нет связи между модулем ввода (modbus rtu slave) и программой modbus poll на ноутбуке Преобразование modbus rtu в modbus tcp Modbus RTU. Запись в modbus регистр |
Заблокирован
|
|
09.09.2023, 10:01 | 2 |
Модбас рту? К компу подсоединяется лишь преобразователем модбас-USB.
Я уже намучился с этой дрянью, хуже модбаса сложно придумать извращение. ОС не в состоянии гарантированные задержки обеспечивать, вот и получается, что какие-то устройства работают, какие-то - нет. Рекомендую сделать преобразователь из убогого модбаса во вменяемый протокол, так в комп и заводить. И датчики можно сразу на CAN брать, чтобы не было проблем.
0
|
95 / 93 / 10
Регистрация: 30.10.2014
Сообщений: 279
|
|
10.09.2023, 14:57 | 3 |
Похоже на проблему слейва, не все корректно определяют начало и конец посылок мастера и других слейвов на проводах.
В настройках ваших слейвов есть что то похожее на "задержка передачи"? ---------- Как вариант, установите на компе связку виртуальных портов, на один порт свой скрипт, на второй программный модбас слейв. Мониторы, симуляторы и эмуляторы Modbus проверите корректность работы своей проги. 0.15 сек. это очень дофига. ------------ Писал как то терминалку для ModBus RTU без всяких библиотек на VB.NET, никаких проблем не помню.
0
|
1 / 1 / 0
Регистрация: 30.01.2015
Сообщений: 32
|
|
11.09.2023, 12:34 [ТС] | 4 |
Да, Модбас рту. Слышал, есть ещё модбас-TCP. С CAN не получится, т.к. в проекте есть ещё частотник, который умеет только RS-485. Может на esp32 ещё попробую сделать, если ничего другое не поможет...
Добавлено через 12 минут Слейвы - китайские датчики, измеряют одновременно влажность и температуру: XY-MD01 и CWT-TH04S. Из настроек, только slave id, baud rate и коррекции влажности и температуры. baud rate везде одинаковый: 9600. Программный модбас слейв надо будет попробовать... Возможно, надо просто попробовать другую библиотеку использовать...
0
|
Модератор
![]() |
|
11.09.2023, 18:21 | 5 |
ZenBooster, просто из любопытства - почему программа на Python?
Это для проверки работоспособности? Или программа для чего-то подобного Raspberry Pi? Не по теме: Ведь, если использовать программируемые реле (ПР) или ПЛК, то ограничиваешься указанием порта, его настроек, адреса устройства на шине и регистра, а сам обмен выполняется "операционной системой" этого ПР/ПЛК. Это я к тому, что хотя и довелось изучить протокол ModBus, но, если бы не случай, до сих пор ограничивался бы конфигурированием вместо программирования обмена.
0
|
Заблокирован
|
|
11.09.2023, 18:28 | 6 |
Это как?
В компьютер воткнута железка, с нее надо считывать данные. Как здесь обойтись без программирования? Вот, взять даже элементарный текстовый протокол: нужно читать, парсить и писать. Да, можно в простейшем случае баш-скриптами обойтись, но все равно это - программирование.
0
|
Модератор
![]() |
|
11.09.2023, 18:42 | 7 |
Потому, что обмен по распространённым протоколам "вшит" в ПР/ПЛК и достаточно сконфигурировать обмен.
Вижу у топикстартера упоминание датчиков и ПЧВ - значит или создание какой очень универсальной системы на Raspberry Pi или проверка работоспособности оборудования с компьютера на наиболее знакомом языке - тут реально безразлично, на каком. Мне любопытно, почему - Python. Если это проверка оборудования - да и махнуть рукой. Если создание программы, тогда нужно разбираться в языке, библиотеке.
0
|
Заблокирован
|
|
11.09.2023, 19:11 | 8 |
Но все равно к этой штуке нужно подключить компьютер. И написать ПО…
А ПЛК - извращение. Дичь какая-то в духе "лабвью". Зачем уродоваться, если можно на микроконтроллере железку сделать? Правда, если сделать будет намного дороже, чем готовую использовать, придется уродоваться… Обычно у ПЛК очень специфичный "язык", а готового софта в подавляющем большинстве случаев нет (по крайней мере, я встречал несколько ПЛК, везде под линукс был полный ноль, а у некоторых еще и отсутствовала документация на протокол - чтобы самому недостающий софт написать). Вот там как раз и может находиться проблема, если "библиотекописатель" отнесся к делу спустя рукава и не очень-то аккуратно соблюдая требования к протоколу. В любом случае, библиотека написана на С или С++, ее исходники есть — можно самому посмотреть, да переделать. Но в очередной раз напомню: ни одна ОС общего назначения не обеспечивает жестких временных интервалов. Да еще и работа с последовательным портом буферизуется на уровне ядра: даже если не использовать буферизацию stdio, можно на это нарваться. Какое уж там соблюдение дурацких требований к интервалам в посылке? Ну и самое печальное - попытаться из компьютера slave сделать или пассивно слушать линию (замучился, когда нужно было вводить данные из метеостанции в сервер, но было условие, что "мастер" - экранчик, отображающий данные, должен работать). Самый надежный способ - вообще не использовать устройства, которые "общаются" на древнючем убогом модбасе. Да пусть будет тупой текстовый протокол поверх 232 или 485 - всяко лучше и надежней. Если хочется проверки CRC - есть CAN (заодно он, в отличие от 232 или 485, позволяет мультимастер). Для работы с короткими линиями есть I2C (до трех метров на 100кГц у меня работают датчики) и SPI. Правда, SPI требует еще Cable Select на каждое устройство, что неудобно. А адрес I2C не у всех можно в широком диапазоне задать (те же TSYS01 пришлось в пары объединять, либо нужно было бы еще один провод на каждый вести в качестве Cable Select). Не знаю, чего людям не нравится простой текстовый протокол вида "геттер\n" и "сеттер=параметр\n". У меня все железки по 232, 485 и USB именно так работают. А для CAN я парочку своих протоколов придумал, чтобы гарантированно в 8 байт вмещаться (но мне и не нужно больше uint32_t/int32_t). Если уж прямо все очень сложно, можно CANopen использовать. Многие STM32 имеют "почти аппаратную" возможность реализации modbus RTU - если мне таки купят частотники не с CAN (увы, SEW eurodrive уже того, а китайцы с какого-то перепуга только модбас делают), то сделаю переходник modbus-USB на STM32 (или даже, что лучше, modbus-CAN, чтобы интегрироваться в существующую сеть). Добавлено через 3 минуты P.S. Почему-то многие думают, что реализация гальваноразвязанного CAN - дорогое удовольствие. Однако, переходничок CAN-USB с гальваноразвязкой CAN по нынешним ценам в 500 рублей уложится по себестоимости.
0
|
Модератор
![]() |
|
11.09.2023, 20:22 | 9 |
Это какой-то холивар. Избегаю этого. И сейчас спорить не буду.
Собственно, мы гостим в теме с вопросом: "как опросить датчики из программы на Python?" Я - не знаю. Но у топикстартера интересуюсь деталями - почему программа на Python?
0
|
Заблокирован
|
|
11.09.2023, 20:52 | 10 |
Подозреваю, что он не знает языка С. Хотя лично мне это непонятно: С значительно проще питона. Да и применить питон не везде получится (ну и, как я уже говорил, без "библиотек" на С или С++ питон вообще ничего не может, кроме самых элементарных хэллоуворлдов).
0
|
95 / 93 / 10
Регистрация: 30.10.2014
Сообщений: 279
|
|
12.09.2023, 10:07 | 11 |
Сами себе противоречите, возможно не знаете что в классических ПЛК как у Сименса, Омрона, Мицубиши, Дельты и.т.д. линуксом и подобным даже не пахнет.
Самый популярный протокол в промке, и даже стандартизирован. https://modbus.org/ Для частотников и для недорогих модулей ввода вывода вообще обязательным стал. Случайно не Вы на вике статью про модбас написали и охраняете её от правок? CAN тоже устаревший интерфейс, на смену CANopen и DeviceNet уже давно EtherNet/IP пришёл. Встроеный CAN есть у частотников Дельты, для Яскавы, Хитачи и многих других это опция, т.е. дополнительную плату заказать нужно. Если вы любитель CAN, могу этот ПЛК порекомендовать. https://aliexpress.ru/item/100... 7884883011 CAN у него есть, но нет поддержки CANopen. И не поверите, на нём есть модбас через кан. ![]()
0
|
Заблокирован
|
|
12.09.2023, 10:50 | 12 |
При чем здесь ПЛК, если ТС хочет к компьютеру железку подключить?
Напомнить про миллионы мух? Напоминаю. Эзернетом CAN не заменить, т.к. придется слишком удорожать систему (вместо 50-рублевого МК брать уже полноценный проц, что выйдет тысячи в 2-3 рублей). И да, не надо мне ПЛК рекомендовать. Я это УГ не использую. Вообще смысла нет, когда можно на МК нормальную железяку сделать. Добавлено через 2 минуты Кстати, в описани обеих моделей вообще отсутствует CAN.
0
|
95 / 93 / 10
Регистрация: 30.10.2014
Сообщений: 279
|
|
12.09.2023, 11:02 | 13 |
наверно из-за этого:
Про мух прикольно, т.е. вы не муха (вы выше этого), а все остальные тупые? Миллионы "мух" используют это, и естественно ошибаются? ![]() Вас в гугле забанили?
0
|
1 / 1 / 0
Регистрация: 30.01.2015
Сообщений: 32
|
|||||||||||
12.09.2023, 15:06 [ТС] | 14 | ||||||||||
Python - потому, что быстрее всего было написать скрипт именно на питоне. Скорости работы тут особые не нужны, по этому, подумал, что с/с++ будет излишним. Собираюсь контроллировать влажность в кладовке ГСК с помощью датчиков, частотника и улитки. Комп - raspberry pi с ubuntu 22.04 lts. Удобно, что можно зайти на него по ssh, подправить скрипт, проконтроллировать работу...
Но я написал тестовую программу на С++ с использованием библиотеки libmodbus и там ошибка воспроизводится: Makefile:
Код
zenbooster@zenpc:~/work/sht20/sens$ ./sens [SENS_0] T: 25°C; H: 48% Connection timed out zenbooster@zenpc:~/work/sht20/sens$ ./sens [SENS_0] T: 25°C; H: 48% [SENS_1] T: 26°C; H: 45% Connection timed out zenbooster@zenpc:~/work/sht20/sens$ ПР/ПЛК - это штука, которая может заменить компьютер в этой схеме? Просто не имел опыта работать с ними. Пока что с компьютера хотелось бы чтоб работало... Добавлено через 40 минут Сделал деление regs[] на 10.0, добавил modbus_set_debug(1): Код
zenbooster@zenpc:~/work/sht20/sens$ ./sens Opening /dev/ttyUSB0 at 9600 bauds (N, 8, 1) [02][04][00][01][00][02][20][38] Waiting for a confirmation... <02><04><04><00><FE><01><E4><A8><AF> [SENS_0] T: 25.4°C; H: 48.4% [03][04][00][00][00][02][70][29] Waiting for a confirmation... <03><04><04><01><C3><01><06><A8><16> [SENS_1] T: 26.2°C; H: 45.1% [02][04][00][01][00][02][20][38] Waiting for a confirmation... ERROR Connection timed out: select Connection timed out zenbooster@zenpc:~/work/sht20/sens$
0
|
Заблокирован
|
|
12.09.2023, 16:08 | 15 |
ZenBooster, пора уже попробовать "в лоб" - вообще без использования сторонних библиотек. Тем более, уж для чего, а для модбаса они не нужны однозначно.
Вот такую штуку я написал, чтобы прослушивать модбас в пассивном режиме и собирать данные, отсылаемые мастеру метеостанцией.
0
|
121 / 63 / 15
Регистрация: 26.11.2022
Сообщений: 346
|
|||||||||||
12.09.2023, 16:22 | 16 | ||||||||||
для поростых действий с устройством - типа проверки и установки конфигурации можно и через шелл скрит всё сделать.
пример - я так когда то давно проверял настройки для овеновского ПЧВ Кликните здесь для просмотра всего текста
или еще Кликните здесь для просмотра всего текста
1
|
121 / 63 / 15
Регистрация: 26.11.2022
Сообщений: 346
|
|
12.09.2023, 17:16 | 18 |
Eddy_Em, Это улилита https://www.modbusdriver.com/modpoll.html
но можно любую другую аналогичную по функционалу благо их полно типа такой https://github.com/favalex/modbus-cli и прочие https://manpages.ubuntu.com/ma... oll.1.html
1
|
Заблокирован
|
|
12.09.2023, 17:18 | 19 |
Не по теме: Aledveu, а зачем, если самому на С написать быстрей и проще? Я вот ТСу советую таки сначала попробовать "в лоб" решить без всяких левых "библиотек". На гольном С. С дебажным дампом всего, что происходит.
0
|
Модератор
![]() |
|
12.09.2023, 19:53 | 20 |
Может быть таймаут, который определён в библиотеке маловат для скорости 9600.
0
|
12.09.2023, 19:53 | |
Помогаю со студенческими работами здесь
20
modbus rtu Запрос MODBUS RTU Работа с Modbus RTU ModBus RTU и Arduino Modbus RTU на STM32F10x Modbus rtu wincc Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |