Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > опять com порты


Автор: СЭНСЭЙ 17.7.2009, 17:42
в который раз пытаюсь наладить работу с ком портами.
Вроди бы простая штука а столько проблем.
Решил попробовать следующий код
Код

function InPort(PortAddr:word): byte;
{$IFDEF WIN32}
assembler; stdcall;
asm
        mov dx,PortAddr
        in al,dx
end;
{$ELSE}
begin
  Result := Port[PortAddr];
end;
{$ENDIF}

procedure OutPort(PortAddr:  
          word; Databyte: byte);
{$IFDEF WIN32}
assembler; stdcall;
asm
   mov al,Databyte
   mov dx,PortAddr
   out dx,al
end;
{$ELSE}
begin
  Port[PortAddr] := DataByte;
end;
{$ENDIF} 


вопрос - как указывать здесь ком порт?
я так понимаю PortAddr это адрес порта процессора?

Автор: СЭНСЭЙ 17.7.2009, 18:34
Еще пробовал использовать компонент Comm32 из книги Флеонова.
Соединил два порта нульмодемным кабелем.
Поместил на форму два компонента для каждого порта.
В один пишу а второй слушаю.
Но почему то посланные данные на один порт на втором не поступают.
Помогите кто нибудь.

Автор: bems 17.7.2009, 18:38
про in забудь

Автор: kami 17.7.2009, 18:38
Цитата(СЭНСЭЙ @  17.7.2009,  18:34 Найти цитируемый пост)
Помогите кто нибудь.

Чем? протолкнуть данные от одного порта к другому? smile 
Где выдержки из неработающего кода, описание сделанных настроек компонентов для работы с COM-портом?
Цитата(СЭНСЭЙ @  17.7.2009,  18:34 Найти цитируемый пост)
использовать компонент Comm32 из книги Флеонова

Это когда Фленовы-Фараоновы стали писать свои компоненты?  smile 

Автор: Alexeis 17.7.2009, 18:49
СЭНСЭЙ, на самом деле в разделе WinApi есть куча компонентов и примеров. Я сам пробовал, работает нормально. Только доступ к ком порту нужно осуществлять через WinApi и забыть про команды ОС реального времени типа MSDOS.

Автор: СЭНСЭЙ 18.7.2009, 11:19
Цитата(kami @ 17.7.2009,  18:38)
Чем? протолкнуть данные от одного порта к другому? girl_crazy 


Ты что? Блондинка?

Добавлено через 5 минут и 44 секунды
Цитата(kami @ 17.7.2009,  18:38)
Где выдержки из неработающего кода, описание сделанных 

Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Comm32, StdCtrls;

type
  TForm1 = class(TForm)
    Comm321: TComm32;
    Button1: TButton;
    Edit1: TEdit;
    Button2: TButton;
    Button3: TButton;
    Comm322: TComm32;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Comm322ReceiveData(Buffer: Pointer; BufferLength: Word);
    procedure Comm321ReceiveData(Buffer: Pointer; BufferLength: Word);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
comm321.BaudRate:=9600;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
comm321.StartComm;
//comm322.StartComm;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
send:string;
begin
send:='';
if inputquery('request data','sending data',send)
then
comm321.WriteCommData(PChar(send+#13#10),length(send)+2);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
comm321.StopComm;
//comm322.StopComm;
end;

procedure TForm1.Comm322ReceiveData(Buffer: Pointer; BufferLength: Word);
var
recived:string;
begin
Recived:=PChar(Buffer);
edit1.Text:=recived;
end;

procedure TForm1.Comm321ReceiveData(Buffer: Pointer; BufferLength: Word);
var
recived:string;
begin
Recived:=PChar(Buffer);
edit1.Text:=recived;
end;

end.



как видно здесь используется компонент COMM32, который Фленов конечно же не писал, а всего лишь
продемонстрировал его использование в своей книге "Делфи глазами хакера", и к книге прилагал
дополненный и улучшеный им компонент COMM32. На сколько я понимаю этот компонент
как раз и использует функции WinApi
comm321 настроен как СОМ1
а comm322 как СОМ2

Ошибок в этом коде не возникает но почему то данные посланные с одного порта на втором не принимаются.
Два порта соединены нульмодемным кабелем.

Автор: kami 18.7.2009, 12:40
Цитата(СЭНСЭЙ @  18.7.2009,  11:19 Найти цитируемый пост)
Ты что? Блондинка?

Нет. БлондинкО.
А чего ты ожидал после фразы "у меня не работает программа с Comm32, в чем может быть дело"? (утрирую, конечно, но суть передал).
А второй ком32 подключен к порту, или висит мертвым грузом, чего-то ожидая? (на кнопке button1 его активация закомментирована)

Добавлено через 3 минуты и 36 секунд
Цитата(СЭНСЭЙ @  18.7.2009,  11:19 Найти цитируемый пост)
продемонстрировал его использование в своей книге "Делфи глазами хакера"

Сжечь с соблюдением обрядов черной магии. Не оффтоп и не шутка.

Автор: Keeper89 18.7.2009, 16:34
Цитата(kami @  18.7.2009,  13:40 Найти цитируемый пост)
Сжечь с соблюдением обрядов черной магии. Не оффтоп и не шутка. 

за что ж ты так бедного Фленова )) ну пишет он "пацанские" книжки с крутым словом "хакер" на обложке... может он так молодежь хочет приобщить в программированию smile

СЭНСЭЙ, вот несколько ссылок для прочтения:
http://www.delphisources.ru/pages/faq/base/what_is_port.html
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=388
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=389
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=390
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=399
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=406

Автор: kami 18.7.2009, 16:47
Модератор: Сообщение скрыто.

Автор: Christoph 19.7.2009, 00:59
BCPort есть помоему такой компонент...скачай с инета архив и там примеров куча, а там если что изменишь что то  smile 

Автор: СЭНСЭЙ 20.7.2009, 09:45
Цитата(kami @ 18.7.2009,  12:40)
А чего ты ожидал после фразы "у меня не работает программа с Comm32, в чем может быть дело"? (утрирую, конечно, но суть передал).
А второй ком32 подключен к порту, или висит мертвым грузом, чего-то ожидая? (на кнопке button1 его активация закомментирована)

просто это вопрос тем кто с этой компонентой сталкивался и имеет опыт
или тем кто может помочь разобраться а не критиковать постановку вопроса так,
как будто это главная цель прибывания на форуме

Добавлено через 1 минуту и 39 секунд
ошибся малеха.
второй порт раскомментирован и тоже включается
это я комментил что бы сторонней программой сканить второй порт

Добавлено через 8 минут и 27 секунд
Keeper89 , спасибо
согласен что содержание книги не соответствует названию,
но все же там есть и другие работающие примеры которые я проверял лично.

спасибо за ссылки, но я уже такого много читал и WinApi шные функции для 
СОМ порта юзать пробовал
но ничего не получалось все равно.
Попробую еще раз сейчас.
Кстати нужно проверить работают ли оба порта.
Вот еще вопрос - можно ли програмно проверить не выгорел ли ком порт?

Автор: kami 20.7.2009, 12:35
Цитата(СЭНСЭЙ @  20.7.2009,  09:45 Найти цитируемый пост)
а не критиковать постановку вопроса так,как будто это главная цель прибывания на форуме

Проблем неработоспособности программы может быть море. Телепаторы не справятся с такой слишком обобщенной постановкой вопроса, которая прозвучала в первом посте.
Цитата(СЭНСЭЙ @  20.7.2009,  09:45 Найти цитируемый пост)
просто это вопрос тем кто с этой компонентой сталкивался и имеет опыт

Все компоненты, которые работают с COM-портами по сути своей однотипны и отличаются по большому счету только названиями методов и свойств.

Цитата(СЭНСЭЙ @  20.7.2009,  09:45 Найти цитируемый пост)
Вот еще вопрос - можно ли програмно проверить не выгорел ли ком порт?

Подключиться к нему гипертерминалом, а в первый отсылать что-нибудь.

Автор: СЭНСЭЙ 20.7.2009, 13:56
Цитата(kami @ 20.7.2009,  12:35)
Подключиться к нему гипертерминалом, а в первый отсылать что-нибудь.

Оооо! Сейчас попробую!

Автор: СЭНСЭЙ 20.7.2009, 15:07
что то ничего не получилось
создал два соединения в гипертерминале
один для СОМ1 а другой для СОМ2
в одном посылаю файл текстовый а во втором принимаю
вобщем одни сбои соединения

Автор: Romikgy 22.7.2009, 12:46
может нуль модем не полный .... юзай програмное управление потоком

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)