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

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

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

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #255 : 30 Марта 2017, 09:24:23 »
Здравствуйте.

Все семь пунктов недоступны. Все-таки компилятор скриптов это не полноценная среда разработки. Программа управления обычно реализуется на контроллерах, что позволяет убрать зависимость работы тех. процессов от работы скады, а в скриптах скады используются либо готовые методы, либо пишутся свои для простой визуализации. При этом мы хорошо понимаем, что описанные Вами функции будут очень полезны даже при решении небольших задач, поэтому пункты 1, 2, 4 (касаемо глобальных классов) и 7 будут реализованы в будущих обновлениях. Пункты 3, 5 и 6 пока не планируются.

ksapp

  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #256 : 30 Марта 2017, 11:44:44 »
Понял. Спасибо. Можно, конечно, без этого обойтись. Но новых версий будем ждать ))) И про редактор не забудьте. Всё-таки не очень удобно случайно удалив кусок кода не иметь возможности отменить это действие.

ksapp

  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #257 : 30 Марта 2017, 14:09:44 »
Ещё вопрос. Правда не по скриптам.
Не могу ввести в поле (вручную) значение больше 100. В свойствах поля стоит параметр "Максимум" 100. В документации сказано, что этот параметр изменяется в редакторе переменных. Но там я такого параметра не нашёл. Там есть границы, но это, как я понимаю, не "Максимум". В чём может быть причина?

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1170
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #258 : 30 Марта 2017, 14:13:31 »
Здравствуйте!

Этот вопрос рассмотрен в разделе FAQ - пятое сообщение.

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #259 : 30 Марта 2017, 15:21:13 »
Понял. Спасибо. Можно, конечно, без этого обойтись. Но новых версий будем ждать ))) И про редактор не забудьте. Всё-таки не очень удобно случайно удалив кусок кода не иметь возможности отменить это действие.
Перед редактированием скриптов сохраняйтесь... ф9 кроме компиляции сохраняет скрипт... В случае аврала снимаете процесс и запускаете по новой... Сохранится последняя компиляция :)

ksapp

  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #260 : 31 Марта 2017, 12:01:42 »
Здравствуйте снова.
Видимо, какое-то время ещё буду надоедать вам, пока не освоюсь  :)
Вопрос такой: есть процедура (см. код), которая должна возвращать значение в глобальную переменную. Но этот код выдаёт ошибку. Хотя при использовании локальной переменной всё компилируется нормально. Как решить эту проблему?

Код
var z : byte;

procedure Test(var x : byte);
begin
  x := 1;
end;

//------------------------------------------------------------------------------------------------------
// ОСНОВНОЙ СЦЕНАРИЙ
//------------------------------------------------------------------------------------------------------
begin
 
  Test(z);  //Компилируется
  Test(BIT_0.Value );  //Не компилируется (BIT_0 - глобальная переменная типа byte)
  //Сообщение об ошибке: [uGlobal] Types of actual and formal var parameters must be identical

end.     

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #261 : 31 Марта 2017, 12:09:30 »
Test(BIT_0.Value )

Test(BIT_0.AsInt) пробовали?

ksapp

  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #262 : 31 Марта 2017, 13:26:45 »
Пробовал с AsInt и с OriginalAsInt. Тоже не компилируется. Причём с объектами, связанными с графикой (например, с TM_Image вместо Byte) подобная процедура работает нормально. А вот с глобальными переменными не получается. Может это связано с ограничениями бесплатной версии? Хотя вроде как ограничения касаются только баз данных и файлов.

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #263 : 31 Марта 2017, 14:40:16 »
Тогда еще вопрос, вам критичен именно байт, как параметр? Если вопрос не в ограничении размеров, то можно и даже нужно передать ВСЮ "переменную":

Код
procedure Test(var x :TM_Variable);
begin
  x.Value   := 1;

end;

//------------------------------------------------------------------------------------------------------
// ОСНОВНОЙ СЦЕНАРИЙ
//------------------------------------------------------------------------------------------------------
begin

  Test(Тest3 ); 

end.

если надо именно байт, то так:

Код
var
  i:byte;

procedure Test(var x : byte);
begin
  x := 1;
end;

//------------------------------------------------------------------------------------------------------
// ОСНОВНОЙ СЦЕНАРИЙ
//------------------------------------------------------------------------------------------------------
begin

  i:=Тest3.Value;
  Test(i);

 end.
« Изменён: 31 Марта 2017, 19:37:29 от Simple-Scada »

TeNQ

  • Постоялец
  • ***
  • Сообщений: 199
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #264 : 31 Марта 2017, 14:44:26 »
Код
var z : byte;

procedure Test(var x : byte);
begin
  x := 1;
end;

//------------------------------------------------------------------------------------------------------
// ОСНОВНОЙ СЦЕНАРИЙ
//------------------------------------------------------------------------------------------------------
begin

  z := BIT_0.AsInt
  Test(z);
  BIT_0.Value := z;

end.                         
Я бы попробовал так. Дело тут не в демо версии. А в несоответствии типов. Процедура принимает тип Byte. AsInt возвращает переменную типа Integer, что шире типа Byte. Вот и ругается компилятор. Поэтому надо явно довести тип Integer до типа Byte. Поэтому воспользоваться вашей процедурой можно только через локальную переменную-буфер, потому что метода AsByte для глобальной переменной нет)
« Изменён: 31 Марта 2017, 15:30:02 от TeNQ »

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #265 : 31 Марта 2017, 14:54:54 »
Процедура принимает тип Byte. AsInt возвращает переменную типа Integer, что шире типа Byte. Вот и ругается компилятор. Поэтому надо явно довести тип Integer до типа Byte. А это пока видимо можно сделать только через присвоение локальной переменной вашей глобальной переменной, потому что метода AsByte нет)
А ну задайте-ка инты и там и там? :)

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #266 : 31 Марта 2017, 15:00:51 »
Как правильно заметил TeNQ есть несоответствие типов byte и integer. Всё дело в том, что в подпроцедуре Test параметр задан с меткой var. Это передача параметра по-ссылке и она требует строгого соответствия типов данных. Поэтому нужно делать как написал TeNQ. Либо менять тип параметра в подпроцедуре на Integer.
« Изменён: 31 Марта 2017, 15:03:55 от Simple-Scada »

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #267 : 31 Марта 2017, 15:04:34 »
Как правильно заметил TeNQ есть несоответствие типов byte и integer. Всё дело в том, что в подпроцедуре Test параметр задан с меткой var. Это передача параметра по-ссылке и она требует строгого соответствия типов данных. Поэтому нужно делать как написал TeNQ.
Окей. А если в процедуре указать Single, и воспользоваться методом .AsSingle переменной, то получится ли строгое совпадение типов? НЕТ...

Можно лечить? Да!
Код
procedure Test(x : byte);
begin
  x := 1;
end;

begin
  Test (Test3.AsInt64);
end.
Спокойно компилится  ;D

Что не так? А то что мы НЕ создавали переменную х, а просто связали ее со значением BIT_0.Value, которое очень даже может не совпадать... Или, если попроще, то var убрали из объявления...
« Изменён: 31 Марта 2017, 15:45:06 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #268 : 31 Марта 2017, 15:44:31 »
Цитировать
А если в процедуре указать Single, и воспользоваться методом .AsSingle переменной, то получится ли строгое совпадение типов? НЕТ...
Оно получится, но нужно будет писать также как писали в примере выше, через отдельную переменную, т.к. нужно передавать ссылку:

Код
var
  X: Single;
begin
  X := vrMy.AsSingle;
  Test(X);
end;

Цитировать
Можно лечить? Да! Спокойно компилится
Конечно компилится, т.к. параметр больше не передается по ссылке, но подпроцедура теряет смысл и код свою задачу выполнять не будет, т.к. в подпроцедуре будет создана новая локальная переменная и значение равное 1 будет задано именно для неё, а не для той переменной, которая была передана в подпроцедуру.

Код
procedure Test(x : byte);
begin
  x := 1;
end;

begin
  Test(Test3.AsInt64);
  // здесь переменная Test3 будет равна тому же, чему была равна до выполнения Test,
  // т.к. в подпроцедуре работа велась с локальной копией.
end.
« Изменён: 31 Марта 2017, 15:49:31 от Simple-Scada »

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: Вопросы по скриптам в Simple-Scada 2
« Ответ #269 : 31 Марта 2017, 17:21:46 »
А я ее и не собирался возвращать  ;D

но тогда уже так:
Код
var
  X: Single;
begin
  X := vrMy.AsSingle;
  Test(X);
  vrMy.Value:= X; // иначе, ничем от того что написал я, оно не отличается
end;

А так как я с саааамого начала написал нельзя? В плане передачи сразу ТМ_Variable и не плясать с бубном ?
« Изменён: 31 Марта 2017, 17:24:15 от Teodor »