Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.097 c
8-1124723116
nuser
2005-08-22 19:05
2006.01.29
Доступ к тегам mp3-файла


5-1121466615
ATarget
2005-07-16 02:30
2006.01.29
Как создать кнопочку рядом со свойством в инспекторе объектов


1-1135748599
amb1
2005-12-28 08:43
2006.01.29
Как определить время создания DBF файла?


3-1133341500
MU
2005-11-30 12:05
2006.01.29
MS 2000 Server, SQL Server, MSDTC


15-1136312918
PARUS
2006-01-03 21:28
2006.01.29
Взорвался блок питания!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский