ОФИЦИАЛЬНЫЙ ФОРУМ ГРУППЫ КОМПАНИЙ «ТЕХНОКОМ»

ОФИЦИАЛЬНЫЙ ФОРУМ ГРУППЫ КОМПАНИЙ «ТЕХНОКОМ» (http://forum.tk-chel.ru/index.php)
-   Система «АвтоГРАФ»: Прочие вопросы (http://forum.tk-chel.ru/forumdisplay.php?f=6)
-   -   Получение координатных записей через COM (http://forum.tk-chel.ru/showthread.php?t=4401)

lefion 24.12.2014 15:01

Получение координатных записей через COM
 
Приветствую, господа АвтоГРАФоды (водители АвтоГРАФ-а)!

Давно известно (судя по форуму), что данные можно получать из системы через COM. Жаль что документация где-то запрятана, но интернет тут помог - нашел доку страниц в 9-10, с описание COM-объектов, аналогичное этому: документация по OLE.

Методом проб и ошибок таки вышло получить достать через COM текущие (последние) данные по группам и технике.
А вот с историей прямо засада. Вытащил только "рейсы", а через них получил положение и скорость в точках (+время).

Однако в доке видел TripCrdEntriesNum который, по логике, должен указывать на количество координатных записей которые (по логике) вытаскиваются через CrdEntryIndex = 1..TripCrdEntriesNum
Но при попытке установить CrdEntryIndex выдается ошибка.

Вот фрагмент схемы тестового алгоритма (данные по всей техники всех групп):
Код:

числоГрупп = AG.GroupsNum;
Для а = 1 По числоГрупп Цикл
    AG.GroupIndex = а;
    числоМашин = AG.GroupCarsNum;
    Для б = 1 По числоМашин Цикл
        AG.CarIndex = б;
        AG.SetGroupIndexByFileName( AG.GroupFileName );
        AG.SetCarIndexByDevice( AG.CarDevice );
        AG.WaitForComputing( AG.GroupFileName, AG.CarDevice, началоПериода, конецПериода, "GSM", 1 );
        колРейсов = AG.TripsNum;
        Для в = 1 По числоМашин Цикл
            AG.TripIndex = в;
            массивКоординатРейса = AG.TrackCrdsArray;        // число кооррдинатных записей * 5      потому что массив одномерный
            числоКоординатныхЗаписей = AG.TripCrdEntriesNum;  // как достать эти самые записи ?
            Для г = 1 По числоМашин Цикл
                AG.CrdEntryIndex = г;
                // дальше не идет, из-за ошибки
            Конец;
        Конец;
    Конец;
Конец;

где AG - COM от "AutoGRAPH.AutoGRAPHAutomation"

Вообще хочу вытащить показания сенсоров по точкам, в частности уровень топлива.

SK 24.12.2014 17:46

Цитата:

Сообщение от lefion (Сообщение 95353)
Давно известно (судя по форуму), что данные можно получать из системы через COM. Жаль что документация где-то запрятана, но интернет тут помог - нашел доку страниц в 9-10, с описание COM-объектов, аналогичное этому: документация по OLE.

Документация давно идет в комплекте с ПО - в инсталляторе...

SK 24.12.2014 17:49

Во-первых, Вы перепутали переменные:
Код:

колРейсов = AG.TripsNum;
        Для в = 1 По числоМашин Цикл
            AG.TripIndex = в;

Вы присваиваете индексу рейса значения от 1 до числоМашин, а не до колРейсов...

SK 24.12.2014 17:53

Цитата:

Сообщение от lefion (Сообщение 95353)
Вообще хочу вытащить показания сенсоров по точкам, в частности уровень топлива.

А их реально нет в каждой точке, этих показаний-то...
Если Вы представляете, как работает терминал, то должны знать, что координатные записи пишутся асинхронно с данными различных датчиков. Иными словами, координаты опрашиваются повременно или адаптивно (от изменения вектора скорости), а те же ДУТ-ы - по времени (но интервал задается отдельно) или адаптивно (по изменению уровня).
Если бы в каждой точке писались абсолютно все значения всех датчиков - трафик вырос бы на два порядка.

SK 24.12.2014 18:33

массивКоординатРейса = AG.TrackCrdsArray;

Это Вам не поможет, т.к. 1С не работает с такими штуками...

Надо типа такого:

Код:

        колРейсов = AG.TripsNum;
        Для НомерРейса = 1 По колРейсов Цикл
            AG.TripIndex = НомерРейса;
            числоКоординатныхЗаписей = AG.TripCrdEntriesNum;
            Для НомерТочкиТрека = 1 По числоКоординатныхЗаписей Цикл
               
                        AG.CrdEntryIndex = НомерТочкиТрека;
                       
                        ТочкаВремя        = AG.CrdEntryTime;
                        ТочкаДолгота        = AG.CrdEntryLongitude;
                        ТочкаШирота        = AG.CrdEntryLatitude;
                        ТочкаПробег        = AG.CrdEntryDistance;
                        ТочкаСкорость        = AG.CrdEntrySpeed;
                        ТочкаВход1        = AG.CrdEntrySensor1; // Датчик 1 (0 – выключен, 1 – включен)
                        ТочкаВход2        = AG.CrdEntrySensor2; // Датчик 2 (0 – выключен, 1 – включен)
                        ТочкаВход5        = AG.CrdEntrySensor5; // Датчик 5 (0 – выключен, 1 – включен)
                        ТочкаВход7        = AG.CrdEntrySensor7; // Датчик 7 (0 – выключен, 1 – включен)
                        ТочкаLLS1        = AG.CrdEntryLLS1; // Показание датчика LLS 1
                        ТочкаLLS2        = AG.CrdEntryLLS2; // Показание датчика LLS 2
                        ТочкаLLS5        = AG.CrdEntryLLS5; // Показание датчика LLS 5
                // и так далее - какие надо данные в точке...

                КонецЦикла;
        КонецЦикла;


lefion 25.12.2014 07:20

Цитата:

Сообщение от SK (Сообщение 95354)
Документация давно идет в комплекте с ПО - в инсталляторе...

Как-то не думал что в инсталляции есть документация. Жаль что её не больше чем уже давно нашел в интернете. И то же нет примеров...

Цитата:

Сообщение от SK (Сообщение 95358)
массивКоординатРейса = AG.TrackCrdsArray;

Это Вам не поможет, т.к. 1С не работает с такими штуками...

Вообще 1С умеет работать с COMSafeArray...
Код:

AG.TrackCrdsArray.Выгрузить()
В нашем случае получается одномерный массив.

Но проблема даже не в этом, а в том что при попытке установить значение CrdEntryIndex для обхода списка AutoGRAPH отваливается. Ошибок я не вижу.

Цитата:

Сообщение от SK (Сообщение 95355)
Во-первых, Вы перепутали переменные:
Код:

колРейсов = AG.TripsNum;
        Для в = 1 По числоМашин Цикл
            AG.TripIndex = в;

Вы присваиваете индексу рейса значения от 1 до числоМашин, а не до колРейсов...

Действительно, при наборе кода в топике я ошибся. Вот фрагмент кода из 1С:
Код:

AG  = Новый COMОбъект("AutoGRAPH.AutoGRAPHAutomation");
ИнициализацияAG = AG.WaitForInitializing();

ЧислоГрупп = AG.GroupsNum;
Для а = 1 По ЧислоГрупп Цикл

    AG.GroupIndex = а;

    ЧислоТС = AG.GroupCarsNum;
    Для б = 1 По ЧислоТС Цикл

        AG.CarIndex = б;

        AG.SetGroupIndexByFileName( AG.GroupFileName );
        AG.SetCarIndexByDevice( AG.CarDevice );
        AG.WaitForComputing( AG.GroupFileName, AG.CarDevice, НачалоПериода, КонецПериода, "GSM", 1 );

        ЧислоРейсов = AG.TripsNum;
        Для в = 1 По ЧислоРейсов Цикл

            AG.TripIndex = в;

            Если AG.TripMotor1Fuel > 0 Тогда

                Нов = ВремТаб.Добавить();
                Нов.Индекс              = в;
                Нов.Код                = AG.CurrentCarDevice;
                Нов.Группа              = AG.GroupName;
                Нов.Модель              = AG.CarModel;
                Нов.Госномер            = AG.CarNumber;
                Нов.Расход              = AG.TripMotor1Fuel;
                Нов.Пробег              = AG.TripDistance;
                Нов.ВремяВыезда          = AG.TripRealCont;
                Нов.ВодительID          = AG.TripDriverID;
                Нов.ВодительИмя          = AG.TripDriverName;
                Нов.НачальнаяТочка      = AG.TripStartName;
                Нов.КонечнаяТочка        = AG.TripEndName;
                Нов.НачальнаяШирока      = AG.TripStartLatitude;
                Нов.НачальнаяДолгода    = AG.TripStartLongitude;
                Нов.КонечнаяШирота      = AG.TripEndLatitude;
                Нов.КонечнаяДолгота      = AG.TripEndLongitude;
                Нов.НачальноеВремя      = AG.TripStartRealTime;
                Нов.КонечноеВремя        = AG.TripEndRealTime;
                Нов.СкоростьСредняя      = AG.TripAverSpeed;
                Нов.СкоростьМаксимальная = AG.TripMaxSpeed;
                Нов.КолвоКординат        = AG.TripCrdEntriesNum;
                Нов.Координаты          = AG.TrackCrdsStr;

                ЧислоКоординатныхЗаписей = AG.TripCrdEntriesNum;
                Для г = 1 По ЧислоКоординатныхЗаписей Цикл

                    AG.CrdEntryIndex = г;

                    Время  = AG.CrdEntryTime;
                    Долгота  = AG.CrdEntryLongitude;
                    Широта  = AG.CrdEntryLatitude;
                    Пробег  = AG.CrdEntryDistance;
                    Скорость = AG.CrdEntrySpeed;
                    Вход1  = AG.CrdEntrySensor1;
                    Вход2  = AG.CrdEntrySensor2;
                    LLS1  = AG.CrdEntryLLS1;
                    LLS2  = AG.CrdEntryLLS2;
                    // ...

                КонецЦикла;

            КонецЕсли;
        КонецЦикла;
    КонецЦикла;

КонецЦикла;

Добавлено через 9 минут
Утром попробовал на чистой машине запустить обработку из пустой файловой базы с АвтоГРАФ-ом версии 4.0.6 с одной группой и 12 машинами (сразу после загрузки онлайновых данных).

Отработало без ошибок.
Помогло то ли что автограф на локальной машине отработал, то ли что база файловая и все работало с правами пользователя, то ли на чистой машине нет косяков с COM.

Кстати, почему открывается окно программы ?
Означает ли это что на сервере COM работать не будет (из-за того что будет вызвано из службы) из-за того что не сможет окно создать ?

SK 25.12.2014 07:22

Цитата:

Сообщение от lefion (Сообщение 95367)
Вообще 1С умеет работать с COMSafeArray...

Я по привычке про 7.7-ку )))

