Чтение данных через плату Moxa Cp-134u

Простейшие вопросы в области инженерной разработки
ujin
junior
junior
Сообщения: 68
Зарегистрирован: 28 июл 2019, 13:16
Репутация: 0
Версия LabVIEW: 19
Контактная информация:

Re: Чтение данных через плату Moxa Cp-134u

Сообщение ujin »

BobbyHoby писал(а):
22 май 2020, 17:14
Походу я все же неправильно понимаю, как это должно происходить потому что то что я сделал (скриншот) не работает ((
Не работает совсем или работает неправильно?
В адресном пространстве устройства MODBUS 65536 (FFFF) Holding Registers.
В Вашем устройстве нужная Вам информация располагается начиная с адреса 4000h(буква h в конце) или номер регистра в десятичной системе исчисления 16384.
view radix.jpg
Переключите отображение константы на 16-ричный режим
hexadecimal.jpg
Введите 4000.
Таким образом вы запросите и получите массив из 8 регистров. Каждый регистр по 2 байта.
Соответственнно этот массив преобразуете затем в число.
Можете показать что получилось в массиве.
Еще можно подключить к выходу error вывод ошибки. Можно посмотреть что за ошибка была в запросе.

Blackman

Activity
leader
leader
Сообщения: 922
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Репутация: 0
Версия LabVIEW: 6.1,8.5,20
Контактная информация:

Re: Чтение данных через плату Moxa Cp-134u

Сообщение Blackman »

Примеры мультисессий на общем ресурсе.
Вложения
Concurent Modbus Session.png
Concurent Modbus Session 2.png

Аватара пользователя
BobbyHoby
beginner
beginner
Сообщения: 12
Зарегистрирован: 21 май 2020, 15:38
Репутация: 0
Версия LabVIEW: 16
Контактная информация:

Re: Чтение данных через плату Moxa Cp-134u

Сообщение BobbyHoby »

Подскажите этот ведь "Array Subset" ?
Если да, тогда как подключать к нему константу и "unit id"?
Вложения
array.jpg
:help:

Аватара пользователя
BobbyHoby
beginner
beginner
Сообщения: 12
Зарегистрирован: 21 май 2020, 15:38
Репутация: 0
Версия LabVIEW: 16
Контактная информация:

Re: Чтение данных через плату Moxa Cp-134u

Сообщение BobbyHoby »

Пока что получилось реализовать только в таком исполнении.
У меня сразу несколько проблем вылезло:
- график не рисует линию (точка постоянно в одном и том же месте, значения при этом поступают на график);
- время на графике с интервалом в два-три года.
Нашел в интернете про запись данных в файл, вопрос как это реализовать на моем примере.
Еще раз извиняюсь за свою некомпетентность!
Вложения
Запись данных.jpg
тест.jpg
Тест УНО.jpg
Datafile labview.pdf
(327.81 КБ) 5 скачиваний
:help:

Artem.spb

Activity Автор
expert
expert
Сообщения: 1878
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Репутация: 0
Версия LabVIEW: 12-18
Контактная информация:

Re: Чтение данных через плату Moxa Cp-134u

Сообщение Artem.spb »

BobbyHoby писал(а):
25 май 2020, 11:07
Подскажите этот ведь "Array Subset" ?
нет, это Delete From Array Function
Если да, тогда как подключать к нему константу и "unit id"?
А если нет, то какой вопрос? :)
к нему не надо ничего подключать, это извлечение данных из посылки. Первым байтом идёт адрес прибора

BobbyHoby писал(а):
25 май 2020, 15:59
- график не рисует линию (точка постоянно в одном и том же месте, значения при этом поступают на график);
тяжело ему нарисовать линию в одной точке
arr.PNG
arr.PNG (43.74 КБ) 367 просмотров
Нашел в интернете про запись данных в файл, вопрос как это реализовать на моем примере.
чем не устраивает то, что есть?
только перемещать маркер в конец не нужно каждый раз, он там и остася после предыдущей операции. И ссылку на файл лучше через регистр гонять

Аватара пользователя
BobbyHoby
beginner
beginner
Сообщения: 12
Зарегистрирован: 21 май 2020, 15:38
Репутация: 0
Версия LabVIEW: 16
Контактная информация:

Re: Чтение данных через плату Moxa Cp-134u

Сообщение BobbyHoby »

чем не устраивает то, что есть?
только перемещать маркер в конец не нужно каждый раз, он там и остася после предыдущей операции. И ссылку на файл лучше через регистр гонять
[/quote]
Про линию в одной точке это мощно я "выразился". Я про то, почему он не строит график, показания то меняются, тут я грешу на то что интервал даты выставлен некорректно и я просто не вижу сам график))
А что даст прогонка на ссылку через файл?
запись то устраивает только вот каждый раз при запуске требуется создать три файла, можно конечно и выставить файл на дозапись (так как у меня три прибора скрин со своей солянкой скину завтра когда соберу все во едино и проверю) при этом кнопка стоп останавливает программу не сразу (бывает приходится много-часто нажимать)
:help:

Artem.spb

Activity Автор
expert
expert
Сообщения: 1878
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Репутация: 0
Версия LabVIEW: 12-18
Контактная информация:

Re: Чтение данных через плату Moxa Cp-134u

Сообщение Artem.spb »

BobbyHoby писал(а):
25 май 2020, 21:27
. Я про то, почему он не строит график, показания то меняются, тут я грешу на то что интервал даты выставлен некорректно и я просто не вижу сам график))
грешить надо на программиста, зуб даю.
Я показал, где у вас косяк. Вы каждый раз рисуете массив из одного элемента.
А что даст прогонка на ссылку через файл?
что? :crazy: ?
запись то устраивает только вот каждый раз при запуске требуется создать три файла, можно конечно и выставить файл на дозапись (так как у меня три прибора скрин со своей солянкой скину завтра когда соберу все во едино и проверю)
если хочется три, делайте три. Никто ж не запрещает.
Можно в один файл столбцами писать.
при этом кнопка стоп останавливает программу не сразу (бывает приходится много-часто нажимать)
тут опять претензии к программисту.
У вас цикл 1Гц. Если очень повезёт, кнопку можно нажать в самом начале, но уже после того, как программа её проверила. Дальше этот цикл завершается (1с), программа проверяет кнопку и доделывает второй цикл.
Так что ждать завершения 2 с - нормально. И жать много-много не поможет. Можно удачно отжать в момент проверки, и программа будет ещё несколько циклов работать

Аватара пользователя
BobbyHoby
beginner
beginner
Сообщения: 12
Зарегистрирован: 21 май 2020, 15:38
Репутация: 0
Версия LabVIEW: 16
Контактная информация:

Re: Чтение данных через плату Moxa Cp-134u

Сообщение BobbyHoby »

грешить надо на программиста, зуб даю.
Я показал, где у вас косяк. Вы каждый раз рисуете массив из одного элемента.
На такого программиста как я можно и не только грешить ))
подскажите(лучше покажите) как я могу усовершенствовать мою "солянку", а именно меня интересует:
Как сделать что бы записывалось с трех приборов в один файл, то есть не в каждом "While Loop'e" делать функцию открыть и записать в файл, а что бы это один раз происходило;
Как реализовать функцию паузы не копируя ее в каждый "While Loop";
Подскажите как можно оптимизировать мою программу даже мне понятно, что она примитивна;
Понимаю, что я скорее всего "офигел" с такими запросами, но я исправлюсь ))
Вложения
Test 1.14.rar
(266.64 КБ) 3 скачивания
Запись данных.jpg
Запись данных.jpg (21.13 КБ) 289 просмотров
:help:

Artem.spb

Activity Автор
expert
expert
Сообщения: 1878
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Репутация: 0
Версия LabVIEW: 12-18
Контактная информация:

Re: Чтение данных через плату Moxa Cp-134u

Сообщение Artem.spb »

Не совсем понятно условие задачи. У вас три прибора никак не синхронизированы, так что появляется масса вариантов, как сделать.
Ничто не мешает слить все три опроса в один цикл (но это не разумна в плане масштабирования). Разумнее, наоборот, сделать один универсальный клонируемый вариант. Если все приборы по модбасу, то различаются они только адресами и количеством регистров.

Дальше - передача данных. Если данные терять нельзя, то очереди, если можно, то проще через глобальные переменные.
Т.е. чтобы не заморачиваться, я в простой задаче сделал бы три цикла опроса и четвёртый на запись, где все переменные будут собираться в кучу в записываются в файл.

И ещё я не понял, что за хитрые махинации с графиками. Если значение долго не меняется, то оно не появляется на графике. И через час пользователь может решить, что по этому каналу данные не идут, хотя они всего лишь не менялись всё это время. Где логика?
Как реализовать функцию паузы не копируя ее в каждый "While Loop"
так делать не надо. Совсем. В паузе у вас невозможно остановить программу. Бедный пользователь будет биться в конвульсиях, нажимая кнопку "стоп". Да и верхний цикл 5 сек - издевательство на этапе завершения работы.
Можно добавить машину состояний с тремя ражимами
- опрос
- ожидание
- пауза
Два последних будут ждать 10-100 мс,а потом проверять условие, и идти на второй круг, или переходить в другое состояние.

Аватара пользователя
BobbyHoby
beginner
beginner
Сообщения: 12
Зарегистрирован: 21 май 2020, 15:38
Репутация: 0
Версия LabVIEW: 16
Контактная информация:

Re: Чтение данных через плату Moxa Cp-134u

Сообщение BobbyHoby »

Как их синхронизировать, если каждый проводит измерение со своим интервалом. Может установить интервал для всех одни средний ?)

Данные терять нельзя.
Вроде с этим я понял мне надо создать цикл "While Loop" чисто под запись, а из трех других циклах ее убрать?

Дело вот в чем сами приборы имеют свой интервал обновления данных у одного 100с, другой 60с, третий вообще по количеству импульсов- то есть чем выше загрузка тем чаще данные обновляются. А у меня программа постоянно опрашивает порт(ы) и "фигачит" все без остановки, поэтому я и решил отсеять повторяющееся данные, понимаю что по хорошему надо брать время измерения из прибора или опрашивать с определенной частотой, но не врубаюсь как это сделать.
Можно добавить машину состояний с тремя ражимами
- опрос
- ожидание
- пауза
Два последних будут ждать 10-100 мс,а потом проверять условие, и идти на второй круг, или переходить в другое состояние.
что еще за машина состояний?
Чуть позже вышлю переделанную программу (сейчас пока пытаюсь схемку приделать к этому всему)
:help:

Artem.spb

Activity Автор
expert
expert
Сообщения: 1878
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Репутация: 0
Версия LabVIEW: 12-18
Контактная информация:

Re: Чтение данных через плату Moxa Cp-134u

Сообщение Artem.spb »

BobbyHoby писал(а):
26 май 2020, 14:39
Как их синхронизировать, если каждый проводит измерение со своим интервалом. Может установить интервал для всех одни средний ?)
топорный и один из самых неразумных вариантов. Зачем читать/писать лишнее?
Кстати, в файл пишется всё, хотя на экран отображается только часть. Опять не логично
У каждого цикла своя скорость, это нормально. Может, в файл тоже нет смысла писать с одной скоростью?
Вообще, для чего этот файл: что с ним дальше будет происходить, кто его будет использовать?
Данные терять нельзя.
Вроде с этим я понял мне надо создать цикл "While Loop" чисто под запись, а из трех других циклах ее убрать?
Если данные терять нельзя, то почему вы их выкидываете? Если температура на улице не изменилась это не значит, что она не была измерена :)

Дело вот в чем сами приборы имеют свой интервал обновления данных у одного 100с, другой 60с,
тогда зачем их опрашивать каждую секунду?
но не врубаюсь как это сделать.
машина состояний
Можно добавить машину состояний с тремя ражимами
- опрос
- ожидание
- пауза
Два последних будут ждать 10-100 мс,а потом проверять условие, и идти на второй круг, или переходить в другое состояние.
что еще за машина состояний?
а ещё на форуме есть волшебная кнопка "цитировать", тогда будет понятнее, где чей текст.
Трэвис, Блум, да и примеры в помощь.
http://www.ni.com/tutorial/7595/en/

Аватара пользователя
BobbyHoby
beginner
beginner
Сообщения: 12
Зарегистрирован: 21 май 2020, 15:38
Репутация: 0
Версия LabVIEW: 16
Контактная информация:

Re: Чтение данных через плату Moxa Cp-134u

Сообщение BobbyHoby »

Artem.spb писал(а):
26 май 2020, 15:58
топорный и один из самых неразумных вариантов. Зачем читать/писать лишнее?
Кстати, в файл пишется всё, хотя на экран отображается только часть. Опять не логично
У каждого цикла своя скорость, это нормально. Может, в файл тоже нет смысла писать с одной скоростью?
Вообще, для чего этот файл: что с ним дальше будет происходить, кто его будет использовать?
Я с вами соглашусь что в файл лучше записывать только когда на данные обновились.
Файл нужен для дальнейшего сравнения с другими измерениями.
Я переместил запись в отдельный цикл, но если у циклов получения данных и цикла записи разное время ожидания то в файл ничего не записывается, а если все одинаково то данные пишутся (ожидание 150 мс)
Есть еще особенность если выставить 1000мс данные не пишутся в файл ))
Если данные терять нельзя, то почему вы их выкидываете? Если температура на улице не изменилась это не значит, что она не была измерена :)
Я их и не выкидываю я лишь не отображаю на график результат одного и того же измерения, а в файл пишется каждую секунду, что тоже не есть хорошо.
Постараюсь объяснить:
допустим надо измерять 1 час, прибор измеряет каждые 100с (то есть он за 100 секунд измерений показывает некое среднее), мне нет необходимости что бы график в течении 100 секунд выводил одно и тоже значение, достаточно его один раз вывести и дождаться пока прибор покажет результат за прошедшие 100с измерения.
тогда зачем их опрашивать каждую секунду?
помогите пожалуйста создать правильный опрос и запись, я уже предвкушаю как я буду вручную переписывать данные на следующей неделе если не разберусь с этим )) :rtfm: :bye:
Вложения
111.txt
(880 байт) 2 скачивания
Запись в цикле.jpg
:help:

Artem.spb

Activity Автор
expert
expert
Сообщения: 1878
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Репутация: 0
Версия LabVIEW: 12-18
Контактная информация:

Re: Чтение данных через плату Moxa Cp-134u

Сообщение Artem.spb »

BobbyHoby писал(а):
26 май 2020, 16:28
Файл нужен для дальнейшего сравнения с другими измерениями.
Если его не будет смотреть человек прям глазами, то нет необходимости писать текст, посмотрите TDMS
достаточно его один раз вывести и дождаться пока прибор покажет результат за прошедшие 100с измерения.
Ключевое слово "дождаться", хотя не понятно, как вы узнаете, что прибор обновил данные. Но в целом ничто не мешает запрашивать с прибора раз в 100с.

вот тут прям написано, что вам нужно
только вместо "5 центов" надо сделать "ожидание", а вместо "10 центов" сделать "пауза"
вот ваши состояния и переходы между ними
state.png
state.png (3.69 КБ) 227 просмотров
На шаге измерения значение через очередь кидается в цикл записи: имя канала, время, само значение.
В цикле записи значения кидаются в файл по мере поступления.

Аватара пользователя
BobbyHoby
beginner
beginner
Сообщения: 12
Зарегистрирован: 21 май 2020, 15:38
Репутация: 0
Версия LabVIEW: 16
Контактная информация:

Re: Чтение данных через плату Moxa Cp-134u

Сообщение BobbyHoby »

Artem.spb писал(а):
26 май 2020, 17:03
Ключевое слово "дождаться", хотя не понятно, как вы узнаете, что прибор обновил данные. Но в целом ничто не мешает запрашивать с прибора раз в 100с.
Спасибо, буду разбираться и пробовать!
:help:

Аватара пользователя
BobbyHoby
beginner
beginner
Сообщения: 12
Зарегистрирован: 21 май 2020, 15:38
Репутация: 0
Версия LabVIEW: 16
Контактная информация:

Re: Чтение данных через плату Moxa Cp-134u

Сообщение BobbyHoby »

Artem.spb писал(а):
26 май 2020, 17:03

вот тут прям написано, что вам нужно
только вместо "5 центов" надо сделать "ожидание", а вместо "10 центов" сделать "пауза"
вот ваши состояния и переходы между ними
state.png
На шаге измерения значение через очередь кидается в цикл записи: имя канала, время, само значение.
В цикле записи значения кидаются в файл по мере поступления.
Простите меня за мою тупость, не могли бы вы на моей блок диаграмме показать как это должно быть ??
:help:

Ответить

Вернуться в «Для чайников»