Вопросы по скриптам в Simple-Scada 2

Автор Simple-Scada, 29 января 2016, 15:19:20

seriych

Добрый день,
не получается решить проблему.
Есть таблицы и назначенные для них события OnCellClick (события OnClick и OnDblClick для таблиц не заданы). Есть поля, которые привязаны к внутренним переменным и с назначенными событиями OnDoneInput.
Проблема: если пользователь редактирует значение любого поля и нажимает "enter", а затем наводит мышь на любую таблицу и кликает, то событие OnCellClick с первого раза не срабатывает. Только со второго и последующих.
При этом, если после редактирования поля, провзаимодействовать с каким-то иным элементом, а не полем (например, с кнопкой), то все хорошо: во-первых само взаимодействие с эти элементом происходит с первого клика, во вторых OnCellClick на таблице после этого срабатывает с первого раза.
Непонятно, с чем это связано и как лечить. Пробовал всякими OnMouseLeave, OnMouseEnter, заставить поле потерять фокус, а таблицу принять, но все попытки безуспешны. Пробовал создавать поле, которое ни к чему не привязано и вообще без обработки событий (просто кидаем новое на форму) - все равно после взаимодействия с ним при переходе на таблицу OnCellClick срабатывает только со второго раза.

*Версия 2.3.3.0

Simple-Scada

Здравствуйте.

ЦитироватьЕсли пользователь редактирует значение любого поля и нажимает "enter", а затем наводит мышь на любую таблицу и кликает, то событие OnCellClick с первого раза не срабатывает.
Исправим в ближайшем обновлении.

emoxristov

#857
Simple Scada мне нужна срочная помощь.У меня есть аналоговый вход, который я получаю от 0-20 мV датчиков.Какой сценарий я должен сделать, чтобы вызвать 5mV первую кнопку, 7mV вторую кнопку и 8,5mV третью кнопку.Могу ли я создать дополнительное окно для ввода для каждой кнопки при mV активировать.Буду очень признателен за вашу помощь

Simple_Scada

Здравствуйте.

Если нужно по изменению аналоговой переменной изменять значение переменной кнопки, то можно создать скрипт по событию OnDataChange объекта связанного с аналоговой переменной и в нем через свойство переменной Value записывать в переменную кнопки необходимое значение. Например:

Код: pascal
begin
  { записываем значение 1 в переменную ArduinoSerial0_D2}
  ArduinoSerial0_D2.Value := 1;
end.

ЦитироватьМогу ли я создать дополнительное окно для ввода для каждой кнопки при mV активировать.
Да, окно можно создать через пункт меню "Окна". Для вызова окна из скрипта нужно использовать процедуры ShowAll, ShowClient.

emoxristov

Simple Scada:
ArduinoSerial0_D2.Value := 1;    Вы имеете в виду, что 1 равен одному вольту, так ?
Как сделать милливольт, Я хочу активировать кнопку на милливольт?

asutpvit

Цитата: emoxristov от 06 июня 2019, 20:57:15Simple Scada:
ArduinoSerial0_D2.Value := 1;    Вы имеете в виду, что 1 равен одному вольту, так ?
Как сделать милливольт, Я хочу активировать кнопку на милливольт?
Все зависит от представления переменной, если у Вас шкала этой переменной описана от 0 до 20 мВ, то в данном случае будет 1 мВ
с десятичными так же вопрос решается, через шкалу переменной, как опишите представление так и будет

emoxristov

#861
Будет ли это работать с 0-20 милливольт?
Пожалуйста, объясните, как ввести милливольт, вольт или импеданс.

vyacheslav

#862
Добрый день, подскажите пожалуйста, обновил симпл до версии 2.3.5.0, перестали открываться отчеты с проекта. Скрипт выглядит таким образом:
Код: pascal
 begin
  ReportView(GetClientName, 'Электроэнергия - Гагарина, 8');
end.
что могло произойти?

vyacheslav

И как реагировать на это всплывающее окно? то есть не один скрипт из за этого не работает? раньше такого не было. и как мне найти проблемный скрипт среди тысяч?  в проекте возможно есть старые не действительные, даже не знаю где они лежат

vyacheslav

И вот говорит что здесь ошибка, можете помочь, какая? до обновления все работало!

Simple-Scada

Здравствуйте.

Все изменения в компиляции в версии 2.3.5.0 описаны здесь. Если обновиться не получается и не получается понять причину, то вышлите нам текущую версию проекта (или версию до перехода на 2.3.5.0) на support@simple-scada.com, наши специалисты в короткий срок обновят проект с учетом всех изменений в скриптах.

lipvasko

#866
добрый день , есть проблема , которая возникла  на пустом месте , скрипт работал, пока не увеличил количества строк в файле , в общем читаю текстовый файл ,сначала интежер , затем  строку
Код: pascal
  S := TextFileReadLn;                        
  B1.Value := StrToInt(S);
  S := TextFileReadLn;                   
  B1_STRING_24.Value := S; 
где B1 тэг интежер , значение не читается а в логе сервера пишется что число пример:ошибка в скрипте строка  18    '5840' is not a valid integer value  , подскажите как это понимать, почему строка 5840 не может конвертироваться в интежер

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

Victor_P.

lipvasko, может из-за того, что кодировки файлов разные.

pan2000

#868
Цитата: lipvasko от 10 июня 2019, 16:29:01...
 подскажите как это понимать, почему строка 5840 не может конвертироваться в интежер
...

Ошибка StrToInt для аргумента завершающегося не цифрой:
Код: pascal
begin
  Text1.Text := IntToStr(StrToInt(' 5840'));    //  5840
  Text2.Text := IntToStr(StrToInt('5840 '));    // Ошибка в скрипте "Script_0" в строке 3.
end.                                          //  '5840 ' is not a valid integer value

Добавлено 13 июня 2019 года:
Посмотреть последовательность кодов символов переменной S типа String можно с помощью скрипта. Результат отображается в области Text1 четырехзначными шестнадцатиразрядными числами.

Код: pascal
var i: integer;
    aStr: string;
begin
  Text1.Text := '';
  aStr := S.AsStr;
  for i := 1 to Length(aStr) do
    Text1.Text := Text1.Text + IntToHex(integer(aStr[i]), 4) + ' ';
end. 

lipvasko

#869
Цитата: pan2000 от 10 июня 2019, 22:51:06
Цитата: lipvasko от 10 июня 2019, 16:29:01...
 подскажите как это понимать, почему строка 5840 не может конвертироваться в интежер
...

Ошибка StrToInt для аргумента завершающегося не цифрой:
Код: pascal
begin
  Text1.Text := IntToStr(StrToInt(' 5840'));    //  5840
  Text2.Text := IntToStr(StrToInt('5840 '));    // Ошибка в скрипте "Script_0" в строке 3.
end.                                          //  '5840 ' is not a valid integer value
РАЗОБРАЛСЯ , необходимо было удалять невидимые символы , до команды каретки , использовал нотепад++