plex 25.12.2014 07:31

lefion, окно всегда будет а служба может запускаться от реального пользователя

lefion 25.12.2014 07:52

Пробовал аналогично получить данные и на C# - на чистой машине отрабатывает, на моей нет.

Возможно что-то с COM у меня, а может что-то опять поломалось после очередной синхронизации в АвтоГРАФ-е.

Кстати, скорость обработки не радует ни в 1С, ни в C# - долго выполняется обход Crd для рейсов. Я понимаю, что доходит до 10k элементов, и что это все таки COM, но тем не менее... Загрузка одного ядра АвтоГРАФом достигает 100%. При том что через AG.TrackCrdsArray (только координаты) достаются практически моментально (больше времени уходит на создание COM-соединения).

Идея механизма обхода данных в целом неплохая, но пригодна только для не частого использования.

Добавлено через 4 минуты
Кстати, можно ли сразу обратиться у нужной технике, не перебирая все группы в поисках нужной ?
Хотя бы по её коду, который выдаётся AG.CarDevice ( AG.CurrentCarDevice ) ?

Добавлено через 9 минут
И второй интересующий момент, это возможность достать координатные записи за период, не поделенные на рейсы.
Ведь, как я понимаю, кроме рейсов есть ещё и "стоянки", и, возможно, координатные записи для них ?

SK 25.12.2014 08:16



ТабТС - это табличка, где у меня выводится в 1С список ТС, чтобы пометить те, по которым выводить отчет.
Код:

//************************************************************************************************************************************************************************
// Процедура ОтчетПоКоординатам()
//************************************************************************************************************************************************************************
Процедура ОтчетПоКоординатам()

        ТабТС.ВыбратьСтроки();
       
        ПроцВсе=0;
        ВсегоТС=0;
        ОбработаноТС=0;
       
        ТабТС.ВыбратьСтроки();
        Пока ТабТС.ПолучитьСтроку() = 1 Цикл
                Если ТабТС.Метка = "+" Тогда ВсегоТС = ВсегоТС + 1; КонецЕсли;
        КонецЦикла;

        ТабТС.ВыбратьСтроки();
        Пока ТабТС.ПолучитьСтроку() > 0 Цикл

                Если ТабТС.Метка = "" Тогда Продолжить; КонецЕсли;

                ТСПериодНач=Формат(ДатаЧисло(ВыбНачПериода),"Ч(0)2.0")+"."+Формат(ДатаМесяц(ВыбНачПериода),"Ч(0)2.0")+"."+Строка(ДатаГод(ВыбНачПериода))+" 00:00:00";
                ТСПериодКон=Формат(ДатаЧисло(ВыбКонПериода),"Ч(0)2.0")+"."+Формат(ДатаМесяц(ВыбКонПериода),"Ч(0)2.0")+"."+Строка(ДатаГод(ВыбКонПериода))+" 23:59:59";
               
                AG.SetGroupIndexByFileName(ТабТС.ГрФайл);
                AG.SetCarIndexByDevice(ТабТС.СерНом);
               
                AG.WaitForComputing(ТабТС.ГрФайл,ТабТС.СерНом,ТСПериодНач,ТСПериодКон,"GSM",1);

                ОбработаноТС=ОбработаноТС+1;
                Форма.Проц.Заголовок(Строка(Окр(100/ВсегоТС*ОбработаноТС,0))+" %");
               
                КолРейсов = AG.TripsNum;
               
            Если КолРейсов=0 Тогда
                        Предупреждение("Рейсов не обнаружено");
                Иначе
                        Для х = 1 По КолРейсов Цикл
                                AG.TripIndex = х;

                ЧислоКоординатныхЗаписей = AG.TripCrdEntriesNum;
           
                                Для НомерТочкиТрека = 1 По числоКоординатныхЗаписей Цикл
               
                                        AG.CrdEntryIndex = НомерТочкиТрека;
                                       
                                        ТочкаВремя        = AG.CrdEntryTime;
                                        ТочкаДолгота        = AG.CrdEntryLongitude;
                                        ТочкаШирота        = AG.CrdEntryLatitude;
                                        ТочкаПробег        = AG.CrdEntryDistance;
                                        ТочкаСкорость        = AG.CrdEntrySpeed;
                                        ТочкаВход1        = AG.CrdEntrySensor1; // Датчик 1 (0 – выключен, 1 – включен)
                                        ТочкаВход2        = AG.CrdEntrySensor2; // Датчик 2 (0 – выключен, 1 – включен)
                                        ТочкаВход5        = AG.CrdEntrySensor5; // Датчик 5 (0 – выключен, 1 – включен)
                                        ТочкаВход7        = AG.CrdEntrySensor7; // Датчик 7 (0 – выключен, 1 – включен)
                                        ТочкаLLS1        = AG.CrdEntryLLS1; // Показание датчика LLS 1
                                        ТочкаLLS2        = AG.CrdEntryLLS2; // Показание датчика LLS 2
                                        ТочкаLLS5        = AG.CrdEntryLLS5; // Показание датчика LLS 5
                                // и так далее - какие надо данные в точке...
                                        Сообщить("Время: "+Строка(ТочкаВремя)+СимволТабуляции+"Долгота: "+Лев(Строка(ТочкаДолгота),7)+СимволТабуляции+"Широта: "+Лев(Строка(ТочкаШирота),7)
                        +СимволТабуляции+"Скорость: "+Лев(Строка(ТочкаСкорость),5)+СимволТабуляции+"LLS1: "+Строка(ТочкаLLS1)+СимволТабуляции+"Вход1: "+Строка(ТочкаВход1));
                                КонецЦикла;

                        КонецЦикла;
                КонецЕсли;
               
        КонецЦикла;

