Добавил:
Студент, если у тебя есть завалявшиеся работы, то не стесняйся, загрузи их на СтудентФайлс! Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Pz4

.docx
Скачиваний:
19
Добавлен:
16.10.2022
Размер:
94.38 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ЖЕЛЕЗНОДОРОЖНОГО ТРАНСПОРТА

Федеральное государственное бюджетное образовательное учреждение

высшего образования

«Петербургский государственный университет путей сообщения

Императора Александра I»

(ФГБОУ ВО ПГУПС)

Факультет «Автоматизация и интеллектуальные технологии»

Кафедра «Автоматика и телемеханика на железных дорогах»

Специальность 23.05.05 Системы обеспечения движением поездов

Специализация Автоматика и телемеханика на железнодорожном транспорте

Отчет по практическому заданию № 4

по дисциплине «Микропроцессорные информационно-управляющие системы 1»

М8 «Программная реализация последовательных схем на микроконтроллере К1-20»

Обучающийся

Курс IV

Группа

АР-709

дата

Баранов Д.А.

Преподаватель

Отметка о зачете, подпись, дата

доц. Чухонин В.М.

должность, Ф.И.О.

Санкт-Петербург

2020

Цель практического задания: изучение методов программной реализации однотактных автоматов. В качестве программной среды используется интегрированная среда программирования (IDE) C++ Builder.

Запись функции алгебры логики в операторах языка программирования C++

Вариант 1: =

f = (

Таблица истинности для заданной функции

X4

X3

X2

X1

f

0

0

0

0

0

0

0

0

1

0

0

0

1

0

0

0

0

1

1

1

0

1

0

0

1

0

1

0

1

1

0

1

1

0

1

0

1

1

1

1

1

0

0

0

0

1

0

0

1

0

1

0

1

0

0

1

0

1

1

0

1

1

0

0

0

1

1

0

1

0

1

1

1

0

0

1

1

1

1

0

Этапы разработки проекта

1. Создание нового приложения (методика описана в ПЗ №1,2).

2. Сохранение нового проекта (методика описана в ПЗ №1,2).

3. Включение в проект дополнительных файлов.

  • Добавление файла: Adsapi32.lib

  • В полосе главного меню выбрать пункт Project (Проект) и в выпадающем меню выбрать пункт Add To Project (Добавить в проект) или можно воспользоваться быстрой кнопкой Add to Project (Добавить в проект) панели быстрых кнопок ИСР;

  • В открывшемся окне Add To Project (Добавить в проект) найти и открыть каталог: E:/Pcl836;

  • В поле «Тип файлов:» выбрать LibraryFile (*.lib);

  • В указанном каталоге найти файл: Adsapi32.lib и двойным щелчком левой кнопкой манипулятора «Мышь» включить его в файл проекта;

  • Файл Adsapi32.lib должен отразиться в головном файле проекта в виде строки, имеющей следующий вид:

  • USELIB("E:\Pcl836\Adsapi32.lib").

  • Добавление файла: DriverDataIO.cpp

  • В полосе главного меню выбрать пункт Project (Проект) и в выпадающем меню выбрать пункт Add to Project (Добавить в проект) или можно воспользоваться быстрой кнопкой Add to Project (Добавить в проект) панели быстрых кнопок ИСР;

  • Откроется диалоговое окно Add to project (Добавить в проект);

  • В диалоговом окне Add to Project (Добавить в проект) найти и открыть каталог E:/Pcl836;

  • В поле «Тип файлов:» выбрать C++Builder unit (*.cpp);

  • Выбрать файл: DriverDataIO.cpp и двойным щелчком левой кнопкой манипулятора «Мышь» включить его в головной файл проекта;

  • Одним щелчком правой кнопки манипулятора «Мышь» в окне редактора кода на пустом месте файла DriverDataIO.cpp вызвать контекстное меню, в котором выбрать левой кнопкой манипулятора «Мышь» команду Close Page (закрыть страницу), чтобы в дальнейшем исключить случайное редактирование указанного файла;

  • Файл DriverDataIO.cpp должен отразиться в головном файле проекта в виде строки, имеющей следующий вид:

  • USEUNIT("E:\Pcl836\DriverDataIO.cpp");

  • Добавление файла: DriverDataIO.h

  • Сделать активным файл реализации (при необходимости, переключение фокуса между окном редактора формы и окном редактора кода можно выполнить функциональной клавишей клавиатуры F12);

  • В полосе главного меню выбрать пункт File и в выпадающем меню выбрать пункт Include Unit Hdr;

  • В открывшемся окне Use Unit найти файл DriverDataIO, нажать кнопку ОК и этот файл отразится в файле реализации в виде:

  • #include "DriverDataIO.h"

4. Визуальное проектирование

  • Перенос на форму компонент:

Метка (Label) – в количестве 4 шт.

Кнопка (Button) – в количестве 1 шт.

Таймер (Timer) – в количестве 1 шт.

  • Установка свойств компонент

Занесение текста в заголовок компонента Form1:

  • Одиночным щелчком левой кнопки манипулятора «Мышь» на пустом месте формы выделить компонент Форма (Form1);

  • Осуществить переход в окно Инспектора объектов (Object Inspector) на страницу Properties;

  • Изменить текст свойства Надпись (Caption) для визуальной формы с Form1 на название соответствующего метода программной реализации однотактных автоматов.

  • Занесение текста в заголовки компонентов метка (Label1 и Label3)

  • Одиночным щелчком левой кнопки манипулятора «Мышь» по компоненту Label1 на форме (Form1) выделить метку с именем Label1;

  • Осуществить переход в окно Инспектора объектов (Object Inspector) на страницу Properties;

  • Изменить значение свойства Надпись (Caption) для метки Label1 с «Label1» на «Входной набор»;

  • Аналогично изменить значение свойства Надпись (Caption) для метки Label3 с «Label3» на «Выходная функция»;

  • Занесение текста в заголовок компонента Button1 (аналогично предыдущему пункту заменяем на «Пуск»);

  • Занесение текста в заголовки компонентов метка (Label2 и Label4)

  • На этапе визуального проектирования занесение текста в заголовки компонент (меток) Label2 и Label4 не требуется, так как текст, соответствующий значению свойства Надпись (Caption) для указанных меток будет изменен в ходе выполнения приложения за счет применения соответствующих команд, записанных программистом на этапе программирования файла реализации.

  • Установка значений свойств для компонента Таймер (Timer1)

  • Одиночным щелчком левой кнопки манипулятора «Мышь» по компоненту Timer1 выделить компонент Timer1;

  • Осуществить переход в окно Инспектора объектов (Object Inspector) на вкладку Свойства (Properties);

  • Установить значение 100 (что соответствует примерно 100 миллисекундам) свойству Interval (период срабатывания таймера);

  • Установить значение False свойству Enabled (разрешение/запрет работы таймера).

5. Создание обработчиков событий

  • Обработчик события функции Button1Click (щелчок по кнопке) для компонента Button1 создаётся двойным щелчком левой кнопки манипулятора «Мышь» по компоненту Button1, расположенному на визуальной форме (Form1), в результате чего в файле реализации появится конструкция вида:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

}

  • Обработчик событий функции Timer1Timer (срабатывание таймера) для компонента Timer1 создаётся двойным щелчком левой кнопки манипулятора «Мышь» по компонентуTimer1, расположенному на визуальной форме (Form1), в результате чего в файле реализации появится конструкция вида:

void_fastcall TForm1:: Timer1Timer (TObject*Sender)

{

}

  • Обработчик события функции FormCreate (создание формы) создаётся двойным щелчком левой кнопки манипулятора «Мышь» по пустому месту визуальной формы (Form1), в результате чего в файле реализации появится конструкция вида:

void __fastcall TForm1::FormCreate(TObject *Sender)

{

}

  • Обработчик события функции FormDestroy (разрушение формы) создаётся следующим образом:

  • Визуальную форму необходимо сделать активной одиночным щелчком левой кнопки манипулятора «Мышь» по визуальной форме (никакие другие компоненты, находящиеся на визуальной форме, кроме неё самой, не должны быть выделены);

  • Осуществить переход на вкладку Events (События) в окне Object Inspector (Инспектор объектов);

  • Найти и выделить одиночным щелчком левой кнопки манипулятора «Мышь» строку с текстом OnDestroy;

  • В открывшемся справа окне белого цвета выполнить двойной щелчок левой кнопкой манипулятора «Мышь», не затрагивая кнопку с изображением треугольника, в результате чего в файле реализации появится конструкция вида:

void_fastcall TForm1::FormDestroy (TObject*Sender)

{

}

6. Программирование файла реализации

  • Выполняется согласно соответствующему программному листингу файла реализации.

7. Компиляция проекта

  • Осуществляется одиночным нажатием левой кнопкой манипулятора «Мышь» быстрой кнопки Run (зелёный треугольник) или функциональной клавиши клавиатуры F9.

8. Включение и остановка проекта

Включение программы осуществляется одиночным нажатием левой кнопкой манипулятора «Мышь» по кнопке Пуск, расположенной на визуальной форме. Выключение программы осуществляется левой кнопкой манипулятора «Мышь» по кнопке с изображением «крестика», расположенного в правом верхнем углу визуальной формы.

Отладка проекта - выполнение программы по шагам для выявления ошибок алгоритмического характера, которые не обнаруживаются при компиляции и компоновке.

Для этого необходимо: подвести курсор манипулятора «Мышь» к выбранной строке кода файла реализации и одиночным щелчком левой кнопкой манипулятора «Мышь» установить курсор в начале строки, нажать функциональную клавишу F4 на клавиатуре. Выполнение программы пошагово осуществляется нажатием функциональной клавиши клавиатуры F8. Прекращение отладки выполняется одновременным нажатием клавиш клавиатуры Ctrl и F2.

Блок-схемы алгоритма проекта и функции Timer1.Timer

Рис. 1 – блок-схема алгоритма проекта в целом

Рис. 2 – блок-схема алгоритма функции Timer1.Timer

Программный листинг файла реализации

Direct_Calc_Bool_funct.cpp 27.11.2020 22:27:46 Page 1 of 1

1: //---------------------------------------------------------------------------

2:

3: #include <vcl.h> // директива перепроцессора подключает файлы

4: // визуальных компонентов

5: #pragma hdrstop // директива перепроцессора указывает компилятору

6: // конец списка общих файлов

7: #define BASE 0x100 // объявление базового адреса платы ППА

8: #include "DriverDataIO.h" // включение в проект файла "DriverDataIO.h"

9: #include "Direct_Calc_Bool_funct.h" // включение в проект файла

10: // "Direct_Calc_Bool_funct.h"

11: //---------------------------------------------------------------------------

12: #pragma package(smart_init) // директива перепроцессора указывает

13: // компилятору последовательность

14: // инициализации пакетов такой, какая

15: // устанавливается взаимными ссылками

16: // использующих их модулей

17: #pragma resource "*.dfm" // директива перепроцессора указывает

18: // компилятору, что для формы надо

19: // использовать файл .dfm с тем же именем,

20: // что и имя данного файла

21: TForm1 *Form1; // объявление указателя *Form1 для объекта формы

22: // TForm1

23: //---------------------------------------------------------------------------

24: // Объявление конструктора формы и функции конструктора формы

25: __fastcall TForm1::TForm1(TComponent* Owner)

26: : TForm(Owner)

27: {

28: }

29: //---------------------------------------------------------------------------

30: // Объявление указателя для ППА

31: long HDevice;

32:

33: // Инициализация структуры данных

34: TDataIO DataIO[] =

35: {

36: {BASE+3, 0x92},// Адрес и Упр. слово ППА,реж.0, A<--,B<--,C-->

37: {BASE,0}, // Адрес канала А

38: {BASE+1,0}, // Адрес канала В

39: {BASE+2,0} // Адрес канала С

40: };

41:

42: //Преобразование десятичного 16(бит) разрядного

43: // в строку из 4 символов (1и0)

44: AnsiString IntToBinary( unsigned char byte )

45: {

46: char w[9] = "";

47: int i = 0;

48: for( i = 0; i < 4; i++ )

49: {

50: w[3-i] = char (((byte>>i)&1)? '1':'0');

51: }

52: w[i] = '\0';

53: return AnsiString(w);

54: }

55:

56: void __fastcall TForm1::Button1Click(TObject *Sender)

57: {

58: // Разрешение работы таймера

59: Timer1->Enabled=true;

60: }

61: //---------------------------------------------------------------------------

62: // Реализация метода непосредственного вычисления

63: // булевых функций

64: void __fastcall TForm1::Timer1Timer(TObject *Sender)

65: {

66: // Объявление входных переменных и выходной функции

67: unsigned short int x1,x2,x3,x4,f;

68:

69: // Чтение входного набора из канала А

70: // и занесение его в поле DataIO[1].value

71: ReadDeviceData( HDevice, &DataIO[1], 1 );

72:

73: // Выделение 4-х младших разрядов входного набора

74: DataIO[1].value=(DataIO[1].value)&(0x0F);

75:

76: //Вывод входных переменных на форму

77: Label2->Caption ="x4,x3,x2,x1="+IntToBinary( char(DataIO[1].value) );

78:

79: // Занесение входных переменных в разряд D0

80: x1=(DataIO[1].value)&1; // х1-->D0

81: x2=((DataIO[1].value)>>1)&1; // x2-->D0

82: x3=((DataIO[1].value)>>2)&1; // x3-->D0

83: x4=((DataIO[1].value)>>3)&1; // x4-->D0

84:

85: // Вычисление функции f

86: f= (x1&x2|x3)&(~x4);

87:

88: // Выделение разряда D0 выходной функции

89: f=f&1;

90:

91: //Вывод функции f на форму

92: Label4->Caption ="f="+ AnsiString(f);

93:

94: //Вывод функции f в канал С

95: DataIO[3].value=f;

96: WriteDeviceData(HDevice,&DataIO[3],1);

97:

98: // Окрашивание символов и значений входного набора и выходной функции в

99: // красный цвет

100: Label2->Font->Color=clRed;

101: Label4->Font->Color=clRed;

102: }

103: //---------------------------------------------------------------------------

104: void __fastcall TForm1::FormCreate(TObject *Sender)

105: {

106: // Открытие платы ППА

107: HDevice = OpenDevice(1); // 1 = Номер карты в списке устройств

108: // Инициализация ППА

109: WriteDeviceData( HDevice, &DataIO[0], 1 );

110: // Функция заносит в порт 0х103 значение 0х92

111: }

112: //---------------------------------------------------------------------------

113: void __fastcall TForm1::FormDestroy(TObject *Sender)

114: {

115: // Закрытие платы ППА

116: CloseDevice(HDevice);

117: }

118: //---------------------------------------------------------------------------

Выводы

В ходе выполнения работы изучена операция преобразования функций алгебры логики в текст, приемлемый для языка программирования С++.

С помощью промышленного компьютера и Интегрированной Среды Разработки С++ Builder 5.0 и платы ППА была получена таблица выходной функции, простроенной на основе таблицы от четырёх переменных, комбинации которых мы получили управлением кнопками на лицевой панели установки. Эти сигналы – эквивалент сигналов от устройств автоматики, расположенных на больших расстояниях от компьютера, который выполняет операции по ФУЛ, в соответствии с поступающими входными сигналами. В конечном итоге компьютер выдаёт дискретный сигнал – единицу или ноль, в 16 вариациях входных значений.

Такая система обработки может быть использована, если имеется множество вариаций входных сигналов и одно выходное значение, получаемое по функции алгебры логики.

Соседние файлы в предмете Микропроцессорные информационно-управляющие системы