LabView:вопросы и ответы

Обсуждаем цифровые устройства...
Аватара пользователя
GeoEvil
Родился
Сообщения: 12
Зарегистрирован: Ср фев 02, 2011 20:40:20

Re: LabView:вопросы и ответы

Сообщение GeoEvil »

Здраствуйте. Начинаю осваивать LV.
Сталкивался ли кто нибудь с такой задачей?
Есть распространенный контроллер для теплового пункта (например ECL200 фирмы Danfoss).
Имеет порт для включения в систему SCADA и соответствующий OPC сервер (драйвер) для такого подключения.
Можно ли каким то образом для отладки системы подключать такой контроллер к ПК и работать с ним в LabView?

С уважением
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

Re: LabView:вопросы и ответы

Сообщение Roman Venom »

GeoEvil
Можно без проблем, если сможете организовать в лабвью протокол такого драйвера.
Вообще если только начинаете осваивать, то начните с простого. Если сразу на такое кидаться то ничего не выйдет (сам начинающий). Начните со связки МК-РС485/232-лабвью. Потом, уверен, решите эту проблему.
Успех - императив!
orinoko

Re: LabView:вопросы и ответы

Сообщение orinoko »

Тут есть несколько моментов. Если у вас присутствует интерфейс RS232 (модуль ECA81) - то это одно, если RS485 (модуль ECA71) - то совсем другое. Протоколы обмена по этим интерфейсам разные. И OPC-сервер есть для ECA71. Всё необходимое можно найти на сайте Данфос
http://heating.danfoss.com/xxTypex/1672 ... SIT54.html
Через RS232 нужно писать самому. Сразу говорю, что я в глаза не видел эти контроллеры, а всю инфу нашёл и вычитал из инета. Потратил я всего лишь пол-часа, поэтому больше сказать не могу. Но я нашёл описание протоколов на оба интерфейса, так что эта информация не секретная.
Аватара пользователя
GeoEvil
Родился
Сообщения: 12
Зарегистрирован: Ср фев 02, 2011 20:40:20

Re: LabView:вопросы и ответы

Сообщение GeoEvil »

Спасибо за наводку.
Может кто нибудь уже решил эту задачу?
И еще.
Там есть еще двухпроводная шина BUS, куда подключается панель дистанционного управления.
По этой шине нет никакой информации.
Может через нее можно комп подключить?
orinoko

Re: LabView:вопросы и ответы

Сообщение orinoko »

Скорее всего это внутренняя шина управления. И вы не найдёте на неё описание.
Конкретно эту задачу, мне кажется, решало не так много людей, а, тем более, на этом форум, а, тем более, на LV. Но она ничем не отличается от других аналогичных задач. Главное, захотеть в этом разобраться и расписать для себя алгоритм работы, причём конкретный. Разобраться, какие команды подавать, куда, что получаем в ответ, как полученные данные преобразовать в понятное для понимания значение.
Кроме Вас, этого никто не сделает, так как , всё таки, нужно иметь перед собой живое устройство.
Когда ко мне поступает неизвестный прибор, то я сначала пытаюсь наладить связь на "низком" уровне. Я когда то написал терминальную программу (на Delphi), с помощью которой я непосредственно работаю с портом. Определяюсь с регистрами (если MODBUS), командами, я вижу, что получаю, вручную считаю результаты. И когда я уже решаю все коммуникационные вопросы и они у меня расписаны в тетрадке, то тогда я уже начинаю основную реализацию.
Как-то так. У каждого, конечно, свои методы работы. Я вкратце разрисовал свой. Главное - конечный результат.
Аватара пользователя
Сэр Мурр
Модератор
Сообщения: 11169
Зарегистрирован: Чт окт 27, 2005 18:50:07
Откуда: из мест не столь отдалённых

Re: LabView:вопросы и ответы

Сообщение Сэр Мурр »

orinoko объявляется благодарность за поддержку темы о LabView. Слежу за ней, чувствую- надо бы снова заняться..Тем более, что есть внешние устройства от L-card/
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

Re: LabView:вопросы и ответы

Сообщение Roman Venom »

Пытаюсь наладить 2-х байтные посылки на МК. С однобайтной проблем нету. Скомпоновать 2 байта пытался несколько часов самыми разными способами, самый лаконичный из них на картинке. Но есть проблемы:
1. Необходимо сформировать байт из кнопок, в котором они соответствовали бы старшим разрядам. У меня они соответствуют младшим(понимаю, что можно напихать ещё 5 кнопок с низким уровнем, но хочется как-то грамотнее).
2. Когда кнопки имеют высокий уровень, то слово компонуется нормально. Однако если появляется низкий, то соотв. разряд просто исчезает :( . И конечно же не передаётся на МК...
Вложения
Безымянный.JPG
(27.65 КБ) 881 скачивание
Последний раз редактировалось Roman Venom Вс фев 13, 2011 11:56:15, всего редактировалось 1 раз.
Успех - императив!
Аватара пользователя
foxit
Грызет канифоль
Сообщения: 262
Зарегистрирован: Пт ноя 16, 2007 00:40:17
Откуда: Украина

Re: LabView:вопросы и ответы

Сообщение foxit »

Roman Venom писал(а):Пытаюсь наладить 2-х байтные посылки на МК. С однобайтной проблем нету. Скомпоновать 2 байта пытался несколько часов самыми разными способами, самый лаконичный из них на картинке. Но есть проблемы:
1. Необходимо сформировать байт из кнопок, в котором они соответствовали бы старшим разрядам. У меня они соответствуют младшим(понимаю, что можно напихать ещё 5 кнопок с низким уровнем, но хочется как-то грамотнее).
2. Когда кнопки имеют высокий уровень, то слово компонуется нормально. Однако если появляется низкий, то соотв. разряд просто исчезает :( . И конечно же не передаётся на МК...


Расскажи как организовал 1-байтные посылки.
Если можно с примером.
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

Re: LabView:вопросы и ответы

Сообщение Roman Venom »

foxit
Смотри эту тему. Тут уже выкладывались исходники работы с последовательным портом.
Успех - императив!
inkHunter
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб авг 21, 2010 20:44:27
Откуда: Ростов
Контактная информация:

Re: LabView:вопросы и ответы

Сообщение inkHunter »

Приходят последовательно значение с сом порта, нужно записать их в два массива х и у, например приходит 1,2,3,4,5,6
для массива х нужно записать х=[1,3,5] для массива у=[2,4,6]. Вроде для этого есть встроеная функция Decimate 1D Array.
Не могу подключить Decimate 1D Array к VISA Read Function ? Подскажите как можно пожалуйста.
orinoko

Re: LabView:вопросы и ответы

Сообщение orinoko »

Victor Gordienko писал(а):Приходят последовательно значение с сом порта, нужно записать их в два массива х и у, например приходит 1,2,3,4,5,6
для массива х нужно записать х=[1,3,5] для массива у=[2,4,6]. Вроде для этого есть встроеная функция Decimate 1D Array.
Не могу подключить Decimate 1D Array к VISA Read Function ? Подскажите как можно пожалуйста.


1. На выходе "VISA Read Function" имеем строку. Её нужно просто преобразовать в массив байт с помощью "String To Byte Array" (находится в "String -> Conversion")
2. И насчёт функции вы правы. Она именно это и делает.
Последний раз редактировалось orinoko Вс фев 13, 2011 13:15:46, всего редактировалось 1 раз.
orinoko

Re: LabView:вопросы и ответы

Сообщение orinoko »

Roman Venom писал(а):Пытаюсь наладить 2-х байтные посылки на МК. С однобайтной проблем нету. Скомпоновать 2 байта пытался несколько часов самыми разными способами, самый лаконичный из них на картинке. Но есть проблемы:
1. Необходимо сформировать байт из кнопок, в котором они соответствовали бы старшим разрядам. У меня они соответствуют младшим(понимаю, что можно напихать ещё 5 кнопок с низким уровнем, но хочется как-то грамотнее).
2. Когда кнопки имеют высокий уровень, то слово компонуется нормально. Однако если появляется низкий, то соотв. разряд просто исчезает :( . И конечно же не передаётся на МК...


Я ничего не понял, как у вас формируется особенно второй байт. Вы на "Join Number" подаёте массив байтов и байт - и что вы хотите получить ? Включите "лампочку" и пройдитесь пошагово - у вас скорее всего с логикой работы напряжёнка.
Напишите "на пальцах" что у вас есть и что вы хотите послать в ком-порт.
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

Re: LabView:вопросы и ответы

Сообщение Roman Venom »

orinoko
Та вроде с логикой всё нормально...
Объясняю "на пальцах".
Есть 1 байт (его не трогаем).
Есть второй байт. Мне необходимо, чтобы он формировался согласно состояниям трёх кнопок.
Кнопки нажаты:
11100000

Кнопки не нажаты:
00000000

Далее мне необходимо отправить байт1 и байт2 на МК. Я пытался скомпоновать их с помощью ф-ции "split" чтобы получить слово вида байт1_байт2 и отправить его в порт. Наверное можно просто отправлять байты последовательно, но пытался пока реализовать именно так.
Успех - императив!
inkHunter
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб авг 21, 2010 20:44:27
Откуда: Ростов
Контактная информация:

Re: LabView:вопросы и ответы

Сообщение inkHunter »

orinoko писал(а):
Victor Gordienko писал(а):Приходят последовательно значение с сом порта, нужно записать их в два массива х и у, например приходит 1,2,3,4,5,6
для массива х нужно записать х=[1,3,5] для массива у=[2,4,6]. Вроде для этого есть встроеная функция Decimate 1D Array.
Не могу подключить Decimate 1D Array к VISA Read Function ? Подскажите как можно пожалуйста.


1. На выходе "VISA Read Function" имеем строку. Её нужно просто преобразовать в массив байт с помощью "String To Byte Array" (находится в "String -> Conversion")
2. И насчёт функции вы правы. Она именно это и делает.

Да вроде как более удобная функция Decimate 1D Array можно и на больше разбить чем на 2.
с МК отправляю примерно так

i++;
if (i==100)
{i=0;}
printf ("%i\n\r",i);

проблема в том если преобразовать с помощью "String To Byte" получаеться что я например отправляю число 58
то я получаю после "String To Byte" 53 56 10 13 (код АSCII), если использовать Scan from string после "VISA Read Function" то все нормально получаю свои значения переменной i (1,2,3,4.....99,0,1.....) Как можно подключить Decimate 1D Array к Scan from string ?
orinoko

Re: LabView:вопросы и ответы

Сообщение orinoko »

Roman Venom писал(а):orinoko
Та вроде с логикой всё нормально...
Объясняю "на пальцах".
Есть 1 байт (его не трогаем).
Есть второй байт. Мне необходимо, чтобы он формировался согласно состояниям трёх кнопок.
Кнопки нажаты:
11100000

Кнопки не нажаты:
00000000

Далее мне необходимо отправить байт1 и байт2 на МК. Я пытался скомпоновать их с помощью ф-ции "split" чтобы получить слово вида байт1_байт2 и отправить его в порт. Наверное можно просто отправлять байты последовательно, но пытался пока реализовать именно так.


Тогда вам именно так, как на картинке. А у вас ну никак не получится, как вы хотите. Ещё раз хочу обратить ваше внимание на используемую вами ф-ию "Join...". Что же делаете вы:
1. В качестве байта №2 у вас массив (?)
2. Каждое число массива делите на 100 - получаете массив вещественных чисел
3. Массив у вас принудительно округляется до целого байта и преобразовывается сначала в строку, потом опять в массив уже байт (можно было сразу одной ф-ией сконвертить в тип "U8"
4. МАССИВ байт подаётся на вход LO (младшая часть) функции "Join...", на вход HI подаются кнопки (тоже неправильно)
5. После "Join..." мы имеем массив двухбайтных чисел типа word, где старший байт всех чисел - состояние кнопок, а младший - число с вашего массива по очереди.
6. Вы данный массив опять принудительно обрезаете до байта ( при этом теряется старшая часть числа) и уже, преобразуя в строку, отсылаете в порт.
И где тут ваше ТЗ ? Вот поэтому я и намекнул про логику работы. пройдитесь пошагово, и вам многое станет понятней.
Вложения
2bytes.gif
(21.71 КБ) 739 скачиваний
orinoko

Re: LabView:вопросы и ответы

Сообщение orinoko »

Victor Gordienko писал(а):Да вроде как более удобная функция Decimate 1D Array можно и на больше разбить чем на 2.
с МК отправляю примерно так

i++;
if (i==100)
{i=0;}
printf ("%i\n\r",i);

проблема в том если преобразовать с помощью "String To Byte" получаеться что я например отправляю число 58
то я получаю после "String To Byte" 53 56 10 13 (код АSCII), если использовать Scan from string после "VISA Read Function" то все нормально получаю свои значения переменной i (1,2,3,4.....99,0,1.....) Как можно подключить Decimate 1D Array к Scan from string ?


Ну так вы определитесь, что вы посылаете в порт - либо число в виде строки, либо в виде байта. Это две большие разницы, как говорят у нас в Одессе :) . Тогда вам нужно выделить из строки все числа, преобразовать из в массив, а потом делить на группы. Как то так, как на картинке.
(забыл дорисовать проводок между числом 0(неподключенный) и сдвиговым регистром)
Вложения
StringToNumbers.gif
(43.62 КБ) 473 скачивания
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

Re: LabView:вопросы и ответы

Сообщение Roman Venom »

orinoko
Спасибо снова. Пробовал как на картинке. Результат: один байт принимается и обрабатывается нормально, второй не доходит. Идентификацю номера байта делаю в прерывании РХС(атмега16) проверкой 7-го бита(если байт№1, то его 7-й бит всегда=1). Но что-то второй байт никогда не принимается. М
У меня прога на МК работает так:
байт принят-определить номер байта-обработать-отправить байты. Единственное что приходит на ум, это то что прерывание просто не успевает сработать когда приходит байт№2. Может сделать задержку между отправкой байтов...не знаю.

С помощью ф-ции "split" так же получается однобайтная передача.
Успех - императив!
orinoko

Re: LabView:вопросы и ответы

Сообщение orinoko »

Roman Venom писал(а):orinoko
Спасибо снова. Пробовал как на картинке. Результат: один байт принимается и обрабатывается нормально, второй не доходит. Идентификацю номера байта делаю в прерывании РХС(атмега16) проверкой 7-го бита(если байт№1, то его 7-й бит всегда=1). Но что-то второй байт никогда не принимается. М
У меня прога на МК работает так:
байт принят-определить номер байта-обработать-отправить байты. Единственное что приходит на ум, это то что прерывание просто не успевает сработать когда приходит байт№2. Может сделать задержку между отправкой байтов...не знаю.

С помощью ф-ции "split" так же получается однобайтная передача.


У вас опять логическая нестыковочка. Во втором отсылаемом байте бит 7 у вас может быть как "1" так и "0" - это же одна из ваших кнопок - помните?. И как же вы определите, где 1-й байт, а где второй?.
Неужели у вас такие большие обработки, что байты приходят быстрее, чем вы их обрабатываете. Давайте посчитаем - При скорости 9600 время прибытия байта - 1 мсек, и это при отсутствии пауз между байтами. При частоте кварца 8 МГц - это 8000 команд. Не верю (с). У меня МК и не такое вытворяют совместно с обменом данных. Где то у вас хомут в приёме. А что это за прерывание - PXC? Прерывание на приём у меня - "UART RX Complete Handler"

Сначала давайте вы убедитесь, что вы отсылаете то что нужно. Пройдитесь пошагово с "лампочкой". Ну а дальше...
К сожалению, телепатор у меня в ремонте )) .
Покажите всю VI-шку и программу на МК с комментариями, особенно если у вас на Си, я на ассемблере пишу.
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

Re: LabView:вопросы и ответы

Сообщение Roman Venom »

orinoko
У вас опять логическая нестыковочка. Во втором отсылаемом байте бит 7 у вас может быть как "1" так и "0" - это же одна из ваших кнопок - помните?. И как же вы определите, где 1-й байт, а где второй?.

При включении МК он всегда=1... Это просто ради проверки.

Неужели у вас такие большие обработки, что байты приходят быстрее, чем вы их обрабатываете. Давайте посчитаем - При скорости 9600 время прибытия байта - 1 мсек, и это при отсутствии пауз между байтами. При частоте кварца 8 МГц - это 8000 команд. Не верю (с). У меня МК и не такое вытворяют совместно с обменом данных.

Ну как... Параллельно работает таймер,АЦП, активно используется ОЗУ. Задержка чтения порта 50мс, меньше 20мс АЦП не успевает считать. Скорость 19200 бодов, но это не важно, т.к. заполнение буфера юсарта происходит оч. быстро.

А что это за прерывание - PXC? Прерывание на приём у меня - "UART RX Complete Handler"

Угу. В прерывании принимается 2 байта, отсылается один байт, разрешается прерывание ТХС в котором отсылается всё остальное:)

