Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Темы - Серега

Страницы: 1 ... 5 6 [7] 8 9 10
91
Ошибки / Табуляция
« : 22 Июля 2020, 14:00:41 »
Добрый день!
Заметил в редакторе скриптов. Версия ПО 2.3.6.12.
Если делать Tab в начале строки все класс. Один Tab равен 2 пробелам.
Если делать Tab в середине или конце (например отодвинуть комментарий и т.п.) то двигается вся строка с самого начала.
Пока Вы не объясните, что это фишка, будем считать, что это маленький глюк.  ;D
Жду ответов и вопросов.

92
Ваши вопросы / Кнопки с блокировкой
« : 16 Июля 2020, 14:32:11 »
Добрый день!
Нужно было сделать взаимно разблокирующиеся кнопки. Поясню:
1. 2 кнопки с фиксацией (Открыть и Закрыть), привязаны к соответствующим переменным. Так же привязаны вторые переменные (с приставкой еХ) - сигналы от кольцевиков
2. При запуске проекта идет инициализация переменных и изменяются свойства графических элементов согласно условиям в скриптах (доступность текст и т.д.)
3. Соответственно когда проект полностью запущен кнопка "Открыть" отжата, доступна, надпись на ней "Открыть". Кнопка "Закрыть" нажата, не доступна(как бы заблокирована), и надпись "Закрыто"
Думал сделать как бы промежуточное состояние кнопки. Нажали подали команду через привязанную переменную. Пока не сработал например кольцевик (вторая переменная кнопки) в текущем положении кнопки поменять по сработке надпись. Но что то пошло не так.
1. Создал скрипт в глобальном модуле:
Код: (delphi)
procedure ChangeTextButton(NameButton:TM_Button; Caption_On:string;  Caption_Off:string);
begin
  if NameButton.VariableEx.Value = 1 then
    NameButton.States[1].Caption := Caption_On
  else
    NameButton.States[1].Caption := Caption_Off;
end;

2. Создал скрипт "Запуск проекта" и вызвал из глобального процедуру:
Код: (delphi)
ChangeTextButton(Button427, 'Выключен', 'Выключается'); 
3. Из ПЛК посылаю нужное состояние кольцевика (True). Запускаю проект вместе с орс. И...
И на кнопке надпись  'Выключается'.
Можете сказать, что делаю не так.
Жду вопросов и ответов.


93
Ошибки / Смена IP адреса в клиенте
« : 02 Июля 2020, 16:23:41 »
Добрый день!
Столкнулся случайно с одной проблемой.
При выборе в клиенте какой запускать проект есть поле, где указывается адрес сервера.
Если вводить правильно "localhost" и нажать Enter - показываются все проекты и все работает.
Если вводить не правильно "дщсфдрщые"(localhost по русски)  и нажать Enter - походу ПО скады пытается найти сервер, не находит и ... все виснет. И там ошибки.
Версия 2.3.6.12 (demo-time). Но ловил такое и на лицензии.
Проверьте у себя пожалуйста.
Жду ответов и вопросов.

94
Ваши вопросы / Интеграл в скаде
« : 17 Июня 2020, 16:06:31 »
Добрый день!
Многие могут сказать зачем это надо. Поверьте надо. На форуме есть темы связанные с интегрированием при ... формировании отчета.
Меня попросили реализовать как бы runtime и в живую наблюдать график изменения. Но вот вопрос как.
Кратко о задаче. Есть ток и напряжение. формула простая Ток умножаем на Напряжение делим это все на 3600 и берем интеграл по времени действа (от 0 до окончания процесса секунд 40).
Один из способов 1секундный скрипт считаем, передаем в переменную под архивированием. В конце запрос к базе на сумму за период
или
Второй способ 1секундный скрипт считаем, передаем в переменную под архивирование и в локальный массив.
Еще пару способов то же самое но по изменению тока и напряжения.
Если кто может что нибудь подсказать.
Жду вопросов и предложений

95
Добрый день!
Служба эксплуатации задала вопрос. Можно ли в одной таблице выделить нужную строку, а во второй таблице выделить соответствующую.
Количество строк в обоих таблицах одинаково и если выбрали 7 строку в первой таблице, то во второй таблице должна выделиться 7 строка.
То есть если у нас в таблицах 3..4 строки отследить их не проблема.
Но если строк больше начинают юзеры путаться.
Игры с чередованием строк (цветом и прозрачностью) им особо не помогла (по их утверждениям). Вот отсюда и вопросы и предложения:
1. В будущем будет ли добавлена функция отслеживания состояния привязанной таблицы в выбранной таблице (надеюсь понятно)
2. Или добавлено свойство "Выделить строку номер ХХХ", которое можно менять в скриптах
Жду вопросов и предложений.

96
Добрый день!
На данный момент свойство "картинка.текстура" является "только чтение".
Через скрипт поменять ссылку на другую картинку невозможно.
Кроме как варианта делать через видимость/невидимость других вариантов нет.
Вы рассматриваете в будущем добавить такую возможность, т.е. через скрипт изменить ссылку на картинку?
Или есть другой вариант изменить картинку.
Жду вопросов и предложений.

97
Ваши вопросы / Список он же ComboBox V2
« : 02 Апреля 2020, 12:09:34 »
Добрый день!
Идея была следующая.
Берем ComboBox и прикручиваем к нему столбец из базы данных. Итак ...
1. В скрипте "Проект полностью запущен":
  - очищаем нужный список
  - запрашиваем из БД количество строк в нужном столбце конкретной таблицы указанной в настройках БД 
Код
RunSQL('SELECT count(*) FROM ways', nil, 150);
2. В скрипте "Выполнен SQL запрос" переменной  присваиваем значение количества строк через Case DataSet.Tag of
Код
150 : tblCountWays.Value := DataSet[0].AsInt;
3. В глобальном модуле объявляем процедуру вот такую:
Код
procedure ReadyComboBox (CountWaysInTbl:TM_Variable;
                         SelectedComboBox:TM_ComboBox;
                         DataSetX:TM_DataSet);
var
i:integer;
begin
SelectedComboBox.Clear;
for i := 0 to CountWaysInTbl.AsInt - 1 do
  SelectedComboBox.AddItem(DataSet[i].AsStr);
end;
4. Далее делаем универсальный скрипт:
Код
RunSQL('SELECT id_ways FROM etp_tc_insat.ways', nil, 151);
и вешаем его на OnClick нужного ComboBox
5. Далее в скрипте "Выполнен SQL запрос" вызываем через Case DataSet.Tag of глобальную функцию:
Код
151 : ReadyComboBox(tblCountWays, cbWayEnter, DataSet);
И вот тут выскакивает ошибка с указанием на строку в глобальном модуле SelectedComboBox.AddItem(DataSet [count].AsStr);
И задумка не работает. Можете помочь.
Жду вопросов и предложений

98
Добрый день!
Ситуация следующая.
Сняли ПЛК для проверки на пару недель. Но ОРС-сервер был в самом ПЛК настроен (нынче фишка у производителей ПЛК).
СКАДА настроена на данный ОРС и получала данные с него. И после отключения ПЛК сервер СКАДА засыпан ошибками типа:
"Имя ОРС сервера: не удалось подключиться. статус кода: {блаблабла}". Удалять переменные скрипты и т.д. с данного ОРС не хочется.

Рассматриваете ли Вы введение функции останова опроса ОРС-серверов на сервере скады через меню редактора (например еще один выпадающий список со строками "Включить в работу ОРС" и "Выключить из работы ОРС") с последующей перегрузкой сервера?

Жду вопросов и ответов.

99
Добрый день!
Не нашел похожей темы. Поэтому сначала вводная.
При переходе на субстраницу скриптом заполняем таблицу из DateSet.
В таблице юзер выбирает нужную строчку и жмет кнопку.
На кнопке висит универсальгый скрипт с процедурой из глобального модуля по присвоению переменной значения ячейки.
Код
TU4XXXMXX_XXXXRCS001_iPositionStop_Set.Value := 10 * StrToFloat(UTF8ToString(tblRoutes_U4XXXMXX_XXX.Columns(4).Cells(tblRoutes_U4XXXMXX_XXX.RowIndex).Text));
В поле отображается значение переменной TU4XXXMXX_XXXXRCS001_iPositionStop_Set, в доп.настройках которой стоит сдвиг на минус один(-1).
По сути получается следующее:
В таблице отображается 56.7, переменной присваивается значение 567 и в поле должно отобразиться 56.7.
Но в поле отображается 567.
Читая по данной теме менял тип переменной. Менял число сдвига. Менял шкалы. Но что то пошло не так. Нужного результата нет.
Подскажите что не так?
Жду вопросов и предложений!

100
Добрый день!
Согласно руководству у нас есть скрипт типа "Ошибка SQL запроса". Логика создания понятна. Есть ошибка есть сообщение в Msg.
Но так же у нас есть (можно сказать ID запроса, DataSet) в  RunSQL свой ATag. И в скрипте типа "Выполнен SQL запрос" все замечательно работает.
Теперь к ситуации.
В универсальном скрипте, привязанном к кнопке по нажатию, формируем RunSQL(aQuery, nil, 100), где
Код: (delphi)
 aQuery := 'CREATE TABLE ' + NameNewTable.AsStr + ' LIKE TemplateTable'.
Далее в скрипте типа "Ошибка SQL запроса" добавляем
Код: (delphi)
TextSQLError.Value := Msg;
if TextSQLError.Value <> '' then
    AddMessage(Now, mkWarning, 'Таблица не добавлена', True, True);
и все прекрасно работает если мы пытаемся имитировать именно ошибку добавления таблицы с таким же именем.
Но вот вопрос, не будет ли путать оператора сообщение о создании таблицы при других ошибках SQL запросов. По логике событие будет формироваться при любых ошибках SQL запросов. Честно пока не подтвердилось опасение. Возможно ошибки Таблица. RunSQL к типу "Ошибка SQL запроса"  не относятся.
Можете у себя это проверить или опровергнуть опасения.

И теперь маленькое предложение-вопрос.
Если в скрипте типа "Ошибка SQL запроса" использовать следующую конструкцию:
Код: (delphi)
begin
case DataSet.Tag of
  100  :begin
          TextSQLError.Value := Msg;
          if TextSQLError.Value <> '' then
              AddMessage(Now, mkWarning, 'Таблица не добавлена', True, True);
        end;
end;
end.
У меня не заработала. Всего скорее, потому что номер 100 относиться к  DataSet, а не к ошибке. И обработка идет в типе скрипта "Ошибка SQL запроса".
Или все таки он может заработать? Потому что я делаю не правильно? или потому что это скоро "... появиться в ближайших обновлениях ..."  :D
Жду вопросов и предожений

101
Ваши вопросы / Клиент подключен или нет
« : 28 Февраля 2020, 09:32:41 »
Добрый день!
Новенькая головоломка прилетела от заказчика. Суть:
Есть сигнал HeartBit (не меняется - нет связи,  меняется - есть связь) для каждого важного объекта.
3 клиента 1 сервер. Каждый клиент управляет своим привязанным объектом.
Если отвалился клиент/завис/случайно выключили остановить изменение HeartBit .
Далее объект видя, что HeartBit не меняется, подразумевает, что типа им никто не может управлять дает команду на останов сам себе.
В руководстве по скриптам в разделе "Работа с клиентами" как токовой функции о состоянии соответствующего клиента нет.
Да есть функция StartPing. Но с ее помощью можно отслеживать работу сети или сетевой карты компьютера на котором открыт клиент.
С компом может быть все в порядке, но клиент закрыт.
В общем можете подсказать:
1. Будете ли внедрять в будущем функцию о состоянии клиента, например состояния выключен/загружается=перегрузка/работа? Или она уже есть? Сервер же как то понимает кто подключен и когда отключается.
2. Как на данный момент можно решить задачку? Или только контролем через  StartPing. Или опять не дочитал справку?
Жду Ваших вопросов и предложений.

102
Ваши вопросы / Список он же ComboBox
« : 25 Февраля 2020, 18:04:48 »
Добрый день!
Задачу поставили но столкнулся с непоняткой.
Есть таблица. Скрипт на полный запуск проекта заполняет через Таблица_в_СКАДЕ.RunSQL('SELECT * FROM `Таблица_в_БД`', tsSaveFixRow) данными Таблица_в_СКАДЕ.
Иногда значения в таблице нужно перезаписать полностью и по принципу заполнения рецептов это в ручную можно долго и нудно сделать.
Но если использовать элемент список вроде все просто. Без привязки к внутренней/внешней переменной.
Согласно индексу выбранной строки делаем соответствующий SQL запрос через IF. Пусть это будет универсальный скрипт.
Код: (delphi)
var
  I: Integer;
  aQuery: string;
begin
  I := ComboBox1.ItemIndex; // получить индекс выбранной строки списка
  if I = 0  then
    tblWaysLimits_f.RunSQL('SELECT * FROM '+ Chr(96) + UpdateInfoLimits_f.AsStr + Chr(96), tsSaveFixRow);

  if I = 1 then
    tblWaysLimits_f.RunSQL('SELECT * FROM '+ Chr(96) + UpdateInfoLimits_f.AsStr + '_1' + Chr(96), tsSaveFixRow);

  if I = 2  then
    ShowMessageClient(GetClientName, 'Alarm!', '2');

  if I = 3  then
    ShowMessageClient(GetClientName, 'Alarm!', '3');
end.

И вот тут начинаются вопросы.
1. данный универсальный скрипт нужно вешать на какую реакцию? по нажатию, но тогда индекс строки будет равен той которая выбрана именно  сейчас. Если выбираем 2 строку, то только со второго нажатия получиться. Правда не получилось на тест-серваке (клон боевого) повторить.
2. если текст скрипта перенести в секундный, то вроде работает. Но
2.1. если у клиента нет имени работает
2.2. если установить имя в настройках не работает на половину. Скрипт вверху запросы делает, а вот вывод сообщений нет.
Правда еще "игрался" с пользователями. Но вроде они ни на что не влияют.
Да версия у нас сейчас 2.3.6.8.
3. Пытался с привязкой к внутренней переменной повторить, но запутался.
Резюме. В целом задача сводиться к следующему:
На одном конкретном клиенте (имя известно и только на нем) конкретный пользователь (имя известно и только он) через список (конкретный и автоматически формирующейся в зависимости от условий выбора, проверено работает так как надо) может изменить через SQL-запрос значения в массиве данных (таблицы), если надо и загрузить начальный массив или модернизированный куда надо. Вот. Надеюсь понятно написал.
Пока просто проверьте у себя с сообщениями.
И может как работать со списком более подробно опишите.
Жду вопросов и предложений.

103
Ваши вопросы / Отчет за месяц
« : 03 Февраля 2020, 11:15:25 »
Добрый день!
Ищу направление, ибо запутался.
Задача.
1. Построить периодический отчет(период = 1 месяц) для переменной.
2. Взять первое значение от начала промежутка и крайнее перед финишем промежутка.
3. Автоматически отправить на email нужному пользователю.
Настройка почты работает. Формирование файла отчета в конкретной папке и с именем по времени создания работает.
Вопросы.
1. Как задать период месяц? Брать при этом периодический источник?
2. Как взять первое значение в диапазоне??
3. Как взять крайнее значение в диапазоне?

Так небольшая добавка.
Рассмотрим гипотетическую ситуацию.
Есть ПЛК.
Есть орс сервер забирающий данные с этого ПЛК.
Есть сервер скады и база данных, с которой он работает.
Есть клиент, на котором отображается тренд архивируемой переменной.
У переменной установлена шкала от -50..+50.
Если все работает у нас строится тренд на клиенте "жирной" линией.
Если отваливается сервер скады мы после восстановления работы сервера на тренде ни чего не увидим.
Если отваливается орс то будет отображаться тонкая линия с нижним значением шкалы привязанной к переменной в скаде (-50).
Если отвалился ПЛК то на тренде мы видим последнее актуальное значение.
Прилетела задача "Сделай быстро мне отчет разницу между началом месяца и концом" и вот что в этот отчет попадет, если:
1. переменная постоянно растет, например в начале 4000, в конце 5678
2. в начале месяца сервер скады был выключен (около недели) и перегружался в течении месяца раз 15
3. орс периодически раз 15 тоже перегружался
4. ПЛК периодически включается, работает и выключается.

Жду вопросов и предложений

104
Добрый день!
На данный момент тестируем виртуальный сервер с Windows Server 2019 Datacenter для перехода (ОЗУ 8Гб, 64-битная, 2 проца)
Параметры виртуалке на принте. Периодически из доменной среды заходим по RDP для корректировки. Просмотр результатов корректировки на рабочих машинах.
Вот решили запустить клиента прямо на виртуалке и словили постоянно одну и туже проблему:
при попытке перехода на определенную страницу клиент на виртуалке вылетает.
Пробовал менять место страницы, ее имя (с Page8 на VBU и обратно) - вылет
Взял последнюю версию рабочего проекта (где сервер скады крутиться тоже на виртуалке, только windows server 17) - вылет
При переходе на SubPage нашей Page вызывается универсальный скрипт с вызовом procedure (x, y, z) из глобального модуля.
Удалял их - вылет.
Пока Вам писал коллеги подтвердили следующее:
1. При переходе на OpenGL вылетов нет, но FPS проседает до слайд шоу.
и выяснили:
2. На SubPage есть элемент TrendViewer. На нем висит скрипт по изменению переменой элемента. Он не причем.
А вот если в TrendViewer в опции:
2.1. "тренды" удалить переменную то все запускается и не вылетает.
2.2. "линий по Х" и "линий по Y" поставить в 0 и не удалять переменную из тренда тоже не вылетает. Это выяснили в тесте так как на этой же SubPage был второй TrendViewer  с 0 в параметрах. И это походу основная проблема.
Протестируйте у себя.
Жду Ваших вопросов и предложений.


105
Ваши вопросы / Тренды. Отрисовка
« : 24 Января 2020, 14:49:06 »
Добрый день!
Случайно заметили, начали разбираться и результат в трех картинках.
Провал.
Есть пила (TestCommunication) от 0 до 100, крутиться в одно секундном скрипте. Тип Integer.
Есть hearbit от скады для каждого объекта (hearbit_obj1, hearbit_obj2  и т.д.), которым в скрипте по изменению переменной TestCommunication присваивается всем hearbit текущее значение переменной TestCommunication. По данной пиле оператор типа контролирует наличие связи. От объектов приходят свои hearbitы подтверждая наличие связи.
Но на рисунке видно, что данные от ОРС идут, но почему то не меняется переменная внутренняя из скрипта.
Скачок.
Тут две ситуации.
1. Выход за пределы значения переменной. По логике работы скрипта 100 максимальное значение. Но там какое то астрономическое.
2. Артефакт отображения. Маленький отрезок вниз. На первом снапе он виден. Делаем приближение тренда - он уже пропал. При дальнейшем увеличении его не видно. Но решил проверить еще раз переписал в желтую ячейку артефакт виден всегда.
Проверьте у себя ну и задавайте вопросы.

Страницы: 1 ... 5 6 [7] 8 9 10