Полученные результаты можно использовать для создания фактической циклограммы работы механизмов, формирования аварийных сигналов.
Вот кусок программы (Микровин 4, СТЛ)
Код: Выделить всё
SUBROUTINE_BLOCK M1_G1:SBR2
TITLE=Модуль 1. Головка 1
BEGIN
Network 1 // Таймер контроля времени нахождения в состоянии
// Таймер работает всегда. Сбрасывается в момент перехода в другое состояние. Насчитанное время сохраняется в ячейки памяти, соответсвтвующей текущему состоянию.
// Вычисление адреса ячейки производится так:
// - Берем указатель на область памяти aM1_G1_0 ( М1. Г1. Время нахождения в стостоянии 0 - начало диапазона)
// - Преобразуем номер текущего состояния aM1_G1 в двойное целое и умножаем на 2 байта - получаем смещение
// - Вычисляем указатель на область памяти для хранения времени нахождения в текущем состоянии (к указателю на начало диапазона добавляем смещение)
// - Записываем текущее время по вычисленному адресу.
LD SM0.0
LPS
TON T105, 32000
MOVD &VW200, AC1
ITD VW50, AC0
AENO
*D 2, AC0
LRD
+D AC0, AC1
LPP
MOVW T105, *AC1
Network 2 // Сброс действий
// Сбрасываются все переменные данного автомата, которым присваивается 1 в сосостояниях
LD SM0.0
R V10.0, 80
R V30.1, 6
Network 3 // Инициализация состояния М1. Г1
LD SM0.1
O I3.6
O I4.0
O V30.3
O V30.6
MOVW VW50, VW52
AENO
MOVW 0, VW50
AENO
R T105, 1
Network 4 // Модуль 1. Головка 1. Отключена
LDN I4.2
MOVW VW50, VW52
AENO
MOVW 1, VW50
AENO
R T105, 1
Network 5 // Переход к состоянию
LD SM0.0
LPS
AW= VW50, 0
JMP 0
LRD
AW= VW50, 1
JMP 1
LRD
AW= VW50, 2
JMP 2
LRD
AW= VW50, 3
JMP 3
LRD
AW= VW50, 4
JMP 4
LRD
AW= VW50, 5
JMP 5
LRD
AW= VW50, 6
JMP 6
LRD
AW= VW50, 7
JMP 7
LRD
AW= VW50, 8
JMP 8
LRD
AW= VW50, 9
JMP 9
LRD
AW= VW50, 10
JMP 10
LRD
AW= VW50, 11
JMP 11
LRD
AW= VW50, 12
JMP 12
LRD
AW= VW50, 13
JMP 13
LRD
AW= VW50, 14
JMP 14
LRD
AW= VW50, 15
JMP 15
LRD
AW= VW50, 16
JMP 16
LRD
AW= VW50, 17
JMP 17
LRD
AW= VW50, 18
JMP 18
LRD
AW= VW50, 19
JMP 19
LPP
AW= VW50, 20
JMP 20
Network 6 // aM1_G1=0 Общий стоп
LBL 0
Network 7 // Действие 0
// Выполняем действия, соответствующие текущему состоянию, с учетом блокировок
LD SM0.0
= V30.4
R V30.0, 1
R T104, 1
Network 8 // Переход 0 - 3
// Если есть условие перехода в другое состоние, то:
// - сохраняем номер текущего состояния в память предыдущего
// - текущему состоянию присваиваем новый номер
// - сбрасываем таймер контроля времени нахождения в состоянии
// - выходим из подпрограммы
LD V20.0
LPS
MOVW VW50, VW52
AENO
MOVW 3, VW50
AENO
R T105, 1
LPP
CRET
Network 9 // Переход 0 - 2
// Если есть условие перехода в другое состоние, то:
// - сохраняем номер текущего состояния в память предыдущего
// - текущему состоянию присваиваем новый номер
// - сбрасываем таймер контроля времени нахождения в состоянии
// - выходим из подпрограммы
LDN V20.0
MOVW VW50, VW52
AENO
MOVW 2, VW50
AENO
R T105, 1
Network 10 // Выход
LD SM0.0
CRET
Network 11 // aM1_G1=1 Головка отключена
LBL 1
Network 12 // Действие 1
LD SM0.0
= V30.5
R V30.0, 1
Network 13 // Переход 1 - 0
LD I4.2
MOVW VW50, VW52
AENO
MOVW 0, VW50
AENO
R T105, 1
Network 14 // Выход
LD SM0.0
CRET
Network 15 // aM1_G1=2 Нет исходного
LBL 2
Network 16 // Действие 2
// Выполняем действия, соответствующие текущему состоянию, с учетом блокировок
Network 17 // Переход 2 - 0
// Если есть условие перехода в другое состоние, то:
// - сохраняем номер текущего состояния в память предыдущего
// - текущему состоянию присваиваем новый номер
// - сбрасываем таймер контроля времени нахождения в состоянии
// - выходим из подпрограммы
LD V20.0
MOVW VW50, VW52
AENO
MOVW 0, VW50
AENO
R T105, 1
Network 18 // Выход
LD SM0.0
CRET