КонецПроцедуры //ОтчетПоКоординатам()


SK 25.12.2014 08:17

Цитата:

Сообщение от lefion (Сообщение 95373)
Кстати, скорость обработки не радует ни в 1С, ни в C# - долго выполняется обход Crd для рейсов. Я понимаю, что доходит до 10k элементов, и что это все таки COM, но тем не менее... Загрузка одного ядра АвтоГРАФом достигает 100%. При том что через AG.TrackCrdsArray (только координаты) достаются практически моментально (больше времени уходит на создание COM-соединения).

Для этого выпущен АвтоГРАФ.NET который может грузить все 16 ядер на соответствующих процессорах...

SK 25.12.2014 08:25

lefion, и вы не забывайте, что "выплюнуть" чисто массив координат - это одно - он уже есть в готовом виде, а записи типа CrdEntry... - это целый набор еще и дополнительных записей по самым разным параметрам, который формируется и рассчитывается для каждой координатной точки, а это совсем другое...
Если надо чисто координаты - пользуйтесь TrackCrdsArray

И, еще: есть работа через файловые выгрузки, а не по каждой записи циклом - там тоже будет все быстро при больших объемах записей. Пользуйтесь. В конце концов DBF - "родной" для 1С-ки формат.

SK 25.12.2014 08:45

На всякий случай - примеры (правда для 7.7, но там все аналогично).

lefion 25.12.2014 09:21

CrdEntryXXX выдаёт данные датчиков в сыром виде, а в таком виде их можно получить ?

(как в "списке записей" в интерфейсе АвтоГРАФ)

Добавлено через 2 минуты
За примеры спасибо, попробую откопать 7.7 и посмотреть

Добавлено через 12 минут
PS Другими словами, интересует связка - точка (широта, долгота), время, баки
Ну или по крайней мере - время + баки.

Добавлено через 1 минуту
В идеале конечно:
точка (широта, долгота, скорость, направление), время, баки, датчики

SK 25.12.2014 09:23

Цитата:

Сообщение от lefion (Сообщение 95382)
CrdEntryXXX выдаёт данные датчиков в сыром виде, а в таком виде их можно получить ?

Репликацией данных в БД на сервере.

lefion 25.12.2014 09:26

Другими словами проще сразу смотреть в сторону DBF ?

SK 25.12.2014 09:27

Цитата:

Сообщение от lefion (Сообщение 95382)
За примеры спасибо, попробую откопать 7.7 и посмотреть

http://forum.ru-board.com/topic.cgi?...rt=104&limit=1

SK 25.12.2014 09:29

Цитата:

Сообщение от lefion (Сообщение 95387)
Другими словами проще сразу смотреть в сторону DBF ?

Для АвтоГРАФ 3.x...4.x - в каких-то случаях DBF будет проще, а в каких-то - нет.
Правильнее использовать и то и то.
Кроме того, в DBF выгружается существенно больше полей данных, чем через переменные.
Описание DBF-файлов тоже можно найти в папке с документацией.

SK 25.12.2014 09:30

lefion, а цель всего этого какая ???

lefion 25.12.2014 09:49

Цитата:

Сообщение от SK (Сообщение 95390)
lefion, а цель всего этого какая ???

В базовом варианте, графическое представление по времени расхода топлива в привязке к скорости, с возможностью вывода показаний датчиков.
Далее с выводом на этом же графике посещенных "геозон".

Далее построение отчетов на основании этих данных.
Помимо тех что можно вытащить из АвтоГРАФ-а через COM (рейсы, остановки, пропадание питания, заправки/сливы, включения датчиков).

С отчетами из АвтоГРАФ, ещё нужно будет разобраться (не смотре ещё подробно, пробовал вытащить только список остановок).
Я про функции TripEntriesListTypeName / TripEntriesListKindName и поля EntryXXXXX.

Добавлено через 2 минуты
В общем, общий смысл - отчетность,
что бы скрины графиков из окно АвтоГРАФ не делать для вставки их в отчеты,
ну и что бы иметь цифры этих графиков, если понадобится их дополнительно обработать.

SK 25.12.2014 10:31

Цитата:

Сообщение от lefion (Сообщение 95393)
В базовом варианте, графическое представление по времени расхода топлива в привязке к скорости, с возможностью вывода показаний датчиков.
Далее с выводом на этом же графике посещенных "геозон".

Всё это и так делается в отчетах, которые можно сохранять в 10 различных распространенных форматов... зачем какие-то лишние сложности ?
Модуль отчетов обладает очень большой функциональностью по обработке и выводу данных. В т.ч. собственные формы и обработчики на языках программирования прямо в шаблонах отчетов. Я уже не говорю, что это по тестам самый быстрый по выводу модуль отчетов.

lefion 25.12.2014 13:02

Да, но это отчеты непосредственно техники (и как я заметил, данные для них так же получаются через COM).
Другими словами это оторванные от остальной отчетности печатные данные непосредственно связанные с техникой.
Отчеты не спорю, красивые, местами даже шустрые.
Но, скажем так, данные в этих отчетах, лишь процент от необходимых.
Причем цифры отчетов желательно иметь для ведения другой отчетности и т.д.

Другими словами, в нашем случае логичнее использовать данные мониторинга в общей системе, чем что-то выдумать на основе другой специализированной системе... :)

SK 25.12.2014 13:04

А чего Вам не хватает, если не секрет ?

lefion 25.12.2014 13:36

Цифр...
Конкретно сейчас осталось вытащить показания уровня топлива, в привязке к точкам хотя бы по времени, раз уж вместе с ними эти данные не предоставляются в готовом виде. Вести у себя таблицы тарировки баков? Ну вижу смысла...

Добавлено через 11 минут
Как-то же в веб-интерфейсе АвтоГРАФа данные по уровню топлива для точек предоставляется, значит можно его вытащить, как значением с датчика так и в человеческом виде (в литрах).
И в ReportsNet эти данные видимо то же вытаскиваются, по всей видимости по COM, потому как с открытой программой АвтоГРАФа отчет отваливается с ошибкой COM...
Вопрос лишь, в как эти цифры получить?..

SK 25.12.2014 13:36

Цитата:

Сообщение от lefion (Сообщение 95421)
Конкретно сейчас осталось вытащить показания уровня топлива, в привязке к точкам хотя бы по времени, раз уж вместе с ними эти данные не предоставляются в готовом виде.

Отчего же, предоставляются, но не меняются до тех пор, пока не пройдет интервал опроса.
Я же Вам дал код и даже картинку скинул, где есть LLS1... Вы не смотрели ?

