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

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

Автор Тема: Изменяемое название  (Прочитано 2608 раз)

aleks218

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Изменяемое название
« : 14 Апреля 2018, 17:05:10 »
Здравствуйте!
Не подскажите решение. Необходимо для каждого механизма создать поле c наименованием механизма. Также должна быть возможность изменения\ редактирования оператором этого поля при необходимости.
Создал обьект TextV5 (TM_Text)  теперь  при событии OnDblClick нужно  запустить скрипт который будет открывать возможность редактирования текста и сохранение его в фаил (думаю в ексель так как таких механизмов много и для каждого механизма по значению дополнительного параметра обратится к конкретной ячейке считать и записать строку в TextV5.
Как скрипт написать не подскажите?

pan2000

  • Постоялец
  • ***
  • Сообщений: 210
    • Просмотр профиля
Re: Изменяемое название
« Ответ #1 : 16 Апреля 2018, 07:22:55 »
Цитировать
Не подскажите решение. Необходимо для каждого механизма создать поле c наименованием механизма. Также должна быть возможность изменения\ редактирования оператором этого поля при необходимости.

Для  наименования механизма можно использовать объект ТЕКСТ.
В этом случае редактирование отдельного названия будет состоять из следующих шагов:

1. Идентификация выбранного поля ТЕКСТ.
2. Запись исходного текста из выбранного объекта ТЕКСТ во внутреннюю переменную текстового типа, связанную с объектом ПОЛЕ.
3. Позиционирование ПОЛЯ на выбранный объект ТЕКСТ - необязательное действие, просто определяющее место редактирования текста - на объекте или фиксированное. При редактировании  на объекте  необходимо условие: номер слоя объекта ПОЛЕ больше номера слоя любого объекта ТЕКСТ.
4. Редактирование текста для объекта ПОЛЕ.
5. Запись измененого текста в идентифицированный объект ТЕКСТ.
6. Сокрытие объекта ПОЛЕ при редактировании текста на объекте.

Шаги 1-3, скрипт типа OnDblClick для объектов ТЕКСТ:
Код: (delphi)
begin
  with Sender as TM_Text do
    begin
      EditText.Tag := Tag;   // идентификатор текста
      aText.Value := Text;   // записать исходный текст в переменную редактирования
      EditText.X := X;       // позиционирование окна редактирования по X
      EditText.Y := Y;       //   по Y
    end;
end.

Шаги 5-6, скрипт типа OnDoneInput для объекта EditText c основной переменной aText:
Код: (delphi)
begin
  GetTextByName('Text' + IntToStr(EditText.Tag)).Text :=
      aText.AsUTF8String;      // запись результата редактирования
  EditText.Y := -100;          // скрыть поле редактирования
end.

Полностью пример во вложении.
« Изменён: 26 Мая 2018, 13:35:38 от Simple-Scada »

aleks218

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Re: Изменяемое название
« Ответ #2 : 16 Апреля 2018, 12:23:30 »
Спасибо за скорый ответ!
В приложенном Вами примере  изменённый  текст будет сохраняться на сервере и изменения будут видны у всех клиентов?
Если выполнение проекта остановить и запустить по новой то  будут отображены названия механизмов  уже измененные или те же самые которые создавались при создании проекта в редакторе.?

И ещё один вопрос как в редакторе можно изменить  тип события, по которому будет вызван скрипт например с "универсального" на "полностью запущен"
« Изменён: 16 Апреля 2018, 14:04:28 от Simple_Scada »

pan2000

  • Постоялец
  • ***
  • Сообщений: 210
    • Просмотр профиля
Re: Изменяемое название
« Ответ #3 : 16 Апреля 2018, 18:49:52 »
Цитировать
В приложенном Вами примере  изменённый  текст будет сохраняться на сервере и изменения будут видны у всех клиентов?
Из "Основного руководства" по Simple-Scada:
Цитировать
Клиенты Simple-Scada выполняют только задачи визуализации, все необходимые данные запрашиваются у сервера.
Так что скорее ДА чем НЕТ, но внести полную ясность могут только разработчики Simple-Scada. Равно как и по вопросу об одновременном редактировании значения на нескольких клиентах.


Цитировать
Если выполнение проекта остановить и запустить по новой то  будут отображены названия механизмов  уже измененные или те же самые которые создавались при создании проекта в редакторе.?
При запуске проекта свойства объекта инициализируются статическими начальными значениями, заданными при создании проекта в редакторе. Для динамических начальных значений (изменяемых в процессе исполнения и сохраняемых в качестве новых начальных значений) всю работу прийдется выполнять самостоятельно, включая:
 - организацию хранения этих значений в файле/файлах или БД;
 - инициализацию при запуске проекта;
 - редактирование и сохранение.


Цитировать
И ещё один вопрос как в редакторе можно изменить  тип события, по которому будет вызван скрипт например с "универсального" на "полностью запущен"
Создать новый скрипт соответствующего типа и скопипровать в него содержимое исходного.


aleks218

  • Новичок
  • *
  • Сообщений: 7
    • Просмотр профиля
Re: Изменяемое название
« Ответ #4 : 16 Апреля 2018, 20:12:15 »
Как я понимаю из ответа.
1 способ
Необходимо создать текстовый файл из которого при изменениях в текстовом поле содержимое будет сохранятся и записываться в фаил и читается обратно в текстовое поле после изменения.
Только из руководства по скриптам не понятно как можно обратиться к конкретному номеру строки в файле.
2 способ
 Создать в базе данных свою таблицу с четырьмя столбцам индекс, номер механизма, назначение механизма (группа освещения, приточная система, вытяжная система и т.д.)
Далее в скрипт при запуске приложения прописать в нужные текстовые поля заполнение данными. При редактировании эти данные перезаписывать на отредактированные и вывод нового значения в текстовом поле.
 Я в правильном направлении рассуждаю?

pan2000

  • Постоялец
  • ***
  • Сообщений: 210
    • Просмотр профиля
Re: Изменяемое название
« Ответ #5 : 17 Апреля 2018, 08:34:26 »
Цитировать
Создать в базе данных свою таблицу с четырьмя столбцам индекс, номер механизма, назначение механизма (группа освещения, приточная система, вытяжная система и т.д.)
Судя по названию столбцов, это редко редактируемые данные, возможно только один раз.
Так что создание встроенного редактора, на мой взгляд, не обосновано.

Если у Вас есть еще вопросы, то приглашаю продолжить в "Личных сообщениях".

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3160
    • Просмотр профиля
    • Simple-Scada
Re: Изменяемое название
« Ответ #6 : 17 Апреля 2018, 10:43:34 »
В приложенном Вами примере  изменённый  текст будет сохраняться на сервере и изменения будут видны у всех клиентов?
Изменения всегда отображаются на всех клиентах подключенных к серверу.

Если выполнение проекта остановить и запустить по новой то  будут отображены названия механизмов  уже измененные или те же самые которые создавались при создании проекта в редакторе.?
После перезапуска проекта Simple-Scada просто считает текущие значения переменных с OPC-серверов, отобразит эти значения в соответствующих полях, выполнит соответствующие OnDataChange-скрипты (если такие есть в проекте) и т.д. Если у Вас на контроллере есть строковая переменная для хранения названия механизма, то вы можете вывести её в скаду и менять когда угодно. После перезапуска проекта эта переменная снова считается с контроллера и отобразится в скаде. Т.е. контроллер в этом случае будет запоминающим устройством. Если нужно восстановить какую-то информацию на мнемосхеме, которой нет на внешних устройствах, то придется делать свою систему сохранения данных и загрузки после перезапуска. Данные можно сохранить либо в файлы, используя функции для работы с файлами, либо в БД, выполняя пользовательские SQL-запросы процедурой RunSQL. Пример по работе с файлами и БД можно найти в стандартном Demo-проекте. Работа с файлами реализована на странице "Скрипты" -> "Работа с файлами". Работа с БД на странице "Скрипты" -> "Работа с БД".

И ещё один вопрос как в редакторе можно изменить  тип события, по которому будет вызван скрипт например с "универсального" на "полностью запущен"
Нужно создать новый скрипт с нужным типом события, а старый скрипт удалить.

Только из руководства по скриптам не понятно как можно обратиться к конкретному номеру строки в файле.
Есть два типа файлов: текстовые и двоичные. В них нет номеров строк, как и самих строк. Данные на самом деле являются одной большой "строкой". А когда Вы открываете такой файл в текстовом редакторе, то он просто находит в этой большой строке символы переноса и отображает файл разбитым на строки. Поэтому, если Вам нужно перейти к 10 строке в текстовом файле, то придется выполнить функцию TextFileReadLn десять раз. При работе с двоичными файлами такого недостатка нет и можно установить "курсор" в любое место файла используя процедуру FileSeek. Но это удобно только если Вы знаете точный размер каждой "строки" в файле. Если же размер заранее неизвестен (например когда в строке есть строковое значение произвольной длины), то опять же придется читать файл построчно, пока курсор не дойдет до нужной позиции.
« Изменён: 17 Апреля 2018, 11:01:51 от Simple-Scada »