Советы по программированию на LabVIEW

Простейшие вопросы в области инженерной разработки

Re: Советы по программированию на LabVIEW

Postby rsv on 27 Aug 2019, 09:50

Спасибо, Kosist, переделал.
rsv
beginner
beginner
 
Posts: 47
Joined: 18 Jul 2019, 13:53
LabVIEW Version: 2018
Karma: 0

Re: Советы по программированию на LabVIEW

Postby rsv on 02 Sep 2019, 11:00

И снова, здравствуйте.
Делаю выбор оператора из справочника в базе данных. В целом, работает - на панели отображается список и даёт выбрать. То, что получилось - на скринах.
Вопросы:
1. Как сделать вертикальную прокрутку списка (соответствующий пункт в меню недоступен)?
2. Как программно узнать, какой оператор выбран для дальнейшего использования?
Attachments
07_Выбор оператора.PNG
08_Оператор.PNG
08_Оператор.PNG (2.53 KiB) Viewed 1477 times
rsv
beginner
beginner
 
Posts: 47
Joined: 18 Jul 2019, 13:53
LabVIEW Version: 2018
Karma: 0

Re: Советы по программированию на LabVIEW

Postby Artem.spb on 02 Sep 2019, 11:40

rsv wrote:1. Как сделать вертикальную прокрутку списка (соответствующий пункт в меню недоступен)?

сделать 2+ элемента вертикально. Тогда можно будет скрыть горизонтальную прокрутку и показать вертикальную

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

Примерно никак.
массив - не лучший инструмент для выбора, списки в этом плане удобнее.
Если хочется прям массив, то Index Values Property может помочь: если отображается только один элемент, то индекс и будет его "номером"
Artem.spb
expert
expert
 
Posts: 1672
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 266
CLD hardware I/O VIP freelance

Re: Советы по программированию на LabVIEW

Postby rsv on 02 Sep 2019, 12:21

сделать 2+ элемента вертикально. Тогда можно будет скрыть горизонтальную прокрутку и показать вертикальную

Это получилось.

массив - не лучший инструмент для выбора, списки в этом плане удобнее.

Первоначально я и хотел вывести через список. Но совершенное не понял как программно заполнить контролы TextRing, MenuRing & Enum. Или есть ещё какие-то списки, которые можно заполнять программно?
rsv
beginner
beginner
 
Posts: 47
Joined: 18 Jul 2019, 13:53
LabVIEW Version: 2018
Karma: 0

Re: Советы по программированию на LabVIEW

Postby Kosist on 02 Sep 2019, 12:45

Enum нельзя заполнить программно, во время выполнения виайки. Остальное можно. Как заполнить Ring - вот пример
Populate items.png
Мы делили апельсин - много наших полегло...
User avatar
Kosist
expert
expert
 
Posts: 1007
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 282
CLAD I/O VIP students

Re: Советы по программированию на LabVIEW

Postby rsv on 04 Sep 2019, 08:40

Какая оказывается обширная тема - узлы свойств!
Получилось выбрать оператора и записать его ФИО в глобальную переменную. Но, хотелось бы внутри приложения использовать идентификатор оператора из справочника, а не порядковый номер из списка. Вообще возможно заставить список работать со сторонними идентификаторами, а не с порядковым номером, присваиваемым автоматически?
Attachments
09_Выбор оператора.PNG
rsv
beginner
beginner
 
Posts: 47
Joined: 18 Jul 2019, 13:53
LabVIEW Version: 2018
Karma: 0

Re: Советы по программированию на LabVIEW

Postby Kosist on 04 Sep 2019, 09:05

Фишка Ring в том, что ему можно присваивать любые числовые значения (но они не могут повторяться). В то время как Enum может иметь только числа идущие по порядку, начиная с 0. А записать числа в Ring можно при помощи того же узла свойств - если пролистаете его до конца, то увидите там "Strings and Values", которые есть масив кластера со строкой, и соотвествующим ему числом.
Write number to ring.png
Мы делили апельсин - много наших полегло...
User avatar
Kosist
expert
expert
 
Posts: 1007
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 282
CLAD I/O VIP students

Re: Советы по программированию на LabVIEW

Postby rsv on 09 Sep 2019, 15:51

Вот что у меня получилось.
Больше всего в получившейся диаграмме не нравится то, что ФИО и ID приходится вытаскивать из базы отдельными запросами. Но превратить разнотипные массивы в массив кластеров не получилось.
Подскажите, пожалуйста, можно упростить получившуюся диаграмму?
Attachments
09_Выбор оператора с ID.PNG
rsv
beginner
beginner
 
Posts: 47
Joined: 18 Jul 2019, 13:53
LabVIEW Version: 2018
Karma: 0

Re: Советы по программированию на LabVIEW

Postby Borjomy_1 on 09 Sep 2019, 17:36

Ничего не мешает в запросе (select) указать два поля - у вас уже все подготовлено, надо только собрать массив не из одного элемента, а из двух, выделить каждое из результата функцией Index Array, только для первого поля указать индекс 0, а для второго - индекс 1, массивы Variant преобразуете также и вуаля - один запрос - два типа данных.
Borjomy_1
expert
expert
 
Posts: 1905
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 332
VIP

Re: Советы по программированию на LabVIEW

Postby rsv on 10 Sep 2019, 14:13

Теперь получилось. Спасибо, Borjomy_1.
Attachments
09_Выбор оператора с ID оптимизированный.JPG
rsv
beginner
beginner
 
Posts: 47
Joined: 18 Jul 2019, 13:53
LabVIEW Version: 2018
Karma: 0

Re: Советы по программированию на LabVIEW

Postby rsv on 26 Sep 2019, 10:16

Доброго времени суток.
Задумался, как реализовать действия, которые выполняются один раз при открытии ФП. В Event Structure подобных событий не нашёл, реализовал через Flat Sequence.
Подскажите, пожалуйста, это единственный способ или есть ещё варианты?
rsv
beginner
beginner
 
Posts: 47
Joined: 18 Jul 2019, 13:53
LabVIEW Version: 2018
Karma: 0

Re: Советы по программированию на LabVIEW

Postby Artem.spb on 26 Sep 2019, 12:19

rsv wrote:Подскажите, пожалуйста, это единственный способ или есть ещё варианты?


Тут два варианта (минимум).
1) это машина состояний, первое состояние - инициализация, дальше сама работа. Это в случае если "открытие" = запуск программы.
2) если под открытием понимается именно разворачивание окна, то может помочь событие This Vi -> Panel Resize

ну и да, я постоянно грешу тем, что всякую предработу по сбору ссылок в кластеры и пр. делаю перед общим циклом, и использую Sequence.

с Sequence не совсем понятно. На заре эволюции мануалы грозились тем, что Sequence замедляет работу. Я недавно тест провёл, разницы не выявил. Это вроде как плохой стиль программирования, но "если нельзя, но очень хочется, то можно"
Artem.spb
expert
expert
 
Posts: 1672
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 266
CLD hardware I/O VIP freelance

Re: Советы по программированию на LabVIEW

Postby rsv on 02 Nov 2019, 09:55

Доброго времени суток.
Есть такая задача: считать данные из одной записи в базе данных, отредактировать, проверить на корректность и сохранить изменения в базе.
План примерно такой:
1. Вытащить данные одной записи в формате Variant с помощью "DB Tools Fetch Next Recordset";
2. Преобразовать в массив кластера типа String с помощью "Database Variant To Data";
3. Из массива вытащить кластер;
4. Кластер разбить на отдельные поля;
5. Для каждого редактируемого поля создать локальную переменную соответствующего типа и заполнить переменные из кластера;
6. Для каждой переменной создать контрол;
7. Изменения внесённые в контрол автоматически перенесутся в переменные;
8. Проанализировать данные в переменных;
9. Переменные собрать в кластер;
10. Кластер передать в "DB Tools Update Data" для сохранения в базе.
Правильно рассуждаю или есть варианты попроще?
rsv
beginner
beginner
 
Posts: 47
Joined: 18 Jul 2019, 13:53
LabVIEW Version: 2018
Karma: 0

Re: Советы по программированию на LabVIEW

Postby ujin on 05 Nov 2019, 09:03

Если записей не много и они постоянно используются можно при старте программы однократно считать сразу все данные во временный массив кластеров. При изменении значения записывать во временный массив и базу данных.
Не очевидна необходимость объединять данные в кластер. Можно хранить в разных массивах. Читать и записывать по одному индексу. При обработке данные все равно разделяются тем или иным способом.
ujin
beginner
beginner
 
Posts: 27
Joined: 28 Jul 2019, 13:16
LabVIEW Version: 15
Karma: 4

Re: Советы по программированию на LabVIEW

Postby rsv on 08 Nov 2019, 08:31

Не очевидна необходимость объединять данные в кластер. Можно хранить в разных массивах. Читать и записывать по одному индексу. При обработке данные все равно разделяются тем или иным способом.

Кластер у меня возник естественным образом, когда обрабатывал данные, считанные "DB Tools Fetch Next Recordset". Ну и при записи кластер нужен для "DB Tools Update Data". Причём это два отдельных кластера, так как набор полей для считывания и записи разный и как их объединить пока непонятно.
Реализовал считывание, обновление и добавление записи. Получилась большая блок-диаграмма с явным дублированием части кода, но работает.
rsv
beginner
beginner
 
Posts: 47
Joined: 18 Jul 2019, 13:53
LabVIEW Version: 2018
Karma: 0

PreviousNext

Return to Для чайников

Who is online

Users browsing this forum: Yandex and 1 guest

cron