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

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

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

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


Сообщения - Серега

Страницы: 1 ... 10 11 [12] 13 14 ... 20
166
Ваши вопросы / Re: TM_CheckBox и его свойства
« : 30 Сентября 2020, 09:25:10 »
Добрый день!
Спасибо за разъяснения.

167
Ваши вопросы / TM_CheckBox и его свойства
« : 29 Сентября 2020, 17:31:21 »
Добрый день!
Есть ряд вопросов.
Когда проект загрузился полностью инициализируем CheckBox согласно значениям основной и дополнительной переменных.
Основная отвечает за цвет самой галки
Код
if CheckBox29.Variable.Value then
  CheckBox29.Color := clLime
else
  CheckBox29.Color := clAqua;
Вспомогательная за фон галки
Код
if CheckBox29.VariableEx.Value then
  CheckBox29.BackgroundColor := $008040
else
  CheckBox29.BackgroundColor := $003030;

Далее то же самое в скрипты на изменение основной и вспомогательной переменных.
Захотел сделать в глобальном модуле обработку свойств CheckBox. И в одно секундном скрипте вызывать процедуру. Не надо плодить кучу
скриптов по изменению ну и т.д.
Но вот до реализации далеко.
1. Подскажите как в глобальном модуле в параметры процедуры указать константу цвета. На примере станет наверное понятнее
Код
procedure CheckBoxColoration(NeededCB:TM_CheckBox; Color1:?????; Color2:?????);
begin
if NeededCB.VariableEx.Value then
  NeededCB.BackgroundColor := Color1
else
  NeededCB.BackgroundColor := Color2;
end
2. Касаемо Sender. Из справки
Цитировать
... Поэтому Sender имеет общий тип данных "TM_Control". ... Sender необходимо явно привести к нужному типу....
То есть 
Код
with Sender as TM_CheckBox do
по идее дает возможность обратиться непосредственно к свойствам экземпляра TM_CheckBox
Но вот далее свойство
Код
Sender.BackgroundColor := $008040;
вызывает ошибку "... Undeclared identifier "BackgroundColor"...".
3. Можно ли вообще делать так:
Код
if Sender is TM_CheckBox then
  with Sender as TM_CheckBox do
    if VariableEx.AsBool = True then
      begin
        Sender.BackgroundColor := $008040;
      end
    else
      begin
        Sender.BackgroundColor := $003030;
      end; 
 
Можете пояснить?
Жду ответов и вопросов

168
Добрый день!
Пару предложений для улучшения (возможно  ;D) работы пользователей:
1. В примитивах "Кнопка" и "Прямоугольник" добавить свойства "Разрешить скругление" и "Радиус скругления" с указанием оного
2. В примитиве "Флажок" добавить свойство "Не реагировать на нажатие" и использовать его как элемент отображения состояния
3. В примитиве "Флажок" в свойстве "Положение подписи" добавить еще один пункт "Без подписи". При его выборе флажок перемещается в центр квадрата с размерами по дефолту 32х32 (а то сейчас как то 40х32 не смотрится, но использовать можно).
Жду ответов!

169
В дополнение к первому сообщению.
Если строку s разбить на две части
Код
ss := 'Нет ';
s := DateTimeToStr(Now) + ss + 'сигнала';
то на выходе получим вот это:
15.09.2020  14:37:13 краказябры сигнала !

(краказыбры = 3 знака вопроса, каждый в черном ромбе, https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BC%D0%B5%D0%BD%D1%8F%D1%8E%D1%89%D0%B8%D0%B9_%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB)

Подскажите алгоритм действий как правильно собрать строку и записать ее в файл?

170
Добрый день!
На форуме есть темы про кодировку (https://simple-scada.com/forum/index.php?action=search2) и это может кому-нибудь помочь.
В ходе работы над проектом возникла необходимость записывать некоторую информацию в файл.
Вот пример универсального скрипта, привязанный к событию Window.OnShow:
Код
if Assigned(aVar_LightWorking) then
  begin
    Button430.Variable := aVar_LightWorking;
  end
else
  begin
    if FileExists(aNameFile.Value , '') then
      begin
        TextFileOpen(aNameFile.AsStr, '', fomAppend, fcpDefault);
        TextFileWriteLn(s);
        TextFileClose;
      end;
    AddMessage(Now, mkMessage, 'Нет переменной LightWorking', True, False);
    Button430.Variable := Nil;
  end;
Все нужные переменные описаны, все нужные каталоги (User files) где нужно созданы (например APath из команды TextFileOpen согласно справке).
Далее было несколько вариантов действий:
1. Строка s просто набор символов (без символьных констант): 'Нет сигнала'
2. Строка s просто набор символов (без символьных констант) + текущее время: DateTimeToStr(Now) + 'Нет сигнала'
3. Далее команда открыть TextFileOpen с различными кодировками (fcpDefault, fcpUTF8, fcpCyrillic_windows1251, fcpEstonian_iso8859_13)
4. Преобразование строки s (UTF8Encode, UTF8ToString, String, без преобразования)
Результат следующий:
1. Преобразование срабатывает с командой String, но не на fcpEstonian_iso8859_13. Понятно почему.
2. Преобразование срабатывает с командой UTF8Encode при fcpUTF8, но не сразу это получилось.
Вопросы.
1. Перед записыванием строки s в файл ее нужно сначала сформировать, преобразовать и потом только вставить?
2. Есть ли ограничения для команды TextFileWriteLn внутри скобок.
Жду ответов и вопросов.


171
Ваши вопросы / Сборка битового слова
« : 07 Сентября 2020, 14:36:27 »
Добрый день!
Задача: из разных чисел формата int собрать, например word переслать его по сети дальше.
Допустим номер объекта в очереди 3 (не более 7) первых 3 бита. (номер бита в слове 0, 1, 2)
Далее наличие у объекта системы дверей - 1 бит  (номер бита 3)
Количество дверей справа у объекта, например 3 и 1 и 3 двери заблокированы (для количества с 4 по 6 биты, далее каждый бит за одну дверь).
Надеюсь понятно объяснил.
Пока есть вариант конкретно привязывать установку одиночных битов через SetBit.
Далее конкретные числа, занимающие более одного бита устанавливать так же через SetBit через повтор и if.
Но возможно опять не дочитал в справке есть более простой способ.
Можете указать направление?
И как бы подвопрос. Можно ли как то в свойстве переменной, например "Формат", указать отображение переменной в битовом виде. То есть если значение равно 3, то отобразить "0011"?

172
Добрый день!
Так.
Удалил все с тест-сервера.
Перегрузил сервер.
Установил по новой 2.4.0.1.
Перегрузил сервер.
Пересохранил проект. Залил другой с рабочего сервака и его тоже пересохранил.
Результат в прикрепленном файле.
Клиента запускаю на этой же машине.
Виртуалка, но до обновления вопросов не было.

173
Добрый день!
Импорт заработал. Но вот что происходит при подключении к серверу
Код
13:53:50.892 | MasterOPC-UA LocalHost: подключен
13:53:50.954 | MasterOPC-UA LocalHost: аварийное отключение Socket Error # 10054
Connection reset by peer. on SendMessage
13:53:50.954 | MasterOPC-UA LocalHost: аварийное отключение Socket Error # 10054
Connection reset by peer. on SendMessage
13:53:50.986 | MasterOPC-UA LocalHost: отключен
13:53:50.986 | MasterOPC-UA LocalHost: отключен
13:53:51.048 | MasterOPC-UA LocalHost: ua start subscribe error: SSE005 - Empty UACallMonitoredItemCreate response
13:53:56.814 | MasterOPC-UA LocalHost: подключен
13:53:56.907 | MasterOPC-UA LocalHost: аварийное отключение Socket Error # 10054
Connection reset by peer.
13:53:56.907 | MasterOPC-UA LocalHost: аварийное отключение Socket Error # 10054
Connection reset by peer.
13:53:56.907 | MasterOPC-UA LocalHost: отключен
13:53:56.954 | MasterOPC-UA LocalHost: ua start subscribe error: SSE005 - Empty UACallMonitoredItemCreate response
13:54:02.736 | MasterOPC-UA LocalHost: подключен
13:54:02.782 | MasterOPC-UA LocalHost: аварийное отключение Socket Error # 10054
Connection reset by peer. on SendMessage
13:54:02.782 | MasterOPC-UA LocalHost: аварийное отключение Socket Error # 10054
Connection reset by peer. on SendMessage
13:54:02.845 | MasterOPC-UA LocalHost: отключен
13:54:02.845 | MasterOPC-UA LocalHost: отключен
13:54:02.939 | MasterOPC-UA LocalHost: ua start subscribe error: SSE005 - Empty UACallMonitoredItemCreate response
13:54:07.282 | etp_tc_insat_last | Буферы переменых успешно записаны в БД!
13:54:07.329 | InSAT.ModbusOPCServer.DA (localhost) - группа: "ssg20"
13:54:07.329 | MasterOPC-UA LocalHost: отключен
13:54:07.376 | Hibernation Unit Array OPC-UA Facade: отключен
13:54:07.376 | InSAT.ModbusOPCServer.DA (localhost) - группа: "ssg300"
13:54:07.376 | Weather Station OPC-UA Facade: отключен
13:54:07.423 | InSAT.ModbusOPCServer.DA (localhost) - группа: "ssg50"
13:54:07.470 | InSAT.ModbusOPCServer.DA (localhost) - группа: "ssg100"
13:54:07.517 | InSAT.ModbusOPCServer.DA (localhost) отключен;
13:54:07.564 | WAGO 750-8100 PFC100 2ETH ECO: отключен
13:54:07.626 | etp_tc_insat_last | деактивирован
13:54:07.986 | Average FPS: 21
13:54:08.236 | Timers to free: 3
13:54:08.236 | Fonts to free: 25
13:54:08.236 | Textures to free: 18
13:54:08.282 | End

Жду вопросов и предложений!

174
Добрый день!
Накатил обновление на тестовый сервер (полная копия рабочего).
При проверке импорта переменных из OPC-UA произошел сбой.
В файлах сообщения в редакторе + настройки OPC  + лог редактора.
Установлена версия 2.4.0.0.
Проект пересохранен. Сервер перегружен.
Сначала попытка импорта без запуска в работу ОРС.
Потом запуск в работу ОРС и вторая попытка импорта.
В чем может быть проблема?
Жду ответов и вопросов.

175
Добрый день!
Товарищи извините. Надо быть ВНИМАТЕЛЬНЫМ и отдохнувшим.  :-\
И не использовать Ctrl + C/Ctrl + V. А если используешь проверить раз 15.
Все заработало как надо. Спасибо за ответы

176
Приветствую!
Хорошо. Рассмотрим гипотетический пример.
Есть дверь. Есть концевик, который отвечает за состояние двери "Закрыта".
Есть объект кнопка с фиксацией с основной и вспомогательной переменной.
Основная переменная - команда на открытие (=False) / закрытие (=True) 
Вспомогательная переменная - состояние концевика (дверь открыта = False / дверь закрыта = True)
Допустим имеется дельта времени пока дверь сойдет с концевика.
И теперь возникает идея реализовать все с помощью одной кнопки и команду отдать и состояние двери увидеть (через скрипты изменять свойства кнопки)
И в результате получаем, что пока есть команда изменить свойства можно (например текст и фон)
Нет команды нет изменений. Тогда как узнать состояние концевика?
Да многие могут сказать выведи дополнительно элемент и привяжи состояние концевика.
Принцип построения части проекта построен на перепривязки переменных.
В общем долго объяснять почему это не подходит. Надо. Так захотел заказчик.
Поэтому спрашиваю еще раз.
Цитировать
...
Если основная переменная стоит в состоянии True, то изменения состояния второстепенной переменной влияют на объект.
Если основная переменная стоит в состоянии False, то изменения состояния второстепенной переменной ни как не влияют на объект.
...
Это фишка или глюк.
Жду ответов и вопросов.


177
Добрый день!
Просто хочу уточнить одну вещь.
Есть основная переменная и дополнительная. Обе boolean.
Скрипт на изменения переменных, то есть любой из них.
По изменению меняем соответствующие параметры нужного объекта (пока только протестил на кнопке).
Если основная переменная стоит в состоянии True, то изменения состояния второстепенной переменной влияют на объект.
Если основная переменная стоит в состоянии False, то изменения состояния второстепенной переменной ни как не влияют на объект.
В руководстве какого либо описания не смог найти.
Можете пояснить принцип действия? Или это фишка. Или опять не понимаю принципа.
Жду ответов и предложений.
 
 

178
Добрый день!
Написали проблему, а потом и сами поняли в чем косяк.
Вы все верно говорите.
Все таки True не много отличается от 1.  ;D

179
Ошибки / Табуляция
« : 22 Июля 2020, 14:00:41 »
Добрый день!
Заметил в редакторе скриптов. Версия ПО 2.3.6.12.
Если делать Tab в начале строки все класс. Один Tab равен 2 пробелам.
Если делать Tab в середине или конце (например отодвинуть комментарий и т.п.) то двигается вся строка с самого начала.
Пока Вы не объясните, что это фишка, будем считать, что это маленький глюк.  ;D
Жду ответов и вопросов.

180
Добрый день!
Автору pan2000 спасибо! Довольно часто даете нужное направление. Но ...
Тех.поддержка проверьте работает ли у Вас вызов внешнего интерфейса глобального модуля при работе со вспомогательной переменной.
В глобальном модуле вот это:
Код
procedure ChangeTextButton(NameButton:TM_Button; VarEx:TM_Variable; Caption_On:string; Caption_Off:string);
begin
if VarEx.Value = 1 then
  begin
    NameButton.States[1].Caption := Caption_On;
    Text1606.Text := "Правда";
  end
else
  begin
    NameButton.States[1].Caption := Caption_Off;
    Text1606.Text := "Не Правда";
  end;
end;
+ объявление  в interface. Вызов в 1-секундном скрипте такой:
Код
ChangeTextButton(Button427, sen2, 'Выключен', 'Выключается');
Я точно знаю в каком состоянии кнопки нужно поменять надпись. Вроде это просто. Но нужного результата нет.
Можете как-то прокомментировать?

Страницы: 1 ... 10 11 [12] 13 14 ... 20