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

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

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

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

Достаточно регистрировать значение счетчика времени в момент сохранения значений от сигнала с датчиков маршрута и управляющего сигнала на моторы.
IDKFA!
AntonEngineer
Сообщения: 42
Зарегистрирован: 10 дек 2019, 18:13

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

Сообщение AntonEngineer »

Я переработал код, теперь метка времени представляет собой счётчик с отображением секунд и миллисекунд с момента начала движения робота. Последовательность переменных в строке та-же: "время, I1, I2, M1, M2". В Excel величины переменных, хранящие состояния датчиков и моторов, смещены относительно друг друга, чтобы было легче воспринимать построенный график по полученным данным.

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

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:
	# Вызываем метод state() для определения состояния кнопки
	SW = I3.state()
	if SW and not flag:
		flag = 1
	if not SW and flag:		
		run = not run

		# Фиксируем стартовое время программы
		start_time = time.perf_counter()

		# Если движение робота запущено - открываем файл 'log.txt'
		if run:
			f = open('log.txt','w')

		# Если движение робота остановлено - закрываем файл 'log.txt'	
		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)
		#запись в файл 'log.txt'
		f.write(str(time.perf_counter() - start_time).replace('.', ',')[:5] + ';' + str(TLstate) +
                        ';' + str(TRstate) + ';' + str(motL) + ';' + str(motR))
		f.write('\n')
		print(str(time.perf_counter() - start_time).replace('.', ',')[:5] + ';' + str(TLstate) +
                        ';' + str(TRstate) + ';' + str(motL) + ';' + str(motR))
		time.sleep(0.01)
	# Движение по линии остановлено
	else:
		txt.stopAll()

Описание значений сигнала:
Датчик I1: есть сигнал - 1, нет сигнала - 0
Датчик I2: есть сигнал - 3, нет сигнала - 2
Мотор М1: включен - 5, выключен - 4
Мотор М1: включен - 7, выключен - 6

График, построенный по полученным данным:
График.jpg
График.jpg (43.47 КБ) 4924 просмотра
Вложения
Log.xls
(92.5 КБ) 638 скачиваний
log.txt
(4.15 КБ) 638 скачиваний
Ответить