Показано с 1 по 10 из 688

Тема: Программирование ПЛК110 [М02] для задач реального времени

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь Аватар для rovki
    Регистрация
    03.01.2010
    Адрес
    Чехов
    Сообщений
    12,150

    По умолчанию

    Из-за смены фаз А и В при реверсе и алгоритме обработки их .
    электронщик до мозга костей и не только

  2. #2

    По умолчанию

    Цитата Сообщение от rovki Посмотреть сообщение
    Из-за смены фаз А и В при реверсе и алгоритме обработки их .
    Можете на пальцах объяснить?

    Попозже добавлю тест, который будет случайным образом крутить фазы A/B (ну, в смысле, виртуальный энкодер будет крутиться в случайных направлениях, и его ABZ будут подаваться на вход тестируемому блоку) и проверять, что распознаётся правильно.

    Такой тест работает:
    Код:
        abz.setA(cpu, 1); // A: 0 -> 1
        executeBlock(cpu);
        assertEquals(abz.getCounter(cpu), 1, "counter");
        assertEquals(abz.getPosition(cpu), ((-1) & 0xffff), "position");
        assertEquals(abz.getZeroDetected(cpu), 0, "zero detected");
    
        executeBlock(cpu); // Если входы не менялись, выходы меняться не должны
        assertEquals(abz.getCounter(cpu), 1, "counter");
        assertEquals(abz.getPosition(cpu), ((-1) & 0xffff), "position");
        assertEquals(abz.getZeroDetected(cpu), 0, "zero detected");
    
        abz.setB(cpu, 1); // B: 0 -> 1
        executeBlock(cpu);
        assertEquals(abz.getCounter(cpu), 2, "counter");
        assertEquals(abz.getPosition(cpu), ((-2) & 0xffff), "position");
        assertEquals(abz.getZeroDetected(cpu), 0, "zero detected");
    
        abz.setA(cpu, 0); // A: 1 -> 0
        executeBlock(cpu);
        assertEquals(abz.getCounter(cpu), 3, "counter");
        assertEquals(abz.getPosition(cpu), ((-3) & 0xffff), "position");
        assertEquals(abz.getZeroDetected(cpu), 0, "zero detected");
    
        // Теперь крутим обратно
        abz.setA(cpu, 1); // A: 0 -> 1
        executeBlock(cpu);
        assertEquals(abz.getCounter(cpu), 4, "counter");
        assertEquals(abz.getPosition(cpu), ((-2) & 0xffff), "position");
        assertEquals(abz.getZeroDetected(cpu), 0, "zero detected");
    
        abz.setB(cpu, 0); // B: 1 -> 0
        executeBlock(cpu); // Если входы не менялись, выходы меняться не должны
        assertEquals(abz.getCounter(cpu), 5, "counter");
        assertEquals(abz.getPosition(cpu), ((-1) & 0xffff), "position");
        assertEquals(abz.getZeroDetected(cpu), 0, "zero detected");
    
        // Теперь снова меняем направление
    
        abz.setB(cpu, 1); // B: 0 -> 1
        executeBlock(cpu); // Если входы не менялись, выходы меняться не должны
        assertEquals(abz.getCounter(cpu), 6, "counter");
        assertEquals(abz.getPosition(cpu), ((-2) & 0xffff), "position");
        assertEquals(abz.getZeroDetected(cpu), 0, "zero detected");
    
        abz.setA(cpu, 0); // A: 1 -> 0
        executeBlock(cpu);
        assertEquals(abz.getCounter(cpu), 7, "counter");
        assertEquals(abz.getPosition(cpu), ((-3) & 0xffff), "position");
        assertEquals(abz.getZeroDetected(cpu), 0, "zero detected");
    Последний раз редактировалось Владимир Ситников; 07.10.2016 в 16:45.

  3. #3
    Пользователь
    Регистрация
    24.07.2012
    Адрес
    Россия
    Сообщений
    1,492

    По умолчанию

    Владимир, объясните на пальцах как java даёт команды в плк110?
    Через сеть?

  4. #4

    По умолчанию

    Цитата Сообщение от Scream Посмотреть сообщение
    Владимир, объясните на пальцах как java даёт команды в плк110?
    Через сеть?
    Объясню: пока ещё никак.
    Код выше работает на эмуляторе PRU сопроцессора.

    Эмулятор повторяет логику процессора (регистры, память, IO), поэтому мне не нужен ПЛК, чтобы тестировать логику ФБ. Тем не менее, тут тестируется почти тот же самый бинарный код, который будет загружен в ПЛК.

    До тестирования "в железе" ещё доберёмся, но попозже
    Последний раз редактировалось Владимир Ситников; 07.10.2016 в 17:16.

  5. #5
    Пользователь Аватар для rovki
    Регистрация
    03.01.2010
    Адрес
    Чехов
    Сообщений
    12,150

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Можете на пальцах объяснить?

    ]
    Приходит фаза А ,а В сигнала еще нет ...и приходит команда на реверс или есть А и В и приходит команда не реверс ...То есть может потеряться импульс с энкодера при реверсе ...
    электронщик до мозга костей и не только

  6. #6

    По умолчанию

    Цитата Сообщение от rovki Посмотреть сообщение
    Приходит фаза А ,а В сигнала еще нет ...и приходит команда на реверс
    Начальные состояния: 0,0.

    Код:
        // Приходит фаза A; B ещё нет
        abz.setA(cpu, 1); executeBlock(cpu);
        System.out.println("position = " + (short)(abz.getPosition(cpu)) + ", counter = " + abz.getCounter(cpu));
    
        // Реверс -- фаза A пропала, B тоже молчит
        abz.setA(cpu, 0); executeBlock(cpu);
        System.out.println("position = " + (short)(abz.getPosition(cpu)) + ", counter = " + abz.getCounter(cpu));
    
    Вывод:
    
    position = -1, counter = 1 
    position = 0, counter = 2
    
    Если при исходных нулях моргнёт и пропадёт фаза B, то будет такой вывод:
    position = 1, counter = 1
    position = 0, counter = 2
    Импульсы не пропали. Сначала один посчитался как -1, потом рервес и он учёлся как +1 -- в итоге 0.


    Цитата Сообщение от rovki Посмотреть сообщение
    есть А и В и приходит команда не реверс ...То есть может потеряться импульс с энкодера при реверсе ...
    Тут немного непонятно. Что значит "есть A и B и команда на реверс". В каком порядке должны мигать A/B?
    Последний раз редактировалось Владимир Ситников; 07.10.2016 в 17:03.

Похожие темы

  1. Ответов: 38
    Последнее сообщение: 24.01.2022, 11:56
  2. Ответов: 10
    Последнее сообщение: 11.06.2021, 14:55
  3. часы реального времени
    от vetaly в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 28.08.2015, 16:21
  4. Таймер реального времени УТ1-РiС
    от ser10 в разделе Трёп (Курилка)
    Ответов: 0
    Последнее сообщение: 16.09.2010, 11:24

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •