Драйвер ECL Comfort 300/200

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

    Да, все верно. Т.к. адрес в RAM состоит из трёх hex символов.

    #23353
    manjey73
    Участник

    То есть из трех? по вашему же коду всего два байта… то есть 4 символа hex.

    Ладно, пока это не важно… с одной стороны у нас есть для Температуры 0xCE + байт
    Вот это 0xCE я могу вынести как отдельный элемент, но тогда получится что-то вроде вложенных классов и с ними будет труднее сделать графическую настройку драйвера (по опыту)
    Проще в каждом запросе указывать этот байт a (0xCE и т.д.) но тогда сложнее сделать разделение переменных в таблице логирования устройства, хотя если учесть, что это только для Администратора то и нужно ли?

    Пока пытаюсь сделать плоскую структуру…

    #23354
    7in
    Участник

    по вашему же коду всего два байта… то есть 4 символа hex

    Все верно. Первый символ hex — это команда (чтение, запись high/lowbyte), остальные три это адрес в памяти. В этом можно убедиться открыв мой скриншот из протокола обмена (прикладывал выше) там в таблице указаны адреса в памяти — они состоят из трех hex символов.
    Может быть есть смысл сделать драйвер вроде того, как реализовано чтение модбас регистров? Т.е. при настройке мы будем указывать вручную первый и второй байт (для записи нужно продумать механизм отдельно). Задачей драйвера в таком случае будет посчитать контрольную сумму, отправить массив байт, считать ответ, проверить контрольную сумму. Привести считанное значение к нужному виду можно уже через формулы в самой RapidSCADA, можно это в драйвере не реализовывать.
    В таком случае драйвер получится универсальным и будет подходить под любое приложение. Минус в том, что вручную придется заносить все параметры.
    Таким образом еще и решится проблема считывания только необходимых параметров. Т.к. драйвер будет читать только то, что мы сами задали, лишних запросов к устройству не будет.

    #23355
    manjey73
    Участник

    @7in на данный момент я так и делаю. В файл шаблона заносится 1-й и 2-й байт.
    А так же 1-й байт, если переменная и чтение и запись.

    Формат переменной — «float», «int» и т.д. тут вы сами потом добавите в код требуемые преобразования как для чтения, так и для записи.

    А так же Код и Имя тега.

    Графическую настройку пока не придумал как делать. В идеале сделать согласно протокола выпадающие списки, но тогда придется таблицу делать по столбцам другим кодом. Ранее я разобрался как автоматом создавать в DataGridView, но там тогда нужно ручками все прописывать, так как ComboBox туда не притянешь просто так.

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

    #23356
    manjey73
    Участник

    Отправка (5): CE 3A 00 00 F4

    Отправка (5): CE 38 00 00 F6

    Проверьте, КС соответствует передаваемым запросам ?

    #23357
    7in
    Участник

    Контрольные суммы верные. В ручном режиме можно вот здесь считать/проверять:
    https://onlinehextools.com/xor-hex-numbers
    Доступ к прибору организую. Будет MOXA Nport в режиме TCP Server.
    Чуть позже предоставлю IP адрес и порт для доступа к устройству.

    #23358
    manjey73
    Участник

    @7in киньте тестовое письмо на почту aburakhin@bk точка ру

    Я смотрел явовский вариант и мне стало интересно, когда нет датчика или он в коротоше ECL действительно присылает строковой ответ «Нет датчика» ?

    • Этот ответ был изменен 1 год, 11 месяцев назад от manjey73.
    #23360
    manjey73
    Участник

    А, нашел

    private static final float NO_SENSOR = 192.0F;
    private static final float SENSOR_SHORTCIRCUIT = -64.0F;

    Типа если нет сенсора то значение 192, если в коротком то -64

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

    #23999
    manjey73
    Участник

    Driver Danfoss ECL 200/300

    Выкладываю то, что есть, разбирайтесь.
    Команд на запись нет, не реализовано, читать должен. Mul и Div для дальнейшего умножения и деления полученных значений в зависимости от типа.
    Если тип указан как temp то деление на 128 будет автоматически, можно установить тип float и умножить на 0,0078125 или разделить на 128 и получится то же самое по идее.

    p.s. делал по сути вслепую по ссылкам выше на javascript код, в коде есть лишнее вероятно, удалять не стал, вдруг пригодится кому.

    Можете допиливать, если есть на чем тестировать, при необходимости добавлю или изменю текущие файлы…

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

    Для какой версии Rapid SCADA?
    Можно ли выложить этот драйвер в репозиторий модулей?

    #24018
    manjey73
    Участник

    Для 6-й версии. @7in писал, что неправильной записью команды можно уложить прибор, по этому без точного понимания что и куда пишется не стал делать команды.

    По сути это набросок драйвера но был проверен на чтение.

    #24881
    7in
    Участник

    Приношу извинения за то, что пропал на некоторое время. Огромное Вам спасибо за проделанную работу. Изучу Ваш драйвер и протестирую на своих приборах. О результатах обязательно здесь отпишусь.

    #24882
    manjey73
    Участник

    @7in если еще более подробно напишите по командам, чтобы добавить и не напортачить, было бы полезно их добавить туда же в драйвер.

    #25860
    7in
    Участник

    Установил драйвер на 6.0.0~rc1 — Работает!
    https://disk.yandex.ru/d/_UA3RPpecwL4kw
    В ближайшее время займусь добавлением всех необходимых параметров для считывания, и соответственно проверю стабильность работы.
    После этого постараюсь сформулировать как должны работать команды на запись.
    Еще раз большое спасибо.

    #25863
    manjey73
    Участник

    Ок, пишите, постараюсь доработать. Если будут кусочки кода для понимания, будет даже быстрее.

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