CAN (I can't)

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Ответить
Artem.spb

Activity Автор
professor
professor
Сообщения: 3394
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

CAN (I can't)

Сообщение Artem.spb »

Есть у кого-нибудь опыт работы с CAN в режиме Frame in stream? Ну или подобное.
У меня пока только небольшой опыт single point, но по-моему он тут не подходит. Нужно "общаться" с Gustav Klein DC Power Source I-TS 3870 и отправлять разные пакеты, а не всё разом.
Читать я научился (но пока идёт только сигнал "я живой"), а вот писать или запрашивать что-то другое не получается. Возможно, проблема чисто в адресации. Через single point получается получать больше, чем сигнал от watchdog-а.
Есть идеи/подсказки?
01.png
Аватара пользователя
Din
beginner
beginner
Сообщения: 19
Зарегистрирован: 13 мар 2019, 14:37
Версия LabVIEW: 2017
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 1 раз

Re: CAN (I can't)

Сообщение Din »

1. Важно знать, у того, кого вы запрашивайте, PDO или SDO?
2. Раз Вам приходить только heartbeat, то на шине ничего нет больше. Очевидно, чтобы получить данные, надо их сначала запросить (SDO).
3. Через сдвиговый регистр их можете не кидать, NI XNET в этом плане гибкий, его не надо ни открывать, ни закрывать, ни протаскивать через сдвиговые регистры.
4. Уберите константу мемори, от нее ни тепло, ни холодно не будет.
5. Бод можете задать также только у одного (frame in), на разных все равно работать не будут.
Я подозреваю, что у вас SDO. В SDO данные придут только по запросу. Формат фрейма на запрос чтения такой: 40h индекс (2 байта) подиндекс (1 байт) остальное нули. Ну и соответственно надо знать NODE ID вашего устройства.

Вы работайте через USB-CAN?
Artem.spb

Activity Автор
professor
professor
Сообщения: 3394
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: CAN (I can't)

Сообщение Artem.spb »

Din писал(а): 09 мар 2021, 11:45 1. Важно знать, у того, кого вы запрашивайте, PDO или SDO?
2. Раз Вам приходить только heartbeat, то на шине ничего нет больше. Очевидно, чтобы получить данные, надо их сначала запросить (SDO).
Видимо, да.
3. Через сдвиговый регистр их можете не кидать, NI XNET в этом плане гибкий, его не надо ни открывать, ни закрывать, ни протаскивать через сдвиговые регистры.
Это дело привычки и хорошего тона. Ладно закрытие, а как с ним можно работать не открыв?
5. Бод можете задать также только у одного (frame in), на разных все равно работать не будут.
Вот тут у меня тоже большой вопрос. Эту ноду я перетащил из примера, а сам такого свойства найти не могу, есть только baudRate64, но он ругается на неверное значение.
Формат фрейма на запрос чтения такой: 40h индекс (2 байта) подиндекс (1 байт) остальное нули.
Это всё пихать в identifier?
Ну и соответственно надо знать NODE ID вашего устройства.
а это где живёт?
Вы работайте через USB-CAN?
USB-8502
Аватара пользователя
Din
beginner
beginner
Сообщения: 19
Зарегистрирован: 13 мар 2019, 14:37
Версия LabVIEW: 2017
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 1 раз

Re: CAN (I can't)

Сообщение Din »

1. Раз у вас родной 8502), то первый ваш путь проверки, живой ли клиент - Макс - Девайс и Интерфейсес - Bus Monitor. Сначала запустите прослушку, он высветит все, что есть на шине в данный момент. Потом попробуйте трансмит.
2. "Вот тут у меня тоже большой вопрос. Эту ноду я перетащил из примера, а сам такого свойства найти не могу, есть только baudRate64, но он ругается на неверное значение." - Interfaces - 64bitBaudRate.
3. "Это всё пихать в identifier?"
- Это payload
4. "а это где живёт?"
- Это должно быть в даташите на прибор. Если протокол SDO, то ID формируется так NODE ID + 600h - запрос, NODE ID + 580h - ответ.
Пример. У вашей периферии NODE ID = 1 и в протоколе на него написано, что допустим, данные о температуре занимают 4 байта и их индекс. подиндекс равен 1.0. Значит Вам надо в кластере на запись в ID прописать 601h, в payload 40 1 0 0 0 0 0 0.
1.png
Аватара пользователя
Din
beginner
beginner
Сообщения: 19
Зарегистрирован: 13 мар 2019, 14:37
Версия LabVIEW: 2017
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 1 раз

Re: CAN (I can't)

Сообщение Din »

На вход надо подавать Боды, кстати, а не килободы. Поэтому и ругается, скорей всего.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3394
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: CAN (I can't)

Сообщение Artem.spb »

Din писал(а): 09 мар 2021, 15:14 На вход надо подавать Боды, кстати, а не килободы. Поэтому и ругается, скорей всего.
ругалось, потому что я сначала пытался читать для проверки, а только потом задавал.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3394
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: CAN (I can't)

Сообщение Artem.spb »

Всё забываю/лень/нет времени написать.
В общем проблема была не в протоколе, а в подключении не на тот порт.
Этот агрегат не имеет "адреса", и всякие смещения ID не нужны.
А дальше всё просто - XNET в этом плане отлично справляется.
Ответить

Вернуться в «Коммуникация с приборами»