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

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

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

orinoko
вы число 200 вставили на вход "количество байт". Таким образом функция "VISA Read" не выйдет, пока не придут все 200 байт либо по таймауту. При таймауте на выходе Error Out будет ошибка. Включите трассировку и увидите. если вы точнео знаете, сколько байт должно вернуться, то вместо 200 напишите. И как минимум 1 символ нужно послать. Дальше - что у вас посылает контроллер - данные в виде байт (BIN) или символьную строку. Если в виде байт, то это 2 байта (прикладываю ВИшку). И в цикл нужно вставить Wait until next ms (Метроном) и число 100 на вход. (Это задержка повтора цикла)
Спасибо, буду разбираться.

К примеру у меня есть готовый проект (по работе), который включает как раз такую связку (40*DS18B20 - ATmega16 - RS485 - LabView (графики, расчёты средних значений, запись в БД, експорт в Ексель)). Но всё это выкладывать... Во-первых накладно, а во вторых - это коммерческий проект.
Гм. Круто. Надеюсь, мой некоммерческий проект выльется во что-то похожее.
Успех - императив!
Реклама
orinoko

Сообщение orinoko »

Если интересует, могу подробно , но на словах, рассказать как это всё у меня происходит, начиная от датчиков.
Реклама
Грызет канифоль
Аватара пользователя
Сообщения: 262
Зарегистрирован: Пт ноя 16, 2007 00:40:17
Откуда: Украина

Сообщение foxit »

orinoko писал(а):Если интересует, могу подробно , но на словах, рассказать как это всё у меня происходит, начиная от датчиков.
Конечно интересует
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб авг 21, 2010 20:44:27
Откуда: Ростов

Сообщение inkHunter »

orinoko писал(а):вы число 200 вставили на вход "количество байт". Таким образом функция "VISA Read" не выйдет, пока не придут все 200 байт либо по таймауту. При таймауте на выходе Error Out будет ошибка. Включите трассировку и увидите. если вы точнео знаете, сколько байт должно вернуться, то вместо 200 напишите. И как минимум 1 символ нужно послать. Дальше - что у вас посылает контроллер - данные в виде байт (BIN) или символьную строку. Если в виде байт, то это 2 байта (прикладываю ВИшку). И в цикл нужно вставить Wait until next ms (Метроном) и число 100 на вход. (Это задержка повтора цикла)
К примеру у меня есть готовый проект (по работе), который включает как раз такую связку (40*DS18B20 - ATmega16 - RS485 - LabView (графики, расчёты средних значений, запись в БД, експорт в Ексель)). Но всё это выкладывать... Во-первых накладно, а во вторых - это коммерческий проект.
переделати под 9 версию пожалуйста ...
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
orinoko

Сообщение orinoko »

Вот для версии 9
Реклама
Модератор
Аватара пользователя
Сообщения: 11169
Зарегистрирован: Чт окт 27, 2005 18:50:07
Откуда: из мест не столь отдалённых

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

orinoko писал(а):Хотелось бы попросить Администратора, чтобы он разрешил добавлять файлы типа *.vi А то упаковка - это лишнее телодвижение. А это файл неисполняемый. Исходник, так сказать.
не надо упаковывать- достаточно заменить расширение на допустимое, и в заголовке сообщения указать - на какое расширение заменить при просмотре.
Реклама
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб авг 21, 2010 20:44:27
Откуда: Ростов

Сообщение inkHunter »

Вот сделал по отдельности (сильно не ругайте прогу вижу 2 раз ), выставляю скорость , номер порта, только как то старано она работает, помогите плиз )
Вложения
terminal_RS232.rar
(9.79 КБ) 404 скачивания
Контактная информация:
orinoko

Сообщение orinoko »

Для начала я бы посоветовал всё таки внимательно почитать уроки по LV. Начать изучение LV я бы посоветовал с "LabVIEW Basic I Course". Он на русском. Можно найти. И также есть цикл уроков журнала Пикад. Можно скачать с сайта Пикада. Я, конечно, понимаю, что руский человек инструкцию читает только в двух случаях - когда нечего читать и когда всё сломалось. :) . Программирование на LV отличается от текстовых языков. Нельзя применять их методы к LV.
А теперь к вашему терминалу. Во-первых, всегда (как правило) используйте провод ошибки. Таким образом всегда можно узнать где и что случилось и сама программа будет меньше глючить. Потому что если в предыдущем блоке произошла ошибка, то и последующие об этом будут знать и не выполнять критические части своей программы. А так как у вас - независимо от возникшей ошибки следующие блоки пытаются отработать. Дальше - у вас два отдельных референса на один порт. Так работать не будет. Изучите внимательно сначала примеры. Главное - понять, а не бездумно скопировать.
И ещё. Опишите, что должен делать терминал. Что он должен получить в ответ.
Во вложении вариант терминала для приёма эха. Нужно соединить 2 и 3 ножки СОМ-порта.
orinoko

Сообщение orinoko »

Начинаем с датчиков. У меня используется на все датчики 3 вывода порта С, таким образом имеем три группы датчиков. Линии подтянуты к +5В резистором 3,3 кОм. Соединение только по 3-проводному кабелю (общий, +5В, данные). Длина кабеля может достигать 10-15 метров. Идеально подходит UTP, а ещё лучше STP.И экран подключить к общему проводу. Обращение к датчикам происходит по их серийным номерам. Считывать их можно, подключая один на линию, и подавая команду «READ_ROM» (0х33). Полученные 8 байт нужно запомнить и они в такой же последовательности и должны передаваться при запросах. Все серийные номера датчиков и номер канала, к которому он подключен, хранятся в EEPROM.
Так как у нас датчиков много, то обмен с ними не должен мешать остальным функциям МК. Сначала для каждого датчика подаём команду «CONVERT» (0x44). Взводим таймер на 800 мс. По прерыванию этого таймера начинаем читать данные с каждого датчика и запоминаем в памяти. По окончании взводим таймер на время паузы между измерениями (200-500 мс). После чего всё повторяется.
Конечно, если у вас всего один датчик, то и городить этот пароход не имеет смысла.
orinoko

