Разработка модуля

  • В этой теме 14 ответов, 5 участников, последнее обновление 4 года назад сделано Mikhail.
Просмотр 15 сообщений - с 1 по 15 (из 15 всего)
  • Автор
    Записи
  • #24345
    Daniil
    Участник

    Добрый день, не подскажите, как лучше реализовать: написать свой модуль, который будет записывать результаты дорасчетных ТИ или можно через модуль импорт делать update. Просто у меня задача: нажатие на кнопку-идет накопление данных, отключают кнопку-идет поиск экстремумов и среднего арифметического. Дальше эти данные в бд. При нажатии кнопки заранее задается что-то вроде номера команды(то есть id), если id такой есть это просто-update и если нельзя при одной команде несколько переменных, то несколько команд и обновления в базе данных атрибуты эти. Если нет, то их запись. При записи дорасчетные не вписываются, можно в каналах управления задать формулой Val и номер канала, но одновременно запись в модуле импорте нельзя, а в экспорте нельзя дорасчетные ТИ. Я прочел, что можно написать модуль на примере modtestlogic

    #24346
    manjey73
    Участник

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

    Если речь про 5-ю версию, чтобы использовать вложенные формулы необходимо, чтобы формулы всегда возвращали double, тогда их можно вкладывать одну в другую.

    Например TON(TP(Val(100)) — здесь TON запустится и будет работать пока на выходе TP 1-ца от канала 100, но если формула TP будет возвращаемым значением иметь тип bool вы получите ошибку при запуске от CalcEngine
    з.ы. это пример.

    #24347
    Daniil
    Участник

    Я уже нашел через списки свои данные, но мне их надо записать в базу данных. Дорасчетные ТИ при модуле экспорте не записываются, при модуле импорте можно я только понял по одной переменной обновлять(имеется ввиду cmdVal 1 раз можно использовать). Если брать insert то записть одной переменной будет, не то, что хотелось бы

    #24348
    manjey73
    Участник

    Посмотрите последние темы, кто-то писал, что и расчетные каналы смогли записывать в БД

    #24349
    a80808
    Участник

    Объявите канал входным без привязки в Коммуникаторе и ставьте в нем формулу — все будет писаться. К сожалению не пройдет для ежеминутных и т.п. каналов…

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

    Добрый день!
    Модуль экспорта в БД может передавать значения дорасчётных каналов в режиме передачи архива. Эти значения берутся из архива. Какая у Вас версия модуля?

    Свой модуль можно написать, но сначала проверьте, что существующие модули не покрывают Вашу задачу.

    #24356
    JurasskPark
    Участник

    Добрый день, не подскажите, как лучше реализовать: написать свой модуль, который будет записывать результаты дорасчетных ТИ или можно через модуль импорт делать update.

    Извините за наглость, но мне кажется, что вам нужно получше объяснить с реальными примером зачем это делается.
    Например, может проще расписание повесить на SQL, а не кнопку. А может по 1 команде создавать временную таблицу и включать триггер на запись, второй командой отключать триггер. Вариантов много. 🙂 Лично я ничего не понял из вашей задачи. 🙂

    • Ответ изменён 4 года назад пользователем JurasskPark.
    #24369
    Mikhail
    Модератор

    Поддерживаю, простой пример желаемых действий по шагам внесет ясность.

    #24372
    Daniil
    Участник

    У меня есть устройство , которое подключается по modbus TCP/IP. Это устройства получает некие показания. Хочу уточнить то, что я считываю показания еще с экрана oni, на котором уже реализован интерфейс. В этом интерфейсе есть кнопка «запись данных», когда ее нажимают, то я накапливаю данные показаний устройства описанном ранее. Когда кнопку отжимают, то я начинаю высчитывать экстремумы и тд.
    Дорасчетные каналы обновляются только тогда, когда будет отжата кнопка «запись данных» После как я высчитал сразу я должен записать эти данные в базу данных. Если уже данные есть, то обновить, если нет записать. Через модуль Экспорта каналы с типом дорасчетные не записываются, но в модуле импорт данных можно записать эти дорасчетные каналы передав значение в канал управление и выполнить функцию update. То есть у меня запись в базу данных должна произойти 1 раз, когда отжата кнопка «запись данных». Меня интересовало то, что возможно ли было без написания своего модуля внести базу дорасченые каналы. Также был вопрос можно было бы использовать в модуле импорт-команды несколько переменных со значением, чтобы не создавать несколько команд.

    P.S. Я уже реализовал модуль записи дорасчетных каналов в базу данных

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

    По поводу записи в БД через существующий драйвер ответил здесь.

    • Ответ изменён 4 года назад пользователем Mikhail.
    #24417
    Mikhail
    Модератор

    @daniil, сколько времени обычно продолжается накапливание данных?

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

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

    #24441
    Daniil
    Участник

    данные накапливаются пока не отжата кнопка. То есть это может быть и 20 секунд, так и минута. Определенного срока нет

    #24444
    a80808
    Участник

    Кнопку привязать к входному каналу и опрашивать в цикле. А в дорасчетном канале формула с условием — если входной канал = 1 то ++ (чего то там), =0 — не суммируем. Вопрос что и с какой скоростью суммировать. Цикл SCADA = 1 сек.
    Я такое делал когда считал расход, но там дорасчетные каналы были минутными. Т.е. был высчитан и экспериментально проверен минутный расход и его каждую минуту добавлял к общему расходу, если насос включен (канал = 1). Разница небольшая, вопрос сколько добавлять…

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

    Модуль экспорта в БД отправляет данные сразу, не накапливая. Поэтому для данной задачи, наверное, удобнее написать отдельный модуль, который имеет встроенный буфер. Работа с БД должна происходить в отдельном потоке, чтобы не блокировать работу Сервера.

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