تعد دلفي أداة لتطوير التطبيقات المرئية السريعة مع مزايا الوظائف القوية وسهولة الاستخدام والتنفيذ السريع للتعليمات البرمجية. وهي تلعب دورًا متزايد الأهمية في بناء أنظمة معلومات المؤسسة. العديد من المبرمجين على استعداد لاختيار دلفي كأداة لتطوير البرامج المختلفة . ومع ذلك، فإن المشكلة هي أن دلفي ليس لديها التحكم في الاتصال التسلسلي الخاص بها، ولا يوجد ذكر للاتصال التسلسلي في وثائق المساعدة الخاصة بها، مما يسبب الكثير من الإزعاج للمطورين الذين يقومون بتجميع برامج الاتصال.
حاليًا، هناك ثلاث طرق شائعة الاستخدام لتنفيذ الاتصال التسلسلي باستخدام دلفي: إحداهما هي استخدام عناصر التحكم، مثل التحكم MSCOMM والتحكم SPCOMM، والأخرى هي استخدام وظائف API، والثالثة هي استدعاء برامج الاتصال التسلسلية الأخرى. من بينها، يعد استخدام واجهة برمجة التطبيقات (API) لكتابة برامج الاتصال التسلسلية أكثر تعقيدًا ويتطلب الكثير من المعرفة في مجال الاتصال. بالمقارنة، من السهل نسبيًا استخدام عنصر التحكم SPCOMM، ويحتوي عنصر التحكم على خصائص وأحداث غنية مرتبطة ارتباطًا وثيقًا باتصال المنفذ التسلسلي، ويوفر عمليات متنوعة على المنفذ التسلسلي، كما يدعم أيضًا تعدد الخيوط. تقدم المقالة التالية استخدام عنصر التحكم SPCOMM بالتفصيل مع الأمثلة.
تثبيت SPCOMM
1. حدد خيار تثبيت المكون في القائمة المنسدلة المكون، واملأ المسار الذي يوجد به عنصر تحكم SPCOMM في اسم ملف الوحدة، ويمكن استخدام القيم الافتراضية لعناصر أخرى، وانقر فوق الزر "موافق".
2. بعد التثبيت، سيظهر COM للتحكم باللون الأحمر في لوحة تحكم النظام. يمكنك الآن استخدام عناصر تحكم COM تمامًا مثل عناصر التحكم الخاصة بـ Delphi.
خصائص وأساليب وأحداث SPCOMM
1. السمات
●CommName: يشير إلى أسماء المنافذ التسلسلية مثل COM1 وCOM2؛
●BaudRate: تم تعيين معدل الباود وفقًا للاحتياجات الفعلية. يمكن أيضًا تغيير هذه القيمة بعد فتح المنفذ التسلسلي، وسيتغير معدل الباود الفعلي وفقًا لذلك؛
●ParityCheck: يشير إلى ما إذا كان التحقق من التكافؤ مطلوبًا أم لا؛
●ByteSize: يتم تعيين طول البايت وفقًا للحالة الفعلية؛
●التكافؤ: بت التكافؤ؛
●StopBits: بتات التوقف؛
●SendDataEmpty: هذه سمة منطقية. عندما تكون صحيحة، فهذا يعني أن المخزن المؤقت للإرسال فارغ، أو لا توجد معلومات في قائمة انتظار الإرسال عندما تكون خاطئة، فهذا يعني أن المخزن المؤقت للإرسال ليس فارغًا، أو هناك هي المعلومات في قائمة انتظار الإرسال.
2. طريقة
●يتم استخدام أسلوب Startcomm لفتح المنفذ التسلسلي عند فشل عملية الفتح، عادةً ما يتم الإبلاغ عن خطأ. هناك سبعة أنواع رئيسية من الأخطاء: ⑴ تم فتح المنفذ التسلسلي؛ ⑵ خطأ في فتح المنفذ التسلسلي؛ ⑶ مقبض الملف ليس مقبض اتصال؛ ⑷ لا يمكن تثبيت ذاكرة التخزين المؤقت للاتصال؛ لا يمكن إنشاء عملية القراءة؛ ⑺ لا يمكن إنشاء عملية الكتابة؛
●يتم استخدام طريقة StopComm لإغلاق المنفذ التسلسلي وليس لها قيمة إرجاع؛
طريقة ●WriteCommData(pDataToWrite: PChar;dwSizeofDataToWrite:Word) هي دالة ذات قيمة إرجاع منطقية يتم استخدامها لإرسال سلسلة إلى عملية الكتابة وترجع صحيحًا إذا كان الإرسال ناجحًا وخطأ إذا فشل الإرسال. سيؤدي تنفيذ هذه الوظيفة إلى الحصول على القيمة المرجعة على الفور، وسيتم تنفيذ عملية الإرسال لاحقًا. تحتوي هذه الدالة على معلمتين، حيث pDataToWrite هو السلسلة التي سيتم إرسالها، وdwSizeofDataToWrite هو طول السلسلة التي سيتم إرسالها.
3. حدث
●OnReceiveData: PROcedure (المرسل: TObject؛ المخزن المؤقت: المؤشر؛ BufferLength: Word) للكائن
سيتم تشغيل هذا الحدث عند إدخال البيانات إلى المخزن المؤقت، حيث يمكن معالجة البيانات الواردة من المنفذ التسلسلي. يحتوي المخزن المؤقت على البيانات المستلمة، وBufferLength هو طول البيانات المستلمة.
●OnReceiveError: الإجراء (المرسل: TObject؛ قناع الحدث: DWORD)
يتم تشغيل هذا الحدث عندما يكون هناك خطأ في تلقي البيانات.
استخدام SPCOMM
ما يلي هو مثال للاتصال التسلسلي باستخدام التحكم SPCOMM.
بأخذ الاتصال بين الكمبيوتر ووحدة التحكم الدقيقة 8051 كمثال، يجب علينا أولاً ضبط إشارة المصافحة بينهما. افترض أن بروتوكول الاتصال بينهما هو: إطار واحد من البيانات من جهاز الكمبيوتر إلى 8051 يبلغ 6 بايت، وإطار واحد من البيانات من 8051 إلى جهاز الكمبيوتر يبلغ أيضًا 6 بايت. عندما يرسل الكمبيوتر (F0,01,FF,FF,01,F0) ، يمكن أن يستقبل 8051 إطارًا (F0,01,FF,FF,01,F0) للإشارة إلى نجاح مصافحة اتصال البيانات، ويمكن للاثنين المتابعة تقوم البروتوكولات بنقل البيانات إلى بعضها البعض.
إنشاء مشروع جديد COMM.DPR، وتعيين خاصية NAME للنموذج إلى FCOMM، وتعريف عنوان النموذج كاختبار اتصال، وإضافة عناصر التحكم المقابلة.
1. قم بتعيين سمات COMM1:
●معدل الباود: 4800؛
● بت التكافؤ: لا شيء؛
● طول البايت: 8؛
●قطعة التوقف: 1؛
●المنفذ التسلسلي: COM1.
سيتم عرض البيانات المرسلة والمستلمة في المذكرة1. قم بتخزين النموذج الجديد كـ Comm.pas.
2.اكتب كود المصدر
// وصف متغير
فار
fcomm:TFCOMM;
سلسلة العرض:سلسلة؛
أنا: عدد صحيح؛
rbuf,sbuf:صفيف[16] من البايت;
// افتح المنفذ التسلسلي
الإجراء TFCOMM.FormShow(Sender: TObject);
يبدأ
comm1.StartComm;
نهاية؛
// أغلق المنفذ التسلسلي
الإجراء TFCOMM.FormClose(Sender: TObject; var Action: TCloseAction);
يبدأ
comm1.StopComm;
نهاية؛
// تخصيص عملية إرسال البيانات
إجراء إرسال البيانات؛
فار
أنا: عدد صحيح؛
commflg:boolean;
يبدأ
سلسلة العرض:='';
commflg:=true;
لأني: = 1 إلى 6 افعل
يبدأ
إذا لم يكن fcomm.comm1.writecommdata(@sbuf[i],1) إذن
يبدأ
commflg:=false;
استراحة؛
نهاية؛
// التأخير بين البايتات عند الإرسال
النوم(2);
viewstring:=viewstring+intttohex(sbuf[i],2)+'';
viewstring:='إرسال'+viewstring;
fcomm.memo1.lines.add(viewstring);
fcomm.memo1.lines.add('' );
إذا لم يكن commflg ثم messagedlg('فشل الإرسال!',mterror,[mbyes],0);
نهاية؛
// حدث النقر على زر الإرسال
الإجراء TFCOMM.Btn_sendClick(Sender: TObject);
يبدأ
sbuf[1]:=byte($ f0); // رأس الإطار
sbuf[2]:=byte($ 01); //رقم الأمر
sbuf[3]:=byte($ ff);
sbuf[4]:=byte($ ff);
sbuf[5]:=بايت($01);
sbuf[6]:=byte($ f0); // نهاية الإطار
senddata;// اتصل بوظيفة الإرسال
نهاية؛
// عملية الاستلام
الإجراء TFCOMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
فار
أنا: عدد صحيح؛
يبدأ
سلسلة العرض:='';
move(buffer^,pchar(@rbuf^),bufferlength);
لأني:=1 لطول المخزن المؤقت
viewstring:=viewstring+intttohex(rbuf[i],2)+'';
viewstring:='receive'+viewstring;
memo1.lines.add(viewstring);
memo1.lines.add('' );
نهاية؛
إذا عرضت المذكرة 1 إرسال F0 01 FF FF 01 F0 واستلام F0 01 FF FF 01 F0، فهذا يعني أن المنفذ التسلسلي قد أرسل البيانات بشكل صحيح واستقبل البيانات بشكل صحيح، وأن الاتصال التسلسلي ناجح.