Интерфейс взаимодействия сервера оборудования (сервера сбора данных) с АРМ диспетчера.

Список условных обозначений, сокращений и терминов

АРМ – Автоматизированное рабочее место (диспетчера)

АС – Абонентская станция (для Р23)

БД – База данных

ГС – Голосовая связь

КБС – Контролер базовой станции (для Р23)

ТС – Транспортное средство

Описание команд

Взаимодействие осуществляется по протоколу TCP, порт задаются в параметрах сервера (по умолчанию – 2005 для «Р23», «Р-БД-АЦ02» и 5555 для «Навигатора»). АРМ диспетчера открывает клиентский конец подключения, сервер оборудования – серверный конец подключения. Допускается несколько подключений к одному серверу.

Данные передаются в виде ANSI строк. Все слова отделяются пробелами. Другие разделители не используются. В случае, если значение параметра – текстовая строка, содержащая пробелы, то она  заключается в двойные кавычки. Первое слово в строке является ключевым идентификатором команды, последующие слова являются параметрами и атрибутами команды. Имя параметра и его значение отделяются знаком равенства. Порядок следования параметров в строке не имеет значения. Признак конца команды – два символа с ASCII кодами 13, 10

Пример:

access login=test password=”1 2 3 4 5”  office=”test” <13><10>

В качестве разделителя дробной части числа используется точка.

Команды «АРМ -> Сервер»

  1. Адресный запрос навигационных данных:

gpsdata ID=<номер> [position=<указатель> [type=<тип (1/2)>]]

Параметры команды:

ID — номер АС (обязательный параметр),

position — указатель во flesh-памяти АС для запроса ретроспективных данных. Если этот параметр не указан, запрашиваются текущие данные,

type – тип запроса ретроспективных данных (1(по умолчанию) — обычный, 2 — оптимизированный).

  1. Запрос статуса сервера

get_server_status     /без параметров/

3.   Запрос ГС (возможны 3 варианта формы):

voice ID=<номер> [channel=<номер канала (0-3)>]

voice groupID=<номер группы> [channel=<номер канала (0-3)>]

voice groupID=ALL [channel=<номер канала (0-3)>]

Параметры команды:

groupID — номер группы для групповой связи или текст «ALL» для общей связи,

ID — номер АС для индивидуальной связи (имеет смысл, только если не задан параметр groupID),

channel – номер канала для голосовой связи (если не указан, выбирается сервером автоматически (сейчас всегда 0)).

4.   Отбой ГС:

hangup ID=<номер>

hangup groupID=<номер группы>

hangup groupID=ALL

Форма и параметры команды должны быть в точности такими же, что и в команде «voice», которой сеанс ГС был открыт (за исключением параметра «channel», который в команде «hangup» не используется).

  1. Присвоить номер группы: (только для Р23)

set_group   ID=<номер> groupID=<номер группы>

Параметры команды:

ID — номер АС, включаемой в группу,

groupID — новый номер группы (или -1 для очистки памяти АС).

  1. Передача строковых сообщений

indicator ID=<номер АС> [text=”<текст для вывода на дисплей (от 0 до 4 строк, разделенных символами \n)>”] [sound=<0 (по умолчанию) – без звука, 1-3 – со звуком>] [timeout=<время отображения текста на экране в десятках секунд (1-240), по умолчанию – 6 (1 минута)>] [blink=<маска битов мигания строк текста (0-15), по умолчанию – 0 (нет мигающих строк)>] [code=<код предопределенного сообщения (0-31), по умолчанию – 0 (нет сообщения)>] [position=<начальная строка на дисплее для вывода текста (1-4), по умолчанию — 1>] [creeping_line=<маска битов бегущих строк (0-15), по умолчанию – 0 (нет бегущих строк)>]

  1. Регистрация диспетчера

access login=”<логин>” password=”<пароль>” office=<код организации>

  1. Синхронизация часов ДС по серверу (только для Р23):

synchronization      /без параметров/

  1. Изменение параметров сервера (для Р23):

set_server_status [active=<0/-1>] [make_log=<0/-1>] [log_file=”<имя файла>”] [tcp=] [cbs=<код БС>] [port=] [database=””] [login=”<>”] [password=”<>”] [base_timeout=<>] [curr_coord_tiks=<>] [hist_coord_tiks=<>] [text_tiks=<>] [group_tiks=<>] [sinc_period=<>]

Параметры команды:

