Страница 27 из 37 ПерваяПервая ... 172526272829 ... ПоследняяПоследняя
Показано с 261 по 270 из 365

Тема: CoDeSys v2.3

  1. #261

    По умолчанию

    Лаконичнее надо.
    Годится, но только если на этом интерфейсе висит одно-единственное устройство, с адресом 12. Или же если хотим следить лишь за отсутствием ошибок на данном интерфейсе, без уточнения конкретного устройства, вызвавшего ошибку (тогда адрес игнорируем, следим только за LAST485ERR).
    Если же устройств два и более - то фиксировать ошибку обмена по "Last Address" и "Last Error" придется индивидуально для каждого адреса. Иначе результат условия LAST485ADR=12 AND LAST485ERR=81 не останется в TRUE на протяжении полутора секунд - ПЛК за это время перейдет к обмену с другим устройством, LAST485ADR станет уже не равным 12, таймер сбросится...
    Предложенный мной вариант далек от изящества и сильно попахивает индусским кодом, но принцип иллюстрирует верно. Обнаружили ошибку обмена с данным адресом - запускаем TON, очередной обмен с этим адресом прошел успешно - сбрасываем. И так для каждого устройства на этом интерфейсе.

  2. #262

    По умолчанию

    Вот 100% рабочий вариант для большого количества устройств в сети.
    VAR
    TIMER_SKV1:TON;
    SKV1_CON_ERR: BOOL;
    END_VAR
    (*переменные LAST485ADR и LAST485ERR объявляются непосредственно в конфигурации ПЛК*)

    IF LAST485ADR={адрес устройства} AND LAST485ERR=81 THEN TIMER_SKV1(IN:=TRUE, PT:=T#1500ms);
    ELSIF LAST485ADR={адрес устройства} AND LAST485ERR<>81 THEN TIMER_SKV1(IN:=FALSE);
    END_IF;
    SKV1_CON_ERR:=TIMER_SKV1.Q;

    прошу прощения за индусский код.
    Последний раз редактировалось S.A.D.; 20.12.2012 в 11:45.
    Чтобы понять рекурсию нужно понять рекурсию

  3. #263

    По умолчанию

    Там нужно немного доделать самому и немного переделать, где то у меня была эта программа!

  4. #264
    Пользователь
    Регистрация
    18.12.2009
    Адрес
    планета Земля
    Сообщений
    3

    По умолчанию

    для этого случая можно без else, я так думаю:

    Код:
    (*lastNetAddr, lastNetErr - глобальные переменные с крайними
      адресом и значением кода ошибки*)
    VAR_OUTPUT
    	err1:BOOL;
    	err2:BOOL;
    	err3:BOOL;
    END_VAR
    ...
    CASE  lastNetAddr OF
    	10:
    		err1TON(IN:=(lastNetErr=81 ) , PT:=T#1500ms, Q=>err1);
    	11:
    		err3TON(IN:=(lastNetErr=81 ) , PT:=T#1500ms, Q=>err3);
    	16:
    		err2TON(IN:=(lastNetErr=81 ) , PT:=T#1500ms, Q=>err2);
    	24:
    		;
    	32:
    		;
    ELSE
    	;
    END_CASE;
    Как вариант.
    Последний раз редактировалось o_m; 12.02.2013 в 17:25.

  5. #265
    Пользователь Аватар для Aleksey9952
    Регистрация
    30.10.2012
    Адрес
    Краснодар
    Сообщений
    50

    По умолчанию

    У меня такая проблема.... Не знаю как сделать ротацию двигаделей через показания датчика давления... надо что бы например при давлении в 5 бар, включался таймер на 15 сек, и если давление не поднялось выше то включить второй двигатель... помогите плз...

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

    По умолчанию

    Мда. Окей, какая постановка задачи, такое и решение:
    Код:
    timer_on(IN := pressure = 5.0, PT := T#15s, Q => motor2);

  7. #267
    Пользователь Аватар для Aleksey9952
    Регистрация
    30.10.2012
    Адрес
    Краснодар
    Сообщений
    50

    По умолчанию

    Та нет, простой таймер и я могу написать))) я сам уже разобрался, спс)))

  8. #268

    По умолчанию Преобразование типов

    Здравствуйте, коллеги.
    Попал мне в руки ПЛК 150. Экспериментирую и осваиваю CoDeSys.

    Прочитал:


    Сделал:
    http://www.owen.ru/forum/attachment....1&d=1363171181

    Собственно вопрос: А что я сделал не так?
    Преобразование "REAL_TO_DWORD" очевидно, но непонятно зачем.

    Вдогонку:
    В списке адрес %QD7.0, а на панели "Базовые параметры" - %QB7
    Вопрос 2: Чем чревато отличие в одной букве?
    Изображения Изображения
    Последний раз редактировалось Асутупист; 13.03.2013 в 15:03.

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

    По умолчанию

    Преобразование "REAL_TO_DWORD" очевидно, но непонятно зачем.
    Аккуратнее с такими «очевидностями».

    Согласно руководству, вторая буква (D) это дескриптор размера, а не типа. И по такому определению на адрес %QD должны приниматься любые 32-битные значения, в том числе с плавающей запятой. Тем не менее, компилятор при обращении вот так по адресу допускает только целочисленные. То бишь баг или в руководстве, или в компиляторе.

    Преобразование REAL_TO_DWORD здесь неуместно, т.к. дробная часть будет отброшена. Рекомендую избегать прямого обращения к таким адресам и присваивать имена в окне конфигурации.

  10. #270

    По умолчанию

    Спасибо.
    Потерю дробной части наблюдал воочию.

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

Ваши права

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