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

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

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

    У меня сейчас отпуск и сад/огород 😀

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

    #23303
    manjey73
    Участник

    В NET6 можно для шаблонов использовать сериализацию DataContract но мне этот вариант не очень понравился, так как требует обязательного наличия записей в xml.
    Мне больше понравился вариант, который нашёл ранее, так как можно пустые и не требуемые переменные просто игнорировать при записи, и при чтении их отсутствие не вызывает ошибок.
    Оба варианта требуют создание класса с описанием переменных.
    Работает как в 5-й так и в 6-й версии. Только в 6-й надо Nullable перевести в disable.
    Ну либо читать xml построчно, но мне лениво 😀

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

    Для записи/чтения данных используется объект Connection. Пример

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

    Не могу разобраться как посмотреть описание объекта «Connection». В других проектах в VS2022 можно было от вызова метода перейти к его описанию, но видимо когда я открываю DevTesterLogic.cs у меня в VS не подключены используемые классы и он не позволяет посмотреть их описание.
    Приношу извинения, понимаю что вопрос скорее всего очень глупый, но все же: как посмотреть каким образом работает «Connection», что ему нужно передавать, в каком формате и т.д. ?

    #23323
    manjey73
    Участник

    Собрать нужное

    Ну а потом по F12. Возможно из-за того, что не собраны требуемые библиотеки и не дает посмотреть.

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

    Класс Connection.
    Недавно добавлена краткая инструкция по сборке.

    #23342
    manjey73
    Участник
    // Write EEPROM lowbyte = A0
     // Write EEPROM highbyte = B0
     // Read RAM = Cx
     // Write RAM (16 bit) = DX
     // Write RAM lowbyte = EX
     // Write RAM highbyte = FX

    Вот реально одной командой чтение или запись старшего и младшего байтов ? Непонятно, зачем это ????

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

    Не совсем понял в чем вопрос. EEPROM можно только отдельно high и low byte записывать. RAM в принципе одной командой сразу два байта можно записать (Dx), либо так же отдельно верхний и нижний.
    Запись нужна чтобы менять настройки контроллера. Писать нужно и RAM и EEPROM.
    В целом запись значений сейчас не так важна, мне бы с чтением разобраться…

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

    Возьмем простой пример: регулятор используется чтобы поддерживать постоянную температуру горячей воды. Значение температуры задано на самом контроллере, допустим это 60 градусов. Это значение контроллер хранит у себя и в RAM и в EEPROM. Если мы хотим изменить удаленно температуру например на 65 градусов — нам нужно сначала записать новое значение в RAM, а затем в EEPROM. Думаю понятно что если не записать в EEPROM — то после перезагрузки значение сбросится на 60 градусов. Если записать наоборот только EEPROM — то тогда новое значение применится только после перезагрузки.

    #23345
    manjey73
    Участник

    @7in я так понимаю. что записав в RAM мы меняем до перезапуска, а в EEPROM это что-то в роде retain переменной или по умолчанию. Это мелочи на самом деле.

    Вы можете дать код всех преобразований переменных и какие переменные существуют?

    И почему у вас для получения float надо делить на 128 ? связано с чем ?

    з.ы. я начал делать «рыбу» драйвера по принципу своих, но мне надо чуть больше информации по переменным, их типам и требуемым привидениям к нужным значениям.

    Кстати тут подумал, что в 6-й версии можно сделать настраиваемый драйвер без файла шаблона, но пока буду делать по своим старым наработкам.

    #23346
    manjey73
    Участник

    Мне немного непонятен смысл разделения команд на старший и младший байты.

    Надо писать и в старший и в младший байт одновременно в идеале или можно ограничиться отдельными командами, то есть когда оператор самостоятельно пишет старший а потом младший байт ? Или все-таки сделать вариант когда мы посылаем число и драйвер сам запишет и старший и младший байты значения ?

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

    Код для всех преобразований предоставить не представляется возможным, т.к. как я уже говорил у контроллера есть различные «приложения», у каждого приложения свои параметры со своей адресацией в памяти. Частично это описано в конце протокола обмена, там есть таблицы с адресами хранения параметров в памяти.
    Есть параметры, одинаковые для всех приложений (как например показания датчиков температуры), для них адрес в памяти соответственно всегда один будет.

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

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

    Вот например адреса RAM и EEPROM для значений уставки горячей воды
    https://disk.yandex.ru/i/Y242o-PyH02SRw
    Как можно видеть в EEPROM у них одинаковый адрес, отличается только low/high byte

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

    Забыл ответить насчет деления на 128: не знаю точно с чем эта необходимость связана (возможно разрядность АЦП), но в протоколе обмена на стр. 7 есть формула как получить значение температуры, и там нужно делить на 128.

    Как правило все остальные параметры не нужно преобразовывать, только из hex в dec перевести и все. Тоесть это только с датчиками температуры такие заморочки с делением.

    #23351
    manjey73
    Участник
    // Read RAM = Cx
    // Write RAM (16 bit) = DX
    // Write RAM lowbyte = EX
    // Write RAM highbyte = FX

    я правильно понимаю, что вместо X здесь какой-то HEX символ в зависимости что мы читаем ?

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