5. Практическая часть
5.1. Особенности разработки
программ для ОЭВМ
Для проектирования на языке АССЕМБЛЕР
программного обеспечения для устройства,
основанного на однокристальной ЭВМ, необ-
ходимо знать архитектуру и систему команд
данной ОЭВМ.
Микроконтроллер AT89C52 имеет множество
регистров, расположенных в адресном прост-
ранстве ОЗУ регистров спецфункций и 111
машинных команд [1] форматом 1,2 или 3 ба-
йта с различными аргументами и способами
адресации, предназначенных для разнообраз-
ной обработки данных в этих регистрах,дру-
гих областях памяти (внутреннее ОЗУ дан-
ных, ПЗУ,внешнее ОЗУ),а также в двунаправ-
ленных внешних портах.
ОЭВМ имеет:
■ 8 килобайт внутреннего ПЗУ;
■ 32 регистра общего назначения (РОН),
разбитых на 4 блока по 8 регистро R0-R7;
■ 128 определяемых пользователем прог-
раммно-управляемых флагов;
■ набор регистров специальных функций
(SFR, Special Function Registers);
■ 256 байт внутреннего ОЗУ данных, пере-
секающегося нижними 128 байтами с памятью
регистров спецфункций. ОЗУ данных доступно
только с помощью косвенной регистровой ад-
ресации по регистрам R0,R1.
В ОМЭВМ предусмотрена возможность зада-
ния частоты внутреннего генератора с помо-
щью кварца,LC-цепочки или внешнего генера-
тора. Тактовая частота не должна превышать
24 МГц.
Регистры спецфункций с указанием адре-
сов приведены в таблице 5.1.1 (регистры,
допускающие побитовую адресацию, помечены
звёздочкой):
Таблица 5.1.1
┌───────────┬─────────────────────┬──────┐
│Обозначение│ Наименование │ Адрес│
├───────────┼─────────────────────┼──────┤
│ *ACC │ Аккумулятор │ 0E0h │
├───────────┼─────────────────────┼──────┤
│ *B │ Регистр B │ 0F0h │
├───────────┼─────────────────────┼──────┤
│ *PSW │ Регистр состояния │ │
│ │ программы │ 0D0h │
├───────────┼─────────────────────┼──────┤
│ SP │ Указатель стека │ 81h │
├───────────┼─────────────────────┼──────┤
│ DPTR │ Указатель данных. │ │
│ │ 2 байта: │ │
│ - DPL │ - младший байт │ 82h │
│ - DPH │ - старший байт │ 83h │
├───────────┼─────────────────────┼──────┤
│ *P0 │ Порт 0 │ 80h │
├───────────┼─────────────────────┼──────┤
│ *P1 │ Порт 1 │ 90h │
├───────────┼─────────────────────┼──────┤
│ *P2 │ Порт 2 │ 0A0h │
├───────────┼─────────────────────┼──────┤
│ *P3 │ Порт 3 │ 0B0h │
├───────────┼─────────────────────┼──────┤
│ *IP │ Регистр приоритетов │ │
│ │ прерываний │ 0B8h │
├───────────┼─────────────────────┼──────┤
│ *IE │ Регистр разрешения │ │
│ │ прерываний │ 0A8h │
├───────────┼─────────────────────┼──────┤
│ TMOD │ Регистр режимов │ │
│ │ таймера/счётчика │ 89h │
├───────────┼─────────────────────┼──────┤
│ *TCON │ Регистр управления │ │
│ │ таймера/счётчика │ 88h │
├───────────┼─────────────────────┼──────┤
│ TH0 │ Таймер/счётчик 0. │ │
│ │ Старший байт │ 8Ch │
├───────────┼─────────────────────┼──────┤
│ TL0 │ Таймер/счётчик 0. │ │
│ │ Младший байт │ 8Ah │
├───────────┼─────────────────────┼──────┤
│ TH1 │ Таймер/счётчик 1. │ │
│ │ Старший байт │ 8Dh │
├───────────┼─────────────────────┼──────┤
│ TL1 │ Таймер/счётчик 1. │ │
│ │ Младший байт │ 8Bh │
├───────────┼─────────────────────┼──────┤
│ *SCON │ Управление после- │ │
│ │ довательным портом │ 98h │
├───────────┼─────────────────────┼──────┤
│ SBUF │ Буфер последовате- │ │
│ │ льного порта │ 99h │
├───────────┼─────────────────────┼──────┤
│ PCON │ Управление │ │
│ │ потреблением │ 87h │
└───────────┴─────────────────────┴──────┘
Аккумулятор. ACC - регистр аккумулято-
ра. Команды, предназначенные для работы с
аккумулятором, используют мнемонику "A",
например, MOV A, P2. Мнемоника "ACC" испо-
льзуется,к примеру,при побитовой адресации
аккумулятора. Так,символическое имя пятого
бита аккумулятора будет следующим: ACC.5.
Регистр B. Используется во время опера-
ций умножения и деления.Для других инстру-
кций регистр B может рассматриваться как
дополнительный сверхоперативный регистр.
Регистр состояния программы. Регистр
PSW содержит флаги состояния программы.
Указатель стека SP. 8-битовый регистр,
содержимое которого инкрементируется перед
записью данных в стек при выполнении ко-
манд PUSH и CALL. При начальном сбросе
указатель стека устанавливается в 07h, а
область стека в ОЗУ данных начинается с
адреса 08h. При необходимости путём пере-
определения указателя стека область стека
может быть расположена в любом месте внут-
реннего ОЗУ микроЭВМ.
Указатель данных. Указатель данных
(DPTR) состоит из старшего байта (DPH) и
младшего байта (DPL). Содержит 16-битовый
адрес при обращении к внешней памяти.Может
использоваться как 16-битовый регистр или
как два независимых восьмибитовых регист-
ра.
Порт0-Порт3. Регистрами специальных фу-
нкций P0, P1, P2, P3 являются регистры-
<защёлки> соответствующих портов.
Буфер последовательного порта. SBUF
представляет собой два отдельных регистра:
буфер передатчика и буфер приёмника. Когда
данные записываются в SBUF, они поступают
в буфер передатчика, причём запись байта в
SBUF автоматически инициирует его передачу
через последовательный порт. Когда данные
читаются из SBUF, они выбираются из буфера
приёмника.
Регистры таймера. Регистровые пары
(TH0,TL0) и (TH1,TL1) образуют 16-битовые
счётные регистры соответственно таймера-
счётчика 0 и таймера-счётчика 1.
Регистры управления. Регистры специаль-
ных функций IP, IE, TMOD, TCON,SCON и PCON
содержат биты управления и биты состояния
системы прерываний, таймеров/счётчиков и
последовательного порта.
──────────────────────────────────────────
5.2. Разработка и описание программы
5.2.1. Реализация упаковщика по методу
битового RLE с сегментацией
Самой критичной по времени исполнения
частью программы является упаковщик по ме-
тоду битового RLE с одновременной выдачей
сжатых данных в последовательный порт. По-
скольку этот участок является для програм-
мы решающим,разработку кода программы луч-
ше всего начать с него. В разделе 4.1 было
оценено время в машинных циклах AT89C52
между двумя передаваемыми байтами. Это по-
зволяет выбрать строение внутреннего цикла
программы,ориентируясь на время выполнения
одного прохода цикла подсчёта количества
подряд идущих одинаковых бит. Это время не
может превышать:
1000/128 ў 8 (МЦ),
а на практике - ещё меньше,чтобы предусмо-
треть время на остальную часть программы,
помимо цикла.
Для подсчёта количества одинаковых бит
нам обязательно потребуется чтение внешне-
го ОЗУ командой movx a,@dptr или аналогич-
ной командой movx a,@Ri, использующей ре-
гистр R0 или R1. В данном случае это не
составляет разницы,поскольку и та,и другая
команда выполняются за 2 МЦ. При переходе
к каждому следующему байту адрес необходи-
мо инкрементировать с учётом зацикливания
внутри четверти ОЗУ. Разумеется,неприменим
фрагмент, делающий это напрямую:
...
mov a,dph
inc dptr
xrl a,dph
anl a,#30h
xrl a,dph
mov dph,a
...
поскольку один только этот фрагмент выпол-
няется за 1+1+1+1+1+1=6 МЦ.
Поэтому целесообразным представляется
вычислить до входа в цикл количество про-
ходов цикла таким образом, чтобы инкремен-
тирование старшего байта адреса происходи-
ло после выхода из цикла, а в самом цикле
осталось только inc dpl (1 МЦ).
Далее нам требуется организовать про-
верку бита в считанном байте и выход
из цикла при нужном значении этого би-
та. Такую задачу можно решить командой
jb acc.N,label (или jnb), где N - номер
проверяемого бита. Но в этом случае требу-
ется иметь в программе 16 (8 битов · 2 по-
лярности) похожих участков, что не очень
удобно. Тем более что с учётом команды за-
цикливания djnz counter,loop (2 МЦ) весь
цикл будет отнимать 2+1+2+2=7 МЦ, что поч-
ти на пределе выделенного времени.
Таким образом, имеет смысл "раскрыть
цикл", то есть сгруппировать действия,осу-
ществлявшиеся в несколько проходов цикла,
в один проход. В нашем случае достаточно 4
проходов внутри одного (приведён фрагмент
для подсчёта нулевых битов):
bp01: movx a,@dptr ;2 МЦ
orl orer,a ;1 МЦ: накапливаем
;единицы в orer
inc dpl ;1 МЦ
bp02: movx a,@dptr
orl orer,a
inc dpl
bp03: movx a,@dptr
orl orer,a
inc dpl
bp04: movx a,@dptr
orl orer,a
mov a,orer ;1 МЦ
anl a,masker ;1 МЦ
jnz bp0_e ;2 МЦ: среди 4 прочи-
;танных байт попалась
;единица в бите по
;маске masker
mov orer,#0 ;1 МЦ
inc dpl
djnz b,bp01 ;2 МЦ
...
Метки bp01, bp02, bp03 и bp04 - четыре
входа в цикл, причём выбор одного из них
зависит от того, где относительно сегмента
(128 байт) и параграфа памяти (256 байт)
расположен dptr: инкремент dph или обрабо-
тка конца сегмента должны происходить пос-
ле выхода из цикла.
В таком случае, после выхода из цикла
(после djnz) необходимо проверить:
■ не нужно ли увеличить dph? (dpl=0?);
■ не кончился ли сегмент памяти?
((dpl-segbeg)mod 256=128?)
На выходе из цикла по jnz необходимо,
кроме того, найти байт, где после нулевых
битов впервые появилась единица.Пусть в R0
до входа в цикл помещается содержимое dpl.
Очевидно, искать единицу до этого адреса
не нужно:
...
bp0_e: mov a,R0 ;в R0 - положение
;dptr до цикла
cjne a,dpl,bp0_en0 ;<<
jmp bp0rese ;уменьшаем dpl
bp0_en0: ;на 3, но не
dec dpl ;меньше,чем до
cjne a,dpl,bp0_en1 ;совпадения
jmp bp0rese ;с R0
bp0_en1: ;
dec dpl ;
cjne a,dpl,bp0_en2 ;
jmp bp0rese ;
bp0_en2: ;
dec dpl ;>>
bp0rese:movx a,@dptr ;ищем первую единицу
;среди 4(или меньше)
;смежных байтов
inc dpl
anl a,masker ;проверяем бит
;по маске сигнала
jz bp0rese ;продолжаем поиск,
;если ноль
dec dpl ;переполнения dpl
;быть не может, т.к.
... ;мы вышли из inner
;loop по единичному
;биту.
Перед входом в цикл необходимо вычис-
лить число проходов и выбрать правильную
точку входа.Всего возможно несколько вари-
антов относительного расположения dptr и
адреса начала сегмента ( N = количество
элементарных проходов цикла):
a) segbeg<128: раньше появится конец сег-
мента.
N=(segbeg+128-dpl) mod 256;
b) segbeg=128: конец сегмента и одновре-
менно dpl=0.
N=(segbeg+128-dpl) mod 256=256-dpl;
c) segbeg>128 и dpl>128: раньше произойдёт
dpl=0.
N=256-dpl;
d) segbeg>128 и dpl<128: раньше появится
конец сегмента.
N=(segbeg+128-dpl) mod 256.
Начальное значение счётчика цикла
(count) зависит от N следующим образом:
┌─────┬───┬───┬───┬───┬───┬───┬──┬───┬───┐
│ N │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │..│127│128│
├─────┼───┼───┼───┼───┼───┼───┼──┼───┼───┤
│count│ 1 │ 1 │ 1 │ 1 │ 2 │ 2 │..│ 32│ 32│
└─────┴───┴───┴───┴───┴───┴───┴──┴───┴───┘
Поэтому count определяется выражением:
count=(N+3) div 4,
что на ассемблере AT89C52 проще всего реа-
лизовать последовательностью команд (если
значение N поместить в аккумулятор):
...
dec a
rr a ;циклический сдвиг вправо
rr a ;на 2 разряда
inc a
mov b,a ;количество проходов цикла
jbc b.7,bp0i_x1 ;выбираем один из
;четырех входов в цикл
jbc b.6,bp03 ;01 сразу сбрасываем
;проверяемые биты 6,7
jmp bp04 ;00
bp0i_x1:jbc b.6,bp01 ;11
jmp bp02 ;10
Остальная часть процедуры упаковки ме-
нее сложна.Внимания заслуживает только не-
большой рагмент, где короткий (не более
чем на 128 байт) условный переход из-за
большого размера цикла приходится продол-
жить длинным безусловным:
...
cjne a,dpl,bp_inseg_jmp
;уменьшаем количество оставшихся сегментов
djnz R7,bp_main_jmp ;продолжаем,
;если не ноль
call waitsend ;вызов п/п ожидания
;передачи байта
jmp SENDSUM ;выдача контрольной
;суммы
;;;;;;;; ВЫХОД из п/п ЧИТАТЬ КАНАЛ ;;;;;;;
bp_inseg_jmp:
jmp bp_inseg ;компенсация коротк.
;перехода cjne
;с пом.длинного перех.
bp_main_jmp:
jmp bp_main ;компенсация короткого
;перехода djnz
──────────────────────────────────────────
5.2.2. Реализация
главного цикла программы
После сброса или включения устройства,
вслед за инициализацией и проведением са-
моконтроля, программа управления СЛА пере-
ходит к главному циклу. Главный цикл прог-
раммы занимается получением и обработкой
кадров сообщений.
Приём кадра оказалось удобно реализо-
вать через подпрограмму,возвращающую после
удачного или неудачного приёма кадра в ак-
кумуляторе код завершения, в регистре B -
КОП, а в блоке памяти по адресу FramBuf -
принятую полезную часть данных кадра (то
есть без байтов КОП, длины и контрольной
суммы).
Соответствие возвращаемого значения ак-
кумулятора виду ошибки принято следующим:
┌─────┬──────────────────────────┐
│ ACC │ Вид ошибки │
├─────┼──────────────────────────┤
│ 0 │ нет ошибки │
│ 1 │ ошибка приема КОП │
│ 2 │ неверная длина кадра │
│ 3 │ ошибка контрольной суммы │
└─────┴──────────────────────────┘
Подпрограмма приёма кадра имеет выход в
случае обрыва связи во время приёма кадра.
Обрыв связи распознаётся как чрезмерно бо-
льшая пауза после приёма байта и при ожи-
дании следующего. Максимальная пауза между
байтами пауза задана в программе констан-
той:
GetWait equ 4000 ;максимальная пауза между
;принимаемыми байтами (x5 МЦ)
Главный цикл возможно реализовать так:
;-------- ГЛАВНЫЙ ЦИКЛ (MainLoop) --------
MainLoop:
call GETFRAME ;приём кадра из
;последовательного
;порта в буфер
cjne a,#0,ML_er1 ;Переход, если
;ошибка приема (A<>0)
mov a,b ;КОП
anl a,#7fh ;сброс старшего
;бита КОП
cjne a,#08h,ML_2 ;Проверка КОПа на
;существование
ML_2: jc ML_noer ;Переход,если нет
;ошибки команды
;(A<08h, C=1)
ML_coer:call _ECOM ;Вызов подпрог-
;раммы ОШИБКА КОМАНДЫ
jmp MainLoop ;Переход на
;начало цикла
ML_noer:mov dpl,#Low(CallTab) ;<<Заносим в
;dptr адрес
;таблицы под-
mov dph,#High(CallTab) ;программ>>
add a,acc ;Сдвиг аккумуля-
;тора влево
jmp @a+dptr ;Переход на таблицу
;вызовов подпрограмм
ML_er1:
djnz acc,ML_er2 ;переход, если не
;ошибка приёма КОП
;1=ошибка приема КОП
jmp MainLoop
ML_er2:
djnz acc,ML_er3 ;переход, если не
;ошибка данных
;2=неверная длина кадра
;или поле данных при КОП.7=0
call _EIO ;вызов подпрограммы
;ОШИБКА ПЕРЕДАЧИ ДАННЫХ
jmp MainLoop
ML_er3:
;3=ошибка контрольной суммы
call _EIO ;вызов подпрограммы
;ОШИБКА ПЕРЕДАЧИ ДАННЫХ
jmp MainLoop
;---- Конец главного цикла (MainLoop) ----
Здесь видно, что переход на обработчик
команды или запроса реализован через таб-
лицу подпрограмм. Такое средство,предоста-
вляемое системой команд ОЭВМ, очень удобно
в этом случае, поскольку число обрабатыва-
емых КОП легко может быть увеличено, и при
этом программа не станет громоздкой и не
будет работать медленнее.
Главная часть механизма перехода по та-
блице - команда jmp @a+dptr, которая осу-
ществляет переход по вычисляемому адресу
dptr+ACC. В нашем случае dptr указывает на
первый адрес таблицы,а ACC содержит смеще-
ние (кратное 2 ).Таблица состоит из неско-
льких коротких переходов (ajmp), каждый из
которых указывает на свою программу-обра-
ботчик. В конце обработчиков стоит команда
jmp MainLoop для возврата в начало главно-
го цикла.
──────────────────────────────────────────
5.2.3. Состав текстов
программных модулей ПО СЛА
Главным модулем является SLA.asm. Он
содержит:
■ объявления глобальных констант;
■ директивы распределения памяти;
■ код программы инициализации;
■ главный цикл и таблицу переходов;
■ общую подпрограмму коррекции dptr пос-
ле перехода границы параграфа памяти;
■ директивы компиляции остальных модулей
программы.
Модуль io.asm, реализующий базовые опе-
рации ввода-вывода в последовательный
порт, содержит следующие необходимые для
этого подпрограммы:
■ SENDSUM - процедура выдачи в порт кон-
трольной суммы -csum. Здесь и далее вход-
ные данные - в аккумуляторе;
■ SEND - процедура выдачи байта в буфер
последовательного порта без ожидания его
передачи, с накоплением контрольной суммы;
■ movsbuf - процедура выдачи байта в бу-
фер последовательного порта без ожидания
его передачи, без накопления контрольной
суммы;
■ SENDKOP - процедура выдачи в последо-
вательный порт КОП и его дополнения до ну-
ля;
■ SENDACC - процедура выдачи содержимого
аккумулятора в последовательный порт с
ожиданием передачи и накоплением контроль-
ной суммы;
■ waitsend - процедура ожидания передачи
байта из буфера последовательного порта;
■ GETFRAME - процедура приёма кадра по
последовательному порту;
■ GETBYTE - процедура приёма байта из
последовательного порта.
Модуль messages.asm содержит подпрог-
раммы выдачи простых ответных сообщений:
■ _COMOK - подпрограмма выдачи ОС <Кома-
нда выполнена>;
■ _ECOM - подпрограмма обработки ошибки
команды. Выдача ОС <Ошибка команды>;
■ _EDATA - подпрограмма обработки ошибки
данных. Выдача ОС <Некорректные данные>;
■ _EIO - подпрограмма выдачи ОС <Ошибка
передачи данных>;
■ _RESOK - подпрограмма выдачи ОС <Исхо-
дное состояние>.
Модуль control.asm содержит процедуры
контроля ОЗУ и ПЗУ:
■ SIGNS - контроль ПЗУ (8k) сигнатурным
анализом;
■ EXRAM - контроль внешнего ОЗУ (16k) с
очисткой.
Модуль _rchan.asm содержит процедуры
обработки запроса <Читать канал>:
■ _RCHN - общая подпрограмма анализа и
выдачи данных канала наиболее эффективным
методом кодирования;
■ rch_const - процедура выдачи данных
постоянного (не изменяющегося) канала;
■ rch_noise - процедура выдачи данных
сильно изменяющегося (шумового) канала;
■ bitpack - процедура выдачи данных не-
постоянного канала.На основании статистики
канала производится выбор метода кодирова-
ния: без сжатия или со сжатием по битовому
методу RLE;
■ FRONTS - процедура подсчёта статистик
(числа фронтов) сигналов в данной области
ОЗУ.
Остальные модули содержат по одной важ-
ной процедуре.Входные данные для этих про-
цедур должны находиться в буфере принятого
кадра.
Модуль _rstate.asm содержит подпрограм-
му _RSTATE, служащую для обработки запроса
<Читать состояние СЛА>. Модуль _rram.asm
содержит подпрограмму _RRAM, служащую для
обработки запроса <Читать ОЗУ>. Модуль
_selfc.asm содержит подпрограмму _SELFC
обработки команды <Запустить самоконтроль
ЛА>.
Перечисленные программы составляют весь
список необходимых модулей,входящих в про-
граммное обеспечение специализированного
логического анализатора.
──────────────────────────────────────────
5.3. Автономная отладка программы
на модели
Для отладки программы управления СЛА
был использован монитор-отладчик Debugger-
51. С помощью этого средства можно выпол-
нять c программой такие действия, как:
■ выполнение до указанного оператора
(строки кода);
■ пошаговое выполнение программы;
■ выполнение до точки останова;
■ включение и выключение точек останова;
■ просмотр и изменение значений регист-
ров и ячеек памяти;
■ загрузка и сохранение содержимого всех
видов памяти ОЭВМ на магнитный носитель.
Использование отладчика позволило зна-
чительно сократить срок написания главных
алгоритмов программы за счёт автоматизации
поиска и исправления ошибок.
Отсутствие возможности отладки алгорит-
мов передачи данных измерения на существу-
ющем СЛА компенсировано за счёт создания
его модели,что позволило провести проекти-
рование программы на одной ПЭВМ. Для этого
были произведены следующие действия:
■ в базовые функции ввода-вывода (модуль
io.asm) внесены изменения. Вместо выдачи
данных в последовательный порт, процедуры
заносят байты данных во внешнее ОЗУ, за
пределами используемой области в 16k.
■ в главном модуле программы отключаются
вызовы процедур самоконтроля и приёма кад-
ра. Вместо приёма кадра при трассировке с
помощью отладчика в регистры и ОЗУ ОЭВМ
подставляются данные кадра отлаживаемой
команды или запроса.
■ данные каналов генерируются с помощью
псевдослучайных чисел специальной програм-
мой,написанной на Delphi, и при трассиров-
ке грузятся во внешнее ОЗУ ОЭВМ. Листинг
программы-генератора сигналов приведен в
приложении данного дипломного проекта.
■ После места вызова отлаживаемой проце-
дуры ставится точка останова.
■ Кадры ОС,возвращаемые программой упра-
вления СЛА, формируются во внешней памяти,
после чего выгружаются средствами отладчи-
ка и тестируются на правильность.
Для примера можно показать, как была
сгенерирована случайная последовательность
сигналов с начальным значением псевдослу-
чайного генератора, равным 2 (рис.5.3.1).
▒▒ Signal generator ▒▒▒▒▒▒▒▒ [_][O][X]
╟────────────────────────────────────╢
║ ┌────┐┌──────┐┌────┐┌──────┐┌────┐ ║
║ ┘ └┘ └┘ └┘ └┘ └ ║
║ ┐┌┐┌─┐┌┐ ┌┐┌┐┌─┐┌┐┌┐┌┐ ┌┐┌┐┌┐┌─┐┌┐ ║
║ └┘└┘ └┘└─┘└┘└┘ └┘└┘└┘└─┘└┘└┘└┘ └┘└ ║
║ ─┐┌┐┌─┐ ┌┐ ┌─┐ ┌┐┌─┐┌┐┌┐┌─┐ ┌─┐┌─┐ ║
║ └┘└┘ └─┘└─┘ └─┘└┘ └┘└┘└┘ └─┘ └┘ └ ║
║ ┐ ┌┐┌─┐┌─┐ ┌─┐ ┌─┐┌─┐ ┌┐ ┌─┐┌─┐ ┌─ ║
║ └─┘└┘ └┘ └─┘ └─┘ └┘ └─┘└─┘ └┘ └─┘ ║
║ ┐┌─┐┌─┐┌─┐┌──┐ ┌─┐┌──┐┌─┐┌┐┌─┐┌─┐┌ ║
║ └┘ └┘ └┘ └┘ └─┘ └┘ └┘ └┘└┘ └┘ └┘ ║
║ ┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌ ║
║ └┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘ ║
║ ┌─┐ ┌──┐ ┌─┐ ┌──┐ ┌┐ ┌─┐ ┌─┐ ┌──┐ ║
║ ─┘ └─┘ └─┘ └─┘ └─┘└─┘ └─┘ └─┘ └ ║
║ ─┐┌─────┐┌───┐┌───┐┌────┐┌────┐┌── ║
║ └┘ └┘ └┘ └┘ └┘ └┘ ║
║ ║
║ ║
║█████▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║
╟────────────────────────────────────╢
[Generate] Seed= [2] not tested [Test]
╙────────────────────────────────────╜
Рис. 5.3.1. Генератор тестовых сигналов.
Ниже приведён дамп файла сгенерирован-
ной программой области памяти (4 килобай-
та), где значения отсчётов сигналов распо-
ложены так, как если бы они были считаны
схемой записи СЛА. Этот файл будет исполь-
зоваться для отладки программы СЛА в отла-
дчике Debugger-51 (таблица 5.3.1).
Таблица 5.3.1.
Дамп сгенерированных сигналов
0000: D6D6D292-90802021-21252D2D-2D296868
0010: 68484044-44444404-04040404-00000000
0020: 40404046-66666666-66323232-32323232
0030: 1E1E1C1C-1C5C5C4C-48404040-40400404
0040: 24242424-24202060-60606060-40434347
0050: 0707078F-8F8E8E8E-CACACAC8-C8D0D034
0060: 34343434-34343430-30100000-40404040
0070: 40040404-0C0C0C0C-28282828-2A2A2222
0080: 26666646-46460602-00001010-10101414
0090: 14145454-70707070-78686868-682C2D0D
00A0: 0D050501-03030202-42424242-46464444
00B0: 44400020-20202024-2424BCFC-FCF8D8D8
00C0: D8D8D898-90909090-96161606-66666666
00D0: 66666040-40000404-0404040C-08080848
00E0: 48486868-6C6C6464-24242424-20202123
00F0: 03031313-13131616-54545454-5C484808
0100: 08282828-2C242424-24646444-44444040
0110: 40404040-02020606-06060606-26262232
0120: 727070F0-F0F8FCFC-FCBC3C1C-04040400
0130: 00000000-00444444-44444444-40202022
0140: 22222626-26262607-03034B5B-5B59585C
0150: 54141414-14100000-00202020-24242464
0160: 64646060-60404042-4A0E0E0E-0E0E0E0E
0170: 0A0A0A40-60606070-74747434-34343434
0180: 10101000-00000404-C4C4C4C4-CCCECECA
0190: EA6A2A2A-26262626-26060444-44444040
01A0: 40404040-40410101-0505151D-1D3D3D39
01B0: 39387070-70505046-46464646-46020202
01C0: 02020202-06044444-44646464-60606060
01D0: 2000080C-0C0C0C0C-0C141454-505050D0
01E0: D0F2F2F6-F6B63626-26262606-06000000
01F0: 00484848-484D4D4D-4D0D2525-21212121
0200: 21242404-04040444-54565252-52525252
0210: 52563636-36363630-20282828-28280848
0220: 484C4C44-44444444-44404000-00002020
0230: 24242626-26260642-42424242-42404404
0240: 141C1C9C-9D9DBDB9-B9B9F8F0-70545454
0250: 44444444-04040002-02020202-02626262
0260: 66666664-2C2C2828-08080808-00000044
0270: 44444444-44444424-20202030-30303636
0280: 56565652-52525A4A-0A0A0A0C-0C0C0404
0290: 24646460-60606061-61418181-85858484
02A0: 848484C4-C4C44446-46426262-6A6A2A2A
02B0: 2A3A1C1C-1C141414-14141454-54505050
02C0: 50505050-54446424-24202022-2222020E
02D0: 0E0E0E4E-4E4E4642-42404000-00000404
02E0: 04242420-20303030-71717151-5557575F
02F0: 5F5F0B0B-0A0A0A00-04040424-24646460
0300: 60606060-6464E484-84848484-848480C0
0310: C0C84A4A-4E4E4E5E-7E3E3636-36323232
0320: 30300040-44444444-44440400-00000000
0330: 00000004-44646464-60606A6A-2A2A0E0E
0340: 0F0F0F17-17171551-51505050-50141414
0350: 14342424-24202020-20202000-40444C4C
0360: 4E4E4E4E-4A4A4242-42828484-A4A4A4A0
0370: A0A02020-40404454-54545450-10101818
0380: 181C1C1C-0C0C0606-22222262-62666666
0390: 64646404-04040400-00000000-00000041
03A0: 4D4D4D4D-5C7C7C3C-34303032-32323212
03B0: 06060646-46444040-40404040-40400424
03C0: 24242424-24202028-08080808-48404444
03D0: 44C4C6C2-C2929292-92163636-36363230
03E0: 20206060-64444444-44444000-08080808
03F0: 28282820-20202424-04444442-42434343
0400: 43031313-16161616-14343474-74747470
0410: 70684848-0C0C0C0C-0C0C0C00-00004040
0420: 40646464-64642626-22222222-22220206
0430: 46464646-42480808-0888989C-9C9C9CF4
0440: F4F0F070-70706060-60242424-04040501
0450: 01010143-43434246-666E6E6E-2E2E2E28
0460: 28080808-08004444-44444454-50505010
0470: 30303434-34242626-26060642-424A4A4A
0480: 4A4A4A0E-04040404-24202020-20202020
0490: 24646464-44404040-00001010-1014141F
04A0: 1F5F5F7B-7B7B7B7B-622222A2-80848484
04B0: 84840400-00004040-44444444-44446060
04C0: 60202828-282C2C2C-3C3C3C36-56525252
04D0: 52525252-52121614-04042420-20202020
04E0: 20206064-6464444D-4D490909-09090904
04F0: 04040404-06060602-02626262-62626664
0500: 74747474-54541414-10101090-9098988C
0510: 8C8C8CEC-EC6C6860-60202020-20242626
0520: 26262606-02424242-42424242-44040404
0530: 04243030-30303838-397D7D7D-7D5D5541
0540: 40000000-00000000-06060666-66666262
0550: 6262626A-2E0C0C0C-0C0C0808-00004040
0560: 44444454-54545410-30303030-B0B4B4B4
0570: B4B686C6-C6CECE4A-4A4A4A4A-4A4A0A26
0580: 26242424-25252521-41414141-41404044
0590: 04040404-04000020-60707070-707A7A1A
05A0: 1A1E1E1E-1E1E1604-04444440-40404040
05B0: 40400424-24242424-24244444-40404040
05C0: 40080A0A-0E0E0E0E-0E0E0E42-42434341
05D0: 61617575-757534B4-94909090-9090D0D0
05E0: D0C04040-40646424-242C2E2A-2A2A2A2A
05F0: 2A0A0A0E-0E464646-46444440-40000000
0600: 20202024-24242424-64445050-50585858
0610: 1C1C1C1C-16161606-07072723-23232323
0620: 63606464-44444444-4C0C0C08-08080808
0630: 08040404-64646464-64606060-00101092
0640: 92929696-96961616-16464642-62626268
0650: 28282828-2C0C0C0C-0C0C0444-40404040
0660: 40000000-04040424-24242033-33333373
0670: 77775757-5F5E5C18-18080808-08000004
0680: 44446464-64602020-20200000-00040404
0690: 44444448-4A4A4A4A-4A5A5E36-36363636
06A0: 32222020-A0C0C0C4-C4C4C4C4-C4C4C0C0
06B0: 80800000-00000404-2C2C2E6E-6A6B6B6B
06C0: 6B636767-67260606-04000000-00101414
06D0: 14141414-54545474-70606068-68682828
06E0: 28280C0C-04060606-06020242-42424266
06F0: 64646464-24242020-20202020-38585C5C
0700: 5C5C5C50-D0D0D0D0-D0848484-A6262626
0710: 26666363-63434307-07060604-04000000
0720: 00080808-4C4C6C64-64602020-20243434
0730: 34141414-54545454-52525212-02020206
0740: 06060606-2A2A6868-68686868-68642404
0750: 04040404-04000000-40404042-46464676
0760: 76363232-32323030-10189CDC-DCDDCDCD
0770: CDC5C101-00002020-20202424-24666666
0780: 46424242-42424242-42080C0C-0C0C0C0C
0790: 2C2C3C34-34747070-70505050-44444404
07A0: 06060606-02020202-02024260-6060646C
07B0: 6C2C2C2C-08080800-00000000-40404444
07C0: 44444444-44427233-33333333-333736B6
07D0: 9696D6C0-C0C0C0C8-48484C4C-0C0C0424
07E0: 20202020-20202464-64646464-40404000
07F0: 00000206-0E0E0E0E-0A1A1A1A-7A7A7A72
0800: 72767676-66242404-04040400-00000000
0810: 00000444-44444444-44646060-28282828
0820: 292B2F2F-2F272707-57565250-50505050
0830: 14141414-14242020-A0A0E0E0-E0E4E4E4
0840: 0C0C0C0C-0C0C0808-0A0A4242-42424246
0850: 46062626-24242424-24301050-50505050
0860: 54545454-545C0C0C-08080828-2A2A2A22
0870: 62666666-66666666-42000000-00010505
0880: 05050545-41404040-40606474-34343438
0890: 38381A1A-1A1E0686-C6C6C6C6-C6C2C2C0
08A0: C0002020-24242424-24246440-40404040
08B0: 4044444C-0C0C0808-08082820-20203434
08C0: 76767676-76725252-12121204-04040404
08D0: 04050149-49494969-6D6D6D24-24242424
08E0: 00000000-40404040-46460606-06262222
08F0: 32327272-7AFAFEDE-DEDE9E9E-90808080
0900: 80800004-04040404-04444040-60606060
0910: 24242424-24040446-464E4A4A-4A4A0A0A
0920: 0A062624-34343434-70705050-51515555
0930: 55454544-00000000-00000000-00060E2E
0940: 6E6E6E6A-6A6A6A22-22200404-04040404
0950: 00404040-40444454-54541434-34303030
0960: B0B0A0A0-A4ACECCC-CE4E4A4A-4A020202
0970: 02020606-06262620-20206060-60614545
0980: 45050504-14141410-18181858-585C5C5C
0990: 74766626-26222222-22222222-22424646
09A0: 44444404-04040400-00080808-4868686C
09B0: 6C6C6C64-64747476-36121292-92929296
09C0: 96969414-54544444-40404028-28282828
09D0: 282C2D25-05050101-01014140-40444446
09E0: 46060626-26263232-32301010-10545C5C
09F0: 5C5C4C48-48480800-20242424-24246464
0A00: 64606060-60000004-04040606-06020202
0A10: 02024242-52565676-7C7C7838-38382828
0A20: 20200101-050505C5-C5C5C5C5-C5C4C480
0A30: 82828202-0A2E2E2E-2E2E2C68-68686060
0A40: 74747454-54101010-10100000-00040404
0A50: 44444444-60606062-62222222-2A2E0E0E
0A60: 0E0E0E06-04000000-00004040-40505454
0A70: 54141434-35353131-31313131-35754646
0A80: 4646CA8A-8A8A8A8A-8A8A8284-84044444
0A90: 44444464-60606060-60202424-24243414
0AA0: 141C1C18-185A5A5A-5A5A5646-46464606
0AB0: 06062020-20202020-24242464-64444440
0AC0: 40404000-0008080A-0E0E0E0E-2E266662
0AD0: 70707071-71717515-15151514-10101000
0AE0: 00000404-44444464-646E6E6E-6AEAEAEA
0AF0: 8A8A8E8E-84040404-04040444-40606060
0B00: 70703030-30303414-14141454-44444242
0B10: 4242020A-0A0A0A0E-2C2C2C2C-64646464
0B20: 64646465-45010101-01010101-10141414
0B30: 14145656-72727A7A-6A6A2A2A-2E2E2E0C
0B40: 04040404-44404040-40C0C0C0-C0C0C084
0B50: 84A42424-24242420-20604040-42424252
0B60: 56161616-1E1E1A1A-18184848-4C6C6C64
0B70: 64242420-20202020-20204445-45454747
0B80: 47464642-02020202-02060E0E-2E6E6C6C
0B90: 6C686860-30303010-14141414-14141050
0BA0: 50404044-44444406-06060202-02022A2A
0BB0: 6E6E6E6E-E4E4A0A0-A0A08080-00000404
0BC0: 04044444-44444040-50101010-14151535
0BD0: 3737373F-3F3F2B2A-6A6A6848-40404444
0BE0: 44444444-00000000-20202024-24242464
0BF0: 64644444-4444440E-0A0A0A1A-1E1E1E16
0C00: 16565656-44406060-60606060-60242404
0C10: 84848484-8480C0C0-40484848-4C0C2C2C
0C20: 2E262622-22232323-23236357-54545454
0C30: 54545410-10101010-10000000-04246464
0C40: 6C6C6C68-68282A2A-02020206-06464444
0C50: 44444440-40000000-20202424-24247474
0C60: 74545454-50505818-181A9A9A-9E9E8E8E
0C70: 8A8AE2E2-62606024-24242404-04000101
0C80: 01010145-45454545-44646060-60202026
0C90: 2E0E1E1E-1E1E1E1A-1A1A1818-18404040
0CA0: 40446464-24242020-20202020-00040404
0CB0: 44444444-46464242-0A2A2A2A-2A2A2A22
0CC0: 20242474-54555151-51515111-01000484
0CD0: 84A4A4A4-A4202068-68684848-484E0E0E
0CE0: 0E060202-02020242-42404040-44444444
0CF0: 04042020-30303078-78787C5C-5C5C5C1C
0D00: 14100202-02020202-02064666-66666262
0D10: 62220200-01010105-05454544-44404048
0D20: 48484C0C-2C2C2C2C-34343010-90D0D0D0
0D30: D2D2D2D2-16161626-26262020-20202000
0D40: 00404044-44444444-04040808-28282828
0D50: 28282064-64465656-56561612-12121210
0D60: 14141414-74646060-60606064-640C0D0D
0D70: 0D0D0909-09030302-06464646-46666662
0D80: 62606060-30303014-14141414-14141414
0D90: 40404040-404C6C6C-2CACACAC-ACACA822
0DA0: 22220202-42424646-46464644-40000000
0DB0: 00002024-24242424-20606061-61415555
0DC0: 5D1D1C1C-18181818-10101252-52524266
0DD0: 66662626-26262222-20000000-00000008
0DE0: 084C4C4C-4C4C4C4C-4C484800-00202022
0DF0: 26262626-A6A6C6C6-C2D25252-52521614
0E00: 14141419-19192929-29696464-64646404
0E10: 00000000-00000000-44464646-46424262
0E20: 222A2A2E-2E2E0C0C-08081818-18505454
0E30: 54545454-54501000-00202424-24242464
0E40: 64646262-424A4A0A-0A0A0F0F-0F070504
0E50: 04444444-446060E0-E0A0A0A0-B0B4B4B4
0E60: 94949494-10105050-544E4E4E-4E4E6E2A
0E70: 22222222-22222246-46464444-44444000
0E80: 00000000-00000024-6C6C6C6C-6C686860
0E90: 60301212-12161616-16161616-52525041
0EA0: 41414545-45444420-20202020-20282828
0EB0: 2C2C6E4E-4E464242-42420202-02060606
0EC0: 06043430-303030F0-F0F4F4F4-F4E4CCCC
0ED0: 8C8C8888-08080808-04044646-66666262
0EE0: 62626262-66262606-06040405-05050101
0EF0: 01011155-5454545C-78787878-3828282C
0F00: 2C2C0404-04044444-46464642-42420222
0F10: 22222222-22222626-24246464-44444858
0F20: 58585858-D8D89C94-94949410-50507070
0F30: 60646464-64646022-22030B0B-0B0F0F0F
0F40: 0E060604-40404040-60646464-64242424
0F50: 24200000-00001010-14545454-54505050
0F60: 52524242-62222A2A-2A2A2A2E-2E2E2604
0F70: 44404040-40404040-40000404-04242424
0F80: 24202060-60707171-F1F5DDDF-DF9F9E9E
0F90: 9A121202-02020644-44444444-44404060
0FA0: 60602020-24242C2C-2C2C0C48-48484040
0FB0: 40400202-02020606-06161616-36363070
0FC0: 70707070-70703014-04040C0C-0C080808
0FD0: 48484C44-46464642-62636363-23232525
0FE0: 25250505-44404040-40505054-14141414
0FF0: 9C9CBCBC-BCB8B8A8-E0E2E2C2-C6460606
При прогоне программы в отладчике ей
подставляется отладочная команда чтения
канала 0, после чего ставится точка оста-
нова и вызывается обработчик данной коман-
ды (рис.5.3.2).
[прим.издателей: здесь был рабочий экран
монитора-отладчика в альбомном расположе-
нии, см.графический материал]
Рис.5.3.2. Отладка программы СЛА
с помощью отладчика Debugger-51.
Выделенная область памяти, содержащая
данные ответного сообщения программы СЛА
(компрессированные данные канала 0 ),сре-
дствами отладчика сохраняется в файл
result.bin, после чего полученный файл те-
стируется на корректность и соответствие
сгенерированному сигналу программой Signal
generator (рис. 5.3.3).
▒▒ Signal generator ▒▒▒▒▒▒▒▒ [_][O][X]
╟────────────────────────────────────╢
║ ┌────┐┌──────┐┌────┐┌──────┐┌────┐ ║
║ ┘ └┘ └┘ └┘ └┘ └ ║
║ ┐┌┐┌─┐┌┐ ┌┐┌┐┌─┐┌┐┌┐┌┐ ┌┐┌┐┌┐┌─┐┌┐ ║
║ └┘└┘ └┘└─┘└┘└┘ └┘└┘└┘└─┘└┘└┘└┘ └┘└ ║
║ ─┐┌┐┌─┐ ┌┐ ┌─┐ ┌┐┌─┐┌┐┌┐┌─┐ ┌─┐┌─┐ ║
║ └┘└┘ └─┘└─┘ └─┘└┘ └┘└┘└┘ └─┘ └┘ └ ║
║ ┐ ┌┐┌─┐┌─┐ ┌─┐ ┌─┐┌─┐ ┌┐ ┌─┐┌─┐ ┌─ ║
║ └─┘└┘ └┘ └─┘ └─┘ └┘ └─┘└─┘ └┘ └─┘ ║
║ ┐┌─┐┌─┐┌─┐┌──┐ ┌─┐┌──┐┌─┐┌┐┌─┐┌─┐┌ ║
║ └┘ └┘ └┘ └┘ └─┘ └┘ └┘ └┘└┘ └┘ └┘ ║
║ ┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌┐┌ ║
║ └┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘└┘ ║
║ ┌─┐ ┌──┐ ┌─┐ ┌──┐ ┌┐ ┌─┐ ┌─┐ ┌──┐ ║
║ ─┘ └─┘ └─┘ └─┘ └─┘└─┘ └─┘ └─┘ └ ║
║ ─┐┌─────┐┌───┐┌───┐┌────┐┌────┐┌── ║
║ └┘ └┘ └┘ └┘ └┘ └┘ ║
║ ┐┌────┐┌─────┐┌────┐┌─────┐┌────┐┌ ║
║ └┘ └┘ └┘ └┘ └┘ └┘ ║
║▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█████║
╟────────────────────────────────────╢
[Generate] Seed= [2] tested ok [Test]
╙────────────────────────────────────╜
Рис.5.3.3. Проверка содержимого
ответного сообщения СЛА.
При тестировании распознаётся метод ко-
дирования, указанный в поле данных ОС,дан-
ные канала декомпрессируются, после чего
происходит сравнение распакованного сигна-
ла (на рисунке - нижний) и исходного кана-
ла 0 (на рисунке - верхний).
──────────────────────────────────────────
5.4. Описание работы с СЛА
Программа предназначена для автоматиза-
ции процесса наладки приборов,подключенных
к шине типа ММИ. Устройство рассчитано на
использование внутри предприятия.Ниже при-
ведено описание основных требований к ин-
терфейсу системы СЛА - ПЭВМ [16]:
Для работы СЛА необходима ПЭВМ обще-
го назначения с установленным программным
обеспечением обслуживания специализирован-
ного логического анализатора, подключен-
ная к СЛА по последовательному интерфейсу
RS-232.
Программа ПЭВМ (ПУЛА) должна осуществ-
лять управление логическим анализатором
ММИ (СЛА) по интерфейсу RS-232, а также
прием и вывод на экран дисплея временных
диаграмм процессов передачи информации по
интерфейсу ММИ при настройке аппаратуры и
локализации отказов. Она должна также обе-
спечивать чтение и запись в/из файла на
магнитном диске результатов измерения из/в
рабочего буфера совместно с параметрами
запуска и измерения.
Запуск измерения ЛА должен инициирова-
ться с клавиатуры ПЭВМ.При запуске измере-
ния ПУЛА должна выполнять следующую после-
довательность действий:
■ останов измерения от предыдущего запу-
ска выдачей на ЛА команды <Остановить из-
мерение>;
■ гашение на дисплее временной диаграммы
от предыдущего измерения;
■ запуск измерения выдачей на ЛА кадра
параметров командой <Запустить измерение>;
■ циклический опрос байта состояния из
ЛА с помощью запросов <Читать состояние
ЛА> (с выводом на экран) до окончания из-
мерения или до вмешательства оператора с
клавиатуры ПЭВМ с выдачей на ЛА команды
<Остановить измерение>;
■ при успешном завершении измерения -
прием из ЛА результатов измерения запроса-
ми <Читать канал> последовательно по заде-
йствованным каналам в рабочий буфер, с по-
следующим выводом на экран или в файл.
ПУЛА должна обеспечивать инициируемую с
клавиатуры установку в исходное состояние
ЛА выдачей по интерфейсу на ЛА команды ус-
тановки в исходное с последующим приемом и
индикацией байта состояния ЛА.
Самоконтроль ЛА может запускаться по
командам оператора ПЭВМ с последующей ин-
дикацией результатов на дисплее.С ПЭВМ до-
лжна подаваться команда <Запустить самоко-
нтроль ЛА> и запрос <Читать состояние ЛА>,
приведенные в разделе 3.3.
ЛА может быть подключен к ПЭВМ для ра-
боты в одномашинном и двухмашинном режи-
мах.Одномашинным является режим работы,ко-
гда одна и та же ПЭВМ производит управле-
ние комплексом устройств и снимает резуль-
таты измерения. В двухмашинном режиме одна
из ПЭВМ осуществляет контроль, а другая -
снимает результаты измерения с ЛА.
При работе в одномашинном режиме взаи-
модействие ПУЛА и программы контроля может
осуществляться в следующем порядке:
■ снимается питание с АКИА и с ЛА;
■ подается питание на ПЭВМ;
■ вызывается ПУЛА, задается тип устройс-
тва и запрашивается тип средств коммута-
ции;
■ в аппаратуру на место заданного устро-
йства устанавливается ЛА с требуемым типом
средств коммутации и с заданным устройст-
вом;
■ подается питание на ЛА;
■ средствами ПУЛА ЛА устанавливается в
исходное состояние и контролируется соот-
ветствие типа средств коммутации заданному
типу устройства;
■ подается питание на АКИА;
■ средствами ПУЛА задаются параметры за-
пуска и измерения ЛА и осуществляется за-
пуск измерения ЛА в однократном режиме.
■ выполняется выход из ПУЛА в ДОС;
■ вызывается и запускается программа ко-
нтроля АКИА;
■ осуществляется останов программы конт-
роля и выход из нее в ДОС;
■ вызывается ПУЛА без нарушения состоя-
ния ЛА;
■ средствами ПУЛА опрашивается состояние
ЛА и, если запуск состоялся,принимаются из
ЛА и выводятся на экран результаты измере-
ния.
При работе в двухмашинном режиме взаи-
модействие ПУЛА и программы контроля может
осуществляться в следующем порядке:
■ снимается питание с АКИА и с ЛА;
■ подается питание на вспомогательную
ПЭВМ с установленной ПУЛА;
■ вызывается ПУЛА,задается тип устройст-
ва и запрашивается тип средств коммутации;
■ в аппаратуру на место заданного устро-
йства устанавливается ЛА с требуемым типом
средств коммутации и с заданным устройст-
ва;
■ подается питание на ЛА;
■ средствами ПУЛА ЛА устанавливается в
исходное состояние и контролируется соот-
ветствие типа средств коммутации заданному
типу устройства;
■ подается питание на АКИА;
■ средствами ПУЛА задаются параметры за-
пуска и измерения ЛА и осуществляется за-
пуск измерения ЛА в однократном режиме или
в периодическом режиме;
■ вызывается и запускается программа ко-
нтроля АКИА;
■ средствами ПУЛА опрашивается состояние
ЛА и, если запуск состоялся,принимаются из
ЛА и выводятся на экран результаты измере-
ния.
Одновременный (двухмашинный) режим ра-
боты может быть реализован на одной ПЭВМ с
установленной многозадачной операционной
системой, такой как MS Windows.
──────────────────────────────────────────
6. Экономическая часть
6.1. Определение трудоёмкости разработки
программного продукта
Разрабатываемый программный продукт от-
носится к подсистеме <Управление качест-
вом>.
Исходные данные для расчёта:
■ количество разновидностей форм входной
информации: 2 (в том числе переменной: 2);
■ количество разновидностей форм выход-
ной информации: 2;
■ степень новизны разрабатываемой зада-
чи: В (разработка проекта с использованием
типовых проектных решений при условии их
изменения;разработка проектов,имеющих ана-
логичные решения);
■ сложность алгоритма: 1 (алгоритмы оп-
тимизации и моделирования систем и объек-
тов);
■ сложность организации контроля входной
информации: группа 12 (входные данные и
документы однообразной формы и содержания,
осуществляется формальный контроль);
■ сложность организации контроля выход-
ной информации: группа 22 (печать докумен-
тов однообразной формы и содержания, вывод
массивов данных на магнитные носители);
Программный продукт разработан в кросс-
средах программирования для процессоров
типа MCS-51: редактор-транслятор Asm51Edit
2 и отладчик Debugger-51, на языке АССЕМБ-
ЛЕР,с использованием типовых проектных ре-
шений и стандартных модулей в объёме 20%.
Разработка проекта велась в режиме работы
в реальном времени.
При расчёте норм времени в зависимости
от исходных данных для расчёта следует
применять соответствующие поправочные ко-
эффициенты. [13] Далее приведён список
значений этих коэффициентов.
1. Разработка технического задания:
■ для разработчика постановки задачи:
0,65;
■ для разработчика программного обеспе-
чения: 0,35.
2. Разработка эскизного проекта:
■ для разработчика постановки задачи:
0,7;
■ для разработчика программного обеспе-
чения: 0,3.
3. Разработка технического проекта.
1·2
K = ───·1·1,26·0,85 ў 1,07.
общ 2
4. Разработка рабочего проекта.
1,20·2
K = ──────·1·1,32·1,15·0,8 ў 1,468.
общ 2
5. Внедрение.
K = 1·1·1,21·0,8 = 0,968.
общ
Для учета применения ПЭВМ в процессе
проектирования вводятся поправочные коэф-
фициенты:
■ для расчёта трудоёмкости (для стадий
ТП, РП, внедрение): 0,6;
■ для расчёта затрат машинного времени:
1,32.
Поскольку типовые нормы времени на про-
граммирование задач для ЭВМ были рассчита-
ны для устаревших средств разработки ПО,то
во все используемые коэффициенты следует
внести поправочный коэффициент 0,6.
Определим трудоёмкость по стадиям раз-
работки проекта.Результаты расчётов приве-
дены в таблице 6.1.1.
Таблица 6.1.1
┌──────────────┬───────┬────────┬────────┐
│ Стадия │Затраты│Поправо-│ Затраты│
│ разработки │времени│ чный │ времени│
│ проекта │ чел.- │ коэффи-│с учётом│
│ │ дни │ циент │п.коэфф.│
├──┬───────────┼───────┼────────┼────────┤
│ │Разработчик│ │ │ │
│ │постановки │ │0,65·0,6│ 12 │
│ │задачи │ │ │ │
│ТЗ├───────────┤ 31 ├────────┼────────┤
│ │Разработчик│ │ │ │
│ │ПО │ │0,35·0,6│ 7 │
├──┼───────────┼───────┼────────┼────────┤
│ │Разработчик│ │ │ │
│ │постановки │ │0,7·0,6 │ 27 │
│ │задачи │ │ │ │
│ЭП├───────────┤ 67 ├────────┼────────┤
│ │Разработчик│ │ │ │
│ │ПО │ │0,3·0,6 │ 12 │
├──┼───────────┼───────┼────────┼────────┤
│ │Разработчик│ │ │ │
│ │постановки │ 57 │ 1,07x │ 21 │
│ │задачи │ │x0,6·0,6│ │
│ТП├───────────┼───────┼────────┼────────┤
│ │Разработчик│ │ 1,07x │ │
│ │ПО │ 21 │x0,6·0,6│ 8 │
├──┼───────────┼───────┼────────┼────────┤
│ │Разработчик│ │ │ │
│ │постановки │ 23 │ 1,46x │ 11 │
│ │задачи │ │x0,6·0,6│ │
│РП├───────────┼───────┼────────┼────────┤
│ │Разработчик│ │ 1,46x │ │
│ │ПО │ 104 │x0,6·0,6│ 54 │
├──┼───────────┼───────┼────────┼────────┤
│В │Разработчик│ │ │ │
│н │постановки │ 14 │ 0,968x │ 5 │
│е │задачи │ │x0,6·0,6│ │
│д ├───────────┼───────┼────────┼────────┤
│р │Разработчик│ │ 0,968x │ │
│. │ПО │ 21 │x0,6·0,6│ 7 │
├──┴───────────┼───────┼────────┼────────┤
│ Всего │ 338 │ │ 164 │
└──────────────┴───────┴────────┴────────┘
Численность исполнителей рассчитывается
исходя из планового фонда рабочего време-
ни, который составляет 80 дней,по формуле:
ТОбщ
Ч = ──── [чел],
Ф
где ТОбщ - суммарные затраты времени на
всех стадиях разработки; Ф - плановый фонд
рабочего времени.
ТОбщ=164 чел.-дней, Ф=80 раб. дней.
164
Ч = ─── = 2,05 чел.
80
Затраты машинного времени составляют:
33·1,32 ў 44 дня.
──────────────────────────────────────────
6.2. Построение ленточного графика
Ленточный график представляет собой та-
блицу, где перечислены наименования видов
работ, должности исполнителей,трудоёмкость
и длительность выполнения каждого вида ра-
бот. Продолжением таблицы является график,
отражающий продолжительность каждого вида
работ в виде отрезков времени,которые рас-
полагаются в соответствии с последователь-
ностью выполнения работ [14].
Для построения ленточного графика испо-
льзуются следующие исходные данные:
■ общая трудоёмкость разработки;
■ трудоёмкость отдельных стадий;
■ планируемый срок разработки (80 рабо-
чих дней);
■ необходимый состав исполнителей (руко-
водитель, инженер-разработчик).
Исходя из полученных в п. 6.1. данных по-
строим ленточный график (рис.6.2.1).
┌───┬──┬─────────────────────────────────┐
Ста-Вре- Продолжительность работы,недели │
│дия│мя├─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┤
разр.ис-1│ │3│ │5│ │7│ │9│ 11│ 13│ 15│ 17│
пр-та п│ │2│ │4│ │6│ │8│ 10│ 12│ 14│ 16│ │
├───┼──┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│ТЗ │ 9│5│4│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ЭП │19│ │1│5│4│5│4│ │ │ │ │ │ │ │ │ │ │ │
│ТП │14│ │ │ │ │ │1│5│5│3│ │ │ │ │ │ │ │ │
│РП │32│ │ │ │ │ │ │ │ │2│5│6│2│3│6│5│3│ │
Внед. 6│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │2│4│
├───┼──┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
Всего80│5│5│5│4│5│5│5│5│5│5│6│2│3│6│5│5│4│
└───┴──┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
Рис. 6.2.1. Ленточный график.
──────────────────────────────────────────
6.3. Составление сметы на разработку
Себестоимость программного продукта
складывается из следующих видов затрат:
1. заработная плата разработчиков (услов-
ная,принятая за основу на предприятии) за
80 рабочих дней, с учетом занятости руко-
водителя данным проектом в 25% времени.
При этом рабочий месяц приравнивается к
21 рабочему дню:
(5000·0,25+3100)·80/21 = 13059,52 руб;
2. дополнительная заработная плата разра-
ботчиков,составляющая 10% от суммы пункта
1:
13059,52·0,10 = 1305,95 руб;
3. отчисления на социальные нужды, состав-
ляющие 36% от суммы пунктов 1 и 2:
0,36·(13059,52+1305,95) = 5171,57 руб;
4. затраты на машинное время:
■ амортизация ЭВМ:
- норма амортизации: 25,3 руб/день;
- эксплуатация ЭВМ длится 44 рабочих дня:
25,3·44 = 1113,20 руб;
■ затраты на электроэнергию:
- мощность ЭВМ: 0,2 кВт;
- эксплуатация ЭВМ длится 44 рабочих дня;
- рабочий день составляет 8 часов;
- стоимость 1 кВт-часа электроэнергии рав-
на 0,89 руб:
448·0,2·0,89 = 62,66 руб;
■ затраты на программное обеспечение:
- используемые средства разработки созданы
на предприятии;
- на ЭВМ установлена ОС Windows'98;
- срок амортизации ОС: 2 года;
- эксплуатация ЭВМ длится 44 рабочих дня;
- год включает 250 рабочих дней;
- стоимость дистрибутива ОС: 3100 руб;
- поскольку данная ОС используется для
других задач, кроме разработки ПО СЛА, то
вводится коэффициент использования ОС
проектировщиками СЛА, равный 0,5:
44
─────·3100·0,5 = 136,40 руб;
250·2
Себестоимость программного продукта:
13059,52+1305,95+5171,57+1113,20+
+62,66+136,40 = 20849,30 руб.
Уровень рентабельности программного проду-
кта закладывается предприятием на уровне
25% от себестоимости:
20849,30·0,25 = 5212,32 руб.
В цену программного продукта включают-
ся:
■ себестоимость (20849,30 руб);
■ рентабельность (5212,32 руб);
■ налог на добавленную стоимость (20%):
0,2·(20849,30+5212,32) = 5212,32 руб.
Таким образом, цена программного проду-
кта составит:
┌─────────────┐
20849,30+5212,32+5212,32 =│31273,94 руб.│
└─────────────┘
──────────────────────────────────────────
6.4. Выводы по экономической
эффективности программного продукта
Внедрение разработанного программного
продукта позволит:
■ повысить качество, объём, технический
уровень и скорость выполняемых с помощью
программы работ;
■ увеличить объёмы и сократить сроки пе-
реработки информации;
■ улучшить показатели основной деятель-
ности предприятия.
Расчёт по экономической эффективности
представлен в таблице 6.4.1.
Таблица 6.4.1.
┌──────────────┬────────────┬────────────┐
│ │ Ручная │ Наладка с │
│ │ наладка │ помощью СЛА│
├──────────────┼────────────┼────────────┤
│Трудоёмкость │ │ │
│решения одной │ │ │
│задачи, │ 25 │ 3 │
│чел.-час. │ │ │
├──────────────┼────────────┼────────────┤
│Количество │ │ │
│задач, решае- │ 50 │ 50 │
│мых за год │ │ │
├──────────────┼────────────┼────────────┤
│Часовая ста- │ │ │
│вка, руб. │ 15 │ 15 │
├──────────────┼────────────┼────────────┤
│Стоимость ча- │ │ │
│са машинного │ - │ 25,3 │
│времени, руб. │ │ │
├──────────────┼────────────┼────────────┤
│Затраты при │ │ │
│расчёте │ 25·50·15 = │3·(15+25,3)x│
│за год, руб. │ = 30000 │ x50 = 6045 │
└──────────────┴────────────┴────────────┘
Годовая экономия:
30000-6045 = 23955 руб.
Срок окупаемости:
31273,94
──────── ў 1,3 года ў 16 месяцев.
23955