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

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

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

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


Сообщения - yukiaire

Страницы: [1]
1
Здравствуйте, заметили, что скада периодически рвет подключение клиентов, снова автоматически переподключается. В логах надписи " Web-Клиент отключен, т.к. не отвечал более 16 сек". При этом некоторые клиенты установлены без ограничений по времени подключения. В чем может быть проблема?

2
Здравствуйте! У меня вопрос, почему функция GetVariableByName не работает в глобальном модуле в части initialization? При создании проекта мне нужно заполнять список однотипными переменными, у которых по сути только отличаются номера, не хочется заполнять их напрямую, а перебором по получении имени не получается.

3
Здравствуйте! Я хочу заполнять таблицу подменными переменными, как в примере вашего руководства, но таблица открывается в шаблонном окне. Надо, чтобы при открытии окна выполнялся скрипт и таблица заполнялась архивными данными. Хотела написать подстановку имен переменных путем указания шаблонного номера в теге таблицы, но скрипт упорно отказывается компилироваться пока таблица расположена в шаблонном окне.
Код: (delphi)
var
g : Integer;
t_var : TM_Variable;
begin
  g := Table1.Tag;
  t_var.Value := GetVariableByName('rate_hour' + IntToStr(g));
  ArchiveValueByTime(t_var, t_rate1, Now - 60);
  ArchiveValueByTime(t_var, t_rate2, Now - 120);
end.

Upd я так понимаю, что данная проблема возникает потому что фактически до запуска проекта объектов в шаблонном окне не существует, то есть необходимо в скрипте сначала проверять таблицу на существование. Подскажите, каким образом это сделать? Есть примеры с проверкой существования переменной, в данном случае необходимо проверять объект

Все получилось, использовала функцию GetTemplateObject
Код: (delphi)
var
  g : Integer;
  t_var : TM_Variable;
  aTable : TM_Table;
begin
  aTable := GetTemplateObject('Table1') as TM_Table;
  g := aTable.Tag;
  t_var := GetVariableByName('rate_hour' + IntToStr(g));
  ArchiveValueByTime(t_var, t_rate1, Now - 60);
  ArchiveValueByTime(t_var, t_rate2, Now - 120);
end.

4
Ваши вопросы / Re: Вопросы по WEB в Simple-Scada 2
« : 03 Ноября 2023, 16:06:44 »
спасибо за помощь, очистка кэша помогла. Версия simple Scada самая последняя 2.6.9.0

5
Ваши вопросы / Re: Вопросы по WEB в Simple-Scada 2
« : 03 Ноября 2023, 15:23:32 »
стало еще хуже, через web (браузер GoogleChrome) теперь при открытии отчета на клиенте просто темный фон с возможностью закрыть отчет сверху и скачивается файл DoneRep1.mdc. Сам файл не открывается

6
Ваши вопросы / Re: Вопросы по WEB в Simple-Scada 2
« : 03 Ноября 2023, 10:11:45 »
Здравствуйте! Вопрос по отчетам через web. Когда формируется и открывается отчет на обычном клиенте, у меня есть возможность сохранить отчет в разных форматах, когда тот же отчет  открывается на клиенте через web, его можно сохранить из открытого окна только в pdf. Как мне сделать возможность сохранения на клиентах отчета в формате exel? Через метод Save тоже не очень понятно, потому что заранее определенный путь может отсутствовать на данном клиенте, а значит при выполнении метода Save ничего не происходит

7
Здравствуйте, хочу создать свой класс, компилятор ругается на объявление функции. Подскажите по синтаксису, как правильно нужно написать
Код: (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...                 

8
Добрый день! У меня есть глобальный модуль, в котором объявлен список и массив, согласно руководству необходимо очищать данные во время закрытия проекта  во избежание утечки памяти. Заметила, что судя по логам возникает ошибка:
Код
11:36:43.096 | Ошибка в скрипте "alarms_list" в строке 90. Access violation at address 0040A574 in module 'Server.exe'. Read of address FFFFFFFC
11:36:43.096 | Необработанная ошибка в скрипте "alarms_list" в строке 91. Access violation at address 0040A574 in module 'Server.exe'. Read of address FFFFFFFC
что неверно?

код скрипта alarms_list:
Код: (delphi)
interface

var
  aList: TM_List;          // объявляем список для сигналов об авариях
  mArray: Array of Boolean; // создаем массив для хранения информации о том, отправились ли сообщения об авариях

implementation

initialization
               // во время запуска проекта
  aList := TM_List.Create; // создаём список
  aList.Add(alarm_1); // заполняем список сигналами об авариях (при создании нового сигнала об аварии добавить его сюда)
  aList.Add(alarm_2);
  aList.Add(alarm_3);
  aList.Add(alarm_4);
  aList.Add(alarm_5);
  aList.Add(alarm_6);
  aList.Add(alarm_7);
  aList.Add(alarm_8);
  aList.Add(alarm_9);
  aList.Add(alarm_10);
  aList.Add(alarm_11);
  aList.Add(alarm_12);
  aList.Add(alarm_13);
  aList.Add(alarm_14);
  aList.Add(alarm_15);
  aList.Add(alarm_16);
  aList.Add(alarm_17);
  aList.Add(alarm_18);
  aList.Add(alarm_19);
  aList.Add(alarm_20);
  aList.Add(alarm_21);
  aList.Add(alarm_22);
  aList.Add(alarm_23);
  aList.Add(alarm_24);
  aList.Add(alarm_25);
  aList.Add(alarm_26);
  aList.Add(alarm_27);
  aList.Add(alarm_28);
  aList.Add(alarm_29);
  aList.Add(alarm_30);
  aList.Add(alarm_31);
  aList.Add(alarm_32);
  aList.Add(alarm_33);
  aList.Add(alarm_34);
  aList.Add(alarm_35);
  aList.Add(alarm_36);
  aList.Add(alarm_37);
  aList.Add(alarm_38);
  aList.Add(alarm_39);
  aList.Add(alarm_40);
  aList.Add(alarm_41);
  aList.Add(alarm_42);
  aList.Add(alarm_43);
  aList.Add(alarm_44);
  aList.Add(alarm_45);
  aList.Add(alarm_46);
  aList.Add(alarm_47);
  aList.Add(alarm_48);
  aList.Add(alarm_49);
  aList.Add(alarm_50);
  aList.Add(alarm_51);
  aList.Add(alarm_52);
  aList.Add(alarm_53);
  aList.Add(alarm_54);
  aList.Add(alarm_55);
  aList.Add(alarm_56);
  aList.Add(alarm_57);
  aList.Add(alarm_58);
  aList.Add(alarm_59);
  aList.Add(alarm_60);
  aList.Add(alarm_61);
  aList.Add(alarm_62);
  aList.Add(alarm_63);
  aList.Add(alarm_64);
  aList.Add(alarm_65);
  aList.Add(alarm_67);
  aList.Add(alarm_68);
  aList.Add(alarm_69);
  aList.Add(alarm_70);
  aList.Add(alarm_74);
  aList.Add(alarm_75);
  aList.Add(alarm_76);
  aList.Add(alarm_77);
  aList.Add(alarm_78);
  SetLength(mArray, aList.Count);

finalization // во время выключения проекта
  FreeAndNil(aList);  // !!! обязательно удаляем список (89 строка)
  FreeAndNil(mArray); // (90 строка)
end.

9
спасибо большое за такое подробное разъяснение, буду пробовать)

10
Здравствуйте, подскажите пожалуйста, могу ли я вызвать один скрипт в другом в проекте? Я  новый пользователь, не могу найти информацию по данному вопросу в руководстве

Или другой вопрос, как мне вызвать метод который я написала в теле этого же скрипта?
Код: (delphi)
var
  flag: Boolean;
begin
  If Button1.ActiveState=1 then
     flag:=True;
     if S7Tag_Q00.AsBool then
     begin
     Button1.Color := clGreen;
     Button2.Color := clRed;
     end;
     if not S7Tag_Q00.AsBool then
     begin
     Button1.Color := clRed;
     Button2.Color := ClGreen;
     end;
     if flag then
     begin
 While (Shape2.X < 488) AND (Shape3.X < 528)  do
   begin
   Shape2.X := Shape2.X + 8;
   Shape3.X := Shape3.X + 8;
   end;
   Buttons.Delay(5); // например, здесь мне нужно вызвать свой метод Delay - как это правильно реализовать?

 end;
   If Button2.ActiveState=1 then
     flag:=False;
     if flag=False then
     begin
 While (Shape2.X > 192) AND (Shape3.X >232)  do
   Shape2.X := Shape2.X - 8;
   Shape3.X := Shape3.X - 8;
 end;
end.

procedure Delay(Time: Integer);
var
  aTimer: Byte;

begin
  if aTimer < Time then

    aTimer := aTimer + 1;  // каждую секунду увеличиваем счетчик на 1
    if aTimer = Time then     // если прошло 5 секунд
      aTimer := 0;        // то обнуляем переменную
 end.

Страницы: [1]