Регистратор-самописец для TXT на Питоне
Re: Регистратор-самописец для TXT на Питоне
Достаточно регистрировать значение счетчика времени в момент сохранения значений от сигнала с датчиков маршрута и управляющего сигнала на моторы.
IDKFA!
-
- Сообщения: 42
- Зарегистрирован: 10 дек 2019, 18:13
Re: Регистратор-самописец для TXT на Питоне
Я переработал код, теперь метка времени представляет собой счётчик с отображением секунд и миллисекунд с момента начала движения робота. Последовательность переменных в строке та-же: "время, I1, I2, M1, M2". В Excel величины переменных, хранящие состояния датчиков и моторов, смещены относительно друг друга, чтобы было легче воспринимать построенный график по полученным данным.
Описание значений сигнала:
Датчик I1: есть сигнал - 1, нет сигнала - 0
Датчик I2: есть сигнал - 3, нет сигнала - 2
Мотор М1: включен - 5, выключен - 4
Мотор М1: включен - 7, выключен - 6
График, построенный по полученным данным:
Код: Выделить всё
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
График, построенный по полученным данным: