Страница 26 из 37 ПерваяПервая ... 16242526272836 ... ПоследняяПоследняя
Показано с 251 по 260 из 365

Тема: CoDeSys v2.3

  1. #251

    По умолчанию

    Почемуто у меня рассылка не пришла на видео главу 2 и главу три.. а я неделю жду прям измаялся продолжеения на обучение. На кодесис.РФ трудно оринтероваться где посмотреть бывшие главы, и перемсотреть видео. ((((((

  2. #252

    По умолчанию

    Для обсуждения книги создал отдельную тему:
    http://www.owen.ru/forum/showthread....1337#post91337
    Последний раз редактировалось Николаев Андрей; 20.09.2012 в 21:48.

  3. #253

    По умолчанию

    В программу встроен декрементный счетчик CTD который не работает. Где ошибка подскажите?
    Вложения Вложения

  4. #254
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Вход LOAD не задействован.

  5. #255

    По умолчанию

    Здравствуйте!
    ПЛК считывает информацию с нескольких устройств по модбас. В конфигурации ПЛК есть один мастер сети, и все устройства описаны как универсальные устройства.
    Если, к примеру, одно из устройств перестанет отвечать, как обнаружить, с которым из них произошел сбой связи? Ведь если следующее ответит, то переменная Last Error установится в ноль.

    Или нужно каждый цикл ПЛК читать эту переменную, и если она не равна нулю, тогда Last Address даст нам адрес этого устройства?
    Правильно я думаю, или ошибаюсь ?

    upd

    Сомнения собственно в чем - За один цикл контроллера идет опрос только одного устройства? Или сколько получится ?
    Последний раз редактировалось vasylye; 03.12.2012 в 14:53.

  6. #256

    По умолчанию

    Здравствуйте!
    Время опроса устройств при настройке через конфигурацию к времени цикла не привязано, опрос выполняется в фоновом режиме и зависит от времени выставленном в параметре polling time (подэлмент Universal ModBus Device).

  7. #257

    По умолчанию

    Цитата Сообщение от vasylye Посмотреть сообщение
    Если, к примеру, одно из устройств перестанет отвечать, как обнаружить, с которым из них произошел сбой связи? Ведь если следующее ответит, то переменная Last Error установится в ноль.
    я сделал например вот так. но еще не тестил на стенде. Если найдете ошибку - поправьте.

    IF LAST485ADR=12 AND LAST485ERR=81 THEN TIMER_MZD2(IN:=TRUE, PT:=T#1500ms);
    ELSE MZD2_CON_ERR:=FALSE;
    END_IF;
    TIMER_MZD2();
    MZD2_CON_ERR:=TIMER_MZD2.Q;

    псевдокод: если последний адрес и последний код ошибки равны соответственно 12(адрес вашего устройства) и 81(код ошибки "нет связи"), то запустить таймер TON. Если по прошествии заданного времени PT условие продолжает фиксировать "LAST485ADR=12 AND LAST485ERR=81" То таймер дойдет до конца, выставит выход в true и переменной отвечающей за ошибку связи вашего модуля установится выходное значение таймера. В противном случае (если фиксируется сочитание отличное от заданного условия) переменная ошибки выставляется в FALSE. получается что у вас ничего не затирается и ошибка если есть пишется в спец.переменную
    Чтобы понять рекурсию нужно понять рекурсию

  8. #258

    По умолчанию

    В противном случае (если фиксируется сочитание отличное от заданного условия) переменная ошибки выставляется в FALSE.
    ...но при выполнении следующей строки программы безусловным образом заменится на действующее значение TIMER_MZD2.Q.

    Вот такой вариант "на скорую руку", вроде бы, должен работать правильно:

    IF LAST485ADR=12 AND LAST485ERR=81 THEN
    ERR_ADR12:=TRUE;
    END_IF;
    IF LAST485ADR=12 AND LAST485ERR=0 THEN
    ERR_ADR12:=FALSE;
    END_IF;
    TIMER_MZD2(IN:=ERR_ADR12, PT:=T#1500ms);
    MZD2_CON_ERR:=TIMER_MZD2.Q;

    Вместо булевской переменной ERR_ADR12 можно использовать SR-триггер, смысл от этого не изменится.

  9. #259
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Лаконичнее надо.
    Код:
    TIMER_MZD2(IN := LAST485ADR = 12 AND LAST485ERR = 81, PT := T#1500ms, Q => MZD2_CON_ERR)
    Не первый раз натыкаюсь на индусский код с булевыми на этом форуме. Народ зачем-то городит ветвления ифами и сравнивает булевые переменные с тру и фолс. Как-то так:
    Код:
    IF X = TRUE THEN
    	Y := FALSE;
    END_IF
    IF X = FALSE THEN
    	Y := TRUE;
    END_IF
    
    TIMER(IN := Y);
    И это вместо TIMER(IN := NOT X).
    Последний раз редактировалось Yegor; 04.12.2012 в 11:15.

  10. #260

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Лаконичнее надо.
    Нужно способ мышления вырабатывать такой

    Спасибо всем за направление, в котором нужно думать !

Страница 26 из 37 ПерваяПервая ... 16242526272836 ... ПоследняяПоследняя

Ваши права

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