Стартовая страница › Форумы › Разработка и интеграция › Разработка модуля
Помечено: Разработка модуля
- В этой теме 14 ответов, 5 участников, последнее обновление 4 года назад сделано
Mikhail.
-
АвторЗаписи
-
11.08.2022 в 09:19 #24345
Daniil
УчастникДобрый день, не подскажите, как лучше реализовать: написать свой модуль, который будет записывать результаты дорасчетных ТИ или можно через модуль импорт делать update. Просто у меня задача: нажатие на кнопку-идет накопление данных, отключают кнопку-идет поиск экстремумов и среднего арифметического. Дальше эти данные в бд. При нажатии кнопки заранее задается что-то вроде номера команды(то есть id), если id такой есть это просто-update и если нельзя при одной команде несколько переменных, то несколько команд и обновления в базе данных атрибуты эти. Если нет, то их запись. При записи дорасчетные не вписываются, можно в каналах управления задать формулой Val и номер канала, но одновременно запись в модуле импорте нельзя, а в экспорте нельзя дорасчетные ТИ. Я прочел, что можно написать модуль на примере modtestlogic
11.08.2022 в 09:51 #24346
manjey73УчастникВ формулах можно несколько переменных применять, зависит все от задачи и варианте решения. Можно использовать словари, можно массивы для сохранения промежуточных значений если они необходимы.
Если речь про 5-ю версию, чтобы использовать вложенные формулы необходимо, чтобы формулы всегда возвращали double, тогда их можно вкладывать одну в другую.
Например TON(TP(Val(100)) — здесь TON запустится и будет работать пока на выходе TP 1-ца от канала 100, но если формула TP будет возвращаемым значением иметь тип bool вы получите ошибку при запуске от CalcEngine
з.ы. это пример.11.08.2022 в 10:10 #24347Daniil
УчастникЯ уже нашел через списки свои данные, но мне их надо записать в базу данных. Дорасчетные ТИ при модуле экспорте не записываются, при модуле импорте можно я только понял по одной переменной обновлять(имеется ввиду cmdVal 1 раз можно использовать). Если брать insert то записть одной переменной будет, не то, что хотелось бы
11.08.2022 в 10:29 #24348
manjey73УчастникПосмотрите последние темы, кто-то писал, что и расчетные каналы смогли записывать в БД
11.08.2022 в 10:58 #24349
a80808УчастникОбъявите канал входным без привязки в Коммуникаторе и ставьте в нем формулу — все будет писаться. К сожалению не пройдет для ежеминутных и т.п. каналов…
11.08.2022 в 14:10 #24353
MikhailМодераторДобрый день!
Модуль экспорта в БД может передавать значения дорасчётных каналов в режиме передачи архива. Эти значения берутся из архива. Какая у Вас версия модуля?Свой модуль можно написать, но сначала проверьте, что существующие модули не покрывают Вашу задачу.
11.08.2022 в 20:18 #24356
JurasskParkУчастникДобрый день, не подскажите, как лучше реализовать: написать свой модуль, который будет записывать результаты дорасчетных ТИ или можно через модуль импорт делать update.
Извините за наглость, но мне кажется, что вам нужно получше объяснить с реальными примером зачем это делается.
Например, может проще расписание повесить на SQL, а не кнопку. А может по 1 команде создавать временную таблицу и включать триггер на запись, второй командой отключать триггер. Вариантов много. 🙂 Лично я ничего не понял из вашей задачи. 🙂-
Ответ изменён 4 года назад пользователем
JurasskPark.
12.08.2022 в 12:54 #24369
MikhailМодераторПоддерживаю, простой пример желаемых действий по шагам внесет ясность.
12.08.2022 в 14:23 #24372Daniil
УчастникУ меня есть устройство , которое подключается по modbus TCP/IP. Это устройства получает некие показания. Хочу уточнить то, что я считываю показания еще с экрана oni, на котором уже реализован интерфейс. В этом интерфейсе есть кнопка «запись данных», когда ее нажимают, то я накапливаю данные показаний устройства описанном ранее. Когда кнопку отжимают, то я начинаю высчитывать экстремумы и тд.
Дорасчетные каналы обновляются только тогда, когда будет отжата кнопка «запись данных» После как я высчитал сразу я должен записать эти данные в базу данных. Если уже данные есть, то обновить, если нет записать. Через модуль Экспорта каналы с типом дорасчетные не записываются, но в модуле импорт данных можно записать эти дорасчетные каналы передав значение в канал управление и выполнить функцию update. То есть у меня запись в базу данных должна произойти 1 раз, когда отжата кнопка «запись данных». Меня интересовало то, что возможно ли было без написания своего модуля внести базу дорасченые каналы. Также был вопрос можно было бы использовать в модуле импорт-команды несколько переменных со значением, чтобы не создавать несколько команд.P.S. Я уже реализовал модуль записи дорасчетных каналов в базу данных
15.08.2022 в 09:40 #24415
MikhailМодератор15.08.2022 в 09:44 #2441715.08.2022 в 09:46 #24418
MikhailМодераторНа мой взгляд, если результаты, которые хранятся в дорасчётных каналах, нужно записывать в БД просто по изменению, то задачу можно было бы решить модернизацией существующего модуля экспорта в БД. Если логика работы с базой более сложная, то удобнее написать свой модуль под конкретную задачу.
15.08.2022 в 13:35 #24441Daniil
Участникданные накапливаются пока не отжата кнопка. То есть это может быть и 20 секунд, так и минута. Определенного срока нет
15.08.2022 в 16:41 #24444
a80808УчастникКнопку привязать к входному каналу и опрашивать в цикле. А в дорасчетном канале формула с условием — если входной канал = 1 то ++ (чего то там), =0 — не суммируем. Вопрос что и с какой скоростью суммировать. Цикл SCADA = 1 сек.
Я такое делал когда считал расход, но там дорасчетные каналы были минутными. Т.е. был высчитан и экспериментально проверен минутный расход и его каждую минуту добавлял к общему расходу, если насос включен (канал = 1). Разница небольшая, вопрос сколько добавлять…16.08.2022 в 17:34 #24457
MikhailМодераторМодуль экспорта в БД отправляет данные сразу, не накапливая. Поэтому для данной задачи, наверное, удобнее написать отдельный модуль, который имеет встроенный буфер. Работа с БД должна происходить в отдельном потоке, чтобы не блокировать работу Сервера.
-
Ответ изменён 4 года назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.