Для чего нужен ОрбиКрафт
Подсистемы конструктора
Инструкции по работе с ОрбиКрафт
Уроки
Лабораторная оснастка
Знакомство с Arduino
Полезная нагрузка на базе Arduino
Обратная связь
Новости
Для чего нужен ОрбиКрафт
Подсистемы конструктора
Инструкции по работе с ОрбиКрафт
Уроки
Лабораторная оснастка
Знакомство с Arduino
Полезная нагрузка на базе Arduino
Обратная связь
Новости
Описанные ниже функции используются для взаимодействия с подсистемами при написании программ для конструктора спутника ОрбиКрафт на языке Python версии 2.7.
Для того, чтобы создать простой проект на языке Python
.py
1).control
на языке Python 2).Пример простого проекта на языке Python
# Мой первый проект на Python def control(): print 'Здравствуй, мир!'
При описании функций мы будем указывать:
Пример:
hyro_request_reset(num) -> err
В примере выше описан интерфейс с именем hyro_request_reset
– это имя функции Python; функция принимает один аргумент num
(номер датчика) и возвращает единственное значение – err
(код ошибки).
Большинство функций ожидают, что в качестве первого аргумента передается номер устройства (номер датчика или исполнительного механизма данного типа). Обычно номер устройства – это число от 0
до 3
. Также, большинство функций возвращают значение статуса выполнения вызываемой функции (возвращают код ошибки). В примере выше этот факт отмечен в виде пары символов → err
.
При использовании функций важно анализировать возвращаемый код ошибки (значение err
). Если вызываемая функция завершилась без ошибки, то она возвращает ноль (0)
, в противном случае – значение отличное от нуля. Пример обработки возвращаемого функцией значения
err = hyro_request_reset(0) if err: print 'Ошибка!'
Часто встречаются функции с именами interface_request_reset
, interface_get_state
, interface_turn_on()
и interface_turn_off
, где interface
– имя интерфейса.
Эти функции, как правило, используются следующим образом. Пример для интерфейса hyro
hyro_request_reset(num) # сбросить (инициализировать) интерфейс sleep(1.0/2) # немного подождать, например 1/2 сек. hyro_turn_on(num) # включить (активизировать) интерфейс ready = hyro_get_state(num) # проверить готовность интерфейса if ready: # сделать что-то полезное, например, снять показания (err, x, y, z) = hyro_request_raw(num) if not err: print 'x=%d y=%d z=%d' % (x, y, z) hyro_turn_off(num) # обязательно выключить интерфейс!
Далее описаны функции для работы с подсистемами.
Эти функции позволяют определить состояние виртуальной батареи СЭП. Этим функциям не передается никаких аргументов. Каждая из функций возвращает параметр в виде числа с плавающей точкой одинарной точности.
battery_get_charge() -> value
Функция battery_get_charge
возвращает текущее значение заряда батареи, выраженное в ампер-часах.
battery_get_charging_current() -> value
Функция battery_get_charging_current
возвращает текущее значение тока заряда в миллиамперах.
battery_get_discharging_current() -> value
Функция battery_get_discharging_current
возвращает текущее значение тока разряда в миллиамперах.
Аргумент num
– номер магнитометра (может принимать значения от 0
до 3
).
magnetometer_get_state(num) -> ready
Функция magnetometer_get_state
возвращает флаг готовности магнитометра с номером num
.
magnetometer_request_raw(num) -> (err, x, y, z)
Функция magnetometer_request_raw
возвращает список значений: err
– код ошибки; x, y, z
– текущие показания магнитометра с номром num
.
magnetometer_request_reset(num) -> err
Функция magnetometer_request_reset
выполняет сброс магнитометра с номером num
.
magnetometer_turn_off(num) -> err
Функция magnetometer_turn_off
выключает магнитометр с номером num
.
magnetometer_turn_on(num) -> err
Функция magnetometer_turn_on
включает (активирует) магнитометр с номером num
.
Настоящие интерфейсные функции используются для работы с датчиком угловой скорости (ДУС). Аргумент num
– номер датчика (может принимать значения от 0
до 3
).
hyro_get_state(num) -> ready
Функция hyro_get_state
возвращает флаг готовности устройства: 1
– датчик готов; 0
– нет.
hyro_request_raw(num) -> (err, x, y, z)
Функция hyro_request_raw
возвращает список: код ошибки err
и текущие показания ДУС: x
, y
, z
.
hyro_request_reset(num) -> err
Функция hyro_request_reset
выполняет сброс датчика с номером num
.
hyro_turn_off(num) -> err
Функция hyro_turn_off
выключает датчик с номером num
.
hyro_turn_on(num) -> err
Функция hyro_turn_on
включает (активирует) датчик с номером num
.
Аргумент num
– номер датчика (может принимать значения от 0
до 7
).
sun_sensor_get_state(num) -> ready
Функция sun_sensor_get_state
возвращает флаг готовности солнечного датчика с номером num
: 1
– датчик готов; 0
– нет.
sun_sensor_request_maxraw(num) -> (err, value)
Функция sun_sensor_request_maxraw
возвращает список: err
– код ошибки; value
– максимальные показания солнечного датчика с номером num
.
sun_sensor_request_raw(num) -> (err, value, value)
Функция sun_sensor_request_raw
возвращает список: err
– код ошибки; value
– текущие показания солнечного датчика с номером num
.
sun_sensor_request_reset(num) -> err
Функция sun_sensor_request_reset
осуществляет сброс солнечного датчика с номером num
.
sun_sensor_set_calibrate(num, value) -> err
Функция sun_sensor_set_calibrate
осуществляет калибровку датчика (устанавливает режим в значение value
для датчика с номером num
). В настоящее время эта функция не используется.
sun_sensor_set_minvalue(num, value) -> err
Функция sun_sensor_set_minvalue
не используется.
sun_sensor_turn_off(num) -> err
Функция sun_sensor_turn_off
выключает солнечный датчик с номером num
.
sun_sensor_turn_on(num) -> err
Функция sun_sensor_turn_on
включает (активирует) солнечный датчик с номером num
.
sun_sensors_angle(value, value, value) -> value
Функция sun_sensors_angle
не является управляющей. Это вычислительная вспомогательная функция, которая возвращает значение в виде числа с фиксированной точкой двойной точности.
Аргумент num
– номер маховика (может принимать значения от 0
до 3
).
motor_get_state(num) -> ready
Функция motor_get_state
возвращает флаг готовности маховика с номером num
: 1
– готов; 0
– нет.
motor_request_reset(num) -> err
Функция motor_request_reset
осуществляет сброс контроллера управления маховиком с номером num
.
motor_request_speed(num) -> (err, value)
Функция motor_request_speed
возвращает список значений: err
– код ошибки; value
– текущую скорость маховика с номером num
.
motor_set_speed(num, value) -> (err, value)
Функция motor_set_speed
устанавливает скорость маховика c номером num
в значение value
. Функция возвращает список значений: err
– код ошибки; value
– измеренное контроллером значение скорости после установки.
num = 0 write_speed = -100 (err, read_speed) = motor_set_speed(num, write_speed) if not err: print (write_speed, read_speed)
ВАЖНО. Устанавливаемое значение скорости (второй аргумент функции) и возвращаемое значения скорости (второй элемент списка возвращаемых значений) должны быть близкими значениями по величине и знаку (направлению скорости). Если функция возвращает код ошибки отличный от0
, то доверять возвращаемому значению скорости нельзя!
motor_turn_off(num) -> err
Функция motor_turn_off
выключает маховик с номером num
.
motor_turn_on(num) -> err
Функция motor_turn_on
включает (активирует) маховик с номером num
.
camera_get_state() -> ready
Функция camera_get_state
возвращает флаг готовности устройства: 1
– устройство готово, 0
– нет.
camera_take_photo(frame) -> err
Функция camera_take_photo
выполняет снимок с номером указанным при помощи аргумента frame
. Обычно вы нумеруете фотоснимки числами от 0
до 9
. Функция возвращает 0
в случае успешного завершения действия, иначе – значение отличное от нуля.
camera_turn_off() -> err
Функция camera_turn_off
выключает устройство.
camera_turn_on() -> err
Функция camera_turn_on
включает (активирует) устройство.
Настоящие интерфейсные функции осуществляют управление ВЧ передатчиками. При помощи функции transmitter_transmit_photo
осуществляется передача предварительно отснятых и сохраненных фотокадров. Аргумент num
– номер ВЧ передатчика (может принимать значения от 0
до 3
).
transmitter_get_state(num) -> ready
Функция transmitter_get_state
возвращает флаг готовности ВЧ передатчика с номером num
.
transmitter_request_reset(num) -> err
Функция transmitter_request_reset
осуществляет сброс ВЧ передатчика с номером num
.
transmitter_transmit_photo(num, frame) -> err
Функция transmitter_transmit_photo
осуществляет передачу фотографии с номером frame
c помощью ВЧ передатчика с номером num
. В случае успешной передачи кадра функция возвращает 0
.
transmitter_turn_off(num) -> err
Функция transmitter_turn_off
выключает ВЧ передатчик с номером num
.
transmitter_turn_on(num) -> err
Функция transmitter_turn_on
включает ВЧ передатчик с номером num
.
Настоящие интерфейсные функции осуществляют управление шестнадцатью передатчиками телеметрии; используются для передачи и приема массивов данных (телеметрии). Аргумент num
– номер передатчика телеметрии (может принимать значения от 0
до 15
).
transceiver_get_state(num) -> ready
Функция transceiver_get_state
возвращает значение флага готовности передатчиками телеметрии: 1
– передатчик готов; 0
– нет.
transceiver_request_buff(num) -> (err, data)
Функция transceiver_request_buff
запрашивает содержимое буфера приемника и возвращает список значений: err
– код ошибки; data
– содержимое буфера (32 байта).
transceiver_request_reset(num) -> err
Функция transceiver_request_reset
осуществляет сброс передатчика телеметрии с номером num
.
transceiver_send(txnum, rxnum, data) -> err
Функция transceiver_send
осуществляет пересылку данных data
в направлении от передатчика с номером txnum
к приемнику с номером rxnum
. В случае успешной трансляции данных функция возвращает 0
.
err = transceiver_send(1, 0, b'hello, world!') if err: print 'Ошибка передачи!'
transceiver_turn_off(num) -> err
Функция transceiver_turn_off
выключает передатчик телеметрии с номером num
.
transceiver_turn_on(num) -> err
Функция transceiver_turn_on
включает (активирует) передатчик телеметрии с номером num
.
Аргумент num
– номер элемента солнечной батареи (может принимать значения от 0
до 7
).
sunbattery_request_maxraw(num) -> (err, value)
Функция sunbattery_request_maxraw
возвращает список значений: err
– код ошибки и value
– максимальное значение параметра, полученное от элемента солнечной с номером num
.
sunbattery_request_raw(num) -> (err, value)
Функция sunbattery_request_raw
возвращает список значений: err
– код ошибки и value
– текущее значение параметра, полученное от элемента солнечной с номером num
.
sunbattery_request_reset(num) -> err
Функция sunbattery_request_reset
осуществляет сброс контроллера элемента солнечной батареи с номером num
.
Проекты на языке Python, как и проекты выполненные на языке C, вы сможете подготавливать c использованием интерфейса среды программирования на базе редактора notepad++. Zip-архив, подготовленный в среде программирования, содержит автоматически сгенерированный Python-скрипт для выполнения. Этот скрипт включает в себя содержимое вашего файла. Схематично и очень упрощенно скрипт представляет собой примерно следующее
from schsat import * from time import sleep, time #------------------------------------------------------------------->8 # Ваш Python код, обязательно включающий реализацию функции control(). #------------------------------------------------------------------->8 if __name__ == "__main__": control()
Теперь становится понятно почему мы можем использовать функцию sleep
из модуля time
в наших программах. Также очевидно, что ваш код может осуществлять импортирование дополнительных модулей Python, например
import math def control(): print (math.e) print (math.pi)
Интерфейсные функции вида
interface_get_state(...) -> ready
возвращают беззнаковое целое – флаг готовности устройства. Если возвращаемое значение равно 1
, то это означает, что устройство готово и с устройством (интерфейсом) можно работать. Например, можно вычитать данные из датчика или включить исполнительный механизм. Если функция вернула 0
, то это означает, что устройство не было подготовлено для работы, вы не активизировали интерфейс (не вызвали соответствующую функцию interface_turn_on
).
ВНИМАНИЕ: готовность устройства только означает, что вы можете начать работу с устройством. Флаг готовности не означает, что вызываемые в дальнейшем функции вернут достоверные данные или устройство воспримет выданную команду. Обязательно проверяйте возвращаемые интерфейсными функциями коды ошибок!
Интерфейсные функции вида
interface_do_something(...) -> err interface_do_something(...) -> (err, ...)
возвращают беззнаковое целое число – код ошибки. Возвращаемый код ошибки может быть равен 0
– нет ошибок, 1
– ошибка интерфейса или 2
– ошибка доступа.
Код «ошибка интерфейса» возвращается когда интерфейсная функция неверно используется, например, задан несуществующий номер устройства, либо когда возникла помеха на информационной шине и данные не могли быть прочитаны.
Код «ошибка доступа» возвращается в тех случаях, когда вы попытались запросить данные от устройства которое еще не готово, например, обратились к устройству которое не было предварительно включено.
Если вы хотите узнать тип возникшей ошибки просто распечатайте переменную err
:
if err: print 'Error: %d' % err