Для больших программ или программ, имеющих довольно большие повторяющиеся блоки, можно организовать многостраничную структуру, состоящую из нескольких таблиц на отдельных страницах, причем пересчет таблиц нужно производить параллельно. Так как параллельная обработка страниц выполняется циклически, то она не приведет к появлению ошибок, связанных с синхронизацией. Выходные данные от одной страницы по мере готовности могут участвовать в расчетах на другой странице. Если какие-либо данные с параллельной страницы не были готовы в этом цикле пересчета таблицы, то они могут быть готовы в одном из следующих. Программы на отдельных страницах можно рассматривать как программы, работающие в отдельных контроллерах. Так как подобные виртуальные контроллеры используют одну память, то практически нет ограничения скорости передачи данных между ними. Но чтобы не потерять прозрачность общего алгоритма, при многостраничной организации программы следует минимизировать связи между страницами.
1.2. Основы табличного программирования
Для начала рассмотрим таблицу, показанную на рис. 1. В левый столбец таблицы вводятся логические состояния входов контроллера, а в ячейках верхнего заголовка рассчитываются выходные значения. Состояние каждого выхода будем определять как логическое И по столбцу под ним.
Рис. 1. Пример таблицы
Чтобы таблица стала программой, внесем в нее некоторые изменения. Ячейки в теле таблицы, участвующие в расчете выходных значений, будем называть активными ячейками. Для обозначения активной ячейки используется символ «&», который в электронике и программировании обычно является символом битовой операции «логическое И». Чтобы увеличить наглядность таблицы, активные ячейки, состояние которых равно нолю, выделим синим цветом, а ячейки, состояние которых равно единице, – зеленым цветом. Таким же образом обозначим результат логического И по столбцу. Простая табличная программа представлена на рис. 2.
Рис. 2. Пример простой табличной программы
Пересчет таблицы выполняется следующим образом. Сначала идет обработка строк сверху вниз. Значение в каждой строке определяется входной переменной. В данном случае оно соответствует логическому уровню на соответствующем входе контроллера. При наличии в строке активных ячеек всем таким ячейкам строки присваивается полученное значение. По окончании перебора строк вычисляются значения выходных переменных – как логическое И по ячейкам столбца под каждой выходной переменой. В этом виде данные в таблице сложно назвать программой, однако под определение программы по ГОСТ 19.781-90