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

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

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

ACHE

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1410 : 25 Октября 2022, 16:54:26 »
Здравствуйте.

Если требуется отслеживать каждое устройство отдельно, то нужно добавить отдельные переменные-таймеры для каждого устройства, тогда всё будет работать корректно. Например, для устройства Link_230_Gagarina создать переменную Link_230_Gagarina_Timer, для Link230_VES создать переменную Link230_VES_Timer и т.д. Пример кода:

Все работает как часы! Спасибо! Была мысль, что с таймерами что-то не так, но не додумал, что на каждое устройство нужно отдельную переменную

Дмитрий_021

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1411 : 10 Ноября 2022, 09:30:30 »
Здраствуйте.
Как реализовать следующий функционал - имеется расходомер, где нарастающим итогом идет отсчет сырья, прошедшего через него. Есть кнопка - Закрыть смену, которая будет закрывать текущую смену и открывать следующую смену.  Нужно фиксировать в таблицу расход за каждую смену, а так же показания расходомера на момент открытия и закрытия смены.

Simple_Scada

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

Если это требуется для создания отчетов, то проще всего будет использовать систему отчетов. Если смены фиксированные, к примеру с 8 до 20 и с 20 до 8, то можно использовать периодический отчет с интервалом 12 часов и типом обработки "разница" для получения расхода за смену.

Если требуется постоянно отображать таблицу на мнемосхеме в скаде, то можно создать в БД свою таблицу и при нажатии кнопки "Закрыть смену" записывать в таблицу требуемые данные. Полученную таблицу БД затем можно вывести в компонент "Таблица" скады. Пример создания и использования своей таблицы в БД можно найти по ссылке. Данный способ будет гораздо сложнее в реализации, чем использование системы отчетов.

kvlad1972

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1413 : 18 Ноября 2022, 12:16:43 »
Здравствуйте.
Подскажите как сделать динамическую загрузку предварительно отрисованной по координатам GPS графической карты в окно ?

Simple_Scada

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

Такой возможности нет. Изображения используемые в проекте загружаются единожды при запуске клиента.
« Изменён: 22 Ноября 2022, 17:13:27 от Simple_Scada »

Дмитрий_021

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1415 : 23 Ноября 2022, 10:37:22 »
Здравствуйте, как реализовать следующий момент - у нас 1 сервер и 2 АРМ с клиентами. 1 АРМ на заводе и должен иметь доступ ко всему проекту, а 2 АРМ на котельной и должен иметь доступ только к 1 экрану (доступ к архиву сообщений разделять не нужно).   

Simple_Scada

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

Для этого нужно использовать систему прав пользователей, которая позволяет настроить права доступа и видимость необходимой информации для каждого пользователя. Создайте двух пользователей и для каждого настройте видимость только нужных ему страниц(Область прав -> Страницы видимость). На АРМ авторизуйтесь под нужным пользователем - в проекте будут видны только страницы, настроенные для этого пользователя. При необходимости, на АРМ можно настроить автовход под нужным пользователем - см. опции Логин/Пароль в параметрах подключения к серверу.

porhalo

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1417 : 12 Декабря 2022, 18:04:49 »
После обновления с версии 2.3.4.0 на версию 2.5.13.0
возникла ошибка компиляции в одном скрипте, а именно в этом
Код: (delphi)
procedure system_sql_answer(DataSet: TM_Dataset);
var
ButtonDest: TM_Button;
VarDest: TM_Variable;
begin

if (DataSet.Sender is TM_Button)
then
begin

  if DataSet.Tag=10
  then
    begin                   
    ButtonDest:=GetButtonByName(DataSet.Sender.Name);
    ButtonDest.States[0].Caption:=DataSet[0].AsStr;
    end;

end;
end.
ошибка в строке
Код: (delphi)
ButtonDest:=GetButtonByName(DataSet.Sender.Name);

проект делали не мы, здесь очевидно какие-то манипуляции с названием кнопок делаются.
если просто закомментировать эту строчку ButtonDest:=GetButtonByName(DataSet.Sender.Name);, то проект компилируется.
Вопрос : как этот скрипт исправить по правильному, чтобы функционал не потерялся? или где копать
не может быть ошибка из-за того что на тестовой машине бд не скопирована
« Изменён: 12 Декабря 2022, 18:41:07 от Simple_Scada »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1365
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1418 : 13 Декабря 2022, 11:28:36 »
Здравствуйте.

Как видно из кода скрипта, требуемая кнопка передаётся в скрипт в параметре DataSet. В этом случае не требуется искать ее через GetButtonByName.

Замените строку:
Код: (delphi)
ButtonDest:=GetButtonByName(DataSet.Sender.Name);
на:
Код: (delphi)
ButtonDest := DataSet.Sender as TM_Button; 

При возникновении других ошибок компиляции, пришлите нам для проверки на support@simple-scada.com текущую версию проекта из директории "..\Simple-Scada 2\Projects\" и укажите, какой скрипт нужно проверить. 

дрю

  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1419 : 15 Декабря 2022, 14:47:57 »
Здравствуйте, покажите пожалуста пример скрипта (Если такой есть) сценарий: нажимаем кнопку на основном экране - открывается страница_на этой странице нажимаем другую кнопку - возврощаемся на основной экран. Спасибо

дрю

  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1420 : 15 Декабря 2022, 15:11:21 »
Разобрался самостоятельно из руководства

pro_100_russ

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1421 : 07 Февраля 2023, 09:49:28 »
Добрый день.
Есть счетчик готовой продукции, значения которой вывел в скаду. Написал простой код для вычета готовой продукции за прошедший месяц. Проблема в том, что когда наступил 01.01.2023 год, у меня перестал работать код.
Как я выяснил, когда вычитается 1 месяц от 01.01.2023, то получается 01.12.2023!
Код заработал 01.02.2023 и отнимает 1 месяц правильно.

Код: (delphi)
var
  mDate,nDate: TDateTime;
begin
  mDate := RecodeDateTime(Now, YearOf(Now), MonthOf(IncMonth(Now, -1)), 1, 0, 0, 0, 0);
  ArchiveValueByTime(Schetchik_gotovoy_produktsii, proizvedeno_za_proshedshiy_mesyats_Begin, mDate);
  nDate:= RecodeDateTime(Now, YearOf(Now), MonthOf(Now), 1 , 0, 0, 0, 0);
  nDate := incDay(nDate, 1);
 
  ArchiveValueByTime(Schetchik_gotovoy_produktsii, proizvedeno_za_proshedshiy_mesyats_End, nDate);

  if (proizvedeno_za_proshedshiy_mesyats_Begin.AsInt = 0 ) OR
     (proizvedeno_za_proshedshiy_mesyats_End.AsInt = 0) then
    proizvedeno_za_proshedshiy_mesyats_Result.Value := 0
  else
    proizvedeno_za_proshedshiy_mesyats_Result.Value := (proizvedeno_za_proshedshiy_mesyats_End.AsInt - proizvedeno_za_proshedshiy_mesyats_Begin.AsInt);
end.
« Изменён: 07 Февраля 2023, 10:06:22 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3197
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1422 : 07 Февраля 2023, 10:23:07 »
Здравствуйте.

Цитировать
mDate := RecodeDateTime(Now, YearOf(Now), MonthOf(IncMonth(Now, -1)), 1, 0, 0, 0, 0);
В этом коде Вы не вычитаете месяц. Вы берёте текущую дату/время и меняете в ней год на текущий (т.е. оставляете его без изменений), месяц на предыдущий, день на 1, а время на 00:00:00.
Вот код который вычитает месяц правильно:
Код: (delphi)
mDate := IncMonth(Now, -1);  // вычитаем месяц из текущей даты
mDate := RecodeDateTime(mDate, YearOf(mDate), MonthOf(mDate), 1, 0, 0, 0, 0);  // меняем день на 1 и обнуляем время
// теперь можно использовать mDate

pro_100_russ

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1423 : 07 Февраля 2023, 10:43:57 »
Спасибо большое! ;D

Цитировать
Вот код который вычитает месяц правильно:
Код: (delphi)
mDate := IncMonth(Now, -1);  // вычитаем месяц из текущей даты
mDate := RecodeDateTime(mDate, YearOf(mDate), MonthOf(mDate), 1, 0, 0, 0, 0);  // меняем день на 1 и обнуляем время
// теперь можно использовать mDate

yukiaire

  • Новичок
  • *
  • Сообщений: 10
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #1424 : 13 Февраля 2023, 17:03:28 »
Здравствуйте, хочу создать свой класс, компилятор ругается на объявление функции. Подскажите по синтаксису, как правильно нужно написать
Код: (delphi)
interface
 type
Tester = class
public
//function Proverka(a, b, c: Integer): Integer; //функция для проверки зависания, исполнять только в секундном скрипте!
constructor Create;

 end;

implementation
constructor Tester.Create();
  begin
  end;

function Proverka(a, b, c: Integer): Integer;
var
flag : Boolean;
m, resA, resB  : Integer;
begin
if abs(a - b) > c then
  flag := True
else
  begin
  flag := False;
  m := 0;
  end;
  if flag then
  begin
   if m < 5 then
    begin
      if time60s.AsBool then
      begin
       resA:= abs(a - resA) + resA;
       resB:= abs(b - resB) + resB;
       m := m + 1;
       time60s.Value := False;
      end;  //end if time60
    end;  //end while
    if (m >= 5) and (resA = 0) and (resB = 0) then
       result := 3
       else if (m >= 5) and (resA = 0) then
       result := 1
       else if (m >= 5) and (resB = 0) then
       result := 2
       else result := 0;
   end;  // end if flag
 end; // end function
end.
   

Upd: разобралась сама, дело было в том, что далее функцию надо было написать, как Tester.Proverka...                 
« Изменён: 14 Февраля 2023, 10:37:07 от yukiaire »