Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/159: Рейтинг темы: голосов - 159, средняя оценка - 4.52
2 / 2 / 1
Регистрация: 09.01.2015
Сообщений: 383

Управление J2534 устройствами

06.09.2017, 17:13. Показов 37345. Ответов 83
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день ! Очень хочу разобраться с управление так называемых J2534 устройств .
Как я понимаю что информация о всех установленных устройствах хранится в реестре .
Но не нашел параметров ( Com port , baudrate).
У меня есть один из шнурков Mini Vci . С ним идет dll. Если кто обладает информацией - поделитесь )))
Миниатюры
Управление J2534 устройствами   Управление J2534 устройствами  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.09.2017, 17:13
Ответы с готовыми решениями:

Управление HID устройствами и com в одном проекте
Добрый день Уважаемые форумчане. Имеется 4 прибора: Считыватель RFID карт (прикручено, подключено, данные вижу) Алкотестер Динго...

Работа с Usb устройствами
Подскажите пожалуйста пакет для работы с Usb устройствами. Или подскажите как вообще правильно с ними работать в шарпе. Планируется...

Работа с устройствами MTP
Доброго времени суток! Стоит задача, переместить с Android устройства файл в память компьютера (в будущем еще и на устройство с...

83
5 / 5 / 0
Регистрация: 01.02.2019
Сообщений: 22
05.02.2019, 23:14
Студворк — интернет-сервис помощи студентам
Это как раз пример виноват. там 2 строчки кода. протокол 2534 как раз подразумевает получение ЗАДАННОГО числа сообщений по принципу FIFO.
А автор этого г**но примера таким вот ..... даже слово то приличное не могу подобрать ... образом ....отрезал отчет о доставке / успешной передаче. Несмотря на присутствие в стандарте специального для этого флага.

Еще раз - библиотека это всего лишь обертка dll, за ссыль на обертку от Дрю - сенкс, погляжу.

Я никаких исходников не давал )))

Да у меня тоже уже работает. и оборудование у меня хорошее ))) Я ж четко причину показал. )
0
2 / 2 / 0
Регистрация: 06.03.2017
Сообщений: 50
05.02.2019, 23:22
А вот не думали время выставить больше, может быть просто не принимаете потому что принимать нечего.

Добавлено через 2 минуты
Цитата Сообщение от _ladan_ Посмотреть сообщение
А автор этого г**
Я б не стал так категорично ибо автор был первый который привел исходники для работы j2534 на платформе Net
0
5 / 5 / 0
Регистрация: 01.02.2019
Сообщений: 22
05.02.2019, 23:32
Ну вы код то видели? о чем мы с вами спорим?

Если по вашему логика

"Получать N сообщений перезатирая буфер пока статус устройства ОК"
с учетом того что последнее по любому не ОК, а все сообщения полученные до того благополучно "пох**ны" является нормальной то как бы ой....

Я ж не ругаю саму библиотеку, я ругаю вполне конкретные примеры ее использования к ней приложенные. Сам класс не считая костыля на PASS/BLOCK фильтр написан вполне прилично, и его явно переписывал на указатели не тот же человек который его сочинял )))

Я ж написал - я шину всю вижу причем с таймингом, я точно знаю что когда и как пришло.
0
2 / 2 / 0
Регистрация: 06.03.2017
Сообщений: 50
05.02.2019, 23:53
Цитата Сообщение от _ladan_ Посмотреть сообщение
Ну вы код то видели? о чем мы с вами спорим?
код я видел и более того учился понимать этот протокол через этот код. Я писал что там много не доделано, а кто сказал что вам будут давать готовый продукт.По этому коду и утечка памяти наблюдается. За основу его брать можно ,ну и дорабатывать ни кто не мешает.
0
5 / 5 / 0
Регистрация: 01.02.2019
Сообщений: 22
06.02.2019, 00:44
Да не нужно мне ничего, враппер есть, дефайны есть, типы данных есть - и слава богу руками писать не нужно. я для тех кто будет потом в этом разбираться написал где они споткнутся, что б они не тратили так же как я свое время на разбор, а сразу пошли дальше.

Вы вот стандартиком 2534 лучше поделитесь, если есть, а то стандарт через код осваивать дело сомнительное. Лучше уж юзать описание от производителей девайсов.
Если кому пригодится:
https://beta.quantexlab.com/de/develop/j2534.html
http://www.drewtech.com/support/passthru.html

Сам стандарт я только 2002 год нарыл.... а последняя редакция 2015.

Ну и сам стандарт, если вас не душит жаба (как меня)
https://www.sae.org/standards/... /1_201510/
1
2 / 2 / 0
Регистрация: 06.03.2017
Сообщений: 50
06.02.2019, 03:58
максимум что у меня есть
Вложения
Тип файла: pdf iso_15765-4.pdf (1,003.8 Кб, 103 просмотров)
0
5 / 5 / 0
Регистрация: 01.02.2019
Сообщений: 22
06.02.2019, 11:32
Ну это 15765, про него я и так все знаю ))) Мне именно по 2534 нужно, вы ж твердите по соответствие стандарту, значит с чем то сравнивали )))
0
0 / 0 / 0
Регистрация: 11.05.2019
Сообщений: 1
11.05.2019, 07:19
Возможно это пригодится
Вложения
Тип файла: pdf iso 22900-1-2008.pdf (770.6 Кб, 59 просмотров)
Тип файла: pdf ISO 22900-2-2009.pdf (3.77 Мб, 67 просмотров)
Тип файла: pdf ISO 22900-3.pdf (3.81 Мб, 65 просмотров)
0
5 / 5 / 0
Регистрация: 01.02.2019
Сообщений: 22
12.05.2019, 11:41
Это стандарт MCD сервера... спасибо, в коллекцию точно пригодится ))) Это следующая ступень после 2534 ))
0
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 18
11.09.2019, 17:27
Тема ещё актуальна?
0
2 / 2 / 1
Регистрация: 09.01.2015
Сообщений: 383
11.09.2019, 17:48  [ТС]
Эта тема всегда актуальна ))
1
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 18
11.09.2019, 18:08
Изучаю код по ранней ссылки из этой темы. Пытаюсь выполнить команду IOCTL Get_CONFIG, не получается. Я не понимаю, как это выполнить.Вот перепаханный мной.фрагмент кода
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public J2534Err GetConfig(int channelId, ref List<SConfig> config)
        {
            IntPtr output = Marshal.AllocHGlobal(5800);
           
            SConfig sconf = new SConfig();
            SConfigList sconfl = new SConfigList();
            sconf.Parameter = ConfigParameter.J1962_PINS;
            sconf.Value = 5;
            sconfl.Count = 1;
            var size = Marshal.SizeOf(sconfl);
            IntPtr input = Marshal.AllocHGlobal(Marshal.SizeOf(sconf));
            sconfl.ListPtr = Marshal.AllocHGlobal(Marshal.SizeOf(sconf));
           
            Marshal.StructureToPtr(sconf, input, false);
            var ret = (J2534Err)m_wrapper.Ioctl(channelId, (int)Ioctl.GET_CONFIG, input, IntPtr.Zero); Исключение . Описание снизу
            var config1 = (SConfig)Marshal.PtrToStructure(input, typeof(SConfig));
            return ret;
        }
Необработанное исключение типа "System.AccessViolationException" в J2534DotNet.dll

Дополнительные сведения: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.

Добавлено через 6 минут
Вот если комментирую строку :Marshal.StructureToPtr(sconf, input, false); то переменная ret получает значение = ERR_NULL_PARAMETER. Если не заполняю структуру sconf, то ret получает значение = 5, которого нет в перечислении J2534Err. Короче, запутался и не понимаю
0
2 / 2 / 1
Регистрация: 09.01.2015
Сообщений: 383
11.09.2019, 18:35  [ТС]
А какой адаптер ?
0
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 18
11.09.2019, 18:44
mini VCI
0
5 / 5 / 0
Регистрация: 01.02.2019
Сообщений: 22
11.09.2019, 20:08
так вы бы не писали в одну строчку, раз путаетесь ))

хотя мне кажется вы чуть раньше запутались ))

C#
1
2
SConfigList sconfl = new SConfigList();
m_wrapper.Ioctl(channelId, (int)Ioctl.GET_CONFIG, sconfl.ListPtr, IntPtr.Zero);
Собственно ПОЛУЧЕНИЕ настроек которое предполагает команда GET_CONFIG должно куда то вернуться, верно? Иначе зачем их ПОЛУЧАТЬ? В данном случае, на сколько я вижу доку - "очень логично" возвращается в SConfigList по указателю переданному как параметр "input"

Код не проверял, если что, но пару важных моментов думаю заметите, даже если я ошибся. я бы написал напрямую через PassThruIoctl (но это уже мои тараканы))) )
C#
1
J2534Extended_OBJECT.PassThruIoctl(channelId, (int)Ioctl.GET_CONFIG,sconfl.ListPtr, IntPtr.Zero);
0
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 18
11.09.2019, 20:19
Спасибо, что включаетесь в ответы!!!

Цитата Сообщение от _ladan_ Посмотреть сообщение
1
J2534Extended_OBJECT.PassThruIoctl(chann elId, (int)Ioctl.GET_CONFIG,sconfl.ListPtr, IntPtr.Zero);
Да и эту строку включал. Исключение.

Добавлено через 3 минуты
Почему, когда я включаю в структуру параметр с его значением, то исключение. А вот если я не заполняю структуру(просто по умолчанию создал и всё), то без исключения, но ret =5 . Что такое 5?

Добавлено через 2 минуты
Цитата Сообщение от _ladan_ Посмотреть сообщение
Собственно ПОЛУЧЕНИЕ настроек которое предполагает команда GET_CONFIG должно куда то вернуться, верно?
Ещё не понимаю назначение Input и Output вот здесь
C#
1
long PassThruIoctl(unsigned long ChannelID, unsigned long IoctlID, void *pInput, void *pOutput)
0
5 / 5 / 0
Регистрация: 01.02.2019
Сообщений: 22
11.09.2019, 20:54
ну, а как бы штатным методом то религия не позволяет?
C#
1
2
List<SConfig> sconfl = new List<SConfig>();
J2534Extended_OBJECT.GetConfig(ChannelID, ref sconfl);
Input / Output это условно....

Слушайте... у меня во дворе лежит 4 кирпича, а сегодня дождь, почему рядом с кирпичами всего 5 голубей?

В процедуру получения конфигурации нужно передать УКАЗАТЕЛЬ на ЛИСТ настроек, а не УКАЗАТЕЛЬ на настройку (как у вас), не говоря уже про ваши эксперименты с выделением памяти, ради указателей.

не нужен вам тут маршалинг вообще.

Добавлено через 18 минут
Цитата Сообщение от kirson Посмотреть сообщение
Ещё не понимаю назначение Input и Output вот здесь
делегат универсальный и используется для всего контроля ввода вывода, при контроле предполагается что нужно передать какие то параметры (настройки) - Это Input (ну как бы в переводе) и получить результат запроса - он сохраняется в OutPut. Почему я взял в кавычки "очень логично" потому что в моей доке результат GET_CONFIG почему то возвращается в Input (т.е. в первый указатель) хотя логика кричит о том что нужно бы соблюсти единообразие и читабельность.
Хотя не факт, что моя дока правильная, и что все интерфейсные библиотеки делают все как в доке.

Добавлено через 9 минут
Цитата Сообщение от kirson Посмотреть сообщение
Что такое 5?
http://www.drewtech.com/suppor... error.html

INVALID_IOCTL_VALUE
1
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 18
12.09.2019, 06:18
Цитата Сообщение от _ladan_ Посмотреть сообщение
J2534Extended_OBJECT.GetConfig(ChannelID , ref sconfl);
Там нет такой функции. Я так понимаю, что вы мне показываете обёртку для IOCTL. Но ведь любая обёртка будет ссылаться к нативной функции, а она изначально вот такая
C#
1
2
3
4
5
6
7
public J2534Err GetConfig(int channelId, ref List<SConfig> config)
        {
            IntPtr input = IntPtr.Zero;
            IntPtr output = IntPtr.Zero;
 
            return (J2534Err)m_wrapper.Ioctl(channelId, (int)Ioctl.GET_CONFIG, input, output);
        }
где input и output - указатели IntPtr. И как тут без маршалинга?

Добавлено через 4 минуты
Цитата Сообщение от _ladan_ Посмотреть сообщение
http://www.drewtech.com/support/passthru/possible-error.html
INVALID_IOCTL_VALUE
Спасибо! Просто в исходной структуре нет
C#
1
INVALID_IOCTL_VALUE = 0x05
.
Добавлю!!!

Добавлено через 4 минуты
Цитата Сообщение от _ladan_ Посмотреть сообщение
Почему я взял в кавычки "очень логично" потому что в моей доке результат GET_CONFIG почему то возвращается в Input (т.е. в первый указатель) хотя логика кричит о том что нужно бы соблюсти единообразие и читабельность.
Во во, не понятно, почему и запрос , того, чего желаем получить передается в Input и ответ тоже в Input???. Он там перезаписывается что-ли или добавляется?

Добавлено через 4 минуты
Цитата Сообщение от _ladan_ Посмотреть сообщение
В процедуру получения конфигурации нужно передать УКАЗАТЕЛЬ на ЛИСТ настроек, а не УКАЗАТЕЛЬ на настройку (как у вас),
Не у меня, а и в описании
pInput - Pointer to input structure. Must be NULL if parameter is unused.

pOutput - Pointer to output structure. Must be NULL if parameter is unused.
Добавлено через 4 минуты
Хотя там же этот указатель ссылается на список

GET_CONFIG
Reports various CarDAQ configuration parameters. The values of multiple parameters may be obtained with a single function call, by initializing an array of SCONFIG items.

C#
1
2
3
4
5
6
7
8
9
10
unsigned long status;
SCONFIG CfgItem;
SCONFIG_LIST Input;
 
CfgItem.Parameter = DATA_RATE;
CfgItem.Value = 0;
Input.NumOfParams = 1;
Input.ConfigPtr = &CfgItem;
 
status = PassThruIoctl(ChannelID, GET_CONFIG, &Input, NULL);
0
5 / 5 / 0
Регистрация: 01.02.2019
Сообщений: 22
12.09.2019, 11:18
Цитата Сообщение от kirson Посмотреть сообщение
нативной функции, а она изначально вот такая
Ну так что мешает ей воспользоваться? я именно ее и имел ввиду постом выше.

Добавлено через 4 минуты
Цитата Сообщение от kirson Посмотреть сообщение
И как тут без маршалинга?
есть же свойство
C#
1
.ListPtr
я вам в коде написал.понятно что перевод в неуправляемую зону там все равно присутствует, но зачем по 10 раз то?
0
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 18
12.09.2019, 16:56
Цитата Сообщение от _ladan_ Посмотреть сообщение
Ну так что мешает ей воспользоваться? я именно ее и имел ввиду постом выше.
И как ей воспользоваться, она же пустая. Там с нулевыми указателями ничего не работает. Их надо инициализировать

Добавлено через 4 часа 37 минут
Сделал, но пока только для одного параметра

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public J2534Err GetConfig(int channelId, ref List<SConfig> config)
        {
            SConfig sconf = new SConfig();
            SConfigList sconfl = new SConfigList();
            sconf.Parameter = ConfigParameter.DATA_RATE; sconf.Value = 0;
            sconfl.Count = 1;
            IntPtr input = Marshal.AllocHGlobal(Marshal.SizeOf(sconf));
            IntPtr input1 = Marshal.AllocHGlobal(Marshal.SizeOf(sconfl));
            Marshal.StructureToPtr(sconf, input, false);
            sconfl.ListPtr = input;
            Marshal.StructureToPtr(sconfl, input1, false);
            var ret = (J2534Err)m_wrapper.Ioctl(channelId, (int)Ioctl.GET_CONFIG, input1, IntPtr.Zero);
            var config1 = (SConfigList)Marshal.PtrToStructure(input1, typeof(SConfigList));
            var list = config1.GetList();
            return ret;
        }
Добавлено через 1 минуту
в переменной list - полученный ответ

Добавлено через 1 минуту
Вот такая была...
C#
1
2
3
4
5
6
7
public J2534Err GetConfig(int channelId, ref List<SConfig> config)
        {
            IntPtr input = IntPtr.Zero;
            IntPtr output = IntPtr.Zero;
 
            return (J2534Err)m_wrapper.Ioctl(channelId, (int)Ioctl.GET_CONFIG, input, output);
        }
Добавлено через 3 минуты
Буду думать, как одной командой получить несколько параметров
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.09.2019, 16:56
Помогаю со студенческими работами здесь

Эмулирование работы с устройствами ввода
Есть ли возможность посредством C# заставить компьютер думать, что мы нажали на клавиатуре определённую клавишу или передвинули мышь? Мне...

Как работать с USB устройствами
Всем Добрый день!!! Скажите пожалуйста как средствами C# работать с Usb устройствами?

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

Взаимодействие с принтерами и др. внешними устройствами
Кто подскажет, как работать с принтерами, сканерами и т.д. в C#? Может, есть какая-то библиотека для этого?

Какие библиотеки использовать для работы с Wi-Fi устройствами
Доброго времени суток.Такой вопрос,какие dll библиотеки,функции и т.д. использовать для работы с вай фай устройствами?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru