Inferno
#03
22 ноября 2002 |
|
Диплом - Диплом Alone Coder-а. Разработка программного обеспечения для специализированного логического анализатора. Часть 2.
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
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября