Регистратор-самописец для TXT на Питоне
Регистратор-самописец для TXT на Питоне
Здравствуйте!
Я изучаю язык программирования Питон. В прошлом топике вы подсказали мне как составить управляющую программу для мобильной тележки чтобы она могла ехать вдоль маршрутной линии. Теперь мне надо отладить эту программу и у меня есть такой вопрос - как можно организовать регистрацию значений сигналов и переменных во время исполнения программы в контроллере TXT? Зарегистрированные данные можно потом передать на компьютер и проанализировать. Думаю, что это будет полезно для отладки системы управления.
В Robopro, например, есть регистратор-осциллограф, но он работает только в режиме исполнения Онлайн когда управляющая программа выполняется на ПК, а TXT работает как блок ввода-вывода.
Я изучаю язык программирования Питон. В прошлом топике вы подсказали мне как составить управляющую программу для мобильной тележки чтобы она могла ехать вдоль маршрутной линии. Теперь мне надо отладить эту программу и у меня есть такой вопрос - как можно организовать регистрацию значений сигналов и переменных во время исполнения программы в контроллере TXT? Зарегистрированные данные можно потом передать на компьютер и проанализировать. Думаю, что это будет полезно для отладки системы управления.
В Robopro, например, есть регистратор-осциллограф, но он работает только в режиме исполнения Онлайн когда управляющая программа выполняется на ПК, а TXT работает как блок ввода-вывода.
IDKFA!
-
- Сообщения: 42
- Зарегистрирован: 10 дек 2019, 18:13
Re: Программа на Питоне для мобильного робота
Добрый день!
Можно попробовать создать файл в формате txt, и с каждой итерацией цикла программы писать новую строчку со значениями сигналов и переменных. Ещё можно попробовать с помощью библиотеки matplotlib создавать графики.
Можно попробовать создать файл в формате txt, и с каждой итерацией цикла программы писать новую строчку со значениями сигналов и переменных. Ещё можно попробовать с помощью библиотеки matplotlib создавать графики.
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: Программа на Питоне для мобильного робота
Это хороший вариант хотя и не самый экономичный по потреблению памяти. Есть несколько важных моментов, на которые стоит обратить внимание при реализации:Можно попробовать создать файл в формате txt, и с каждой итерацией цикла программы писать новую строчку со значениями сигналов и переменных.
Важно выбрать правильное хранилище для размещения файла журнала. Если писать на встроенный флеш, то есть риск быстро исчерпать допустимое количество циклов записи. Поэтому я рекомендую использовать виртуальную файловую систему tmpfs, в TXT она подмонтирована в папку /tmp. В ней, кстати, уже есть папка log, которая является стандартным местом для хранения различных журналов в ОС Linux.
Еще одно важное требование к системе регистрации - ограничение максимального размера файла журнала и максимальное количество сегментов в журнале если выполняется сегментирование при переполнении. Если не ограничивать максимальный размер, то рано или поздно произойдет авария - файл журнала займет все пространство, выделенное в ОЗУ для файловой системы tmpfs.
Не думаю, что это хорошая идея. Дело в том, что система управления тележкой должна формировать сигналы управления в реальном времени - каждые 10 мс электропривод должен получить обновленное задание иначе есть риск укатиться с маршрута. Если мы нагрузим процессор контроллера TXT задачей отрисовки графиков, есть вероятность, что на задачу управления не хватит ресурсов процессора. Графики можно рисовать на этапе обработки полученных данных. Для этого надо выгрузить журнал из TXT.Ещё можно попробовать с помощью библиотеки matplotlib создавать графики.
-
- Сообщения: 42
- Зарегистрирован: 10 дек 2019, 18:13
Re: Программа на Питоне для мобильного робота
А какие есть экономичные варианты по потреблению памяти?
Re: Программа на Питоне для мобильного робота
Наверное г-н Кубикус имеет ввиду запись значений в файл в бинарном виде, а не в текстовом. Число 0,1234567 в текстовом формате ascii занимает 9 байт, а в бинарном float32 всего 4 байта
IDKFA!
-
- Сообщения: 42
- Зарегистрирован: 10 дек 2019, 18:13
Re: Программа на Питоне для мобильного робота
Доброго вечера! Мне удалось получить информацию о состоянии датчиков маршрута и моторов (включён/выключен).
Что хотите с этими данными сделать дальше?
Алгоритм такой: после нажатия кнопки на тележке, создаётся файл с расширением txt. Далее в него записывается временная метка и состояние датчиков и моторов. Затем после останова тележки я выгружаю файл в Excel и разбиваю полученные строки на колонки.Что хотите с этими данными сделать дальше?
Re: Программа на Питоне для мобильного робота
Что у вас хранится в поле timestamp? Не очень похоже на время. Можете показать ваш код?
Последний раз редактировалось Вася М. 25 ноя 2021, 11:20, всего редактировалось 1 раз.
IDKFA!
-
- Сообщения: 42
- Зарегистрирован: 10 дек 2019, 18:13
Re: Программа на Питоне для мобильного робота
Да конечно:
Код: Выделить всё
import ftrobopy
import time
# Движение робота по линии
# Подключаемся к контроллеру TXT
# Чтобы программа работала на TXT автономно, конструктору класса ftrobopy должен быть передан параметр use_TransferAreaMode=True
txt = ftrobopy.ftrobopy(use_TransferAreaMode=True)
# txt = ftrobopy.ftrobopy('192.168.7.2', 65000)
# Создаём переменные для каждого сигнала
TrailL = txt.trailfollower(1) # Левый датчик маршрута - вход TXT 01
TrailR = txt.trailfollower(2) # Правый датчик маршрута - вход TXT 02
I3 = txt.input(3) # Кнопка - вход TXT 03
MotorL = txt.motor(1) # Левый мотор - выход TXT 01
MotorR = txt.motor(2) # Правый мотор - выход TXT 02
O5 = txt.output(5) # Лампы - выход TXT 05
# Объявляем переменные
run = bool(0) # Запуск
flag = bool(0) # Флаг кнопки
motL = bool(0) # Движение левого колеса
motR = bool(0) # Движение правого колеса
while True:
#Метка времени (по местному)
sec = time.localtime()
# Вызываем метод state() для определения состояния кнопки
SW = I3.state()
if SW and not flag:
flag = 1
if not SW and flag:
run = not run
if run:
f = open('/tmp/log.txt','w')
if not run:
f.close()
flag = 0
# Движение по линии запущено
if run:
O5.setLevel(512)
TLstate = TrailL.state()
TRstate = TrailR.state()
if TLstate and not TRstate:
motL = 1
motR = 0
if not TLstate and TRstate:
motL = 0
motR = 1
if TLstate and TRstate:
motL = 0
motR = 0
if not TLstate and not TRstate:
motL = 1
motR = 1
MotorL.setSpeed(motL * 512)
MotorR.setSpeed(motR * 512)
#запись в txt файл
f.write(str(sec.tm_hour) + '.' + str(sec.tm_min) + '.' + str(time.perf_counter())
+ ',' + str(TLstate) + ',' + str(TRstate) + ',' + str(motL) + ',' + str(motR))
f.write('\n')
# Движение по линии остановлено
else:
txt.stopAll()
time.sleep(0.01)
Re: Программа на Питоне для мобильного робота
Спасибо!
Мне не понятно как использовать значение из поля timestamp для вывода графика. По идее там должны быть монотонно возрастающие отcчёты времени с разрешением 1 мс. Можете пояснить?
И ещё не понятно как выгрузить файл журнала из TXT?
Мне не понятно как использовать значение из поля timestamp для вывода графика. По идее там должны быть монотонно возрастающие отcчёты времени с разрешением 1 мс. Можете пояснить?
И ещё не понятно как выгрузить файл журнала из TXT?
IDKFA!
-
- Сообщения: 42
- Зарегистрирован: 10 дек 2019, 18:13
Re: Программа на Питоне для мобильного робота
Выгрузить файл можно по SFTP протоколу, используя бесплатный клиент FileZilla
В верхней части окна в качестве хост устройства вводим IP адрес контроллера TXT, имя пользователя стандартно ROBOPro, пароль такой же, порт 22. В левой части окна находим целевую директорию, куда нужно выгрузить файл. В правой части окна программы заходим в папку "/tmp" и там будет лежать файл "log.txt".