Альтернатива регистрационным статьям при изменении большого количества цифровых элементов управления

#labview

#labview

Вопрос:

Я довольно новичок в LabVIEW, но у меня есть опыт работы на других языках программирования, таких как Python и C . Код, о котором я собираюсь спросить, работает, но при его составлении потребовалось много ручной работы. В основном я считываю из текстового файла и изменяю значения элементов управления на основе значений в текстовом файле, в данном случае его 40 значений.

Я настроил его на извлечение из текстового файла и разделение строки запятыми. Затем я перебираю все значения и устанавливаю индикатор для считывания соответствующего значения. Для достижения этого мне пришлось создать 40 отдельных операторов case. Я уверен, что есть лучший способ сделать это. У кого-нибудь есть какие-либо предложения?

Код LabVIEW

Комментарии:

1. Для чего используется этот файл? Это какой-то файл конфигурации или простой файл данных?

2. @kosist Да, это файл конфигурации. Я это настроил, так что пользователь может сохранить некоторые параметры для теста. Эти данные хранятся в текстовом файле, который я извлекаю, когда пользователь хочет загрузить новые параметры.

3. В вашем заголовке говорится, что вы хотите изменить элементы управления , но в тексте вашего вопроса говорится о индикаторах . Это один или другой, или оба?

4. @nekomatic Это была моя ошибка. Я изменил это. Он должен считывать элементы управления, а не индикаторы.

Ответ №1:

Можно было бы внести следующие улучшения (дополнительно к предложенным sweber:

  1. Если файл содержит только данные, без формата «метка — значение», то вы могли бы прочитать его в формате csv (значения, разделенные запятыми) и прочитать фактически только 1-ю строку.
  2. В настоящее время вы устанавливаете значения на основе порядка. В этом случае вы могли бы: создать ссылку на все индикаторы, преобразовать их в массив в правильном порядке, в цикле 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. Если вы просто хотите прочитать и отобразить много разных значений, то это хороший ответ, но я думаю, что спрашивающий на самом деле хочет установить значения элементов управления передней панели из сохраненной конфигурации.