SK 25.12.2014 13:38

Цитата:

Сообщение от lefion (Сообщение 95421)
И в ReportsNet эти данные видимо то же вытаскиваются, по всей видимости по COM

Через DBF в данном конкретном случае.

lefion 25.12.2014 13:50

Цитата:

Сообщение от SK (Сообщение 95423)
Цитата:

Сообщение от lefion (Сообщение 95421)
Конкретно сейчас осталось вытащить показания уровня топлива, в привязке к точкам хотя бы по времени, раз уж вместе с ними эти данные не предоставляются в готовом виде.

Отчего же, предоставляются, но не меняются до тех пор, пока не пройдет интервал опроса.
Я же Вам дал код и даже картинку скинул, где есть LLS1... Вы не смотрели ?

Читал конечно и проверил, что у меня это так же на чистой машине отрабатывает, как и мой первоначальный код...
 
CrdEntryLLS1 - Показание датчика LLS 1
CrdEntryLLS2 - Показание датчика LLS 2
CrdEntryLLS3 - Показание датчика LLS 3
CrdEntryLLS4 - Показание датчика LLS 4
CrdEntryLLS5 - Показание датчика LLS 5
CrdEntryLLS6 - Показание датчика LLS 6
CrdEntryLLS7 - Показание датчика LLS 7
CrdEntryLLS8 - Показание датчика LLS 8

 

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

Добавлено через 7 минут
Вариант с выгрузкой данных в DBF буду рассматривать в последнюю очередь.

SK 25.12.2014 13:59

Ну... если Вы пишете ПО для какой-то отрасли, необходимо ориентироваться в терминологии этой отрасли...

У Вас датчики уровня какого типа на машинах ?

lefion 25.12.2014 14:14

Хм... да точно, омникомм-овские датчики уровня... :confused:

И все же уточню, LLS уже в литрах выдаётся ?

NickolaDed 25.12.2014 14:32

нет, тарировачная таблица в ПО, и программа на компе переводит ацп в литры

lefion 25.12.2014 14:39

Видимо я плохо спросил...
Хотел спросить: Значение LLS выдаваемое ПО через COM уже в литрах?

Уже сам сравнив графики пришел к выводу что например значение LLS 523 это почти наверняка литры, а не вольты или что-то ещё (АЦП).

Добавлено через 3 минуты
Всем спасибо за помощь, было бы неплохо если в документации появится описание по использованию COM.

Осталось на практике проверить будет ли работать COM на сервере из под сервера 1С, при том что под десктопным пользователем запущен АвтоГРАФ.
Потому как локально приложение и COM не работают вместе...

plex 25.12.2014 14:46

lefion, это АЦП.. Полный бак обычно 1023 или 4095 что зависит от вида и настроек датчика

Добавлено через 2 минуты
Кроме того объем топлива в двух боковой машине будет суммой объемов показаний двух датчиков, или например в случае с двумя датчиками в баке половиной суммы показаний датчик. Здесь под показаниями я имею ввиду объем топлива

NickolaDed 25.12.2014 14:54

lefion, Вы можете из ком-а как взять срые данные LLS1...8 так и пересчитанные в литры значение баков.

LLS1...8 - сырые данные АЦП
FuelTank (или что то похожее) - перечитанные значения в литры, с учетом того, что в одном баке может быть несколько датчиков

lefion 25.12.2014 15:10

Цитата:

Сообщение от NickolaDed (Сообщение 95435)
lefion, Вы можете из ком-а как взять срые данные LLS1...8 так и пересчитанные в литры значение баков.

LLS1...8 - сырые данные АЦП
FuelTank (или что то похожее) - перечитанные значения в литры, с учетом того, что в одном баке может быть несколько датчиков

Согласно имеющимся у меня докам (из интернета и из дистрибутива) среди CrdEntry есть только следующее:
 
