форум асутп
 На главную                       Здесь может быть Ваша реклама, подробнее...

здесь может быть ваша реклама

 Наверх  |  Перейти к теме  |  Поиск  |  Вход  |  Дерево    
 Опрос ПЛК по Modbus/TCP
Автор: Leks 
Дата:   13.04.10 21:51

Делаю систему архивации данных с ПЛК с помощью Modbus/TCP. Возникла проблема: в произвольный момент времени от контроллера перестают приходить ответы, хотя связь не разрывается. Может кто писал что подобное, поделитесь. Нужна конкретно процедура опроса ПЛК. OPC серверы ковырял, но чтото ничего похожего не нашел.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Опрос ПЛК по Modbus/TCP
Автор: Alexey Rakov 
Дата:   13.04.10 22:29

Что за контроллер?

Пока могу только предложить увеличить паузы между опросами и посмотреть, что изменится.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Опрос ПЛК по Modbus/TCP
Автор: Alexey Rakov 
Дата:   13.04.10 22:37


> процедура опроса ПЛК.

Модбасовские спеки смотрите на http://modbus.org/ . Так же если поискать, можно найти примеры реализации протокола (freemodbus, libmodbus, или в примерах программ для контроллеров icpcon).

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Опрос ПЛК по Modbus/TCP
Автор: Leks 
Дата:   13.04.10 22:53

Alexey Rakov писал(а):

> Что за контроллер?

     Shneider Premium

> Пока могу только предложить увеличить паузы между опросами и посмотреть, что
> изменится.

     Интервал опроса роли не играет. вылеты по времени случайны и не зависят от скорости и количества запросов к ПЛК.

Опрос веду в отдельных потоках для каждого контроллера. После перезапуска связи работает нормально некоторое время, а потом опять.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Опрос ПЛК по Modbus/TCP
Автор: san 
Дата:   14.04.10 08:49

Может проблема в модбас клиенте? Возьмите другую программу-клиент, и проверьте работу связи с ней. Таких программ в инете передостаточно.
Для Премиум Модбас на ТСР почти родной протокол, не думаю что там должны быть проблеммы. Могут быть проблеммы разве что с перевышением определенной частоты опроса.

Александр Пупена.
Кафедра АКИТ,
Национальный университет пищевых технологий. Киев.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Опрос ПЛК по Modbus/TCP
Автор: Олег Хохлов 
Дата:   14.04.10 10:16

Здравствуйте, Leks.

Вы писали 13 апреля 2010 р., 20:51:24:

> в произвольный момент времени от контроллера перестают приходить
> ответы, хотя связь не разрывается

А  это  как  ?  Как  именно  перестают  приходить ответы если связь не
разрывается  ?  TCP соединение не разрывается ? Значит вероятнее всего
происходит    рассинхронизация    MODBUS-фреймов    в   TCP-потоке   -
TCP-реализация модбаса на это способна.

Я так понял вы пишете собственную программу опроса ?

Тогда что сделать:

1.  проверить формирование длины посылки в 6-байтовом MODNET-заголовке
-  чтобы  в  любых  ситуациях  правильно  формировался. Если где-то не
правильно - будет стабильная рассинхронизация

2. Попробовать не по TCP а по UDP (если контроллер поддерживает)
- там такая рассинхронизация невозможна

3.  В  случае  появления сбоев (возникла рассинхронизация) - увеличить
интервал,  через который происходит перезапрос, чтобы дать возможность
приемному  автомату  на  стороне  контроллера  засинхронизироваться по
таймауту (если он конечно на это способен).

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

Если  будут  вопросы  - пишите сюда, в мыло или в ICQ, попробую помочь
(писал такие программы неоднократно).

--
С уважением,
 Олег Хохлов, Институт Транспорта Газа,, г.Харьков
 mailto:olegh<собака>itransgaz.com
 mailto:olegh<собака>ukr.net
 ICQ:107308679
 phone: 8-050-3011962

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Опрос ПЛК по Modbus/TCP
Автор: Ivan Zhukov 
Дата:   14.04.10 10:22

Олег Хохлов писал(а):

> Если  будут  вопросы  - пишите сюда, в мыло или в ICQ, попробую помочь
> (писал такие программы неоднократно).

Если возможно, желательно обсуждать здесь на форуме. Это всем
полезно будет.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Опрос ПЛК по Modbus/TCP
Автор: Leks 
Дата:   14.04.10 11:29

А может кто привести пример процедуры опроса.
 Я писал на Делфи с применением компонентоа ClientSocket. Есть процедура реконнекта при потере связи, нонет посылки повторного запроса.
Все запросы идут последовательно, без ожидания ответа. Может проблема в этом

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Опрос ПЛК по Modbus/TCP
Автор: Alexey Rakov 
Дата:   14.04.10 11:55

Leks писал(а):

> А может кто привести пример процедуры опроса.
> Все запросы идут последовательно, без ожидания ответа. Может проблема в этом

Скорее всего да. Ну например:

Создать соеденение. Потом цикл:

1. Сформировать и послать запрос.
2. Ждать ответ некоторое время.
3. Если ответ пришел: проверить корректность ответа, если все хорошо, обработать ответ и к п1, иначе как ошибка. Если ошибок больше определенного числа пробуем реконнект и т.д.
   Если таймаут и таких таймаутов больше определенного числа - связи нет, пробуем реконнект и т.д. иначе к п1.

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

Адрес этого сообщения    Ответить на это сообщение
 
 Re[2]: Опрос ПЛК по Modbus/TCP
Автор: Mikhail Komarov 
Дата:   14.04.10 12:46

Здравствуйте, Leks.

Вы писали 14 апреля 2010 г., 11:29:47:

L> Все запросы идут последовательно, без ожидания ответа. Может проблема в
L> этом
В заголовке пакета (MBAP) первые два байта должны содержать
Transaction Identifier, который генерирует мастер (клиент) при
запросе. Слэйв (сервер), отвечая на запрос, должен поставить тот же
идентификатор (значение). Получая ответ, мастер должен сопоставить
ответ с запросом используя этот идентификатор.
При передаче по сети запросы могут быть приняты слэйвом не в том
порядке, как были отправлены. Кроме того слэйвы Modbus TCP могут
поддерживать более одного соединения и обрабатывать запросы
"параллельно", следовательно ответы могут приходить совсем не в том
порядке как отправлялись запросы.
Если в мастере не реализована процедура проверки Transaction
Identifier, могут происходить разного рода ошибки, которые зависят от
программной реализации мастера.

--
С уважением,
Михаил Комаров                     mailto:mkomarov@xxxxxxx.xx

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Опрос ПЛК по Modbus/TCP
Автор: Leks 
Дата:   15.04.10 22:52

  Решил переделать поток опроса напрямую с Winsock, без использования компонентов с учетом всех проверок. Пока в один поток работает нормально, без сбоев при цикле в 100 мс.
  Однако в готовом виде нужна частота опроса около 10 мс (хотя немного данных ~ 10 слов). Кстати тут еще одна загвоздка - Виндовс не в состоянии штатными функциями отмерить такой промежуток, минимум 15 мс, да и 300 мс ему никак (312, не меньше) . Но это так, к слову.

Так что если есть куски кода у кого, приводите. А я доложу о своих трудах.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Опрос ПЛК по Modbus/TCP
Автор: Alexey Rakov 
Дата:   16.04.10 07:32

> Виндовс не в состоянии штатными функциями отмерить такой промежуток

Посмотрите QueryPerformanceCounter или Multimedia Timer Functions, вполне себе штатные (подробности на msdn).

> куски кода у кого, приводите

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

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Опрос ПЛК по Modbus/TCP
Автор: Leks 
Дата:   16.04.10 07:46

Alexey Rakov писал(а):
>
> Вы лучше свой код, где возникли затруднения покажите. Вместе попробуем подумать,
> что можно сделать.

Дак в том-то и дело, что я не знаю где именно загвоздка. Ересь такую пишу первый раз, опыта никакого

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Опрос ПЛК по Modbus/TCP
Автор: san 
Дата:   16.04.10 09:35

Думаю что 10 мс на Modbus TCP/IP с Premium не получится. Скачайте с официального сайта новый каталог Премиума и посмотрите на странице Ethernet Modbus/TCP network - Performance. Кстати, в Премиум реализован также протокол реального времени RTPS через сервис GlobalData, может это Вам больше подходит.

Александр Пупена.
Кафедра АКИТ,
Национальный университет пищевых технологий. Киев.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Опрос ПЛК по Modbus/TCP
Автор: Ivan Zhukov 
Дата:   16.04.10 09:47

Leks писал(а):

> Однако в готовом виде нужна частота опроса около 10 мс (хотя немного данных ~
> 10 слов).

Я конкретно с MODBUS на TCP не работал, но вроде бы если это протокол HTTP 1.0,
то при каждом обращении должен устанавливаться новый коннект, новое TCP
соединение, и не факт, что эта процедура уложится в такие жесткие временные
рамки. Если это протокол HTTP 1.1, то соединение TCP постоянное и указанная
частота опроса возможна. Но постоянное соединение может разорваться и его
возобновление не всегда успешно, бывают проблемы.
Я поэтому и не люблю TCP, стараюсь испольовать UDP если возможно - там
просто: пришел пакет, ушёл пакет.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Опрос ПЛК по Modbus/TCP
Автор: Ivan Zhukov 
Дата:   16.04.10 10:04

Ivan Zhukov писал(а):

> Leks писал(а):
>
> > Однако в готовом виде нужна частота опроса около 10 мс (хотя немного данных ~
> > 10 слов).
>
> Я конкретно с MODBUS на TCP не работал, но вроде бы если это протокол HTTP 1.0,
> то при каждом обращении должен устанавливаться новый коннект, новое TCP
> соединение, и не факт, что эта процедура уложится в такие жесткие временные
> рамки. Если это протокол HTTP 1.1, то соединение TCP постоянное и указанная
> частота опроса возможна.

Поправка - наверное Modbus/TCP не на базе HTTP протокола реализован,
но тем не менее TCP протокол сложный, зависит от реализации
и настроек.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Опрос ПЛК по Modbus/TCP
Автор: kuzulis 
Дата:   16.04.10 11:53

Такая частота опроса ~10ms и подобное - говорит о "кривой" реализации программы в ПЛК.
Нужно пересмотреть и переделать архитектуру программы и реализовать её по другому!

ИМХО!!!

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Опрос ПЛК по Modbus/TCP
Автор: Leks 
Дата:   16.04.10 14:27

kuzulis писал(а):

> Такая частота опроса ~10ms и подобное - говорит о "кривой" реализации программы
> в ПЛК.
> Нужно пересмотреть и переделать архитектуру программы и реализовать её по
> другому!

нет. просто процесс быстротекущий. Скан контроллера при нем 2 мс.
кстати потеря пары значений за скакжем 1 сек неважен, главное составить более менее четкую картину за пару период (если еому интересно процесс - качание кристаллизатора на МНЛЗ).

Кроме того рядом крутиться аналогичная программа (фирмы поставщика всей системы АСУ), так она за 9 мс успевает.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Опрос ПЛК по Modbus/TCP
Автор: kuzulis 
Дата:   16.04.10 14:35

>нет. просто процесс быстротекущий. Скан контроллера при нем 2 мс.
>кстати потеря пары значений за скакжем 1 сек неважен, главное составить более менее >четкую картину за пару период (если еому интересно процесс - качание кристаллизатора >на МНЛЗ).
>
>Кроме того рядом крутиться аналогичная программа (фирмы поставщика всей системы АСУ), >так она за 9 мс успевает.

вот я про это и говорю.. что "криво" реализована архитектура.. кто в теме - тот поймет ;)

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Опрос ПЛК по Modbus/TCP
Автор: Ivan Zhukov 
Дата:   16.04.10 14:48

Leks писал(а):

> kuzulis писал(а):
>
> нет. просто процесс быстротекущий. Скан контроллера при нем 2 мс.
> кстати потеря пары значений за скакжем 1 сек неважен, главное составить более
> менее четкую картину за пару период (если еому интересно процесс - качание
> кристаллизатора на МНЛЗ).

Такие требования нетипичны для нормальной системы АСУТП. Обычно
в подобных случаях применяют специальные решения вроде LabView.
А если не нужны мгновенные значения, то наверное можно
накапливать данные на стороне контроллера, а потом сразу
все накопленные (за какой-то период времени) отправлять наверх.
Канал TCP, насколько я понимаю, не может обеспечить
надёжную передачу данных с такой частотой.

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Опрос ПЛК по Modbus/TCP
Автор: Alexey Rakov 
Дата:   16.04.10 18:29

Накатал такой тест на tcl (считается относительно медленным скриптовым языком).

Погонял с тестовым modbus-tcp slave'ом. Довольно резво все выходит - больше 500 запросов в секунду, период получается меньше 2 мс. Мастер: Pentium 4 1800МГц, подчиненный вообще нетбук с атомом, сеть: какой-то нонейм хаб.

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

Ну и конечно, полученные результаты мало о чем говорят, реальный контроллер может гораздо медленнее отвечать.

На WinSockAPI в С или Делфи для ожидания данных с таймаутом лучше использовать select() с выставленным таймаутом, либо устанавливать обработчики сетевых событий и таймеров.

--------------------------------------------------------------------------------
# простой модбас запрос, чтение адресов 400001-400010
set query [binary format H* 0000000601030000000A]

# устанавливаем соеденение с подчиненным устройством
set connection [socket 192.168.3.241 502]
fconfigure $connection -blocking 0 -buffering none -translation binary

set perftime [clock milliseconds]
set perfcnt 0
set transact_id 0

# цикл опроса
while {on} {
    # формируем первые два байта заголовка и посылаем запрос
    puts -nonewline $connection "[binary format S $transact_id]$query"

    set response {}
    set resplen 29      ;# длина ответа должна быть 29 байт !
    set begtime [clock milliseconds]

    # ждем ответа
    while {$resplen} {
        if { [eof $connection] } {
            # соеденение закрыли на той стороне
            puts "connection closed"
            exit
        }
        # читаем прешедшие данные
        if { [catch {read $connection $resplen} data] } {
            # другая ошибка сокетов
            puts $errorInfo
            exit
        } elseif { [string length $data] } {
            # какие-то данные пришли

            # добавляем, то что пришло к ответу
            append response $data
            # вычисляем, сколько еще осталось прочитать
            incr resplen -[string length $response]
        } else {
            # ничего не пришло, проверка на таймаут
            if { [clock milliseconds] - $begtime >= 300 } {
                puts "connection timeout"
                exit
            }
        }
    }

    # вычисляем идентификатор транзакции
    binary scan $response S resp_id
    set resp_id [expr {$resp_id & 0xFFFF}]

    # проверям соответствие идентификаторов запроса и ответа
    if {$transact_id != $resp_id} {
        puts "modbus error"
        exit
    }

    # раз в 10 секунд смотрим, сколько транзакций прошло
    # вычисляем производительность и выводим на печать
    incr perfcnt
    if { [clock milliseconds] - $perftime >= 10000 } {
        set queryinsec [format %.2f [expr {$perfcnt / 10.0}]]
        set period [format %.4f [expr {10.0 / $perfcnt}]]
        puts "perfomance: $queryinsec queries in sec, period: $period"
        set perfcnt 0
        set perftime [clock milliseconds]
    }
}
--------------------------------------------------------------------------------

Адрес этого сообщения    Ответить на это сообщение
 
 Re: Опрос ПЛК по Modbus/TCP
Автор: san 
Дата:   16.04.10 18:41

Если у премиум выставить маст задачу в периодический режим (скажем с периодом 4 мс), оставшееся время он будет отдавать тсп-обработке. На сколько я помню в интегрированных портах в цпу, обменом с буфером порта переменными происходит в начале скана или в конце скана. если задача будет периодическая, он этим будет заниматся посредине цикла.

Александр Пупена.
Кафедра АКИТ,
Национальный университет пищевых технологий. Киев.

Адрес этого сообщения    Ответить на это сообщение
 Список форумов    


 Список форумов  |  Нужен логин? Регистрируйтесь здесь 
 Логин пользователя
 Имя пользователя:
 Пароль:
 Помнить пароль:
   
 Забыли ваш пароль?
Введите имя пользователя или e-mail, и новый пароль будет послан на email, указанный в вашем профиле.

Рейтинг@Mail.ru