الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف اتعامل مع serial port

مغلق
بدأه jrahma في 29 نوفمبر 2004 · 5 رد · 1,180 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هل يمكن لأحد أن يساعدني خطوة بخطوة في كيفية استخدام serial port ووضع البيانات التي يقرؤها في memo بدلاً من HyperTerminal الذي يأتي مع الويندوز؟

شكراً

#2

السلام عليكم

goolg it first

http://www.google.com/search?hl=en&q=delph...G=Google+Search

هناك الكثير من الوصلات التي قد تفيدك

http://www.delphi-central.com/serial.aspx

المعذرة ليس لدي الوقت للتدقيق في تلك الوصلات و تجربتها .

CIONO1

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#4
Title: Access the serial port in Windows XP
Author: Tomas Rutkauskas
Product: Delphi 4.x (or higher)
Post Date: 11/14/2002

Problem/Question/Abstract:

How I do to access the serial or paralell port in Windows XP?

Answer:

The example below sends a char 'R' to the port, then reads a line until CR or LF is encountered, then processes a line via ParseData. Then all is repeated until Terminated is True.

procedure ProcessCOMPortData(FPortName: string);
var
  LPortHandle: THandle;
  LInBuffer: array[0..1023] of Char;
  LBytesWritten, LBytesRead: Cardinal;
  LOutBuffer: Char;
  LOverlapped: TOverlapped;
  LEvent: TEvent;
  LOldCommTimeouts, LCommTimeouts: TCommTimeouts;
  LPCommConfig: PCommConfig;
  LCommConfig: TCommConfig;
  CommConfigSize: Cardinal;
  LEOL: Boolean;
  LIndex: Integer;
begin
  ZeroMemory(@LOverlapped, SizeOf(TOverlapped));
  ZeroMemory(@LCommTimeouts, SizeOf(TCommTimeouts));
  ZeroMemory(@LCommConfig, SizeOf(TCommConfig));
  LPortHandle := INVALID_HANDLE_VALUE;
  LEvent := nil;
  LPCommConfig := nil;
  try
    CommConfigSize := 0;
    LPCommConfig := @LCommConfig;
    GetDefaultCommConfig(PChar(FPortName), LPCommConfig^, CommConfigSize);
    GetMem(LPCommConfig, CommConfigSize);
    GetDefaultCommConfig(PChar(FPortName), LPCommConfig^, CommConfigSize);
    LEvent := TEvent.Create(nil, True, False, '');
    LOverlapped.hEvent := LEvent.Handle;
    LPortHandle := CreateFile(PChar(FPortName), GENERIC_READ or GENERIC_WRITE, 0,
      nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
    if (LPortHandle = INVALID_HANDLE_VALUE) then
      Exit;
    SetCommConfig(LPortHandle, LPCommConfig^, CommConfigSize);
    GetCommTimeouts(LPortHandle, LOldCommTimeouts);
    SetCommTimeouts(LPortHandle, LCommTimeouts);
    while not Terminated do
    begin
      PurgeComm(LPortHandle, PURGE_TXCLEAR or PURGE_RXCLEAR or
        PURGE_RXABORT or PURGE_TXABORT);
      LOutBuffer := 'R';
      WriteFile(LPortHandle, LOutBuffer, Length(LOutBuffer), LBytesWritten,
        @LOverlapped);
      GetOverlappedResult(LPortHandle, LOverlapped, LBytesWritten, True);
      if LBytesWritten = 1 then
      begin
        ZeroMemory(@LInBuffer, SizeOf(LInBuffer));
        ReadFile(LPortHandle, LInBuffer[0], 1, LBytesRead, @LOverlapped);
        case LEvent.WaitFor(50) of
          wrSignaled:
            begin
              GetOverlappedResult(LPortHandle, LOverlapped, LBytesRead, True);
              LEOL := False;
              LIndex := LBytesRead;
              while not LEOL and (LIndex < SizeOf(LInBuffer)) do
              begin
                ReadFile(LPortHandle, LInBuffer[LIndex], 1, LBytesRead, @LOverlapped);
                GetOverlappedResult(LPortHandle, LOverlapped, LBytesRead, True);
                LEOL := (LInBuffer[LIndex] = #$0A) or (LInBuffer[LIndex] = #$0D);
                Inc(LIndex);
              end;
              try
                ParseData(LInBuffer);
              except
              end;
            end;
          wrTimeout, wrAbandoned, wrError:
            begin
              Sleep(100);
            end;
        end;
      end;
    end;
  finally
    SetCommTimeouts(LPortHandle, LOldCommTimeouts);
    CloseHandle(LPortHandle);
    FreeAndNil(LEvent);
    if Assigned(LPCommConfig) then
      FreeMem(LPCommConfig);
  end;
end;
#5

Aid_fitr.jpg

بمناسبة حلول عيد الأضحى المبارك،(اليوم عيدنا ببلاد المغرب) أتقدم بأحر التهاني الشخصية إلى كل الإخوة بمنتدى Arabteam200 و إلى كافة الأمة الإسلامية، و أضمنها بأطيب المتمنيات و بموصول الصحة والعافية و البركةفي العمر ،وأتمنى للمنتدى اطراد التقدم والازدهار.

**********************************************************************

هذا لنك لكيفية استعمال منفذ RS232 باستعمال دوال WinApi في الديلفي

Using a PC's Serial Port

و إذا كنت تستعمل serial port باستمرار فعليك تثبيت هذا الكوبننت المتميز و القوي .فهو يحتوي بالإضافة إلى المركب علىأمثلة و ملف المساعدة HelpFile الكامل (شكرا لماهر احمد):

ComPort Library version 2.64

تم تعديل هذه المشاركة بواسطة ikossan في 21 يناير 2005 في 17:34

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#6

شكرا لك

وإن شاء الله ينعاد عليك بالصحه والسلامه

هذا الموضوع مغلق.

مواضيع مشابهة