Инструменты пользователя

Инструменты сайта


libschsat-py

Python интерфейс

[WORK IN PROGRESS]

Начиная с версии 1.02 в стандартную библиотеку включена поддержка языка программирования Python. Если вы используете эту версию библиотеки или более свежие версии, то вы можете обращаться к интерфейсным функциям стандартной библиотеки, используя один из наиболее популярных языков программирования 1).

Быстрый старт

Для того, чтобы создать простой проект на языке Python

  1. Поместите ваш Python код в отдельный файл с расширением .py 2).
  2. Реализуйте функцию с именем control на языке Python 3).

Пример простого проекта на языке Python

hello.py
# Мой первый проект на 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)            # обязательно выключить интерфейс!

Интерфейс accelerometer

accelerometer_get_state(num) -> ready

[TBD]

accelerometer_request_raw(num) -> (err, x, y, z)

[TBD]

accelerometer_request_reset(num) -> err

[TBD]

accelerometer_turn_off(num) -> err

[TBD]

accelerometer_turn_on(num) -> err

[TBD]

Интерфейс battery

Настоящие интерфейсные функции позволяют определить состояние виртуальной батареи (СЭП). Этим функциям не передается никаких аргументов. Каждая из функций возвращает параметр в виде числа с плавающей точкой одинарной точности.

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 возвращает текущее значение тока разряда в миллиамперах.

Интерфейс camera

Данное семейство интерфейсных функций предназначено для работы с фотокамерой.

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 включает (активирует) устройство.

Интерфейс coil

coil_get_state(num) -> ready

[TBD]

coil_request_reset(num) -> err

[TBD]

coil_set_value(num, value) -> (err, value)

[TBD]

coil_turn_off(uint16_t num) -> err

[TBD]

coil_turn_on(num) -> err

[TBD]

Интерфейс light_sensor

light_sensor_get_state(num) -> ready

[TBD]

light_sensor_request_maxraw(num) -> (err, value)

[TBD]

light_sensor_request_raw(num) -> (err, value)

[TBD]

light_sensor_request_reset(num) -> err

[TBD]

light_sensor_set_calibrate(num, value) -> err

[TBD]

light_sensor_set_minvalue(num, value) -> err

[TBD]

light_sensor_turn_off(num) -> err

[TBD]

light_sensor_turn_on(num) -> err

Интерфейс hyro

Настоящие интерфейсные функции используются для работы с датчиком угловой скорости (ДУС). Аргумент 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.

Интерфейс magnetometer

Настоящие интерфейсные функции предназначены для работы с магнитометром. Аргумент 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.

Интерфейс motor

Настоящие интерфейсные функции предназначены для управления маховиками. Аргумент 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.

Интерфейс sunbattery

Настоящие интерфейсные функции позволяют считывать параметры элементов солнечной батареи. Аргумент 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.

Интерфейс sun_sensor

Настоящее семейство интерфейсных функций предназначается для работы с солнечными датчиками. Аргумент 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 не является управляющей. Это вычислительная вспомогательная функция, которая возвращает значение в виде числа с фиксированной точкой двойной точности.

[TBD]

Интерфейс transceiver

Настоящие интерфейсные функции осуществляют управление шестнадцатью передатчиками телеметрии; используются для передачи и приема массивов данных (телеметрии). Аргумент 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.

Интерфейс transmitter

Настоящие интерфейсные функции осуществляют управление ВЧ передатчиками. При помощи функции 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.

Некоторые детали

Окружение времени выполнения

Проекты на языке 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
1) Стандартная библиотека реализована на низкоуровневом языке системного программирования Си.
2) Не разрешается использовать следующие зарезервированные имена файлов: main.py и schsat.py.
3) Функция control() является точкой входа в ваш Python код, смотрите на неё как на функцию main().
libschsat-py.txt · Последние изменения: 2016/05/26 23:53 — sg