Обозначение

Описание
Блок обеспечивает хранение переменных на диске контроллера в виде файла.
Имя файла и путь к нему задается на входе fnm, может быть пустым, тогда имя файла будет выбрано автоматически.
Данные организуются в виде переменных ini с жестко заданным типом typi:
DI - 8-ми битный регистр
AI - вещественное значение float
II - 16-ти битный регистр
Поскольку входы ini имеют тип any необходимо строго соблюдать правила преобразования типов при проведении связей.
Количество переменных можно менять после создания блока.
Имя файла и путь к нему задается на входе fnm, может быть пустым, тогда имя файла будет выбрано автоматически.
Данные организуются в виде переменных ini с жестко заданным типом typi:
DI - 8-ми битный регистр
AI - вещественное значение float
II - 16-ти битный регистр
Поскольку входы ini имеют тип any необходимо строго соблюдать правила преобразования типов при проведении связей.
Количество переменных можно менять после создания блока.
Важно!
Поскольку операции файлового ввода/вывода занимают значительное время, данный блок следует размещать только в Фоне.
Поскольку операции файлового ввода/вывода занимают значительное время, данный блок следует размещать только в Фоне.
Назначение входов и выходов
| Входы | Тип | Описание |
| rst | b | сброс ошибок |
| fnm | s40 | имя файла и путь к нему, может быть пустым |
| wr | b | запись на диск |
| rd | b | сигнал чтения по фронту 0→1 |
| ini | any | значение переменной |
| typi | enm | тип переменной (DI, AI, II) |
| inii | flt | значение инициализации |
| Выходы | Тип | Описание |
| next | s40 | следующий файл |
| enb | i16 | разрешение работы блока (1 - работает, 0 - заблокирован) |
| sts | i16 | 0 - после сброса, 1 - записан, 2 - прочитан |
| good | u16 | удачных записей |
| bad | u16 | ошибок записей |
| rej | u16 | отклонённых записей |
| oi | any | текущее значение параметра |
Инициализация
- Если файл существует на диске, выходы инициализируются сохраненными значениями.
- Если файла не существует выходы инициализируются значениями инициализации inii.
Алгоритм
- Для надежной сохранности данных одновременно на диске находятся два файла, соответствующие одному архиву. Поэтому, если контроллер будет перезагружен в момент записи на диск, данные не пропадут, а будут доступны предыдущие значения переменных, записанные в другом файле.
- При первом запуске на диске создается файл, который инициализируется значениями инициализации inii.
- Запись в файл осуществляется по фронту 0→1 на входе wr.
- Чтение из файла осуществляется при запуске или по фронту 0→1 на входе rd.
- В случае однократной ошибки при записи файла на диск, блок пытается переименовать текущий файл и снова произвести запись.
- Если повторная запись оказывается удачной, то продолжается работа в обычном режиме, а выход bad инкрементируется. В этом случае необходимо принять меры по диагностике или замене носителя поскольку сбои при записи могут быть следствием скорого выхода его из строя.
- Файл, на котором произошел сбой, остается на диске под тем же именем с добавленным к нему суффиксом равным метке времени сбоя (в нс от 1 января 1970 г). Удалять его не желательно, чтобы повторно не использовать потенциально сбойный сектор.
Примечание:
При чтении содержимое файла контролируется с помощью контрольной суммы, и только при ее корректности выдается на выходы (поэтому в случае, например, добавления новой переменной, значения записанные в файл сбросятся на инициализирующие inii).
При чтении содержимое файла контролируется с помощью контрольной суммы, и только при ее корректности выдается на выходы (поэтому в случае, например, добавления новой переменной, значения записанные в файл сбросятся на инициализирующие inii).
Важно!
Если происходит повторный сбой записи, то блок блокируется (выход enb = 0) и больше не производит попыток переименований файлов и записи до тех пор, пока ошибки не будут сброшены фронтом на входе rst.
Если происходит повторный сбой записи, то блок блокируется (выход enb = 0) и больше не производит попыток переименований файлов и записи до тех пор, пока ошибки не будут сброшены фронтом на входе rst.