1

Тема: 7.2 duo. Передача, прием данных VCP CAN

Добрый день! Провожу изучение работа в связке uart vcp - can. Помогите разобраться как правильно нужно подготовить в диаграмме конвертацию символов переданных через uart  с ПК на скажем регистр сообщения передачи Can IDL?

Вложений в сообщении

Иконка вложения USB-CAN.cfd 3.19 кб, скачивался 10 раз, последний раз 2025-02-08 

2

Re: 7.2 duo. Передача, прием данных VCP CAN

И соответственно стоит вопрос как символы полученные в диаграмме через vcp  конвертировать в число которое будет отправляться в регистр CAN

Вложений в сообщении

Иконка вложения СнимокForum1.PNG 47.96 кб, скачивался 5 раз, последний раз 2025-02-08 

СнимокForum5.PNG, 58.78 кб, 714 x 436
СнимокForum5.PNG 58.78 кб, скачивался 7 раз, последний раз 2025-02-08 

3 (10-02-2025 11:37:56 отредактировано Константин, CANNY)

Re: 7.2 duo. Передача, прием данных VCP CAN

Для преобразования символьных представлений числа в различных системах счисления в числовые значения и обратно, можно использовать соответствующие функциональные блоки:
https://canny.ru/docs/fbd/converters/ch … converter/
https://canny.ru/docs/fbd/converters/nu … converter/


Однако, если вы разрабатываете собственное ПО для ПК, то гораздо более рациональным подходом будет выполнять эти преобразования на ПК, а с контроллером обмениваться группами числовых значений фиксированной длины.
Например (показана передача CAN->VCP данные+диагностика, передача в обратном направлении реализуется по аналогии):
UPD: пример дополнен регистром ERL

Вложений в сообщении

c2v.png, 33.99 кб, 631 x 611
c2v.png 33.99 кб, скачивался 9 раз, последний раз 2025-02-10 

Иконка вложения c72duo_can2vcp.cfd 1.68 кб, скачивался 14 раз, последний раз 2025-02-10 

4

Re: 7.2 duo. Передача, прием данных VCP CAN

спасибо буду пробовать

5 (08-02-2025 12:46:53 отредактировано serand)

Re: 7.2 duo. Передача, прием данных VCP CAN

Но все таки хотелось понять как полученные данные в диаграмме по uart , правильно их подать на конвертор строка- число.   В той части где привели диаграмму в приеме на пк по uart вопросы возникают только если буфер порта будем читать как строка. если читать байтами то все хорошо. По аналогии если мы из буфера порта читаем байты на ПК и получаем из шины правильные значения, то и передавая в порт массив байт мы уже через канни не получаем то что передали.

6

Re: 7.2 duo. Передача, прием данных VCP CAN

serand пишет:

Но все таки хотелось понять как полученные данные в диаграмме по uart , правильно их подать на конвертор строка- число

В документации, ссылки на которую я привел выше, есть примеры.


serand пишет:

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

Из ПО исполняющегося на ПК крайне важно отправлять в VCP весь предназначенный контроллеру пакет данных фиксированной длины одной посылкой (одним вызовом соответствующей функции API), а не побайтно. Если требуется передать несколько пакетов подряд, то разделять их передачу паузой, длиной, скажем 1-5мс.

7

Re: 7.2 duo. Передача, прием данных VCP CAN

Я наверное не правильно задаю вопрос который касается  именно диаграммы. Давайте я попытаюсь сформулировать его по другому. И сходя из ссылки на пример конвертора из строки в число, то все понятно. В примере константные значения символов. на скрине мы видим все ОК

Вложений в сообщении

СнимокForum1.PNG, 12.65 кб, 541 x 241
СнимокForum1.PNG 12.65 кб, скачивался 6 раз, последний раз 2025-02-08 

8

Re: 7.2 duo. Передача, прием данных VCP CAN

И конкретно сам вопрос. как соединить выход регистра uart с входом конвертора

Вложений в сообщении

СнимокForum2.PNG, 17.78 кб, 781 x 302
СнимокForum2.PNG 17.78 кб, скачивался 8 раз, последний раз 2025-02-08 

9 (08-02-2025 15:18:38 отредактировано serand)

Re: 7.2 duo. Передача, прием данных VCP CAN

Константин, CANNY пишет:

Из ПО исполняющегося на ПК крайне важно отправлять в VCP весь предназначенный контроллеру пакет данных фиксированной длины одной посылкой (одним вызовом соответствующей функции API), а не побайтно. Если требуется передать несколько пакетов подряд, то разделять их передачу паузой, длиной, скажем 1-5мс.

Я так понимаю строкой

10 (08-02-2025 15:28:28 отредактировано serand)

Re: 7.2 duo. Передача, прием данных VCP CAN

Если заговорили за язык CFD, в частности конверторов строка - число и число - строка, то на симуляторе видим на входах строки - число одни значения в десятичной форме, а на выходах число - строка другие. В чем подвох?

Вложений в сообщении

СнимокForum3.PNG, 32.92 кб, 605 x 504
СнимокForum3.PNG 32.92 кб, скачивался 8 раз, последний раз 2025-02-08 

11

Re: 7.2 duo. Передача, прием данных VCP CAN

serand пишет:

Я так понимаю строкой

но и опять же строка это синтактический сахар. Все равно массив только символов. Или есть какое API о котором не догадываюсь?

12

Re: 7.2 duo. Передача, прием данных VCP CAN

serand пишет:

И конкретно сам вопрос. как соединить выход регистра uart с входом конвертора

Зависит от того, какая часть значения представлена ASCII символами находящимися в данный момент в Регистре чтения сообщения UART2 D1:D0 - старший байт или младший. В примерах документации, ссылки на которые я давал выше, приведена исчерпывающая информация о работе данных ФБ, а используя симулятор, их работу можно исследовать самостоятельно.

serand пишет:

строка - число и число - строка, то на симуляторе видим на входах строки - число одни значения в десятичной форме, а на выходах число - строка другие. В чем подвох?

В данном случае - в регистре буквенного представления символа 'e' шестнадцатеричного числа, который впрочем не влияет на значение полученное в результате преобразования. Это станет более очевидно, если изменить формат значений в симуляторе: https://canny.ru/docs/cannylab/simulato … -znachenij

Или внимательно прочесть описание ФБ, ссылку на которое я приводил выше, а именно:
"...Символы результирующего, выравненного по правому краю строкового представления заданного на входе числа, устанавливаются на соответствующих выходах в верхнем регистре, незадействованные старшие разряды заполняются символами «0»..."

serand пишет:

Или есть какое API о котором не догадываюсь?

Речь о Win32 API, функции которого и вызываются вышестоящими функциями библиотек/языков на данной платформе:

https://learn.microsoft.com/ru-ru/windo … -writefile

https://www.unilim.fr/pages_perso/vahid … serie.html

13

Re: 7.2 duo. Передача, прием данных VCP CAN

Если кому интересно. Прием и передача через Uart фреймов Can шины. На ПК в буфер передачи порта отдаем данные в can  типа строки "07e0021a900000000000". Принимаем на ПК тоже строку

Вложений в сообщении

Иконка вложения USB-CAN прием-передача через Uart строкой.cfd 5.18 кб, скачивался 13 раз, последний раз 2025-02-09 

14

Re: 7.2 duo. Передача, прием данных VCP CAN

Константин, CANNY пишет:

Для преобразования символьных представлений числа в различных системах счисления в числовые значения и обратно, можно использовать соответствующие функциональные блоки:
https://canny.ru/docs/fbd/converters/ch … converter/

в Примечании ошибка

15

Re: 7.2 duo. Передача, прием данных VCP CAN

Простите за мое невежество, но ту картинку построения диаграммы uart can, даже если сделать аналогично с передачей через uart на can работать не будет. Я уже без выводов данных некоторых регистров переполнения уже такую диаграмму файл сюда скидывал. И он брался из этого форума. Не работает. И даже если написать программу на С++ С учетом API ссылку на который вы скидывали, тоже работать не будет. Не будет работать по диаграмм что выше и даже с учетом того что я в ПО на ПК заранее подготовлю привычный формат Can шины в числовые значения символов. Первая верхняя строка на скрине в трейсере шины это показывает. Вот тут выкладываю SerialPort.cpp файл, можете сами проверить. Пока Не доработать диаграмму что я выложил выше.

Вложений в сообщении

Иконка вложения USB-CAN Examples1.cfd 2.74 кб, скачивался 12 раз, последний раз 2025-02-10 

c2v.png, 43.02 кб, 655 x 687
c2v.png 43.02 кб, скачивался 7 раз, последний раз 2025-02-10 

СнимокForum1.PNG, 19.06 кб, 715 x 421
СнимокForum1.PNG 19.06 кб, скачивался 7 раз, последний раз 2025-02-10 

16

Re: 7.2 duo. Передача, прием данных VCP CAN

Вот сам файл на с++

Вложений в сообщении

Иконка вложения SerialPort.cpp 3.12 кб, скачивался 12 раз, последний раз 2025-02-10 

17

Re: 7.2 duo. Передача, прием данных VCP CAN

Вторая строка на скрине в трейсере шины, это то что уже с доработанной диаграммой.

18

Re: 7.2 duo. Передача, прием данных VCP CAN

в Примечании ошибка

Спасибо, опечатку поправим.
Сообщать об ошибках на сайте можно выделив на странице сайта текст с ошибкой и нажав Ctrl+Enter

..не работает...

В вашей диаграмме "USB-CAN Examples1.cfd" отсутствует "Регистр установки CAN0 ERL", поэтому все сообщения передаваемые диаграммой в этот интерфейс будут иметь длину данных =0

Кроме того, в файле "SerialPort.cpp" данные в массиве sBuff по всей видимости представлены в виде ноль-терминированной строки содержащей ASCII коды символов строкового представления вашего сообщения, в то время как ваша диаграмма "USB-CAN Examples1.cfd" ожидает от VCP бинарные данные.

Таким образом, результат работы SerialPort.cpp с диаграммой USB-CAN Examples1.cfd будет по всей видимости выглядеть примерно так, как показано у вас в первой строке на скриншоте.