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

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

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

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


Сообщения - pan2000

Страницы: 1 ... 13 14 [15]
211
Участник форума TeNQ задал вопрос ( Re: Вопросы и предложения по Simple-Scada 2 < Ответ #520 : 16 Май 2017, 11:35:58 >):

"Есть функция GetVariableByName. ... Можно ли ввести по аналогии функцию GetObjectByName для того, чтобы обратиться к объекту в универсальном скрипте"?

Из документации по скриптам:

       function FindObjectByName(const AName: string): TM_Control;
       Описание: Возвращает объект подстраницы с именем AName...

Создание страниц, подстраниц и объектов в редакторе показывает, что "Подстраница 1" содержит те же объекты, что и сама родительская страница. Проверка показала, что объекты страницы доступны на "Подстранице 1" (для одностраничного проекта  SubPage1 соответствует Page1):

      { собственно выборка объекта TEXTi, размещенного на странице Page1}
      ObjSelect := SubPage1.FindObjectByName('TEXT' + IntToStr(i));

Т.е. можно создать универсальный скрипт для объектов одной страницы (По крайней мере в действующей сейчас редакции Simple-Scada).
Пример во вложении.


212
Ошибки / Re: Проблемы с тегом типа Int64
« : 13 Июля 2017, 12:49:25 »
 Это одна сторона увеличение размера данных. Вторая заключается в некоторой гарантии целостности данных, скажем четыре WORDа во всей цепочке передачи данных, это именно те самые четыре WORDа, которые начали движение от контроллера.

Пример для Int64:

Код
procedure XXX_OnDataChange(Sender: TM_control);

type word4 = record  a,b,c,d: word; end;
var
  t:word4;
  pt: ^word4 = @t;
begin
  PInt64(pt)^ := TM_Text(Sender).Variable.Value;   // Вызывающий процедуру тег должен иметь тип Int64 !!!
  PSUS_1.Text := FloatToStr(t.a * 0.05, 2);
  PSIS_1.Text := FloatToStr(t.b * 0.1, 1);   // и т.д

P.S. Можно использовать и тип Double, но в нем тоже похоже аналогичная проблема - коррекция данных для своего собственного типа при записи в тег.


213
Ошибки / Re: Проблемы с тегом типа Int64
« : 11 Июля 2017, 15:43:54 »
Разумнее хранить данные в формате типа объявления тега и использовать методы для преобразования к другим типам.
Но точно ответить могут только авторы.

214
Ошибки / Проблемы с тегом типа Int64
« : 11 Июля 2017, 14:17:39 »
При записи достаточно большой величины в тег типа Int64 значение изменяется на 1.

Скрипт с примером изменения:
Код
var
  a: int64;
begin
  a := $20000000000003;
  x1.Value := a;
  Text1.Text := 'Int64 =' + IntToHex(a,8);                  // Text1 = '00000003'
  Text2.Text := 'AsInt64 =' + IntToHex(x1.AsInt64,8); // Text2 = '00000004'  !
  a := $20000000000001;
  x1.Value := a;
  Text3.Text := 'Int64 =' + IntToHex(a,8);                  // Text3 = '00000001'
  Text4.Text := 'AsInt64 =' + IntToHex(x1.AsInt64,8); // Text4 = '00000000'  !
end.

Поле Text2 показывает увеличение значения на 1, поле Test4 - уменьшение на 1, простая переменная значение не изменяет.

Проект во вложении.

Страницы: 1 ... 13 14 [15]