Регистратор-самописец для TXT на Питоне

Обсуждаем модели и конструкции, построенные своими руками
Вася М.
Сообщения: 26
Зарегистрирован: 20 дек 2010, 19:28

Регистратор-самописец для TXT на Питоне

Сообщение Вася М. »

Здравствуйте!

Я изучаю язык программирования Питон. В прошлом топике вы подсказали мне как составить управляющую программу для мобильной тележки чтобы она могла ехать вдоль маршрутной линии. Теперь мне надо отладить эту программу и у меня есть такой вопрос - как можно организовать регистрацию значений сигналов и переменных во время исполнения программы в контроллере TXT? Зарегистрированные данные можно потом передать на компьютер и проанализировать. Думаю, что это будет полезно для отладки системы управления.

В Robopro, например, есть регистратор-осциллограф, но он работает только в режиме исполнения Онлайн когда управляющая программа выполняется на ПК, а TXT работает как блок ввода-вывода.
IDKFA!
AntonEngineer
Сообщения: 42
Зарегистрирован: 10 дек 2019, 18:13

Re: Программа на Питоне для мобильного робота

Сообщение AntonEngineer »

Добрый день!

Можно попробовать создать файл в формате txt, и с каждой итерацией цикла программы писать новую строчку со значениями сигналов и переменных. Ещё можно попробовать с помощью библиотеки matplotlib создавать графики.
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: Программа на Питоне для мобильного робота

Сообщение Mr.Kubikus »

Можно попробовать создать файл в формате txt, и с каждой итерацией цикла программы писать новую строчку со значениями сигналов и переменных.
Это хороший вариант хотя и не самый экономичный по потреблению памяти. Есть несколько важных моментов, на которые стоит обратить внимание при реализации:

Важно выбрать правильное хранилище для размещения файла журнала. Если писать на встроенный флеш, то есть риск быстро исчерпать допустимое количество циклов записи. Поэтому я рекомендую использовать виртуальную файловую систему tmpfs, в TXT она подмонтирована в папку /tmp. В ней, кстати, уже есть папка log, которая является стандартным местом для хранения различных журналов в ОС Linux.

Еще одно важное требование к системе регистрации - ограничение максимального размера файла журнала и максимальное количество сегментов в журнале если выполняется сегментирование при переполнении. Если не ограничивать максимальный размер, то рано или поздно произойдет авария - файл журнала займет все пространство, выделенное в ОЗУ для файловой системы tmpfs.
Ещё можно попробовать с помощью библиотеки matplotlib создавать графики.
Не думаю, что это хорошая идея. Дело в том, что система управления тележкой должна формировать сигналы управления в реальном времени - каждые 10 мс электропривод должен получить обновленное задание иначе есть риск укатиться с маршрута. Если мы нагрузим процессор контроллера TXT задачей отрисовки графиков, есть вероятность, что на задачу управления не хватит ресурсов процессора. Графики можно рисовать на этапе обработки полученных данных. Для этого надо выгрузить журнал из TXT.
С уважением, Григорий
GitHub FB ВК
AntonEngineer
Сообщения: 42
Зарегистрирован: 10 дек 2019, 18:13

Re: Программа на Питоне для мобильного робота

Сообщение AntonEngineer »

А какие есть экономичные варианты по потреблению памяти?
Вася М.
Сообщения: 26
Зарегистрирован: 20 дек 2010, 19:28

Re: Программа на Питоне для мобильного робота

Сообщение Вася М. »

Наверное г-н Кубикус имеет ввиду запись значений в файл в бинарном виде, а не в текстовом. Число 0,1234567 в текстовом формате ascii занимает 9 байт, а в бинарном float32 всего 4 байта
IDKFA!
AntonEngineer
Сообщения: 42
Зарегистрирован: 10 дек 2019, 18:13

Re: Программа на Питоне для мобильного робота

Сообщение AntonEngineer »

Доброго вечера! Мне удалось получить информацию о состоянии датчиков маршрута и моторов (включён/выключен).
log.jpg
log.jpg (107.12 КБ) 15203 просмотра
Алгоритм такой: после нажатия кнопки на тележке, создаётся файл с расширением txt. Далее в него записывается временная метка и состояние датчиков и моторов. Затем после останова тележки я выгружаю файл в Excel и разбиваю полученные строки на колонки.

Что хотите с этими данными сделать дальше?
Вася М.
Сообщения: 26
Зарегистрирован: 20 дек 2010, 19:28

Re: Программа на Питоне для мобильного робота

Сообщение Вася М. »

Что у вас хранится в поле timestamp? Не очень похоже на время. Можете показать ваш код?
Последний раз редактировалось Вася М. 25 ноя 2021, 11:20, всего редактировалось 1 раз.
IDKFA!
AntonEngineer
Сообщения: 42
Зарегистрирован: 10 дек 2019, 18:13

Re: Программа на Питоне для мобильного робота

Сообщение AntonEngineer »

Да конечно:

Код: Выделить всё

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)
Вася М.
Сообщения: 26
Зарегистрирован: 20 дек 2010, 19:28

Re: Программа на Питоне для мобильного робота

Сообщение Вася М. »

Спасибо!

Мне не понятно как использовать значение из поля timestamp для вывода графика. По идее там должны быть монотонно возрастающие отcчёты времени с разрешением 1 мс. Можете пояснить?

И ещё не понятно как выгрузить файл журнала из TXT?
IDKFA!
AntonEngineer
Сообщения: 42
Зарегистрирован: 10 дек 2019, 18:13

Re: Программа на Питоне для мобильного робота

Сообщение AntonEngineer »

Выгрузить файл можно по SFTP протоколу, используя бесплатный клиент FileZilla
FileZilla.jpg
FileZilla.jpg (207.28 КБ) 15185 просмотров
В верхней части окна в качестве хост устройства вводим IP адрес контроллера TXT, имя пользователя стандартно ROBOPro, пароль такой же, порт 22. В левой части окна находим целевую директорию, куда нужно выгрузить файл. В правой части окна программы заходим в папку "/tmp" и там будет лежать файл "log.txt".
Ответить