Форум: "Система";
Текущий архив: 2003.03.13;
Скачать: [xml.tar.bz2];
ВнизПроблема с Модемом Найти похожие ветки
← →
ksa3003 (2003-01-15 10:01) [0]Народ отправляю сообщение модему,а тот ГАД в ответ молчит как, партизан.Если кто рабатал с модемами,может подскажити???
← →
Vad (2003-01-16 01:25) [1]Ты не сообщения отправляй, а команды!
← →
ksa3003 (2003-01-16 06:41) [2]Так я и отправляю допустим ATI иии-и-и ничего. нет в буфере данных.
← →
Digitman (2003-01-16 11:56) [3]ATI <cr>
← →
ksa3003 (2003-01-16 13:00) [4]Неработает.Может ктонибуть даст исходник плиззз(если не жалко)
← →
Digitman (2003-01-16 13:05) [5]> ksa3003
> Неработает
Чего не работает-то ? Код-то свой покажи) ... чего ты твм творишь - совершенно непонятно ... в "угадай с 3-х раз" будем играть ?
← →
ksa3003 (2003-01-16 13:20) [6]Щас будет
← →
ksa3003 (2003-01-16 13:23) [7]procedure TForm1.Button1Click(Sender: TObject);
var
dcb : TDcb;
hCom : THandle;
fSuccess : boolean;
dwRead : DWORD;
cs:TcomStat;
s:string;
CharArray : array[0..100000] of char;
fileOut : file of char;
i : integer;
begin
hCom := CreateFile(PChar("COM1"),GENERIC_READ+GENERIC_write,0,nil,OPEN_EXISTING,0,0); //получение указателя на СОМ2
try
fSuccess:= GetCommState(hCom, dcb);
dcb.BaudRate := CBR_9600;
dcb.ByteSize := 8;
dcb.Parity := NOPARITY;
dcb.StopBits := ONESTOPBIT;
fSuccess := SetCommState(hCom, dcb);
except
ShowMessage("Error");
end;
memo3.text:=""; s:="at&v" + #13 + #10;
dwRead:=0;
writeFile(hCom, Pchar(s)^, length(s), dwRead, nil);
dwRead:=0;
for i:=0 to 1000 do
begin
memo1.text:=inttostr(cs.cbinQue);
memo2.text:=inttostr(cs.cbOutQue);
ReadFile(hCom, CharArray[i], 1, dwRead, nil);
memo3.text:=memo3.text+CharArray[i];
end;
AssignFile(FileOut,"c:\out.txt");
Rewrite(FileOut);
for i:=0 to 10 do
begin
Application.ProcessMessages;
Write(FileOut,CharArray[i]);
end;
CloseFile(FileOut);
CloseHandle(hCom);
end;
end.
Вот !!!
← →
Digitman (2003-01-16 13:37) [8]вот это вот :
> writeFile(hCom, Pchar(s)^, length(s), dwRead, nil);
с какого боку ты разыменование-то делаешь ?
2-й параметр в вызове writeFile() объявлен как const Buffer; !!!
ф-ция здесь ожидает любой указатель, передаваемый по значению
а ты что передаешь ? не значение указателя, а значение по адресу, на который ссылается указатель ! Одним словом - хрень всякую передаешь, а не at&v<cr> ))))
вот он тебе и не отвечает, потому как на хрень реагировать вовсе не обязан))))
← →
ksa3003 (2003-01-16 13:54) [9]Ладно вместо второй хрене поставим string и всеравно нифига уже
пробовал
← →
Anatoly Podgoretsky (2003-01-16 14:02) [10]Это как поставил?
← →
ksa3003 (2003-01-16 14:05) [11]Примерно так
s:string;
s:="ati";
writeFile(hCom, s,length(s), dwRead, nil);
← →
Anatoly Podgoretsky (2003-01-16 14:11) [12]Вот опять неверно, ты бы сразу когда говоришь, что сделал правильно, приводилбы свой правильный код :-)
Pchar(s)
← →
Digitman (2003-01-16 14:13) [13]
> Примерно так
> s:string;
> s:="ati";
> writeFile(hCom, s,length(s), dwRead, nil);
еще большая "хрень")))
ладно, не парься ... чувствуется, до осознания необходимости читать книги по Паскалю, ты еще не созрел)
> writeFile(hCom, PChar(s),length(s), dwRead, nil);
← →
ksa3003 (2003-01-16 14:23) [14]Нашёл каяк.
s:="ati"+"<cr>";
writeFile(hCom, Pchar(s)^, length(s), dwRead, nil);
B всеравно тишина
← →
Digitman (2003-01-16 14:28) [15]
> ksa3003 © (16.01.03 14:23)
> Нашёл каяк.
> s:="ati"+"<cr>";
> writeFile(hCom, Pchar(s)^, length(s), dwRead, nil);
> B всеравно тишина
)))))))))))
ему про фому, он все - про ерему гнет )))))
я тебе уже дал верный код ! см. Digitman © (16.01.03 14:13)
← →
ksa3003 (2003-01-16 14:29) [16]Нету уменя описания.
Было бы не полез бы.
Я всего то прошу кусочек работающего кода
(что бы скинула и прочитала из порта)
← →
Digitman (2003-01-16 14:32) [17]
> Нету уменя описания.
> Было бы не полез бы.
Какого описания ? Ф-ции WriteFile() ?
Не выдумывай - оно у тебя перед носом, в "Win32 API Programmers reference help"
Равно как и декларация ф-ции для ее использования в проложении - в модуле Windows.pas
> Я всего то прошу кусочек работающего кода
Ну дал я тебе этот "кусочек" уже !! Чего ж тебе еще надобно, старче ?))))
← →
ksa3003 (2003-01-16 14:39) [18]Ну не работает даже так.
Как работает WriteFile() я,знаю.
Мне нужен кусок программы которая работает , а эта пересылает
, а буфер пустой, я и хочу разабрать в чём дело.
← →
Reindeer Moss Eater (2003-01-16 14:42) [19]Попробуй протереть модем от пыли
← →
Anatoly Podgoretsky (2003-01-16 14:48) [20]ksa3003 © (16.01.03 14:39)
Ну так наверно опять "правильный" код, ты бы уж сразу прямо просил, напиши за меня программу.
← →
Digitman (2003-01-16 14:49) [21]
> ksa3003
Приведи самый последний вариант того же кода, с учетом внесенных исправлений
> а эта пересылает
> , а буфер пустой
А хрен его знает, о чем ты здесь говоришь) ..
Кто такая "эта" ? Куда и чего пересылает ? Ума не приложу)...
И ты вообще о каком буфере речь-то ведешь ?
p.s. и что, даже индикатор SD не "моргает" на модеме в момент WriteFile() ? Иль не удосужился поинтересоваться лампочками на модеме ?
← →
Игорь Шевченко (2003-01-16 14:50) [22]Digitman © (16.01.03 13:37)
> с какого боку ты разыменование-то делаешь ?
> 2-й параметр в вызове writeFile() объявлен как const Buffer;
> !!!
>
> ф-ция здесь ожидает любой указатель, передаваемый по значению
>
> а ты что передаешь ? не значение указателя, а значение по
> адресу, на который ссылается указатель !
?????
При WriteFile (....Pchar(s),... ) Будет передана ссылка на указатель, а не на то, на что этот указатель указывает
← →
ksa3003 (2003-01-16 14:51) [23]Модемчик чист :)
← →
Reindeer Moss Eater (2003-01-16 15:02) [24]CmdStr:="ATI"#13#10;
WriteFile(....CmdStr[1],.....);
← →
ksa3003 (2003-01-16 15:02) [25]
procedure TForm1.Button1Click(Sender: TObject);
VAR
dcb : TDcb;
fSuccess : boolean;
dwRead : DWORD;
CharArray : array[0..10] of char;
fileOut : file of char;
i : integer;
s:string;
s1:Pchar;
begin
hCom := CreateFile(PChar("COM1"),GENERIC_READ+GENERIC_write,0,nil,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
try
fSuccess:= GetCommState(hCom, dcb);
dcb.BaudRate := CBR_9600;
dcb.ByteSize := 8;
dcb.Parity := NOPARITY;
dcb.StopBits := ONESTOPBIT;
fSuccess := SetCommState(hCom, dcb);
except
ShowMessage("Error");
end;
s:="ati"+"<cr>";
//s1:=s;
dwRead:=0;
WriteFile(hCom, s, Length(s), dwRead, nil);
memo1.text:="";
ShowMessage("Ok!!") ;
for i:=0 to 10 do
CharArray[i]:="0";
begin
end;
AssignFile(FileOut,"c:\COM.txt");
Rewrite(FileOut);
for i:=0 to 10 do
begin
Application.ProcessMessages;
Write(FileOut,CharArray[i]);
end;
CloseFile(FileOut);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
edit1.Text:=inttostr(ComStat.cbInQue );
edit2.Text:=inttostr(ComStat.cbOutQue );
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
CloseHandle(hCom);
end;
end.
Если я пишу WriteFile(.. Pchar(s)...), тогда ошибка при компиляции, приходится писать WriteFile(.. s...), А модем даже лампочкми не мигает.
← →
gsu (2003-01-16 15:03) [26]>> ksa3003 ©
и питание проверь (-:|~
← →
ksa3003 (2003-01-16 15:04) [27]
> CmdStr:="ATI"#13#10;
> WriteFile(....CmdStr[1],.....);
Щас попробую
← →
Digitman (2003-01-16 15:04) [28]
> ksa3003
Приношу извинения.
Все же конструкция с разыменованием PChar(s)^ в дан.контексте верна
Неверна она будет в случае типиз.указ.аргумента, передаваемого константой
> Модемчик чист :)
Вот ты выполнил
hCom := CreateFile(PChar("COM1"),GENERIC_READ+GENERIC_write,0,nil,OPEN_EXISTING,0,0);
чему равно значение hCom после выполнения этой строчки ? Где проверка на успешность выполнения ф-ции ?
← →
ksa3003 (2003-01-16 15:13) [29]Добавим
if fSuccess then ShowMessage("Работаем!")
else ShowMessage("Error of initiate ComPort...");
перед
WriteFile
Модем молчит
← →
Digitman (2003-01-16 15:48) [30]1. Ты уверен, что модем "сидит" на COM1 ? Что говорят св-ва модема и успешна ли встроенная диагностика модема ?
2. Если таки fSuccess = True, то почему далее по тексту не анализируешь результат, возвращаемый WriteFile ?
← →
ksa3003 (2003-01-17 08:44) [31]Заработала!!!!! Ура!!!!! Всем болбшое спасибо!!!!!
Персанальное сбасибо Digitman
И ещё один вопрос
Как посмотреть сколько в буфере порта данных ,пробовал ч.з
cbInQue/cbOutQue а там только нули ,может подскажити в чём дело
← →
jack128 (2003-01-17 09:03) [32]var stat: TCOMSTAT;
errs: DWORD;
begin
// Do nothing if port has not been opened
Result := 65535;
if not Connected then
exit;
// Get count
ClearCommError( Handle, errs, @stat );
Result := stat.cbInQue;
end;
Должен работать...
Вроде :)
← →
jack128 (2003-01-17 09:07) [33]Да забыл сказать
s:="ati"+"<cr>"; - ЭТО КРУТО!!
← →
ksa3003 (2003-01-17 11:31) [34]ВСЁ. Заработала. Сбасибо.
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.03.13;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.007 c