Созданные ответы форума
-
АвторСообщения
-
RX9COZУчастник
Кажется разобрался. Зона нечувствительности была походу дела слишком большой.
Нормальное значение параметра в пределах 0.55 — 0.85 . Границы прописаны как 0.4 нижняя аварийная, 0.45 нижняя, 1.1 верхняя, 1.5 верхняя аварийная и зона нечувствительности 0.2 .
В момент, когда внезапно посыпались события о занижении, по графику смотришь вроде параметры ниже 0.57 и не опускался, но, в графике точки через каждые 5 секунд, а опрос устройства раз в секунду. Вполне допускаю, было кратковременное занижение, которое на графике не отразилось, но триггер на события уже сработал.
Чтобы триггер сработал в обратную сторону, как я понимаю, надо к 0.45 добавить зону нечувствительности 0.2, т.е. параметр должен был перевалить за 0.65, а этого не происходило, поэтому всё синим и светилось.
Тогда почему после перезапуска сервера, когда параметр был в норме, он не был сразу нормального цвета (зелёным я для себя настроил, т.к. фон тёмный). Запоминается где-то что-то видимо ?RX9COZУчастникДа, границы только в события попадают и больше никуда.
RX9COZУчастникДругой вариант
Вот это мне нравится. Этого я и пытался добиться. Заработало ! Мне просто было непонятна структура функции. Где функция объявляется в скобках указываются номера каналов, а значения этих каналов можно присвоить в объявленную переменную выражением например var1 = Val(cnlN1), где cnlN1 тоже переменная типа int содержащая в себе номер канала, значение которого присвоится в var1.
RX9COZУчастникНе работает. Да даже если бы работало, это мне для каждого устройства пришлось бы новую функцию писать. Сейчас 101 канал, в другой раз другой будет и опять новую функцию что-ли создавать.
RX9COZУчастникДля начала мне просто надо в расчётном канале вызвать функцию, с параметрами для канала 101, 102, 103 и чтобы функция получила значения этих параметров и записала в переменные какие-нибудь, чтобы дальше над ними колдовать. Пока не важно какой тип данных, double удобнее.
Я просто не могу в расчётном канале вызвать функцию с исходными данными из других каналов. Видимо не понимаю синтаксиса или это не возможно.И как сама функция должна выглядеть. Например public double MyFunc (var1, var2, var3) и я хочу чтобы в эти переменные var1-var3 записались значения каналов 101-103. Как это сделать ?
Дальше логикой я сам разберусь. Но вычисления так же в какую-то переменную надо запихнуть и потом результат вернуть функцией в расчётный канал.RX9COZУчастникЯ, честно сказать так и не понял, как правильно пишется функция/скрипт. Как функция берёт значения из канала, как возвращает вычисленное значение в канал (в другой или этот же), в каком типе данных и зависит ли этот тип данных от того, что прописано в свойствах канала. Как использовать возвращаемое функцией вычисленное значение в расчётном канале. Как объявляются переменные и их тип в функции.
Но, как мне показалось, с моей задачей справилась достаточно простая входная формула в расчётном канале, применительно к примеру выше подходит вот эта:
((Val(101) + Val(102)) * Val(101)) + Val(103)
Как раз получилось что я хотел. Перечисления получились такими:
0 = недоступен
1 = авария
2 = готов
3 = работаФормула сломается, если в канале 103 вдруг будет 1 просто так, но этого быть не может, т.к. контроллер без наличия 1 в каналах 101 и 102 не выдаст 1 в канале 103, так что вполне рабочий вариант я думаю ?
- Этот ответ был изменен 5 месяцев, 1 неделя назад от RX9COZ.
RX9COZУчастникДобрый день ! Прошу помощи.
Имеется некий контроллер насосов, с которого можно опросить три канала с булевским содержимым, допустим:
101 — Режим Автоматического управления (тумблер на дверце шкафа)
102 — Мотор-Автомат включён
103 — Насос в работеПоявилась задача сделать скрипт, т.к. просто формулой тут не обойтись (вернее можно, но только на 3 вида состояния насоса, а надо 4).
Для корректного отображения на мнемосхеме нужно сделать расчётный канал, например 104, в котором будет храниться 4 состояние насоса (я сделал 4 картинки) с принимаемыми значениями канала от 0 до 3, где, допустим:0 — Насос не доступен (снят или выведен из эксплуатации итд)
1 — Авария насоса
2 — Готов к пуску
3 — Насос в работеЕсли всё отключено, то канал 104 должен принимать значение 0 (недоступен). Если включить мотор-автомат (канал 102=1), то ничего не изменится, так же состояние будет 0. Если попытаться включить в автоматический режим (101=1) при выключенном мотор-автомате (102=0), то должна появиться авария, например это будет значение 1 в канале 104.
Если канал 101 и канал 102 = 1, то в канал 104 должно быть записано 2.
Если все каналы 101-103 = 1, то в канал 104 должно записаться 3.В общем-то логика достаточно простая, но до меня пока не доходит как правильно оформляется скрипт и как правильно его вызывать.
На всяких разных Ардуино-подобных штуках я это неоднократно делал и всё работало, а тут что-то затуп. Наверное, просто не правильный синтаксис.
Понятно что тут всё на связках if else делается.
RapidSCADA v6RX9COZУчастникБыло дело случайно обнаруживал, что демо-ключи в 5 версии на модуль автоуправления и драйвер телеграм работали до перезагрузки компьютера. Смотрю, уже несколько дней прошло, а сообщения всё приходят и приходят )) Перезагрузил — всё ?
RX9COZУчастникЧто касается линий связи. Поставил опцию «отключаться при ошибке» в параметрах ТСР-клиента.
А то есть предположение, что устройства могут не успевать отдать информацию для чтения и из-за этого происходят зависания. К тому же тэгов опрашивается много, и все вразнобой и опрос каждую секунду.
Понаблюдаю.RX9COZУчастникWindows 10 22H2 19045.4046
Как указано в документации указав путь лог файлов на RAM диск <LogDir>R:\SCADA\</LogDir> не работает. Создаётся лог для WEB станции, для других сервисов логи не создаются и службы не запускаются. Если вернуть всё в исходное положение, то работает. Пробовал разные RAM диски.
Пришлось логи опять отключить пока не разберусь с RAM диском, а то запись 5 МБ/с на SSD не очень хорошо.
Наверное лучше отдельную тему создать по RAM диску ?RX9COZУчастникЧто-то с RAM-диском для логов ничего не выходит. Временно включил на системном SSD, понаблюдаем.
RX9COZУчастникПока информационное, но может быть есть какое-то решение, а то надо постоянно контролировать работу линий связи чтобы что-либо не отвалилось. А то «включил и забыл» не получается что-то ? А линий связи у меня 29 штук.
Но и IPv6 в настройках роутера отключено (только что проверил).RX9COZУчастникЕсли долго мучиться, что-нибудь получится ?
Нашёл. Регистр 11253 (начиная с 1), функция чтения 04h, Входные регистры 3х, тип ushort (2 байта). Полученное значение надо разделить на 100 и будет наша расчётная уставка по графику.В новой документации от 2018 года называется как «Эталон. значение датчика S3», в предыдущей редакции называлось «Желаем температура теплоносителя T», вот и попробуй тут догадаться ?
- Этот ответ был изменен 10 месяцев назад от RX9COZ.
RX9COZУчастникECL Tools опрашивает как-то по своему, не по Modbus.
Говорят есть какой-то OPC сервер для этих контроллеров, ещё пока найти его не могу.
Но и в документации нет ни слова про текущую расчётную уставку. Может её и на самом деле нет, хотя и странно.RX9COZУчастникПодниму тему.
Кто опрашивал Danfoss ECL 310 по Modbus, удалось ли кому-нибудь прочитать расчётную уставку по графику температуры подачи отопления (контур 1) ? Это то, что отображается на экране устройства в скобках. Текущие значения читаются без проблем. Уставку ГВС комфорт/эконом без проблем. Температуру комфорта/эконом без проблем. Но то какую он хочет подать — нивкакую, не могу найти необходимый регистр. Может быть его и вовсе нет. Разные версии документации прочитал, ничего не нашёл.
Но внешняя программа ECL Tools всё видит. -
АвторСообщения