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

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

Автор Тема: Экспорт файла  (Прочитано 4137 раз)

Elfar

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Экспорт файла
« : 21 Мая 2019, 20:38:48 »
Всем привет. Вобщем вопрос состоит так:
Есть таблица, в ней ячейки с цифрами, которые идут с ПЛК и обновляются раз в секунду. Цифры там десятичные со сдвигом запятой (тоесть с ПЛК приходит 117, а правильное значение в таблице показывает 11,7).  Так вот нужно, что бы при нажатии кнопки создался текстовый файл (ну или ехсel таблица) где эта переменная бы записывалась с интервалом один раз в секунду с запятой (11,7, а не 117 как приходит с ПЛК). И запись шла в течении 10 секунд. Как это организовать? Короче записать в отдельный текстовый файл значения температуры в течении 10 секунд с интервалом 1 раз в секунду (всего 10 десятичных цифр). Спасибо

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Экспорт файла
« Ответ #1 : 22 Мая 2019, 16:25:12 »
Здравствуйте.

Для работы с текстовыми файлами нужно использовать эти функции. Можно создать новый скрипт с типом события "Прошла секунда" и в этом скрипте выполнять запись в текстовый файл:
Код: (delphi)
begin
  { открываем текстовый файл MyTextFile.txt из папки "\Simple-Scada\Projects\Папка_проекта\User files\"
    для добавления записи в конец файла }
  if TextFileOpen('MyTextFile.txt', '', fomAppend, fcpUTF8) then
  begin
    TextFileWriteLn(vrTemperature.AsStr);  // записываем значение температуры в конец файла
    TextFileClose;  // закрываем файл
  end;
end;

Elfar

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Экспорт файла
« Ответ #2 : 23 Мая 2019, 12:18:34 »
Спасибо. А вот строка №6 а именно (vrTemperature.AsStr) здесь что вставлять? Адрес переменной или просто тэг назвать "Temperature"? немного не пойму этот момент

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Экспорт файла
« Ответ #3 : 23 Мая 2019, 12:20:04 »
vrTemperature это просто имя переменной температуры, замените её на имя которое используется у Вас для переменной температуры.

Elfar

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Экспорт файла
« Ответ #4 : 24 Мая 2019, 09:57:54 »
vrTemperature это просто имя переменной температуры, замените её на имя которое используется у Вас для переменной температуры.
Сделал Ваш скрипт. В принципе всё получилось то, как задумывал. Но только есть пару неприятных моментов.

Проблема №1 - если этот текстовый файл удалить или переместить из папки проекта, новый не создается и данные никуда не будут записываться.
Проблема №2 - новые данные записываются в следующей строке не трогая старых. Мне нужно, что бы когда ставилась новая деталь и началось новое испытание, создавался либо новый файл, либо стирались данные и записывались новые только на это испытание.

Если эти моменты невозможно исправить, какие ещё существуют варианты, что бы на каждое индивидуальное испытание создавался либо новый файл либо новые данные затирают старые и пишутся заново.
Спасибо

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Экспорт файла
« Ответ #5 : 24 Мая 2019, 10:22:10 »
При необходимости можно сделать любые манипуляции с файлами. Просто используйте эти функции для работы с файлами, они подробно описаны в руководстве.
Код: (delphi)
begin
  if not FileExists('MyTextFile.txt', '') then               // если файл не найден
    TextFileOpen('MyTextFile.txt', '', fomRewrite, fcpUTF8)  // то создаём его и открываем
  else                                                       // если файл существует
    TextFileOpen('MyTextFile.txt', '', fomAppend, fcpUTF8);  // то открываем его и перемещаем курсор в конец файла

  // здесь работаем с файлом

  TextFileClose;                                             // закрываем файл
end.
В текстовых файлах нет функций для перемещения к указанной строке, поэтому если в текстовом файле нужно установить курсор на какую-то конкретную строку, например пятую, то придется открыть его и пять раз выполнить пустое чтение через TextFileReadLn (чтение текущей строки + переход на следующую строку), а затем выполнить запись.

Elfar

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Экспорт файла
« Ответ #6 : 24 Мая 2019, 14:54:07 »
Супер. Спасибо за ответ. Но я извиняюсь, может уже Вам надоел, но шеф потребовал доработку с которой я не могу справиться. Вот то, что у меня получилось, просто шикарно, но требуется что бы со значением шло время и дата (например 1я строка - время, 2я - значение, 3 - время, 4 - значение и т.д). Пробовал ставить календарь, но там дата 1899 года, добавил в скрипт, так в TXT файл оно добавляет две строки с нулями, т.е. 1я строка-значение, 2я-ноль, 3я-ноль, 4-значение 5-ноль, 6-ноль и т.д.. Читал в одной из тем, что человек как-то перевел в текст и стало все нормально.
Код: (delphi)
begin
  if not FileExists('Давление.txt', '') then
    TextFileOpen('Давление.txt', '', fomRewrite, fcpUTF8)
  else
    TextFileOpen('Давление.txt', '', fomAppend, fcpUTF8);

   if TextFileOpen('Давление.txt', '', fomAppend, fcpUTF8) then
    TextFileWriteLn(Field1.AsStr);
               TextFileWriteLn(Calendar1.AsStr);
end.
                                           
« Изменён: 24 Мая 2019, 14:55:59 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Экспорт файла
« Ответ #7 : 24 Мая 2019, 15:02:32 »
После открытия файла не нужно снова открывать файл (TextFileOpen). В текстовый файл можно записывать только строки, поэтому переменную даты/времени нужно переводить в строку через DateTimeToStr. Календарь нужно связать с какой-то переменной, иначе значение не будет меняться.
Код: (delphi)
begin
  if not FileExists('Давление.txt', '') then
    TextFileOpen('Давление.txt', '', fomRewrite, fcpUTF8)
  else
    TextFileOpen('Давление.txt', '', fomAppend, fcpUTF8);

  TextFileWriteLn(DateTimeToStr(Calendar1.AsDateTime));
  TextFileWriteLn(Field1.AsStr);

  TextFileClose;
end.
Если нужно просто записывать текущее время (время ПК), то можно писать так: TextFileWriteLn(DateTimeToStr(Now));