Ответы в темах
-
АвторЗаписи
-
RX9COZ
УчастникА как вы его настроили в TCP? Клиентом на реальный IP сервера?
Да, всё так. На ПК где крутится scada статический IP, пусть и за маршрутизатором. В маршрутизаторе настроил перенаправление портов. На ПК в брандмаэуре настроил правило для порта на входящие соединения. В scada настроил канал связи TCP-сервер, который слушает порт который я перенаправил в маршрутизаторе.
Модем соединяется по IP адресу и этому самому порту.
Ещё я пробовал создавать виртуальный COM-порт, софтиной идущей в комплекте к модему. Работает, но я не заметил какого-то преимущества, +/- так же по скорости выходит.Тогда попробуйте взять Tibbo VPS Manager и сделать UDP сервер а в scada
Спасибо, посмотрю что это такое.
RX9COZ
УчастникПонятно, что ничего не получится.
Просто в инструкции на модем сказано, что-то типаUSR-GPRS232-730 supports 2 socket connections simultaneously: socket A and socket B, they are independent.
This DTUonlysupport working as TCP Client and UDP Client.Я и подумал, что, возможно можно как-то установить связь по протоколу UDP, но видимо тут не всё так просто, либо нужен какой-то определённый сервер или же чтобы модему был выдан статический IP адрес. Встроенного VPN клиента в модеме нет конечно-же.
RX9COZ
УчастникЯ сократил как мог. Да, из 10 запросов сократил до 6. Но регистры сильно не по-порядку идут. В своих устройствах я уже давно понял, что карту регистров надо делать оптимальной для опроса за один сеанс связи, но в моём случае заводское устройство.
Дело в том, что из 6 запросов 3 обязательных, а ещё 3 это настройка (всякие коэффициенты, уставки и так далее), которые достаточно опрашивать по команде когда это необходимо или раз в час например. Разберусь как это работает, можно будет попробовать так сделать, заодно и количество трафика сократится.
Возможно понадобится добавить ещё одно устройство на линию, с таким же адресом, но с другим шаблоном устройства, где только регистры для настройки и опрос его раз в час.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, так что вполне рабочий вариант я думаю ?
-
Ответ изменён 2 года, 3 месяца назад пользователем
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 в настройках роутера отключено (только что проверил). -
Ответ изменён 2 года, 3 месяца назад пользователем
-
АвторЗаписи