Помогите синхронизировать VISA

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы

Помогите синхронизировать VISA

Postby Alcamo on 05 Nov 2017, 20:19

Здравствуйте.
У меня есть ардуино Мега . Я к нему подключил энкодер и пытаюсь получить с него сигнал в Labview для построения системы управления. В ардуино я залил код для энкодера:
Code: Select all
/* Rotary encoder with attachInterrupt

Counts pulses from an incremental encoder and put the result in variable counter.
Taking also into account the direction and counts down when the rotor rotates in
the other direction.

This code is used attachInterrupt 0 and 1 which are pins 2 and 3 moust Arduino.
For more information about attachInterrupt see:
http://arduino.cc/en/Reference/AttachInterrupt

created 2014
by Ben-Tommy Eriksen

https://github.com/BenTommyE/BenRotaryEncoder

*/

// Encoder connect to digitalpin 2 and 3 on the Arduino.

int counter = 0;  //This variable will increase or decrease depending on the rotation of encoder

void setup() {
  Serial.begin (9600);

  pinMode(2, INPUT);           // set pin to input
  pinMode(3, INPUT);           // set pin to input
 
  digitalWrite(2, HIGH);       // turn on pullup resistors
  digitalWrite(3, HIGH);       // turn on pullup resistors


  //Setting up interrupt
  //A rising pulse from encodenren activated ai0(). AttachInterrupt 0 is DigitalPin nr 2 on moust Arduino.
  attachInterrupt(0, ai0, RISING);
 
  //B rising pulse from encodenren activated ai1(). AttachInterrupt 1 is DigitalPin nr 3 on moust Arduino.
  attachInterrupt(1, ai1, RISING);
}

void loop() {
  // Send the value of counter
  Serial.println (counter);

}

void ai0() {
  // ai0 is activated if DigitalPin nr 2 is going from LOW to HIGH
  // Check pin 3 to determine the direction
  if(digitalRead(3)==LOW) {
    counter++;
  }else{
    counter--;
  }
}

void ai1() {
  // ai0 is activated if DigitalPin nr 3 is going from LOW to HIGH
  // Check with pin 2 to determine the direction
  if(digitalRead(2)==LOW) {
    counter--;
  }else{
    counter++;
  }
}


Далее при помощи VISA я получаю сигнал в Labview.

Но мне необходимо задавать также программные траектории (например синусоиду), строить регулятор и прочее. Я пытаюсь сделать это в одном loop. Но при попытке сгенерить синусоиду в реальном времени и зачитать VISA ничего не получается. У меня это получается только в раздельных Loop. В одном же Loop я вижу свою синусоиду, но сигнал с энкодера замирает и через какие-то промежутки времени выдает разные значения с большими задержками.

Вопрос: Как мне подружить это дело? синхронизировать эти 2 сигнала, чтобы к ним можно было применять всякую разную математику в дальнейшем.
Прилагаю VI.
Attachments
encoder2.vi
(58.62 KiB) Downloaded 18 times
Alcamo
interested
interested
 
Posts: 2
Joined: 05 Nov 2017, 19:58
LabVIEW Version: 2015
Karma: 0

Re: Помогите синхронизировать VISA

Postby Alcamo on 05 Nov 2017, 21:03

Когда я нажимаю 'Simulate acquision timing' в блоке симуляции синуса, то синус показывается в реальном времени, а данные с VISA вообще не идут. Но если я переключу в блоке на Run as fast as possible, то данные с VISA идут нормально, а синус очень быстро пролетает. Что мне с этим делать?
Alcamo
interested
interested
 
Posts: 2
Joined: 05 Nov 2017, 19:58
LabVIEW Version: 2015
Karma: 0

Re: Помогите синхронизировать VISA

Postby bartex on 08 Nov 2017, 20:59

Alcamo
Что мне с этим делать?


Попробуйте поменять настройки в блоке симуляции синуса.
Во всяком случае, у меня заработало, правда я вместо энкодера
на 2 и 3 ногу Ардуино вешал кнопки :think:
Attachments
Энкодер2.PNG
encoder2-1.vi
(38.86 KiB) Downloaded 6 times
bartex
user
user
 
Posts: 73
Joined: 14 Apr 2014, 21:09
Location: Санкт-Петербург
LabVIEW Version: 2015
Karma: 16

Re: Помогите синхронизировать VISA

Postby Alex Dem on 08 Nov 2017, 21:59

Alcamo, попробуйте организовать чтение из порта, как в примере.
Attachments
Безымянный.png
Безымянный.png (9.35 KiB) Viewed 367 times
Alex Dem
junior
junior
 
