Драйвер Корректора газа EK260/270/280 — протокол МЭК61107

Стартовая страница Форумы Разработка и интеграция Драйвер Корректора газа EK260/270/280 — протокол МЭК61107

Просмотр 15 сообщений - с 1 по 15 (из 104 всего)
  • Автор
    Сообщения
  • #14044
    manjey73
    Участник

    Смотреть Driver_IEC61107.zip

    В архиве настроенный шаблон под Корректор расходомер газа EK270 (тестировалось на данной модели)…

    Вообще драйвер пилится под протокол МЭК61107 (IEC61107) но сравнивая с драйверами для счетчиков Энергомера CE301, CE6850 и описание протокола оказалось, что производители отступают от протокола, так же могут лепить что-то свое и т.д.
    Например отличаются способы расчета контрольных сумм пакетов, в чем Энергомера призналась в документации на счетчик.

    Примечание:
    В счетчике в отклонение от требований ИСО 1155-78 при расчете контрольной суммы (BCC) используется арифметическое, 
    а не логическое суммирование. BCC вычисляется арифметическим суммированием символов и распространяется от символа, непосредственно следующего за первым 
    SOH- или STX-символом,  и до символа ЕТХ включительно, который завершает сообщение. Вычисленный 8-мибитный BCC (младший байт суммы) следует сразу за символом ЕТХ и должен быть,
     как и все передаваемые символы, дополнен битом четности.

    Сам ИСО1155 платный, но Wiki говорит, что даже в нем минимум 3 вида расчета контрольных сумм, так что без приборов и снятых с них логов сделать универсальный драйвер с наскока не получается.

    Драйвер платный, 1500р, для тех, кто предоставит приборы для тестирования скидка 30% (то есть 1000р).
    В драйвере пока реализовано только чтение без записи.

    з.ы. для Михаила. Очень не хватает сохранения всей переменной в строковом виде. Ограничение в 8 байт сильно усложняет некоторые моменты. Может как-то можно еще в версии 5.7 сделать новую БД для текста, а в эти 8 байт запихивать идентификатор ?
    Правда этот идентификатор должен восприниматься не только драйверами но и самой Scada, конкретно Формулами как минимум и выводов в Web.

    з.ы. сейчас пришлось параметр «Статус» EK270 раскидать на 9(ДЕВЯТЬ) переменных, значения в которых не фиксированы и могут менять свое положение.
    Например: (1)(2)(6)(8)(13)(16) или если уйдет код (6) то выглядеть это будет так
    (1)(2)(8)(13)(16), соответственно кода 8, 13, 16 сместятся на один канал если это идет в представлении double.

    Организовывать подобные проверки, перемещения и т.д. в драйвере будет неправильным, так как я его не затачиваю именно под один прибор, а 9 переменных создавать в Scada тоже некрасиво с точки зрения занимаемого места, усложнения расчетов. Тут правда еще «приборостроители» конечно намудрили…
    Но вот была бы 1 переменная строковая, можно было обойтись одной двумя формулами для проверки… Но строка длинее 8-ми байт получается…

    • Эта тема была изменена 4 года, 5 месяцев назад от manjey73.
    #14046
    Mikhail
    Модератор

    Новый драйвер — это очень хорошо!
    Как Вы думаете, он актуален только для российских (exUSSR) пользователей или также для зарубежных?

    По поводу строки: в версии 5.7 это не будет меняться. В следующем поколении — пока не определено.
    Напишите, пожалуйста, примеры значений, которые может принимать эта строковая переменная. Это поможет лучше понять требования.

    #14047
    Romiros
    Участник

    Наверное только для российских. Мы используем это чудо. Сам прибор неплохой, но в плане интеграции в АСУТП очень неудобен. ЕК280 не пробовали, но вот 260 и 270 у нас хватает. Это кстати очень распространенный прибор по российским предприятиям, драйвер может быть очень востребован. Архивы и события реализованы?

    #14048
    manjey73
    Участник

    Будет актуально для всех по мере расширения функционала драйвера.
    Так как в тесте был только ЕК270 (оно же 260, 280, ТС220) и возможно другие этого производителя.

    Вообще в планах развивать драйвер согласно протокола IEC61107 но чудеса от производителей даже в ЕК2хх есть. Ну и у Энергомеры тоже.

    Неудобен любой прибор, имеющий архивы в существующем положении дел с БД в RapidScada, какой смысл вычитывать одни и те же данные в БД, которые не меняются ???? то есть нужен механизм создания БД на лету для архивов и дальнейшего их использования для отчетов.
    Сейчас читать архивы можно командами в файл например из web плагина, но надо разбираться с написанием плагинов и передачей команд в драйвер из него и вычитыванием данных обратно. До этого мне еще далеко. А встроенных механизмов так и нет. Я предлагал Михаилу добавить кроме SetCurData еще варианты чтобы их как-то можно было использовать уже сейчас из драйверов и чтобы не пострадал нынешний механизм…

    Вот как раз речь о событиях, если правильно понял документацию, то как раз параметр Статус это и есть события. Но согласно документации там плавающие значения, пример которых я приводил выше.
    Может быть так (1)(2)(6)(8)(13)(16)
    а может и так (1)(2)(8)(13)(14)(16) и так далее

    канал 1 = 1 или 1
    канал 2 = 2 или 2
    канал 3 = 6 или 8
    канал 4 = 8 или 13
    канал 5 = 13 или 14
    канал 6 = 16 или 16
    числа в скобках это и есть события, но они меняют свое положение в каналах в зависимости от состава событий.

    Вот то, что можно сделать сейчас и проверки статусов необходимо будет проверять по КАЖДОМУ каналу, так как где окажется значение только прибор знает.
    При одной строковой переменной проверка была бы куда проще.

    Если вытягивать переменные в () в каналы, то происходит смещение, а в одну строку вытягивать и потом проверять одну строку формулами не позволяет ограничение канала БД на 8 байт. если я в строку запихну то получу или (1)(2)(6 или 1)(2)(6) и даже если я заменю скобки например * то получу 1*2*6*8* что отнюдь не легче.
    Нужна текстовая БД для переменных и уже давно нужна….

    Romiros — речь об этих событиях статуса ? или о каких то других ?

    • Этот ответ был изменен 4 года, 5 месяцев назад от manjey73.
    • Этот ответ был изменен 4 года, 5 месяцев назад от manjey73.
    #14051
    Romiros
    Участник

    Речь о событиях и вмешательствах сохранённых в архиве прибора.
    В последних версиях ScadaComm у CommLineSvc появился интерфейс ServerComm, что позволяет обращаться к ScadaServer напрямую.
    Я использую эту возможность в драйверах для чтения даты последних записанных архивов и событий в БД RapidScada при старте линии связи(занимает несколько секунд). А далее при опросе даты записанных в скаду часовых и архивов и событий хранятся в кэше драйвера.

    #14052
    Romiros
    Участник

    Что касается статусов и событий в онлайн, сами сейчас разбираемся, как это лучше реализовать. Какой-то самый неудобный прибор из всего нашего парка :).

    #14053
    manjey73
    Участник

    Вышли пример работы с ServerComm. Что там вообще на этом можно построить ?
    Прочитать то из драйвера можно что угодно, даже в обычной Сессии один раз, проблема больше в другом — КУДА это все девать ? я не вижу смысла читать архивы в нынешние БД.
    Это бесполезная трата места.

    а вот в файл можно. В идеале это надо делать из плагина, а в БД иметь всего один канал — Типа «Появились события» ну и так далее, посмотрите, прочтите, сделайте отчет и так далее…

    Ну я разложил на 9 дополнительных каналов в БД

    КП 134 "EK270"
    --------------
    DLL         : KpM61107
    Состояние   : норма
    Сеанс связи : 11.11.2019 11:49:04
    Команда ТУ  : время неопределено
    
    Сеансы связи (всего / ошибок) : 1 / 0
    Команды ТУ   (всего / ошибок) : 0 / 0
    Запросы      (всего / ошибок) : 19 / 0
    
    Текущие данные тегов КП
    +--------+-----------------------------+---------------------+-------+
    | Сигнал | Наименование                |            Значение | Канал |
    +--------+-----------------------------+---------------------+-------+
    | ******** Корректор объёма газа ЕК270 ***************************** |
    +--------+-----------------------------+---------------------+-------+
    |      1 | Qb                          |               0,000 |       |
    +--------+-----------------------------+---------------------+-------+
    |      2 | Qr                          |               0,000 |       |
    +--------+-----------------------------+---------------------+-------+
    |      3 | V                           |       5 145 212,229 |       |
    +--------+-----------------------------+---------------------+-------+
    |      4 | Vr                          |       1 365 234,000 |       |
    +--------+-----------------------------+---------------------+-------+
    |      5 | Pmeas                       |              -0,349 |       |
    +--------+-----------------------------+---------------------+-------+
    |      6 | P                           |               8,250 |       |
    +--------+-----------------------------+---------------------+-------+
    |      7 | Tmeas                       |             117,420 |       |
    +--------+-----------------------------+---------------------+-------+
    |      8 | T                           |             -35,000 |       |
    +--------+-----------------------------+---------------------+-------+
    |      9 | Rhoc                        |               0,716 |       |
    +--------+-----------------------------+---------------------+-------+
    |     10 | dV                          |               0,594 |       |
    +--------+-----------------------------+---------------------+-------+
    |     11 | DateTime                    | 11.11.2019 11:28:48 |       |
    +--------+-----------------------------+---------------------+-------+
    |     12 | Vc.И∆                       |               0,000 |       |
    +--------+-----------------------------+---------------------+-------+
    |     13 | VbDay                       |               0,000 |       |
    +--------+-----------------------------+---------------------+-------+
    |     14 | VbMonth                     |               0,000 |       |
    +--------+-----------------------------+---------------------+-------+
    |     15 | dPТек                       |               0,000 |       |
    +--------+-----------------------------+---------------------+-------+
    |     21 | Cmam_1                      |               1,000 |       |
    +--------+-----------------------------+---------------------+-------+
    |     22 | Cmam_2                      |               2,000 |       |
    +--------+-----------------------------+---------------------+-------+
    |     23 | Cmam_3                      |               6,000 |       |
    +--------+-----------------------------+---------------------+-------+
    |     24 | Cmam_4                      |               8,000 |       |
    +--------+-----------------------------+---------------------+-------+
    |     25 | Cmam_5                      |              13,000 |       |
    +--------+-----------------------------+---------------------+-------+
    |     26 | Cmam_6                      |              16,000 |       |
    +--------+-----------------------------+---------------------+-------+
    |     27 | Cmam_7                      |                 --- |       |
    +--------+-----------------------------+---------------------+-------+
    |     28 | Cmam_8                      |                 --- |       |
    +--------+-----------------------------+---------------------+-------+
    |     29 | Cmam_9                      |                 --- |       |
    +--------+-----------------------------+---------------------+-------+
    
    #14054
    manjey73
    Участник

    Cmam 1 — 9 здесь как раз и раскладывается одна переменная из строки, что приводил выше

    #14056
    Romiros
    Участник

    Как вариант, можно расшифровать статус этих 9 сигналов в драйвере и передать на сервер событие в уже понятном текстовом виде.

    #14057
    Romiros
    Участник

    По поводу того, что писать в базу все подряд — пусть это решает пользователь, каким сигналам назначать каналы для архивирования в БД, а какие оставить 0.

    #14058
    manjey73
    Участник

    Если бы драйвер работал только с ЕК2Х0 то да, можно было бы расшифровать в драйвере.
    Но данные если верить документации могут смещаться и самое главное, драйвер не строго под ЕК

    Как определить каналы БД под архивы, если сейчас это архив на среду, завтра на четверг, потом на пятницу и так далее ? Это во-первых. А во-вторых, смысл писать часовой или суточный архив каждую минуту ? Механизмов, даже если мы не читаем данные из прибора, которые бы не писали раз в минуту то же самое в Scada нет.
    А что нужно пользователю ? архив 5-ти месячной давности или прошлых суток ? как это определить в драйвере вообще что нужно, а что не нужно ?

    Текущие данные да, под них заточены нынешние БД, и только. Остальное надо как-то обходными путями…

    Кольцевых БД с настраиваемой глубиной вложения для архивов пока нет.

    В планах читать архивы из приборов именно куда-то, но не в общую нынешнюю БД.

    #14059
    Romiros
    Участник

    Я делаю не так. Например параметр V, он читается постоянно. Его часовой архив пишется в этот же канал один раз в час. Если писать архив в другой канал, то можно просто не писать в него текущие. Базу это никак не увеличит.

    #14060
    manjey73
    Участник

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

    #14073
    manjey73
    Участник

    в архив драйвера добавлен шаблон на TC220, 210
    по мелочи код изменен, делает повторные запросы при левых ответах прибора.

    #14074
    manjey73
    Участник

    Ошибка в шаблонах. Неверно задан формат времени в Units, было yyyy-dd-MM,HH:mm:ss

    Должно быть вот так — yyyy-MM-dd,HH:mm:ss

    перепутаны дни с месяцами в общем. (чуть позже обновлю) надо поменять немного принципы чтения и разбора переменных.

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