Автор работы: Пользователь скрыл имя, 17 Мая 2012 в 18:08, дипломная работа
Объектом исследования - является ЛВС, основанная на технологии Ethernet и ультразвуковой акустический тракт «ТРАК» фирмы “Votum”.
Цель работы - разработать программу на языке Delphi, для управления УЗ дефектоскопом с удаленного компьютера при помощи приложения «Клиент - Сервер».
В процессе работы проводились изучение работы ультразвукового акустического тракта «ТРАК».
В результате работы были расширены функциональные возможности УЗ дефектоскопа, в частности, разработано приложений типа «Клиент-Сервер», позволяющее удаленно управлять дефектоскопом и производить сбор данных через ЛВС
Введение
Ультразвуковая дефектоскопия
1.1 Теневой метод ультразвуковой дефектоскопии
1.2 Эхо - импульсный метод ультразвуковой дефектоскопии
1.3 ''ТРАК'' Акустический модуль
Параллельный интерфейс: LPT-порт
2.1 Традиционный LPT-порт
Организации удаленного соединения.
3.1 Протоколы сети Интернет
3.2 Приложение Клиент-Сервер
Язык программирования - Delphi
4.1 Функциональные задачи при конструировании интерфейса
4.2 Компоненты среды программирования Delphi, использовынные для создания приложения «Клент-Сервер»
Заключение
timer1.Enabled:=true;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
a: byte;
begin
a:=3;
if TcpClient1.Connect then
begin
TcpClient1.SendBuf(a, 1);
TcpClient1.Disconnect;
end
else
MessageDlg('Не
удалось связаться с сервером.'
timer1.Enabled:=false;
Form1.Series1.Clear;
end;
Продолжение программы
Клиента
procedure TForm1.Button4Click(Sender: TObject);
var
a: byte;
begin
a:=2;
if TcpClient1.Connect then
begin
TcpClient1.SendBuf(a, 1);
TcpClient1.Disconnect;
end
else
MessageDlg('Не удалось связаться с сервером.', mtConfirmation, [mbOk], 0);
timer1.Enabled:=false;
end;
procedure TForm1.TcpServer1Accept(
ClientSocket: TCustomIpClient);
begin
if Activated=false then
begin
Activated:=true;
timer1.Enabled:=true;
ClientSocket.ReceiveBuf(Data, 1024);
Activated:=false;
end;
end;
Окончание программы
Клиента
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
a: byte;
begin
TcpServer1.Active := false;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if not Activated then
Draw(Data);
end;
end.
Приложение Б
Программа Сервера
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Sockets, TeEngine, TeeFunci, Series,
TeeProcs, Chart;
Const
GetBufferStatusTest = 1;
type
DataBuffer = array[0..255] of integer;
PDataBuffer = ^DataBuffer;
TForm1 = class(TForm)
Timer1: TTimer;
Host: TEdit;
Port: TEdit;
Label1: TLabel;
Label2: TLabel;
TcpClient1: TTcpClient;
TcpServer1: TTcpServer;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Продолжение
программы Сервера
Button4: TButton;
Chart1: TChart;
Series1: TLineSeries;
TeeFunction1: TAddTeeFunction;
Port2: TEdit;
Label3: TLabel;
CheckBox1: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
procedure
FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Data: DataBuffer;
//Массив данных для
PData: PDataBuffer;
Продолжение программы Сервера
Activated, //Флаг обработки пакета
ClientAvailable: boolean; //Флаг готовности аппаратуры
Command,res: byte;//Буфер
для команд
function Init(): integer; stdcall; external 'trak.dll' name 'Init';
function StartGenerator(): integer; stdcall; external 'trak.dll' name 'StartGenerator';
function TrackPresent(): integer; stdcall; external 'trak.dll' name 'TrackPresent';
function GetDetectBuffer(VB: PDataBuffer): integer; stdcall; external 'trak.dll' name 'GetDetectBuffer';
function GetBufferStatus():
integer; stdcall; external 'trak.dll' name 'GetBufferStatus';
implementation
{$R *.dfm}
Procedure GetDetectBufferTest(var Data: PDataBuffer);
var
i: byte;
begin
res:=res+1;
if res = 255 then res :=0;
for i := 0 to 255 do
Data^[i]:=round(255*sin(((i-
end;
Продолжение
программы Сервера
Procedure Draw(Data: PDataBuffer);//Процедура обновления графика
var
i: byte;
begin
Form1.Series1.Clear;
for i:=0 to 255 do
Form1.Series1.AddXY(i,Data^[i]
end;
procedure TForm1.FormCreate(Sender: TObject);//Инициализация
begin
//Настройка
компонента-сервера и
TcpClient1.RemoteHost := Host.Text;
TcpClient1.RemotePort := Port.Text;
TcpServer1.LocalPort := Port2.Text;
TcpServer1.Active := True;
Init();
PData:=@Data;
command:=0; //Обнуление буфера команд
end;
procedure TForm1.Timer1Timer(Sender: TObject); //Обработка тика таймера
//Включает
себя проверку готовности
Продолжение
программы Сервера
//а также
просмотр буфера команд и
//Здесь же
происходит оправка данных
//Также сдесь происходит отрисовка графика на экране.
begin
case command of
1: if GetBufferStatus <> 0 then
begin
GetDetectBuffer(PData);
If CheckBox1.Checked then
begin
if TcpClient1.Connect then
begin
TcpClient1.SendBuf(PData^, 1024);
TcpClient1.Disconnect;
end
else
begin
CheckBox1.Checked:=false;
MessageDlg('Не удалось
end;
end;
Draw(PData);
StartGenerator();
end;
3: begin
Продолжение программы Сервера
Form1.Series1.Clear;
res:=0;
end;
end;
end;
//Изменить
занчения адреса и порта клиента.
procedure TForm1.Button1Click(Sender: TObject);
begin
TcpClient1.RemoteHost := Host.Text;
TcpClient1.RemotePort := Port.Text;
TcpServer1.LocalPort := Port2.Text;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
command:=1; //Старт
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
command:=3; //Стоп
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
command:=2; //Пауза
Окончание
программы Сервера
end;
//Обработка входящих данных
//Здесь происходит
установка флага занятости,
//Не пересекались в общей для них области данных(переменная command)
procedure TForm1.TcpServer1Accept(
ClientSocket: TCustomIpClient);
begin
if Activated=false then
begin
Activated:=true;
ClientSocket.ReceiveBuf(
CheckBox1.Checked:=true;
Activated:=false;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
TcpServer1.Active := false;//Деактивация сервера при закрытии формы.
end;
end.