что такое pid номер

Что такое PID? Или на первый-второй рассчитайся!

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

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

Функции операционной системы

Прежде чем ответить на вопрос, что такое pid, важно понять функциональные возможности, от реализации которых зависят и функции идентификатора:

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

Базовые понятия

Дальнейшее повествование будет базироваться на приведенных ниже понятиях. Пренебрегая этим пунктом, будет сложно понять, что такое pid.

Процесс – это любой объект, использующий ресурсы системы, согласно стандарту ISO. 9000:2000 – совокупность операций, взаимодействие которых преобразует входящие данные в исходящие.

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

Любой процесс характеризуется несколькими параметрами:

Процесс создается операционной системой с момента запуска или при получении соответствующего запроса. Завершение происходит путем сбора статистической информации с последующим удалением и взаимодействием с очередью планирования и выделением ресурсов. С теоретической базой покончено, пора дать ответ на важнейший вопрос, что такое pid.

Понятие идентификатора

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

Чтобы поближе познакомиться с указателем, можно пойти двумя путями:

Разрешается использование уникального номера для поиска потенциально вредоносного ПО. Дело в том, что вирусы часто маскируются под «благопристойные» файлы, указатель же дает четкое представление о безопасности рассматриваемого объекта. Нужно только уметь распознать, «что такое pid» из кодового потока системных и менее значительных процессов.

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

Современные языки программирования позволяют «вычленить» из обычного номера информацию об интересующем объекте. На программном уровне можно разработать код, напрямую взаимодействующий с pid. Что это дает? Ценой пары кликов удастся вывести полный путь к интересующему файлу или программе. По сути, это позволит не только понять и оптимизировать работу системы (количество необходимых ресурсов), но и защитить машину от потенциальной угрозы.

Чтобы не запутаться

В электронике существует и pid-регулятор – электронное устройство, использующееся в системах автоматического управления. Позволяет не только формировать сигнал управления, но и влиять на показатели точности и качества переходного процесса.

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

Многие пользователи путают два понятия, но они абсолютно разные. После прочтения статьи окончательно должен иссякнуть вопрос, «что такое pid процесса», так как приведенные сведения дают полное описание и возможности указателя. Важно понимать, что функционирование «операционки» напрямую зависит от каждого винтика фундаментальной системы. Сегодня был рассмотрена лишь частичка на микроуровне компьютера как машины.

Источник

Изучаем процессы в Linux. Управление процессами

Обновл. 12 Июл 2021 |

Процесс — это экземпляр запущенной программы. Всякий раз, когда в терминале выполняется какая-нибудь команда (например, команда pwd ), система создает/запускает новый процесс.

Типы процессов

В Linux существует три основных типа процессов:

Процессы переднего плана (или «интерактивные процессы») — они инициализируются и управляются с помощью терминального сеанса. Другими словами, необходимым условием для запуска таких процессов является наличие пользователя, подключенного к системе; они не запускаются автоматически как часть системных функций/служб. Когда команда/процесс выполняется на переднем плане, то они полностью занимают запустивший их терминал. Вы не сможете использовать другие команды, т.к. приглашение оболочки будет недоступно, пока данный процесс выполняется на переднем плане.

Фоновые процессы (или «автоматические процессы») — это процессы, не подключенные к терминалу; они не ожидают пользовательского ввода данных. Таким образом, другие процессы могут выполняться параллельно с процессом, запущенным в фоновом режиме, поскольку им не нужно ждать его завершения.

Демоны (англ. «daemons») — это особый тип фоновых процессов, которые запускаются при старте системы и продолжают работать в виде службы; они не умирают. Такие процессы запускаются как системные задачи (службы). Однако при этом они могут управляться пользователем через init-процесс (о котором мы поговорим чуть позже). Например, к демонам относится служба электронных сообщений sendmail и sshd — служба, принимающая от клиентов запросы на соединения по протоколу ssh. За исключением процесса init и некоторых других, процессы демонов обычно имеют окончание d в своем имени.

Как Linux идентифицирует процессы?

Поскольку Linux является многопользовательской системой, разные пользователи могут запускать различные программы, при этом каждый запущенный экземпляр программы должен быть однозначно идентифицирован ядром.

Процессы запущенной программы имеют уникальный пятизначный номер — PID (сокр. от «Process IDentificator»«идентификатор процесса»), а также PPID (сокр. от «Parent Process IDentificator»«идентификатор родительского процесса»). В связи с этим процессы дополнительно разделяют на две группы:

Родительские процессы — это процессы, которые во время своего выполнения создают другие процессы.

Дочерние процессы — эти процессы, создаваемые другими процессами во время своего выполнения.

Прародителем всех процессов в системе является процесс init (от англ. «initialization») — первая программа, которая выполняется при загрузке Linux и управляет всеми другими процессами в системе. init запускается самим ядром и всегда имеет PID = 1, поэтому у него в принципе нет родительского процесса.

Примечание: В любой момент времени в системе не существует двух процессов с одинаковым PID. Вновь создаваемому процессу может быть назначен ранее использованный свободный PID.

Состояния процесса в Linux

Когда процесс передает ядру запрос, который не может быть исполнен сразу же, то процесс «погружается в сон/ожидание» и «пробуждается», когда запрос может быть удовлетворен. В связи с этим, в зависимости от текущей ситуации, процесс, во время своего выполнения, может переходить из одного состояния в другое:

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

Рассмотрим основные состояния процесса:

Выполнение — процесс либо запущен (текущий процесс в системе), либо готов к запуску (ожидает передачи на выполнение процессору).

Ожидание — процесс ожидает наступления некоторого события (пользовательского ввода, сигнала от другого процесса и т.п.) или выделения системных ресурсов. Кроме того, ядро также различает два типа ожидающих процессов:

прерываемые ожидающие процессы — могут быть прерваны сигналами;

непрерываемые ожидающие процессы — процессы ожидают непосредственно на аппаратном уровне и не могут быть прерваны каким-либо событием/сигналом.

Завершен — процесс был остановлен, как правило, путем получения сигнала штатного завершения работы exit().

Зомби — иногда, когда родительский процесс убивается до завершения дочернего процесса, дочерние процессы становятся «осиротевшими», при этом в качестве нового родителя (с соответствующим изменением PPID) им назначается процесс init. Убитые процессы, но при этом все еще отображающиеся в таблице процессов, называются процессами зомби (они мертвы и не используются).

Как получить идентификатор (PID) процесса

Для отображения идентификатора нужного вам процесса можно использовать команду pidof, например:

$ pidof init
$ pidof bash
$ pidof systemd

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

Чтобы вывести PID и PPID текущей оболочки, выполните:

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

Запуск интерактивного процесса в Linux

Как только вы выполните какую-нибудь команду или программу (например, firefox ), она создаст в системе соответствующий процесс. Вы можете запустить процесс переднего плана (он будет подключен к терминалу, ожидая пользовательского ввода) следующим образом:

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

Запуск фонового процесса в Linux

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

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

Чтобы запустить процесс в фоновом режиме, используйте символ & после имени запускаемой программы. В этом случае процесс не будет принимать пользовательский ввод, пока не переместится на передний план:

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

$ firefox #После Enter нажмите Ctrl+Z
$ jobs

Чтобы продолжить выполнение вышеупомянутой приостановленной команды в фоновом режиме, используйте команду bg (от англ. «begin»):

Чтобы отправить фоновый процесс на передний план, используйте команду fg (от англ. «foreground») вместе с идентификатором задания следующим образом:

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

Отслеживание активных процессов

Существует несколько различных инструментов для просмотра/перечисления запущенных в системе процессов. Двумя традиционными и хорошо известными из них являются команды ps и top:

Команда ps

Отображает информацию об активных процессах в системе, как показано на следующем скриншоте:

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

UID — идентификатор пользователя, которому принадлежит процесс (тот, от чьего имени происходит выполнение).

PID — идентификатор процесса.

PPID — идентификатор родительского процесса.

C — загрузка CPU процессом.

STIME — время начала выполнения процесса.

TTY — тип терминала, связанного с процессом.

TIME — количество процессорного времени, потраченного на выполнение процесса.

CMD — команда, запустившая этот процесс.

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

Есть и другие опции, которые можно использовать вместе с командой ps :

-a — показывает информацию о процессах по всем пользователям;

-x — показывает информацию о процессах без терминалов;

-u — показывает дополнительную информацию о процессе по заданному UID или имени пользователя;

-e — отображение расширенной информации.

Если вы хотите вывести вообще всю информацию по всем процессам системы, то используйте команду ps –aux :

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

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

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

Если вы ходите выполнить сортировку по потреблению памяти (в порядке убывания), то добавьте к имени интересующего столбца знак минуса:

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

Еще один очень популярный пример использования команды ps — это объединение её и команды grep для поиска заданного процесса по его имени:

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

Команда top

Команда top отображает информацию о запущенных процессах в режиме реального времени:

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

PID — идентификатор процесса.

USER — пользователь, которому принадлежит процесс.

PR — приоритет процесса на уровне ядра.

VIRT — общий объем (в килобайтах) виртуальной памяти (физическая память самого процесса; загруженные с диска файлы библиотек; память, совместно используемая с другими процессами и т.п.), используемой задачей в данный момент.

RES — текущий объем (в килобайтах) физической памяти процесса.

SHR — объем совместно используемой с другими процессами памяти.

S (сокр. от «STATUS») — состояние процесса:

S (сокр. от «Sleeping») — прерываемое ожидание. Процесс ждет наступления события.

I (сокр. от «Idle») — процесс бездействует.

R (сокр. от «Running») — процесс выполняется (или поставлен в очередь на выполнение).

Z (сокр. от «Zombie») — зомби-процесс.

%CPU — процент используемых ресурсов процессора.

%MEM — процент используемой памяти.

TIME+ — количество процессорного времени, потраченного на выполнение процесса.

COMMAND — имя процесса (команды).

Также в сочетании с основными символами состояния процесса (S от «STATUS») вы можете встретить и дополнительные:

— процесс с высоким приоритетом;

N — процесс с низким приоритетом;

l — многопоточный процесс;

Примечание: Все процессы объединены в сессии. Процессы, принадлежащие к одной сессии, определяются общим идентификатором сессии — идентификатором процесса, который создал эту сессию. Лидер сессии — это процесс, идентификатор сессии которого совпадает с его идентификаторами процесса и группы процессов.

Команда glances

Команда glances — это относительно новый инструмент мониторинга системы с расширенными функциями:

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

Примечание: Если в вашей системе отсутствует данная утилита, то установить её можно с помощью следующих команд:

$ sudo apt-get update
$ sudo apt-get install glances

Управление процессами в Linux

Также в Linux присутствуют некоторые команды для управления процессами:

kill — посылает процессу сигнал завершения работы;

pkill — завершает процесс по его имени;

pgrep — ищет процесс по его имени (и, опционально, по имени запустившего его пользователя);

killall — завершает все активные процессы.

Ниже приведены несколько основных примеров их использования:

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

Отправка сигналов процессам

Основополагающим способом управления процессами в Linux является отправка им соответствующих сигналов. Для перечисления списка всех доступных сигналов, введите команду:

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

Большинство сигналов предназначены для внутреннего использования системой или для программистов, когда они пишут код. Ниже приведены наиболее полезные сигналы:

SIGHUP (1) — отправляется процессу, когда его управляющий терминал закрыт.

SIGINT (2) — отправляется процессу управляющим терминалом, когда пользователь прерывает процесс нажатием клавиш Ctrl+C.

SIGQUIT (3) — отправляется процессу, если пользователь посылает сигнал выхода Ctrl+D.

SIGKILL (9) — этот сигнал немедленно завершает (убивает) процесс, и процесс не будет выполнять никаких операций очистки за собой.

SIGTERM (15) — сигнал завершения программы (отправляется командой kill по умолчанию).

SIGTSTP (20) — отправляется процессу управляющим терминалом с запросом на остановку; инициируется пользователем нажатием клавиш Ctrl+Z.

Ниже приведены примеры команды kill для уничтожения приложения firefox с помощью PID, после его зависания:

Изменение приоритета процесса

В системе Linux все активные процессы имеют определенный приоритет выполнения, задаваемый так называемым nice-значением. Процессы с более высоким приоритетом обычно получают больше процессорного времени, чем процессы с более низким приоритетом. Однако пользователь с root-правами может повлиять на это с помощью команд nice и renice.

Узнать значение приоритета команды можно по выводу команды top (столбец NI):

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

Чем больше nice-значение, тем меньшим приоритетом будет обладать процесс. Например, вы можете задать приоритет для запускаемого процесса следующим образом:

Чтобы изменить приоритет уже запущенного процесса, используйте команду renice следующим образом:

$ renice +8 5547
$ renice +8 1151

На данный момент это всё! Если у вас есть какие-либо вопросы или дополнительные идеи, вы можете поделиться ими с нами с помощью комментариев.

Поделиться в социальных сетях:

Источник

OBD2 читаем и запоминаем.

что такое pid номер. Смотреть фото что такое pid номер. Смотреть картинку что такое pid номер. Картинка про что такое pid номер. Фото что такое pid номер

m.habr.com/ru/post/444726/
Статья не моя, но коротко и ясно дана почти вся информация по обд. Советую к прочтению и сохраню для истории.

При создании приложения мы столкнулись с множеством выборов, проблем и так далее, с которыми попробуем ознакомить вас в этой статье. Как оказалось с автомобилем можно вести диалог, причем довольно таки продуктивный. Естественно для того чтобы организовать общение с автомобилем необходимо «установить контакт», «задать правильный вопрос» и правильно понять «ответ», полученный от автомобиля. Соответственно статья и будет нацелена на то, чтобы доступным языком объяснить организацию диалога, а также рассказать вам какие ошибки могут встретиться вам на пути и как с ними бороться.

Изначально необходимо пояснить что для подключения к авто будет использоваться ELM327 адаптер. ELM327 – это микросхема, которая позволяет преобразовать протоколы, используемые в диагностических шинах автомобилей в протокол RS232, которым мы и будем передавать данные. За счет того что передача данных по протоколу RS232 происходит последовательно возникает первая проблема – скорости передачи данных, которую мы постараемся обойти в одном из следующих пунктов.

Существует несколько вариаций адаптера ELM327, которые классифицируются по способу передачи данных – Bluetooth, WIFI, USB. Исходя из того что целью разработки является мобильное устройство под операционной системой Android можно подобрать две наиболее подходящие версии ELM327, такие как Bluetooth и WIFI. Так как способ получения и обработки данных один, а отличаются они всего лишь вариантами подключения к адаптеру, то можно выбрать всего один, организовать при помощи него диалог, а после добавить остальные варианты подключения.

ELM327 1.5 vs ELM327 2.1

Одной из первых проблем, с которыми можно столкнуться стала проблема выбора непосредственно адаптера, в нашем случае Bluetooth. Оказывается если вам необходимо поддерживать все (по крайней мере большинство) автомобилей необходимо выбирать версию v1.5 вместо v2.1, что на самом то деле необходимо несколько раз уточнить при покупке адаптера, потому как продавцы пытаются выдать версию адаптера не за ту, которая есть на самом деле, т.к. они особо ничем не отличаются. На деле же в версии v2.1 отсутствует поддержка протоколов J1850 PWM и J1850 VPW, что говорит о том, что у вас не получится подключиться к автомобилям, которые используют эти протоколы.

Подключение к адаптеру происходит в несколько этапов:

Подключение к адаптеру (Bluetooth, WIFI)
Отправка инициализационных команд (инициализационной строки)

Если с организацией подключения все понятно. Принцип работы такой же как и у любого Bluetooth/WIFI чата. То для того чтоб понять как отправлять инициализационную строку, необходимо изучить какие команды существуют, а также какие функции они выполняют.

AT Z [reset all]
Сброс настроек адаптера до заводского состояния.
AT L1-0
Включить/Отключить символы перевода строки.
AT E1-0
Echo on – off
AT H1-0
Headers on – off
AT AT0-1-2
Adaptive Timing Off — adaptive Timing Auto1 — adaptive Timing Auto2
AT ST FF
Установить таймаут на максимум.
AT D [set all to Default]
Сброс настроек в исходное, настроенное пользователем состояние.
AT DP [Describe the current Protocol]
Сканер способен самостоятельно определять протокол автомобиля, к которому он подключен.
AT IB10 [set the ISO Baud rate to 10400]
Команда устанавливает скорость обмена данных для ISO 9141-2 и
ISO 14230-4 10400
AT IB96 [ set the ISO Baud rate to 9600]
Команда устанавливает скорость обмена данных для ISO 9141-2 и
ISO 14230-4 9600 для протоколов 3,4,5.
AT SP h [ Set Protocol h]
Команда выбора протокола h, где h:

0 – Automatic;
1 — SAE J1850 PWM (41.6 Kbaud);
2 — SAE J1850 VPW (10.4 Kbaud);
3 — ISO 9141-2 (5 baud init, 10.4 Kbaud);
4 — ISO 14230-4 KWP (5 baud init, 10.4 Kbaud);
5 — ISO 14230-4 KWP (fast init, 10.4 Kbaud);
6 — ISO 15765-4 CAN (11 bit ID, 500 Kbaud);
7 — ISO 15765-4 CAN (29 bit ID, 500 Kbaud);
8 — ISO 15765-4 CAN (11 bit ID, 250 Kbaud);
9 — ISO 15765-4 CAN (29 bit ID, 250 Kbaud);
AT SP Ah [Set Protocol h with Auto]

Команда устанавливает по умолчанию протокол h, если подключение по протоколу h не удалось, тогда адаптер начинает автоматический подбор протокола.

Исходя из описанных выше команд, формируем инициализационную строку.

initializeCommands
= Arrays.asList(«ATZ», «ATL0», «ATE1», «ATH1», «ATAT1», «ATSTFF», «ATDP», «ATSP0»);

Желательно давать возможность пользователю сменять инициализационные команды, потому как для того чтобы подобрать «ключ» к некоторым авто необходимо выбрать более подходящие настройки адаптера. В нашем же случае используются настройки, которые походят для большинства стандартных протоколов.

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

Соответственно если пользователь знает какой у его авто протокол, то используя возможность смены протокола подключения он может поменять 0 на номер его протокола.

Считывание диагностических данных

Для считывания диагностических данных используются специальные команды PID’s.
PID (Parameter id’s — Бортовые диагностические идентификаторы параметров) – коды, которые используются для запроса показателей определенных датчиков автомобиля.

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

Также есть возможность получать текущие данные от автомобиля при этом команда получения данных от авто будет иметь вначале 01, указывая на то что мы хотим получить real data. Если же мы хотим получить сохраненные данные автомобиля, то вначале команды необходимо указать 02. Например, команда для получения текущей скорости автомобиля – 010D, а для получения сохраненной скорости – 020D.

Если внимательно посмотреть на то количество команд, которое предоставляется открытыми ресурсами, то можно как раз и заметить ту проблему, о которой я писал в самом начале, а именно проблема скорости ответа адаптера. Так как отправка и получение команд идет последовательно, то для того чтобы получить показания датчика на текущий момент времени необходимо дождаться ответа на все предыдущие команды. Соответственно если запрашивать на получение все команды, то большая вероятность того что обновление реальных данных будет происходить очень медленно. Но и эту проблему можно решить, если воспользоваться командами, которые отобразят только те команды, что существуют в автомобиле. Например:

0100 – PIDs supported [01 — 20]
0120 – PIDs supported [21 — 40]
0140 – PIDs supported [41 — 60]
0160 – PIDs supported [61 — 80]
0180 – PIDs supported [81 – A0]
01A0 – PIDs supported [A1 — C0]

Я продемонстрирую как определить какие датчики присутствуют в автомобиле при помощи одного из пидов. Например:

0100 \\ запрос
BB1E3211 \\ ответ от авто

Переводим ответ от автомобиля в двоичную систему счисления

Используя следующую табличку можем определить какие пиды поддерживаются нашим автомобилем, начиная от 01 до 20:

Исходя из получившихся данных можем определить, что наш автомобиль поддерживает следующие пиды:

01, 03, 04, 05, 07, 08, 0C, 0D, 0E, 0F, 13, 14, 17, 1C, 20

Теперь вместо отправки всех 32 команд и ожидания ответа на них, несмотря на то, что некоторые могут отсутствовать, мы будем использовать всего 15 команд. Но и это не предел так называемой оптимизации. Для того чтобы данные обновлялись еще быстрее советую запрашивать только данные о тех датчиках, которые отображаются на экране. Хотя это ограничивает некоторый функционал приложения. Например, запись истории.

Считывание и расшифровка ошибок автомобиля

Ошибки автомобиля тоже могут быть различными и для них тоже существуют отдельные команды. Например:

03 – Для отображения сохраненных кодов ошибок
0A – Для отображения постоянных кодов ошибок.

Так как и с остальными командами ошибки автомобиля приходят в закодированном виде, соответственно, как и в остальных командах их нужно раскодировать чтоб получить необходимую информацию. Приведу пример работы декодирования ошибки. Код:

private final static char[] dtcLetters = <'P', 'C', 'B', 'U'>;
private final static char[] hexArray = «0123456789ABCDEF».toCharArray();

private void performCalculations(String fault) <
final String result = fault;
String workingData = «»;
int startIndex = 0;
troubleCodesArray.clear();

try <
if (result.contains(«43»)) <
workingData = result.replaceAll(«^43|[\r\n]43|[\r\n]», «»);
> else if (result.contains(«47»)) <
workingData = result.replaceAll(«^47|[\r\n]47|[\r\n]», «»);
>
for(int begin=startIndex; begin > 6);
int ch2 = ((b1 & 0x30) >> 4);
dtc += dtcLetters[ch1];
dtc += hexArray[ch2];
dtc += workingData.substring(begin + 1, begin + 4);

if (dtc.equals(«P0000»)) <
continue;
>
troubleCodesArray.add(dtc);
>
> catch (Exception e) <
Log.e(TAG, «Error: » + e.getMessage());
>
>

А теперь пояснение.

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

3, 4, 5 символы формируются по этой таблице:

Исходя из этого можем попробовать разобрать следующий ответ 0001000000111110

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *