13. ГОСТ 12.1.045 "ССБТ. Электростатические поля. Допустимые уровни на рабочих местах и требования к проведению контроля"
14. ГОСТ 12.1.005-88 "ССБТ Общие санитарно-гигиенические требования к воздуху рабочей зоны"-Введ. 01.01.89.
15. ГОСТ 12.1.003-83 "ССБТ Шум. Общие требования безопасности"-Введ. 01.07.84.
16. ГОСТ 12.1.004-91." ССБТ. Пожарная безопасность. Общие требования". ‑Введ. 01.07.92.
17. СНиП 2.04.05-91 " Строительные нормы и правила. Отопление, вентиляция и кондиционирование воздуха"-М.:Стройиздат.,1987 р.
18. ГОСТ 12.1.038-82 "ССБТ Электробезопасность. Предельно-допустимые уровни напряжения прикосновения и токов". -Введ. 01.07.83.
19. ДСанПіН З.З.2. 007 1998. Державні санітарні правила і норми роботи з візуальними дисплейним терміналами електронно-обчислювальних машин.
20. ГОСТ 14254-80. Электрооборудование напряжением до 1000 В. Оболочки. Степени защиты. ‑Введ. 01.01.81.
21. ГОСТ 12.2.007.0-75*. ССБТ. Изделия электротехнические. Общие требования безопасности. ‑Введ. 01.01.78.
22. ГОСТ 12.1.030-81*. ССБТ. Электробезопасность. Защитное заземление. Зануление. ‑Введ. 01.07.82.
23. Перерва П.Г. Управление промышленным маркетингом. Харьков, Основа, 1993.
24. Современный маркетинг / под ред. Е.К.Хруцкого. – М.: Прогресс, 1991.
У ході виконання научно дослідницької роботи були розглянуті основні технічні характеристики лабораторного стенду EV8031, а також розглянутий лабораторний практикум з курсу мікроконтроллерних систем.
У ході роботи були розглянуті основні характеристики та ресурси мікроконтроллера ATMega8515 та стенду EV8031. Були обчислені його швидкістні характеристики, які необхідні для розробки віртуального вимірювального комплексу.
Було з’ясовано, що дуже складно побудувати такі пристрої як логічний аналізатор та генератор слів на програмній базі мікроконтроллеру. Але отримані характеристики повністю вдовільнили постановлену задачу.
Одночасний доступ двох програм до послідовного поорту неможливий, тому для вирішення задачі було прийнято рішення обь’єднати дві програми у один програмний модуль, але з двома вікнами, для зручності у користуванні.
Побудова інтерфейсу була взята із багатовідомої системи моделювання електронних пристроїв Electronic Workbench, де є аналогічні віртуальні пристрої.
У результаті тестування створеного програмного забеспечення, були отримані вдовільні показники. Як було зазначено вище, використання таймеру не призводить до великоі похибки при вимірюванні на швидкості вхідної послідовності 50Гц.
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ
“ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ”
Кафедра: “Обчислювальна техніка та програмування”
Завідуючий кафедрою ОТП
__________ /xxxx.А./
"___" __________ 2009р.
ВІРТУАЛЬНИЙ ВИМІРЮВАЛЬНИЙ КОМПЛЕКС НА БАЗІ УЧБОВОГО ЛАБОРАТОРНОГО СТЕНДУ EV8031
Текст програми
ЛИСТ ЗАТВЕРДЖЕННЯ
xxxx.03077-01 12 01-1-ЛЗ
РОЗРОБНИКИ Керівник проекту _____________/xxx./ “_____”_________2009р. Виконавець Студент групи x /xxxxxx./ “_____”____________2009р. |
Харків 2009
ЗАТВЕРДЖЕНО
xxx.03077-01 12 01-1-ЛЗ
ВІРТУАЛЬНИЙ ВИМІРЮВАЛЬНИЙ КОМПЛЕКС НА БАЗІ УЧБОВОГО ЛАБОРАТОРНОГО СТЕНДУ EV8031
Текст програми
xxxxx.03077-01 12 01-1
Аркушів _48_
Харків 2009
ЗМІСТ
1 ТЕКСТ ПРОГРАМНОГО ЗАБЕСПЕЧЕННЯ ПК
1.1 Текст програмного модуля логічного аналізатора, Unit1.pas
2 Тексти програмного модуля генератора слів, Unit2.pas
3 Текст програмного модуля головного вікна ВВК, , Unit3.pas
2 ТЕКСТ ПРОГРАМНОГО ЗАБЕСПЕЧЕННЯ МК
2.1 Текст програмного забеспечення ВВК мікроконтроллера, main.asm
Ім’я данного файлу : Unit1.pas
Функціональне призначення : програмне забеспечення ПК, модуль логічного аналізатора
Файл створений для дипломного проекта захисту кваліфікації фахівця
За фахом : Системне програмування;
Тема проекту : Віртуальний вимірювальний комплекс на базі учбового лабораторного стенду;
Керівник : М.В. Скородєлов, викладач кафедри ОТП;
Розробник : О.О. Ісмаілов, студент групи КІТ-23а;
Рік розробки : 2009.
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, StdCtrls, ComCtrls, Buttons, ComDrv32, SerialNG, Mask, Math;
type TForm1 = class(TForm)
Chart1: TChart;
Series1: TLineSeries;
Series2: TLineSeries;
Series3: TLineSeries;
Series4: TLineSeries;
Series5: TLineSeries;
Series6: TLineSeries;
Series7: TLineSeries;
Series8: TLineSeries;
ColorBox1: TColorBox;
ColorBox2: TColorBox;
ColorBox3: TColorBox;
ColorBox4: TColorBox;
ColorBox5: TColorBox;
ColorBox6: TColorBox;
ColorBox7: TColorBox;
ColorBox8: TColorBox;
StaticText1: TStaticText;
StaticText2: TStaticText;
StaticText3: TStaticText;
StaticText4: TStaticText;
StaticText5: TStaticText;
StaticText6: TStaticText;
StaticText7: TStaticText;
StaticText8: TStaticText;
ScrollBar1: TScrollBar;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
StaticText9: TStaticText;
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
BitBtn1: TBitBtn;
SerialPortNG1: TSerialPortNG;
TrackBar1: TTrackBar;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
MaskEdit1: TMaskEdit;
Label3: TLabel;
Label4: TLabel;
MaskEdit2: TMaskEdit;
Label5: TLabel;
procedure FormCreate(Sender: TObject);
procedure ScrollChange(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure SpeedButton1Click(
Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure BitBtn1Click(Sender: TObject);
procedure SerialPortNG1RxClusterEvent(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
procedure ComboBox2Change(Sender: TObject);
procedure MaskEdit2Change(Sender: TObject);
private
{ Private declarations }
scale:word;
dwError:dword;
pName:PWideChar;
flag:byte;
function StrToIntM(str:string):dword;
public
{ Public declarations }
end;
TArrBuf512 = array[0..511] of byte;
Var Form1: TForm1;
implementation
uses SerialNGBasic;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
i:word;
s:string;
begin
SerialPortNG1.Active := True;
scale := 500;
ScrollBar1.Visible := False;
Chart1.BottomAxis.Minimum := 0;
Chart1.BottomAxis.Maximum := scale;
Series1.Clear;
Series2.Clear;
Series3.Clear;
Series4.Clear;
Series5.Clear;
Series6.Clear;
Series7.Clear;
Series8.Clear;
for i := 0 to 500 do
begin
Series1.AddXY(i, ((i mod 1)*0.5)+0.25, '', ColorBox1.Selected);
Series2.AddXY(i, ((i mod 2)*0.5)+1.25, '', ColorBox2.Selected);
Series3.AddXY(i, ((i mod 2)*0.5)+2.25, '', ColorBox3.Selected);
Series4.AddXY(i, ((i mod 2)*0.5)+3.25, '', ColorBox4.Selected);
Series5.AddXY(i, ((i mod 2)*0.5)+4.25, '', ColorBox5.Selected);
Series6.AddXY(i, ((i mod 2)*0.5)+5.25, '', ColorBox6.Selected);
Series7.AddXY(i, ((i mod 2)*0.5)+6.25, '', ColorBox7.Selected);
Series8.AddXY(i, ((i mod 2)*0.5)+7.25, '', ColorBox8.Selected);
end;
end;
procedure TForm1.ScrollChange(Sender: TObject);
begin
Chart1.BottomAxis.Minimum := ScrollBar1.Position;
Chart1.BottomAxis.Maximum := ScrollBar1.Position + scale;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if (scale < 500) then
scale := scale + 10;
if (scale = 500) then
ScrollBar1.Visible := False
else
ScrollBar1.Visible := True;
ScrollBar1.Max := 500 - scale;
if (ScrollBar1.Position > (500 - scale)) then
ScrollBar1.Position := (500 - scale);
Chart1.BottomAxis.Minimum := ScrollBar1.Position;
Chart1.BottomAxis.Maximum := ScrollBar1.Position + scale;
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
if (scale > 0) then
scale := scale - 10;
if (scale = 500) then
ScrollBar1.Visible := False
else
ScrollBar1.Visible := True;
ScrollBar1.Max := 500 - scale;
Chart1.BottomAxis.Minimum := ScrollBar1.Position;
Chart1.BottomAxis.Maximum := ScrollBar1.Position + scale;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SerialPortNG1.Active := False;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
s:string;
begin
if (ComboBox2.ItemIndex <> -1) and (ComboBox1.ItemIndex <> -1) then
begin
s := ' ';
s[1] := char($FF);
s[2] := char($AA);
s[3] := char($3A);
s[4] := char((((ComboBox1.ItemIndex shl 1) or byte(RadioButton2.Checked))or (ComboBox2.ItemIndex shl 5)));
SerialPortNG1.SendString(s);
flag := 1;
end
else
MessageBox(0, 'Необходимо указать номер пускового канала и выбрать тактовый генератор!', 'Ошибка', MB_OK or MB_ICONINFORMATION);
end;
procedure TForm1.SerialPortNG1RxClusterEvent(
Sender: TObject);
var
i:integer;
n:integer;
p:^TArrBuf512;
size:integer;
error:DWord;
begin
n := SerialPortNG1.NextClusterSize;
if n >= 0 then
begin
p := SerialPortNG1.ReadNextCluster(size, error);
if (flag=1) then
begin
Series1.Clear;
Series2.Clear;
Series3.Clear;
Series4.Clear;
Series5.Clear;
Series6.Clear;
Series7.Clear;
Series8.Clear;
for i := 0 to n do
begin
Series8.AddXY(i, -(((p^[i] shr 7) and 1)*0.5)+7.75, '', ColorBox8.Selected);
Series7.AddXY(i, -(((p^[i] shr 6) and 1)*0.5)+6.75, '', ColorBox7.Selected);
Series6.AddXY(i, -(((p^[i] shr 5) and 1)*0.5)+5.75, '', ColorBox6.Selected);
Series5.AddXY(i, -(((p^[i] shr 4) and 1)*0.5)+4.75, '', ColorBox5.Selected);
Series4.AddXY(i, -(((p^[i] shr 3) and 1)*0.5)+3.75, '', ColorBox4.Selected);
Series3.AddXY(i, -(((p^[i] shr 2) and 1)*0.5)+2.75, '', ColorBox3.Selected);
Series2.AddXY(i, -(((p^[i] shr 1) and 1)*0.5)+1.75, '', ColorBox2.Selected);
Series1.AddXY(i, -(( p^[i] and 1)*0.5)+0.75, '', ColorBox1.Selected);
end;
flag := 0;
end;
end;
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
Edit1.Text := IntToStr(TrackBar1.Position);
end;
procedure TForm1.ComboBox2Change(Sender: TObject);
begin
if ComboBox2.ItemIndex = 7 then
begin
MaskEdit1.Visible := true;
Label3.Visible := true;
MaskEdit1.Text := '';
end
else
begin
MaskEdit1.Visible := False;
Label3.Visible := false;
end;
end;
procedure TForm1.MaskEdit2Change(Sender: TObject);
begin
if MaskEdit2.Text <> '' then
if StrToIntM(MaskEdit2.Text) > 65535 then
MaskEdit2.Text := '65535';
end;
function TForm1.StrToIntM(str:string):dword;
var
i,num:integer;
begin
num := 0;
if (length(str) > 0) and (length(str) < 6) then
for i := length(str) downto 1 do
if ((str[i] >= '0')and(str[i] <= '9')) then
begin
num := num +
(byte(str[i])-byte('0'))*
Round(Power(10,length(str)-i));
end;
StrToIntM := num;
end;
end.
Ім’я данного файлу : Unit2.pas
Функціональне призначення : програмне забеспечення ПК, модуль генератора слів
Файл створений для дипломного проекта захисту кваліфікації фахівця
За фахом : Системне програмування;
Тема проекту : Віртуальний вимірювальний комплекс на базі учбового лабораторного стенду;
Керівник : М.В. Скородєлов, викладач кафедри ОТП;
Розробник : О.О. Ісмаілов, студент групи КІТ-23а;
Рік розробки : 2009.
unit Unit2;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons, Mask;