Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 11

Тема: ПЛК110-24.30.Р-М и 4 энкодера

  1. #1

    Question ПЛК110-24.30.Р-М и 4 энкодера

    Добрый день!
    Понадобилось в рабочий код, в котором есть обработка четырех инкрементальных энкодеров, добавить работу по ТСР.
    Энкодеры подключены к DI3-DI10.
    1.jpg
    Вся программа расположена в PLC_PRG и без ТСР энкодеры обрабатываются без проблем.
    Вот фрагмент опроса энкодеров
    1:
    Код:
    CASE enc_nom OF
    	1 :	enc_maska := 2#00001100; enc_sdvig := 2; enc_newState := ADR(g_enc2NewState); enc_prevState := ADR(g_enc2PrevState); enc_bitColor := BIT1; enc_tic := ADR(gr_Tik2);
    	2 :	enc_maska := 2#00110000; enc_sdvig := 4; enc_newState := ADR(g_enc3NewState); enc_prevState := ADR(g_enc3PrevState); enc_bitColor := BIT2; enc_tic := ADR(gr_Tik3);
    	3 :	enc_maska := 2#11000000; enc_sdvig := 6; enc_newState := ADR(g_enc4NewState); enc_prevState := ADR(g_enc4PrevState); enc_bitColor := BIT3; enc_tic := ADR(gr_Tik4);
    ELSE
    	enc_maska := 2#00000011; enc_sdvig := 0; enc_newState := ADR(g_enc1NewState); enc_prevState := ADR(g_enc1PrevState); enc_bitColor := BIT0; enc_tic := ADR(gr_Tik1); enc_nom := 0;
    END_CASE
    
    	enc_newState^ := in AND enc_maska; (* считали порт энкодера и выделили состояние энкодера *)
    	IF enc_sdvig <> 0 THEN enc_newState^ := SHR( enc_newState^, enc_sdvig ); END_IF
    	IF enc_newState^ <> enc_prevState^ THEN
    		IF enc_newState^ = 0 THEN
    			IF enc_prevState^ = 2 THEN  bChObor[enc_nom] := bChObor[enc_nom] + 1;	IF bChObor[enc_nom] * enc_tic^ > gr_maxZad THEN bChObor[enc_nom] := bChObor[enc_nom] - 1; END_IF
    			ELSIF enc_prevState^ = 1 THEN
    				bChObor[enc_nom] := bChObor[enc_nom] - 1;
    				IF bChObor[enc_nom] < 0 THEN bChObor[enc_nom] := 0; END_IF
    			END_IF
    		END_IF
    		enc_prevState^ := enc_newState^;
    	END_IF
    	enc_nom := enc_nom +1;

    Как только добавляю обработку ТСР, то нужно очень медленно крутить энкодеры, чтоб они изменяли значение.
    Пробовал разбить на части и перенести весь код в "Конфигурация задач" - вообще перестает обрабатывать энкодеры!
    Удалил все, кроме обработки энкодеров в "Конфигурация задач" и пробовал разные варианты "тип": циклическая, свободная и т.д. - не работает!
    По идее, если в "Конфигурация задач" есть единственная задача с "тип" "свободная", то это должно быть равнозначно выполнению в PLC_PRG?
    Пробовал обработку поцепить на таймер в "Системные события" и поиграться с временем срабатывания таймера - безрезультатно!
    В общем не пойму куда копать...

  2. #2

    По умолчанию

    Обмен по TCP сжирает процессорное время. Скорее всего нет из этого никакого выхода в твоем случае. Время цикла какое у тебя стоит ?
    Последний раз редактировалось IVM; 13.04.2022 в 15:50.

  3. #3

    По умолчанию

    Цитата Сообщение от IVM Посмотреть сообщение
    Обмен по TCP сжирает процессорное время. Скорее всего нет из этого никакого выхода в твоем случае
    А как же прерывание по таймеру? Неужели обработка ТСР его отрубает?
    Цитата Сообщение от IVM Посмотреть сообщение
    Время цикла какое у тебя стоит ?
    Пробовал менять - не помогло. Сейчас стоит 1мс

  4. #4

    По умолчанию

    Код для энкодеров у тебя какой-то мудреный. Попробуй его упростить и сократить.

  5. #5

    По умолчанию

    Мудреный т.к. кроме энкодера там куча всего...
    Выбрасывал до минимума чтоб опрашивать один энкодер - все равно не работает!
    А в PLC_PRG работает!
    Ладно, напишу с нуля для одного энкодера и начну эксперименты заново...

  6. #6
    Пользователь
    Регистрация
    31.01.2019
    Адрес
    РФ/РБ
    Сообщений
    851

    По умолчанию

    Цитата Сообщение от -=Vovka=- Посмотреть сообщение
    А как же прерывание по таймеру? Неужели обработка ТСР его отрубает?

    Пробовал менять - не помогло. Сейчас стоит 1мс
    Вам, при обработке энкодера надо прерывание не по таймеру, а по быстрому входу.

    Зайдите в отладку, посмотрите, сколько времени каждая задача берет.

  7. #7

    По умолчанию

    Цитата Сообщение от keysansa Посмотреть сообщение
    Вам, при обработке энкодера надо прерывание не по таймеру, а по быстрому входу.
    А как для четырех энкодеров задействовать два имеющихся быстрых входа?

  8. #8
    Пользователь
    Регистрация
    31.01.2019
    Адрес
    РФ/РБ
    Сообщений
    851

    По умолчанию

    Цитата Сообщение от -=Vovka=- Посмотреть сообщение
    А как для четырех энкодеров задействовать два имеющихся быстрых входа?
    Вот тут вы и ответили на свой же вопрос )

  9. #9

    По умолчанию

    Цитата Сообщение от keysansa Посмотреть сообщение
    Вот тут вы и ответили на свой же вопрос )
    не понял...

  10. #10
    Пользователь
    Регистрация
    31.01.2019
    Адрес
    РФ/РБ
    Сообщений
    851

    По умолчанию

    Если вам нужна быстрая реакция на энкодеры, вам нужны быстрые входы.

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. Ответов: 27
    Последнее сообщение: 02.11.2020, 16:22
  2. ПЛК110 (М02) подключение энкодера как счетчика
    от denkrauss в разделе ПЛК1хх [М02]
    Ответов: 2
    Последнее сообщение: 02.06.2020, 13:33
  3. Ответов: 5
    Последнее сообщение: 11.03.2019, 16:13
  4. Модуль энкодера ПЛК110 смещение нуля
    от enyuzer в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 08.02.2018, 09:57
  5. Настройки энкодера в ПЛК110
    от aserr в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 01.04.2012, 23:30

Метки этой темы

Ваши права

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