Не правильная обработка кода в LV
-
- assistant
- Сообщения: 122
- Зарегистрирован: 24 апр 2017, 22:27
- Версия LabVIEW: 2016
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
- Контактная информация:
Не правильная обработка кода в LV
Доброго времени суток. Не могу разобраться почему 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 считает не правильно. Прошу помощи в решении этой задачи.Заранее спасибо за любую помощь.
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 КБ) 119 скачиваний
-
- assistant
- Сообщения: 122
- Зарегистрирован: 24 апр 2017, 22:27
- Версия LabVIEW: 2016
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: Не правильная обработка кода в LV
Что,никто не поможет разобраться?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 считает не правильно. Прошу помощи в решении этой задачи.Заранее спасибо за любую помощь.
-
- VIP
- Сообщения: 1408
- Зарегистрирован: 03 фев 2010, 00:42
- Награды: 8
- Версия LabVIEW: 6.1 - 2025
- Откуда: Германия
- Благодарил (а): 1 раз
- Поблагодарили: 77 раз
- Контактная информация:
Re: Не правильная обработка кода в LV
Ну если "в лоб", то как-то так, вероятно, не?

Я, правда, не уверен, что конкантенация массивов на выходе в 2016 есть, ну тогда просто сдвиговый регистр добавьте.
-
- assistant
- Сообщения: 122
- Зарегистрирован: 24 апр 2017, 22:27
- Версия LabVIEW: 2016
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: Не правильная обработка кода в LV
Гениально! Я еще думал как бы все сложить и наложить последовательно маски по 11 бит, респект,спасибо большое,очень помогли.Но остается вопрос ,почему в LV нельзя по-людски это делать?AndreyDmitriev писал(а): ↑09 фев 2024, 15:35Ну если "в лоб", то как-то так, вероятно, не?
Я, правда, не уверен, что конкантенация массивов на выходе в 2016 есть, ну тогда просто сдвиговый регистр добавьте.
-
- VIP
- Сообщения: 1408
- Зарегистрирован: 03 фев 2010, 00:42
- Награды: 8
- Версия LabVIEW: 6.1 - 2025
- Откуда: Германия
- Благодарил (а): 1 раз
- Поблагодарили: 77 раз
- Контактная информация:
Re: Не правильная обработка кода в LV
Вы имеете ввиду через си код в формуле и почему он не работает? Ну так там где-то ошибка есть, кроме того бывает что поведение си кода в лабвью чуть отличается от нормального компилятора.
Но мне лично такие битовые операции и всякие деления по модулю просто мозги выносят.
-
- assistant
- Сообщения: 122
- Зарегистрирован: 24 апр 2017, 22:27
- Версия LabVIEW: 2016
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: Не правильная обработка кода в LV
Да именно Си, код проверенный и работает на устройстве исправно! Мне тоже с битами вечно вынос мозга,но для более быстрой передачи данных через последовательный интерфейс этим приходиться заниматься,так как это ускоряет передачу.AndreyDmitriev писал(а): ↑09 фев 2024, 15:59Вы имеете ввиду через си код в формуле и почему он не работает? Ну так там где-то ошибка есть, кроме того бывает что поведение си кода в лабвью чуть отличается от нормального компилятора.
Но мне лично такие битовые операции и всякие деления по модулю просто мозги выносят.
-
- assistant
- Сообщения: 122
- Зарегистрирован: 24 апр 2017, 22:27
- Версия LabVIEW: 2016
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: Не правильная обработка кода в LV
Да и это я привел пример на Си простого кода обработки бит,на самом деле для 32 разрядных контроллеров я применяю быстрый алгоритм,работая с 4 байтами одновременно,что ускоряет работу функции примерно в 6 раз,но на LV это не работает,я думаю по причине внутренней обработки байт или еще чего-то, думал здесь кто-то сталкивался с такой проблематикой,хорошо бы еще услышать от знатоков LV пояснения по этому поводу.AndryG писал(а): ↑09 фев 2024, 16:15Да именно Си, код проверенный и работает на устройстве исправно! Мне тоже с битами вечно вынос мозга,но для более быстрой передачи данных через последовательный интерфейс этим приходиться заниматься,так как это ускоряет передачу.AndreyDmitriev писал(а): ↑09 фев 2024, 15:59Вы имеете ввиду через си код в формуле и почему он не работает? Ну так там где-то ошибка есть, кроме того бывает что поведение си кода в лабвью чуть отличается от нормального компилятора.
Но мне лично такие битовые операции и всякие деления по модулю просто мозги выносят.
-
- adviser
- Сообщения: 243
- Зарегистрирован: 06 ноя 2020, 15:37
- Версия LabVIEW: 19
- Благодарил (а): 19 раз
- Поблагодарили: 40 раз
- Контактная информация:
Re: Не правильная обработка кода в LV
В modbus библиотеке есть еще один способ из битового массива в байты. Можно сравнить по производительности. Заменить 8 на 16 и u8 на u16 видимо нужно.AndreyDmitriev писал(а): ↑09 фев 2024, 15:35Ну если "в лоб", то как-то так, вероятно, не?
Я, правда, не уверен, что конкантенация массивов на выходе в 2016 есть, ну тогда просто сдвиговый регистр добавьте.
- Вложения
-
- Bits to Bytes.vi
- (18.83 КБ) 152 скачивания
-
- VIP
- Сообщения: 1408
- Зарегистрирован: 03 фев 2010, 00:42
- Награды: 8
- Версия LabVIEW: 6.1 - 2025
- Откуда: Германия
- Благодарил (а): 1 раз
- Поблагодарили: 77 раз
- Контактная информация:
Re: Не правильная обработка кода в LV
А, ну конечно, LabVIEW ж округляет деление не в ту сторону. Всё у вас правильно в коде. Ну, почти правильно.
Вот как надо:

Кстати, что-то мне подсказывает, что одиннадцать раз крутиь внутренний цикл не надо - вы ж максимум из трёх входных байт данные забираете. Но это уж сами, я и так чуть голову не сломал, пока увидел.
-
- assistant
- Сообщения: 122
- Зарегистрирован: 24 апр 2017, 22:27
- Версия LabVIEW: 2016
- Благодарил (а): 1 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: Не правильная обработка кода в LV
Да вы правы,не нужно,у меня есть еще более интересные алгоритмы,теперь понятно в чем дело,спасибо большое,это то,что изначально я хотел услышать))AndreyDmitriev писал(а): ↑09 фев 2024, 18:17А, ну конечно, LabVIEW ж округляет деление не в ту сторону. Всё у вас правильно в коде. Ну, почти правильно.
Вот как надо:
Кстати, что-то мне подсказывает, что одиннадцать раз крутиь внутренний цикл не надо - вы ж максимум из трёх входных байт данные забираете. Но это уж сами, я и так чуть голову не сломал, пока увидел.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 3 Ответы
- 1175 Просмотры
-
Последнее сообщение Юрий
-
- 3 Ответы
- 1153 Просмотры
-
Последнее сообщение AndreyDmitriev