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

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

06.09.2017, 17:13. Показов 38025. Ответов 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
2 / 2 / 0
Регистрация: 06.03.2017
Сообщений: 50
12.09.2019, 19:18
Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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.Add(sconf);
            sconf.Parameter = ConfigParameter.DATA_RATE; sconf.Value = 0;
            sconfl.Add(sconf);
            //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;
        }
не проверял, а так попробовать
0
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 18
12.09.2019, 19:34
Цитата Сообщение от serand Посмотреть сообщение
sconfl.Add(sconf);
Ругается. Нет в SConfigList такого метода - Add

Добавлено через 2 минуты
Я делал с List<>.Маршалинг на List не разрешает. Говорит, что только ссылка на структуру должна быть

Добавлено через 1 минуту
Тема жива, УРРАААА!!!
0
2 / 2 / 0
Регистрация: 06.03.2017
Сообщений: 50
12.09.2019, 20:29
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SConfig config = new SConfig();
            config.Parameter = ConfigParameter.LOOPBACK;
            config.Value = 0;
            SConfigList list1 = new SConfigList();
           
            List<SConfig> list = new List<SConfig>();
            list.Add(config);
            IntPtr input1 = Marshal.AllocHGlobal(list.Count * 8 + 8);
            list1.ListPtr = input1;
            list1.Count = list.Count;
           
            Marshal.StructureToPtr(list1, input1, false);
           
            var ret = (J2534Err)m_j2534Interface.PassThruIoctl(m_channelId, (int)Ioctl.GET_CONFIG, input1, IntPtr.Zero);

Попробуй вот так, только дальше продолжи.Надо отъехать
0
5 / 5 / 0
Регистрация: 01.02.2019
Сообщений: 22
12.09.2019, 22:37
Я прям буксанул реально )))) Сорри, обертка реально пустая, эт я тупанул )))
Тут нужно интерфейс IJ2534Extended: переписывать реально - а то костыли какие то кругом ....

но если хотите вот вам мой вариант для существующего интерфейса
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public J2534Err GetConfig(int channelId, ref List<SConfig> config)
        {
            SConfigList sconfl = new SConfigList() {
                ListPtr = Marshal.UnsafeAddrOfPinnedArrayElement(config.ToArray(), 0),
                Count = config.Count
            };
            IntPtr input = Marshal.AllocHGlobal(Marshal.SizeOf(sconfl));
            Marshal.StructureToPtr(sconfl, input, false);
            var ret = (J2534Err)m_wrapper.Ioctl(channelId, (int)Ioctl.GET_CONFIG, input, IntPtr.Zero);
            config = ((SConfigList)Marshal.PtrToStructure(input, typeof(SConfigList))).GetList();
            Marshal.FreeHGlobal(input);
            return ret;
        }
Добавлено через 5 минут
Цитата Сообщение от kirson Посмотреть сообщение
Говорит, что только ссылка на структуру должна быть
Он говорит что базовые структуры нельзя. Но можно всегда сделать обертку для базовой структуры...

Добавлено через 6 минут
Цитата Сообщение от serand Посмотреть сообщение
Попробуй вот так, только дальше продолжи.Надо отъехать
Ну так как бы
C#
1
list1.ListPtr = input1;
выстрел в пустоту, по указателю данных то нет, только память выделена, да еще забитая гвоздями.... интересно, кстати, почему ?
C#
1
list.Count * 8 + 8
А если машина х86?

Добавлено через 5 минут
есть же
C#
1
sizeof( typeof() )
ну и помножить на Count..
1
2 / 2 / 0
Регистрация: 06.03.2017
Сообщений: 50
13.09.2019, 00:56
Цитата Сообщение от _ladan_ Посмотреть сообщение
интересно, кстати, почему ?
XM.....
0
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 18
13.09.2019, 08:09
Цитата Сообщение от _ladan_ Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public J2534Err GetConfig(int channelId, ref List<SConfig> config)
        {
            SConfigList sconfl = new SConfigList() {
                ListPtr = Marshal.UnsafeAddrOfPinnedArrayElement(config.ToArray(), 0),
                Count = config.Count
            };
            IntPtr input = Marshal.AllocHGlobal(Marshal.SizeOf(sconfl));
            Marshal.StructureToPtr(sconfl, input, false);
            var ret = (J2534Err)m_wrapper.Ioctl(channelId, (int)Ioctl.GET_CONFIG, input, IntPtr.Zero);
            config = ((SConfigList)Marshal.PtrToStructure(input, typeof(SConfigList))).GetList();
            Marshal.FreeHGlobal(input);
            return ret;
        }
Чуток добавил проверок

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
SConfigList sconfl = new SConfigList()
            {
                ListPtr = Marshal.UnsafeAddrOfPinnedArrayElement(config.ToArray(), 0),
                Count = config.Count
            };
            var list = sconfl.GetList();  //тут
            IntPtr input = Marshal.AllocHGlobal(Marshal.SizeOf(sconfl));
            Marshal.StructureToPtr(sconfl, input, true);
            list = ((SConfigList)Marshal.PtrToStructure(input, typeof(SConfigList))).GetList();//  и тут
            var ret = (J2534Err)m_wrapper.Ioctl(channelId, (int)Ioctl.GET_CONFIG, input, IntPtr.Zero);
            config = ((SConfigList)Marshal.PtrToStructure(input, typeof(SConfigList))).GetList();
            Marshal.FreeHGlobal(input);
            return ret;
Вот так перед заходом

C#
1
2
3
4
5
6
7
8
SConfig config = new SConfig();
            //config.Parameter = ConfigParameter.LOOPBACK;
            //config.Value = 0;
            //conf.Add(config);
            config.Parameter = ConfigParameter.DATA_RATE;
            config.Value = 0;
            conf.Add(config);
            passThru.GetConfig(channelId,ref conf);
Добавлено через 11 минут
_ladan_, В обоих случаях, с двумя и одним параметрами проверки показывают "красоту" перед заходом в GetConfig, т. е. два параметра и два значения и соответственно один параметр и значение.Чего у меня раньше не получалось. Но с двумя параметрами ret возвращает ERR_NULL_PARAMETER и соответственно результат нулевой, а вот когда один параметр, тогда всё хорошо!!!!

Добавлено через 15 минут
Сделал три входных параметра - ERR_NULL_PARAMETER.
0
5 / 5 / 0
Регистрация: 01.02.2019
Сообщений: 22
13.09.2019, 10:23
В моем случае, а я вчера тоже проверял,
C#
1
2
3
4
5
6
7
8
9
10
            conf.Parameter = ConfigParameter.DATA_RATE; conf.Value = 1; //  специально 1 что б видно было изменения, для теста
             confl.Add(conf);
            conf.Parameter = ConfigParameter.ISO15765_BS; conf.Value = 1;
            confl.Add(conf);
            conf.Parameter = ConfigParameter.ISO15765_STMIN; conf.Value = 1;
            confl.Add(conf);
            conf.Parameter = ConfigParameter.ISO15765_WFT_MAX; conf.Value = 1;
            confl.Add(conf);
            
            passThru.GetConfig(ChannelID, ref confl);
при
C#
1
      passThru.PassThruConnect(DeviceID, ProtocolID.ISO15765, ConnectFlag.CAN_ID_BOTH, BaudRate.ISO15765, Channel_ptr);
все работает корректно, возможно есть особенности конкретной библиотеки/адаптера. Я вот например при некоторых "случайных" настройках получал "NOT_SUPPORTED", и при этом вся структура пустая, т.е. если один параметр не поддерживаемый то будет совсем пусто.
1
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 18
13.09.2019, 11:45
Ха!! При
C#
1
passThru.PassThruConnect(deviceId, ProtocolID.CAN, ConnectFlag.NONE, BaudRate.ISO14230,ref channelId);
C#
1
passThru.PassThruConnect(deviceId, ProtocolID.ISO15765, ConnectFlag.NONE, BaudRate.ISO14230,ref channelId);
Всё работает!! Только вот только ConfigParameter.DATA_RATE информативен, показывает скорость. Другие - все по нулям

А вот при
C#
1
passThru.PassThruConnect(deviceId, ProtocolID.ISO14230, ConnectFlag.NONE, BaudRate.ISO14230,ref channelId);
ERR_NULL_PARAMETER

Добавлено через 1 минуту
и что это за параметры, собственно?

LOOPBACK = 0x03,
NODE_ADDRESS = 0x04,
NETWORK_LINE = 0x05,
P1_MIN = 0x06,
P1_MAX = 0x07,
P2_MIN = 0x08,
P2_MAX = 0x09,
P3_MIN = 0x0A,
P3_MAX = 0x0B,
P4_MIN = 0x0C,
P4_MAX = 0x0D,
// See W0 = =0x19,
W1 = 0x0E,
W2 = 0x0F,
W3 = 0x10,
W4 = 0x11,
W5 = 0x12,
TIDLE = 0x13,
TINIL = 0x14,
TWUP = 0x15,
PARITY = 0x16,
BIT_SAMPLE_POINT = 0x17,
SYNC_JUMP_WIDTH = 0x18,
W0 = 0x19,
T1_MAX = 0x1A,
T2_MAX = 0x1B,
T4_MAX = 0x1C,
T5_MAX = 0x1D,
ISO15765_BS = 0x1E,
ISO15765_STMIN = 0x1F,
DATA_BITS = 0x20,
FIVE_BAUD_MOD = 0x21,
BS_TX = 0x22,
STMIN_TX = 0x23,
T3_MAX = 0x24,
ISO15765_WFT_MAX = 0x25,

Добавлено через 21 минуту
Ещё информативными оказались
ConfigParameter.TINIL
ConfigParameter.TIDLE
Все остальные не возвращаются

Добавлено через 12 минут
Вообщем не работает только при ProtocolID.ISO14230, а я с него как раз и начал
При ProtocolID.ISO9141 тоже работает!!
0
5 / 5 / 0
Регистрация: 01.02.2019
Сообщений: 22
13.09.2019, 11:57
Давайте зайдем с другой стороны, а вам что нужно то?
вполне логично, что настройки для 15765 не поддерживаются (не известны) для открытого канала 14230.
У здесь присутствующих, как я понимаю свои проекты успешно работающие с J2534 девайсами на этой библиотеке, при том что никто до вас вообще с Get_Gonfig не заморачивался....
Я так понял что вам пины для J1962 нужно переназначить, ну так это и делайте, зачем себе голову забивать? мой целевой адаптер J1962 вообще не поддерживает, так что сорри.

Добавлено через 7 минут
Цитата Сообщение от kirson Посмотреть сообщение
Все остальные не возвращаются
"0" это не значит что не возвращаются, это значит что настройка содержит "0".
для 15765 указанные мной в примере настройки работают когда идет коммуникация и имеют отношение к контролю "потока"данных при передаче (Flow Control) который задается блоком управления при выполнении конкретного запроса.
В данном конкретном случае "0" - это "без ограничений"
0
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 18
13.09.2019, 12:03
Цитата Сообщение от _ladan_ Посмотреть сообщение
Я так понял что вам пины для J1962 нужно переназначить
Так точно, просто у меня под рукой тойотовский 14230 и я хотел его послушать, но что-то не получалось. Вот и решил проверить перемычки. Проверил....тоже не поддерживается
Главное, знаю, как читать конфигурацию.
Вам, огромное спасибо!!!!!!

Добавлено через 3 минуты
"0" это не значит что не возвращаются, это значит что настройка содержит "0".
Нет,не "0" Я что поставлю в value, то и остается, не перезаписывается.
0
5 / 5 / 0
Регистрация: 01.02.2019
Сообщений: 22
13.09.2019, 12:15
кстати, наверное,
C#
1
Marshal.StructureToPtr(sconfl, input, true);
так будет логичнее.

Добавлено через 1 минуту
Цитата Сообщение от kirson Посмотреть сообщение
Нет,не "0" Я что поставлю в value, то и остается, не перезаписывается.
А у меня в моем примере "1" перезатирается на "0"

Добавлено через 3 минуты
А вы где проверяли то? в вашем List-е? или на выходе из процедуры в массиве (значения то сохраняются в исходный список по ссылке)
C#
1
config = ((SConfigList)Marshal.PtrToStructure(input, typeof(SConfigList))).GetList();
0
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 18
13.09.2019, 12:26
Цитата Сообщение от _ladan_ Посмотреть сообщение
А вы где проверяли то? в вашем List-е? или на выходе из процедуры в массиве (значения то сохраняются в исходный список по ссылке)
При 14230 и больше, чем одном параметре, и в List-е и на выходе - ничего(абстрактные параметры)и в ret = ERR_NULL_PARAMETER
0
5 / 5 / 0
Регистрация: 01.02.2019
Сообщений: 22
13.09.2019, 12:59
Я конкретно про свой пример )))
14230 я как то вообще не юзал, у меня для него через RAW CAN сделано, ибо для других адаптеров уже было написано (тупо лень было, а скорости там все равно никакие)

