Форум самогонщиков Сайт Барахолка Магазин Помощь солдатам

Ненавязчивая автоматизация ректификационной установки

Форум самогонщиков Автоматика
1 ... 113 114 115 116 117 118 119 ... 132 116
ekochnev Магистр Екатеринбург 207 54
Отв.2300  30 Дек. 21, 07:18
NBVV, я так понимаю, это что-то с установкой или версией питона связано. Чего-то не хватает. Я с данной версией библиотеки не работаю, но ради интереса сейчас повторил Ваш эксперимент. У меня тоже так не работает, но ошибки другие:

>>> from lite import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "d:\projects\distiller\trunk\soft\untested\oldbean_0.4.1.3\lite_0413\lite.py", line 32, in <module>
import os, select, tty, termios
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.2544.0_x64__qbz5n2kfra8p0\lib\tty.py", line 5, in <module>
from termios import *
ModuleNotFoundError: No module named 'termios'

Версия питона установлена 3.9.9, пробовал на компьютере под Windows
NBVV Специалист Новосибирск 124 2
Отв.2301  30 Дек. 21, 07:30, через 12 мин
Дело в том, что smbus уже встречался несколько раз в строках более ранних чем 1212, и там не было ругани.
ekochnev Магистр Екатеринбург 207 54
Отв.2302  30 Дек. 21, 07:32, через 3 мин
Сейчас на малинке попробовал, правда с подключенным крейтом, там нет ругани

Если крейт отключить и запускать на чистой малинке, то выдает вот это:

Python 3.7.3 (default, Dec 20 2019, 18:57:59)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from lite import *
Не обнаружено ни одно i2c устройство.
Возможно, проблемы с шиной i2c (проверьте ее: i2cdetect -y 1)

Добавлено через 40мин.:

Дело в том, что smbus уже встречался несколько раз в строках более ранних чем 1212, и там не было ругани.NBVV, 30 Дек. 21, 07:30

Это совершенно ничего не значит. Питон - это интерпретирующий язык. И если строки синтаксически верны, но еще фактически не выполнялись, то на них и не будет ругаться. Ругнулось когда фактически дошло до попытки выполнения строки с отсутствующим модулем, и не важно при этом где она физически находится в тексте.
NBVV Специалист Новосибирск 124 2
Отв.2303  30 Дек. 21, 14:07
На малинке у Вас 3.7.3 python,а у меня 3.9.2 - может тута))?
Проблема в том, что я в питоне "0". Я его спешно изучаю, но не поспеваю...
sig Кандидат наук Ростов-на-Дону 304 138
Отв.2304  30 Дек. 21, 17:36
На малинке у Вас 3.7.3 python,а у меня 3.9.2 - может тута))?NBVV, 30 Дек. 21, 14:07
Вряд-ли. У меня на стационарном компе (Fedora-34) под python-3.9.9 тоже
>>> from lite import *
Не обнаружено ни одно i2c устройство.
Возможно, проблемы с шиной i2c (проверьте ее: i2cdetect -y 1)

Правда, сначала ругнулась на отсутствие модуля smbus. Пришлось сделать
pip install smbus
NBVV Специалист Новосибирск 124 2
Отв.2305  31 Дек. 21, 03:23
И я сделал pip install smbus, но ничего не изменилось:

i@raspberrypi:~ $ pip install smbus
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting smbus
Downloading https://www.piwheels.org/...inux_armv7l.whl (39 kB)
Installing collected packages: smbus
Successfully installed smbus-1.1.post2
pi@raspberrypi:~ $ cd /home/pi/Desktop/Amrita/lite_0413
pi@raspberrypi:~/Desktop/Amrita/lite_0413 $ python3
Python 3.9.2 (default, Mar 12 2021, 04:06:34)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from lite import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/pi/Desktop/Amrita/lite_0413/lite.py", line 1212, in <module>
bus = smbus.SMBus(1)
FileNotFoundError: [Errno 2] No such file or directory
>>>
OldBean Доцент Красноярск 1K 1.4K
Отв.2306  31 Дек. 21, 04:51
И я сделал pip install smbus, но ничего не изменилось:NBVV, 31 Дек. 21, 03:23
Попробуйте
pip3 install smbus
Просто pip это для 2-го питона.

С наступающим Новым годом, уважаемые коллеги!!!
Ненавязчивая автоматизация ректификационной установки
Ненавязчивая автоматизация ректификационной установки. Автоматика.
sig Кандидат наук Ростов-на-Дону 304 138
Отв.2307  01 Янв. 22, 13:52
Попробуйте
pip3 install smbus
Просто pip это для 2-го питона.OldBean, 31 Дек. 21, 04:51
Это верное замечание (просто у меня нет в системе 2-го Питона). Но проблема явно не в отсутствии модуля smbus.
Ругается не на его отсутствие - ModuleNotFoundError: No module named 'smbus'
а на попытку использования -
bus = smbus.SMBus(1)
FileNotFoundError: [Errno 2] No such file or directory

Поэтому, скорее всего нет служебного файла /dev/i2c-1
Т.е. подсистема i2c не включена в конфиге ядра. Делаем
sudo raspi-config
выбираем пункт меню Interface Options
затем выбираем I2C Enable.
Перегружаемся.
Это же можно сделать и из графики - почитай https://www.abelectronics.co.uk/...-raspbian-linux
Там еще и скорость по I2C надо настраивать в /boot/config.txt

Всех с новым 2022 годом!
Ненавязчивая автоматизация ректификационной установки
Ненавязчивая автоматизация ректификационной установки. Автоматика.

А тем временем теме исполнилось 5 лет!!!
OldBean Доцент Красноярск 1K 1.4K
Отв.2308  01 Янв. 22, 16:12
Но проблема явно не в отсутствии модуля smbus.sig, 01 Янв. 22, 13:52
Возможно.

Но, конечно, в любом случае начать нужно с низкоуровневых вещей:
1) включения шины i2c (в Raspberry Pi OS - это меню Параметры->Raspberry Pi Configuration, панель Interfaces, включить опцию I2C "Enable"),
2) установки i2c-tools (если, конечно, не установлен: sudo apt install i2c-tools),
3) списка активных i2c-шин (i2cdetect -l) и
4) получения списка устройств на конкретной i2c-шине (например, на 1-й: i2cdetect -y 1).
И уже только после этих действий, имеет смысл разбираться что не так с библиотекой smbus.

А тем временем теме исполнилось 5 лет!!!sig, 01 Янв. 22, 13:52
И вправду... Можно сказать - маленький юбилей! Ох, как быстро время-то летит!!!
Ненавязчивая автоматизация ректификационной установки
Ненавязчивая автоматизация ректификационной установки. Автоматика.
NBVV Специалист Новосибирск 124 2
Отв.2309  03 Янв. 22, 02:15
Выполнил 4 пункта от OldBean (после второго малинка сказала, что I2C уже установлен), затем: pip3 install smbus и все получилось:

Не обнаружено ни одно i2c устройство.
Возможно, проблемы с шиной i2c (проверьте ее: i2cdetect -y 1)

Спасибо)!

Добавлено через 4ч. 55мин.:

Подключаю датчики 18B20. OldBean писал: "Ну и конечно, для длинной шины 1-Wire желательно использовать витые пары (категории 5), как это отмечается в этом же документе. Подключение витых пар, как советует коллега makh, можно выполнить следующим образом: одна пара - "питание-земля", вторая - "сигнальная линия - земля".
Вопрос: земля рядом с датчиком висит в воздухе или как-то пытаться коннектить ее на колонну?

Добавлено через 31мин.:

Да, и что значит длинная шина? У меня максимальная длина между датчиком и хабом будет 4 метра. Но датчиков планирую 10-15 шт. Нужна витая пара на такой длине?
OldBean Доцент Красноярск 1K 1.4K
Отв.2310  03 Янв. 22, 10:26
Вопрос: земля рядом с датчиком висит в воздухе или как-то пытаться коннектить ее на колонну?NBVV, 03 Янв. 22, 02:15
Для большей помехоустойчивости сетей 1-Wire, рекомендуется использовать витые пары. Их можно сделать самому, но удобнее купить сетевые 4-проводные кабели (две витые пары) 5 категории для Ethernet. Лучше многожильные и экранированные (пример). Но если уровень электромагнитных помех невелик (как, например, в обычной квартире где нет постоянной сварки или фазовых регуляторов ну шибко мощных нагрузок :), то можно и обычные неэкранированные кабели. Ну и если не гнуть провода сильно часто, то пойдут и одножильные пары. По одной витой паре пускаем +5V (питание датчиков) и землю. По второй витой паре пускаем - сигнальную линию (1-Wire) и землю. Это нужно для компенсации наводок как по питанию, так и по сигнальной линии. Обе земли с одной стороны цепляются к земляной линии хаба (или крейта), а с другой стороны обе земляные линии цепляем к земляному выводу датчика. Подсоединять эти (сигнальные) земли к колонне не нужно.
У меня максимальная длина между датчиком и хабом будет 4 метра. Но датчиков планирую 10-15 шт. Нужна витая пара на такой длине?NBVV, 03 Янв. 22, 02:15
Уже желательна.
NBVV Специалист Новосибирск 124 2
Отв.2311  09 Янв. 22, 14:41
И вновь у меня затык. Подключил малинку к крейту, в котором только одна плата с BMP 180. Вроде I2C ее видит.
2022-01-09-111126_1024x768_scrot.png
2022-01-09-111126_1024x768_scrot. Ненавязчивая автоматизация ректификационной установки. Автоматика.


При импорте lite выдает:

pi@raspberrypi:~ $ cd /home/pi/Desktop/Amrita/49123.349793/lite_0413
pi@raspberrypi:~/Desktop/Amrita/49123.349793/lite_0413 $ python3
Python 3.9.2 (default, Mar 12 2021, 04:06:34)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from lite import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/pi/Desktop/Amrita/49123.349793/lite_0413/lite.py", line 1314, in <module>
exec(cinit) # Выполним код cinit, чтобы сформировать функцию finit()
File "<string>", line 1
def finit():
^
IndentationError: expected an indented block
>>>

Что предпринять?

Добавлено через 22мин.:

Добавил плату хаба, его тоже I2C видит, но далее также ругается на строку 1314.
ekochnev Магистр Екатеринбург 207 54
Отв.2312  09 Янв. 22, 17:23
Версия питона установлена 3.9.9, пробовал на компьютере под Windowsekochnev, 30 Дек. 21, 07:18

Информация просто на заметку:
Сейчас немного покопался с софтом, оказывается процитированное выше я делал совершенно напрасно. Библиотека lite.py абсолютно несовместима с версией питона для Windows из-за использования модуля termios, которого в принципе не существует для платформы Windows ни для какой версии питона. Так что только юникс-подобные системы. Хотя логи, генерируемые малинкой, я просматриваю всегда только на Windows-компьютере, тоже питоновским скриптом. Хотел и разработку-отладку рабочих скриптов туда же перенести...
OldBean Доцент Красноярск 1K 1.4K
Отв.2313  09 Янв. 22, 18:40
Что предпринять?NBVV, 09 Янв. 22, 14:41
В генерируемой "на лету" функции cinit производится инициализация всех исполнительных устройств. А у Вас оказались подключенными к шине только датчики. Поэтому функция получилась "пустая". Т.е. - только объявление функции. Без тела. Это приводит к ошибке интерпретатора питона, когда он пытается выполнить такую "недоделанную" функцию. В следующей версии библиотеки я вставлю туда затычку (пустой оператор pass) для таких ситуаций, но сейчас Вы это можете сделать сами следующим образом.
Замените строку 1307 в файле библиотеки lite.py v.0413
cinit = 'def finit():\n' # Начало строки кода инициализации режима мониторинга
на такую:
cinit = 'def finit():\n  pass\n' # Начало строки кода инициализации режима мониторинга
Два пробела внутри обязательны (!) Теперь даже если к крейту не будет подключено ни одного исполнительного устройства, то все равно в теле функции будет хотя бы один оператор (в данном случае пустой: pass) и интерпретатор перестанет ругаться.

Совсем без исполнительных устройств мне как-то не приходило в голову тестировать библиотеку lite. Поэтому спасибо за обнаруженную ошибку!
NBVV Специалист Новосибирск 124 2
Отв.2314  13 Янв. 22, 13:13
Следующая остановка)). Все платы на шине I2C малинка определяет корректно. Затык в том, что у меня воткнуто в крейт три модуля PDM, а малинка находит только один:

0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- 13 -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
pi@raspberrypi:~ $ cd /home/pi/Desktop/Amrita/lite_0413
pi@raspberrypi:~/Desktop/Amrita/lite_0413 $ python3
Python 3.9.2 (default, Mar 12 2021, 04:06:34)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from lite import *
>>> print(hinfo())
Список устройств, обнаруженных на шине i2c и хабах:
w0 13_8_A3 PDM-контроллер [65541.5535, 255, 255]

Сначала, подумал, что два модуля неисправны, но тосуя их пришел к выводу, что исправны все.
ekochnev Магистр Екатеринбург 207 54
Отв.2315  13 Янв. 22, 13:15, через 3 мин
А вы прошивки для каждого индивидуальные сделали или у всех одинаковые адреса?
NBVV Специалист Новосибирск 124 2
Отв.2316  13 Янв. 22, 14:22
Одинаковые.

Добавлено через 5мин.:

Только эту строку изменить: #define ADDR 0x13 // Адрес устройства на шине I2C ?
ekochnev Магистр Екатеринбург 207 54
Отв.2317  13 Янв. 22, 14:28, через 6 мин
Да, каждой плате нужно дать свой адрес
NBVV Специалист Новосибирск 124 2
Отв.2318  13 Янв. 22, 15:32
Адрес любой из свободных (к примеру 0x16 и 0x17 ) или тоже есть тонкости?
ekochnev Магистр Екатеринбург 207 54
Отв.2319  13 Янв. 22, 15:51, через 20 мин
NBVV, главное чтобы не перекрывалось с другими платами, иначе будут конфликты.
Вы посмотрите по текстам прошивок, где что используется по-умолчанию, на вскидку по памяти это:
0х11 - RMS (Детектор нуля)
0х12 - Relay (Контактор)
0х13 - PDM (Контроллер ТЭН)
0х14 - PWM (Контроллер клапана отбора)
0х15 - Hub (Хаб температурных и прочих датчиков)
0х19 - Servo (Сервопривод)
0x76 - BMP280 (Датчик давления)
0x77 - BMP180 (Датчик давления)
В принципе повторным устройствам можно давать любые не занятые номера. Лично я для однотипных устройств увеличиваю старший разряд оставляя младший таким же, например, у меня работают два контактора с адресами 0х12 и 0х22, планируется третий контактор 0х32, а также два клапана 0х14 и 0х24. Тогда старший разряд как бы всегда показывает порядковый номер устройства, а младший - его тип, мне так самому удобнее.