Стартовая страница › Форумы › Разработка и интеграция › Потоки(Thread) — Программы(class) — Переменные
- В этой теме 123 ответа, 4 участника, последнее обновление 2 года назад сделано
manjey73.
-
АвторЗаписи
-
23.08.2024 в 14:09 #34186
manjey73УчастникКак-то можно контролировать отправку, чтобы кругами не ходить?
23.08.2024 в 14:59 #34187
manjey73УчастникХм, похоже мой косяк с чтением и записью переменных в потоках.
Наворотил, что теперь EN не воспринимается потоком и не считает почему-то…23.08.2024 в 15:58 #34189
MikhailМодераторДля чего нужна отправка команд?
Какие выходные формулы используются в выходных каналах?> Как-то можно контролировать отправку, чтобы кругами не ходить?
Информацию об отправке команды можно записывать в события, например, если настроить канал. Также отправка отображается в ScadaServer.log23.08.2024 в 16:23 #34191
manjey73УчастникНашел один косяк, и получил другой.
Суть — если делать запись из Scada, то переменная принимается. Но Записать обратно не получается, так как перетирается значением из канала.
Как зачем нужны команды? — для управления устройствами в дальнейшем. МАУ тут не подходит, потому что не умеет работать по сложным алгоритмам.
К тому же настраивать работу для нескольких однотипных задач проще застрелиться.23.08.2024 в 16:30 #34193
JurasskParkУчастникМАУ тут не подходит, потому что не умеет работать по сложным алгоритмам.
Убийца МАУ идёт. Поточный Искусственный Интеллект 2000 отправлен в прошлое, чтобы остановить МАУ.
😀 😀 😀23.08.2024 в 16:36 #34196
manjey73Участник@JurasskPark не, убийцы МАУ не будет, будет что-то вроде ModSoftPlc но с программированием на C#.
Жалко я не смог достучаться до Scripts в памяти, потому что мой тестовый класс прекрасно откомпилировался в Скриптах и можно было бы программы писать прямо там на C#. Но увы.
Смысл в том, что на МАУ невозможно сделать сложные алгоритмы, он для этого не предназначен в принципе. Там даже сравнения двух каналов нет, а если надо сравнивать несколько каналов, и при этом еще учитывать состояние других переменных, то вообще туши свет, МАУ то там сработает, то сям, когда не требуется. В общем когда делали ротацию кондеев на МАУ я просто упарился, так как много разных условий надо проверять. Создавать кучу каналов при этом лишних.
А тут написал программу, связал с переменными каналов и забыл.24.08.2024 в 18:43 #34243
manjey73УчастникЧто-то хохмы не пойму.
Канал Calculated/Output — формулы
Val(); Stat() и SetVal(CnlNum, Cmd)Но, если из модуля не передать значения, то всегда
---При этом кроме
CnlData curData = ServerContext.GetCurrentData(cnl.Value.CnlNum); if (curData.IsDefined) {там нет записи в канал. Что не так? почему канал перестает работать так, как он бы работал без модуля?
24.08.2024 в 19:17 #34244
manjey73УчастникТакс. Выходная формула SetVal(CnlNum, Cmd) не меняет статус и входная формула Val(); Stat() честно ни черта не записывает в канал, либо обнуляет его…
26.08.2024 в 17:07 #34285
MikhailМодераторПохоже, входная и выходная формулы мешают друг другу.
На мой взгляд, если канал используется модулем, то для него не нужны формулы, а запись в канал нужно делать из модуля, чтобы не было путаницы.Согласен, что для сложных алгоритмов нужны более сложные модули, чем МАУ.
26.08.2024 в 17:25 #34290
manjey73УчастникСкажем так, канал Calculated/Output используется для изменения уставок программы, запущенной из модуля. Как пример.
Но при этом у канала может быть стартовое значение, указанное в «программе».Val();Stat() не позволяет задать значение канала даже без модуля.
Вроде в более ранних версиях это было возможно, но не проверял.
-
Ответ изменён 2 года назад пользователем
manjey73.
27.08.2024 в 13:58 #34328
MikhailМодераторМожно попробовать такую формулу:
// Установить значение уставки по умолчанию. // Для каналов типа Расчётный/выходной public CnlData GetDefaultData(double val) { return Stat() > 0 ? Data() : NewData(val, 1) }27.08.2024 в 14:13 #34330
manjey73Участник;забыли.Работает. входная GetDefaultData(11111)
выходная SetVal(CnlNum, Cmd)Теперь осталось разобраться, как эту переменную сделать типа энергонезависимой для Модуля.
Например стартанули с 11111, потом в процессе поменяли на 22222 и чтобы 22222 уже при следующем старте переменная была.27.08.2024 в 15:15 #34334Romiros
УчастникSetVal(CnlNum, Cmd)
Естественно у тебя это не будет работать. Val(); Stat() просто продлевает значение и текущий статус канала. Если у тебя там был изначально 0, то и будут прочерки. Его же сначала надо задать. Т.е. используй SetData(n, val, stat) или SetData(n, cnlData).
27.08.2024 в 15:20 #34337
manjey73УчастникНу я уже это понял, что SetVal(CnlNum, Cmd) не задает статус и из-за этого прочерки.
Вопрос несколько глобальнее. Как задать значению канала понятия Retain после перезапуска Сервера.Тут вроде нет подобных механизмов в принципе. Надо как-то городить формулами, что не очень то просто, учитывая, что еще и формулы в каналах нужны.
-
Ответ изменён 2 года назад пользователем
manjey73.
27.08.2024 в 15:22 #34339Romiros
УчастникТак я об этом выше написал. Сохранять в значении расчетного канала последнее время изменения. У меня так и делается.
-
Ответ изменён 2 года назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.