Re: COM port
12 отговора
421 прегледа
Re: COM port
Пробвай така (са нямам в момента Delphi под ръка и не знам дали всичко е правилно):
procedure TForm1.Button2Click(Sender: TObject);
var stat : boolean;
data : DWORD;
r1 : TOverlapped;
len : dword;
res : dword;
begin
data := 44;
len := sizeof(data); //това е 4 за DWORD
res := 0;
r1.Internal := 0;
r1.InternalHigh := 0;
r1.Offset := 0;
r1.OffsetHigh := 0;
r1.hEvent := 0;
write(cPort, chr(44));
stat := writefile(cPort, @data, len, @res, @ovr);
Edit2.Text:=IntToStr(res);
{ BOOL WriteFile(
HANDLE hFile, // handle to file to write to
LPCVOID lpBuffer, // pointer to data to write to file
DWORD nNumberOfBytesToWrite, // number of bytes to write
LPDWORD lpNumberOfBytesWritten, // pointer to number of bytes written
LPOVERLAPPED lpOverlapped // pointer to structure needed for overlapped I/O
);}
end;
Re: COM port
I ako na dvamata wi pisne da se zanimavata e gluposti si darapnete nqkoj ot hilqdite gotovi komponenti i si gi polzwajte s zdrawe - izobshto za takiwa turbo standartni zadachi si ima turbo standartni resheniq - nqma smisal da otkriwate koleloto!
------------------------------
I got a COMPILER, and I'm not afraid to use it!
------------------------------
I got a COMPILER, and I'm not afraid to use it!
Re: COM port
значи това е на Delphi6/W2k AS, няма причини Delphi7 да се държи различно.
промени:
Button1
FILE_FLAG_OVERLAPPED е сменено с 0,
една допълнителна проверка на CreateFile result-а
Button2
пращането е с PChar, праща се със WriteFile, един char - 44(DEC)=2C(HEX),
нама проблем да пратиш и още няколко...
----------------------------
прочее, идеята за Google-то е доста разумна, особено ако се докараш до четене от порта :-)))
--------------------------------------
Започва Път от моят праг...
промени:
Button1
FILE_FLAG_OVERLAPPED е сменено с 0,
една допълнителна проверка на CreateFile result-а
Button2
пращането е с PChar, праща се със WriteFile, един char - 44(DEC)=2C(HEX),
нама проблем да пратиш и още няколко...
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Edit2: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
cPort: THandle;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var P: string;
DCB: TDCB;
prm: integer;
begin
P := '\\.\COM1';
cPort := createfile(PChar(P), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
DCB.BaudRate := 9600;
DCB.ByteSize := 8;
DCB.Parity := 0;
DCB.StopBits := 1;
DCB.XonLim := 6144;
DCB.XoffLim := 4096;
if cPort = INVALID_HANDLE_VALUE then begin
showmessage('CreateFile: Error #' + IntToStr(GetLastError));
end;
SetupComm(cPort, 8192, 8192 );
SetCommState(cPort, DCB);
SetCommMask(cPort, EV_RXCHAR or EV_TXEMPTY);
prm := DCB.Flags;
Label1.Caption := 'Connection = ' + inttohex(prm, 8);
{ HANDLE CreateFile(
LPCTSTR lpFileName, // pointer to name of the file
DWORD dwDesiredAccess, // access (read-write) mode
DWORD dwShareMode, // share mode
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // pointer to security attributes
DWORD dwCreationDistribution, // how to create
DWORD dwFlagsAndAttributes, // file attributes
HANDLE hTemplateFile // handle to file with attributes to copy
);}
end;
procedure TForm1.Button2Click(Sender: TObject);
var stat : boolean;
data : DWORD;
ovr : ^TOverLapped;
r1 : TOverlapped;
len : ^dword;
l1 : dword;
res : ^dword;
r2 : dword;
bufer : PChar;
BytesWritten : Cardinal;
begin
data := 44;
l1 := 1;
len := @l1;
r2 := 0;
res := @r2;
r1.Internal := 0;
r1.InternalHigh := 0;
r1.Offset := 0;
r1.OffsetHigh := 0;
r1.hEvent := 0;
ovr := @r1;
//write(cPort, chr(44));
GetMem(bufer,256);
bufer := chr(44);
if not WriteFile(cPort, bufer^, length(bufer), BytesWritten, nil) then begin
showmessage('WriteFile' + #10 + #13 + 'Error #' + IntToStr(GetLastError));
end;
//stat := writefile(cPort, data, len ^, res ^, @ovr);
Edit2.Text:=IntToStr(res ^);
{ BOOL WriteFile(
HANDLE hFile, // handle to file to write to
LPCVOID lpBuffer, // pointer to data to write to file
DWORD nNumberOfBytesToWrite, // number of bytes to write
LPDWORD lpNumberOfBytesWritten, // pointer to number of bytes written
LPOVERLAPPED lpOverlapped // pointer to structure needed for overlapped I/O
);}
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
CloseHandle(cPort);
Close;
end;
end.
----------------------------
прочее, идеята за Google-то е доста разумна, особено ако се докараш до четене от порта :-)))
--------------------------------------
Започва Път от моят праг...
Re: COM port
Е, във всички случаи ще му трябва и четене, защото комуникацията с фискалния принтер е двупосочна. Той връща резултат от операцията в т.ч. и съобщения за грешки. Да не говорим, че някои операции са просто заявка за данни (дневно извлечение и др.). Още по-засукано става и като добавиш тимеаут-ите.
Ако не ме лъже паметта Datex дават една DLL, която осъществява комуникацията и решава проблемите по интерпретацията, но вече не си спомням защо, на мен ми се наложи да пиша своя.
Във всеки случай на [линк] има богат избор от компоненти за работа с COM порта
Ако не ме лъже паметта Datex дават една DLL, която осъществява комуникацията и решава проблемите по интерпретацията, но вече не си спомням защо, на мен ми се наложи да пиша своя.
Във всеки случай на [линк] има богат избор от компоненти за работа с COM порта
Re: COM port
Ами щото M$ са тръшнали като част от ОС-а съответния компонент - Microsoft COM Control. В него е нахакано всичко квото може човек да пожелае да прави с COM порта - особенно далавераджийско е да работиш със event-ите му.
чети и дишай по-леко
чети и дишай по-леко
Re: COM port
ми началник, аз навремето първо с него пробвах... после се юрнах да си пиша... накрая си дръпнах от мрежата ([линк], обаче сайта нещо е сговнен), не е съвсем читаво, ама му знам кусурите :-))
та ако имаш малко Delphi код - ще ми е интересно да видя къде съм се оплескал?
--------------------------------------
Започва Път от моят праг...
та ако имаш малко Delphi код - ще ми е интересно да видя къде съм се оплескал?
--------------------------------------
Започва Път от моят праг...
Re: COM port
Не уточняваш точно къде, кога и как се получава AV. Според мен в извикването на WriteFile пред последния параметър не трябва да има @, а да си бъде просто ovr или @r1. Също така ми се струва, че ще бъде много по-добре ако структурата DCB бъде инициализирана изцяло, а не частично както е в твоя случай. Ако не ти се инициализира всичко, предполагам може да извикаш първо GetCommState и после да промениш само членовете, които искаш.
Re: COM port
Навремето правихме програма дето да приема и предава SMS-та през ir порт. Ползвахме точно MSCOMM и Delphi, и единствената трудност дето срещнах беше да видя че има такъв. Другата трудност беше от GSM-а - оказа се че тогва от апаратите дето пробвахме само Nokia 7110 работеше добре.
M$ чарка се ползва масово при програми правени с RAD средства - Delphi и VB. Винаги съм се чудел защо куцо и сакато се юрка да сваля компоненти и прочee, явно повечето хора обичат новите и непознати неща.
чети и дишай по-леко
M$ чарка се ползва масово при програми правени с RAD средства - Delphi и VB. Винаги съм се чудел защо куцо и сакато се юрка да сваля компоненти и прочee, явно повечето хора обичат новите и непознати неща.
чети и дишай по-леко
Ето и отговора ....
Ами защото М$ е много и куц и сакат ;-))) -компонента де - сериозно, в много форуми реват - особенно когато става дума за двупосочна комуникация или за приемане на данни - има много сериозни проблеми - особенно за процеси критични от към време.
Не съм обръщал много много внимание на проблемите които се дискутират - но никой не желае да го употребява след като се е сблъскал с него.
А пропо GSM - ите - защо не пробвахте и други компоненти за връзка - сетих се че TurboPower Async Pro вече е фрее!!!!
Не съм обръщал много много внимание на проблемите които се дискутират - но никой не желае да го употребява след като се е сблъскал с него.
А пропо GSM - ите - защо не пробвахте и други компоненти за връзка - сетих се че TurboPower Async Pro вече е фрее!!!!
Редактирано от PhantomAS на
Re: Ето и отговора ....
Хихихи... ма недей ме разсмива... Тоя "куц" и "сакат" компонент го ползвах накрая - точно след като бяхме точили едно кило компоненти и прочее. За "критичните" откъм време процеси - че той самия COM порт не е достатъчно бърз че да затрудни каквото и да е! Самия факт че се използва от Windows-а говори че е достатъчно стабилен - щото се ползва непрескъснато и е преживял достатъчно ъпдейти - ако са му трябвали.
Задай си въпроса защо останалите дивотии за COM комуникация стават free? Просто щото е безсмислено да ги ползваш - примера с WinAMP и Media Player е достатъчно показателен, да не говорим за браузъри и прочее...
чети и дишай по-леко
Задай си въпроса защо останалите дивотии за COM комуникация стават free? Просто щото е безсмислено да ги ползваш - примера с WinAMP и Media Player е достатъчно показателен, да не говорим за браузъри и прочее...
чети и дишай по-леко
Re: Ето и отговора ....
COM порта си е достатъчно бърз, стига да го ползваш както трябва, дори и с компоненти писани на Delphi - MS си имат достатъчно примери, които просто трябва да се препишат.
Писал съм програма на Delphi, която по два COM порта упрявлява два професионални магнетофона и прави линеен монтаж с точност до frame.
Нямаш идея колко работа можеш да свършиш с COM порта за 20ms...
Говоря за NT/2K/XP разбира се. Другите тамагочита не ги броя...
---
Не е важно да си добър, важното е да си ман-и-як!
Писал съм програма на Delphi, която по два COM порта упрявлява два професионални магнетофона и прави линеен монтаж с точност до frame.
Нямаш идея колко работа можеш да свършиш с COM порта за 20ms...
Говоря за NT/2K/XP разбира се. Другите тамагочита не ги броя...
---
Не е важно да си добър, важното е да си ман-и-як!
Re: COM port
ми да почерпя, що да не почерпя :-)))
от известно време ми се мота идечта за една бирено-делфииска конференция...
--------------------------------------
Започва Път от моят праг...
от известно време ми се мота идечта за една бирено-делфииска конференция...
--------------------------------------
Започва Път от моят праг...