Не правильная обработка кода в LV

Темы связанные с инженерными разработками, но не подходящие в другие ветки форума
Ответить
AndryG
assistant
assistant
Сообщения: 111
Зарегистрирован: 24 апр 2017, 22:27
Версия LabVIEW: 2016
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Не правильная обработка кода в LV

Сообщение AndryG »

Доброго времени суток. Не могу разобраться почему LV не правильно вычисляет код .На конроллере функция,которую я пытаюсь имплементировать в LV работает корректно,этот код должен правильно извлекать 11 бит из входного буфера и собирать их в 16-битные значения каналов.Во вложении тестовая функция с кодом на Си и LV, в виде констаннты на входе массив данных в результате обработки которых должны быть следующие выходные данные :
Channel 1: 992
Channel 2: 992
Channel 3: 966
Channel 4: 992
Channel 5: 172
Channel 6: 1809
Channel 7: 172
Channel 8: 172
Channel 9: 172
Channel 10: 172
Channel 11: 992
Channel 12: 992
Channel 13: 992
Channel 14: 992
Channel 15: 992
Channel 16: 992
,но по факту LV считает не правильно. Прошу помощи в решении этой задачи.Заранее спасибо за любую помощь.
Вложения
Decode_demo.vi
(11.06 КБ) 17 скачиваний
AndryG
assistant
assistant
Сообщения: 111
Зарегистрирован: 24 апр 2017, 22:27
Версия LabVIEW: 2016
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Не правильная обработка кода в LV

Сообщение AndryG »

AndryG писал(а): 07 фев 2024, 23:28 Доброго времени суток. Не могу разобраться почему LV не правильно вычисляет код .На конроллере функция,которую я пытаюсь имплементировать в LV работает корректно,этот код должен правильно извлекать 11 бит из входного буфера и собирать их в 16-битные значения каналов.Во вложении тестовая функция с кодом на Си и LV, в виде констаннты на входе массив данных в результате обработки которых должны быть следующие выходные данные :
Channel 1: 992
Channel 2: 992
Channel 3: 966
Channel 4: 992
Channel 5: 172
Channel 6: 1809
Channel 7: 172
Channel 8: 172
Channel 9: 172
Channel 10: 172
Channel 11: 992
Channel 12: 992
Channel 13: 992
Channel 14: 992
Channel 15: 992
Channel 16: 992
,но по факту LV считает не правильно. Прошу помощи в решении этой задачи.Заранее спасибо за любую помощь.
Что,никто не поможет разобраться?
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1315
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 33 раза
Контактная информация:

Re: Не правильная обработка кода в LV

Сообщение AndreyDmitriev »

AndryG писал(а): 09 фев 2024, 12:19 Что,никто не поможет разобраться?
Ну если "в лоб", то как-то так, вероятно, не?

Изображение

Я, правда, не уверен, что конкантенация массивов на выходе в 2016 есть, ну тогда просто сдвиговый регистр добавьте.
AndryG
assistant
assistant
Сообщения: 111
Зарегистрирован: 24 апр 2017, 22:27
Версия LabVIEW: 2016
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Не правильная обработка кода в LV

Сообщение AndryG »

AndreyDmitriev писал(а): 09 фев 2024, 15:35
AndryG писал(а): 09 фев 2024, 12:19 Что,никто не поможет разобраться?
Ну если "в лоб", то как-то так, вероятно, не?

Изображение

Я, правда, не уверен, что конкантенация массивов на выходе в 2016 есть, ну тогда просто сдвиговый регистр добавьте.
Гениально! Я еще думал как бы все сложить и наложить последовательно маски по 11 бит, респект,спасибо большое,очень помогли.Но остается вопрос ,почему в LV нельзя по-людски это делать?
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1315
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 33 раза
Контактная информация:

Re: Не правильная обработка кода в LV

Сообщение AndreyDmitriev »

AndryG писал(а): 09 фев 2024, 15:48 Но остается вопрос ,почему в LV нельзя по-людски это делать?
Вы имеете ввиду через си код в формуле и почему он не работает? Ну так там где-то ошибка есть, кроме того бывает что поведение си кода в лабвью чуть отличается от нормального компилятора.
Но мне лично такие битовые операции и всякие деления по модулю просто мозги выносят.
AndryG
assistant
assistant
Сообщения: 111
Зарегистрирован: 24 апр 2017, 22:27
Версия LabVIEW: 2016
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Не правильная обработка кода в LV

Сообщение AndryG »