CrdEntryIndex - Индекс выбранной координаты (начинается с 1)
CrdEntryTime - Время
CrdEntryLongitude - Долгота
CrdEntryLatitude - Широта
CrdEntryDistance - Пробег (от начала рейса)
CrdEntrySpeed - Скорость
CrdEntryFlags - Состояние дискретных датчиков в битовых полях:
0x08 – питание; 0x04 – перемычка/время; 0x400 – остановка; 0x8000000 – координаты; 0x02, 0x01, 0x10, 0x20, 0x40, 0x80, 0x100, 0x200 – датчики 1 – 8
CrdEntrySensor1 - Датчик 1 (0 – выключен, 1 – включен)
CrdEntrySensor2 - Датчик 2 (0 – выключен, 1 – включен)
CrdEntrySensor3 - Датчик 3 (0 – выключен, 1 – включен)
CrdEntrySensor4 - Датчик 4 (0 – выключен, 1 – включен)
CrdEntrySensor5 - Датчик 5 (0 – выключен, 1 – включен)
CrdEntrySensor6 - - Датчик 6 (0 – выключен, 1 – включен)
CrdEntrySensor7 - Датчик 7 (0 – выключен, 1 – включен)
CrdEntrySensor8 - Датчик 8 (0 – выключен, 1 – включен)
CrdEntryLLS1 - Показание датчика LLS 1
CrdEntryLLS2 - Показание датчика LLS 2
CrdEntryLLS3 - Показание датчика LLS 3
CrdEntryLLS4 - Показание датчика LLS 4
CrdEntryLLS5 - Показание датчика LLS 5
CrdEntryLLS6 - Показание датчика LLS 6
CrdEntryLLS7 - Показание датчика LLS 7
CrdEntryLLS8 - Показание датчика LLS 8
CrdEntryDriverName - Водитель
CrdEntryDriverID - Идентификатор водителя
CrdEntryChPName - Имя контрольной точки
CrdEntryChPAddress - Адрес контрольной точки
CrdEntryChPID - Идентификатор контрольной точки
CrdEntryGeoZName - Имя геозоны
CrdEntryGeoZAddress - Адрес геозоны
CrdEntryGeoZID - Идентификатор геозоны
TrackCrdsStr - Координаты трека в виде строки: долгота1 широта1,долгота2 широта2 и т. д.
TrackCrdsArray - Массив, содержащий последовательно следующие данные типа double:
– время;
– широта;
– долгота;
– пробег (от начала рейса);
– скорость

 


Раз первоначальное мой впечатление о том, что данные в LLS таки сырые, хотя и не вольты, то покажите где же искать литри...

А то я уже в конец запутался...

Добавлено через 2 минуты
Есть конечно ещё
 
TripTank1StartLevel - Начальный уровень топлива в баке 1
TripTank1EndLevel - Конечный -»-
TripTank2StartLevel - Начальный уровень топлива в баке 2
TripTank2EndLevel - Конечный -»-
TripTank3StartLevel - Начальный уровень топлива в баке 3
TripTank3EndLevel - Конечный -»-
TripTank4StartLevel - Начальный уровень топлива в баке 4
TripTank4EndLevel - Конечный -»-

 

Но это в разрезе рейсов - на начало и конец, а хотелось бы в разрезе точек (точек рейсов, если не всех точек).

Добавлено через 2 минуты
И среди свойств COM объекта я не вижу ничего подобного...

plex 25.12.2014 15:25

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

NickolaDed 25.12.2014 15:57

Надо программисту вопрос задать есть ли там возможность взять топливо пересчитанное в литры? Может в инструкцию просто не включили.

SK 26.12.2014 05:42

Цитата:

Сообщение от lefion (Сообщение 95436)
Но это в разрезе рейсов - на начало и конец, а хотелось бы в разрезе точек (точек рейсов, если не всех точек).

Уважаемый, потрудитесь всё-таки прочитать документацию. Для кого мы её пишем-то ???
Там по данному вопросу всё написано русским по-белому и даже без таких спецтерминов как LLS:



P.S.: Я же писал уже, что через массивы и переменные мы можем выдать не все данные. Многие можно получить через файлы.
Это было сделано из практических соображений и шло не столько от нас, сколько от тех, кто этими данными пользовался - для тех же отчетов и 1С-ников, которым, как выяснилось, не нужны были массивы, а нужны были файлы, которые потом они могли и обработать и в архив сохранить для истории.

SK 26.12.2014 05:47

lefion, то Вы просите данные из таблицы "сырых данных", так вот Вам CrdEntryLLSx, то обработанные, отфильтрованные и приведенные к литрам - так надо брать другой тип данных (см. пост выше).

SK 26.12.2014 05:47

Цитата:

Сообщение от NickolaDed (Сообщение 95440)
Надо программисту вопрос задать есть ли там возможность взять топливо пересчитанное в литры? Может в инструкцию просто не включили.

NickolaDed, может инструкцию просто не читали ?

lefion 26.12.2014 05:54

1) Инструкцию читал (из неё же и приводу отрывки)

2) Я изначально просил не сырые данные уровня топлива, потому сразу и не понял почему вы ссылаетесь на LLS, но решил что там все таки так нужные мне литры...

3) Выше я уже писал, что если есть способы кроме DBF, то они предпочтительнее (все таки выгрузить в файл, а потом считать его в любом случае накладнее чем получить через COM).

SK 26.12.2014 05:57

Цитата:

Сообщение от lefion (Сообщение 95452)
2) Я изначально просил не сырые данные уровня топлива, потому сразу и не понял почему вы ссылаетесь на LLS, но решил что там все таки так нужные мне литры...

А Вас, уж простите, но не всегда поймешь однозначно. Вы просите вроде как не сырые данные, но тут же просите данные из таблицы по CTRL+ALT+ALT. Поэтому, возникает когнитивный диссонанс...

lefion 26.12.2014 05:58

Цитата:

Сообщение от plex (Сообщение 95433)
lefion, это АЦП.. Полный бак обычно 1023 или 4095 что зависит от вида и настроек датчика

Добавлено через 2 минуты
Кроме того объем топлива в двух боковой машине будет суммой объемов показаний двух датчиков, или например в случае с двумя датчиками в баке половиной суммы показаний датчик. Здесь под показаниями я имею ввиду объем топлива

Спасибо, что вовремя предупредили

SK 26.12.2014 06:06

Цитата:

Сообщение от lefion (Сообщение 95452)
3) Выше я уже писал, что если есть способы кроме DBF, то они предпочтительнее (все таки выгрузить в файл, а потом считать его в любом случае накладнее чем получить через COM).

Точки по топливу, в ПО АвтоГРАФ версий 3.х...4.х по COM - только через файл.
Если использовать интерфейс АвтоГРАФ-HTTP2COM, то будет передаваться через HTTP в XML-формате.

SK 26.12.2014 06:10

Цитата:

Сообщение от lefion (Сообщение 95454)
Цитата:

Сообщение от plex (Сообщение 95433)
lefion, это АЦП.. Полный бак обычно 1023 или 4095 что зависит от вида и настроек датчика

Добавлено через 2 минуты
Кроме того объем топлива в двух боковой машине будет суммой объемов показаний двух датчиков, или например в случае с двумя датчиками в баке половиной суммы показаний датчик. Здесь под показаниями я имею ввиду объем топлива

Спасибо, что вовремя предупредили

Вообще-то всё несколько сложнее с показаниями датчиков уровня:


lefion 26.12.2014 06:11

Цитата:

Сообщение от SK (Сообщение 95453)
Цитата:

Сообщение от lefion (Сообщение 95452)
2) Я изначально просил не сырые данные уровня топлива, потому сразу и не понял почему вы ссылаетесь на LLS, но решил что там все таки так нужные мне литры...

А Вас, уж простите, но не всегда поймешь однозначно. Вы просите вроде как не сырые данные, но тут же просите данные из таблицы по CTRL+ALT+ALT. Поэтому, возникает когнитивный диссонанс...

Так в колонке "ID заправок / Уровни в баках" указаны значения в литрах...
По крайней мере значение совпадет с тем что указано в столбце "Бак 1, л" в списке рейсов.
Если ошибся, то извините, с приложением непосредственно не работаю, и на что указали на то и ориентируюсь.

SK 26.12.2014 06:15

Цитата:

Сообщение от lefion (Сообщение 95457)
Так в колонке "ID заправок / Уровни в баках" указаны значения в литрах...
По крайней мере значение совпадет с тем что указано в столбце "Бак 1, л" в списке рейсов.

- массив уровней в баках по точкам
- данные по рейсам (в т.ч. уровни на начало и конец)
- данные по заправкам и сливам (в т.ч. уровни на начало и конец)
всё это разные наборы (массивы, таблицы) данных.

lefion 26.12.2014 06:46

Простите, а можно поподробнее о АвтоГРАФ-HTTP2COM...
Не слышал даже о HTTP2COM, не говоря уже о АвтоГРАФ-HTTP2COM...

Это случайно не методы Web-интерфейса АвтоГРАФ ?

SK 26.12.2014 07:07

HTTP2COM - это служба, которая устанавливается на компьютере с ПО АвтоГРАФ и позволяет получать данные с помощью HTTP-запросов к этой службе.
HTTP-запросы можно отсылать с удаленного компьютера в отличие от СОМ-запросов, которые работают только на том компьютере, на котором установлено ПО АвтоГРАФ.
По сути это шлюз, которые преобразовывает HTTP-запросы в СОМ-запросы и СОМ-ответы в HTTP-ответы.

lefion 12.01.2015 14:28

А где скачать HTTP2COM ?
И что конкретно из себя представляет HTTP2COM - это приложение IIS или windows service ?

Добавлено через 1 час 40 минут
Или имеется введу это приложение HTTP2COM ?

SK 12.01.2015 15:12

lefion, через запрос в техническую поддержку.
HTTP2COM - это служба Windows, устанавливаемая на компьютер с диспетчерским ПО АвтоГРАФ версий 3.х...4.х
Это не то приложение, которое можно найти по данной Вами ссылке.


Текущее время: 09:38. Часовой пояс GMT.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot