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

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

Teodor

Повторюсь... У кнопки есть 2 цвета... Когда она нажата-1, и когда отпущена-0. Если кнопка не фиксируемая, то цвет нажатой будет только пока вы ее удерживаете.

Вы можете менять цвет не нажатой (состояние 0) кнопки 11 по событию нажатия кнопки 10. Если допускается возможность блокирования кнопки в нажатом состоянии, то вам надо менять цвет кнопки в обоих состояниях (0 и 1).


LIM_IA

Ребят, спасибо! понял, заработало!

Teodor

Кстати, я привязал к нефиксируемой кнопке скриптик, который при нажатии инкрементирует переменную на 1, и задает цвет (значок) зависимо от ее нового значения. При достижении граничного значения переменная скидывается в 0. Получилась кнопка с несколькими положениями :)

LIM_IA

Teodor, тогда бы уж скрипт приложили бы) а то заинтриговали)

Teodor

Цитата: LIM_IA от 17 мая 2017, 15:27:44Teodor, тогда бы уж скрипт приложили бы) а то заинтриговали)
Искать надо :) Если есть реальная необходимость, то найду и подчищу от лишнего.

ПС. Не марайтесь с РГБ... Есть готовые цветовые константы, которых более чем хватает для жизни
Например: clWhite, clRed, clGreen, clYellow, clBlack, clSilver и т.д. http://diversenok.ho.ua/articles/TColor

Оно и понятнее по тексту, что ты хотел сделать год тому. :)

Teodor

#320
Накидал по новой :)

OnMouseUp:
Код: pascal
begin
  if Sender is TM_Button then
    with Sender as TM_Button do
      if VariableEx.Value < 3 then
        VariableEx.Value:= VariableEx.Value + 1
      else
        VariableEx.Value:= 0;
 end.

OnChangeEx:
Код: pascal
begin
  if Sender is TM_Button then
    with Sender as TM_Button do
      case VariableEx.Value of
        0: States[0].Color:=clGray;
        1: States[0].Color:=clGreen;
        2: States[0].Color:=clYellow;
        3: States[0].Color:=clRed;
     end;
 end.

К кнопке цепляете эти скрипты и переменные основная (булеан) и дополнительная (инт).

Теперь, при нажатии(точнее отпускании) на кнопку, значение доп переменной изменится, что запустит второй скрипт, меняющий цвет. Если переменную сменить снаружи(например от ОРС), то цвет  все равно изменится.

Так-же, во втором скрипте можно менять и текст/иконки, но вместо
Код: pascal
        0: States[0].Color:=clGray;
надо писать:
Код: pascal
        0: begin
              States[0].Color:=clGray;
              .....
            end;

Teodor

еще вариант с фиксируемой кнопкой:
Код: pascal
begin
  if Sender is TM_Button then
    with Sender as TM_Button do
      if VariableEx.Value = true then
         States[1].Color:=clGreen
      else
         States[1].Color:=clRed;
end.

Отжатая кнопка имеет свой цвет(напр. серый), в нажатом виде зависит от доп переменной.

Полезно если основная переменная например, включает движок(с серого), а дополнительная меняет цвет c зеленого на красный, если нет сигнала с датчика оборотов. Отжав мы получим назад свой серый.

Simple-Scada

#322
Цитата: Teodor от 17 мая 2017, 15:25:39Кстати, я привязал к нефиксируемой кнопке скриптик, который при нажатии инкрементирует переменную на 1, и задает цвет (значок) зависимо от ее нового значения. При достижении граничного значения переменная скидывается в 0. Получилась кнопка с несколькими положениями :)
Но ведь для этого можно сделать просто кнопку с фиксацией и множеством состояний, без скриптов, как на скрине во вложении. Такая кнопка есть в Демо-проекте на странице "Инструменты", блок 7.

Teodor

Гы... Век живи, век читай маны...

deldemo

Здравствуйте уважаемые.
Сделайте пожалуйста  пример, новой функции S-S, автозаполнение таблицы.

Simple-Scada

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

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

1. Из БД будет сделана выборка всей таблицы с именем `my_table` и эта выборка отобразится в таблице myTable. В первой строке таблицы будут выведены названия столбцов.
Код: pascal
var
  aQuery: string;
begin
  aQuery := 'SELECT * FROM `my_table`;';
  myTable.RunSQL(aQuery, tsAll);
end.

2. То же самое, но у таблицы заполнятся все строки кроме первой. Это позволяет сохранить заголовок таблицы неизменным.
Код: pascal
var
  aQuery: string;
begin
  aQuery := 'SELECT * FROM `my_table`;';
  myTable.RunSQL(aQuery, tsSaveFixRow);
end.

3. Бывает нужно сделать выборку так, чтобы названия колонок были на русском языке, а в БД они обычно названы на английском. Тогда можно выполнить замену имён прямо в запросе:
Код: pascal
var
  aQuery: string;
begin
  aQuery := 'SELECT `col1` as `Столбец 1`, `col2` as `Столбец 2` FROM `my_table`;';
  myTable.RunSQL(aQuery, tsAll);
end.

deldemo

#326
Здравствуйте. Спасибо за помощь.
Но тут же возникает другой вопрос. Делая вот такой запрос.
Код: pascal
var
  aQuery:string;
begin
  aQuery := 'SELECT AR_NAM, AR_ARTICLECODE, DP_TOTALWEIGHT, DP_BATCHESSET'+
            'FROM CFG_ARTICLE INNER JOIN CFG_DAYPROGRAM'+
            'ON CFG_ARTICLE.AR_ARTICLE_ID = CFG_DAYPROGRAM.DP_PRODUCT_ID'+
            'WHERE DP_STATUS_ID IN (1,2) AND DP_PRODUCT_ID <> 42'+
            'ORDER BY DP_PRODUCTIONNUMBER;';
                                               
  tblPlan.RunSQL(aQuery, tsSaveFixRow);
end.

Выдает вот такое сообщение.


Хотя в СУБД запрос проходит на ура

В чем может быть ошибка?

Simple-Scada

#327
Здравствуйте.
У вас пробел пропущен между DP_BATCHESSET и FROM. Затем между CFG_DAYPROGRAM и ON и т.д. в каждой строке.
Код: pascal
var
  aQuery:string;
begin
  aQuery := 'SELECT AR_NAM, AR_ARTICLECODE, DP_TOTALWEIGHT, DP_BATCHESSET '+
            'FROM CFG_ARTICLE INNER JOIN CFG_DAYPROGRAM '+
            'ON CFG_ARTICLE.AR_ARTICLE_ID = CFG_DAYPROGRAM.DP_PRODUCT_ID '+
            'WHERE DP_STATUS_ID IN (1,2) AND DP_PRODUCT_ID <> 42 '+
            'ORDER BY DP_PRODUCTIONNUMBER;';
                                               
  tblPlan.RunSQL(aQuery, tsSaveFixRow);
end.

deldemo

Огромное Спасибо !!!!!!!!!
Вечно я с этими переносами путаюсь.

Миханик

#329
Подскажите почему может не отрабатывать ежесекундный скрипт, хотя компиляция проходит:
Это теги проекта:
T111_1, T111_2, ... T111_29
...
T255_1, T255_2, ... T255_29

Код: pascal
Const
  Cname : array[1..52] of string = ('T111', 'T112', 'T113', 'T114', 'T115', 'T116', 'T121', 'T122', 'T123', 'T124', 'T125', 'T126',
  'T133', 'T134', 'T135', 'T136', 'T141', 'T142', 'T143', 'T144', 'T145', 'T151', 'T152', 'T153', 'T154', 'T155',
  'T211', 'T212', 'T213', 'T214', 'T215', 'T216', 'T221', 'T222', 'T223', 'T224', 'T225', 'T226', 'T231', 'T232', 'T233', 'T234',
  'T241', 'T242', 'T243', 'T244', 'T245', 'T251', 'T252', 'T253', 'T254', 'T255');
Var
  Tmin, Tmax, Tavg, pp : Double;
  i, j, n : Word;
  Tname : string;
  p: ^string;
begin

  for i:=1 to 52 do
    begin
      n := 29;
      Tname := Cname[i] + '_01';
      p := @Tname;
      pp := Double(p);
      Tmin := pp;
      Tmax := pp;
      Tavg := pp;

      for j := 2 to n do
        begin
          Tname := Silosname[i] + '_' + IntToStr(j);
          p := @Tname;
          pp := Double(p);
          if pp < Tmin then Tmin := pp;
          if pp > Tmax then Tmax := pp;
          Tavg := Tavg + pp;
        end;
      Tavg := Tavg/n;
	  
	  //как теперь присвоить Тегам T111_avg, T112_avg, ..., T255_avg значение переменной Tavg?
    end;
end.