Обозначение


Описание

Блок обеспечивает хранение переменных на диске контроллера в виде файла.

Имя файла и путь к нему задается на входе fnm, может быть пустым, тогда имя файла будет выбрано автоматически.

Данные организуются в виде переменных ini с жестко заданным типом typi:

DI - 8-ми битный регистр
AI - вещественное значение float
II - 16-ти битный регистр

Поскольку входы ini имеют тип any необходимо строго соблюдать правила преобразования типов при проведении связей.

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

Важно!
Поскольку операции файлового ввода/вывода занимают значительное время, данный блок следует размещать только в Фоне.

Назначение входов и выходов

ВходыТипОписание
rstbсброс ошибок
fnms40имя файла и путь к нему, может быть пустым
wrbзапись на диск
rdbсигнал чтения по фронту 0→1
inianyзначение переменной
typienmтип переменной (DI, AI, II)
iniifltзначение инициализации
ВыходыТипОписание
nexts40следующий файл
enbi16разрешение работы блока (1 - работает, 0 - заблокирован)
stsi160 - после сброса, 1 - записан, 2 - прочитан
goodu16удачных записей
badu16ошибок записей
reju16отклонённых записей
oianyтекущее значение параметра

Инициализация

  1. Если файл существует на диске, выходы инициализируются сохраненными значениями.
  2. Если файла не существует выходы инициализируются значениями инициализации inii.

Алгоритм

  1. Для надежной сохранности данных одновременно на диске находятся два файла, соответствующие одному архиву. Поэтому, если контроллер будет перезагружен в момент записи на диск, данные не пропадут, а будут доступны предыдущие значения переменных, записанные в другом файле.
  2. При первом запуске на диске создается файл, который инициализируется значениями инициализации inii.
  3. Запись в файл осуществляется по фронту 0→1 на входе wr.
  4. Чтение из файла осуществляется при запуске или по фронту 0→1 на входе rd.
  5. В случае однократной ошибки при записи файла на диск, блок пытается переименовать текущий файл и снова произвести запись.
  6. Если повторная запись оказывается удачной, то продолжается работа в обычном режиме, а выход bad инкрементируется. В этом случае необходимо принять меры по диагностике или замене носителя поскольку сбои при записи могут быть следствием скорого выхода его из строя.
  7. Файл, на котором произошел сбой, остается на диске под тем же именем с добавленным к нему суффиксом равным метке времени сбоя (в нс от 1 января 1970 г). Удалять его не желательно, чтобы повторно не использовать потенциально сбойный сектор.
Примечание:
При чтении содержимое файла контролируется с помощью контрольной суммы, и только при ее корректности выдается на выходы (поэтому в случае, например, добавления новой переменной, значения записанные в файл сбросятся на инициализирующие inii).

Важно!
Если происходит повторный сбой записи, то блок блокируется (выход enb = 0) и больше не производит попыток переименований файлов и записи до тех пор, пока ошибки не будут сброшены фронтом на входе rst.

Ссылки