الاتصالات التسلسلية مع المعالجة

الاتصالات التسلسلية مع المعالجة

الاتصالات التسلسلية مع المعالجة

فئة المسلسل

عمليات استخدام الاتصالات التسلسلية في اﻟﻤﻌﺎﻟﺠﺔ يتم تعريفها في الفصل Serialأول عملية يتم إجراؤها لاستخدامها في برنامج (رسم تخطيطي) سيتم دمجه في الكود باستخدام import processing.serial.*;.

جدول المحتويات

    فصل Serial لديها خمسة منشئين مختلفين اعتمادًا على المعلمات المشار إليها. المعلمة الوحيدة المطلوبة هي الكائن الأصلي (أصل) والذي يتوافق عادةً مع البرنامج الرئيسي (على سبيل المثال، نافذة البرنامج) للفئة PApplet. كما هو معتاد، سيكون الوالد هو البرنامج الذي تتم كتابته (ملف رسم تخطيطي الحالي)، ستكون قيمة هذه المعلمة الإلزامية الأولى this.

    المعلمات الخمس الأخرى التي يمكن تمريرها إلى المنشئ هي ① السرعة، ② اسم المنفذ التسلسلي ③ التكافؤ المستخدمة في البروتوكول، ④ بتات البيانات و ⑤ بتات التوقف. المعلمات التي يتم تمريرها بشكل متكرر، بالإضافة إلى الكائن الأصلي المطلوب، هي اسم المنفذ وسرعته.

    La سرعة الاتصالات التسلسلية هو عدد صحيح (int) أن الافتراضي إلى القيمة 9600 إذا لم يتم تمرير هذه المعلمة إلى المنشئ.

    المنافذ التسلسلية المتاحة. طريقة القائمة

    El اسم المنفذ له الشكل الذي يحدده النظام، بهذه الطريقة، على سبيل المثال في توزيعات لينكس سيكون شيء من هذا القبيل / ديف / ttyS4 / dev / ttyACM3 o / dev / ttyUSB1 (حسب نوع المنفذ)، بينما في نظام التشغيل Windows سيكون الأمر مشابهًا COM12. ما لم يكن المنفذ مرتبطًا فعليًا بجهاز ما، فلن يعرف البرنامج عادةً المنفذ الذي سيتم استخدامه. إحدى الطرق الشائعة لتحديد المنفذ هي الحصول على قائمة بالمنفذ المتاح وعرضها للمستخدم والسماح له باختيار المنفذ الذي يريد استخدامه. طريقة Serial.list() إرجاع متجه للسلاسل النصية (String) مع أسماء المنافذ المتوفرة على النظام.

    المنفذ الذي تستخدمه المكتبة بشكل افتراضي Serial هو أول من تم إرجاعه بواسطة الطريقة list (بالتاكيد COM1 على ويندوز أو / ديف / ttyS0 en جنو / لينكس). باستثناء السياقات المحدودة جدًا التي تكون فيها الأجهزة التي يتم العمل معها معروفة تمامًا (مثل النظام في وضع الكشك)، لا يتم حذفها عادةً ويتم الإشارة إلى منفذ الوجهة صراحةً.

    معالجة منفذ القائمة التسلسلية Linux التسلسلي ttyACM ttyS ttyUSB

    توضح لقطة الشاشة أعلاه إخراج النظام جنو / لينكس الذي يحتوي على أربعة منافذ تسلسلية RS-232 (ttyS0 a ttyS3) وخمسة محولات من نوعين (ttyACM0 a ttyACM1 y ttyUSB0 a ttyUSB2).

    أذونات أجهزة Linux التسلسلية ttyACM ttyS ttyUSB

    ومن أجل الوصول إلى المنافذ التسلسلية، يجب أن ينتمي المستخدم إلى المجموعة التي يعينه لها النظام، عادةً الكتابة البعيدة o الإتصال. في لقطة الشاشة للصورة أعلاه، يمكنك أن ترى أن المنافذ التسلسلية مدرجة مع ls /dev/tty[ASU]* -la بيرتينسين آل جروبو الإتصال التي لديها أذونات الوصول للقراءة والكتابة عليها.

    معلمات البروتوكول التسلسلي

    La التكافؤ من الاتصالات التسلسلية يتم التعبير عنه في اﻟﻤﻌﺎﻟﺠﺔ كحرف (char) والتي يمكن أن تأخذ القيم: ① N (لا شيء) لعدم الكشف عن التكافؤ، ② E (حتى) للإشارة إلى أن بت التكافؤ هو حتى، ③ O (غريب) للإشارة إلى أن بت التكافؤ أمر غريب، ④ M (علامة) لجعل دائما بت التكافؤ و⑤ S (الفضاء) لجعل واحدة دائما بت التكافؤ. القيمة الافتراضية، إذا لم يتم تمريرها إلى المنشئ كمعلمة، هي N (بدون التكافؤ).

    عدد بتات البيانات، وهو ثمانية بشكل افتراضي، يشير إلى عدد البتات التي تشكل حمولة البيانات الصافية (تسمى حرفًا أو أحيانًا كلمة) التي يتم إرسالها في كل وحدة أساسية من الإطار. يتم التعبير عن المعلمة التي تشير إلى عدد بتات البيانات كعدد صحيح (int).

    وأخيرًا، تشير المعلمة الخامسة المحتملة إلى مدة العلامة النهائية، معبرًا عنها بـ نقطة التوقف (نقطة التوقف) ، والذي يشار إليه كرقم ممثل في النقطة العائمة (float) والتي يمكن أن تأخذ القيم 1.0 (القيمة الافتراضية إذا لم يتم تمرير المعلمة إلى المنشئ)، 1.5أو 2.0.

    بناة الطبقة التسلسلية

    تعرض القائمة التالية مجموعات مختلفة من المعلمات التي يمكن تمريرها إلى مُنشئ الفئة Serial:

    • Serial(padre)
    • Serial(padre,puerto)
    • Serial(padre,velocidad)
    • Serial(padre,puerto,velocidad)
    • Serial(padre,puerto,velocidad,paridad,bits_datos,bits_parada)
    إنهاء الاتصالات التسلسلية. طريقة التوقف.

    لتحرير المنفذ التسلسلي المخصص عند إنشاء مثيل Serial، وأن تطبيقات النظام الأخرى يمكنها استخدامه، يتم إنهاء الاتصالات بهذه الطريقة stopالذي لا يتلقى المعلمات.

    إرسال البيانات من خلال المنفذ التسلسلي. طريقة الكتابة

    لإرسال البيانات، والطبقة Serial de اﻟﻤﻌﺎﻟﺠﺔ يتضمن الطريقة write التي يمكنك من خلالها إرسال①سلاسل نصية (String)، ② بايت أو ③ متجهات البايت (byte[]). ومن المثير للاهتمام أن نتذكر ذلك byte en اﻟﻤﻌﺎﻟﺠﺔ (في جافا) يمثل عددًا صحيحًا بين -128 و127، وبشكل افتراضي، تستخدم السلاسل الترميز UTF-16.

    قراءة البيانات من المنفذ التسلسلي

    لكي يتمكن البرنامج من أداء مهام أخرى أثناء تلقي البيانات عبر المنفذ التسلسلي، فمن المعتاد تخزينها في ملف العازلة البيانات التي تصل وقراءتها عند الاقتضاء. على الرغم من أنه ليس فعالًا جدًا في العادة، إلا أنه يمكنك إيقاف التطبيق لتحميل جميع البيانات المتاحة؛ ومع ذلك، فإن الشيء الأكثر شيوعًا هو قراءة المعلومات فور وصولها، سواء في كل تكرار drawعند توفر كمية معينة أو استلام كود خاص.

    كمية البيانات المتوفرة في المخزن المؤقت. الطريقة المتاحة

    لمعرفة ما إذا كانت البيانات قد وصلت العازلة سلسلة، الطريقة available إرجاع عدد البايتات التي تم تخزينها بالفعل في هذا العازلة. في كلتا الحالتين، يمكن لعمليات القراءة إرجاع قيمة خاصة (مثل -1 o null) عند محاولة تحميل البيانات من العازلة سلسلة عندما تكون فارغة.

    تحميل بايت واحد في كل مرة. طريقة القراءة

    الطرق الرئيسية للفئة Serial التي تعمل على قراءة المعلومات التي يتلقاها المنفذ التسلسلي هي تلك من النوع " read» والتي تختلف فيما بينها بشكل أساسي حسب نوع البيانات التي توصل فيها المعلومات الواردة.

    read يتم استخدامه لتسليم البايتات التي يتلقاها المنفذ التسلسلي كقيمة تتراوح بين 0 و 255. كنوع البيانات byte de اﻟﻤﻌﺎﻟﺠﺔ يمثل النطاق بين -128 و127 وليس بين 0 و255، فمن الضروري استخدام int لتمثيل النطاق الذي تم إرجاعه بواسطة read. إذا حاولت القراءة مع read و العازلة السلسلة فارغة، ترجع القيمة -1

    قراءة الأحرف من المنفذ التسلسلي. طريقة readChar

    الطريقة readChar انها مماثلة ل read ولكنها ترجع قيمة بالتنسيق char بدل من int. كما هو الحال في الداخل، char en اﻟﻤﻌﺎﻟﺠﺔ (في جافا) يتم تخزينها ببايتين، وهي القيمة التي تم اختيارها للرجوع إليها عند القراءة readChar من العازلة سلسلة فارغة هي 0xFFFF o -1.

    تحميل سلسلة نصية. أساليب readString و readStringUntil.

    الطريقة readString إرجاع كائن String تم تشكيلها من جميع البيانات المتاحة في العازلة سلسلة في وقت التشاور معها.

    الطريقة readString ينشئ سلسلة نصية على افتراض أن وحدات البايت التي يتلقاها المنفذ التسلسلي موجودة بالتنسيق ASCII لذلك لا يمكن استخدام طريقة القراءة هذه لترميزات أخرى.

    إذا كان الأمر يتعلق بقراءة العازلة سلسلة مع readString عندما تكون فارغة، تكون قيمة الإرجاع null.

    الطريقة readStringUntil اضف إليه readString القدرة على إرجاع المعلومات المحملة في العازلة سلسلة تقسمها بحرف خاص (رمز) يتم تمريره كمعلمة. تتيح لنا هذه الطريقة في قراءة المعلومات المستلمة التمييز بين الفواصل والفاصلات التي تساعد في تفسير المعلومات المستلمة.

    الطريقة readStringUntil أعد null عندما تكون في العازلة لم تعثر السلسلة على الكود المحدد في الوسيطة التي تم تمريرها إليها (بايت واحد).

    في الكود التالي ل اردوينو يرسل ثلاث رسائل من خلال المنفذ التسلسلي. ينتهي الأولان في علامة تبويب، لذا سيظهران في وحدة التحكم. اﻟﻤﻌﺎﻟﺠﺔ، بينما الثالث، على الرغم من أنه سيتم إرساله عبر المنفذ التسلسلي، فلن تتم قراءته readStringUntil(9) لأنه لا ينتهي بعلامة تبويب (مع الكود ASCII 9).

    معالجة Serial.readStringحتى يتم قراءة السلسلة التسلسلية

    قراءة كتل البيانات. أساليب readBytes و readBytesUntil.

    تُستخدم الطرق الموضحة أعلاه لقراءة البيانات بتنسيقات محددة، أو لقراءة كتل من البيانات الأولية أو بتنسيق غير منصوص عليه في اﻟﻤﻌﺎﻟﺠﺔ يتم استخدام الأساليب readBytes y readBytesUntil

    الطريقة readBytes حاول قراءة البيانات المتوفرة في العازلة مسلسل. إذا لم يتم تمرير أي معلمة إلى الأسلوب readBytes تتم قراءة جميع البيانات المتاحة وإعادتها في ناقل (byte[]). إذا تم تمرير عدد صحيح كمعلمة، تتم قراءة الحد الأقصى لعدد البايتات المشار إليها بواسطة هذا الرقم ويتم إرجاعها أيضًا كمتجه.

    هناك طريقة ثالثة للاستخدام readBytes، أكثر كفاءة، والتي تأخذ كوسيطة ناقل بايت يتم فيه إدخال محتويات الملف العازلة مسلسل. طريقة الاستخدام هذه readBytes إرجاع عدد صحيح (int) الذي يمثل عدد البايتات التي تمت قراءتها.

    الطريقة readBytesUntil يعمل بطريقة مشابهة ولكنه يتضمن معلمة أولى تمثل قيمة البايت، إذا وجدت في ملف العازلة، سيشير إلى نهاية القراءة. في هذه الطريقة، المعلمة التي تحدد الحد الأقصى لعدد البايتات التي سيتم قراءتها ليس لها معنى حيث سيتم تحديد المبلغ بواسطة رمز خاص.

    لاختبار تشغيل الطريقة readBytes لنفترض الكود التالي لـ اردوينو الذي يرسل النص من خلال المنفذ التسلسلي.

    البرنامج المثال التالي ل اﻟﻤﻌﺎﻟﺠﺔ يقرأ النص من المنفذ التسلسلي في كتل 32 بايت (TOTAL_BYTES). للتحقق من أنه يعمل، فإنه يعرضه من خلال وحدة التحكم كأحرف، مما يفرض نوع البايتات المستلمة char.

    في لقطة الشاشة التالية، يمكنك رؤية كيفية عرضها في وحدة التحكم اﻟﻤﻌﺎﻟﺠﺔ البيانات التي تم تحميلها في كتل (بحد أقصى) 32 بايت (TOTAL_BYTES) كل مرة. ولكن هناك مشكلة سبق أن تحدثنا عنها: اردوينو وقد تم إرسال آيات فيديريكو غارسيا لوركا من المثال المشفر كنص في التنسيق UTF-8، وهو ليس الذي يستخدم اﻟﻤﻌﺎﻟﺠﺔ (جافا)، ماذا تفضل UTF-16 لذلك أولئك الذين لا يتوافقون مع رتبة ASCII القابلة للطباعة يتم تفسيرها بشكل غير صحيح.

    معالجة Serial.readBytes UTF-16

    لحل هذه المشكلة، يمكن تحميل مجموعات الأحرف (محارف) وتحديد كائن جديد String إجبارها على أن يتم تمثيلها مع الترميز UTF-8 كما هو موضح في رمز المثال التالي.

    معالجة Serial.readBytes UTF-8

    قراءة أحدث البيانات الواردة. الأساليب الأخيرة والأخيرة.

    بينما بقية طرق القراءة (النوع " read») يقومون بتحميل معلومات العازلة السلسلة بنفس الترتيب الذي وصلت به (FIFO)، مع هاتين الطريقتين البايت الأخير الذي وصل إلى العازلة مسلسل. طريقة last ترجع قيمة البايت الأخير كـ a int y lastChar ترجع القيمة كـ a char.

    إدارة المخزن المؤقت التسلسلي

    على الرغم من أن الأساليب التي تم مشاهدتها حتى الآن تعمل بشكل مثالي، إلا أنها لا تمثل دائمًا أفضل طريقة لاستغلال الوصول إلى المنفذ التسلسلي. لتحميل البيانات، يجب عليهم التحقق بشكل دوري من حالة الملف العازلة سلسلة وقراءة البيانات المتوفرة في جزء متكرر من التعليمات البرمجية. الطريقة الأكثر فعالية بشكل عام هي قراءة البيانات فقط عندما تعلم أنها متاحة.

    قراءة المنفذ التسلسلي عند تلقي البيانات. حدث المسلسل.

    للوصول إلى العازلة serial عند استلام البيانات، يمكن استغلال الحدث التسلسلي من خلال إدارته من خلال تعريف الطريقة serialEvent. تستخدم هذه الطريقة المنفذ التسلسلي الذي يقوم بتشغيلها كوسيطة.

    حجم المخزن المؤقت التسلسلي. طريقة المخزن المؤقت.

    إذا كنت تعرف عدد البايتات التي تشكل كتلة من البيانات المفيدة، فيمكنك تحسين هذا النمط من قراءة البيانات بشكل أكبر. العازلة سلسلة من خلال serialEvent. طريقة buffer يسمح لك بتعيين عدد البايتات التي سيتم تخزينها في العازلة قبل إطلاق حدث تسلسلي. تتوقع الطريقة كمعلمة عددًا صحيحًا يمثل عدد البايتات.

    املأ المخزن المؤقت حتى يتم استلام القيمة. طريقة bufferUntil.

    بدلاً من تعيين استدعاء الأسلوب serialEvent لكمية من البيانات في العازلة، مع الأسلوب bufferUntil يمكنك تكوين تخزين البيانات حتى تصل قيمة خاصة ثم رفع الحدث التسلسلي. المعلمة التي تم تمريرها إلى هذه الطريقة هي أ int الذي يمثل القيمة التي تنتجها الدعوة إلى serialEvent.

    حذف البيانات المخزنة في المخزن المؤقت. الطريقة الواضحة.

    مع الطريقة clear يمكنك حذف البيانات الموجودة حاليا في العازلة. يمكن استخدام هذه الطريقة، على سبيل المثال، لبدء جلسة استقبال بيانات جديدة مع تجاهل البيانات المتبقية من الجلسة السابقة.

    تطبيق معالجة نموذجي لقراءة البيانات من خلال المنفذ التسلسلي

    وأخيرًا، من المناسب تلخيص عمليات الكائن Serial de اﻟﻤﻌﺎﻟﺠﺔ التي يتم استخدامها بشكل أكثر شيوعًا، من خلال مثال نموذجي لتلقي البيانات من خلال المنفذ التسلسلي لرسم رسم بياني بها، في هذه الحالة للمناطق المكدسة.

    استيراد المكتبة التسلسلية

    تحديد بروتوكول البيانات (الفواصل)

    تحديد كائن الفئة التسلسلية

    قم بإنشاء مثيل لكائن الفئة التسلسلية عن طريق تعيين المنفذ التسلسلي المستخدم

    تكوين المخزن المؤقت للمنفذ التسلسلي

    تنفيذ معالج للحدث التسلسلي

    قراءة المخزن المؤقت التسلسلي

    حالة البيانات الواردة

    إنهاء الاتصالات التسلسلية

    يوضح رمز المثال أدناه هذا الملخص باستخدام تطبيق وظيفي (رغم أنه بسيط جدًا) يقوم بإنشاء رسم بياني مساحي بالقيم التي يتم تلقيها من خلال المنفذ التسلسلي، وهو شيء مشابه لما تظهره الرسوم المتحركة التالية.

    رسم بياني مع معالجة البيانات المستلمة عبر المنفذ التسلسلي

    لكي لا نضيع في بقية البرنامج ونركز الاهتمام على الاتصالات التسلسلية معه اﻟﻤﻌﺎﻟﺠﺔ، يتم تمييز أسطر التعليمات البرمجية التي تتوافق مع العمليات السابقة.

    أكتب تعليق

    ربما تكون قد فاتتك