Posts: 55
Joined: 06 May 2015, 22:24
LabVIEW Version: 2014
Karma: 7

Re: Помогите синхронизировать VISA

Postby Borjomy_1 on 10 Nov 2017, 00:15

Сколько раз повторять... Не используют "Bytes at Port" при работе с терминальным символом! Забудьте вы эту функцию!
Borjomy_1
expert
expert
 
Posts: 1765
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 309
VIP

Re: Помогите синхронизировать VISA

Postby Blackman on 10 Nov 2017, 01:39

Borjomy_1 wrote:Сколько раз повторять... Не используют "Bytes at Port" при работе с терминальным символом! Забудьте вы эту функцию!

Пусть в порт принято 8 байт SOS\nHELP :help:
1. Проверяем BytesAtPort=8
2. Функция чтения 8-ми байтов возвращает 4 байта SOS\n
3. Проверяем BytesAtPort=4
4. Функция чтения 4-х байт возвращает 4 байта HELP
5. Проверяем BytesAtPort=0
6. Функция чтения 0 байт возвращает 0 байтов - пустая строка и т.д.
И где здесь "криминал"? :wink:
Blackman
leader
leader
 
Posts: 684
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 170

Re: Помогите синхронизировать VISA

Postby Vitekkz88 on 10 Nov 2017, 07:03

"Всё зависит от задачи и требований!" - универсальное заклинание на случай важных переговоров :crazy:
Attachments
Cat.png
Cat.png (17.54 KiB) Viewed 324 times
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
User avatar
Vitekkz88
leader
leader
 
Posts: 945
Joined: 21 Jan 2014, 15:45
Location: Томск
Medals: 3
Activity (1) Silver (1) Автор (1)
LabVIEW Version: 12,13,14
Karma: 258
hardware I/O VIP

Re: Помогите синхронизировать VISA

Postby dadreamer on 10 Nov 2017, 07:42

Я в новых проектах перестал использовать Bytes At Port. Но иногда возникают другие "грабли" - если таймаут операций чтения-записи делать меньше 300 мс, начинают теряться символы в пакетах. Хотя на 9600 должно всё стабильно доходить. Такое даже с дублирующей сессией. А с Bytes At Port такого почему-то не происходит.

Кстати, ТС решил уже свою проблему - перешёл на LIFA. В личке написал.
User avatar
dadreamer
doctor
doctor
 
Posts: 2894
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2017
Karma: 708
I/O VIP vision internet

Re: Помогите синхронизировать VISA

Postby bartex on 11 Nov 2017, 00:22

Сейчас ради любопытства сравнил частоты обмена данными (LoopRate) для LINX и VISA при работе с Ардуино UNO (с генератором синусоиды внутри цикла - чтобы из темы не выпасть)

LINX при опросе 2 каналов - примерно 165 Гц
VISA при совместной работе со скетчем из начала темы - примерно 320 Гц
Эх, было бы у LINX хотя бы 1000 Гц, цены бы ей не было :)
Attachments
LoopRate.PNG
bartex
user
user
 
Posts: 73
Joined: 14 Apr 2014, 21:09
Location: Санкт-Петербург
LabVIEW Version: 2015
Karma: 16

Re: Помогите синхронизировать VISA

Postby Borjomy_1 on 11 Nov 2017, 13:50

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

Re: Помогите синхронизировать VISA

Postby Borjomy_1 on 11 Nov 2017, 13:54

Blackman wrote:
Borjomy_1 wrote:Сколько раз повторять... Не используют "Bytes at Port" при работе с терминальным символом! Забудьте вы эту функцию!

Пусть в порт принято 8 байт SOS\nHELP :help:
1. Проверяем BytesAtPort=8
2. Функция чтения 8-ми байтов возвращает 4 байта SOS\n
3. Проверяем BytesAtPort=4
4. Функция чтения 4-х байт возвращает 4 байта HELP
5. Проверяем BytesAtPort=0
6. Функция чтения 0 байт возвращает 0 байтов - пустая строка и т.д.
И где здесь "криминал"? :wink:

Криминал в том, что нет никакой гарантии, что в момент опроса bytes at Port придет вся посылка.
Не надо путать теплое с мягким. Если протокол с терминальным символом, то никакого bytes at Port. Если протокол допускает и без терминального, то программисту надо отрывать руки. Хрень на придумывают, а потом героически борятся.
Borjomy_1
expert
expert
 
Posts: 1765
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 309
VIP


Return to Коммуникация с приборами

Who is online

Users browsing this forum: No registered users and 4 guests

cron