Показано с 1 по 5 из 5

Тема: ПЛК-100 как Мастер Модбаса

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #4
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Это пока ознакомление с возможностями конфигуратора.
    А вот когда столкнетесь с его работой ...
    Ну, потолкался. Пришлось нацепить сниффера и до боли вглядываться в рядочки цифирек. Но что делать, если ребята, которые знают ноты, упорно игнорируют прямые вопросы.
    Так вот, по моим наблюдениям основная проблема работы ПЛК-100 Мастером Модбаса состоит в том, что он теряет запросы. Причем теряет как-то странно - и не совсем безсистемно, но и системы понять не могу.

    Как это я увидел? Работает ПЛК-100 и мой АЦП, который я надрессировал на Модбас. Параллельно связывающей их веревочке RS485 сидит комп и снифает шину. Причем, перебрав несколько програмулек, я остановился на довольно примитивной COMPump, не заточенной под Мобдас, но шустрой и с хорошей памятью.

    Область обмена между ПЛК и АЦП организована в виде нескольких групп переменных, каждая из которых целиком и полностью оккупирует "Универсальное устройство Модбас" - пора его уже сократить до УУМ (о-о-о-чень у-у-умное!).

    Все УУМы, используемые в программе, я инициирую сразу по старту, подавая тот знаменитый плоходокументированный код 255. Один раз. А затем, в ходе работы, я ставлю запросы на обмен по каждому УУМу в очередь - и разбираю ее аккуратненько.

    Если запрос от конкретного УУМа принят к исполнению, то тут начинаются главные танцы.
    Во-первых, принимая запрос, я сразу даю код 255 в регистр управления УУМом.
    Затем, при каждом програмном цикле, я ожидаю готовности результата и повторяю запрос - столько раз, сколько нужно для обмена всеми регистрами данного УУМа.
    Выполняется что-то такое (я называю это фазой, по сути это отработка запроса к одному УУМу):

    Код:
    ADC_RO:          (* Вот фаза чтения нескольких регистров из Модбаса *)
      IF  %QW10.1 = MODBUS_OK THEN
        R_RO_C	:= R_RO_C - 1;            (* Счетыик команд 255 *)
            IF R_RO_C <>0 THEN
                %QW10.1:= WEIRDCODE; (*Дурацкий код FAFA *)
                byReadRO := START_CMD; (* Код 255 *)
            ELSE
              dwGutRO := dwGutRO + 1;  (* Счетчик хороших результатов *)
    ...
    принимаю результаты из области обмена
    ...
              ph_tRW := ADC_BEGIN; (* В следующем цикле разбираем очередь *)
            END_IF
    
      ELSIF %QW10.1= MODBUSTMO THEN
        dwErrRO	:= dwErrRO + 1;  (* Счетчик плохих результатов *)
    ...
    игнорирую результаты, если уж таймаута дождались...
    ...
        ph_tRW := ADC_BEGIN;  (* Все равно этот запрос бросаем *)
    
      ELSE	;			(* waiting in this phase *)
      END_IF				(* Конец отработки фазы ADC_RO *)
    Таким образом, до обращения к результатам работы Модбаса, я пихаю ПЛК в попу столько раз, сколько нужно. Если переменных в данном УУМе 6 - так 6 раз и пихаю. Если 38 - ну и 38 не жалко.

    Если возникнет таймаут - мы его зафиксируем. Других кодов ошибок доблестный овеновский программист нам не показал, Бог с ними.
    Реально таймаутов нет.
    Я ставлю своего сниффера в стойку, запускаю программу - и не пропускаю ни одной посылки. Все очень чинно, никаких сбоев! Вот только одна беда - у ПЛК мозги разбегаются. В протоколе видно, что запросы от каждого УУМа идут с пропусками. То есть, если я поставил на чтение 25 переменных и сделаю 25 команд 255 - я штук примерно 5 перемнных потеряю. И вовсе не из-за сбоев в линии! ПЛК просто нагло проигнорирует пинки в зад не спросит слейва 25 раз - а спросит 20.

    КАНЕШНА, выход есть. Ставлю 50 запросов - и свои 25 регистров таки да обновлю. Но куда же это годится, робяты? Завтра ему 75 пинков нужно давать? В меру возрастания привычки к пинкам

    Собственно, этот результат у меня был еще до праздничка всех клар цетиных. Но было сомнение - отчего же нужно увеличивать количество запросов? Теперь вижу - линия в порядке, ни одного модбас-эксепшин не видел, просто ПЛК прореживает команды 255 на УУМ.

    Как написано, так и задокументировано - и обратное верно. Спрашивал туже два раза о расшифровке загадочных фраз из документации - молчок. Потому и молчок, что коряво сделано.
    Почему пишу неприятные некоторым товарищам слова? А потому что спину гнул, ручки натруждал, чтобы разобраться с косяком, которого в серьезном контроллере быть не должно. А если есть - так опишите его внятно. Чтобы православные не спотыкались...

    Завершаю на оптимистической ноте. Ежли вам не страшно пропускать иногда запросы или можете создать запросы с запасом - все будет чудненько. Не жалейте 255!
    Последний раз редактировалось drvlas; 09.03.2011 в 23:47.

Ваши права

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