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

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

Teodor

#360
а если так? :)

Код: pascal
if sysUpTime_0.IsGoodQuality = TRUE then
  Online.Value := TRUE
else
  Online.Value := FALSE;

Simple-Scada

#361
Цитата: Teodor от 09 июня 2017, 09:38:35А можете теперь все то-же расписать, но с условием, что ExtVar может измениться "с той стороны"? Например есть еще один сервер работающий с тем-же регистром и нам надо переключить кнопки в актуальное положение? При том что щелкать по ним могут фактически одновременно. :-\
Для этого достаточно написать обратный универсальный скрипт на событие OnDataChangeEx для кнопок:

Код: pascal
begin
  if not (Sender is TM_Object) then Exit;

  with Sender as TM_Object do
    if (Variable <> nil) and (VariableEx <> nil) then
      Value := VariableEx.Value;
end.
Тогда виртуальная переменная будет всегда иметь актуальное значение и работа будет корректной.

Simple-Scada

#362
Цитата: xrusteg от 09 июня 2017, 14:02:30Но проблема в том, что не знаю к какому событию привязать данный скрипт, если привязать к посекундному, то каждую секунду будут появляться сообщения, что неправильно. К чему еще можно привязать данный скрипт?
Для данной задачи действительно лучше всего делать проверку в секундном скрипте. А чтобы сообщение не выдавалось каждую секунду, можно создать отдельную внутреннюю переменную с типом данных Boolean и именем, например, vrShown. Тогда секундный скрипт будет таким:
Код: pascal
begin
  if sysUpTime_0.IsGoodQuality = False then
  begin
    if vrShown.Value = False then   // если сообщение не было показано
    begin
      AddMessage(Now, mkAlarm, 'Потеря связи с контроллером!', True, True);
      vrShown.Value := True;        // отмечаем, что сообщение было показано
    end;
  end else                          // если качество хорошее, то
    vrShown.Value := False;         // разрешаем выдачу сообщения
end.
Цитата: st-legal от 09 июня 2017, 15:10:58Добрый день, ув. форумчане. Помогите разобраться с таблицами. Есть переменная (счетчик), которая записывается в базу данных mysql. Стоит задача: вывести значение счетчика накопленное за час и общее количество за сутки. Т.е. в таблице 24 строки (для каждого часа) и столбец со значением счетчика. значение счетчика передается из контроллера в формате word.
Т.е. Вам нужно взять данные счетчика из БД и на основе этих данных подсчитать накопленное за час и общее за сутки, а затем вывести полученный результат в таблицу?

Цитата: st-legal от 09 июня 2017, 15:10:58И еще как организовать перезапись данных в таблице, значения, полученного в этом же часу но днем раньше???
Можно просто связать ячейку таблицы с переменной. По изменению переменной, значение в ячейке будет обновляться.

emoxristov

#363
Код: pascal
begin
  Button5.Value := 1;
  delay := 1000;
  Button6.Value := 1;
  delay := 2000;
  Button2.Value := 1;
  delay := 3000;
  Button1.Value := 1;
end.   
   

 Где ошибка в сценарии?
  Как выкроить время  между кнопками?
Мне нужно, чтобы иметь возможность установить время между : Button5,Button6,Button2,Button1
Помощь много мне нужно это изменение.

Teodor

#364
Создайте секундный скрипт и переменные для времени начала (отсчета) и флажка начала отсчета.
По нажатию на кнопку установите флажок в TRUE.
Дальше после установки флажка увеличивайте на 1 переменную отсчета. Выполняйте действия по значению этой переменной.

Код: pascal
if Started.Value = TRUE then
  Counter.Value := Counter.Value+1
else
  Counter.Value := -1;

case Counter.Value of
  0:Button1.Value := 1;
  1:Button2.Value := 1;
  2:Button3.Value := 1;
...
  x:ButtonХ.Value := 1;
  y:Started.Value :=FALSE;
end;

тогда значения кнопок будут изменяться каждую секунду (точнее через Counter.Value секунд от момента установки флажка)

Teodor

#365
Цитата: Simple-Scada от 10 июня 2017, 12:03:49..
Для этого достаточно написать обратный универсальный скрипт на событие OnDataChangeEx для кнопок:
...
Прям сейчас так и попробую... А то мои методы явный "оверкил".  ;D ;)

И сразу грабли... Еще нужен Тег... Для определения места начала поиска данных в переменной и записи ее в нужную часть регистра.
Код: pascal
var
  Mask:byte;
begin
  if not (Sender is TM_Object) then Exit;
  Mask:=7; //3bit
  with Sender as TM_Object do
    if (Variable <> nil) and (VariableEx <> nil) then
      VariableEx.Value := VariableEx.Value and (Mask shl Tag xor 65535) or (Value shl tag);
end.
Код: pascal
var
  Mask:byte;
begin
  if not (Sender is TM_Object) then Exit;
  Mask:=7; //3bit
  with Sender as TM_Object do
    if (Variable <> nil) and (VariableEx <> nil) then
      Value := (VariableEx.Value shr Tag) and Mask;
end.

Simple-Scada

Teodor, мы планируем в ближайшем будущем сделать сохранение присвоенного значения в оперативной памяти на определенное время. Тогда при быстром клике двух кнопок с разными битами одной переменной все присвоения будут корректными и данный вопрос не придется решить скриптами. Но разве у Вас именно такая проблема? Кажется Вы писали, что иногда присвоение у Вас просто не проходит с первого раза. Или тогда речь как раз шла о присвоении разных битов одной переменной?

Teodor

Цитата: Simple-Scada от 12 июня 2017, 16:30:49Teodor, мы планируем в ближайшем будущем сделать сохранение присвоенного значения в оперативной памяти на определенное время. Тогда при быстром клике двух кнопок с разными битами одной переменной все присвоения будут корректными и данный вопрос не придется решить скриптами. Но разве у Вас именно такая проблема? Кажется Вы писали, что иногда присвоение у Вас просто не проходит с первого раза. Или тогда речь как раз шла о присвоении разных битов одной переменной?
Мы ж не просто так у вас 4 лицензии купили :) Это уже третий проект в работе, на котором такой проблемы не стоит, а все летает четенько и шустренько. Зато тут свои "заморочки" в виде подготовки под ханивел с ДИКОЙ ценой точки, потому каждый бит на счету, а тема просто удачно подвернулась :)

emoxristov

Teodor, я не могу сделать кнопки для включения последовательно в течение 30 секунд.
Загрузить проект, пожалуйста, сделайте это.
Администратор и попросить вас, чтобы помочь закончить проект.

Teodor

Напомните почему так:
 VariableEx.Value := VariableEx.Value and ((Mask shl Tag) xor 65535) + (Value shl tag);
работает, а так:
 VariableEx.Value := VariableEx.Value and ((Mask shl Tag) xor 65535) or (Value shl tag);
нет?

emoxristov

#370
Этот скрипт для кнопки AUTO это ?

Мне нужно, когда я нажимаю на кнопку AUTO.
Включите первую кнопку - 30 секунд второй-30 секунд третий -30 секунд четвертый и так до последнего.

st-legal

#371
Цитата: Simple-Scada от 10 июня 2017, 12:18:47
Цитата: st-legal от 09 июня 2017, 15:10:58Добрый день, ув. форумчане. Помогите разобраться с таблицами. Есть переменная (счетчик), которая записывается в базу данных mysql. Стоит задача: вывести значение счетчика накопленное за час и общее количество за сутки. Т.е. в таблице 24 строки (для каждого часа) и столбец со значением счетчика. значение счетчика передается из контроллера в формате word.
Т.е. Вам нужно взять данные счетчика из БД и на основе этих данных подсчитать накопленное за час и общее за сутки, а затем вывести полученный результат в таблицу?

Цитата: st-legal от 09 июня 2017, 15:10:58И еще как организовать перезапись данных в таблице, значения, полученного в этом же часу но днем раньше???
Можно просто связать ячейку таблицы с переменной. По изменению переменной, значение в ячейке будет обновляться.
Доброе утро, примерно так, только не получится связать ячейку с переменной, т.к. одна и та же переменная должна появляться в своей строке: пример
01:00     300
02:00     350
и т.д.
Но на следующий день ячейка со значением переменной для 01:00 должна перезаписаться новым значением

Teodor

#372
Цитата: emoxristov от 12 июня 2017, 17:45:16Загрузить проект, пожалуйста, сделайте это.
посмотрите. Я сделал отдельно кнопки, чтобы не поломать ваши и вывел счетчики, чтобы понятно было что происходит в скрипте. Цифры в Case, это секунды задержки включения кнопок после нажатия на АВТО.
вам надо будет поставить для вашей задержки:
0:
30:
60:
90:

Teodor

Цитата: st-legal от 13 июня 2017, 07:57:05Но на следующий день ячейка со значением переменной для 01:00 должна перезаписаться новым значением
То есть у вас фиксированный размер таблицы? Тогда вам надо просто 24 переменных и забудьте о базах и таблицах. Выведите их в 24 поля. :)

st-legal

Цитата: Teodor от 13 июня 2017, 09:24:48
Цитата: st-legal от 13 июня 2017, 07:57:05Но на следующий день ячейка со значением переменной для 01:00 должна перезаписаться новым значением
То есть у вас фиксированный размер таблицы? Тогда вам надо просто 24 переменных и забудьте о базах и таблицах. Выведите их в 24 поля. :)
тогда я не очень понимаю как это сделать без базы