Вниз
Скачать: CL | DM;

Чтение с СОМ-порта...   Найти похожие ветки 

← →
Devider ©   (2005-11-18 15:30) [0]

Необходимо считать с СОМ, к которому подключен девайс для считывания с магнитной карты. Хочу, в Edit1 появился номер карты. Пишу:
// переменные :
   strdcb:DCB;
   cto:COMMTIMEOUTS;
   hCom  :Integer;
   chOut :array[1..100] of char;
   chIn  :array[1..100] of char;
   Temp  :DWORD;
   hdc :HDC;
   i:integer;
   a:integer;
// настройки порта при создании формы:
hCom:=CreateFile("COM1",GENERIC_WRITE and GENERIC_READ,0,psa,OPEN_EXISTING,0,0); //Ñîçäàåì CÎÌ-ïîðò
  GetCommState(hCom,strdcb);
 strdcb.BaudRate:=CBR_9600;
 strdcb.ByteSize:=8;
 strdcb.Parity:=NOPARITY;
 strdcb.StopBits:=ONESTOPBIT;
 SetCommState(hCom,strdcb);
 cto.ReadIntervalTimeout := 0;
 cto.ReadTotalTimeoutConstant:=0;
 cto.ReadTotalTimeoutMultiplier:=10;
 cto.WriteTotalTimeoutConstant:=0;
 cto.WriteTotalTimeoutMultiplier:=0;
 SetCommTimeouts(hCom,cto);
 SetupComm(hCom,sizeof(chOut),sizeof(chOut));
 PurgeComm(hCom,PURGE_RXCLEAR);
 PurgeComm(hCom,PURGE_TXCLEAR);
// запущаем таймер
                               ComTimer.Enabled:=true;
end;
// по таймеру происходит вот что:
   ReadFile(hCom,chOut,100,Temp,nil);
   Edit1.Text:=chOut;
А в Эдите ничего не отображается. Непойму, почему.
Помогите разобраться, пожалуйста!


← →
Digitman ©   (2005-11-18 15:48) [1]

ты что-либо слышал про отличие функции и процедуры ?


← →
Devider ©   (2005-11-18 15:53) [2]

ты не мог бы поконкретнее?


← →
Leonid Troyanovsky ©   (2005-11-18 16:14) [3]


> Devider ©   (18.11.05 15:53) [2]
> ты не мог бы поконкретнее?


Можно и конкретней.
Однако, для этого необходимо уяснить уровень подготовки.

Есть ли смысл рассказывать про космические корабли,
бороздящие просторы .. Большого театра.

--
Regards, LVT.


← →
Devider ©   (2005-11-18 16:27) [4]

Ну, на уровне осознания отличий функции от процедуры, это однозначно. Я вообще льщу себе надеждой, что повыше будет. Да объясните уже, не томите, мож у меня мозг просто к концу недели спекся!
Предистория такая: есть аналогичный код на С++, а это его попытка перевести на Дельфи.


← →
Ботвин Дмитрий   (2005-11-18 16:31) [5]

Devider ©   (18.11.05 15:30)  

ReadFile что возвращает? И что пишет GetLastError по этому поводу?


← →
Leonid Troyanovsky ©   (2005-11-18 16:36) [6]


> Devider ©   (18.11.05 16:27) [4]
> Ну, на уровне осознания отличий функции от процедуры, это
> однозначно. Я вообще льщу себе надеждой, что повыше будет.


Например, ReadFile

If the function fails, the return value is zero.
To get extended error information, call GetLastError.

Хотя, положено нАчать еще раньше, т.е. c CreateFile
If the function fails, the return value is INVALID_HANDLE_VALUE.
To get extended error information, call GetLastError.  

Т.е., Win32Check тебе в руки и вперед.
И нам понятней будет.

--
Regards, LVT.


← →
Devider ©   (2005-11-18 18:09) [7]

Порт открывается, закрывается, как в известной детской передаче.
Оказалось, косячит ReadFile().
По крайней мере, на строку
if (ReadFile(hCom,chOut,100,Temp,nil) = false) then Edit1.Text := "Опаньки";
я это "Опаньки" и получаю...


← →
Devider ©   (2005-11-18 18:57) [8]

Фсе я наврал.
hCom:=CreateFile("COM1",GENERIC_READ,0,psa,OPEN_EXISTING,0,0);
if (hCom = INVALID_HANDLE_VALUE) then exit;
//.....................................
//настройки порта, см выше.
ShowMessage("Done"); // это последняя строчка
Если я вижу это собщение, значит, дескриптор все-таки верный, правильно?
Но:
b:=ReadFile(hCom,chOut,100,Temp,nil);
if (b = false) then begin
 Edit1.Text := SysErrorMessage(GetLastError);
 exit;
end;
Edit1.Text := chOut;
этот кусок выдает "неверный дескриптор".. Это как понять?


← →
Devider ©   (2005-11-18 19:03) [9]

Вернее даже так:
после:
hCom:=CreateFile("COM1",GENERIC_READ,0,psa,OPEN_EXISTING,0,0);
SysErrorMessage(GetLastError) выдает "Неверная попытка доступа к адресу памяти". Ниччего не понимаю...


← →
tesseract ©   (2005-11-20 18:19) [10]


port:pchar;
port="COM1";
hCom:=CreateFile(Port,GENERIC_READ OR GENERIC_WRITE,0,NIL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
// Если неверен выходим
if hCom=INVALID_HANDLE_VALUE then exit;

так точно работает



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.028 c
15-1136754461
DillerXX
2006-01-09 00:07
2006.01.29
Клиническая смерть


15-1136193020
SergP
2006-01-02 12:10
2006.01.29
ИЕ. Начиная с какой версии поддерживается длина ключа 128 бит?


1-1135232351
Layner
2005-12-22 09:19
2006.01.29
Братцы, подскажите, как в MDI прил. открыть невидимо MDI форму


6-1129925944
Navi
2005-10-22 00:19
2006.01.29
В локальной сети TSocketClient не работает.


3-1133363995
keal
2005-11-30 18:19
2006.01.29
как востановить данные после delete?




   Наверх