К сожалению, телепатор у меня в ремонте )) .
Покажите всю VI-шку и программу на МК с комментариями, особенно если у вас на Си, я на ассемблере пишу.

Да я сразу понял, что ошибка у меня в ассемблеровском коде, ибо программирую я не намного дольше чем достаю вас с лабвью :))). Увы, спросить больше не у кого.
В общем, УРА! Заработало. Сделал обработку прерывания следующим образом: читаю первый байт, потом жду пока не установится флаг РХС регистра UCSRA. Как только установился - считываю буфер. Таким макаром оно и работает.
П.С. весь цирк чтобы управлять БЛДС с компа всего-навсего. Навязчивая идея :))) Сегодня бы уже наслаждался, но спалил драйвер инвертора (К555ЛА13), а их нет у нас ни в одном магазине :(. Так что теперь заказывать по инету только...
П.П.С. Ещё раз спасибо! Если будете проездом в Николаеве - с меня причитается. Ну и конечно же к вам вопросы по лабвью ещё будут, на этом останавливаться не собираюсь.
Успех - императив!
orinoko

Re: LabView:вопросы и ответы

Сообщение orinoko »

Ну у меня тоже МК не бездельничает: контроллер постоянно работает с 40 датчиками температуры DS18B20, работает АЦП, таймер0, общение с компьютером по несложному протоколу с расчётами и контролем CRC16, и ОЗУ у меня занято примерно 70% и активно используется для хранения данных с датчиков. Всё это хозяйство в количестве 3 моих контроллеров и двух заводских опрашивается по RS-485 системой сбора на LV с формированием отчётов в Excel. Ну там ещё разные функции по мелочи...
(эхх, не мог не похвастать).
Ответить

Вернуться в «Цифровая техника»