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

Тема: трм -> плк -> Opc-сервер

  1. #1

    Exclamation трм -> плк -> Opc-сервер

    Из описания конфигуратора ПЛК:

    В модуле Owen (Master) имеются несколько переменных, в которые записывается информация о функционировании опрашиваемых приборов и о произошедших ошибках.
    Каналы модуля:
    − «Последний адрес» (Last address) – последний адрес прибора, по которому обращался Owen (Master).
    − «Код последней ошибки» (Last error) – код ошибки, которая произошла при последнем опросе.
    − «Последний Hash-код» (Last Hash) – Hash-код параметра, который фигурировал в последнем опросе.

    Ситуация:
    ТРМ прибор пропал в сети RS-485 (пропало питание, обрыв сети и т.д.).
    ПЛК его не видит и соответственно выдает 81-ю ошибку в переменную "Код последней ошибки", и ... в переменную, которая принимает значение из внутреннего регистра ТРМ, записывает 0.
    OPC-сервер соответственно видит только этот 0, и ничего не знает о том, что прибор ПРОПАЛ!!! (Ведь проблем при обмене с ПЛК - нет!!!)

    Вопрос:
    Можно как-то реализовать контроль за актуальностью считанного значения?!
    Как в ПЛК можно реализовать контроль за доступностью прибора и сообщить об ошибке OPC-серверу?!

  2. #2

    По умолчанию

    честно говоря я себе это слабо представляю...
    если связи с прибором нет - значит её нет...
    если надо как то говорить что связь пропала (а какая в прочем разница пропало питание или кабель разрубили) - записывайте в передаваемую переменную заведомо недостижимое значение. а в Scada анализируйте это...

  3. #3

    По умолчанию

    Ой!!! С удовольствием запишу недостижимое значение в переменную!!!
    Только как я поймаю Last error <> 0 если он изменяется динамически!!!
    Процесс опроса приборов протекает независимо от цикла программы или нет?! Как перехватить это событие ?!

  4. #4

    По умолчанию

    Анализируется пара значений Last error & Last address.
    Для каждого прибора можно создать переменную "исправен-неисправен" и передавать её в Scada.

  5. #5

    По умолчанию

    Цитата Сообщение от Логвиненко Андрей Посмотреть сообщение
    Анализируется пара значений Last error & Last address.
    Для каждого прибора можно создать переменную "исправен-неисправен" и передавать её в Scada.
    В какой момент эту пару надо анализировать?!
    На линии несколько приборов.
    Вы хотите сказать, что после опроса очередного параметра, управление сразу передается циклу пользователя. Мне кажется, что цикл опроса приборов протикает параллельно с циклом пользователя и не факт, что обратившись к этим переменным я получу верные значения. Тем более, что не ответивших адресов может быть и больше. Тогда нужен массив Last error & Last address!!!

  6. #6

    По умолчанию

    Принцип работы ПЛК примерно такой:
    опрос ОБЛАСТИ ПАМЯТИ ВХОДОВ(не физических входов)
    Выполнение ПОЛЬЗОВАТЕЛЬСКОЙ ПРОГРАММЫ
    Запись ОБЛАСТИ ПАМЯТИ ВЫХОДОВ (не физические выходы)
    Сервисное состояние - опрос себя, запись в драйвера, обмен по интерфейсу и т.д.

    Если несколько устройств - значит действительно нужно массив.
    Last Error - одна.
    Last Address - для всех устройств.
    If last_error <>0 and (last address=adres_mva)then;
    status_mva:=1;
    end_if;

    Ну или возьмите библиотеку ModBus и самостоятельно организуйте обмен в цикле ПЛК. Тогда уж Вам все флаги в руки.

  7. #7

    Smile

    Я вставил следующий код в цикл пользователя:

    CASE Addr485 OF 'где Addr485 - это Last Address модуля Owen(Master)
    0: ErrorTRM0:=Error485; ' где Error485 - это Last Error модуля Owen
    1: ErrorTRM1:=Error485;
    2: ErrorTRM2:=Error485;
    ' и т.д.
    END_CASE

    это работает!!! Я получил список переменных, отображающих текущее состояние приборов.
    Но это значит, что после каждого опроса очередного параметра ПЛК передает управление циклу пользователя, чтобы тот как-то разрулил изменившееся состояние самого Owen(Master) модуля!!!
    Спасибо! Меня такой ответ устроил!!!

  8. #8

    Unhappy вопросов добавилось

    Из опрашиваемых 96-адресов 5 адресов выдают коды ошибок не поддающиеся расшифровке:
    49 или 0х31
    35584 или 0x8B00
    31232 или 0x7A00
    61184 или 0xEF00
    10327 или 0x2857 - это вероятно "Не найден идентификатор"

    Может разработчики ПЛК разъяснят данные коды?

    Спасибо!

  9. #9

    По умолчанию

    Цитата Сообщение от николаев андрей Посмотреть сообщение
    принцип работы плк примерно такой:
    опрос области памяти входов(не физических входов)
    выполнение пользовательской программы
    запись области памяти выходов (не физические выходы)
    сервисное состояние - опрос себя, запись в драйвера, обмен по интерфейсу и т.д.
    правильно ли я понимаю, что между программными циклами происходит один опрос входов? тогда, возможно, это при моем количестве внешних переменных (около 140 по протоколу овен) и иногда дает задержки в получении переменных?

  10. #10

    По умолчанию

    это описание в примитивном смысле.
    скорее всего 140 переменных не успевает опросить...

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

Ваши права

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