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

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

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

deldemo

  • Старожил
  • ****
  • Сообщений: 308
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #675 : 28 Июня 2018, 10:11:36 »
Спасибо за помощь!!!!!!!!!!
то и изменений придется отправить много.
Может у Вас есть возможность добавить функцию сброса выделенных цветом ячеек таблицы, хотя бы через массив столбцов? Типа- Table1.Columns[1..3].Color := clNone;(Это как образный пример)

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #676 : 02 Июля 2018, 09:29:27 »
Может у Вас есть возможность добавить функцию сброса выделенных цветом ячеек таблицы
Рассмотрим этот вариант.

serg

  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #677 : 05 Июля 2018, 15:44:14 »
Есть 3 кнопки с фиксацией с переменными ( a1 , a2 , a3 ) , как сделать , чтобы при нажатии любых двух - третья исчезала ( или становилась не доступной ) . Т.е из 3-х кнопок оператор мог нажать  одну или две . Допустим , нажал 1-ю и 2-ю , а 3-ю мог нажать , только отключив 1-ю или 2-ю .
« Изменён: 05 Июля 2018, 17:26:13 от serg »

Victor_P.

  • Пользователь
  • **
  • Сообщений: 69
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #678 : 05 Июля 2018, 21:17:33 »
serg, я б сделал скрипт на изменение переменных а1, а2, а3:
Код: (delphi)
begin
  if (a1.AsInt + a2.AsInt + a3.AsInt) >= 2 then
    begin
      if not a1.AsBool then Bt_a1.Visible := false;
      if not a2.AsBool then Bt_a2.Visible := false;
      if not a3.AsBool then Bt_a3.Visible := false;
    end
  else
    begin
      Bt_a1.Visible := true;
      Bt_a2.Visible := true;
      Bt_a3.Visible := true;
    end;
end.
И свойство Visible таки заменил бы на Enable, а то оно как-то не очень эстетично, когда вместо кнопки пустое место.
« Изменён: 07 Июля 2018, 14:50:05 от Simple_Scada »

serg

  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #679 : 07 Июля 2018, 12:37:39 »
Не получается по вашему скрипту .

Сделал по другому . Скрипт по событию - прошла секунда .

Код: (delphi)
begin
  if (Button1.AsInt + Button3.AsInt) > 1 then
    Button2.Visible := False
  else
    Button2.Visible := True ;
end. 

Три скрипта с соответствующими названиями кнопок . Скрипты работают , но кажется так не совсем правильно .
« Изменён: 07 Июля 2018, 14:49:51 от Simple_Scada »

Victor_P.

  • Пользователь
  • **
  • Сообщений: 69
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #680 : 07 Июля 2018, 13:28:52 »
Не получается по вашему скрипту .
Я перед публикацией ответа этот способ сам проверял.

Victor_P.

  • Пользователь
  • **
  • Сообщений: 69
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #681 : 07 Июля 2018, 15:02:58 »
Вопрос к пользователю Simple_Scada
как Вы делаете код делфи в сообщениях?
в редакторе есть просто код, но это не то, а тега для кода делфи или нет или я его в упор не вижу.

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1173
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #682 : 07 Июля 2018, 16:00:13 »
Здравствуйте!

Цитировать
Не получается по вашему скрипту. Сделал по другому. Скрипты работают , но кажется так не совсем правильно.
Victor_P предложил Вам правильный, рабочий вариант. Откройте редактор скриптов, создайте новый скрипт с типом события "Изменились переменные", добавьте в него свои переменные(а1, а2, а3), скопируйте предложенный код и замените в нем имена кнопок, если у Вас они названы по другому. Пример создания скрипта с типом события "Изменились переменные" можно найти здесь.

Цитировать
Вопрос к пользователю Simple_Scada. Как Вы делаете код делфи в сообщениях?
Нужно выбрать обычный код и затем дописать [code=delphi]. Можете для примера открыть Ваше отредактированное сообщение выше.

serg

  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #683 : 09 Июля 2018, 15:31:17 »
Спасибо за помощь . У меня , наверное древняя демо версия . Нет возможности создать скрипт ( по изменению переменных ) . Скачал новую демо версию - всё получилось . И с Enable тоже . Только не Enable , а с Enabled .
« Изменён: 09 Июля 2018, 19:57:47 от serg »

Sergey_Em

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #684 : 10 Июля 2018, 11:21:11 »
Sergey_Em, я придумал 2 варианта:

1. делаем 2 скрипта на изменение переменных, один на PLCtemp, другой на HMItemp
в скрипте на PLCtemp делаем HMItemp := PLCtemp, в скрипте на HMItemp наоборот PLCtemp := HMItemp
при этом будет лишнее присвоение из-за срабатывания скрипта после присвоения и не совсем понятно что делать, если оба события произойдут вместе

2. делаем 1 скрипт на изменение обеих переменных и создаем 2 доп. переменные psPLCtemp и psHMItemp
дальше так:
Код: (delphi)
if (PLCtemp.value <> psPLCtemp.value) and (HMItemp.value <> psHMItemp.value) then
begin
    // что-то делаем, если обе переменные изменились вместе (присваиваем значения с нужным приоритетом);
    psPLCtemp.value := PLCtemp.value;
    psHMItemp.value := HMItemp.value;
    Exit;
end;

if (PLCtemp.value <> psPLCtemp.value) then
begin
    HMItemp.value := PLCtemp.value;
    psPLCtemp.value := PLCtemp.value;
    psHMItemp.value := HMItemp.value;
    Exit;
end;

if (HMItemp.value <> psHMItemp.value) then
begin
    PLCtemp.value := HMItemp.value;
    psPLCtemp.value := PLCtemp.value;
    psHMItemp.value := HMItemp.value;
    Exit;
end;

как то так, может и не очень красиво, но работать должно

1 вариант я сам уже пробовал, но меняются значения только в одну сторону. 2 вариант просто не компилируется, ошибку выдает.

pan2000

  • Постоялец
  • ***
  • Сообщений: 170
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #685 : 10 Июля 2018, 20:09:08 »
Sergey_Em,
Цитировать
1 вариант я сам уже пробовал, но меняются значения только в одну сторону.

Вариант 1 аналогичен задаче обмена значениями двух переменных, т.е. необходима промежуточная переменная.

Скрипт по событию "Изменилось значение переменной связанной ..." для переменных PLCtemp и HMItemp:
Код
var i, j: integer;
begin
  with Sender as TM_Field do j := Value;  // запомнить изменившуюся переменную
  PLCtemp.Value := j;                             // изменить переменные
  HMItemp.Value := j;

  i := i + 1;          // счетчик вызовов этого скрипта
  Text1.Text := 'Событий = ' + IntToStr(i);
end.

Пример во вложении.

Victor_P.

  • Пользователь
  • **
  • Сообщений: 69
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #686 : 10 Июля 2018, 21:11:30 »
  i := i + 1;          // счетчик вызовов этого скрипта
а можно подробнее?
как это счетчик вызовов?
это ж локальная переменная функции, она даже не static,
она ж сбросится в 0 при вызове этой функции.
Или я что-то пропустил?

pan2000

  • Постоялец
  • ***
  • Сообщений: 170
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #687 : 11 Июля 2018, 08:33:11 »
Счетчик вызовов показывает число прохождений этого участка программы с момента запуска проекта.
В данном примере - иллюстрация парных вызовов при изменении одной переменной, включая два вызова при инициализации переменных.

По поводу локальных переменных - нельзя, но если очень хочется (не в рабочем проекте)...
Цитата: « Сообщение от Simple-Scada  21 Июль 2017, 15:02:58 »
Локальные переменные в Pascal, Delphi, C, C++, C# и т.п. языках не инициализируются компилятором и это забота программиста. При каждом очередном вызове скрипта переменной выделяется область памяти и её структура может быть любой (зависит от того, что в ней хранилось ранее), соответственно и значение переменных после выделения памяти может быть каким угодно. Компилятор в Simple-Scada работает аналогично, но при первой инициализации все-таки обнуляет переменную, а при последующих выделяет ту же самую область памяти, что и в первый раз. Поэтому в переменной значение сохраняется (не касается динамических типов данных, например строк). При этом мы рекомендовали бы работать с локальными переменными как и в других языках, т.е. сначала инициализировать, а затем использовать, чтобы значение переменной всегда было очевидным.

Victor_P.

  • Пользователь
  • **
  • Сообщений: 69
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #688 : 13 Июля 2018, 13:31:38 »
По поводу локальных переменных ...
Т.е. она все-таки static.
Понял, спасибо.

lipvasko

  • Пользователь
  • **
  • Сообщений: 64
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #689 : 03 Августа 2018, 11:57:56 »
подскажите пожалуйста , как можно разобрать строку  и потом собрать её снова , но только без не нужных символов , т.е у меня есть строка - это тэг с плк в формате  дата и время DT  в скаду он передаётся как строка вида он такого  DT#2018-09-03-12:01:03.569   а мне нужно получить
2018-09-03-12:01:03  - заранее благодарен.