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

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

Simple-Scada

Здравствуйте. Ошибка "... is not a valid integer value" возникает при попытке перевода строки (которая не является числом) в число. Хороший пример привёл pan2000, когда строка содержит число + лишние символы (например пробел, символы переноса строки и т.п.). Если Вы получаете эту ошибку, то можно со 100% уверенностью сказать, что строка содержит лишние символы помимо чисел и поэтому её не удаётся перевести в число. Если обнаружить их не получается, то вышлите нам файл из которого Вы выполняете чтение, мы опишем что именно не так в этом файле.

MixMix

#871
Добрый день! Подскажите нормально ли работают скрипты с конструкциями вида
Код: pascal
GetVariableByName(aName + '_Ypravl').Value := SetBit(GetVariableByName(aName + '_Ypravl').Value, 4, False);
или
Код: pascal
aQuery := 'UPDATE ' + Month + ' SET ' +                    //
          '`Text_1`=' + QuotedStr(GetVariableByName('edtDay_1_' + IntToStr(i)).Value) + ', ' +
          '`Text_2`=' + QuotedStr(GetVariableByName('edtDay_2_' + IntToStr(i)).Value) +
          ' WHERE `Day`=' + QuotedStr(IntToStr(i));
или лучше использовать промежуточные переменные?
Скрипты компилируется и работают без ошибок, просто хотелось бы знать на будущее.

Simple-Scada

Здравствуйте.
Приведённый код вполне допустим, но в первом примере промежуточные переменные могут сделать его выполнение быстрее за счет сокращения количества вызовов GetVariableByName, кроме того, повысится читаемость кода. Например:
Код: pascal
var
  aVar: TM_Variable;
begin
  aVar := GetVariableByName(aName + '_Ypravl');  // только один поиск переменной по имени
  aVar.Value := SetBit(aVar.Value, 4, False);
end.
Во втором примере как-то улучшить код через промежуточные переменные не получится.
В идеале нужно ещё учитывать ситуацию, когда GetVariableByName вернёт nil, если переменная с указанным именем не существует. Но если это произойдёт, то Вы увидите в журнале сервера соответствующие сообщения об ошибках при выполнении скрипта и сможете их исправить.

lipvasko

Добрый день , в  помощи не встретил (или не нашёл)как можно удалить текстовый фай , подскажите скрипт.

Simple-Scada

Здравствуйте. В ближайшее время добавим такую функцию и опубликуем обновление.

lipvasko

#875
Добрый день возник один вопрос: и так есть два ПК, на одном стоит отладочная версия триал по времени , а на другой коммерческая без ограничений (версии скады самое последние обновление)  и вот интересность на  триальной этот универсальный скрипт работает(после запуска клиента , все ок, с вирт. переменными)  а на полной нет , сразу переходит в иначе и на переменные ему все равно (так же с виртуальными и   настоящими с ПЛК)
Код: pascal
BEGIN
         if Sender is TM_Image then          // проверяем, что Sender это изображение
         with Sender as TM_Image do        // приводим Sender к типу "TM_Image"
        if AsBool  then
        Visible := True         //
        else                          // иначе
          Visible := False;
END. 
и второй вопрос создавал новый проект , соответственно в офлайне , когда перенес на полную версию , сервер начал ругаться на половину переменных с OPC DA  сервера , передобавил их  уже на полной версии , и все ок , что за глюк не понял , все переменные  вносились в проект , почти одновременно, но ответ на первый вопрос важнее , не охота плодить прямые скрипты

Simple-Scada

Здравствуйте.
Данный скрипт меняет видимость изображения в зависимости от того какое значение принимает переменная связанная с изображением. Кстати, его можно сократить так:
Код: pascal
begin
  if Sender is TM_Image then          // проверяем, что Sender это изображение
    with Sender as TM_Image do        // приводим Sender к типу "TM_Image"
      Visible := AsBool;
end.
Скрипты компилируются в программу при сохранении проекта и ни при каких обстоятельствах не могут начать работать по разному, независимо от того на какой версии скады они запущены, или на каком компьютере они запущены, ведь программа скомпилирована и не менялась. Поэтому причину нужно искать только в значениях переменных. Если при запуске на объекте вы видите что изображения скрылись, значит переменные с которыми они связаны приняли значение FALSE, в соответствии со скриптом. Либо второй вариант: в скриптах есть грубые ошибки, или ссылки друг на друга, или скрипты назначены не на события OnDataChange, а на OnDataChangeEx и так далее.
Если найти причину не получается, то вышлите нам проект на support@simple-scada.com для проверки с указанием проблемных изображений. Мы укажем на ошибки в скриптах, если они есть.

Цитироватьи второй вопрос создавал новый проект , соответственно в офлайне , когда перенес на полную версию , сервер начал ругаться на половину переменных с OPC DA  сервера, передобавил их  уже на полной версии , и все ок , что за глюк не понял , все переменные  вносились в проект , почти одновременно, но ответ на первый вопрос важнее , не охота плодить прямые скрипты
От переноса проекта на полную версию или Demo-Time ничего не меняется, эти версии не отличаются ничем, кроме ограничения по времени работы. Какие именно сообщения выдал сервер касаемо DA-переменных? Можем предположить что это были сообщения о том, что переменная в указанным адресом не существует на OPC-сервере. Если это так, значит на объекте куда Вы перенесли проект на OPC-сервере действительно нет переменных с теми адресами которые Вы указали при разработке проекта. А когда Вы их заново импортировали с OPC-сервера, то адреса считались с OPC-сервера и стали правильными, что логично. Опишем то же самое по шагам:
1. На одном компьютере мы разрабатываем проект. Устанавливаем скаду и OPC-сервер. Создаём на OPC-сервере группу "Group1" и в ней переменную "V1".
2. Импортируем переменную с OPC-сервера в скаду. Скада получит адрес переменной Group1.V1;
3. Запускаем проект и проверяем его в работе. Всё работает.
4. Переходим на другой компьютер. Устанавливаем скаду и OPC-сервер. Создаём на нём группу "Group2" и переменную "V1";
5. Проект мы сделали ранее, пробуем его запустить и получаем ошибку, ведь переменной с адресом Group1.V1 не существует. На новом ПК она имеет адрес Group2.V2;

Это то, что мы можем предположить из имеющейся информации, здесь приходится угадывать, так как мы не знаем какие именно сообщения об ошибках выдал сервер скады, по ним мы могли бы назвать точную причину. В целом, если на одном ПК всё работает, а на другом нет, значит причину нужно искать в разнице между этими ПК (как в примере выше с OPC-серверами), т.к. при переносе скады между ПК сама скада не меняется, как и её скрипты.

lipvasko

по 1 вопросу , дело было не в скрипте ,а ва отображении элемента ,  и метода просмотра ,в общем в вэб некорректно отображаются элементы , а именно  лампочка , 2) в том то и дело ,что в опс сервере я видел эти переменные со значениями  с плк

Simple-Scada

#878
Цитироватьпо 1 вопросу , дело было не в скрипте ,а ва отображении элемента ,  и метода просмотра ,в общем в вэб некорректно отображаются элементы , а именно  лампочка
Что именно не так с отображением лампочки? В обычном клиенте она скрыта, а в веб видна, или что-то другое?

Цитировать2) в том то и дело ,что в опс сервере я видел эти переменные со значениями  с плк
Конечно переменные должны быть видны в OPC-сервере. Если они не будут там видны, то в скаду их можно даже не переносить. Прочтите наше сообщение выше, мы описали подробный пример того, как у переменных на двух OPC-серверах можно сделать разные адреса. В OPC-сервере они в обоих случаях будут отображаться, но читать их с OPC-сервера придётся по разным адресам. Нужно же делать так, чтобы проекты на OPC-серверах не отличались, чтобы OPC-клиенты (включая скаду) могли читать теги с OPC-серверов по одним и тем же адресам. Также ещё раз подчеркиваем, что мы не знаем какую ошибку выдавал сервер, поэтому мы только предполагаем что могло произойти. Чтобы сказать что-то подробнее нужно знать текст ошибки которую выдал сервер скады.

lipvasko

у меня был просто красный круг(лампочка)   это я вижу в редакторе и в клиенте , но  в вэб  она теряет свойства  не видимости и отображается так же красным кругом , но (я случайно заметил) при срабатывании управляющего тега у нее появлялся черный контур (когда их 40 штук на экране , его не сразу заметишь) сейчас ушёл просто на круг ,  с ним пока вопросов нет

AJR

Здравствуйте. Подскажите пожалуйста по вопросу. Есть скада, модуль ввода и модуль вывода. Как можно через скаду связать два модуля. То есть, при включении кнопки в модули ввода должна включиться выход на модуле вывода

deldemo

Цитата: AJR от 01 августа 2019, 14:40:03Здравствуйте. Подскажите пожалуйста по вопросу. Есть скада, модуль ввода и модуль вывода. Как можно через скаду связать два модуля. То есть, при включении кнопки в модули ввода должна включиться выход на модуле вывода

Здравствуйте. Я вообще отговорил бы Вас от этой затеи. SCADA нельзя использовать для связи автономных  модулей.
А если очень хочется то делается это через OPC Server для ваших модулей DI/DO. Переменный из OPC добавьте в SCADA и свяжите их скриптом "Изменились переменные".
Учтите! отключится или зависнит SCADA пропадет связь между двумя устройствами.  Лучше курить в сторону modbus rtu rs485 для связи двух модулей (если они находятся удаленно, то MOXA Вам в помощь)

AJR

Я прекрасно понимаю, что скада не должна управлять. Благо механизм не категоричный, насос воды на башню. Предполагалось, что операторы Бабульки будут включать насос удалённо с большой кнопкой на стене. Работать мышкой они отказываются. Но и мне спокойнее. Если можно привязать тег-кнопку на клавиши на клавиатуре, было бы огонь.
Пысы. Моха. Если показать счёт на моху меня могут посадить за попытку доведения к самоубийству руководителя

AJR

Есть возможность привязать тег на сервере к комбинацию клавиш на клавиатуре? Как это можно организовать?

Simple_Scada

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

ЦитироватьЕсть скада, модуль ввода и модуль вывода. Как можно через скаду связать два модуля. То есть, при включении кнопки в модули ввода должна включиться выход на модуле вывода
Как правильно написал deldemo, Вам необходимо импортировать в скаду переменные модуля ввода и модуля вывода с Вашего OPC-сервера. Затем можно создать скрипт по событию "Изменились переменные", добавить в него переменную модуля ввода(как описано в этом примере) и написать скрипт:
Код: pascal
begin
  OutputMod.Value := InputMod.Value;
end.
, где InputMod - переменная модуля ввода, OutputMod - переменная модуля вывода. Таким образом, при изменении переменной InputMod ее значение будет записываться в переменную OutputMod.

ЦитироватьЕсть возможность привязать тег на сервере к комбинацию клавиш на клавиатуре? Как это можно организовать?
К сожалению, такой возможности нет.