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

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

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - st-legal

Страницы: [1] 2
1
А попробуй десяток полей сделать, и скриптик срабатывающий на изменение переменной:
Увеличивающий на 1 переменную счетчик и присваивающий  в кейсе значения полям по очереди.
Тогда можно будет отследить все изменения переменной.
Еще лучше, если рядом будет еще колоночка полей для внутренней переменной прицепленной как Екс для кнопок. Тогда можно будет точно отследить сам факт нажатия.
Приветствую Teodor, в том то и прикол, что с внутренней переменной одновременное присвоение проходит, а вот как заявлено что "улучшенная работа с внешними переменными (значение на присвоение временно хранится в оперативной памяти);" не работает. Это не особо критично, можно операторам объяснить, что необходимо дождаться пока загорится лампочка и затем нажимать другую кнопку. Но просто хотелось добиться результата при одновременном нажатии

2
Вы уверены, что проблема с быстрым присвоением битов в одну переменную существует после того как Вы убрали внутреннюю переменную? Мы сейчас делаем очень быстрые клики в Вашем проекте по кнопкам "Выход 1" .. "Выход 4" и присвоения всегда выполняются правильно. Может быть Вы во время кликов по кнопкам производите нажатие в зоне кнопки, а отпускаете мышь уже за её пределами? В таком случае присвоение не выполнится и может создастся впечатление, будто нажатие было, а присвоение не выполнилось.
Итоговая картинка, сделал скрины. Нажимал все 4 кнопки последовательно, на последнем скрине итоговый результат. Не работает быстрое присвоение тегу..(((

3
согласен, не доглядел. А с первым вопросом как быть?

4
Конечно, и ещё кое-что. Имеется кнопка, которая активирует сразу все 4 выхода модуля. Так вот она сначала устанавливает все биты в 1 (слово =15), а затем сразу сбрасывает все выходы в ноль, кроме первого (слово =1).

5
К сожалению, после того как я убрал внутреннюю переменную проблема присвоения разных битов одной и той же переменной осталась. У меня версия 2.2.2.0

6
Доброе утро, ув. форумчане. В продолжении темы Есть 2 модуля, каждый со своим адресом. Имеется кнопка которая активирует выход модуля.
vrSync-Value
bout-Ex
OnDataChange
Код
begin
if not (Sender is TM_Object) then Exit;
  with Sender as TM_object do
    if(Variable <> nil) and (VariableEx <> nil) then
    VariableEx.Value:= Value;
end.
Все тут работает нормально. При перезапуске проекта внутренние переменные обнуляются и соответственно обнуляют за собой OPC переменные. Для решения этой проблемы было создано скрытое Поле:
vrSync-Value
bout-Ex
OnDataChange
Код
begin
if not (Sender is TM_object) then Exit;
with Sender as TM_object do
if (Variable <> nil) and (VariableEx <> nil) then
if Variable.IsGoodQuality then
Value:=VariableEx.Value;
end.

OnDataChangeEx:
Код
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.
Проблема состоит в следующем: Все вроде не плохо, но первый перезапуск проекта все норм. Последующие перезапуски творят чудеса. Выхода могут сброситься в ноль, могут начать сбрасываться и возвращаться в активное состояние. И еще если модуль не один, то на модуле с низшим Modbus адресом при перезагрузке проекта значения сохраняются, а на последующих модулях либо сбрасываются либо начинают моргать.
Вопрос, в чем тут загвоздка. Всем за ранее спасибо!!

7
st-legal, а простое присвоение по событию OnClick в Вашем случае не подходит? Например:

Код
begin
  myVar1.Value := SetBit(MyVar1.Value, 0, TRUE);  // меняем нулевой бит в переменной myVar1
  myVar2.Value := SetBit(MyVar2.Value, 0, TRUE);  // меняем нулевой бит в переменной myVar2
end.
Ув. разработчики, в очередной раз огромное человеческое спасибо. Ответы всегда на поверхности

8
Посмотри здесь: http://simple-scada.com/forum/index.php?topic=404.msg3739#new
Если я все правильно понял, то в данном примере каждый элемент управления меняет бит своего тега. А мне нужно 1 кнопкой поменять 1 бит у каждой идентичной переменной

9

Для решения этого вопроса можно сделать синхронизацию через внутреннюю переменную. Т.е., дано: наша внешняя переменная в которой нужно менять биты. Она называется vrMy. Мы создаем ещё одну внутреннюю переменную с именем vrSync. Связываем обе кнопки с переменной vrSync. Также у этих кнопок в качестве доп. переменной выбираем vrMy. Пишем следующий универсальный скрипт:

Код
begin
  if not (Sender is TM_Object) then Exit;
  with Sender as TM_Object do
    if (Variable <> nil) and (VariableEx <> nil) then
      VariableEx.Value := Value;
end.

Теперь ставим данный скрипт на событие OnDataChange у наших кнопок (причем этот скрипт подойдет для всех подобных кнопок в проекте). Готово. Теперь кнопки работают с внутренней переменной и присвоения выполняются моментально, поэтому проблемы с битами нет. При этом все изменения отправляются во внешнюю переменную.
Добрый всем день. В продолжении темы. Столкнулся с очередной задачей. Вопрос практически такой же только с одной поправкой . Имеется не один модуль а например 10. и нужно нажатием кнопки активировать 1 выход каждого модуля (выхода вытаскиваю из ОРС сервера в виде word, где каждый бит отвечает за свой выход). Как решить такую задачу? Да выхода каждого модуля имеют свой тег соответственно : bout, bout_1, bout_2 и т.д.

10
Но на следующий день ячейка со значением переменной для 01:00 должна перезаписаться новым значением
То есть у вас фиксированный размер таблицы? Тогда вам надо просто 24 переменных и забудьте о базах и таблицах. Выведите их в 24 поля. :)
тогда я не очень понимаю как это сделать без базы

11
Добрый день, ув. форумчане. Помогите разобраться с таблицами. Есть переменная (счетчик), которая записывается в базу данных mysql. Стоит задача: вывести значение счетчика накопленное за час и общее количество за сутки. Т.е. в таблице 24 строки (для каждого часа) и столбец со значением счетчика. значение счетчика передается из контроллера в формате word.
Т.е. Вам нужно взять данные счетчика из БД и на основе этих данных подсчитать накопленное за час и общее за сутки, а затем вывести полученный результат в таблицу?

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

12
Добрый день, ув. форумчане. Помогите разобраться с таблицами. Есть переменная (счетчик), которая записывается в базу данных mysql. Стоит задача: вывести значение счетчика накопленное за час и общее количество за сутки. Т.е. в таблице 24 строки (для каждого часа) и столбец со значением счетчика. значение счетчика передается из контроллера в формате word. И еще как организовать перезапись данных в таблице, значения, полученного в этом же часу но днем раньше??? За ранее спасибо

13
Спасибо уважаемые разработчики за столь развернутый ответ и помощь!!

14
Спасибо, ув. Teodor, все работает как часы... ;D

15
Спасибо Вам огромное, буду пробовать...

Страницы: [1] 2