Непоследовательный опрос устройств

Стартовая страница Форумы Взаимодействие с устройствами Непоследовательный опрос устройств

Помечено: 

Просмотр 15 сообщений - с 1 по 15 (из 82 всего)
  • Автор
    Записи
  • #39666
    klusandr
    Участник

    Доброго времени суток.
    Есть релейная защита, её опрашивает WirenBoard а с него уже получает данные Scada по Modbus. Если огрубить, всю информацию можно поделить на 2 вида:
    оперативная(должна опрашиваться с минимальным интервалом);
    подробная (время опроса не столь критичное).
    С учётом того что ячеек, с которых необходимо получить подробные данные примерно 20 штук, цикл опроса составляет критично большое значение, что бы опрашивать их последовательно с оперативной информацией. При настройке опроса, у меня есть примерно 20 устройств для опроса подробных данных ячеек, и 1 устройство для опроса оперативных. Я попытался продублировать устройство оперативных данных, и разместить его между устройств подробных данных, но опрос остался последовательным:
    опер. -> подр1 -> подр2 -> … -> подр20 -> опер.
    В моём же случае необходимо опрашивать:
    опер. -> подр1 -> опер. -> подр2 -> опер. -> …
    Танцы с бубном вокруг параметров времени, пазы, периода так же не были эффективны.

    По итогу появились следующие вопросы:
    Есть ли возможность это сделать стандартными средствами?
    Если нет, то как можно оправлять команды на опрос устройств из своего модуля для сервера?
    Так же, можно ли в настройке опроса устройства, при использовании протокола Modbus, задать, какую группу параметров я хочу опрашивать в шаблоне устройств?

    Конфигурация опроса устройств:
    <DevicePolling>
    <Device active=»true» isBound=»true» number=»1″ name=»CellsFlags» driver=»DrvModbus» numAddress=»1″ strAddress=»» pollOnCmd=»false» timeout=»1000″ delay=»0″ time=»00:00:00″ period=»00:00:00″ cmdLine=»ModbusWirebordCellsFlagsTemplate.xml» />
    <Device active=»true» isBound=»true» number=»2″ name=»Cells1MR5Data» driver=»DrvModbus» numAddress=»1″ strAddress=»» pollOnCmd=»false» timeout=»1000″ delay=»1000″ time=»00:00:01″ period=»00:00:01″ cmdLine=»ModbusWirebordCellsDataTemplate.xml» />
    <Device active=»true» isBound=»true» number=»1″ name=»CellsFlags» driver=»DrvModbus» numAddress=»1″ strAddress=»» pollOnCmd=»false» timeout=»1000″ delay=»0″ time=»00:00:00″ period=»00:00:00″ cmdLine=»ModbusWirebordCellsFlagsTemplate.xml» />
    <Device active=»true» isBound=»true» number=»1″ name=»CellsFlags» driver=»DrvModbus» numAddress=»1″ strAddress=»» pollOnCmd=»false» timeout=»1000″ delay=»0″ time=»00:00:00″ period=»00:00:00″ cmdLine=»ModbusWirebordCellsFlagsTemplate.xml» />
    <Device active=»true» isBound=»true» number=»3″ name=»Cells2MR5Data» driver=»DrvModbus» numAddress=»1″ strAddress=»» pollOnCmd=»false» timeout=»1000″ delay=»1000″ time=»00:00:02″ period=»00:00:01″ cmdLine=»ModbusWirebordCellsDataTemplate.xml» />
    <Device active=»true» isBound=»true» number=»1″ name=»CellsFlags» driver=»DrvModbus» numAddress=»1″ strAddress=»» pollOnCmd=»false» timeout=»1000″ delay=»0″ time=»00:00:00″ period=»00:00:00″ cmdLine=»ModbusWirebordCellsFlagsTemplate.xml» />
    <Device active=»true» isBound=»true» number=»4″ name=»Cells3MR5Data» driver=»DrvModbus» numAddress=»1″ strAddress=»» pollOnCmd=»false» timeout=»1000″ delay=»0″ time=»00:00:03″ period=»00:00:01″ cmdLine=»ModbusWirebordCellsDataTemplate.xml» />
    <Device active=»true» isBound=»true» number=»1″ name=»CellsFlags» driver=»DrvModbus» numAddress=»1″ strAddress=»» pollOnCmd=»false» timeout=»1000″ delay=»0″ time=»00:00:00″ period=»00:00:00″ cmdLine=»ModbusWirebordCellsFlagsTemplate.xml» />
    <Device active=»true» isBound=»true» number=»3″ name=»Cells2MR5Data» driver=»DrvModbus» numAddress=»1″ strAddress=»» pollOnCmd=»false» timeout=»1000″ delay=»0″ time=»00:00:04″ period=»00:00:01″ cmdLine=»ModbusWirebordCellsDataTemplate.xml» />
    <Device active=»true» isBound=»true» number=»1″ name=»CellsFlags» driver=»DrvModbus» numAddress=»1″ strAddress=»» pollOnCmd=»false» timeout=»1000″ delay=»0″ time=»00:00:00″ period=»00:00:00″ cmdLine=»ModbusWirebordCellsFlagsTemplate.xml» />
    </DevicePolling>

    • Тема изменена 12 месяцев назад пользователем klusandr.
    #39668
    manjey73
    Участник

    1. Чтобы разнести по времени оперативные данные и настроечные (назовем это так) нужно создать ДВА устройства и каждому задать свой шаблон, что читать. Modbus драйвер может только активировать или нет группу, управлять он не может.

    2. Опрос идет по RTU или по TCP? хотя если WirenBoard читает по RTU, то как-то фиолетово, все упирается в устройства. Если уже с самого WirenBoard как-то надо, то сколько соединений он может держать по TCP? можно и на разные линии опроса разнести.

    3. Ну вариант управлять опросом по команде (не пробовал еще ни разу)

    Последовательность там выстраивается переставлением в параметрах линии — Опрос.
    Система контролирует последовательность и время.

    #39669
    manjey73
    Участник

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

    потому что если один читается с периодом 1c, а второй 5с, то будет
    1, 1, 1, 1, 1, 2 — читаться.
    и если 3-й и 4-й настроены так же, то будет что-то типа

    1,3, 1,3, 1,3, 1,3, 1,2,3,4

    • Ответ изменён 12 месяцев назад пользователем manjey73.
    #39671
    klusandr
    Участник

    1. Так я и так создал устройства для оперативных, и подробных данных, и у каждого свои шаблоны.
    2. Критично 1 канал по RS ничего не попишешь.

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

    #39672
    klusandr
    Участник

    А мне надо добиться 1,2,1,3,1,4,1,5 и т.д.

    #39673
    manjey73
    Участник

    Что у вас тут 1,2,3,4 и 5 ?
    1 это оперативные данные?
    2,3,4,5 настроечные ?

    Еще не забывайте, что каждый раз при старте будут опрошены все, независимо от выстраивания приоритетов и времени., И когда все будет опрошено и уже наступил очередной период опроса будут опрошены еще раз.
    Ну пример, устройство опрашивается раз в 30 сек.
    Если Период по 0, и мы стартанули Коммуникатор в х:27 секунд, то будет первый опрос при запуске и в x:30 секунд будет штатный опрос. И далее каждые 30 секунд.

    По этому на первый вариант нет смотрите, если только стартанули.

    #39674
    manjey73
    Участник

    А мне надо добиться 1,2,1,3,1,4,1,5 и т.д.

    а где 20 приборов? 🙂

    #39675
    klusandr
    Участник

    Та хоть 5 заставить работать так.

    #39676
    klusandr
    Участник

    Да, 1 — оперативные, 2,3,4,5 — натроенные(подробные)
    То что творится при старте системы не столь значимо, глпвно что когда оно войдёт в рабочий режим, опросы были в нужном порядке

    #39677
    manjey73
    Участник

    1 — оперативные только одной установки, где оперативные остальных 5-ти? если мы говорим о 5-ти.
    2,3,4,5 — это настроечные 2-й, 3-й и т.д. установки?

    Задайте правильные номера как-то. Например 1.1; 2.1 и т.д. это оперативные
    1.2; 2.2 и т.д. это настроечные.

    Время 1с для 1.1, 2.1, 3.1 и т.д.
    Время 30с для 1.2, 2.2, 3.2 и т.д. для настроечных

    Как будет при первом запуске я написал
    Далее, когда устаканится будет так

    1.1, 2.1, 3.1, 4.1, 5.1 и по кругу до 30-й секунды
    потом
    1.1, 2.1, 3.1, 4.1, 5.1, 1.2, 2.2, 3.2, 4.2, 5.2

    Если нужно 1.1, 1.2, 2.1, 2.2, 3.1, 3.2, 4.1, 4.2, 5.1, 5.2 то время периода должно быть одинаково у всех и они должны быть выстроены в такой последовательности.
    Если нужно 1.1, 2.1, 3.1, 4.1, 5.1, 1.2, 2.2, 3.2, 4.2, 5.2 то так же должно быть одинаковое время и выстроены в таком порядке.

    На линии RTU другого не дано в принципе, ибо последовательная шина

    #39678
    klusandr
    Участник

    Так как всё идет через WirenBoard физическое устройство одно. WB отдаёт как и оперативные данные, по всем устройствам одной командой, и отдельно подробные данные уже по каждой ячейке отдельными командами.
    Вспоминая принцип Modbus, где все данные запрашиваются по регистрам, условно с 200 регистра по 219 это оперативные данные, с 220 каждые 30 регистров это уже подробные данные на эти же 20 устройств. Так как настроить опрос определённой группы параметров в опросе нельзя, на оперативную команду и далее уже на каждую команду запроса подробных данных, идёт своё устройство.
    Надеюсь стало чуть понятнее.

    • Ответ изменён 12 месяцев назад пользователем klusandr.
    #39680
    klusandr
    Участник

    Корень проблемы в том, что 1 устройство (оперативные данные), стоит между каждым опросом всех остальных устройств (настроенные(подробные) данные), но опросник игнорирует все опросы 1 устройства кроме первого в списке, и по итогу оно опрашивает оперативные данные, и потом уже все 20 устройств с настроенными данными, наплевав, что конфиге идёт порядок: 1,2,1,3,1,4,1,5 и делает: 1,2,3,4,5.

    #39681
    manjey73
    Участник

    Еще раз. Конфигу фиолетово, как вы им будете пользоваться. К опросу напрямую он не относится.

    Периоды опроса настраиваются в Коммуникаторе.

    Вы не можете прочитать группой все настроечные параметры даже с пустотой? Для сокращения непосредственно времени опроса этих параметров и потом привязать к БД нужные?

    Условно с 200 регистра по 219 — один запрос

    с 220 каждые 30 регистров — один блин раз настройки всех двадцати устройств прочитать? 600 байт, прощу прощения — всего 3 раза прочитать.

    #39682
    manjey73
    Участник

    Или ваш хваленый WirenBoard не позволяет читать регистры, если они идут с разрывами?

    #39683
    JurasskPark
    Участник

    Предлагаю сделать по вашему варианту список устройств как вы хотите
    1,2,1,3,1,4,1,5
    Только у 1 будет различаться название. А все остальное будет такое же шаблоном.

Просмотр 15 сообщений - с 1 по 15 (из 82 всего)
  • Для ответа в этой теме необходимо авторизоваться.