Сообщение orinoko »

Вот пока все интересующимся учебники по LV
http://soft-hard.ucoz.ua/news/labview_b ... 9-11-13-47
И пикадовские уроки
http://www.picad.com.ua/lesson.htm
orinoko

Сообщение orinoko »

А теперь попробуем МК сконнектить с LV. Сначала определимся хоть с каким ни каким протоколом обмена. Будем сразу приучаться к методу "запрос-ответ". Упростим задачу. Компьютер должен послать команду - пусть это будет "Т" (английское). В ответ МК должен послать пакет о температурах всех датчиков. Данные одного датчика занимают 4 байта (у меня так) 1-й байт - порядковый номер, 2-й байт - состояние датчика, 3 и 4 байты - температура (как принято от самого датчика). Мы не будем пока заморачиваться с адресацией и обойдёмся без расчёта CRC.
Теперь наша задача в LV:
1. Послать запрос.
2. Принять весь пакет.
3. Раскидать в массив температур
это для начала...
orinoko

Сообщение orinoko »

Вот набросал для начала процесс обмена LV с внешним устройством (нашим контроллером). Исходник и картинку диаграммы (кто просто хочет поглядеть).
А теперь я буду ждать высказываний от заинтересованных товарищей. А то что-то все замолчали.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

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

orinoko
Спасибо. Установил версю 10. Работать приятнее чем в 6.

Не замолчали:). Пошли учиться наверное. Вопросы безусловно появятся, но попозже, когда накопятся более-менее нормальные знания по программе.
Успех - императив!
Грызет канифоль
Аватара пользователя
Сообщения: 262
Зарегистрирован: Пт ноя 16, 2007 00:40:17
Откуда: Украина

Сообщение foxit »

orinoko писал(а): А теперь я буду ждать высказываний от заинтересованных товарищей. А то что-то все замолчали.
Привет
У меня проблемы с интернетом.
Как только все устаканится, буду активно участвовать.

Расскажите про программу МК и как все данные упаковывать с помощью протокола.
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Что касается протокола - то в 90% случаев это сугубо личное представление данных.
Основной задачей протокола является формализация представления информации. Протокол в данном случае выступает правилом кодирования, передачи, приема и декодирования информации.
Условно протоколы можно разделить на бинарные и текстовые.
Сами протоколы состоят из информативной и служебной частей.
Служебная часть отвечает за признаки начала передачи, разделители и окончания. В качестве окончаний часто выступают т.н. контрольные суммы.
Все данные помещаются в информативную часть.
Данные в бинарном протоколе предсталяются более короткими нежели в текстовых.
Для примера. Пусть желаем передать значение в пределах от 0 до 100. В бинарном представлении данные займут 1 байт, точнее 7 бит.
В текстовом представлении потребуется уже 3 байта - по одному на символ.
Ну и напоследок, хочется заметить, что формирование контрольной суммы в текстовых протоколах, желательно представлять текстом, а не бинарными данными (иногда бывает и так).
наверное на этом ликбез по протоколу можно считать завершенным.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
orinoko

Сообщение orinoko »

Meteor, спасибо помощь в объяснениях! Реализация протокола - сугубо личное. Хочу также отметить, что свой пример я привёл для того, чтобы можно было при расшифровке пакета в LV на что-то опираться, на конкретный пример, а не рассказывать о сферических символах в вакууме :)
Завтра продолжим формировать данные в LV
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

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

мне необходимо получать данные либо в бинарном либо в 16-ричном коде.
Управляющее значение необходимо задавать в десятичном, потом кодировать в 2х8 бит бинарного.
С помощью каких функций это лучше сделать?
Успех - императив!
orinoko

Сообщение orinoko »

foxit писал(а): Расскажите про программу МК и как все данные упаковывать с помощью протокола.
В МК должен быть выделен буфер для хранения данных о температурах каждого датчика(это 1 и 2 принятые байты от датчика) и его состоянии (всего по 4 байта на датчик). Состояний у датчика может быть два - есть датчик(напр. 0x00) и нет датчика (напр. 0x7F). В процессе опроса датчиков это буфер заполняется значениями. по команде от компьютера весь этот буфер просто отсылается без изменений. Ничего упаковывать не надо. Я бы показал свою реализацию, но во-первых, у меня всё на асме, а во-вторых, протокол у меня более расширенный и с наскока там непонятно совсем. Но идея такая же. Но только я заполняю буфер передачи перед отсылкой, собирая данные последовательно в кучу. И по прерываниям "UDR_Empty" отсылаю весь буфер, по мере отсылки идёт расчёт CRC16, после отсылки всего буфера досылаю 2 байта CRC.
orinoko

Сообщение orinoko »

Roman Venom писал(а):мне необходимо получать данные либо в бинарном либо в 16-ричном коде.
Управляющее значение необходимо задавать в десятичном, потом кодировать в 2х8 бит бинарного.
С помощью каких функций это лучше сделать?
То есть вам нужно отослать с компьютера двухбайтное число в виде двух отдельных байтов?
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

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

orinoko
То есть вам нужно отослать с компьютера двухбайтное число в виде двух отдельных байтов?
Ну я рассматриваю 2 варианта. Либо посылка десятичного байта, а потом его кодирование в двухбайтное уже в МК, либо кодирование в лабвью и отправка уже 2х8 байт.
Успех - императив!
Ответить

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