Консольные приложения для мотоподвесов

  • Решил открыть отдельную тему о консольных програмульках для управления мотоподвесов в консоле, так как это не очень подходит в тему о плагине ротор.


    На сегодняшний день я нашел несколько таких приложений, только ни с одной так и не смог добиться результата. Мой мотоподвес подключён к карте 2300 ..... но так как моя карта не в силах крутить мотоподвес сама, пришлось докупить Spaun SN1418, С плагином ротор всё пашет без запинок.


    Вот что я нашел:


    1. Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.
    данная прога может только поворачивать вашу тарель на заданный вами угол - на восток или на запад. Так что это не очень и актуально.


    На команды этой программки мой мотоподвес не реагирует.


    2. Программка Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу., от автора плагина ротор для Ведра.


    У этой программки мотоподвес дёрнится и тишина ...... так как программка после того как послала команду на мотоподвес, отрубает питание и встаёт колом.


    3. Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу..
    Работает только с дровами multiproto. Патча для szap пока нет.


    4. Также есть программулька для иксов Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу. котороя к сожалению не собирается ...... скорее всего уже устарела.


    5. Ну и наконец, последнии три консольные приложения, которые я подвешу одним файлом. Две из них у меня не собрались, собралась только rotor.c, и с этой програмулькой у меня к сожалению ничего не получилось ...... как буд то мотоподвес в упор не слышит команд дайзека.
    В каждом файле я внёс ссылку форума, откуда я их взял и как их скомпилить.

  • ну, и есть еще консольная прога diseqc из dvb-apps, лежит в каталоге /test. Тоже по идее может крутить мотор.


    diseqc : Send various diseqc sequences on a SAT frontend.
    Best used with a diseqc test box with some LEDs to
    show the result of the commands.


    Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.

  • Цитата

    Со слов пользователя Бикалехандер
    2. Программка Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу., от автора плагина ротор для Ведра.
    У этой программки мотоподвес дёрнится и тишина ...... так как программка после того как послала команду на мотоподвес, отрубает питание и встаёт колом.


    а ты попробуй загрузить дрова для своей карты с опцией
    dvb_shutdown_timeout=0 , чтобы питание на LNB никогда не снималось.




    Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.


  • Итак - консольная утилитка для вращения полар-мотора в
    запомненную в моторе позицию


    == хелп ==


    == по умолчанию используется ==
    - вход десик свитча A/A (аналогично -d 0)
    - номер позиции 5 (аналогично -n 5)
    - задержка перед отпусканием фронтенда 30 секунд (аналогично -t 30)


    Исходный код
    # ./rotor-gotoNN
    Send command to switch: disecq_sw_no:0  cmd: [e0 10 38 00]. Sending try: 1 2 3
    Send command to rotor:  rotor_no:5      cmd: [e0 31 6b 05]. Sending try: 1 2 3
    Timeout 30 seconds: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    Frontend closed! Goodbye :)


    == установка всех параметров ==
    например повернуть к 7 позиции ротор включенный к входу
    B/B десик свитча и держать напряжение 15 секунд


    Исходный код
    # ./rotor-gotoNN -n 7 -t 15 -d 3
    Send command to switch: disecq_sw_no:3  cmd: [e0 10 38 0c]. Sending try: 1 2 3
    Send command to rotor:  rotor_no:7      cmd: [e0 31 6b 07]. Sending try: 1 2 3
    Timeout 15 seconds: . . . . . . . . . . . . . . .
    Frontend closed! Goodbye :)



    == сборка ==
    - в кернел дереве должен лежать linux/dvb/frontend.h
    утилитка общается с драйвером вызовом следущих команд
    FE_SET_TONE, SEC_TONE_OFF, FE_SET_VOLTAGE, SEC_VOLTAGE_18, FE_DISEQC_SEND_MASTER_CMD
    которые вроде как стандартные - даже в драйвере мультипрото )))
    или - чтобы не разыскивать этот файл (если в системе еще нет кернел хэдерсов - то
    в linux/dvb/ лежит стандартный (от дебиановского пакета) frontend.h
    там же лежит и multiproto_frontend.h - сборка что с тем что с другим фронтендом
    не выявила никаких изменений


    - собственно сборка

    Исходный код
    # make


    Примечание:
    - используется фронтэнд /dev/dvb/adapter0/frontend0
    если надо изменить - требуется поправить код утилитки прописав нужное в

    Исходный код
    unsigned int adapter = 0;
            unsigned int frontend = 0;


    в прицепке версия rotor-gotoNN.0.0.1 - очень надеюсь что он таким - 0.0.1 и останется ))))


    код базируется на коде szap - спасибо разработчику этого кода


    жду тестов ...

    Файлы

  • Я провёл только что маленький тест ...... у меня в моторе пока только одна позиция запомнена и о чудо мотоподвес поехал =). Конкретно проверю сегодня ночью, когда мои спать укладуться :), но думаю что утилитка пашет =) Спасибо.


    Кураж, я понимаю, что тебе наверно не сильно хочется больше возиться с этой утилиткой, но всё же, может всётаки попробуешь ещё добавить функцию [Goto XXX]. Так будет всё в одном флаконе, да и код ведь по идеи уже есть для этого (смотри ссылки выше), остаётся только адоптировать/врезать его.


    Мне кстати ещё интерестно, почему выше названные утилиты не работают?


    Ещё раз спасибо.

  • Такс, тесты прошли не совсем удачно, походу мне сначало нужно сделать резет мотоподвеса и сохранить нужные позиции снова ...... завтра продолжу =).


    Goga777
    Ты был прав, после передачи этого параметра, всё встало на свои места.

  • ну, внедрение Goto XXX - это весьма нетривиальная задача, намного сложнее, чем реализация goto position.


    я правильно понял - утилита DiSEqC у тебя заработала нормально -мотор крутится ?

  • Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.


    Цитата


    чтобы не забылось - некоторые команды управления мотором


    в-общем все ясно - не понятно только с е0 31 6е хх yy

  • е0 31 6е хх yy -


    я думаю, что xx yy - это некий угол, на который надо повернуть тарель относительно 0 позиции. Этот угол расчитывает сам ресивер (вдр).

  • Цитата

    ещё добавить функцию [Goto XXX]


    что ты под этим имеешь ввиду? введение режима USALS - рачета поворота по заданным
    географическим координатам? честно - пока не знаю как это делается - надо глубить документы....
    проще всего сейчас вложить поворот на определенное число шагов мотора - скорее всего данную фичу допишу
    в утилитку ....


    хм ... прога Goto_X Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.
    активно использует dvb-apps/lib/libdvbsec/dvbsec_api.[ch] который
    в свою очередь использует dvb-apps/lib/libdvbapi/dvbfe.h>
    тем самым теряется автономность программы и подвязывается к тому как это
    там реализовано - в частности очень смахивает на то что они там считают
    что в моторе 16 шагов на 1 градус - что в общем случае не совсем так


    посему чтобы оставить мою утилитку простой - все ж наверно реализую
    просто переход на энное количество шагов на запад или восток от текущей
    позиции - вроде с командами на это все понятно


    думаю пока этого будет достаточно


    когда пойму как делается USALS - может и его добавлю - как программа должна расчитывать угол
    и какие команды засылаются в мотор - пока никаких зацепок в виде документов не нашел
    так что это будет не скоро скорее всего ....

  • Цитата

    я думаю, что xx yy - это некий угол,


    вообще в руководящем документе от Евтелсат команда е0 31 6е хх yy
    Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.
    предназначалась для поворота
    наземных антенн типа волновой канал - которые могут вращаться на 360 градусов по азимуту и даже дальше - то
    есть на второй и третий круг в одном направлении
    второй параметр - fractions насколько я понял - тонкая подстройка в пределах одного градуса
    а первый параметр похоже содержит в себе направление вращения и угол поворота
    возможно что УСАЛС как раз и пользует эту команду но как? как правильно их рассчитать и заслать -
    пока никакой инфо не нашел ....


    если кто знает где - в какой open-source программе это реализовано - хм - на ум приходит пока что rotor плагин
    для вдр - прошу подсказать ....


    пока работа с документами закончена ))) надо писать код )))) хотя по количеству скачиваний
    rotor-gotoNN.0.0.1 - интереса утилитка не представляет )))))

  • Цитата

    Со слов пользователя Courage
    если кто знает где - в какой open-source программе это реализовано - хм - на ум приходит пока что rotor плагин
    для вдр - прошу подсказать ....


    знигма и нейтрино для дрима :)

  • Да, как раз это я и имел в виду. Мне тут когда то юзер oNe3 скинул кое какую инфу .... может она тебе как то поможет.
    Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.

  • и вот тут ссылки на доки по DiSEqC протоколу
    Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.


    доки с рапиды положил в наше Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу. - там уже free-x спеками на diseqc-протокол уже успел поделиться тоже


  • в измененном хелпе все понятно ))) но всеже распишу изменения

    == добавлена опция выбора напряжения мотора 13 или 18 вольт -V 13 -V 18
    по умолчанию устанавливается 18 вольт

    Исходный код
    # ./rotor-gotoNN   -V 13
        Set LNB power supply to 13 Volts
        Send command to switch: disecq_sw_no:0  cmd: [e0 10 38 00]. Sending try: 1 2 3
        Send command to rotor:  rotor_no:5      cmd: [e0 31 6b 05]. Sending try: 1 2 3
        Timeout 30 seconds: . . . . . . .


    == добавлена опция поднятия напряжения источника питания лнб на 1 вольт -O 1
    по умолчанию напряжение устанавливается в номинальный режим


    Исходный код
    # ./rotor-gotoNN   -O 1
        Set LNB power supply to 18 Volts  and overvoltage mode (+1 Volt)
        Send command to switch: disecq_sw_no:0  cmd: [e0 10 38 00]. Sending try: 1 2 3
        Send command to rotor:  rotor_no:5      cmd: [e0 31 6b 05]. Sending try: 1 2 3
        Timeout 30 seconds: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
        Frontend closed! Goodbye :)


    == добавлена опция поворота ротора на заданное количество шагов
    -e xx - поворот на восток на хх шагов ( допустимые значения от 1 до 127)
    -w xx - поворот на запад на хх шагов ( допустимые значения от 1 до 127)


    Исходный код
    # ./rotor-gotoNN   -e90
        Set LNB power supply to 18 Volts
        Send command to switch: disecq_sw_no:0  cmd: [e0 10 38 00]. Sending try: 1 2 3
        Send command to rotor: Drive 90 steps to East.  cmd: [e0 31 68 a6]. Sending try: 1 2 3
        Timeout 22 seconds: . . . . . . . . . . .
        Frontend closed! Goodbye :)


    == примечание
    - если после параметра -e|w NN явно не задан параметр -t xx то таймаут на поворот вычисляется
    по такой формуле timeout = steps/5 + 2 то есть на 100 шагов это будет
    равно 22 секунды


    == примеры
    для перемещения в запомненную позицию 6 ротора подключенного к входу B/B свитча
    при 13 вольтах и дать на это 10 секунд

    Исходный код
    # ./rotor-gotoNN   -V 13 -t 10 -d 3 -n 6


    для перемещения на 90 шагов на восток при 18 вольтах +1 вольт
    ротора подключенного к входу B/A десик свитча

    Исходный код
    # ./rotor-gotoNN   -O 1 -V 18 -d 2 -e90


    == для информации
    параметры мотора digipower sg2100 ненагруженного антенной:
    - примерно 9 шагов на 1 градус
    - скорость поворота примерно
    4-5 секунды на 10 градусов при 18 вольтах
    6-7 секунд на 10 градусов при 13 вольтах


    просьба - не проверять прогу на вшивость ))) никаких
    особых проверок на дурака нет - поэтому что будет если вводить буквы или
    отрицательные значения или несовместимые не знаю и знать не хочу -
    проверить и предусмотреть все варианты которые вздумается пользователю
    ввести в параметры - просто невозможно )))
    вспоминается старый анекдот - установили на деревообрабатывающий завод
    японскую машину по производству мебели - в нее надо засыпать опилки а на
    выходе получить скажем инкрустированный столик ...
    рабочим стало неинтересно так делать и они первым делом попробовали в
    нее положить щепки - машина пожевала пожевала но все равно выдала столик
    попробывали доски - через некоторое время все же вышел тот же столик
    запихнули бревно - комельную часть - машина сдохла - раздались
    победные крики - АГА! НАША ВЗЯЛА!!

    так вот - не надо в утилитку пихать дрова )))

    Файлы

  • насколько я понял, прописывая в


    Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.


    свои дисек-команды вот сюда, вместо этих команд


    28 struct diseqc_cmd switch_cmds[] = {
    29 { { { 0xe0, 0x10, 0x38, 0xf0, 0x00, 0x00 }, 4 }, 0 },
    30 { { { 0xe0, 0x10, 0x38, 0xf2, 0x00, 0x00 }, 4 }, 0 },
    31 { { { 0xe0, 0x10, 0x38, 0xf1, 0x00, 0x00 }, 4 }, 0 },
    32 { { { 0xe0, 0x10, 0x38, 0xf3, 0x00, 0x00 }, 4 }, 0 },
    33 { { { 0xe0, 0x10, 0x38, 0xf4, 0x00, 0x00 }, 4 }, 0 },
    34 { { { 0xe0, 0x10, 0x38, 0xf6, 0x00, 0x00 }, 4 }, 0 },
    35 { { { 0xe0, 0x10, 0x38, 0xf5, 0x00, 0x00 }, 4 }, 0 },
    36 { { { 0xe0, 0x10, 0x38, 0xf7, 0x00, 0x00 }, 4 }, 0 },
    37 { { { 0xe0, 0x10, 0x38, 0xf8, 0x00, 0x00 }, 4 }, 0 },
    38 { { { 0xe0, 0x10, 0x38, 0xfa, 0x00, 0x00 }, 4 }, 0 },
    39 { { { 0xe0, 0x10, 0x38, 0xf9, 0x00, 0x00 }, 4 }, 0 },
    40 { { { 0xe0, 0x10, 0x38, 0xfb, 0x00, 0x00 }, 4 }, 0 },
    41 { { { 0xe0, 0x10, 0x38, 0xfc, 0x00, 0x00 }, 4 }, 0 },
    42 { { { 0xe0, 0x10, 0x38, 0xfe, 0x00, 0x00 }, 4 }, 0 },
    43 { { { 0xe0, 0x10, 0x38, 0xfd, 0x00, 0x00 }, 4 }, 0 },
    44 { { { 0xe0, 0x10, 0x38, 0xff, 0x00, 0x00 }, 4 }, 0 }
    45 };



    и после компиляции, можно выдавать практически любые команды на мотор, DiSEqC-свитч.

  • Комманда Goto X.X выглядит следующим образом:
    Всего длина комманды 5 байт.
    E0 31 6E - префикс комманды
    Старшие 4 бита 4ого байта являются своего рода переключателем. В зависимости от значения этих бит мотор будет двигатся вправо или влево (восток или запад)
    0 - вправо
    Е - влево
    Младшие 4 бита 4ого байта комманды и старшие 4 бита 4ого байта содержат градус поворота
    Младшие 4 бита 5ого байта содержат значение секунд поворота и имеют следующие значения:
    0 - 0x00;


    1 - 0x02;


    2 - 0x03;


    3 - 0x05;


    4 - 0x06;


    5 - 0x08;


    6 - 0x0A;


    7 - 0x0B;


    8 - 0x0D;


    9 - 0x0E;
    Соответственно слева у нас значение секунд, справа значение 4х младших бит 5ого байта.


    Например комманда E0 31 6E E0 FA - означает что мотору нужно повернутся влево на 15 градусов и 6 секунд.


    Если возникнут вопросы, всегда готов помочь.


    p.s. у меня пока что тут с доработкой плагина ротор возникли проблемы, по мере свободного времени стараюсь уделять внимание, думаю скоро все-таки будут результаты.

  • Цитата

    я правильно понял - утилита DiSEqC у тебя заработала нормально -мотор крутится ?


    Да, мотор заработал ...... по крайней мере ни одна из утилит названных выше не смогла даже на пару градусов сдвинуть мотоподвес =)

  • oNe3

    Цитата

    Комманда Goto X.X


    спасибо - стало немного понятнее ....
    я тут нашел таки математику расчета этих параметров в rotor плагине - сейчас начинаю разбирать код
    и в-общем то уже многое понятно


    кстати - в качестве промежуточного результата - пока именно этим сейчас и занимаюсь -
    программа будет выводить и азимут и угол места установки антенны на выбранный спутник ....


    вот такая математика для этого используется


    азимут установки антенны

    Исходный код
    azimuth= 180 + atan ( tan(sat_long-Long) / sin(Lat) )


    180 градусов вроде как надо добавлять только для северного полушария - пока точно не уверен


    угол подъема антенны

    Исходный код
    x= acos ( cos(sat_long-Long) * cos(Lat) )
    elevation= atan ( (cos(x)-0.1513) / sin(x) )


    где

    Исходный код
    azimuth - азимут установки ( в градусах) - 
    0 град      = направление на север 
    90 град     = направление на восток
    180 град    = направление на юг
    270 град    = направление на запад


    Исходный код
    elevation - угол подъема антенны (в градусах) от горизонта 
                    - при положительных значениях - в небо 
                     при отрицательных значениях - в землю  ;)


    Исходный код
    sat_long - угол подвеса спутника (градусы) 
             со знаком минус для восточных спутников со знаком плюс - для западных - 
             например для птички sat_long=-13 для Амоса = 4


    Исходный код
    Long - географическая долгота места установки антенны (градусы)
             со знаком минус - восточная долгота - со знаком плюс - западная 
             например для Питера  Long=-30.3 для Майами =25.6


    Исходный код
    Lat - географическая широта места установки антенны (градусы)
             со знаком минус - южная - со знаком плюс - северная
             например для Питера =59.8 для Сиднея =-34.0


    Исходный код
    PI - это число Пи = 3.14156


    удобно и довольно точно считывать географические координаты на сервисе Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.
    (базируется на сервисе Google Maps) - в нижней части карты
    кстати - там же можно полюбопытствовать и на фотки подвязанные к данной местности - любопытно бывает )))


    Примечание
    географические координаты надо вводить в градусах и долях градуса - а не в градусах минутах то есть
    опять таки для Питера 59 град 51 минута = 59.85 градуса


    пока окончательно со знаками широты и долготы до конца не разобрался -
    пока только уверен что для Северного и восточного сектора вроде получается правильно


    если кто знает место где описана математика прицеливания антенны - буду благодарен за линку


    по всей видимости чтобы не усложнять rotor-gotoNN сделаю отдельную утилитку rotor-usals...

  • итак - некоторые замечания по поводу gotoXX команды e0 31 6e Хх Yy


    старший байт первого байта команнды Хх - это направление вращения
    с этим более менее все ясно
    - D0 - для спутников расположенных к западу от направления на юг
    - E0 - к востоку


    далее - в 2х полубайтах целое число градусов
    - младший полубайт х от первого байта Хх = угол деленый на 16
    - старший полубайт Y от второго байта Yy = все что осталось от деления


    т.е. не вдаваясь в подробности - если надо установить ротор в позицию
    для ротора который установлен на долготе 30Е
    на спутник 46Е первый байт будет E1 00
    на спутник 53Е = E1 80 (восточнее места установки на 1*16 + 8 градусов)
    на спутник 4W = D2 40 (западнее места установки на 2*16 + 2 градуса)


    в младшем полубайте y байта Yy - дробная часть угла в шеснадцатых долях -
    для конвертации дробной части градусов - которая десятичная - в
    шеснадцеричное представление и используется таблица типа

    Исходный код
    int gotoXTable[10] = { 0x00, 0x02, 0x03, 0x05, 0x06, 0x08, 0x0A, 0x0B, 0x0D, 0x0E };


    то есть единичка в этом байте равна одной 16 доле градуса - 0.0625 градуса
    - ноль целых хрен десятых засылается полубайтом 0х00
    - одна десятая засылается ближайшим значением 0х02 = 0.125 градуса
    - две десятых засылается ближайшим значением 0х03 = 0.1875 градуса
    - три десятых засылается ближайшим значением 0х05 = 0.3125 градуса
    - три десятых засылается ближайшим значением 0х0E = 0.875 градуса
    и т.д.


    честно сказать уж совсем была моя победа - даже ротор стал устанавливаться
    при засылке команд... НО - ставит только учитывая первый байт Xх но
    игнорирую второй Yy ;( то есть устанавливаются только в позиции кратные 16
    от направления на юг 48 32 16 0 градусов как на запад так и на восток


    младший байт не доходит до мотора - кто в этом виноват - не знаю...
    возможно что мои кривые ручки хотя я честно формирую всю 5 байтовую команду
    и засылаю ... то есть теперь буду искать где теряется второй байт данных


    думаю что на следущей неделе будет готова консольная утилитка rotor-usals )))



    нашел следы засылки команды - засылалась такая команда

    Исходный код
    [e0 31 6e e1 ee]


    в логе от Мультипрото драйвера stb0899


    то есть видно что пятого байта ee нет ... принялась и записалась только часть команды e0 31 6e e1
    правда для понимания ловушки
    этого мало - толи драйвер режет толи программка не досылает ....

    Сообщение было отредактировано 1 раз, последнее редактирование пользователем Courage ().