Цикл в цикле

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

Цикл в цикле

Postby SusLiK495 on 10 Sep 2015, 15:56

Добрый день, есть такая проблема:в программе есть запись в прибор через rs 232. Отправка идёт 3-х разных команд. Соответственно в While loop есть case в котором указаны необходимые команды, но при этом необходимо считывать ответ в реальном времени, но это происходит не корректно, так как чтение само идёт через while loop. В итоге я имею while loop в while loop и строка из прибора(длина которой стабильно 32 байта) читается кусками 23, 7, 19 байтов. Я пытался и с условиями остановки цикла чтения играть (not, or, and) и выносить чтение в отдельную подпрограмму и ставить вне цикла, ничего не выходит. Подскажите пожалуйста, есть ли возможность нормально организовать чтение внутри while loop?
SusLiK495
beginner
beginner
 
Posts: 32
Joined: 18 Oct 2011, 18:10
Location: Москва
LabVIEW Version: 8.6;2012
Karma: 0

Re: Цикл в цикле

Postby Jakob Brontfeyn on 10 Sep 2015, 16:46

начало цикла
передал первую команду, подождал и прочел на нее ответ
передал вторую команду, подождал и прочел на нее ответ
передал третью команду, подождал и прочел на нее ответ
идем в начало цикла
User avatar
Jakob Brontfeyn
expert
expert
 
Posts: 1704
Joined: 28 Feb 2008, 11:01
Medals: 6
Activity (1) Gold (1) Silver (2) Black (2)
Karma: 237
VIP

Re: Цикл в цикле

Postby dadreamer on 10 Sep 2015, 17:45

SusLiK495 wrote:необходимо считывать ответ в реальном времени

Я бы в таком случае сразу же разнёс приём данных и обработку в два параллельных цикла, чтобы исключить влияние одного на другое.
User avatar
dadreamer
professor
professor
 
Posts: 3260
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 816
I/O VIP vision internet

Re: Цикл в цикле

Postby SusLiK495 on 10 Sep 2015, 22:55

Jakob Brontfeyn Сегодня, 17:46

начало цикла
передал первую команду, подождал и прочел на нее ответ
передал вторую команду, подождал и прочел на нее ответ
передал третью команду, подождал и прочел на нее ответ
идем в начало цикла


Спасибо за ответ, дело в том, что программа запускается и в ней выполняется прием данных с датчиков, которые отображаются на лицевой панели, как только происходит выбор условия-происходит отправка. Вот по-сути корректно ответ не приходит на неё после выбора условия, даже выставленной задержкой. Строка всё равно бьется

dadreamer Сегодня, 18:45

Я бы в таком случае сразу же разнёс приём данных и обработку в два параллельных цикла, чтобы исключить влияние одного на другое.


Спасибо за ответ, как я уже написал выше, цикл запускается в теле программы, которая по сути один большой while loop. Как в данном случае разнести их?
SusLiK495
beginner
beginner
 
Posts: 32
Joined: 18 Oct 2011, 18:10
Location: Москва
LabVIEW Version: 8.6;2012
Karma: 0

Re: Цикл в цикле

Postby Borjomy_1 on 10 Sep 2015, 23:27

А что, нельзя заказать сразу прием 32 байт? Зачем цикл какой-то городить?
Выдали строку, заказали прием 32 байт. последовательно.
Attachments
s1.PNG
Borjomy_1
expert
expert
 
Posts: 1867
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 320
VIP

Re: Цикл в цикле

Postby dadreamer on 11 Sep 2015, 08:52

SusLiK495 wrote:Как в данном случае разнести их?

Ну, вот взять хотя бы пример из соседней темы: http://stackoverflow.com/questions/2067 ... k-possible В одном цикле читаете, в другом обрабатываете. Вместо User Event'а можно использовать очередь или нотифаер.
User avatar
dadreamer
professor
professor
 
Posts: 3260
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 816
I/O VIP vision internet

Re: Цикл в цикле

Postby Jakob Brontfeyn on 11 Sep 2015, 16:11

Как то раз, я успешно применил такую методу.
Пусть некое устройство, пусть совершенно спонтанно передает на компорт некие посылки, пусть даже переменной длины.
Но никогда они не идут стык в стык, между ними всегда есть временной интервал несколько десятков милисекунд как минимум.
Я читаю в зикле с задержкой пусть, 2-5 мс количество байтов в буфере приема.
Если скажен 3 раза подряд это одинаковая величина(но не нуль), я интерпретирую это, как конец посылки и считываю буфер.
User avatar
Jakob Brontfeyn
expert
expert
 
Posts: 1704
Joined: 28 Feb 2008, 11:01
Medals: 6
Activity (1) Gold (1) Silver (2) Black (2)
Karma: 237
VIP

Re: Цикл в цикле

Postby Borjomy_1 on 11 Sep 2015, 16:56

Мдя... на что люди только не идут, лишь-бы не организовывать стандартные и надежные решения обмена по последовательному протоколу.
Borjomy_1
expert
expert
 
Posts: 1867
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 320
VIP

Re: Цикл в цикле

Postby Jakob Brontfeyn on 12 Sep 2015, 21:05

А что делать, если источник посылок такой
User avatar
Jakob Brontfeyn
expert
expert
 
Posts: 1704
Joined: 28 Feb 2008, 11:01
Medals: 6
Activity (1) Gold (1) Silver (2) Black (2)
Karma: 237
VIP

Re: Цикл в цикле

Postby Borjomy_1 on 13 Sep 2015, 11:16

А что делать, если источник посылок такой

В посылке должен присутствовать хотя-бы признак начала и код посылки, идентифицирующий ее формат и длину. И каждый вменяемый разработчик должен соблюдать этот необходимый минимум. За несоблюдение этого надо бить по рукам или рублем.
Borjomy_1
expert
expert
 
Posts: 1867
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 320
VIP

Re: Цикл в цикле

Postby Jakob Brontfeyn on 15 Sep 2015, 08:18

Borjomy_1 wrote:
А что делать, если источник посылок такой

В посылке должен присутствовать хотя-бы признак начала и код посылки, идентифицирующий ее формат и длину. И каждый вменяемый разработчик должен соблюдать этот необходимый минимум. За несоблюдение этого надо бить по рукам или рублем.

Ну скажете, тоже , рублем..., только тайваньской и южнокорейской денежной еденицей,
ну долларом и евро еще, их можно бить, то бишь не покупать у них недорогие и надежные
пертативные устройства для лаборатории, со своей собственной цифровой индикацией,
из за "нестандартности" коммуникации по RS232 с компьютером.
download/file.php?id=6801&mode=view
User avatar
Jakob Brontfeyn
expert
expert
 
Posts: 1704
Joined: 28 Feb 2008, 11:01
Medals: 6
Activity (1) Gold (1) Silver (2) Black (2)
Karma: 237
VIP

Re: Цикл в цикле

Postby IvanLis on 15 Sep 2015, 08:51

Jakob Brontfeyn wrote:Ну скажете, тоже , рублем..., только тайваньской и южнокорейской денежной еденицей,
ну долларом и евро еще, их можно бить, то бишь не покупать у них недорогие и надежные
пертативные устройства для лаборатории, со своей собственной цифровой индикацией,
из за "нестандартности" коммуникации по RS232 с компьютером.


Яков, скорее всего, Вы драматизируете ситуацию.
Я не встречал еще ни одного, даже самого простого и дешевого контроллера имеющего внешний интерфейс, в котором бы не использовался "терминатор" (терминальный бит).
Просто нужно посмотреть документацию и описание протокола.
Киньте название и ссылку на описание одного из своих якобы "кривых" устройств, наверняка там все описано.
User avatar
IvanLis
professor
professor
 
Posts: 4757
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 744
hardware VIP bloggers teachers

Re: Цикл в цикле

Postby Jakob Brontfeyn on 15 Sep 2015, 10:23

Иван, нет никакой драматизации ситуации, проекты эти с термометром, гигрометром и pH-метром давно сделаны, закрыты и забыты, не было описаний протоколов, приходилось подслушивать компорты различными методами при работе с фирменным софтом этих приборов, чтобы встроить в свое лабвьюшное приложение.
Из популярных приборов серий ADAM, NUDAM, ICP, которые я уже давно и сейчас активно применяю, структура посылки содержит только признак начала ">" длина бывает разной, признак конца " \r", адрес прибора отправителя отсутствует.
Смотри на картинке справа внизу, там два модуля измерительных I-7019 и один:
релеиный управляющий I-7065
http://www.labviewportal.org/download/f ... &mode=view
Работают эти модули жестко в магистрали RS485, посылка опроса от PC должна быть с адресом.
Мой алгоритм приема вообще не анализирует, символы начала, конца и саму длину посылки, а анализирует только "первую производную" от количества символов в буфере приема и неравенство нулю, это мое ноу-хау. Работает очень хорошо, потому что не считывает не законченную посылку. Берите пользуйтесь.
Как то один пользователь в форуме имел проблемы, кажется это был флюгер с анемометром, это ему очень помогло.
User avatar
Jakob Brontfeyn
expert
expert
 
Posts: 1704
Joined: 28 Feb 2008, 11:01
Medals: 6
Activity (1) Gold (1) Silver (2) Black (2)
Karma: 237
VIP

Re: Цикл в цикле

Postby IvanLis on 15 Sep 2015, 11:26

Jakob Brontfeyn wrote:Из популярных приборов серий ADAM, NUDAM, ICP, которые я уже давно и сейчас активно применяю, структура посылки содержит только признак начала ">" длина бывает разной, признак конца " \r", адрес прибора отправителя отсутствует.
......
Мой алгоритм приема вообще не анализирует, символы начала, конца и саму длину посылки, а анализирует только "первую производную" от количества символов в буфере приема и неравенство нулю, это мое ноу-хау.
Работает очень хорошо, потому что не считывает не законченную посылку. Берите пользуйтесь.


Яков, Вы же не берете и не наматываете на обод лейкопластырь, чтобы было мягче ездить. . А наверное одеваете камеру и покрышку :dntknw: ? Еще например когда-то кишку овцы использовали (https://ru.wikipedia.org/wiki/%D0%9F%D1 ... 0%B8%D0%B2).... Как бы-то ни было, именно они для этого предусмотрены....

Тоже самое, что бы Вы не выдумывали различные "извращения" и не нагружали процессор ненужными потугами, производители оборудования договорились, стандартизировали и используют "терминатор".
При конфигурировании VISA (http://zone.ni.com/reference/en-XX/help ... rial_port/) достаточно обозначить termination char и включить механизм Enable Termination Char...
И по велению... Вашему, VISA без всяких "извращений" (<-- прошу прощения за прямоту, это именно мое мнение) типа побитового чтения, склейки, и т.д. и т.п. VISA Read (http://zone.ni.com/reference/en-XX/help ... visa_read/) будет возвращать именно строку целиком - read buffer (за исключением самой первой).

Он по этому и называется "терминатор", и производитель Вам явно на него указывает и гарантирует, что он больше нигде не встречается в посылке, кроме как в конце строки!
А Вы сами делаете неверно, но это чисто Ваши трудности, но еще и учите этому других!
User avatar
IvanLis
professor
professor
 
Posts: 4757
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 744
hardware VIP bloggers teachers

Re: Цикл в цикле

Postby Jakob Brontfeyn on 15 Sep 2015, 12:10

И где у меня наблюдается побитовое чтение и склейка, что то Вы не так поняли.
User avatar
Jakob Brontfeyn
expert
expert
 
Posts: 1704
Joined: 28 Feb 2008, 11:01
Medals: 6
Activity (1) Gold (1) Silver (2) Black (2)
Karma: 237
VIP

Next

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

Who is online

Users browsing this forum: No registered users and 7 guests

cron