Работа через COM, получение данных по прохождению контрольных точек
Доброго времени суток.
По производственной необходимости столкнулся с программой Автограф, из которой надо получать данные по прохождению транспортными средствами контрольных точек. Делать это хотелось бы в режиме реального времени, либо близком к нему. Узнал, что Автограф регистрирует COM объект и начал изучать его API, но к сожалению не смог нигде найти вменяемой документации к нему. Нашёл событие OnReceiveOnlineData -- судя по названию, оно происходит, когда Автограф получает очередную порцию данных с авто. Вопрос: как в этом событии, получить новые пройденные контрольные точки? Если предыдущий способ не подходит, я предполагал использовать метод StartComputing(string GroupFileName, int CarDevice, string FirstTime, string LastTime, string DataSource, int TakeTripsSetup), который вроде бы, соответствует групповой обработке данных, а это то что мне нужно. Однако, совсем не понятно, какая семантика параметров в этом методе, нет ли описания для них? (Мне нужно прохождение всех ТС каждой контрольной точки). Так же не очень понятно, как после вычислений считать полученные данные, например, в память? |
На чем пишите и какова задача ?
|
Пишем на .NET
Задача -- получать данные о прохождении машинами контрольных точек в реальном (или близком к нему) времени. |
Если совсем по-быстрому отвечать, то могу предложить копипаст кода для 1С (по-русски, правда... но такова 1С... как раз отчет по КТ делался - должно быть понятно для программера)
Сначала заполнялась таблица ТС (всех ТС по всем группам): PHP код:
PHP код:
|
Еще с примерами:
|
Цитата:
Просто надо понять, какая физическая цель преследуется. Какова задача в физическом смысле - что именно контролируется ? |
Спасибо за быстрый ответ!
В физическом смысле, нам необходимо уметь отвечать на следующие вопросы:
Эти данные нужны для отображения пользователю, чем своевременнее, тем лучше. Так же, в конце дня, эти данные будут использованы для сверки плана и реального маршрута, и принятия дальнейших решений в случае наличия отклонений. Расскажите, пожалуйста, про не-OLE способы, потому что использовать это древнее средство взаимодействия мне тоже не кажется лучшим вариантом. |
Цитата:
Цитата:
Во-вторых, данный способ Вам не подходит и служит обычно для оперативного тревожного реагирования. Когда надо определить, на момент последних данных, полученных от терминала машина в КТ или нет. Для этого делается специальный запрос к серверу (описан в документации к серверному ПО), потом Вы сами пишете проверку: входит или не входит машина в полигон (алгоритм с подсчетом пересечения количества сторон несамопересекающегося полигона лучом брошенным в произвольном направлении из точки с координатами х,у). Но это для конкретных моментов времени. При запросе через OLE - ПО рассчитывает всю историю посещений с гораздо более высокой точностью, разбивает на рейсы по нужным признакам, определяет ближайшие адреса для точек входа и выхода (если подключена адресная база), пробеги внутри КТ, моточасы и многие другие параметры... Плюс, с точки зрения кода, это займет на три порядка меньше кода. Плюс, Вы не задумываетесь о таких вещах, как о фильтрации координат трека, соприкасающихся КТ и о многом другом (адресах, пробегах внутри КТ и т.д. и т.п.) |
Спасибо за ответы ещё раз, сейчас изучаю Ваш вариант.
Насчёт OLE: тут уж позвольте не согласится, этому решению уж почти 20 лет как, да и вносит оно ограничения: - внешняя программа должна работать на той же физической машине, что и автограф, а это сразу значит что она под Windows, а ведь есть другие системы - одна программа работает с одним автографом, т.е. нельзя обращаться к одному и тому же автографу из разных программ - программа может делать в один момент времени только один запрос Имхо, здесь очень удачным было бы решение в виде веб-сервиса, который бы предоставлял специально настроенный для этого Автограф, либо WCF, может быть даже что-то типа socket.io или signalr, но тут уж решать конечно не мне :), да и выбирать надо исходя из того, что нужно реальным клиентам. Добавлено через 48 минут И у меня есть дополнительный вопрос: есть ли какие-то гарантии на порядок выдачи контрольных точек (например, по возрастанию времени прибытия), или необходим сортировать после получения? |
Цитата:
То процессоры Intel вообще устаревший палеолит. Думаете, ничего не развивается со временем ? А сама Windows - древнее OLE на годы ? Отказываемся от Windows ? Цитата:
Кроме того, это мгновенно совместило софт с 1С, MS Office, OpenOffice, MapInfo, даже CorelDraw (да-да - можно там прямо трек рисовать - VBA встроен) и огромным количеством самого разоног софта. Какой универсальный механизм Вы можете предложить на замену ? Цитата:
Цитата:
Цитата:
Цитата:
P.S.: В соседней теме человек попросил написать получение данных по заправкам и сливам в 1С. Я потратил на это всего-то около часа и то - вместе с оформлением таблиц. Не знаю, сколько бы без OLE я убил времени на связку. И еще: задержка на обработку данных значительно больше, чем на запросы через OLE-механизм. Да, в версию .NET будет встроен дублирующий скоростной механизм соединения модулей, но не web-сервер однозначно... |
Текущее время: 23:41. Часовой пояс GMT. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot