Драйвер протокола M-Bus

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

    з.ы. на вскидку. Не реализовано while (RequestNeeded(ref tryNum)) при опросе и получении ошибки. Тогда еще не понимал как это работает

    Нет формирования каналов в Администраторе (аналогично)

    Нет графической настройки, тут у меня вообще проблема, многого не понимаю как делать. Всякие окна, поля ввода со списками и т.д. Это все надо добавлять, чтобы как раз было удобно формировать примеры запросов. Например выбрали из списка команду, в следующем списке только те переменные, которые относятся к этой команде и т.д. в том же духе.

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

    #13368
    Mikhail
    Модератор

    ни разу никто не написал на почту с просьбой предоставить ключ

    Добавил ссылку на драйвер на эту страницу, надеюсь, её будет легче найти.

    Покупать за свои M-Bus приборчики и искать среди них дополнительный функционал как-то дорого.

    Да, нужно под конкретную систему дорабатывать драйвер.

    Если проект стартует, то я напишу. Пока трудно сказать.

    #20734
    dimasina71
    Участник

    Добрый день.

    Разбираюсь с подключением к рапидскаде счетчика Zenner Celsius с помощью вашего решения.
    Но, то ли я что-то не то делаю, то ли счетчик выдает не те данные — а есть у меня проблема с его опросом.
    Не могли бы вы меня просветить по нескольким вопросам и мб наставить на путь так сказать.

    схема подключения
    счетчик подключен к компу с рапидой через СОМ1. опросы через программы типа Mbus sheet и пр. показывают, что он откликается по адресу <mbus sheet.png> и даже выдает данные в виде телеграммы <log2.txt>.
    у меня нет никакого даташита на счетчик, есть только сторонние программы с помощью которых я могу получать какие-то данные с него.

    реализация в скаде
    в качестве донора для конфигурационного файла был выбран weserhm.xml, измененный до неузнаваемости. сделано это было в попытке заставить его работать, а именно — выдавать нужный сигнал инициализации линии мбас.
    в итоге нужный сигнал так и не был достигнут (10 40 FD 3D 16) вместо него получился (10 40 03 43 16), так же и сигнал опроса на который отвечает прибор (10 5B 03 5E 16) тоже у меня не получился (10 58 03 5B 16).
    я завел линию связи в коммуникаторе (и больше нигде) задал ей параметры ком порта
    завел КП (тоже не привязанный более нигде) задал драйвер, адрес и командную строку <scada.png>
    скопировал в /config файл конфигурации и получил вот такой результат <log.txt>.
    причем при первом после копирования конфигурации запуске линии файл конфигурации пропадает из локального каталога, после его водворения на место происходит опрос с вот таки результатом. 
    таймаут происходит всегда, не зависимо от параметра 500 или 5000мс. драйвер как будто что-то получает от устройства — но не понимает что это.

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

    Буду признателен за помощь

    #20735
    dimasina71
    Участник

    вот лог вашего драйвера <?xml version=»1.0″ encoding=»utf-8″?>
    <DevTemplate Name=»ZennerCS» Init=»true» Address=»true» EFBCD_onprotocol=»true» Bus_Timeout=»5000″>
    <SndGroups>
    <SndGroup SndActive=»true» SndCnt=»1″ SndName=»Heat: Outlet» SndType=»SND_UD» SndFrame=»Short» SndCField=»58″ SndAField=»5E» SndCIField=»5E» />
    </SndGroups>
    </DevTemplate>

    ———————————————————————————
    2021-09-04 10:06:00 Инициализация линии связи 1 «heat meter»

    Computer code: =8D8CF157A1014951-AF20C1A73893694B-23718B84C18BC091-E4B9A24E5523624F-9F22609F96D843B7-30B8C4C8EBC04EE0-69F89B4AE344BB81-9C12145D9D26DD81=
    saved to file: C:\SCADA\ScadaComm\Config\KpMbus_Reg.xml
    Время полнофункциональной работы в демонстрационном режиме 10 мин.
    Ошибка: Файл ‘C:\SCADA\ScadaComm\Config\ZennerCS.xml’ не найден.
    2021-09-04 10:06:01 Запуск линии связи 1 «heat meter»

    2021-09-04 10:06:01 Открытие последовательного порта COM1

    2021-09-04 10:06:01 Сеанс связи с КП 10 «ZennerCS», тип: KpMbus, адрес: 3
    2021-09-04 10:06:01 Ошибка при выполнении сеанса опроса КП 10 «ZennerCS»: Ссылка на объект не указывает на экземпляр объекта.

    ———————————————————————————
    2021-09-04 10:07:22 Инициализация линии связи 1 «heat meter»

    2021-09-04 10:07:22 Запуск линии связи 1 «heat meter»

    2021-09-04 10:07:22 Открытие последовательного порта COM1

    2021-09-04 10:07:22 Сеанс связи с КП 10 «ZennerCS», тип: KpMbus, адрес: 3
    Отправка (5): 10 40 03 43 16
    Приём (0/1):
    Отправка (5): 10 58 03 5B 16
    Приём (0/262):
    2021-09-04 10:07:25 Ошибка: Bus Timeout КП 10 «ZennerCS»
    2021-09-04 10:07:25 Ошибка при выполнении сеанса опроса КП 10 «ZennerCS»: Последовательность не содержит соответствующий элемент

    #20736
    dimasina71
    Участник

    вот ответы устройства с помощью утилит
    init_slaves: debug: sending init frame #1
    [2021-09-04 07:12:06] SEND (zu): 10 40 FD 3D 16
    init_slaves: debug: sending init frame #2
    [2021-09-04 07:12:08] SEND (zu): 10 40 FD 3D 16
    [2021-09-04 07:12:10] SEND (zu): 10 5B 03 5E 16
    [2021-09-04 07:12:11] RECV (zu): 68 71 71 68 08 03 72 44 28 60 10 49 6A 88 04 8C 00 00 00 0C 78 44 28 60 10 04 06 00 00 00 00 82 04 6C A1 21 C2 84 00 6C FF FF 84 04 06 00 00 00 00 C4 84 00 06 00 00 00 80 82 0A 6C A1 29 84 0A 06 00 00 00 00 04 13 23 00 00 00 02 59 AB 08 02 5D AB 08 02 61 00 00 04 2D 00 00 00 00 04 3B 00 00 00 00 04 6D 3A 07 A4 29 04 26 57 00 00 00 02 FD 17 00 00 1F 06 16
    mbus_frame_print: Dumping M-Bus frame [type 4, 119 bytes]: 68 71 71 68 08 03 72 44 28 60 10 49 6A 88 04 8C 00 00 00 0C 78 44 28 60 10 04 06 00 00 00 00 82 04 6C A1 21 C2 84 00 6C FF FF 84 04 06 00 00 00 00 C4 84 00 06 00 00 00 80 82 0A 6C A1 29 84 0A 06 00 00 00 00 04 13 23 00 00 00 02 59 AB 08 02 5D AB 08 02 61 00 00 04 2D 00 00 00 00 04 3B 00 00 00 00 04 6D 3A 07 A4 29 04 26 57 00 00 00 02 FD 17 00 00 1F 06 16
    <?xml version=»1.0″ encoding=»ISO-8859-1″?>
    <MBusData>

    <SlaveInformation>
    <Id>10602844</Id>
    <Manufacturer>ZRI</Manufacturer>
    <Version>136</Version>
    <ProductName></ProductName>
    <Medium>Heat: Outlet</Medium>
    <AccessNumber>140</AccessNumber>
    <Status>00</Status>
    <Signature>0000</Signature>
    </SlaveInformation>

    <DataRecord id=»0″>
    <Function>Instantaneous value</Function>
    <StorageNumber>0</StorageNumber>
    <Unit>Fabrication number</Unit>
    <Value>10602844</Value>
    <Timestamp>2021-09-04T07:12:11</Timestamp>
    </DataRecord>

    <DataRecord id=»1″>
    <Function>Instantaneous value</Function>
    <StorageNumber>0</StorageNumber>
    <Unit>Energy (kWh)</Unit>
    <Value>0</Value>
    <Timestamp>2021-09-04T07:12:11</Timestamp>
    </DataRecord>

    <DataRecord id=»2″>
    <Function>Instantaneous value</Function>
    <StorageNumber>8</StorageNumber>
    <Tariff>0</Tariff>
    <Device>0</Device>
    <Unit>Time Point (date)</Unit>
    <Value>2021-01-01</Value>
    <Timestamp>2021-09-04T07:12:11</Timestamp>
    </DataRecord>

    <DataRecord id=»3″>
    <Function>Instantaneous value</Function>
    <StorageNumber>9</StorageNumber>
    <Tariff>0</Tariff>
    <Device>0</Device>
    <Unit>Time Point (date)</Unit>
    <Value>2127-15-31</Value>
    <Timestamp>2021-09-04T07:12:11</Timestamp>
    </DataRecord>

    <DataRecord id=»4″>
    <Function>Instantaneous value</Function>
    <StorageNumber>8</StorageNumber>
    <Tariff>0</Tariff>
    <Device>0</Device>
    <Unit>Energy (kWh)</Unit>
    <Value>0</Value>
    <Timestamp>2021-09-04T07:12:11</Timestamp>
    </DataRecord>

    <DataRecord id=»5″>
    <Function>Instantaneous value</Function>
    <StorageNumber>9</StorageNumber>
    <Tariff>0</Tariff>
    <Device>0</Device>
    <Unit>Energy (kWh)</Unit>
    <Value>-2147483648</Value>
    <Timestamp>2021-09-04T07:12:11</Timestamp>
    </DataRecord>

    <DataRecord id=»6″>
    <Function>Instantaneous value</Function>
    <StorageNumber>20</StorageNumber>
    <Tariff>0</Tariff>
    <Device>0</Device>
    <Unit>Time Point (date)</Unit>
    <Value>2021-09-01</Value>
    <Timestamp>2021-09-04T07:12:11</Timestamp>
    </DataRecord>

    <DataRecord id=»7″>
    <Function>Instantaneous value</Function>
    <StorageNumber>20</StorageNumber>
    <Tariff>0</Tariff>
    <Device>0</Device>
    <Unit>Energy (kWh)</Unit>
    <Value>0</Value>
    <Timestamp>2021-09-04T07:12:11</Timestamp>
    </DataRecord>

    <DataRecord id=»8″>
    <Function>Instantaneous value</Function>
    <StorageNumber>0</StorageNumber>
    <Unit>Volume (m m^3)</Unit>
    <Value>35</Value>
    <Timestamp>2021-09-04T07:12:11</Timestamp>
    </DataRecord>

    <DataRecord id=»9″>
    <Function>Instantaneous value</Function>
    <StorageNumber>0</StorageNumber>
    <Unit>Flow temperature (1e-2 deg C)</Unit>
    <Value>2219</Value>
    <Timestamp>2021-09-04T07:12:11</Timestamp>
    </DataRecord>

    <DataRecord id=»10″>
    <Function>Instantaneous value</Function>
    <StorageNumber>0</StorageNumber>
    <Unit>Return temperature (1e-2 deg C)</Unit>
    <Value>2219</Value>
    <Timestamp>2021-09-04T07:12:11</Timestamp>
    </DataRecord>

    <DataRecord id=»11″>
    <Function>Instantaneous value</Function>
    <StorageNumber>0</StorageNumber>
    <Unit>Temperature Difference (1e-2 deg C)</Unit>
    <Value>0</Value>
    <Timestamp>2021-09-04T07:12:11</Timestamp>
    </DataRecord>

    <DataRecord id=»12″>
    <Function>Instantaneous value</Function>
    <StorageNumber>0</StorageNumber>
    <Unit>Power (100 W)</Unit>
    <Value>0</Value>
    <Timestamp>2021-09-04T07:12:11</Timestamp>
    </DataRecord>

    <DataRecord id=»13″>
    <Function>Instantaneous value</Function>
    <StorageNumber>0</StorageNumber>
    <Unit>Volume flow (m m^3/h)</Unit>
    <Value>0</Value>
    <Timestamp>2021-09-04T07:12:11</Timestamp>
    </DataRecord>

    <DataRecord id=»14″>
    <Function>Instantaneous value</Function>
    <StorageNumber>0</StorageNumber>
    <Unit>Time Point (time & date)</Unit>
    <Value>2021-09-04T07:58:00</Value>
    <Timestamp>2021-09-04T07:12:11</Timestamp>
    </DataRecord>

    <DataRecord id=»15″>
    <Function>Instantaneous value</Function>
    <StorageNumber>0</StorageNumber>
    <Unit>Operating time (hours)</Unit>
    <Value>87</Value>
    <Timestamp>2021-09-04T07:12:11</Timestamp>
    </DataRecord>

    <DataRecord id=»16″>
    <Function>Instantaneous value</Function>
    <StorageNumber>0</StorageNumber>
    <Unit>Error flags</Unit>
    <Value>0</Value>
    <Timestamp>2021-09-04T07:12:11</Timestamp>
    </DataRecord>

    <DataRecord id=»17″>
    <Function>More records follow</Function>
    <Value></Value>
    <Timestamp>2021-09-04T07:12:11</Timestamp>
    </DataRecord>

    </MBusData>

    #20737
    manjey73
    Участник

    Таймаут в драйвере косячный, неправильная реализация, руки не доходят поправить.
    Всю секцию telegram надо удалить, при правильном первоначальном запросе и выставленном параметре init = true секция создастся сама и будет запрос на перезапуск линии связи.

    Чтобы конфиг не пропадал, надо его положить в Instance проекта, просто его там нет. Ну или настраивать без передачи данных серверу, просто остановкой линии, изменением конфига в папке Scada/ScadaComm/Config
    И когда добьетесь результата, тогда уже окончательно правильный конфиг переносить в папку Project/Instance

    Есть логи с прибора со сторонних программ? Например сделанные каким нибудь монитором порта?
    Есть возможность сделать удаленное подключение к прибору чтобы можно было виртуальный порт создать у меня и попробовать опросить прибор?

    Вечером посмотрю подробнее, а то опять надо доки на протокол открывать и вспоминать. К сожалению не очень пока дружу с кодом оконных интерфейсов, чтобы сделать настройку более простой, а не руками.
    Ну еще не реализованы в драйвере текстовые поля, мои оба прибора их не имеют.

    #20738
    manjey73
    Участник

    з.ы. надо бы его в бесплатный вариант перевести и допиливать за донаты 🙂
    Может кто и графику прикрутит 🙂

    #20739
    dimasina71
    Участник

    добрый день
    спасибо за отклик.

    я честно говоря думал, что обмен по порту и есть вот эти байты:

    init_slaves: debug: sending init frame #1
    [2021-09-04 07:12:06] SEND (zu): 10 40 FD 3D 16
    init_slaves: debug: sending init frame #2
    [2021-09-04 07:12:08] SEND (zu): 10 40 FD 3D 16
    [2021-09-04 07:12:10] SEND (zu): 10 5B 03 5E 16
    [2021-09-04 07:12:11] RECV (zu): 68 71 71 68 08 03 72 44 28 60 10 49 6A 88 04 8C 00 00 00 0C 78 44 28 60 10 04 06 00 00 00 00 82 04 6C A1 21 C2 84 00 6C FF FF 84 04 06 00 00 00 00 C4 84 00 06 00 00 00 80 82 0A 6C A1 29 84 0A 06 00 00 00 00 04 13 23 00 00 00 02 59 AB 08 02 5D AB 08 02 61 00 00 04 2D 00 00 00 00 04 3B 00 00 00 00 04 6D 3A 07 A4 29 04 26 57 00 00 00 02 FD 17 00 00 1F 06 16
    mbus_frame_print: Dumping M-Bus frame [type 4, 119 bytes]: 68 71 71 68 08 03 72 44 28 60 10 49 6A 88 04 8C 00 00 00 0C 78 44 28 60 10 04 06 00 00 00 00 82 04 6C A1 21 C2 84 00 6C FF FF 84 04 06 00 00 00 00 C4 84 00 06 00 00 00 80 82 0A 6C A1 29 84 0A 06 00 00 00 00 04 13 23 00 00 00 02 59 AB 08 02 5D AB 08 02 61 00 00 04 2D 00 00 00 00 04 3B 00 00 00 00 04 6D 3A 07 A4 29 04 26 57 00 00 00 02 FD 17 00 00 1F 06 16

    «Есть возможность сделать удаленное подключение к прибору чтобы можно было виртуальный порт создать у меня и попробовать опросить прибор?» — возможность есть. как реализовать?

    #20740
    manjey73
    Участник

    Да, это и есть ответ прибора на запрос, одна телеграма, в которой все переменные.
    Какой у счетчика Адрес и какой ID ?

    Если у вас счетчик с физикой MBus, и подключаете через конвертер к ПК, то нужен TCP C Сервер для COM порта по вашу операционку. Вроде и для Windows такие есть.
    Ну и потом в Брендмауэре и на роутере открыть порт и сделать проброс.

    #20741
    manjey73
    Участник

    10 5B 03 5E 16 Если читать сторонней программой всегда здесь 5B ?

    #20742
    manjey73
    Участник
    <?xml version="1.0" encoding="utf-8"?>
    <DevTemplate Name="Zenner Celsius" Init="true" Address="true" EFBCD_onprotocol="true" Bus_Timeout="500">
      <SndGroups>
        <SndGroup SndActive="true" SndCnt="1" SndName="Information" SndType="REQ_UD2" SndFrame="Short" SndCField="5B" SndAField="" SndCIField="" />
      </SndGroups>
    </DevTemplate>

    Попробуйте запустить с таким xml
    Файл необходимо расположить в Instance проекта в папке ScadaComm/Config
    Если он создаст телеграму, скопировать из Scada/ScadaComm/Config в папку инстанса проекта чтобы при передачи серверу не перетирался пустым.

    • Этот ответ был изменен 2 года, 7 месяцев назад от manjey73.
    #20744
    dimasina71
    Участник

    адрес mbus у счетчика 3
    ID 10602844
    на этом счетчике (слава чему-то-там) есть интерфейс и кнопка — поэтому мы прошили туда адрес mbus. ID судя по-всему жестко забит внутри и называется Fabrication number.

    #20745
    dimasina71
    Участник

    не у всех
    иногда вот такой 10 7B FD 78 16

    #20746
    dimasina71
    Участник

    попробовал с вашим xml:

    2021-09-05 22:55:54 Инициализация линии связи 1 «heat meter»

    2021-09-05 22:55:54 Запуск линии связи 1 «heat meter»

    2021-09-05 22:55:54 Открытие последовательного порта COM1

    2021-09-05 22:55:54 Сеанс связи с КП 10 «ZennerCS», тип: KpMbus, адрес: 3
    Отправка (5): 10 40 03 43 16
    Приём (0/1):
    Отправка (5): 10 5B 03 5E 16
    Приём (0/262):
    2021-09-05 22:55:57 Ошибка: Bus Timeout КП 10 «ZennerCS»
    2021-09-05 22:55:57 Ошибка при выполнении сеанса опроса КП 10 «ZennerCS»: Последовательность не содержит соответствующий элемент

    хотя размещение в instance помогло — файл перестал пропадать.
    раздел с телеграммой не создал ни там, ни там

    #20747
    dimasina71
    Участник

    в понедельник попробуем прокинуть порт. сегодня нет никого

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