Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: aleks218 от 14 Апреля 2018, 17:05:10

Название: Изменяемое название
Отправлено: aleks218 от 14 Апреля 2018, 17:05:10
Здравствуйте!
Не подскажите решение. Необходимо для каждого механизма создать поле c наименованием механизма. Также должна быть возможность изменения\ редактирования оператором этого поля при необходимости.
Создал обьект TextV5 (TM_Text)  теперь  при событии OnDblClick нужно  запустить скрипт который будет открывать возможность редактирования текста и сохранение его в фаил (думаю в ексель так как таких механизмов много и для каждого механизма по значению дополнительного параметра обратится к конкретной ячейке считать и записать строку в TextV5.
Как скрипт написать не подскажите?
Название: Re: Изменяемое название
Отправлено: pan2000 от 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.

Полностью пример во вложении.
Название: Re: Изменяемое название
Отправлено: aleks218 от 16 Апреля 2018, 12:23:30
Спасибо за скорый ответ!
В приложенном Вами примере  изменённый  текст будет сохраняться на сервере и изменения будут видны у всех клиентов?
Если выполнение проекта остановить и запустить по новой то  будут отображены названия механизмов  уже измененные или те же самые которые создавались при создании проекта в редакторе.?

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


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


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

Название: Re: Изменяемое название
Отправлено: aleks218 от 16 Апреля 2018, 20:12:15
Как я понимаю из ответа.
1 способ
Необходимо создать текстовый файл из которого при изменениях в текстовом поле содержимое будет сохранятся и записываться в фаил и читается обратно в текстовое поле после изменения.
Только из руководства по скриптам не понятно как можно обратиться к конкретному номеру строки в файле.
2 способ
 Создать в базе данных свою таблицу с четырьмя столбцам индекс, номер механизма, назначение механизма (группа освещения, приточная система, вытяжная система и т.д.)
Далее в скрипт при запуске приложения прописать в нужные текстовые поля заполнение данными. При редактировании эти данные перезаписывать на отредактированные и вывод нового значения в текстовом поле.
 Я в правильном направлении рассуждаю?
Название: Re: Изменяемое название
Отправлено: pan2000 от 17 Апреля 2018, 08:34:26
Цитировать
Создать в базе данных свою таблицу с четырьмя столбцам индекс, номер механизма, назначение механизма (группа освещения, приточная система, вытяжная система и т.д.)
Судя по названию столбцов, это редко редактируемые данные, возможно только один раз.
Так что создание встроенного редактора, на мой взгляд, не обосновано.

Если у Вас есть еще вопросы, то приглашаю продолжить в "Личных сообщениях".
Название: Re: Изменяемое название
Отправлено: Simple-Scada от 17 Апреля 2018, 10:43:34
В приложенном Вами примере  изменённый  текст будет сохраняться на сервере и изменения будут видны у всех клиентов?
Изменения всегда отображаются на всех клиентах подключенных к серверу.

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

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

Только из руководства по скриптам не понятно как можно обратиться к конкретному номеру строки в файле.
Есть два типа файлов: текстовые и двоичные. В них нет номеров строк, как и самих строк. Данные на самом деле являются одной большой "строкой". А когда Вы открываете такой файл в текстовом редакторе, то он просто находит в этой большой строке символы переноса и отображает файл разбитым на строки. Поэтому, если Вам нужно перейти к 10 строке в текстовом файле, то придется выполнить функцию TextFileReadLn (https://simple-scada.com/help/script/textfilereadln.html) десять раз. При работе с двоичными файлами такого недостатка нет и можно установить "курсор" в любое место файла используя процедуру FileSeek (https://simple-scada.com/help/script/fileseek.html). Но это удобно только если Вы знаете точный размер каждой "строки" в файле. Если же размер заранее неизвестен (например когда в строке есть строковое значение произвольной длины), то опять же придется читать файл построчно, пока курсор не дойдет до нужной позиции.