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

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

Автор Тема: Вопросы по скриптам в Simple-Scada 2  (Прочитано 520901 раз)

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3197
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #960 : 29 Октября 2019, 18:05:24 »
Какой формат задан у переменной которую Вы пытаетесь изменить? Формат задаётся в окне редактирования переменной на вкладке "Дополнительные".
Можете для проверки выслать проект на support@simple-scada.com с указанием проблемного поля?
« Изменён: 29 Октября 2019, 18:06:54 от Simple-Scada »

VladD

  • Новичок
  • *
  • Сообщений: 18
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #961 : 29 Октября 2019, 18:12:16 »
формат и 0.# и 0.##

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3197
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #962 : 29 Октября 2019, 18:14:59 »
Можете для проверки выслать проект на support@simple-scada.com с указанием проблемного поля?

VladD

  • Новичок
  • *
  • Сообщений: 18
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #963 : 29 Октября 2019, 18:17:06 »
Проект выслал ..проблемные поля..задание частоты для ПЧ

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3197
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #964 : 30 Октября 2019, 23:27:57 »
VladD, спасибо. Нашли причину, в ближайшее время включим исправление в версию 2.3.6.2.

MaxHari

  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #965 : 06 Ноября 2019, 18:13:27 »
Есть код, который планируется использовать минимум в 3-х скриптах OnDataChange

Код
cbSubstation := GetObjectByName('cb_Substation' + IntToStr(Sender.Tag)) As TM_ComboBox;
cbObject := GetObjectByName('cb_Object' + IntToStr(Sender.Tag)) As TM_ComboBox;
cbElements := GetObjectByName('cb_Elements' + IntToStr(Sender.Tag)) As TM_ComboBox;
Можно ли его как-то в универсальную процедуру засунуть?

И прошу прощения за, возможно, глупые вопросы:
Если мы в окне клиента меняем значение внутренней переменной, другие клиенты получат то же значение? Внутренние переменные хранятся на сервере?
Если записываем в поле, не связанное с переменной, какое-то значение, на других клиентских машинах будет то же самое значение?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3197
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #966 : 07 Ноября 2019, 09:44:04 »
Цитировать
Можно ли его как-то в универсальную процедуру засунуть?
Приведённый код уже универсальный, ведь в нём нет обращений напрямую к какому-либо объекту, вместо этого обращение через Sender. Описание универсальных скриптов можно найти здесь. Поэтому Вы можете создать в меню скриптов новый скрипт с типом "Универсальный", вставить в него этот код и далее назначить полученный скрипт любому объекту, например на событие OnClick или другое. А код будет получать объекты cbSubstation, cbObject, cbElements по тегу того объекта к которому привязан скрипт. Только если объекты cbSubstation, cbObject, cbElements являются раскрывающимися списками, то гораздо производительнее был бы поиск именно среди списков, через GetComboBoxByName.

Цитировать
Если мы в окне клиента меняем значение внутренней переменной, другие клиенты получат то же значение? Внутренние переменные хранятся на сервере?
Если записываем в поле, не связанное с переменной, какое-то значение, на других клиентских машинах будет то же самое значение?
На сервере хранится всё. Все изменения также выполняются на сервере, а клиенты отображают текущее состояние проекта. Поэтому если что-то изменить в проекте, то все клиенты отобразят это изменение.
« Изменён: 07 Ноября 2019, 09:45:51 от Simple-Scada »

MaxHari

  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #967 : 08 Ноября 2019, 21:20:10 »
Спасибо за подробное разъяснение, кое-то уже формируется)

Подскажите, пожалуйста:

1. В универсальных скриптах как лучше обращаться к свойствам Sender - как к родителю или к потомку через преобразование. К примеру,

Код
TM_Field(Sender).Value := some_var;
// либо
Sender.Value := some_var;
2. Из имени объекта вытаскивается строка, которая обрабатывается в процедуре. Эту обработку можно делать как внутри процедуры, так и внешне, до её вызова. Что лучше отправлять в качестве параметров процедуры - объект или строку?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3197
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #968 : 10 Ноября 2019, 22:31:51 »
Цитировать
В универсальных скриптах как лучше обращаться к свойствам Sender - как к родителю или к потомку через преобразование.
По производительности оба способа равны, поэтому можно обращаться как угодно.

Цитировать
2. Из имени объекта вытаскивается строка, которая обрабатывается в процедуре. Эту обработку можно делать как внутри процедуры, так и внешне, до её вызова. Что лучше отправлять в качестве параметров процедуры - объект или строку?
Объект лучше.

lipvasko

  • Пользователь
  • **
  • Сообщений: 65
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #969 : 12 Ноября 2019, 08:23:54 »
Вопрос , а если  сервер и  клиент находятся не в одноранговой сети  и в разных подсетях , но пингуются без проблем , на основании множества примеров из интернета (дком настроен для всех (гостя), с отключением брандмаузера, изменением политик  ит.д.) , пробовал наладить связь, не выходит , ВОПРОС , а вообще реально наладить связь сервер клиент , находясь в разных подсетях и соответственно доменах?

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1365
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #970 : 12 Ноября 2019, 11:08:31 »
Здравствуйте.

Инструкции по настройке DCOM обычно отличаются(иногда значительно) для различных OPC-серверов, поэтому правильнее всего использовать инструкцию по настройке используемого OPC-сервера. Для получения более точной информации по настройке DCOM рекомендуем обратиться к производителю используемого OPC-сервера. Касаемо настройки в разных подсетях удалось найти только информацию здесь.
« Изменён: 12 Ноября 2019, 11:09:59 от Simple-Scada »

lengast

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #971 : 13 Ноября 2019, 18:52:37 »
Здравствуйте. Пишу скрипты под задачу. Подскажите почему появляются ошибки.
Этот скрипт должен открывать окно по щелку, если значение переменной (булевой) истинно
Код
begin
  if HandMode = 1 then
      Window6.ShowAll; // показать окно
end.
Выдает ошибку "Incompatible types"

Скрипт 2. Задача- по нажатию кнопки передать переменной текущие время(которое на ОС клиента)
Код
begin
  if test1 = 1 then
  testtime1 := GetClientData;
  end;
  if test1 = 0 then
  testtime2 := GetclientData;
  end;
end.
Компилируется без ошибок, но если нажать "компилировать все", то получаю ошибку "Begin" not found.
Помогите пожалуйста

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1365
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #972 : 13 Ноября 2019, 20:58:29 »
Здравствуйте.

Цитировать
Выдает ошибку "Incompatible types"
Правильно, потому что HandMode - это переменная(тип TM_Variable), а 1 это целое число(тип Integer). Если требуется сравнить значение численной переменной с числом, то нужно использовать свойство AsInt, т.е. взять значение переменной переведенное в тип Integer:
Код: (delphi)
begin
  if HandMode.AsInt = 1 then
      Window6.ShowAll; // показать окно
end.

Другие доступные свойства перевода значения переменной в необходимый тип доступны по ссылке.

Во втором скрипте два лишних "end". Как и в первом скрипте нужно использовать значение переменной переведенное в необходимый тип. Если нужно записать в переменную текущее время, то нужно использовать функцию Now, скрипты выполняются сервером, поэтому будет взято текущее время сервера. Для приведенного скрипта достаточно одной конструкции if..then:
Код: (delphi)
begin
  if test1.AsInt = 1 then
    testtime1.Value := Now
  else
    testtime2.Value := Now;
end.
« Изменён: 13 Ноября 2019, 21:22:28 от Simple-Scada »

lengast

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #973 : 14 Ноября 2019, 17:54:04 »
Спасибо большое. Работает!

MaxHari

  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #974 : 16 Ноября 2019, 08:44:55 »
Здравствуйте!

Имеется 100 строковых переменных для автоматизации процесса. Их можно создать в глобальном модуле либо вычитывать из файла. Обращения относительно редкие.
Подскажите, пожалуйста, что лучше в плане производительности/безопасности?
Если таких переменных будет 1000 и более?