Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 30

Тема: SysLibTime + SislibFile можно ли решить задачу?

  1. #1

    По умолчанию SysLibTime + SislibFile можно ли решить задачу?

    Не нашёл подобного поста, поэтому прошу опытных помочь с решением поставленной задачи. про то, зачем нужна именно такая задача смысла писать нет, но сам задача поставлена. а я новичок...

    Суть задачи: при включении или отключении питания контроллера, дата и время события должны записываться в файл или файлы. По идее может быть достаточно одного файла, а возможно нет (например 1 файл на каждый месяц). файл (ы) должны находиться в памяти контроллера (энергонезависимой), не передаваться "наверх" ни в коем виде.

    я так понял, почитав форум, что помочь может совместное использование библиотек SysLibTime и SislibFile, т.е. если питание выключили, из статистики получаем изменение состояния pow, по этому событию открываем файл, допустим dt_on_off, получаем текущие дату и время, пишем строку в файл, указывая что событие именно OFF, закрываем файл. при включении питание всё то же самое только по событию включения и в строке вместе с датой и временем пишется ON. Суть доп. требований: регистрировать только "долгие отключения", чтобы допустим отключения меньше 5-ти минут не фиксировались (не забивался файл, не переполнялась файловая система). Фиксация данных событий должна быть как минимум 6 месяцев, затем можно "кольцевать" события, либо "кольцевать" файлы, допустим их 6 по одному на месяц, затем самый старый затирается, самый новый создаётся.

    Отсюда много вопросов к опытным:

    1) правильно ли идёт ход моих мыслей?
    2) как не переполнить файловую систему?
    3) как прочитать данный файл и посмотреть все события? допустим подключившись ноутбуком... скачивать файл на ноут? как?
    4) поскольку в голове пока есть лишь примерное, "сумбурное" представление реализации, а срок дали очень маленький, может быть кто-либо возьмётся советами, "пинками в нужном направлении" помочь мне сделать вышеописанное?

    Думаю у многих может встать проблема реализации данной задачи или её модификации (например не отключение питания, а другое событие), можно будет готовое решение (при реализации такого, конечно) отдать всем желающим. В виде мануала, в виде кода, в виде может даже библиотеки...

    Заранее благодарен за толковые советы, разьяснения, ссылки на существующие ветки (сам не нашёл) которые помогут.

  2. #2
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    1) правильно ли идёт ход моих мыслей?
    Угу.
    2) как не переполнить файловую систему?
    Писать в компактном бинарном формате. Пусть файл представляет собой простой массив 32-битных значений, например, в секундах с 01.01.1970 (unix time). На чётных позициях будет время включения, на нечётных — время отключения. Одного мегабайта хватит на 131072 сеанса работы. Если включать-отключать контроллер каждые 10 минут, то это почти три года записи. Насколько я понимаю, так часто его дёргать никто не будет, и одного мегабайта хватит на десяток-другой лет работы. Так что о переполнении можно не беспокоиться.
    3) как прочитать данный файл и посмотреть все события? допустим подключившись ноутбуком... скачивать файл на ноут? как?
    Есть консольная утилита plc_io. С её помощью это делается легко. Но ещё надо привести файл в читаемый вид. Если требуется лишь текстовый документ, то напишу переводилку в десять строчек за спасибо.

    Вы не сказали, какой у вас контроллер.

  3. #3

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Писать в компактном бинарном формате. Пусть файл представляет собой простой массив 32-битных значений, например, в секундах с 01.01.1970 (unix time)....

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

    Вы не сказали, какой у вас контроллер.
    Контроллер будет скорее всего ПЛК-150 Овеновский. Основу я понял. Наверное со всем бы сам быстро разобрался но не могу найти описание библиотек SysLibTime SislibFile и хотелось бы на SysLibRtc.... а так в голове кроме сумбурненького алгоритма ничего пока и нет, даже представления о реализации в КДС.

    plc_io наверное тоже пригодится, да и от помощи по переводилке в текстовый документ тоже не откажусь. более не надо.

    спасибо, кстати, за быстрый ответ.

  4. #4
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    алгоритма ничего пока и нет, даже представления о реализации в КДС
    Да какой тут алгоритм... Прога будет на две с половиной строчки. Что-то вроде такого:
    Код:
    VAR
    	logFileHandle: DWORD := 0;
    	logFileSize: DINT;
    	buffer: DWORD;
    END_VAR
    
    IF FALSE THEN (* Однократно при включении или выключении *)
    	logFileSize := SysFileGetSize(logFileName);
    	logFileHandle := SysFileOpen(logFileName, 'w');
    	IF logFileHandle <> 0 THEN
    		(* Время включения пишем только на чётные позиции *)
    		IF NOT ShuttingDown THEN
    			SysFileSetPos(logFileHandle, logFileSize - logFileSize MOD 8);
    		ELSE
    			SysFileSetPos(logFileHandle, logFileSize);
    		END_IF
    		buffer := GetCurrentUnixTime();
    		SysFileWrite(logFileHandle, ADR(buffer), SIZEOF(buffer));
    		SysFileClose(logFileHandle);
    		logFileHandle := 0;
    	END_IF
    END_IF
    Функция GetCurrentUnixTime:
    Код:
    FUNCTION GetCurrentUnixTime : DWORD
    VAR
    	timedate: SystemTimeDate;
    	systime: SysTime64;
    	GetTime: CurTimeEx;
    END_VAR
    
    SysMemSet(ADR(systime), 0, SIZEOF(systime));
    SysMemSet(ADR(timedate), 0, SIZEOF(timedate));
    GetTime(SystemTime := systime, TimeDate := timedate);
    GetCurrentUnixTime :=
    	DATE_TO_DWORD(PackDate(timedate.Year, timedate.Month, timedate.Day)) +
    	TIME_TO_DWORD(PackTime(timedate.Hour, timedate.Minute, timedate.Second, timedate.Milliseconds)) / 1000;
    Используемые библиотеки: SysLibFile, SysLibTime, SysLibMem, TimeExp. Местами псевдокод.

    Проверить это на реальном контроллере пока не смогу — сижу дома на больничном.
    Последний раз редактировалось Yegor; 30.08.2012 в 18:35.

  5. #5

    По умолчанию

    Yegor, есть много вопросов, как у начинающего... Если есть возможность пообщаться по скайпу/аське/мылу и желание помочь чайнику, сообщите плиз в личку свои контакты. Вечером (по Москве это 19.00 - 23.00) я бы вышел на связь. Консультацию прошу не бесплатно, вышлю обсуждаемое количество дензнаков на карточку/банковский счёт. Просто надо очень, и надо очень срочно!

  6. #6
    Пользователь
    Регистрация
    22.03.2012
    Адрес
    Лермонтов
    Сообщений
    360

    По умолчанию

    Кстати, искали тут документацию по библиотекам?

  7. #7

    По умолчанию

    Да. кроме самой документации, мне важно понять суть кодесиса и применения библиотек. Так сказать "идеологию".... Но вроде потихоньку усваиваю...

  8. #8
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,254

    По умолчанию

    Егор и что, такая строчка реально работает?
    IF FALSE THEN (* Однократно при включении или выключении *)

  9. #9
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Егор и что, такая строчка реально работает?
    Местами псевдокод.
    Ну или, скорее, заглушка в данном случае.

  10. #10
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,254

    По умолчанию

    хватит ругаться, я не понимаю что такое псевдокод, точно знаю что в онлайне внутрь этого условия не попасть, если бы была объявлена переменная, я бы мог ей вручную поуправлять.
    А так хотел, взять Ваш пример за основу, чтоб запись осуществить, а теперь побаиваюсь

Страница 1 из 3 123 ПоследняяПоследняя

Похожие темы

  1. SysLibTime
    от Chupakabra в разделе ПЛК1хх
    Ответов: 10
    Последнее сообщение: 11.10.2018, 14:26
  2. Немного про библиотеку SyslibTime
    от Ильнур в разделе ПЛК1хх
    Ответов: 10
    Последнее сообщение: 05.11.2012, 00:19
  3. Возможно ли решить нижеописанную задачу средствами Овен?
    от Вова в разделе Подбор Оборудования
    Ответов: 7
    Последнее сообщение: 23.02.2011, 14:40
  4. Миллисекунды в SysLibTime
    от Leonid в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 14.03.2010, 10:35
  5. Библиотека SysLibTime
    от Serp в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 01.10.2008, 16:14

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •