#labview
#labview
Вопрос:
Я довольно новичок в LabVIEW, но у меня есть опыт работы на других языках программирования, таких как Python и C . Код, о котором я собираюсь спросить, работает, но при его составлении потребовалось много ручной работы. В основном я считываю из текстового файла и изменяю значения элементов управления на основе значений в текстовом файле, в данном случае его 40 значений.
Я настроил его на извлечение из текстового файла и разделение строки запятыми. Затем я перебираю все значения и устанавливаю индикатор для считывания соответствующего значения. Для достижения этого мне пришлось создать 40 отдельных операторов case. Я уверен, что есть лучший способ сделать это. У кого-нибудь есть какие-либо предложения?
Комментарии:
1. Для чего используется этот файл? Это какой-то файл конфигурации или простой файл данных?
2. @kosist Да, это файл конфигурации. Я это настроил, так что пользователь может сохранить некоторые параметры для теста. Эти данные хранятся в текстовом файле, который я извлекаю, когда пользователь хочет загрузить новые параметры.
3. В вашем заголовке говорится, что вы хотите изменить элементы управления , но в тексте вашего вопроса говорится о индикаторах . Это один или другой, или оба?
4. @nekomatic Это была моя ошибка. Я изменил это. Он должен считывать элементы управления, а не индикаторы.
Ответ №1:
Можно было бы внести следующие улучшения (дополнительно к предложенным sweber:
- Если файл содержит только данные, без формата «метка — значение», то вы могли бы прочитать его в формате csv (значения, разделенные запятыми) и прочитать фактически только 1-ю строку.
- В настоящее время вы устанавливаете значения на основе порядка. В этом случае вы могли бы: создать ссылку на все индикаторы, преобразовать их в массив в правильном порядке, в цикле For присвоить значения индикаторам через свойство node Value. В целом, я поддерживаю sweber, что если это какие-то данные типа ключ — значение, то лучше использовать либо формат JSON, либо формат файла .ini, которые поддерживают такую структуру.
Ответ №2:
Давайте начнем с некоторой оптимизации:
Похоже, что ваш файл данных содержит не более 40 чисел. Вы можете подключить массив 1D DBL к входным данным по умолчанию для строки в массив VI, и вы получите только массив 1D. Нет необходимости в 2D-массиве.
Во-вторых, нет необходимости преобразовывать значение индекса FOR в строку, регистр также принимает целые числа.
Теперь, что касается вашего вопроса: самое простое решение — отобразить значения в виде массива, точно так же, как они поступают из строки в массив VI.
Но я предполагаю, что каждое значение имеет особое значение, и вы хотели бы каким-то образом отобразить его имя / описание. В этом случае создайте кластер с 40 значениями, отредактируйте их метки по своему усмотрению и убедитесь, что их порядок в кластере совпадает с порядком значений в файлах. Затем подключите одномерный массив значений к этому кластеру через array-to-cluster VI.
Если вы планируете использовать текстовый файл для хранения и загрузки значений, преобразование данных кластера в JSON и vv. может быть чем-то для вас, поскольку оно также переносит метки кластера в файл. (Однако тогда изменение меток является проблемой)
Комментарии:
1. По какой-то причине в моем коде, если я не преобразую итерацию цикла в строку, я получаю ошибку: «Структура регистра: значения селектора имеют неправильный тип». Вот почему я конвертирую в строку. Почему это должно происходить?
2. Это могло бы произойти, если бы вы указали один тип селекторов страниц структуры регистра (в вашем случае — строковый тип), а затем подключились к селектору ввода целочисленного типа.
3. Если вы просто хотите прочитать и отобразить много разных значений, то это хороший ответ, но я думаю, что спрашивающий на самом деле хочет установить значения элементов управления передней панели из сохраненной конфигурации.