AndreyDmitriev писал(а): 09 фев 2024, 15:59
AndryG писал(а): 09 фев 2024, 15:48 Но остается вопрос ,почему в LV нельзя по-людски это делать?
Вы имеете ввиду через си код в формуле и почему он не работает? Ну так там где-то ошибка есть, кроме того бывает что поведение си кода в лабвью чуть отличается от нормального компилятора.
Но мне лично такие битовые операции и всякие деления по модулю просто мозги выносят.
Да именно Си, код проверенный и работает на устройстве исправно! Мне тоже с битами вечно вынос мозга,но для более быстрой передачи данных через последовательный интерфейс этим приходиться заниматься,так как это ускоряет передачу.
AndryG
assistant
assistant
Сообщения: 111
Зарегистрирован: 24 апр 2017, 22:27
Версия LabVIEW: 2016
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Не правильная обработка кода в LV

Сообщение AndryG »

AndryG писал(а): 09 фев 2024, 16:15
AndreyDmitriev писал(а): 09 фев 2024, 15:59
AndryG писал(а): 09 фев 2024, 15:48 Но остается вопрос ,почему в LV нельзя по-людски это делать?
Вы имеете ввиду через си код в формуле и почему он не работает? Ну так там где-то ошибка есть, кроме того бывает что поведение си кода в лабвью чуть отличается от нормального компилятора.
Но мне лично такие битовые операции и всякие деления по модулю просто мозги выносят.
Да именно Си, код проверенный и работает на устройстве исправно! Мне тоже с битами вечно вынос мозга,но для более быстрой передачи данных через последовательный интерфейс этим приходиться заниматься,так как это ускоряет передачу.
Да и это я привел пример на Си простого кода обработки бит,на самом деле для 32 разрядных контроллеров я применяю быстрый алгоритм,работая с 4 байтами одновременно,что ускоряет работу функции примерно в 6 раз,но на LV это не работает,я думаю по причине внутренней обработки байт или еще чего-то, думал здесь кто-то сталкивался с такой проблематикой,хорошо бы еще услышать от знатоков LV пояснения по этому поводу.
ujin1
adviser
adviser
Сообщения: 227
Зарегистрирован: 06 ноя 2020, 15:37
Версия LabVIEW: 19
Благодарил (а): 18 раз
Поблагодарили: 37 раз
Контактная информация:

Re: Не правильная обработка кода в LV

Сообщение ujin1 »

AndreyDmitriev писал(а): 09 фев 2024, 15:35
AndryG писал(а): 09 фев 2024, 12:19 Что,никто не поможет разобраться?
Ну если "в лоб", то как-то так, вероятно, не?

Изображение

Я, правда, не уверен, что конкантенация массивов на выходе в 2016 есть, ну тогда просто сдвиговый регистр добавьте.
В modbus библиотеке есть еще один способ из битового массива в байты. Можно сравнить по производительности. Заменить 8 на 16 и u8 на u16 видимо нужно.
Вложения
Bits to bytes.png
Bits to Bytes.vi
(18.83 КБ) 5 скачиваний
Изображение
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1315
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 33 раза
Контактная информация:

Re: Не правильная обработка кода в LV

Сообщение AndreyDmitriev »

AndryG писал(а): 09 фев 2024, 16:22но на LV это не работает,я думаю по причине внутренней обработки байт или еще чего-то, думал здесь кто-то сталкивался с такой проблематикой,хорошо бы еще услышать от знатоков LV пояснения по этому поводу.
А, ну конечно, LabVIEW ж округляет деление не в ту сторону. Всё у вас правильно в коде. Ну, почти правильно.
Вот как надо:
Изображение
Кстати, что-то мне подсказывает, что одиннадцать раз крутиь внутренний цикл не надо - вы ж максимум из трёх входных байт данные забираете. Но это уж сами, я и так чуть голову не сломал, пока увидел.
AndryG
assistant
assistant
Сообщения: 111
Зарегистрирован: 24 апр 2017, 22:27
Версия LabVIEW: 2016
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Не правильная обработка кода в LV

Сообщение AndryG »

AndreyDmitriev писал(а): 09 фев 2024, 18:17
AndryG писал(а): 09 фев 2024, 16:22но на LV это не работает,я думаю по причине внутренней обработки байт или еще чего-то, думал здесь кто-то сталкивался с такой проблематикой,хорошо бы еще услышать от знатоков LV пояснения по этому поводу.
А, ну конечно, LabVIEW ж округляет деление не в ту сторону. Всё у вас правильно в коде. Ну, почти правильно.
Вот как надо:
Изображение
Кстати, что-то мне подсказывает, что одиннадцать раз крутиь внутренний цикл не надо - вы ж максимум из трёх входных байт данные забираете. Но это уж сами, я и так чуть голову не сломал, пока увидел.
Да вы правы,не нужно,у меня есть еще более интересные алгоритмы,теперь понятно в чем дело,спасибо большое,это то,что изначально я хотел услышать))
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Общие»