Для редактирования и отладки программ, организованных в виде таблиц, была написана специальная программа[3]. Чтобы не зависеть от конкретной операционной системы, эта программа была написана на языке JavaScript и может запускаться офлайн в любом современном браузере. По сути, это HTML-файл размером немногим более 100 килобайт. Безусловно, возможны и другие реализации, так как формат файла таблицы полностью открыт, а алгоритм пересчета таблицы несложен. Редактирование таблицы в окне браузера не вызывает каких-либо трудностей, все функции интуитивно понятны человеку, работавшему в любой электронной таблице. От обычных приложений в такой реализации отличается только метод сохранения файла. Из окна браузера файл можно только выгрузить в папку «Загрузки» или другую папку, для этого назначенную. Поэтому при сохранении изменений файл не перезаписывается, а сохраняется как дополнительная копия. Так как файлы таблиц небольшого размера, то хранение нескольких последовательно сохраненных файлов дает возможность контролировать ход редактирования и при необходимости возвращаться на необходимое число шагов назад. Недостаток такого метода сохранения файла в том, что периодически необходимо удалять ненужные копии.
Рассмотрим структуру файла таблицы. Каждая строка файла разделена на поля символом табуляции. Как и у любого текстового файла Windows, строка оканчивается возвратом каретки (\r) и переводом строки (\n). Первая строка текстового файла табличной программы представлена на рис. 26 — это заголовок всей таблицы.
Первое поле содержит выражение «строк — столбцов — активных ячеек — >» и введено для того, чтобы проверить, соответствует ли содержимое файла табличной программе. Если текстовый файл начинается с другой фразы, то это не табличная программа. Далее идут поля с набором чисел 42, 5, 33 — это количество строк, столбцов и активных ячеек таблицы. Следующее поле — это имя файла длиной до 32 символов. В нашем случае имя файла — «проба_01.txt». Первое число после имени файла отвечает за адреса битовых переменных. Второе число отвечает за адреса аналоговых переменных. В данном случае битовые переменные имеют адреса с 1 по 99. Для аналоговых переменных выделены адреса со 100 по 140. При этом не учитывается, какие из переменных входные, а какие выходные или внутренние. Нумерация входов и выходов контроллера, а также распределение переменных по адресам будут зависеть от реализации самого контроллера. Одним из решений может быть назначение адресов входных и выходных переменных равными соответствующим номерам контактов на разъеме контроллера. Тогда табличной программой можно воспользоваться как списком сигналов, подключенных к разъемам контроллера.
На рис. 27 представлена вторая строка рассматриваемого текстового файла. Это заголовок раздела с информацией о содержимом входных строк табличной программы. Заголовок не только помогает понять, что и в каком поле находится, но и является атрибутом начала считывания содержимого таблицы. Еще по нему можно определить, что идет чтение файла табличной программы, а не другого текстового файла. В нашем примере следующие 42 строки текстового файла будут содержать данные о 42 входных строках таблицы.
Рассмотрим назначение полей строки. Первое поле с названием «Комментарий строки» содержит комментарий к данной строке. Это может быть имя переменной, описание назначения входа или что-то другое. В пересчете таблицы поле комментария не участвует. Второе поле, «Адрес входной», — это, собственно, адрес переменной, по которому к этой переменной обращаются. Несмотря на то что тип переменной можно определить, используя данные об адресах переменных в первой строке файла, следующее поле, «Тип входной», определяет, является ли переменная битовой или аналоговой или же это указатель. Поле «Начальное значение» соответствует своему названию и содержит значение, которое подставляется в ячейку при первом пересчете таблицы. Если значение в поле «Тип входной» будет определяться как указатель, то поле «Начальное значение», будет содержать номер одной из строк, результат которой используется в данной строке. Следующие два поля, «Код операции» и «Тип результата», определяют операцию над входными переменными и тип получаемого результата.
Так как в текстовый файл таблицы легко могут быть внесены изменения, то для контроля соответствия между типом входных данных, типом результата и применяемой операцией введены поля, которые могут показаться избыточными. Дополнительные поля типов помогают быстро найти ошибки в случае некорректных изменений в текстовом файле таблицы.