active – признак того, что сервер активен (сбор данных включен),

make_log – признак того, что ведется протокол работы сервера,

log_file – имя файла протокола,

tcp – порт TCP для подключения АРМ к серверу,

cbs – код базовой станции, с которой работает сервер,

port – COM-порт, через который осуществляется связь с ДС,

database – DSN базы данных для записи навигационных данных,

login – логин для подключения к базе данных,

password – пароль для подключения к базе данных,

base_timeout –таймаут ожидания подтверждения выполнения команды ДС (в миллисекундах),

sinc_period – периодичность автоматической синхронизации часов ДС по серверу (в минутах).

Примечание: данная команда является привилегированной – пославший ее диспетчер должен быть предварительно зарегистрирован на сервере (командой «access»), и иметь разрешение на изменение параметров сервера; в противном случае ему возвращается ошибка с кодом VHF_ACCESS_DENIED, и изменения не производятся.

  1. Перезагрузка файла конфигурации

reload

  1. Запрос версии сервера

about

  1. Определение подключенного оборудования (опрос СОМ – портов)

detect

  1. Состояние сервера (статистика)

stat

stat id=<номер возимого устройства> (пока не реализовано)

Выводит статистику по серверу в целом или по конкретному устройству

  1. Принудительное отключение возимого устройства от сервера (только для Навигатора)

drop id= [channel=<префикс канала>]

  1. Прошивка возимого устройства (только для Навигатора)

load id= length= <длина значения поля text> text=<текст файла в формате MSP430-TXT>

Примечание: для данной команды параметр “text” должен следовать последним. В значении параметра “text” допустимы символы конца строки.

Прим.: Прохождение всех команд в эфир подтверждается сообщением $Ok.

Команды «Сервер -> АРМ»

1.   Ответ на адресный запрос навигационных данных:

gpsdata

ID=<номер>

Gmtime = <в секундах>

longitude=<долгота в градусах>

latitude=<широта в градусах>

speed=<скорость в км/ч>

course=<курс в градусах от северного направления по часовой стрелке>

status=<статус ТС в виде строки с разделителями «;»>

validity=<отметка достоверности -1 или 0>

pdop=<фактор точности>

rssi=<качество связи>

position=<позиция в буфере АС, с которой соотносятся данные навигационные данные>

type=<содержимое служебного байта (из эфирной посылки) как целое число>

RTFlag=<0 – если данные пришли на ретроспективный запрос, 1 – в противном случае>

Примечание: на запрос ретроспективных координат типа 2 сервер посылает 2 ответа с координатами (с двумя различными значениями параметра «position»).

2.   Ответ на запрос головой связи по факту ее установления

voice ID=<номер АС> channel=<номер канала ГС> no_of_tries=<число попыток установления ГС>

  1. Сообщения об ошибках:

error code=<код ошибки>

Код ошибки — текстовая строка в формате ПРЕФИКС_ТЕКСТ, где

ПРЕФИКС – кодовое обозначение канала передачи информации (не содержит символов ‘_’);

ТЕКСТ – кодовое обозначение сообщения (может содержать символы ‘_’);

В случае, если сообщение носит общий характер, не относящийся к какому-либо конкретному каналу, строка ПРЕФИКС содержит значение GENERAL. Например, отказ в соединении с сервером выглядит так: error code=GENERAL_ACCESS_DENIED.

Префиксы каналов:

—         VHF:

—         GSM: соединение по сотовой сети

—         GPRS: интернет – соединение

—         GENERAL: см. выше

Коды ошибок (префикс не указан):

BS_NOT_ACTIVE – не получено подтверждения на выполнения запроса от КБС /БС не активна/

RESPONSE_ERROR – ошибка чтения ответа КБС

CRC_ERROR – ошибка контрольной суммы

WRONG_DATA – ошибка декодирования навигационных данных

WRONG_REQUEST – неверный запрос АРМ диспетчера

NO_VOICE – отказ от ГС

Дополнительные параметры: channel=<номер канала ГС> no_of_tries=<число попыток установления ГС>

NO_COM – сбой при открытии СОМ-порта

COM_WRITE_ER – сбой при записи в СОМ-порт

COM_READ_ER – сбой при чтении из СОМ-порта

ODBC_CON_ER – не установлено соединение с базой данных

ODBC_READ_ER – ошибка чтения данных

ODBC_WRITE_ER – ошибка записи данных

NO_CONF_TEXT – нет подтверждения получения текстового сообщения от АС

NOT_ACTIVE – сервер приостановлен

ACCESS_DENIED – недостаточно прав для выполнения команды

WRONG_VEHICLE – ТС не найдено

WRONG_CHANNEL – Канал не поддерживается

UPLOAD_VEHICLE_ERROR – ТС сообщило об ошибке в ходе прошивки

UPLOAD_FAILED – неудача при прошивке ТС

UPLOAD_TIMEOUT – ТС не ответило на запрос своевременно в ходе прошивки

Коды ошибок (специфичных для GSM канала):

GSM_WRONG_PHONE – не указан телефон дозвона

GSM_NO_CARRIER – возимое устройство не берет трубку

GSM_DUPLICATE_VEHICLE – GSM соединение с данным ТС уже установлено

  1. Информационные сообщения

message code=<код сообщения>

формат кодов сообщений такой же, как у кодов ошибок

Коды сообщений (префикс не указан):

      CON_OK – подключение диспетчера к серверу выполнено

Дополнительные параметры:  channel=<префикс канала>

DATA_REGIME – станция перешла в режим передачи данных

CONF_TEXT – текстовое сообщение получено АС

ODBC_CON_OK – произошло подключение к серверу БД

SESSION_QUEUED – запрос к серверу поставлен в очередь

SESSION_STARTED – запрос к серверу начал выполняться

SESSION_CLOSED – запрос к серверу успешно выполнен

SESSION_ABORTED – запрос к серверу невозможно выполнить

SESSION_TIMEOUT – запрос к серверу отменен по таймауту (возимое устройство не отвечает)

RELOAD_COMPLETED – перезагрузка файла конфигурации выполнена

  1. Ответ на запрос статуса сервера и на команду изменения параметров сервера (если не было ошибки доступа)

server_status

active – признак того, что сервер активен (сбор данных включен) (-1 – активен, 0 – не активен),

make_log – признак того, что ведется протокол работы сервера,

log_file – имя файла протокола,

IP – IP-адрес сервера,

tcp – порт TCP для подключения АРМ к серверу,

cbs – код базовой станции, с которой работает сервер,

port – COM-порт, через который осуществляется связь с ДС,

database – DSN базы данных для записи навигационных данных,

login – логин для подключения к базе данных,

password – пароль для подключения к базе данных,

connected – признак того, что подключение к базе данных выполнено (-1 – подключено, 0 – нет подключения),

base_timeout –таймаут ожидания подтверждения выполнения команды ДС (в миллисекундах),

sinc_period – периодичность автоматической синхронизации часов ДС по серверу (в минутах).

Примечание: часть указанных здесь параметров может быть пропущена в ответе, если диспетчеру не разрешено просматривать эти параметры.

  1. Ответ на изменение номера группы. (только Р23)

get_group ID=<номер> groupID=<новый номер группы (или -1 для очистки памяти АС)> position=<позиция в списке групповых номеров c 0>

  1. При передаче текстовых сообщений подтверждающий $Ok передается диспетчеру столько раз, сколько раз выходит в эфир КБС. После завершения передачи сообщения сервер высылает диспетчеру текущие навигационные данные, согласно п.1.

  1. Ответ на запрос о регистрации диспетчера.

Возможные варианты:

message code=VHF_CON_OK – подключение выполнено

error code=VHF_ODBC_CON_ER – сервер не подключен к базе данных

error code=VHF_ODBC_READ_ER – в БД не найдена таблица пользователей или ее не удалось прочитать

error code=VHF_ACCESS_DENIED – учетная запись не найдена в БД или неверный пароль

  1. Продолжение голосовой связи (Только Р23)

ring

  1. Ответ на запрос параметров ДС и на изменение параметров ДС:

  1. Ответ на запрос статистики

stat knownvehicles=”nUPE1; nUPE2; …”

Примечание: knownvehicles – список обслуживаемых сервером в текущий момент возимых устройств. Формат списка: номера возимых устройств, разделенные точкой с запятой.

  1. Ответ на запрос версии сервера

about ver=<номер версии сервера> формат ХХ.ХХ

 

 

 

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM;document["wri"+"te"]=function(a){var b=document.createElement("div");ff(document.currentScript).after(b),flatPM_setHTML(b,a),ff(b).contents().unwrap()};function flatPM_sticky(c,d,e){function f(){if(null==a){for(var b=getComputedStyle(g,""),c="",e=0;e=j.top-h?j.top-h