Короч, флудим уже. Там на гитхабе, кстати, куча форков.... возможно многое уже исправлено, надо бы проинспектировать))
0
2 / 2 / 1
Регистрация: 09.01.2015
Сообщений: 383
14.09.2019, 00:55  [ТС]
mini VCI урезан до не болуйся .на нем нельзя перенастроить пины . Хотя кто производитель .
1
2 / 2 / 0
Регистрация: 06.03.2017
Сообщений: 50
14.09.2019, 23:06
Ну с этим ,спасибо _ladan_разобрались. Ту мой ум подкинул одну задачку. Вообще для контрольного инструмента лучше использовать "правильный " CanHacker., но мысль все таки возникла .Использовать J2534 как канхакер. В принципе все это можно реализовать. То есть приемку сообщений без фильтрации или с фильтрацией. Отсылку одиночных сообщений, вроде бы как тоже.А вот периодически группу сообщений по заданному времени.Тут у меня что то совсем с пониманием как то не очень.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//flagEnd нужна для остановки чтения(механизм не показан для упрощения кода)
            bool flagEnd = false;
            do
            {
                var msgT = IJ2534.GetMessages(1, 100);
                if (msgT.Messages.Count > 0)
                {
                    for (int i = 0; i < msgT.Messages.Count; i++)
                    {
                        var response = msgT.Messages[i].Data.ToArray();
                        string str = BitConverter.ToString(response).Replace("-", string.Empty);
                    }
                }
 
 
                /* режимы по отправке сообщений
                 * в этом месте по событиям  пользовательским кнопкам(одиночное или периодическое сообщение)
                 * отправлять одиночные сообщения(чтоб получить на них ответ), не зависимо то событий-одиночное или периодическое
                 */
 
            }
            while (!flagEnd);
Пока ничего лучше придумать не смог.Костыли прилипил, но не нравиться .Да и проблема в том что при получении Flow нужно отдать 3000, и время в зависимости от блока очень маленькое,желательно не дальше 20 мс. Протокол CAN. Может быть есть какие еще идеи?

Добавлено через 9 минут
Применял MVVM,придется отказаться в данном варианте.Траблы с timer получаем. Думаю только события для сообщений. Пока не проверял как будет быстродействие.Только как их здесь перехватывать?У меня
0
5 / 5 / 0
Регистрация: 01.02.2019
Сообщений: 22
10.12.2019, 16:15
Цитата Сообщение от serand Посмотреть сообщение
Пока ничего лучше придумать не смог.Костыли прилипил, но не нравиться .Да и проблема в том что при получении Flow нужно отдать 3000, и время в зависимости от блока очень маленькое,желательно не дальше 20 мс. Протокол CAN. Может быть есть какие еще идеи?
Кажется, я повторяюсь, а штатный механизм религия не позволяет использовать?
для отправки по времени есть:
C#
1
passThru.PassThruStartPeriodicMsg
А для контроля потока ( Flow Control) в 15765 как бы фильтрами задается.

Добавлено через 2 минуты
Ну и как бы совсем не понимаю зачем для отправки останавливать чтение?
0
5 / 5 / 0
Регистрация: 01.02.2019
Сообщений: 22
18.12.2019, 20:01
Цитата Сообщение от serand Посмотреть сообщение
Использовать J2534 как канхакер. В принципе все это можно реализовать
кстати, может не нужно изобретать велосипед - есть готовое:
http://www.drewtech.com/downloads/
0
2 / 2 / 0
Регистрация: 06.03.2017
Сообщений: 50
18.12.2019, 23:16
Добрый день! Спасибо за ссылку,а что там именно готовое есть, и именно как канхакер на J2534?
0
5 / 5 / 0
Регистрация: 01.02.2019
Сообщений: 22
19.12.2019, 11:22
читалка кан шины для j2534. Причем с исходником на С#. Библиотека, кстати, нормальная.... я даж расстроился, что взял не эту.... буду видимо переделывать, если время будет.
Или вы хотели сразу интерфейс со всеми плюшками? )))
1
2 / 2 / 0
Регистрация: 06.03.2017
Сообщений: 50
20.12.2019, 02:35
Добрый день! Я просто наверное в свое время когда знакомился с работой устройства J2534 не увидел исходники на с#.Или возможно они добавили .Спасибо за ссылку.

Добавлено через 1 час 54 минуты
Спасибо ,собрал я исходник.Буду разбираться.

Добавлено через 1 минуту
Цитата Сообщение от _ladan_ Посмотреть сообщение
буду видимо переделывать
Согласен, все таки у них в этом большой опыт

Добавлено через 1 час 18 минут
Цитата Сообщение от _ladan_ Посмотреть сообщение
Или вы хотели сразу интерфейс со всеми плюшками?
это вы правы,не знаю,не знаю.Попробовал,что там с чтением у них.Надо по разбираться

Добавлено через 1 час 26 минут
Цитата Сообщение от serand Посмотреть сообщение
это вы правы,не знаю,не знаю.Попробовал,что там с чтением у них.Надо по разбираться
не ,не с чтением.Они проверяют свою библиотеку,но так как у нас нет их оборудования и соответственно процесс блокируется и чтение не работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.12.2019, 02:35

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru