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

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

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

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


Темы - yukiaire

Страницы: [1]
1
Добрый день! У меня есть глобальный модуль, в котором объявлен список и массив, согласно руководству необходимо очищать данные во время закрытия проекта  во избежание утечки памяти. Заметила, что судя по логам возникает ошибка:
Код
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.

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

Или другой вопрос, как мне вызвать метод который я написала в теле этого же скрипта?
Код: (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]