Вопросы по скриптам в Simple-Scada 2

Автор Simple-Scada, 29 января 2016, 15:19:20

Simple-Scada

#960
Какой формат задан у переменной которую Вы пытаетесь изменить? Формат задаётся в окне редактирования переменной на вкладке "Дополнительные".
Можете для проверки выслать проект на support@simple-scada.com с указанием проблемного поля?

VladD


Simple-Scada

Можете для проверки выслать проект на support@simple-scada.com с указанием проблемного поля?

VladD

Проект выслал ..проблемные поля..задание частоты для ПЧ

Simple-Scada

VladD, спасибо. Нашли причину, в ближайшее время включим исправление в версию 2.3.6.2.

MaxHari

Есть код, который планируется использовать минимум в 3-х скриптах OnDataChange

Код: pascal
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

#966
ЦитироватьМожно ли его как-то в универсальную процедуру засунуть?
Приведённый код уже универсальный, ведь в нём нет обращений напрямую к какому-либо объекту, вместо этого обращение через Sender. Описание универсальных скриптов можно найти здесь. Поэтому Вы можете создать в меню скриптов новый скрипт с типом "Универсальный", вставить в него этот код и далее назначить полученный скрипт любому объекту, например на событие OnClick или другое. А код будет получать объекты cbSubstation, cbObject, cbElements по тегу того объекта к которому привязан скрипт. Только если объекты cbSubstation, cbObject, cbElements являются раскрывающимися списками, то гораздо производительнее был бы поиск именно среди списков, через GetComboBoxByName.

ЦитироватьЕсли мы в окне клиента меняем значение внутренней переменной, другие клиенты получат то же значение? Внутренние переменные хранятся на сервере?
Если записываем в поле, не связанное с переменной, какое-то значение, на других клиентских машинах будет то же самое значение?
На сервере хранится всё. Все изменения также выполняются на сервере, а клиенты отображают текущее состояние проекта. Поэтому если что-то изменить в проекте, то все клиенты отобразят это изменение.

MaxHari

Спасибо за подробное разъяснение, кое-то уже формируется)

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

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

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

Simple-Scada

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

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

lipvasko

Вопрос , а если  сервер и  клиент находятся не в одноранговой сети  и в разных подсетях , но пингуются без проблем , на основании множества примеров из интернета (дком настроен для всех (гостя), с отключением брандмаузера, изменением политик  ит.д.) , пробовал наладить связь, не выходит , ВОПРОС , а вообще реально наладить связь сервер клиент , находясь в разных подсетях и соответственно доменах?

Simple_Scada

#970
Здравствуйте.

Инструкции по настройке DCOM обычно отличаются(иногда значительно) для различных OPC-серверов, поэтому правильнее всего использовать инструкцию по настройке используемого OPC-сервера. Для получения более точной информации по настройке DCOM рекомендуем обратиться к производителю используемого OPC-сервера. Касаемо настройки в разных подсетях удалось найти только информацию здесь.

lengast

Здравствуйте. Пишу скрипты под задачу. Подскажите почему появляются ошибки.
Этот скрипт должен открывать окно по щелку, если значение переменной (булевой) истинно
Код: pascal
begin
  if HandMode = 1 then
      Window6.ShowAll; // показать окно
end.
Выдает ошибку "Incompatible types"

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

Simple_Scada

#972
Здравствуйте.

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

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

Во втором скрипте два лишних "end". Как и в первом скрипте нужно использовать значение переменной переведенное в необходимый тип. Если нужно записать в переменную текущее время, то нужно использовать функцию Now, скрипты выполняются сервером, поэтому будет взято текущее время сервера. Для приведенного скрипта достаточно одной конструкции if..then:
Код: pascal
begin
  if test1.AsInt = 1 then
    testtime1.Value := Now
  else
    testtime2.Value := Now;
end.

lengast


MaxHari

Здравствуйте!

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