rs232

4 отговора 229 прегледа
#1

rs232

Bixte li mi obiasni li sledniat kod.Triabva mi driver za vrazka EKA-PC
Thank's
interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ComCtrls, shellapi;


type
TF_SerAPI = class(TForm)
Timer1: TTimer;
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Button3: TButton;
Button4: TButton;
Edit1: TEdit;
CheckBox1: TCheckBox;
Label3: TLabel;
Label4: TLabel;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
Edit2: TEdit;
procedure bt_closeHandleClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var Output,vx: byte;ACP1,ACP2:INTEGER;
F_SerAPI : TF_SerAPI;
Cid : Integer;
DCB: TDCB;

trans:byte;
implementation

{$R *.DFM}

Ot tyk "procedure TF_SerAPI.FormCreate(Sender:TObject);"
do kraia na procedyrata.
procedure TF_SerAPI.FormCreate(Sender: TObject);
var ComTemp : PChar;
timeouts: TCommTimeouts;
Result : DWord;
begin
trans:=0;
ComTemp := 'COM2';
Cid := CreateFile(ComTemp,GENERIC_WRITE OR GENERIC_READ,0,nil,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);

EscapeCommFunction(Cid , SETDTR); // SETRTS

DCB.BaudRate := 19200;
DCB.ByteSize := 8;
DCB.Parity := 0;
DCB.StopBits := 2;
DCB.Flags := 0;
DCB.XonChar := #17;
DCB.XoffChar := #19;
DCB.XonLim := 10;
DCB.XoffLim := 10;
DCB.EofChar := #0;
DCB.EvtChar := #0;
SetCommState(cid,DCB) ;
timeouts.ReadIntervalTimeout:=1;
timeouts.ReadTotalTimeoutMultiplier:=100;
timeouts.ReadTotalTimeoutConstant:=100;
timeouts.WriteTotalTimeoutMultiplier:=100;
timeouts.WriteTotalTimeoutConstant:=100;
SetCommTimeouts(Cid,timeouts) ;
// timer1.enabled:=true;
end;

procedure TF_SerAPI.bt_closeHandleClick(Sender: TObject);
begin

CloseHandle(CID)

end;

procedure TF_SerAPI.FormClose(Sender: TObject; var Action: TCloseAction);
var
Result : DWord;
Overlapped : TOverlapped;
begin
CloseHandle(CID);
end;


procedure TF_SerAPI.Timer1Timer(Sender: TObject);
VAR Input:BYTE;
Result,ModemStat : DWord;
Overlapped : TOverlapped;

PriorityClass, Priority: Integer;
begin if ModemStat and MS_CTS_ON <> 0 then CheckBox2.checked:=true else CheckBox2.checked:=false ;
if ModemStat and MS_DSR_ON <> 0 then CheckBox3.checked:=true else CheckBox3.checked:=false ;;

If (CheckBox1.checked=true) then
begin
Output:=strtoint(edit1.text);
WriteFile(Cid,Output,1,Result,@Overlapped) ;
end;
input:=0;
ReadFile(Cid,Input,2,Result,@Overlapped);
edit2.text:=inttostr(input);
end;


procedure TF_SerAPI.Button1Click(Sender: TObject);
begin
EscapeCommFunction(Cid , CLRDTR);
end;

procedure TF_SerAPI.Button2Click(Sender: TObject);
begin
EscapeCommFunction(Cid , SETDTR);
end;

procedure TF_SerAPI.Button3Click(Sender: TObject);
begin
EscapeCommFunction(Cid , CLRRTS);
end;

procedure TF_SerAPI.Button4Click(Sender: TObject);
begin
EscapeCommFunction(Cid , SETRTS);
end;

end.

Отговор
в отговор на Neznaesht #2

Re: rs232

procedure TF_SerAPI.FormCreate(Sender: TObject);
var ComTemp : PChar;
timeouts: TCommTimeouts;
Result : DWord;
begin
trans:=0;
ComTemp := 'COM2';
Cid := CreateFile(ComTemp,GENERIC_WRITE OR GENERIC_READ,0,nil,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0); - Отваря си файл за четене и запис. В случая - COM2.

EscapeCommFunction(Cid , SETDTR); - Установява DTR-а на COM-а. Разбирай, че това е сигнал за периферното устройство, че започва комуникация

DCB.BaudRate := 19200; - Скорост на комуникация
DCB.ByteSize := 8; - Размер на думата
DCB.Parity := 0; - без контрол по четност
DCB.StopBits := 2; - 2 стоп бита
DCB.Flags := 0;
DCB.XonChar := #17;
DCB.XoffChar := #19;
DCB.XonLim := 10;
DCB.XoffLim := 10;
DCB.EofChar := #0;
DCB.EvtChar := #0;
SetCommState(cid,DCB) ; - инициализира COM-а с горната структура
timeouts.ReadIntervalTimeout:=1; - задава различните таймаути
timeouts.ReadTotalTimeoutMultiplier:=100;
timeouts.ReadTotalTimeoutConstant:=100;
timeouts.WriteTotalTimeoutMultiplier:=100;
timeouts.WriteTotalTimeoutConstant:=100;
SetCommTimeouts(Cid,timeouts) ;
// timer1.enabled:=true;
end;

За повече информация - msdn.microsoft.com

Човешкият ум е ограничен. Глупостта не е.
Отговор
в отговор на Neznaesht #4

Re: rs232

Здравей
предполагам че на теб изпратих кода
Сигурен съм че програмата работи. Ако имаш проблеми се обади.
Не е зле да прегледаш хардуерната част на RS232

Поздрави

Отговор
в отговор на Neznaesht #5

Re: rs232

Male ... kolko mnogo kod !!!

TApdComPort

Отговор